Linux 基础入门 02

一、用户&组管理

1.1 usermod

用来修改用户账号的各项设定

-c<备注>     #修改用户帐号的备注文字。
-d登入目录>    #修改用户登入时的目录。
-e<有效期限>  #修改帐号的有效期限。
-f<缓冲天数>  #修改在密码过期后多少天即关闭该帐号。
-g<群组>    #修改用户所属的群组。
-G<群组>    #修改用户所属的附加群组。
-l<帐号名称>  #修改用户帐号名称。
-L          #锁定用户密码,使密码无效。
-s<shell>     #修改用户登入后所使用的shell。
-u<uid>   #修改用户ID。
-U          #解除密码锁定。

-d 修改用户登入

[root@wentan ~]# su - admin
[admin@wentan ~]$ pwd
/home/admin
[admin@wentan ~]$ usermod admin -d /dwt/
usermod: user admin is currently used by process 2495
[admin@wentan ~]$ exit
logout
[root@wentan ~]# usermod admin -d /dwt/
[root@wentan ~]# su - admin
[admin@wentan ~]$ pwd
/dwt/

-g 修改属组

[root@wentan ~]# usermod admin -g root
[root@wentan ~]# su - admin
[admin@wentan ~]$ id
uid=1001(admin) gid=0(root) groups=0(root),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

-s 修改用户登录后的shell功能

[root@wentan ~]# usermod admin -s /sbin/nologin
[root@wentan ~]# su - admin
This account is currently not available.
1.2 groupmod

-n 改名为new_group

-g 改名 ID 改为 GID

[root@wentan ~]# groupmod admins -n admin123
[root@wentan ~]# groupmod admin123 -n admins
1.3 userdel&groupdel

用户和组的删除

-f 删除用户家目录及邮箱 目录名还在

[root@wentan ~]# useradd laowang
[root@wentan ~]# userdel laowang
[root@wentan ~]# cd /home/
[root@wentan home]# ls
admin  laowang  wentan
[root@wentan home]# useradd laowang
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
Creating mailbox file: File exists
[root@wentan home]# userdel -f laowang
[root@wentan home]# ls
admin  laowang  wentan
[root@wentan home]# ll
total 4
drwx------.  3 admin  wentan   99 Jan 10 09:42 admin
drwx------.  3   1002   1003   78 Jan 10 10:00 laowang
drwx------. 15 wentan wentan 4096 Jan  8 19:21 wentan
[root@wentan home]# cd laowang/
[root@wentan laowang]# cd /home/
[root@wentan home]# rm -rf laowang
[root@wentan home]# ls
admin  wentan[root@wentan home]# groupadd laowang
[root@wentan home]# groupdel laowang
1.4 /etc/shadow

用于存储 Linux 系统中用户的密码信息

[root@wentan home]# vi /etc/shadow
root:$6$pL84D17FANiN.6Wn$BWNR.GoMZd9Hgrxy.HwTcqOWnW5zb.RpbyNmfepe4V8W5pS3RrXfJshn9zyZzD7TAMB2m7PRWsgys6qKGVEiu.::0:99999:7:::
bin:*:17784:0:99999:7:::
daemon:*:17784:0:99999:7:::
···
"/etc/shadow" [readonly] 46L, 1336C
#字段信息
root:$6$pL84D17FANiN.6Wn$BWNR.GoMZd9Hgrxy.HwTcqOWnW5zb.RpbyNmfepe4V8W5pS3RrXfJshn9zyZzD7TAMB2m7PRWsgys6qKGVEiu.::0:99999:7:::
字段1:用户账户名称
字段2:加密秘钥字符串信息一般都是sha或md5加密
字段3:最近一次修改密码的时间,表示从1970.1.1到至今的天数
字段4:密码的最短使用天数
字段5:密码最长有效天数默认99999
字段6:密码即将到期警告天数默认7
字段7:在密码过期后账号保持活跃的天数,指天数之后账号被锁定,无效,表示从1970.1.1到至今的天数
字段8:账号失效时间,默认也是为空
1.5 chage

配置密码相关信息

-m   最小期限
-M  最大期限
-W  警告周期
-I  失效周期
-d  强制要求在下一次登录时更新密码
-l  显示秘密信息
-E  用户将于2020-12-30到期(XXXX-DD-YY)

实例

[root@wentan home]# useradd test
[root@wentan home]# passwd test
Changing password for user test.
New password: 123
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 123
passwd: all authentication tokens updated successfully.
[root@wentan home]# chage -m 0 -M 30 -W 7 -I 14 test
#查看
[root@wentan home]# vi /etc/shadow
test:$6$5zYgz4aIyGWUK8.P$X1ucmgCzqzXLdmr2qkm36TN3WBBTYhjQcG0Bjio59oPhcFZnO2s2Rlsd.fdAzohBvBJYC1/gs/155sO9oG0ER1:19002:0:30:7:14::

修改账号到期时间

[root@wentan home]# chage -E 2022-12-30 test
[root@wentan home]# vi /etc/shadow
test:$6$5zYgz4aIyGWUK8.P$X1ucmgCzqzXLdmr2qkm36TN3WBBTYhjQcG0Bjio59oPhcFZnO2s2Rlsd.fdAzohBvBJYC1/gs/155sO9oG0ER1:19002:0:30:7:14:19356:

下次登录时必须修改密码

[root@wentan home]# chage -d 0 test
1.6 /etc/login.defs

这个文件是用来创建用户是进行一定的限制,但是优先级低于/etc/passwd和/etc/shadow

[root@wentan home]# vi   /etc/login.defs
MAIL_DIR    /var/spool/mail  # 系统消息(邮件)文件夹
PASS_MAX_DAYS   99999        # 密码有效最大天数
PASS_MIN_DAYS   0            # 密码有效最小天数
PASS_MIN_LEN    5            # 密码长度
PASS_WARN_AGE   7            # 密码失效警告倒计时
UID_MIN                  1000    # 用户UID最小1000
UID_MAX                 60000    # 用户UID最大60000
SYS_UID_MIN               201    # 系统用户UID最小201
SYS_UID_MAX               999    # 系统用户UID最大999
GID_MIN                  1000    # 用户组GID最小1000
GID_MAX                 60000    # 用户组GID最大60000
SYS_GID_MIN               201
SYS_GID_MAX               999
CREATE_HOME yes             # 创建家目录
UMASK           077          # 创建文件/目录的权限掩码
USERGROUPS_ENAB yes          # 创建用户时同时生成组是  如果此处是no 创建的用户 会是gid=100(users)groups=100(users)
ENCRYPT_METHOD SHA512        # 加密  方法  sha 512 这个方法生成的密码在/etc/shadow里面的第二列会以$6$开头

二、sudo 命令执行过程

1.当用户执行sudo,系统会主动寻找/etc/sudoers 文件,判断该用户是否有执行sudo权限

2.确认用户具有可执行sudo权限后,让用户输入自己的密码确认

3.若密码输入成功,才可以执行sudo后续命令

[root@wentan ~]# vi /etc/sudoers
2.1 如何赋予用户sudo操作权限

通过useradd添加的用户,并不具备sudo权限。在ubuntu/centos等系统下,需要将用户加入admin组或者 wheel组或者sudo 组。以root 用户身份执行如下命令,将用户加入wheel/admin/sudo组。

usermod -a -G wheel 用户名

2.2 如何完成整个组一次性提权
sudo yum repolist all  #尝试执行一下只有root才能运行的命令
/etc/sudoers    #是可以让整个组 完成sudo提权  且不许要密码
[root@wentan home]# cd /etc/sudoers.d/
[root@wentan sudoers.d]# pwd
/etc/sudoers.d
[root@wentan sudoers.d]# touch admins
[root@wentan sudoers.d]# vim admins
%admins ALL=(ALL)  NOPASSWD:ALL
#官方文档推荐的做法,不是直接修改/etc/sudoers文件,而是将修改写在/etc/sudoers.d/目录下的文件中。
[root@wentan sudoers.d]# ls -l
total 4
-rw-r--r--. 1 root root 31 Jan 10 11:12 admins

三、加密算法 MD5 sha

MD5 加密算法 密码+随机数+id通过md5 算法最后变成128位字符

1.等长原则不管加密内容有多少字符,最后加密输出都是等长的

2.雪崩效应 只要两个文件有一个字符不一样那整个秘钥输出也是完全不同的

3.MD5 不可逆无法通过加密后字符来得出之前原来的密码
md5加密所谓破解完全不是靠逆推,靠撞库

[root@wentan dwt]# vi 123.txt
123456789
[root@wentan dwt]# vi 321.txt
fdsjs
gsd
g
f
....
[root@wentan dwt]# vi 1234.txt
l23456789[root@wentan dwt]# md5sum 123.txt
b2cfa4183267af678ea06c7407d4d6d8  123.txt
[root@wentan dwt]# md5sum 321.txt
08465df9a4e531e2d7a7000417a75915  321.txt
#雪崩效应
[root@wentan dwt]# md5sum 1234.txt
8515b5f02b20b947ba893974a0d529f0  1234.txt#撞库
[root@wentan dwt]# md5sum text.txt
b2cfa4183267af678ea06c7407d4d6d8  text.txt

四、linux的文件权限

4.1 stat

用于显示文件时间和 inode 内容,inode相关的知识会在后面的磁盘管理章节详细讲解,这边主要来看文件的时间

[root@wentan dwt]# stat 123.txt File: 123.txtSize: 9            Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 17977359    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:default_t:s0
Access: 2022-01-10 11:26:04.660852699 +0800    #访问时间
Modify: 2022-01-10 11:25:52.111794052 +0800    #修改(文件内容)时间
Change: 2022-01-10 11:25:52.113794061 +0800    #修改(文件状态)时间Birth: -
  • Access:访问时间,也叫atime

    • 当文件被访问的时候,这个时间就会发生改变
    • inux文件运行的时候查看文件又频繁数量又大,如果每次atime发生变化的时候都记入硬盘,或造成很大的压力。RHEL6开始relatime,atime延迟修改,必须满足其中一个条件:
      • 自上次atime修改后,已达到86400秒
      • 发生写操作时
  • Modify:修改时间,也叫mtime

    • 文件内容发生变化的时候,这个时间就会发生改变
  • Change:改变时间,也叫ctime

    • 当文件状态被改变的时候,这个时间就会发生修改
4.2 文件权限设置

可以赋予某个用户或组,能以何种方式,访问某个文件

Linux系统是一种典型的多用户系统,不同的用户除以不同的地位,拥有不同的权限。

为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。

-        rw-r--r--.    1      root    root   10      Jan 10 11:27        text.txt
文件类型    权限      连接数     属主   属组     大小      时间                  文件名

文件类型: - 普通文件 d 目录

每一个文件都会有UID GID 属主 属组

同时这个文件运行时也会带上UID GID 其实这个就是属主ID 属组ID

访问任何一个文件,我们有权限规定:

每个文件,都有3个对象,对三个对象赋予不同权限:

属主、属组、其他人

每个文件都有三个权限:

r    可读
w   可写
x   可执行
例如,对某脚本123.txt    属主root  属组root
对root而言某脚本A这个文件可读可写可以执行
对root这个组而言某脚本A这个文件只可以看和编写不能执行
对其他人而言某脚本A这个文件只可以看
于是这个文件的权限:  rwxrw-r--
三个对象 属主 属组 其他人
字母表示 rwx rw- r–
数字表示 7 6 4

在linux当中 权限可以用数字表示

r=4 w=2 x=1 每个对象需要相加

所以:rw-r–r-- 用数字表示: 644

4.3 chmod

修改 文件权限 ,可以一次性对三个对象 三个权限全都修改

[root@wentan dwt]# chmod 755 321.txt
//属主可读可写可执行   属组  可读可执行   其他人  可读可执行
[root@wentan dwt]# chmod 666 123.txt-rw-rw-rw-. 1 root root   9 Jan 10 11:25 123.txt
-rwxr-xr-x. 1 root root 136 Jan 10 11:20 321.txt
[root@wentan dwt]# chmod g-x,o-x 123.txt
-rw-rw-rw-. 1 root root   9 Jan 10 11:25 123.tx[root@wentan dwt]# chmod u+x,o-w text.txt
[root@wentan dwt]# chmod 764 1234.txt
-rwxr--r--. 1 root root  10 Jan 10 11:27 text.txt
-rwxrw-r--. 1 root root  10 Jan 10 11:30 1234.txt

八进制语法

chmod命令可以使用八进制数来指定权限。文件或目录的权限位是由9个权限位来控制,每三位为一组,它们分别是文件所有者(User)的读、写、执行,用户组(Group)的读、写、执行以及其它用户(Other)的读、写、执行。历史上,文件权限被放在一个比特掩码中,掩码中指定的比特位设为1,用来说明一个类具有相应的优先级。

# 权限 rwx 二进制
7 读 + 写 + 执行 rwx 111
6 读 + 写 rw- 110
5 读 + 执行 r-x 101
4 只读 r– 100
3 写 + 执行 -wx 011
2 只写 -w- 010
1 只执行 –x 001
0 000

例如, 765 将这样解释:

  • 所有者的权限用数字表达:属主的那三个权限位的数字加起来的总和。如 rwx ,也就是 4+2+1 ,应该是 7。
  • 用户组的权限用数字表达:属组的那个权限位数字的相加的总和。如 rw- ,也就是 4+2+0 ,应该是 6。
  • 其它用户的权限数字表达:其它用户权限位的数字相加的总和。如 r-x ,也就是 4+0+1 ,应该是 5。
4.4 chown

设置文件的属主和属组

[root@wentan dwt]# chown wentan:wentan text.txt
//修改属主和数组都是wentan
[root@wentan dwt]# chown admin 123.txt
//修改属主为admin
[root@wentan dwt]# chown :wentan 123.txt
//修改属组为wentan
[root@wentan dwt]# ll
total 16
-rwxrw-r--. 1 root   root    10 Jan 10 11:30 1234.txt
-rw-rw-rw-. 1 admin  wentan   9 Jan 10 11:25 123.txt
-rwxr-xr-x. 1 root   root   136 Jan 10 11:20 321.txt
drwxr-xr-x. 2 root   root    22 Jan  8 15:21 etc
-rwxr--r--. 1 wentan wentan  10 Jan 10 11:27 text.txt
4.5 chgrp

单独修改属组

[root@wentan dwt]# chgrp wentan 321.txt
[root@wentan dwt]# ll
-rwxr-xr-x. 1 root   wentan 136 Jan 10 11:20 321.txt
4.6 setfacl

可以单独针对某个用户设置权限

[root@wentan dwt]# setfacl -m u:admin:rwx 321.txt
[root@wentan dwt]# getfacl 321.txt
# file: 321.txt
# owner: root
# group: wentan
user::rwx
user:admin:rwx
group::r-x
mask::rwx       #最大权限,只针对属组和其他人
other:#设置文件最大权限,(对属主不生效的)
[root@wentan dwt]# setfacl -m m::rw 321.txt
[root@wentan dwt]# getfacl 321.txt
# file: 321.txt
# owner: root
# group: wentan
user::rwx
user:admin:rwx          #effective:rw-
group::r-x              #effective:r--
mask::rw-
other::r-x
4.7 mask有效权限

mask 权限,指的是用户或群组能拥有的最大 ACL 权限,也就是说,给用户或群组设定的 ACL 权限不能超过 mask 规定的权限范围,超出部分做无效处理。

4.8 特殊权限
SUID: chmod u+s  #当一个文件被设置了SUID(会在该文件所有者的执行为直接变成s)这样任何人执行这个文件,会直接获取属主的权限。SGID: chmod g+s  #当一个目录被设置了SGID后 ,任何人在这个目录中创建的文件,都属于这个目录所有者,不能对文件设置其他属主SBIT: chmod o+t  #假设这个目录里面对象是其他人 针对其他人一旦被打上T这个值#那么这个目录中其他用户创建的任何文件,只有文件所有者才能删除
2进制 十进制
001 sbit 1
010 sgid 4
001 suid 7
#增加特殊权限
[root@wentan dwt]# chmod u+s 123.txt
[root@wentan dwt]# ll
-rwSrw-rw-. 1 admin  wentan   9 Jan 10 11:25 123.txt[root@wentan dwt]# chmod g+s etc/
[root@wentan dwt]# ll
drwxr-sr-x. 2 root   root    22 Jan  8 15:21 etc[root@wentan dwt]# chmod o+t etc/
[root@wentan dwt]# ll
drwxr-sr-t. 2 root   root    22 Jan  8 15:21 etc
#删除特殊权限
[root@wentan dwt]# chmod u-s 123.txt
[root@wentan dwt]# chmod g-s etc/
[root@wentan dwt]# chmod o-t etc/
[root@wentan dwt]# ll
total 16
-rwxrw-r--. 1 root   root    10 Jan 10 11:30 1234.txt
-rw-rw-rw-. 1 admin  wentan   9 Jan 10 11:25 123.txt
-rwxrw-r-x+ 1 root   wentan 136 Jan 10 11:20 321.txt
drwxr-xr-x. 2 root   root    22 Jan  8 15:21 etc
4.9 umask

指定在建立文件时预设的权限掩码,进程 新建文件、目录的默认权限会收到umask的影响,umask表示要减掉得到权限。

umask可用来设定[权限掩码][权限掩码]是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限。

[root@wentan dwt]# touch umask.txt
-rw-r--r--. 1 root   root     0 Jan 10 14:23 umask.txt
[root@wentan dwt]# umask
0022        #反掩码#777-022=755-111=644   拿掉执行权限#给权限
[root@wentan dwt]# umask 002
[root@wentan dwt]# touch 111.txt
[root@wentan dwt]# ll
total 16
-rw-rw-r--. 1 root   root     0 Jan 10 14:28 111.txt
#当前环境有效,临时修改umask
#永久修改umask
[root@wentan ~]# vim /etc/profile
#umask 下添加代码
if [ $UID -eq 1000 ]; thenumask 000
fi
[wentan@wentan dwt]$ touch 123.txt
[wentan@wentan dwt]$ ll
total 16
-rw-rw-rw-. 1 admin  wentan   9 Jan 10 14:43 123.txt
4.10 chattr

用于改变文件属性。

这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下8种模式:
a:   #让文件或目录仅供附加用途。
b:   #不更新文件或目录的最后存取时间。
c:   #将文件或目录压缩后存放。
d:   #将文件或目录排除在倾倒操作之外。
i:   #不得任意更动文件或目录。
s:   #保密性删除文件或目录。
S:   #即时更新文件或目录。
u:   #预防意外删除。

实例1:用 chattr 防止系统中某个关键文件被修改

[root@wentan dwt]# chattr +i 123.txt
[root@wentan dwt]# lsattr 123.txt
----i------------- 123.txt
//查看目前被打的标签
[root@wentan dwt]# chattr -i 123.txt

实例2 : 让某个文件只能往里面追加内容,但是不能删除历史内容,适用于企业服务器日志

[root@wentan dwt]# vi /var/log/messages
[root@wentan dwt]# chattr +a /var/log/messages#追加
[root@wentan dwt]# echo hello,world >> /var/log/messages

五、文件管理

我们知道Linux的目录结构为树状结构,最顶级的目录为根目录 /。

其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们。

在开始本教程前我们需要先知道什么是绝对路径与相对路径。

绝对路径:是由/开头的 可以使用在任何场景,一定是可以找到该文件的

相对路径:不会以/开头 ./passwd 例如这个就是相对路径

. 当前目录

… 上级目录

5.1 几个常见的处理目录的命令
 ls(英文全拼:list files): 列出目录及文件名cd(英文全拼:change directory):切换目录pwd(英文全拼:print work directory):显示目前的目录mkdir(英文全拼:make directory):创建一个新的目录rmdir(英文全拼:remove directory):删除一个空的目录  可以用 rm -rf代替  cp(英文全拼:copy file): 复制文件或目录rm(英文全拼:remove): 删除文件或目录mv(英文全拼:move file): 移动文件与目录,或修改文件与目录的名称
5.2 文本文件查看工具
  • cat 内容抓取 可以支持同时多内容抓取

  • more 空格下一页,回车下一行

    [root@wentan dwt]# more 321.txt
    
  • less 首先是可以使用命令 /查找内容 如果输入v 就是进入vi模式 可以直接编辑 然后wq保存 保存完会退出到less的界面 需要q才能退出

    [root@wentan dwt]# less 321.txt
    
  • head 用来查看文件头部内容来判断文件

    [root@wentan dwt]# head -n 20 /etc/passwd
    
  • tail 通常用来做日志监控

    [root@wentan dwt]# tail -n 30 /var/log/messages
    
5.3 文本筛选工具

用于查找文件里符合条件的字符串。

[root@wentan dwt]# grep -n hello,world /var/log/messages
20499:hello,world
#grep    linux 三剑客之一
-i 或 --ignore-case : 忽略字符大小写的差别。
-n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
-o 或 --only-matching : 只显示匹配PATTERN 部分。
-v 或 --invert-match : 显示不包含匹配文本的所有行。
5.4 文本处理工具

用于显示每行从开头算起 num1 到 num2 的文字

[root@wentan dwt]# cut -d : -f 1 /etc/passwd
root
bin
daemon
adm
lp
...
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的范围之内,该字符将被写出;否则,该字符将被排除
5.5 文本区分工具

用于比较文件的差异

[root@wentan dwt]# cat 123.txt 1234.txt
123456789
l23456789
[root@wentan dwt]# diff 123.txt 1234.txt
1c1
< 123456789
---
> l23456789
5.6 文本排序工具

用于将文本文件内容加以排序。

-f 排序时,将小写字母视为大写字母。
-n 依照数值的大小排序。
-u 意味着是唯一的(unique),输出的结果是去完重了的。
-r 以相反的顺序来排序。
[root@wentan dwt]# sort -urf 321.txt
5.7 管道符 |

可以把管道符之前的内容 作为管道符之后内容的输入

[root@wentan dwt]# cat /etc/passwd | grep /bin/bash
root:x:0:0:root:/root:/bin/bash
wentan:x:1000:1000:wentan:/home/wentan:/bin/bash
test:x:1002:1003::/home/test:/bin/bash
[root@wentan dwt]# cat /etc/passwd | grep /bin/bash | cut -d: -f1
root
wentan
test
[root@wentan dwt]# tail -n 100 /var/log/messages | grep system
5.8 正则表达式
^    #代表一个行的开头       ^ro      表示以ro开头
$    #代表一个行的结尾       login\$     表示以login结尾
.    #匹配一个任意字符  ro.t     字符串为ro.t   可以匹配   root  rokt  ro0t
*    #标识匹配之前内容的0次或无数次   roo\*t
  • ^ 开头
[root@wentan dwt]# grep ^ro /etc/passwd
root:x:0:0:root:/root:/bin/bash
  • $ 结尾
[root@wentan dwt]# grep login\$ /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
...
  • . 匹配任意字符
[root@wentan dwt]# grep ro.t /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
  • *匹配0次&多次
[root@wentan dwt]# grep ro.t /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@wentan dwt]# grep ro\*t /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
  • \ 转义字符

一般在linux系统当中 \ 会用来转义 $ * 让其变成本身字符意思 而不是shell当中的意思

5.9 文件查找工具

用于查找符合条件的文件,他会去保存文件和目录名称的数据库内,查找合乎范本样式条件的文件或目录

  • locate

    在使用locate之前,需要更新一下数据库,因为locate只会在数据库中查找文件所在的位置,所以locate查找速度极快,缺点就是数据库更新并不是实时的,更新数据库有两种方式:

    (1) 手动更新 updatedb

    (2) 自动更新 默认情况下,updatedb每天执行一次

    [root@wentan ~]# updatedb
    [root@wentan ~]# locate passwd
    /etc/passwd
    /etc/passwd-
    /etc/pam.d/passwd
    /etc/security/opasswd
    /usr/bin/gpasswd
    /usr/bin/grub2-mkpasswd-pbkdf2
    ...
    
    locate
    -c:只输出找到的数量
    -n:至多显示 n个输出
    -i:忽略大小写
    -r:使用基本正则表达式
    -d DBPATH:使用 DBPATH 指定的数据库,而不是默认数据库 /var/lib/mlocate/mlocate.db
    
    #用正则表达式来查找网卡位置
    [root@wentan ~]# locate -r ens160\$
    /etc/sysconfig/network-scripts/ifcfg-ens160
    
  • find

    实时查找工具,通过遍历指定路径下的文件系统完成文件查找

    特点 :

    1.查找速度略慢

    2.精确查找

    3.实时查找

    4.满足多条件匹配

    find [选项] [路径] [查找条件 + 处理动作]
    

    查找路径:指定具体目录路径,默认是当前文件夹

    查找条件:指定的查找标准(文件名/大小/类型/权限等),默认是找出所有文件

    处理动作:对符合条件的文件做什么操作,默认输出屏幕

    #条件组合
    -a     #多个条件and并列
    -o     #多个条件or并列
    -not    #条件相反
    
    • 按文件名查找

      [root@wentan ~]# find /etc -name "ifcfg-ens160"
      [root@wentan ~]# find /etc -name "ifCfg-ens160"  //忽略大小写
      [root@wentan ~]# find /etc -name "ifcfg*"    //通配符
      /etc/sysconfig/network-scripts/ifcfg-ens160
      
    • 按大小查找

      [root@wentan ~]# find /etc/ -size +5M  //大于5M
      /etc/selinux/targeted/policy/policy.31
      /etc/udev/hwdb.bin
      [root@wentan ~]# find /etc/ -size -5M  //小于5M
      [root@wentan ~]# find /etc/ -size  5M  //等于5M
      ....[root@wentan ~]# find /etc/ -size +5M -a -name "ifcfg-ens160"   //-a 与
      none
      [root@wentan ~]# find /etc/ -size +5M -o -name "ifcfg-ens160"   //-o 或
      /etc/selinux/targeted/policy/policy.31
      /etc/sysconfig/network-scripts/ifcfg-ens160
      /etc/udev/hwdb.bin
      ...
    • 按目录深度查找

      #指定查找深度为4  且名字是ifcfg-ens160的
      [root@wentan ~]# find / -maxdepth 4 -a -name "ifcfg-ens160*"
      /etc/sysconfig/network-scripts/ifcfg-ens160
      /var/log/anaconda/ifcfg.log
      /usr/sbin/ifcfg
      /tmp/ifcfg.log
      
    • 按时间查找

      [root@wentan ~]# find /etc/ -mtime +5
      [root@wentan ~]# find /etc/ -mtime  5
      [root@wentan ~]# find /etc/ -mtime -5
      
    • 按文件属主和属组查找

      [root@wentan ~]# find /dwt/ -group root
      /dwt/
      /dwt/etc
      /dwt/etc/password
      /dwt/1234.txt
      /dwt/umask.txt
      /dwt/111.txt
      [root@wentan ~]# find /home -user wentan//属主是xwz的文件
      [root@wentan ~]# find /home -nouser        //没有属主的文件
      [root@wentan ~]# find /home -nogroup   //没有属组的文件
    • 按文件权限查找

      #查找权限为644的文件
      [root@wentan ~]# find /dwt/ -perm 644 -ls 34778829      4 -rw-r--r--   1  root     root         2487 Jan  8 15:21 /dwt/etc/password17383188      0 -rw-r--r--   1  root     root            0 Jan 10 14:23 /dwt/umask.txt#查找权限高于644的文件
      [root@wentan ~]# find /dwt/ -perm -644 -ls  17383197      0 drwxr-xr-x   3  root     root          111 Jan 10 15:43 /dwt/34778829      4 -rw-r--r--   1  root     root         2487 Jan  8 15:21 /dwt/etc/password17383191      4 -rwxrw-r-x   1  root     wentan        211 Jan 10 15:43 /dwt/321.txt#查找特殊权限SUID  且权限刚好是000  基本查不出东西
      [root@wentan ~]# find / -perm 4000 -ls
      none
      #查找特殊权限SUID   且权限大于000
      [root@wentan ~]# find / -perm -4000 -ls
      all
      
    • 按正则表达式查找

      [root@wentan ~]# find /etc -regex '.*ifcfg-ens[0-9][0-9][0-9]'
      # .*        任意多个字符
      # [0-9]     任意一个数字
      /etc/sysconfig/network-scripts/ifcfg-ens160
      
    • 处理动作

      #处理动作
      -print      #默认  显示至屏幕
      -ls         #对于查找到的文件 执行  ls -l  命令
      -delete     #删除查找到的文件
      - exec     command     #执行其他复合命令
      
      #复制配置文件到/dwt/back/ 下
      [root@wentan dwt]#mkdir back
      [root@wentan dwt]#find /etc/ -maxdepth 4 -name "*.conf" -exec cp -r {} /dwt/back/ \;
      find: missing argument to `-exec'
      [root@wentan back]# ll
      total 1536
      -rw-r--r--. 1 root root   346 Jan 11 11:02 00-keyboard.conf
      -rw-r--r--. 1 root root   690 Jan 11 11:02 05-redhat.conf
      lrwxrwxrwx. 1 root root    55 Jan 11 11:02 10-hinting-slight.conf -> /usr/share/fontconfig/conf.avail/10-hinting-slight.conf
      lrwxrwxrwx. 1 root root    59 Jan 11 11:02 10-scale-bitmap-fonts.conf -> /usr/share/fontconfig/conf.avail/10-scale-bitmap-fonts.conf
      ...#删除刚刚这些文件
      [root@wentan dwt]# find /dwt/back/ -name "*.conf" -delete
      [root@wentan back]# ll
      total 0#在目录中查找权限为777的文件,将其他人的x权限删除
      [root@wentan dwt]# find   /dwt/  -perm  777   -exec  chmod  o-x   {}   \;
      [root@wentan dwt]# ll
      total 16
      -rwxrwxrw-. 1 root   root     0 Jan 10 14:28 111.txt
      -rwxrwxrw-. 1 root   root    10 Jan 10 11:30 1234.txt#清理tmp目录下 修改时间大于7天的  且属主是root的文件
      [root@wentan /]# find /tmp/* -mtime +7 -user root -delete
      

      实例

      #查找/var目录下属主为root,且属组为mail的所有文件或目录
      [root@wentan ~]# find /var -user root -group mail
      /var/spool/mail#查找/etc目录下最近一周内容曾被修改过的文件或目录
      [root@wentan ~]# find /etc/ ‐mtime ‐7#查找当前系统上没有属主或属组,且最近一周内曾被访问过的文件或目录
      [root@wentan ~]# find / \(‐nouser ‐o ‐nogroup\) ‐a ‐atime ‐7#查找/etc目录下至少一类用户没有执行权限的文件
      [root@wentan ~]#  find /etc ‐not ‐perm ‐111#查找/etc/init.d目录下,所有用户都执行权限,且其它用户写权限的文件
      [root@wentan ~]# find /etc/init.d ‐perm ‐113
      /etc/init.d
      

      欢迎关注微信公众号:问渠清源

Linux 基础入门 02相关推荐

  1. SRE运维工程师笔记-Linux基础入门

    SRE运维工程师笔记-Linux基础入门 1. Linux基础 1.1 用户类型 1.2 终端terminal 1.2.1 终端类型 1.2.2 查看当前的终端设备 1.3 交互式接口 1.3.1 交 ...

  2. 腾讯云实验之Linux 基础入门

    image.png Linux 基础入门 目录操作 任务时间:5min ~ 10min 创建目录 使用 mkdir 命令创建目录 mkdir $HOME/testFolder 切换目录 使用 cd 命 ...

  3. Linux 基础入门

    Linux 基础入门 本课程教你如何熟练地使用 Linux,本实验中通过在线动手实验的方式学习 Linux 常用命令,用户与权限管理,目录结构与文件操作,环境变量,计划任务,管道与数据流重定向等基本知 ...

  4. Linux基础入门--驱动开发--USB

    Linux基础入门--驱动开发--USB 1.基本概念 2.组成结构 2.1 设备描述符 2.2 配置描述符 2.3 接口描述符 2.4 端点描述符 2.5 字符串描述符 3.管道 4.端点分类 4. ...

  5. Linux基础入门之内外命令讲解篇

    Linux基础入门篇--之内外命令讲解 1.基础命令 命令 使用方法 cat /etc/motd 设置用户成功登录系统后显示的提示信息.比如欢迎语! cat /etc/issue 设置用户成功登录系统 ...

  6. Linux基础入门教程

    Linux基础入门教程 --------- Linux学习路径 Linux学习者,常常不知道自己改怎么学习linux: Linux初级,也就是入门linux 前提是需要有一些计算机硬件相关的知识或是有 ...

  7. Linux基础入门--进程间通信--共享内存

    Linux基础入门--进程间通信--共享内存 1.共享内存IPC原理 2.共享内存管理 1.共享内存IPC原理 共享内存进程间通信机制主要用于实现进程间大量的数据传输,共享内存是在内存单独开辟的一段内 ...

  8. Linux基础入门--网络工具--usb_modeswitch

    Linux基础入门--网络工具--usb_modeswitch 1.概述 2.语法 3.选项 1.概述 控制"多状态"USB设备的模式.一些新的USB设备有他们的专有Windows ...

  9. tree老师:每天五分钟教你学linux基础命令02

    tree老师:每天五分钟教你学linux基础命令02 ls ls命令用于列出文件和目录.默认上,他会列出当前目录的内容.带上参数后,我们可以用ls做更多的事情.  比如,当我们刚刚改了文件,却不记得是 ...

最新文章

  1. 【CNN】很详细的讲解什么以及为什么是卷积(Convolution)!
  2. 了解一下爬虫技术方方面面
  3. vue 怎么在字符串中指定位置插入字符_vue 我想在一个字符串中间加入一个/br 该怎么写?...
  4. 剩余 大小 查看内存_计算机内存管理介绍
  5. Comet---“服务器推”技术实现
  6. 自动计算尺寸列表功能案例ios源码
  7. rpm 安装 忽略依赖_rpm 解决依赖的方法
  8. mongodb分片+副本集集群环境搭建
  9. 常用的php.ini 配置选项
  10. 用 Python 写一个简单的Web框架
  11. 那家CTO带头喊麦的直播公司,快要倒闭了
  12. 对称密钥和非对称密钥有什么区别,区别在哪里
  13. Quant量化面试题 数学 逻辑题 过河、生日、烧绳、称重
  14. 抽样调查之分层随机抽样
  15. TeamViewer 免费许可到期的解决办法
  16. 王石:中国楼市泡沫必破 目前只是时间问题
  17. java从键盘上输入一位整数_当输入1到7时_从键盘上输入一位整数,当输入1~7时,显示对应的英文星期名称的缩写。...
  18. 数据分析与AI(七)傅里叶对登月图片降噪/scipy库对图片进行处理/
  19. C语言在一个数组中查找一个数字
  20. 让你的断舍离不再无处安放 享物说发起小红花联盟

热门文章

  1. redis启动报错oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
  2. Poj百练 4110:圣诞老人的礼物-Santa Clau’s Gifts (分类:贪心)
  3. 【百练】圣诞老人的礼物-Santa Clau’s Gifts(c语言)
  4. 计算机两种层次结构模型,计算机网络层次结构模型.ppt
  5. 计算机考研算什么学士学位
  6. POI下载表格数据,带有表格样式时下载文件为0
  7. 安排,谷粒商城java分布式开发基础篇高级篇与高可用集群架构篇2020
  8. 嘉祥教育计算机老师,嘉·时光 嘉祥教师的一天
  9. RBF神经网络理论与实现
  10. bnuoj 44359 快来买肉松饼