Linux-day05
权限
-rw-r--r-- 644
-rwxrwxrwx
属主
属组
其他用户
r #可读
w #可写
x #可执行
- #没有权限
r 4
w 2
x 1
- 0
#设置属主权限
[root@qls ~]# touch test.txt
[root@qls ~]#
[root@qls ~]# ll
total 0
-rw-r--r--. 1 root root 0 Aug 19 08:48 test.txt
[root@qls ~]# chmod u+x test.txt
[root@qls ~]# ll
total 0
-rwxr--r--. 1 root root 0 Aug 19 08:48 test.txt
-rwxr--r--. 1 root root 0 Aug 19 08:48 test.txt
[root@qls ~]# chmod u-w test.txt
[root@qls ~]# ll
total 0
-r-xr--r--. 1 root root 0 Aug 19 08:48 test.txt
[root@qls ~]# chmod u=rwx test.txt
[root@qls ~]# ll
total 0
-rwxr--r--. 1 root root 0 Aug 19 08:48 test.txt
[root@qls ~]# chmod g+x test.txt
[root@qls ~]# ll
total 0
-rwxr-xr--. 1 root root 0 Aug 19 08:48 test.txt
[root@qls ~]# chmod o+x test.txt
[root@qls ~]# ll
total 0
-rwxr-xr-x. 1 root root 0 Aug 19 08:48 test.txt
[root@qls ~]# chmod u=rw,g=r,o=r test.txt
[root@qls ~]# ll
total 0
-rw-r--r--. 1 root root 0 Aug 19 08:48 test.txt
[root@qls ~]# chmod a+x test.txt
[root@qls ~]# ll
total 0
-rwxr-xr-x. 1 root root 0 Aug 19 08:48 test.txt
u #属主
g #属组
o #其他用户
a #所有
#通过数字权限进行修改
[root@qls ~]# chmod 644 test.txt
[root@qls ~]# ll
total 0
-rw-r--r--. 1 root root 0 Aug 19 08:48 test.txt
[root@qls ~]# chmod 777 test.txt
[root@qls ~]# ll
total 0
-rwxrwxrwx. 1 root root 0 Aug 19 08:48 test.txt
[root@qls ~]# mkdir test
[root@qls ~]# ll
total 0
drwxr-xr-x. 2 root root 6 Aug 19 08:59 test
-rwxrwxrwx. 1 root root 0 Aug 19 08:48 test.txt
[root@qls ~]# touch test/123.txt
[root@qls ~]#
[root@qls ~]#
[root@qls ~]# ll
total 0
drwxr-xr-x. 2 root root 21 Aug 19 08:59 test
-rwxrwxrwx. 1 root root 0 Aug 19 08:48 test.txt
[root@qls ~]# chmod 777 test
[root@qls ~]#
[root@qls ~]#
[root@qls ~]# ll
total 0
drwxrwxrwx. 2 root root 21 Aug 19 08:59 test
-rwxrwxrwx. 1 root root 0 Aug 19 08:48 test.txt
[root@qls ~]# ll test
total 0
-rw-r--r--. 1 root root 0 Aug 19 08:59 123.txt
[root@qls ~]# chmod -R 700 test
[root@qls ~]# ll
total 0
drwx------. 2 root root 21 Aug 19 08:59 test
-rwxrwxrwx. 1 root root 0 Aug 19 08:48 test.txt
[root@qls ~]# ll test
total 0
-rwx------. 1 root root 0 Aug 19 08:59 123.txt
[root@qls ~]# touch test/test.log
[root@qls ~]# ll test
total 0
-rwx------. 1 root root 0 Aug 19 08:59 123.txt
-rw-r--r--. 1 root root 0 Aug 19 09:03 test.log
chmod #设置权限,修改权限
选项
-R #递归修改权限,针对目录及目录下的所有内容
权限对文件的影响
只有r权限, #只能查看文件,其他的不能操作,
只有w权限 #不能使用vim命令进行修改,如果强制修改,会把源文件内容覆盖掉,只能追加
#w权限需要r权限进行配合,不要给文件单独的w权限。rw
只有x 权限 #什么都不能操作,需要r权限配合使用,rx
正常设置权限
r
rw
rx
rwx
权限对目录的影响
r #是否能够查看目录下的列表,如果只有r权限,无法查看目录下文件的属性信息,只能???表示
w #是否能够对目录的下文件进行删除,移动等操作
x #是否能够进入该目录。
r权限需要x权限的配合,可以正常查看目录列表
w权限需要x权限的配合,可以删除,新建文件的权限,如果要移动,需要有对目标目录的wx权限。
x权限只能进入目录,其他的操作都不能执行
正常权限设置为
rx
rw
rwx
属主属组的修改
chown #修改属主和属组
选项
-R #递归修改
chgrp #只能修改属组
[root@qls ~]# ll
total 0
drwx------. 2 root root 37 Aug 19 09:03 test
-rw-r--r--. 1 root root 0 Aug 19 08:48 test.txt
[root@qls ~]# chown jason test.txt
[root@qls ~]# ll
total 0
drwx------. 2 root root 37 Aug 19 09:03 test
-rw-r--r--. 1 jason root 0 Aug 19 08:48 test.txt
[root@qls ~]# chown jason.jason test.txt
[root@qls ~]# ll
total 0
drwx------. 2 root root 37 Aug 19 09:03 test
-rw-r--r--. 1 jason jason 0 Aug 19 08:48 test.txt
[root@qls ~]# chown .root test.txt
[root@qls ~]# ll
total 0
drwx------. 2 root root 37 Aug 19 09:03 test
-rw-r--r--. 1 jason root 0 Aug 19 08:48 test.txt
[root@qls ~]# chgrp jason test.txt
[root@qls ~]#
[root@qls ~]#
[root@qls ~]# ll
total 0
drwx------. 2 root root 37 Aug 19 09:03 test
-rw-r--r--. 1 jason jason 0 Aug 19 08:48 test.txt
[root@qls ~]# ll test
total 0
-rwx------. 1 root root 0 Aug 19 08:59 123.txt
-rw-r--r--. 1 root root 0 Aug 19 09:03 test.log
[root@qls ~]# chown jason test
[root@qls ~]# ll
total 0
drwx------. 2 jason root 37 Aug 19 09:03 test
-rw-r--r--. 1 jason jason 0 Aug 19 08:48 test.txt
[root@qls ~]# ll test
total 0
-rwx------. 1 root root 0 Aug 19 08:59 123.txt
-rw-r--r--. 1 root root 0 Aug 19 09:03 test.log
[root@qls ~]# chown -R jason.jason test
[root@qls ~]# ll
total 0
drwx------. 2 jason jason 37 Aug 19 09:03 test
-rw-r--r--. 1 jason jason 0 Aug 19 08:48 test.txt
[root@qls ~]# ll test
total 0
-rwx------. 1 jason jason 0 Aug 19 08:59 123.txt
-rw-r--r--. 1 jason jason 0 Aug 19 09:03 test.log
[root@qls ~]# touch test/oldboy.log
[root@qls ~]# ll test
total 0
-rwx------. 1 jason jason 0 Aug 19 08:59 123.txt
-rw-r--r--. 1 root root 0 Aug 19 10:10 oldboy.log
-rw-r--r--. 1 jason jason 0 Aug 19 09:03 test.log
权限控制位
umask #控制权限,默认值是022
怎么计算权限位的
umask的默认权限位是022,目录的最大是777,系统默认创建的目录的权限是最大权限减去umask的权限,得出结果就是755,文件的最大666,减去只是644,如果文件的权限位遇到奇数时,奇数位加1
[root@qls ~]# umask 033 #临时修改,如果要永久修改,需改配置文件/etc/profile
[root@qls ~]# umask
0033
特殊权限
setuid #执行命令的时候,相当于这个命令的所有者(属主)
[root@qls ~]# chmod u+s /bin/rm
[root@qls ~]# ll /bin/rm
-rwsr-xr-x. 1 root root 62952 Oct 31 2018 /bin/rm
[jason@qls ~]$ rm -rf /opt
rm: cannot remove ‘/opt’: Permission denied
[jason@qls ~]$ rm -rf /opt
[jason@qls ~]$ ll /opt
ls: cannot access /opt: No such file or directory
[root@qls ~]# chmod u-s /bin/rm
[root@qls ~]# stat /bin/passwd
File: ‘/bin/passwd’
Size: 27832 Blocks: 56 IO Block: 4096 regular file
Device: 803h/2051d Inode: 101590927 Links: 1
Access: (4755/-rwsr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:passwd_exec_t:s0
Access: 2019-08-19 09:07:05.259967579 +0800
Modify: 2014-06-10 14:27:56.000000000 +0800
Change: 2019-08-14 15:12:41.532577880 +0800
Birth: -
权限是4位,第一位如果是数字4,则表示该文件有setuid的权限
大s和小s的区别
主要看文件的属主的x权限,如果属主有x权限,就是s,没有就是大S,功能上面没有什么区别
setgid #共享目录,让所有用户在一个目录下面创建的所有文件属组都是固定一个组
[root@qls ~]# groupadd setgid
[root@qls ~]#
[root@qls ~]#
[root@qls ~]# chown -R .setgid /opt/
[root@qls ~]# chmod g+s /opt/
[root@qls ~]# ll -d /opt/
drwxrwsrwx. 2 root setgid 66 Aug 19 10:48 /opt/
[root@qls ~]# ll -d /tmp
drwxrwxrwt. 12 root root 241 Aug 19 09:25 /tmp
[root@qls ~]# stat /opt
File: ‘/opt’
Size: 107 Blocks: 0 IO Block: 4096 directory
Device: 803h/2051d Inode: 101765326 Links: 2
Access: (2777/drwxrwsrwx) Uid: ( 0/ root) Gid: ( 2002/ setgid)
Context: unconfined_u:object_r:usr_t:s0
Access: 2019-08-19 10:51:18.683833186 +0800
Modify: 2019-08-19 10:51:16.029833243 +0800
Change: 2019-08-19 10:51:16.029833243 +0800
Birth: -
权限是4位,第一位如果是数字2,则表示该文件有setgid的权限
sticky #粘滞位,让所有用户在一个目录只能管理的文件。
[root@qls ~]# chmod 777 /data
[root@qls ~]# chmod o+t /data
[root@qls ~]# ll /data
total 0
-rw-rw-r--. 1 jason jason 0 Aug 19 11:03 123
-rw-rw-r--. 1 test-1 test-1 0 Aug 19 11:03 456
[root@qls ~]# ll /data -d
drwxrwxrwt. 2 root root 28 Aug 19 11:03 /data
[test-1@qls ~]$ ll /data/
total 0
-rw-rw-r--. 1 jason jason 0 Aug 19 11:03 123
-rw-rw-r--. 1 test-1 test-1 0 Aug 19 11:03 456
[test-1@qls ~]$ rm -f /data/123
rm: cannot remove ‘/data/123’: Operation not permitted
[test-1@qls ~]$ rm -f /data/456
[test-1@qls ~]$ ll /data
total 0
-rw-rw-r--. 1 jason jason 0 Aug 19 11:03 123
[root@qls ~]# stat /data
File: ‘/data’
Size: 28 Blocks: 0 IO Block: 4096 directory
Device: 803h/2051d Inode: 33978095 Links: 2
Access: (1777/drwxrwxrwt) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2019-08-19 11:04:58.842815560 +0800
Modify: 2019-08-19 11:03:51.773817002 +0800
Change: 2019-08-19 11:04:56.777815605 +0800
Birth: -
特殊属性
a #只能对文件进行追加的操作,其他的没有权限,可读,可以cp
i #只能查看和cp。其他操作不允许
[root@qls ~]# lsattr test.log #查看特殊属性
---------------- test.log
[root@qls ~]# chattr +a test.log #添加特殊属性
[root@qls ~]# chattr -a /etc/passwd #删除特殊属性
[root@qls ~]# lsattr test.log
--------------- test.log
[root@qls ~]# chattr +i test.log
[root@qls ~]# ll
total 4
-rw-r--r--. 1 root root 12 Aug 19 11:40 test.log
[root@qls ~]# lsattr test.log
----i----------- test.log
[root@qls ~]# cat test.log
egon
oldboy
[root@qls ~]# rm -f test.log
rm: cannot remove ‘test.log’: Operation not permitted
[root@qls ~]# mv test.log /opt
mv: cannot move ‘test.log’ to ‘/opt/test.log’: Operation not permitted
[root@qls ~]# cp test.log /tmp
[root@qls ~]# echo oldboy >>test.log
-bash: test.log: Permission denied
输入和输出
重定向
三个文件
[root@qls ~]# ll /dev/std*
lrwxrwxrwx. 1 root root 15 Aug 16 08:35 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx. 1 root root 15 Aug 16 08:35 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx. 1 root root 15 Aug 16 08:35 /dev/stdout -> /proc/self/fd/1
输出重定向
类型 |
|
用途 |
标准覆盖输出重定向 |
> |
将程序输出的正确结果输出到指定的文件中,会覆盖文件原有的内容 |
标准追加输出重定向 |
>> |
将程序输出的正确结果以追加的方式输出到指定文件,不会覆盖原有文件 |
错误覆盖输出重定向 |
2> |
将程序的错误结果输出到执行的文件中,会覆盖文件原有的内容 |
错误追加输出重定向 |
2>> |
将程序输出的错误结果以追加的方式输出到指定文件,不会覆盖原有文件 |
[root@qls ~]# cat 1
hello
[root@qls ~]# echo oldboy >2
[root@qls ~]# cat 1 2
hello
oldboy
[root@qls ~]# cat 1 2 >3
[root@qls ~]# cat 3
hello
oldboy
[root@qls ~]#
[root@qls ~]# echo egon >>3
[root@qls ~]# cat 3
hello
oldboy
egon
[root@qls ~]# ls 5
ls: cannot access 5: No such file or directory
[root@qls ~]# ls 5 > 6
ls: cannot access 5: No such file or directory
[root@qls ~]# cat 6
[root@qls ~]# ls 5 2> 6
[root@qls ~]# cat 6
ls: cannot access 5: No such file or directory
[root@qls ~]# ls 5 2> 6
[root@qls ~]# cat 6
ls: cannot access 5: No such file or directory
[root@qls ~]# ls 7 2> 6
[root@qls ~]# cat 6
ls: cannot access 7: No such file or directory
[root@qls ~]# ls 8 2>> 6
[root@qls ~]# cat 6
ls: cannot access 7: No such file or directory
ls: cannot access 8: No such file or directory
[root@qls ~]# ls /date/ >1.txt 2>&1 #不推荐使用
[root@qls ~]# cat 1.txt
ls: cannot access /date/: No such file or directory
[root@qls ~]# ls /data/ >1.txt 2>&1
[root@qls ~]# cat 1.txt
test.log
[root@qls ~]# ls /data/ &>1.txt
[root@qls ~]# ls /date/ &>1.txt
[root@qls ~]# cat 1.txt
ls: cannot access /date/: No such file or directory
[root@qls ~]# ls /date/ &>>1.txt
[root@qls ~]# ls /data/ &>>1.txt
[root@qls ~]# cat 1.txt
ls: cannot access /date/: No such file or directory
ls: cannot access /date/: No such file or directory
test.log
输入重定向
标准输入重定向 |
< |
将命令中接收输入的途径由默认的键盘更改为指定的文件或命令 |
标识符限定输入重定向 |
<< |
命令从标准输入中读入内容,直到遇到“标识符”分解符为止 |
[root@qls ~]# tr 'N' 'n' < 1.txt
ls: cannot access /date/: no such file or directory
ls: cannot access /date/: no such file or directory
test.log
[root@qls ~]# mysql -uroot -p123 <xx.sql
[root@qls ~]# dd if=/dev/zero of=/root/t.log bs=1M count=100
[root@qls ~]# dd < /dev/zero >/root/r.log bs=1M count=10
[root@qls ~]# cat > ll << EOF
> orhgne
> rgevjowiertg
> igjwvwoi
> regjvoeitg
> EOF
[root@qls ~]# cat ll
orhgne
rgevjowiertg
igjwvwoi
regjvoeitg
脚本中打印菜单
[root@qls ~]# vim 1.sh
#!/bin/bash
cat <<- 'EOF'
##########################
# 1. 红烧肉 #
# 2. 小炒肉 #
# 3. 红烧排骨 #
# 4. 清炒空心菜 #
##########################
EOF
管道
管道操作符号 "|" ,主要用来连接左右两个命令, 将左侧的命令的标准输出, 交给右侧命令的标准输入
PS: 无法传递标准错误输出至后者命令
管道中的tee技术
选项
-a #追加
tee和重定向的区别
xargs
[root@qls ~]# ls |rm -f
[root@qls ~]# ll
total 112676
-rw-r--r--. 1 root root 6 Aug 19 11:57 1
-rw-r--r--. 1 root root 166 Aug 19 12:25 1.sh
-rw-r--r--. 1 root root 113 Aug 19 12:09 1.txt
-rw-r--r--. 1 root root 7 Aug 19 11:58 2
-rw-r--r--. 1 root root 18 Aug 19 11:59 3
-rw-r--r--. 1 root root 27 Aug 19 12:03 4
-rw-r--r--. 1 root root 94 Aug 19 12:04 6
-rw-r--r--. 1 root root 40 Aug 19 12:20 ll
-rw-r--r--. 1 root root 10485760 Aug 19 12:19 r.log
-rw-r--r--. 1 root root 12 Aug 19 11:46 test.log~
-rw-r--r--. 1 root root 104857600 Aug 19 12:18 t.log
[root@qls ~]# ls |xargs rm -f
[root@qls ~]# ll
total 0
[root@qls ~]# which cd
/usr/bin/cd
[root@qls ~]# which cd | ls -l
total 0
[root@qls ~]# which cd |xargs ls -l
-rwxr-xr-x. 1 root root 26 Oct 31 2018 /usr/bin/cd
find 查找
-not #取反
! #取反
#根据名称查找
-name #根据名称
-iname #忽略大小写
* #所有,模糊查找
[root@qls ~]# find /etc -name 'ifcfg-eth0' -print #精确查找
/etc/sysconfig/network-scripts/ifcfg-eth0
[root@qls ~]# find /etc -name 'ifcfg-eth0'
/etc/sysconfig/network-scripts/ifcfg-eth0
[root@qls ~]# find /etc -name 'ifcfg-eth'
[root@qls ~]# find /etc -name 'ifcfg-eth*'
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1
[root@qls ~]# ll
total 0
[root@qls ~]# ll /data/
total 4
-rw-r--r--. 1 root root 12 Aug 19 11:40 test.log
[root@qls ~]# touch /data/Touch.log
[root@qls ~]# find /data -name 'test.log'
/data/test.log
[root@qls ~]# touch /data/Test.log
[root@qls ~]# find /data -iname 'test.log'
/data/test.log
/data/Test.log
[root@qls ~]# find /etc/ -name '*eth*'
/etc/sysconfig/network-scripts/ifdown-eth
/etc/sysconfig/network-scripts/ifup-eth
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1
/etc/ethertypes
#根据文件类型查找
-type #根据类型
f #普通文件
d #目录
l #软连接
b #块设备
c #字符设备
p #管道文件
s #socket文件,套接字
[root@qls ~]# find /opt -type f -ls
101765329 0 -rw-r--r-- 1 root setgid 0 Aug 19 10:45 /opt/root.txt
101765330 0 -rw-rw-r-- 1 jason setgid 0 Aug 19 10:46 /opt/jason.txt
101765331 0 -rw-rw-r-- 1 1007 setgid 0 Aug 19 10:46 /opt/test-1
101765332 0 -rw-rw-r-- 1 jason jason 0 Aug 19 10:48 /opt/jason
101765333 0 -rw-rw-r-- 1 jason setgid 0 Aug 19 10:49 /opt/jason-1
101765334 0 -rw-rw-r-- 1 1007 setgid 0 Aug 19 10:50 /opt/test-2
101765328 0 -rw-rw-r-- 1 user setgid 0 Aug 19 10:51 /opt/user
101765336 4 -rw-r--r-- 1 root setgid 5 Aug 19 11:38 /opt/test.log
[root@qls ~]# find /opt -type d -ls
101765326 0 drwxrwsrwx 2 root setgid 123 Aug 19 11:38 /opt
[root@qls ~]# find /etc -type l -ls
33554500 0 lrwxrwxrwx 1 root root 17 Aug 14 15:09 /etc/mtab -> /proc/self/mounts
67324733 0 lrwxrwxrwx 1 root root 15 Aug 14 15:10 /etc/alternatives/ld -> /usr/bin/ld.bfd
[root@qls ~]# find /dev -type b -ls
18004 0 brw-rw---- 1 root disk 8, 3 Aug 16 08:35 /dev/sda3
18003 0 brw-rw---- 1 root disk 8, 2 Aug 16 08:35 /dev/sda2
18002 0 brw-rw---- 1 root disk 8, 1 Aug 16 08:35 /dev/sda1
18001 0 brw-rw---- 1 root disk 8, 0 Aug 16 08:35 /dev/sda
17979 0 brw-rw---- 1 root cdrom 11, 0 Aug 16 08:35 /dev/sr0
[root@qls ~]# find /dev -type c -ls
37077 0 crw-rw---- 1 root tty 7, 134 Aug 16 08:35 /dev/vcsa6
37076 0 crw-rw---- 1 root tty 7, 6 Aug 16 08:35 /dev/vcs6
37075 0 crw-rw---- 1 root tty 7, 133 Aug 16 08:35 /dev/vcsa5
37074 0 crw-rw---- 1 root tty 7, 5 Aug 16 08:35 /dev/vcs5
37072 0 crw-rw---- 1 root tty 7, 132 Aug 16 08:35 /dev/vcsa4
[root@qls ~]# find / -type p -ls
39196 0 prw------- 1 root root 0 Aug 16 08:35 /run/systemd/inhibit/1.ref
147337 0 prw------- 1 root root 0 Aug 19 09:09 /run/systemd/sessions/35.ref
143289 0 prw------- 1 root root 0 Aug 19 08:30 /run/systemd/sessions/33.ref
21439 0 prw------- 1 root root 0 Aug 16 08:35 /run/systemd/initctl/fifo
[root@qls ~]# find / -type s -ls
8956 0 srw-rw-rw- 1 root root 0 Aug 16 08:35 /dev/log
37478 0 srw-rw-rw- 1 root root 0 Aug 16 08:35 /run/vmware/guestServicePipe
37021 0 srw-rw-rw- 1 root root 0 Aug 16 08:35 /run/abrt/abrt.socket
36214 0 srw-rw-rw- 1 root root 0 Aug 16 08:35 /run/dbus/system_bus_socket
#根据文件大小查找
-size #根据大小查找
b #字节
k #kb
M、G #使用大写
-a #并且。默认就是
-o #或者
[root@qls ~]# find /var/log -type f -size -50k |xargs ls -lh
-rw-------. 1 root root 28K Aug 14 15:17 /var/log/anaconda/anaconda.log
-rw-------. 1 root root 12K Aug 14 15:17 /var/log/anaconda/ifcfg.log
-rw-------. 1 root root 0 Aug 14 15:17 /var/log/anaconda/ks-script-fY94py.log
[root@qls ~]# find /var/log -type f -size +50k |xargs ls -lh
-rw-------. 1 root root 1.7M Aug 14 15:17 /var/log/anaconda/journal.log
-rw-------. 1 root root 202K Aug 14 15:17 /var/log/anaconda/packaging.log
-rw-------. 1 root root 122K Aug 14 15:17 /var/log/anaconda/storage.log
[root@qls ~]# find /var/log -type f -size 299k |xargs ls -lh
-rw-------. 1 root root 299K Aug 19 15:01 /var/log/messages
[root@qls ~]# find /var/log -type f -size -1k -o -size +1M |xargs ls -lh
-rw-------. 1 root root 1.7M Aug 14 15:17 /var/log/anaconda/journal.log
-rw-------. 1 root root 0 Aug 14 15:17 /var/log/anaconda/ks-script-fY94py.log
-rw-------. 1 root root 0 Aug 16 09:10 /var/log/boot.log
-rw-r--r--. 1 root root 0 Aug 14 15:28 /var/log/firewalld
-rw-------. 1 root root 0 Aug 14 15:12 /var/log/spooler
-rw-------. 1 root root 0 Aug 14 15:10 /var/log/tallylog
[root@qls ~]# find /var/log -type f -size +100k -size -200k |xargs ls -lh
-rw-------. 1 root root 122K Aug 14 15:17 /var/log/anaconda/storage.log
-rw-r--r--. 1 root root 122K Aug 16 08:35 /var/log/dmesg
-rw-r--r--. 1 root root 122K Aug 14 15:27 /var/log/dmesg.old
[root@qls ~]# find /var/log -type f -size +100k -a -size -200k |xargs ls -lh
-rw-------. 1 root root 122K Aug 14 15:17 /var/log/anaconda/storage.log
-rw-r--r--. 1 root root 122K Aug 16 08:35 /var/log/dmesg
-rw-r--r--. 1 root root 122K Aug 14 15:27 /var/log/dmesg.old
#根据用户或者组查找
-user #根据用户
-group #根据用户组
-nouser #没有属主
-nogroup #没有属组
[root@qls ~]# find /opt/ -user jason -ls
101765330 0 -rw-rw-r-- 1 jason setgid 0 Aug 19 10:46 /opt/jason.txt
101765332 0 -rw-rw-r-- 1 jason jason 0 Aug 19 10:48 /opt/jason
101765333 0 -rw-rw-r-- 1 jason setgid 0 Aug 19 10:49 /opt/jason-1
[root@qls ~]# find /opt -group jason -ls
101765332 0 -rw-rw-r-- 1 jason jason 0 Aug 19 10:48 /opt/jason
[root@qls ~]# find /opt -user jason -group jason -ls
101765332 0 -rw-rw-r-- 1 jason jason 0 Aug 19 10:48 /opt/jason
[root@qls ~]# find /opt \( -user jason -o -group jason \) -ls
101765330 0 -rw-rw-r-- 1 jason setgid 0 Aug 19 10:46 /opt/jason.txt
101765332 0 -rw-rw-r-- 1 jason jason 0 Aug 19 10:48 /opt/jason
101765333 0 -rw-rw-r-- 1 jason setgid 0 Aug 19 10:49 /opt/jason-1
[root@qls ~]# find /opt/ -nouser -ls
101765331 0 -rw-rw-r-- 1 1007 setgid 0 Aug 19 10:46 /opt/test-1
101765334 0 -rw-rw-r-- 1 1007 setgid 0 Aug 19 10:50 /opt/test-2
[root@qls ~]# find /opt/ -nogroup -ls
101765332 0 -rw-rw-r-- 1 1006 1006 0 Aug 19 10:48 /opt/jason
根据目录的阶级,深度查找
-maxdepth #根据目录深度查找
[root@qls ~]# find / -maxdepth 4 -name 'ifcfg-eth0'
#根据权限查找
[root@qls ~]# find /opt/ -perm -444 -ls #包含读权限,全局,每一项都包含
101765326 0 drwxrwsrwx 2 root setgid 123 Aug 19 15:28 /opt/
101765329 0 -rw-r--r-- 1 root setgid 0 Aug 19 10:45 /opt/root.txt
101765330 0 -rw-rw-r-- 1 1006 setgid 0 Aug 19 10:46 /opt/jason.txt
[root@qls ~]# find /opt/ -perm 644 -ls #精确匹配
101765329 0 -rw-r--r-- 1 root setgid 0 Aug 19 10:45 /opt/root.txt
101765336 4 -rw-r--r-- 1 root setgid 5 Aug 19 11:38 /opt/test.log
[root@qls ~]# chmod o-r /opt/test.log
[root@qls ~]# chmod g-r /opt/root.txt
[root@qls ~]# ll /opt/
total 4
-rwxrwxrwx. 1 1006 1006 0 Aug 19 10:48 jason
-rw-rw-r--. 1 1006 setgid 0 Aug 19 10:49 jason-1
-rw-rw-r--. 1 1006 setgid 0 Aug 19 10:46 jason.txt
-rw----r--. 1 root setgid 0 Aug 19 10:45 root.txt
-rw-rw-r--. 1 1007 setgid 0 Aug 19 10:46 test-1
-rw-rw-r--. 1 1007 setgid 0 Aug 19 10:50 test-2
-rw-r-----. 1 root setgid 5 Aug 19 11:38 test.log
-rw-rw-r--. 1 user setgid 0 Aug 19 10:51 user
[root@qls ~]# find /opt/ -perm -444 -ls
101765326 0 drwxrwsrwx 2 root setgid 123 Aug 19 15:28 /opt/
101765330 0 -rw-rw-r-- 1 1006 setgid 0 Aug 19 10:46 /opt/jason.txt
101765331 0 -rw-rw-r-- 1 1007 setgid 0 Aug 19 10:46 /opt/test-1
101765332 0 -rwxrwxrwx 1 1006 1006 0 Aug 19 10:48 /opt/jason
101765333 0 -rw-rw-r-- 1 1006 setgid 0 Aug 19 10:49 /opt/jason-1
101765334 0 -rw-rw-r-- 1 1007 setgid 0 Aug 19 10:50 /opt/test-2
101765328 0 -rw-rw-r-- 1 user setgid 0 Aug 19 10:51 /opt/user
[root@qls ~]# find /opt/ -perm /444 -ls #包含,只要有一项满足,条件就成立
101765326 0 drwxrwsrwx 2 root setgid 123 Aug 19 15:28 /opt/
101765329 0 -rw----r-- 1 root setgid 0 Aug 19 10:45 /opt/root.txt
101765330 0 -rw-rw-r-- 1 1006 setgid 0 Aug 19 10:46 /opt/jason.txt
101765331 0 -rw-rw-r-- 1 1007 setgid 0 Aug 19 10:46 /opt/test-1
101765332 0 -rwxrwxrwx 1 1006 1006 0 Aug 19 10:48 /opt/jason
101765333 0 -rw-rw-r-- 1 1006 setgid 0 Aug 19 10:49 /opt/jason-1
101765334 0 -rw-rw-r-- 1 1007 setgid 0 Aug 19 10:50 /opt/test-2
101765328 0 -rw-rw-r-- 1 user setgid 0 Aug 19 10:51 /opt/user
101765336 4 -rw-r----- 1 root setgid 5 Aug 19 11:38 /opt/test.log
#根据特殊权限查找
[root@qls ~]# find / -perm -4000 -ls
100853298 32 -rwsr-xr-x 1 root root 32096 Oct 31 2018 /usr/bin/fusermount
100973706 24 -rws--x--x 1 root root 24048 Oct 31 2018 /usr/bin/chfn
100973709 24 -rws--x--x 1 root root 23960 Oct 31 2018 /usr/bin/chsh
100973761 32 -rwsr-xr-x 1 root root 32048 Oct 31 2018 /usr/bin/umount
[root@qls ~]# find / -perm -2000 -ls
100783613 16 -r-xr-sr-x 1 root tty 15344 Jun 10 2014 /usr/bin/wall
100973767 20 -rwxr-sr-x 1 root tty 19624 Oct 31 2018 /usr/bin/write
101041329 376 ---x--s--x 1 root nobody 382240 Apr 11 2018 /usr/bin/ssh-agent
101725997 40 -rwx--s--x 1 root slocate 40520 Apr 11 2018 /usr/bin/locate
[root@qls ~]# find / -perm -1000 -ls
69 0 drwxrwxrwt 4 root root 43 Aug 19 09:22 /var/tmp
33554504 0 drwxrwxrwt 12 root root 257 Aug 19 12:25 /tmp
33879954 0 drwxrwxrwt 2 root root 6 Aug 14 15:11 /tmp/.X11-unix
101002768 0 drwxrwxrwt 2 root root 6 Aug 14 15:11 /tmp/.XIM-unix
33879955 0 drwxrwxrwt 2 root root 6 Aug 14 15:11 /tmp/.ICE-unix
67502497 0 drwxrwxrwt 2 root root 6 Aug 14 15:11 /tmp/.font-unix
#根据时间进行查找
-mtime #根据修改时间查找
+7 #七天以前
-7 #七天以内
7 #第七天
[root@qls ~]# find /opt/ -mtime +7 -ls
101765313 0 -rw-r--r-- 1 root setgid 0 Aug 1 00:00 /opt/file-01
101765321 0 -rw-r--r-- 1 root setgid 0 Aug 2 00:00 /opt/file-02
101765322 0 -rw-r--r-- 1 root setgid 0 Aug 3 00:00 /opt/file-03
101765325 0 -rw-r--r-- 1 root setgid 0 Aug 4 00:00 /opt/file-04
101765327 0 -rw-r--r-- 1 root setgid 0 Aug 5 00:00 /opt/file-05
101765335 0 -rw-r--r-- 1 root setgid 0 Aug 6 00:00 /opt/file-06
101765337 0 -rw-r--r-- 1 root setgid 0 Aug 7 00:00 /opt/file-07
101765338 0 -rw-r--r-- 1 root setgid 0 Aug 8 00:00 /opt/file-08
101765339 0 -rw-r--r-- 1 root setgid 0 Aug 9 00:00 /opt/file-09
101765340 0 -rw-r--r-- 1 root setgid 0 Aug 10 00:00 /opt/file-10
101765341 0 -rw-r--r-- 1 root setgid 0 Aug 11 00:00 /opt/file-11
[root@qls ~]# find /opt/ -mtime -7 -ls
101765326 4 drwxrwsrwx 2 root setgid 4096 Aug 31 2019 /opt/
101765329 0 -rw----r-- 1 root setgid 0 Aug 19 2019 /opt/root.txt
101765330 0 -rw-rw-r-- 1 1006 setgid 0 Aug 19 2019 /opt/jason.txt
101765331 0 -rw-rw-r-- 1 1007 setgid 0 Aug 19 2019 /opt/test-1
101765332 0 -rwxrwxrwx 1 1006 1006 0 Aug 19 2019 /opt/jason
101765333 0 -rw-rw-r-- 1 1006 setgid 0 Aug 19 2019 /opt/jason-1
101765334 0 -rw-rw-r-- 1 1007 setgid 0 Aug 19 2019 /opt/test-2
101765328 0 -rw-rw-r-- 1 user setgid 0 Aug 19 2019 /opt/user
101765336 4 -rw-r----- 1 root setgid 5 Aug 19 2019 /opt/test.log
101765343 0 -rw-r--r-- 1 root setgid 0 Aug 13 00:00 /opt/file-13
101765344 0 -rw-r--r-- 1 root setgid 0 Aug 14 00:00 /opt/file-14
101765345 0 -rw-r--r-- 1 root setgid 0 Aug 15 00:00 /opt/file-15
101765346 0 -rw-r--r-- 1 root setgid 0 Aug 16 00:00 /opt/file-16
101765347 0 -rw-r--r-- 1 root setgid 0 Aug 17 00:00 /opt/file-17
101765349 0 -rw-r--r-- 1 root setgid 0 Aug 18 00:00 /opt/file-18
101765350 0 -rw-r--r-- 1 root setgid 0 Aug 19 00:00 /opt/file-19
[root@qls ~]# find /opt/ -mtime 7 -ls
101765342 0 -rw-r--r-- 1 root setgid 0 Aug 12 00:00 /opt/file-12
[root@qls ~]# find /opt/ -mtime +7 |xargs rm -f #把七天以前的数据删除
find自带动作
-print #打印,默认就是该动作
-ls #以长格形式显示文件信息,详细的属性信息
[root@qls ~]# find /opt/ -mtime +7 -ls
101765313 0 -rw-r--r-- 1 root setgid 0 Aug 1 00:00 /opt/file-01
101765321 0 -rw-r--r-- 1 root setgid 0 Aug 2 00:00 /opt/file-02
-delete #删除查询出来的内容,只能删除文件,或者是空目录
[root@qls ~]# find /opt/ -mtime 7 -delete
-ok #后面跟shell命令,会询问是否确定操作
[root@qls ~]# find /opt/ -mtime -7 -ok rm -f {} \;
< rm ... /opt/ > ? n
< rm ... /opt/root.txt > ? n
-exec #后面跟shell命令
[root@qls ~]# find /opt/ -mtime -7 -exec rm -f {} \;
find与xargs配合
[root@qls ~]# find /var/log/ -type f -size +200k -exec cp -v {} /opt/01/ \;
[root@qls ~]# find /var/log/ -type f -size +200k | xargs cp -t /opt/02
[root@qls ~]# find /var/log/ -type f -size +200k | xargs -I {} cp {} /opt/03
[root@qls ~]# cp `find /var/log/ -type f -size +200k` /opt/04
[root@qls ~]# cp $(find /var/log/ -type f -size +200k) /opt/05
find练习题
1.查找/tmp目录下,属主不是root,且文件名不以f开头的文件
[root@qls ~]# find /tmp/ -not -user root ! -name 'f*' -ls
33970406 4 -rw-r--r-- 1 user root 12 Aug 19 2019 /tmp/test.log
2.查找/var目录下属主为root,且属组为mail的所有文件
[root@qls ~]# find /var -type f -user root -group mail -ls
33605500 0 drwxrwxr-x 2 root mail 152 Aug 19 2019 /var/spool/mail
33978097 4 -rw------- 1 root mail 616 Aug 17 12:29 /var/spool/mail/root
3.查找/var目录下属主不属于root、lp、adm的所有文件
[root@qls ~]# find /var/ -type f -not \( -user root -o -user lp -o -user adm \) -ls
32679 4 -rw-r--r-- 1 user01 user01 3736 Nov 26 2018 /var/tmp/yum-user01-2oaLuc/x86_64/7/base/repomd.xml
32680 0 -rw-r--r-- 1 user01 user01 0 Aug 17 11:14 /var/tmp/yum-user01-2oaLuc/x86_64/7/base/cachecookie
32715 4 -rw-r--r-- 1 user01 user01 528 Aug 15 16:26 /var/tmp/yum-user01-2oaLuc/x86_64/7/base/mirrorlist.txt
4.查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件
[root@qls ~]# find /var -type f -mtime -7 ! \( -user root -o -user postfix \) -ls
32680 0 -rw-r--r-- 1 user01 user01 0 Aug 17 11:14 /var/tmp/yum-user01-2oaLuc/x86_64/7/base/cachecookie
32715 4 -rw-r--r-- 1 user01 user01 528 Aug 15 16:26 /var/tmp/yum-user01-2oaLuc/x86_64/7/base/mirrorlist.txt
5.查找/etc目录下大于1M且类型为普通文件的所有文件
[root@qls ~]# find /etc/ -type f -size +1M |xargs ls -lh
-rw-------. 1 root root 3.8M Nov 3 2018 /etc/selinux/targeted/active/policy.kern
-rw-r--r--. 1 root root 1.4M Nov 3 2018 /etc/selinux/targeted/contexts/files/file_contexts.bin
-rw-r--r--. 1 root root 3.8M Nov 3 2018 /etc/selinux/targeted/policy/policy.31
-r--r--r--. 1 root root 7.6M Aug 14 15:27 /etc/udev/hwdb.bin
6.将/etc/中的所有目录(仅目录)复制到/tmp下,目录结构不变
[root@qls ~]# find /etc -type d |xargs -I {} mkdir -p /tmp/{}
[root@qls ~]# find /etc -type d -exec mkdir -p /tmp/{} \;
7.将/etc目录复制到/var/tmp/,/var/tmp/etc的所有目录权限777,/var/tmp/etc目录中所有文件权限666
[root@qls ~]# cp -a /etc /var/tmp/
[root@qls ~]# find /var/tmp/ -type d -exec chmod 777 {} \;
[root@qls ~]# find /var/tmp/ ! -type d -exec chmod 666 {} \;
8.保留/var/log/下最近7天的日志文件,其他全部删除
find /var/log ! -mtime -7 -delete
9.创建touch file{1..10}10个文件, 保留file9,其他一次全部删除
[root@qls opt]# find ./ -type f ! -name 'file9' -delete
10.解释如下每条命令含义
mkdir /root/dir1
touch /root/dir1/file{1..10}
find /root/dir1 -type f -name "file5"
find /root/dir1 ! -name "file5"
find /root/dir1 -name "file5" -o -name "file9"
find /root/dir1 -name "file5" -o -name "file9" -ls #-ls的bug
find /root/dir1 \( -name "file5" -o -name "file9" \) -ls
find /root/dir1 \( -name "file5" -o -name "file9" \) -exec rm -rvf {} \;
find /root/dir1 ! \( -name "file4" -o -name "file8" \) -exec rm -vf {} \;
练习题
16.创建10个用户,前缀是你的名,后缀为数字序列,比如zengjia1等,并给其10个用户设置统一密码为123456,最后尝试是否可以登录。
[root@qls ~]# seq 10 | awk '{print "useradd egon"$1 " && echo '123456' | passwd --stdin egon"$1}' | bash
17.创建10个用户,前缀是oldboy,后缀为数字序列,比如oldboy1等,并给其10个用户设置随机密码,最后尝试是否可以登录。
[root@qls ~]# seq 10 | awk '{print "useradd owen"$1 " && mkpasswd -l 10 -d 2 -c 2 -C 2 -s 4 |tee pass"$1".txt | passwd --stdin owen"$1}' |bash
使用命令调换/etc/passwd文件里 root 位置和/bin/bash 位置? 即将所有的第一列和最后一列位置调换?
[root@qls ~]# sed -r 's#(.*)(:x.*:)(.*)#\3\2\1#g' passwd
[root@qls ~]# awk -F: '{print $NF":"$2":"$3":"$4":"$5":"$6":"$1}' passwd