shell编程四剑客之find:
- 在Shell编程工具中,四剑客工具的使用更加的广泛,Shell编程四剑客包括:find、sed、grep、awk,熟练掌握四剑客会对Shell编程能力极大的提升。
- 四剑客之Find工具实战,Find工具主要用于操作系统文件、目录的查找,其语法参数格式为:
find path -option [ -print ] [ -exec -ok command ] { } \;
option常用参数详解如下:
- -name filename #查找名为filename的文件;
例:
[root@localhost ~]# find /etc/ -name passwd ---查找/etc/下名为passwd的文件
/etc/passwd
/etc/pam.d/passwd
- -type b/d/c/p/l/f #查是(b)块设备、(d)目录、©字符设备、§管道、(l)符号链接、(f)普通文件;
例1:
[root@localhost ~]# find /dev/ -type b --查找/dev/下块设备文件
/dev/dm-1
/dev/dm-0
/dev/sr0
/dev/sda2
/dev/sda1
/dev/sda
[root@localhost ~]# ls -l /dev/dm-1
brw-rw----. 1 root disk 253, 1 7月 26 15:14 /dev/dm-1
例2:
[root@localhost ~]# find /root -type d --查找/root下所有目录包含/root
/root
[root@localhost ~]# ll -d /root
dr-xr-x---. 2 root root 4096 7月 25 22:58 /root
例3:
[root@localhost ~]# find /dev/ -type c 查找/dev/下所有字符设备文件
/dev/vsock
/dev/vcsa6
[root@localhost ~]# ll -d /dev/vsock
crw-------. 1 root root 10, 56 7月 26 15:14 /dev/vsock
例4:
[root@localhost ~]# find / -type p 查找/下所有管道文件
/run/dmeventd-client
/run/dmeventd-server
[root@localhost ~]# ll -d /run/dmeventd-client
prw-------. 1 root root 0 7月 26 15:14 /run/dmeventd-client
例5:
[root@localhost ~]# find /usr/share/man/ -type l ---查找/usr/share/man/下所有符号链接的文件
/usr/share/man/man1/xzegrep.1.gz
/usr/share/man/man1/xzfgrep.1.gz
[root@localhost ~]# ll -d /usr/share/man/man1/xzegrep.1.gz
lrwxrwxrwx. 1 root root 11 2月 14 03:21 /usr/share/man/man1/xzegrep.1.gz -> xzgrep.1.gz
例6:
[root@localhost ~]# find /root -type f 查找/root/下所有普通文件
/root/test.txt
[root@localhost ~]# ll -d /root/test.txt
-rw-r--r--. 1 root root 11 7月 25 21:42 /root/test.txt
-size +容量 | -容量 #按容量大小查找
例1:
[root@localhost ~]# find /usr/src/ -size +1M 查找在/usr/src/下大于1M的文件
/usr/src/apache-tomcat-9.0.36.tar.gz
/usr/src/nginx-1.16.1/objs/nginx
/usr/src/nginx-1.16.0/objs/nginx
/usr/src/nginx-1.18.0/objs/nginx
[root@localhost ~]# du -sh /usr/src/apache-tomcat-9.0.36.tar.gz
11M /usr/src/apache-tomcat-9.0.36.tar.gz
例2:
[root@localhost ~]# find /usr/src/ -size +1M -size -15M 查找/usr/src/下大于1M小于15M的文件
/usr/src/apache-tomcat-9.0.36.tar.gz
-perm #按执行权限来查找;
例:
[root@localhost ~]# find /root/ -perm 644 -type f 查找/root/下权限为644并且是普通文件
/root/test1.sh
[root@localhost ~]# ll -d /root/test1.sh
-rw-r--r--. 1 root root 1161 7月 21 16:47 /root/test1.sh
提示:r=4,w=2,x=1
- -user username #按文件属主来查找
- group greoupname #按组来查找
[root@localhost ~]# find / -user ys -group ys 查找/下所有数组属主为ys的文件或目录
/home/ys
[root@localhost ~]# ll -d /home/ys
drwx------. 3 ys ys 86 2月 14 04:09 /home/ys
-mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前;
-atime -n +n #按文件访问时间来查找文件;
-ctime -n +n #按文件创建时间来查找文件;
[root@localhost ~]# find /root/ -mtime -1 ---查找/root下一天内更改过的文件或目录
/root/test.txt
[root@localhost ~]# stat /root/test.txt
文件:"/root/test.txt"
大小:11 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:33617265 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2020-07-25 21:42:27.038601276 +0800
最近更改:2020-07-25 21:42:22.116571971 +0800
最近改动:2020-07-25 21:42:22.116571971 +0800
创建时间:-
mmin -n +n #按文件更改时间来查找文件,-n指n分钟以内,+n指n分钟以前;
-amin -n +n #按文件访问时间来查找文件;
-cmin -n +n #按文件创建时间来查找文件;
例:
[root@localhost ~]# touch ys.txt
[root@localhost ~]# find /root -mmin -1 -type f 查找/root下更改时间在一分钟之内的普通文件
/root/ys.txt
[root@localhost ~]# stat /root/ys.txt
文件:"/root/ys.txt"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:33582685 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2020-07-26 16:16:27.168400745 +0800
最近更改:2020-07-26 16:16:27.168400745 +0800
最近改动:2020-07-26 16:16:27.168400745 +0800
创建时间:-
###可以看得出来/root/ys.txt这个文件访问时间和更改和改动一样
[root@localhost ~]# echo aaa> ys.txt
[root@localhost ~]# stat /root/ys.txt
文件:"/root/ys.txt"
大小:4 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:33582685 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2020-07-26 16:16:27.168400745 +0800
最近更改:2020-07-26 16:20:35.109956774 +0800
最近改动:2020-07-26 16:20:35.109956774 +0800
创建时间:-
###现在就有变化了
[root@localhost ~]# find /root -amin -4 -type f 查看/root下访问时间是在4分钟之内的普通文件
可以看得出来没有差的出来
[root@localhost ~]# cat ys.txt 访问一下 /root/ys.txt这个文件
aaa
再次查找就出来了
[root@localhost ~]# find /root -amin -4 -type f
/root/ys.txt
1. find工具-name参数案例:
[root@localhost ~]# find /root/ -name "*.txt" ---查找/root下以.txt结尾的文件
[root@localhost ~]# find /root -name "[a-Z]*" ---查找/root下以a-Z开头的文件或者目录
[root@localhost ~]# find /root/ -name "test*" ---查找/root下以test开头的文件
2. Find工具-type参数案列:
[root@localhost ~]# find /usr/ -type d ---查找/usr/下所有文件夹
[root@localhost ~]# find /usr/ ! -type d ---查找/usr/下所有非文件夹
[root@localhost ~]# find /usr/ -type d | xargs chmod -R 755 ---查找/usr/下的所有目录并设置为755权限
或者:
[root@localhost ~]# find /usr/ -type d -exec chmod -R 755 {}\;
3. Find工具-size参数案列:
[root@localhost ~]# find /data/ -size +1M #查文件大小大于1Mb的文件;
[root@localhost ~]# find /data/ -size 10M #查文件大小为10M的文件;
[root@localhost ~]# find /data/ -size -1M #查文件大小小于1Mb的文件;
4. Find工具参数综合案列
#查找/data目录以.log结尾,30天以前的文件,大小大于10M并移动到/tmp目录;
[root@localhost ~]# find /data/ -name "*.log" -type f -mtime +30 -siz +10M -exec mv {} /tmp/ \;
#查找/data目录以.log结尾,文件大于10k的文件,同时cp到/tmp目录;
[root@localhost ~]# find /data/ -name "*.log" -type f -size 10k -exec cp -a {} /tmp/ \;
#查找/data目录以.txt结尾,文件大于10k的文件,权限为644并删除该文件;
[root@localhost ~]# find /data/ -name "*.txt" -type f -size +10k -perm 644 | xargs rm -rf