06grep与find命令详解

1. grep 命令

grep 命令用于在文本中执行关键词搜索,并显示匹配的结果,格式为“grep [选项][文件]”。
grep 命令的参数及其作用如下:
-b	将可执行文件(binary)当做文本文件(text)来搜索
-c	仅显示找到的行数
-i	忽略大小写
-n	显示行号  ***常用***
-v	反向选择——仅列出没有“关键字”的行   ***常用***

这些参数中,-n 和 -v 这两个参数几乎能完成您日后 80% 的工作需要。

//用grep命令来查找/etc/passwd 文件中包含“/sbin/nologin”的行
[root@bogon test]# grep -n /sbin/nologin /etc/passwd
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin
//省略部分输出信息

grep与正则表达式的大批额使用,请参考“21grep与正则表达式

2. find 命令

find 命令用于按照指定条件查找文件,格式为 “find [查找路径] 寻找条件 操作”。
Linux中,搜索工作都是通过 find 命令来完成的,它可以使用不同的文件特性作为寻找条件(如文件名、大小、修改时间、权限信息),一旦匹配成功则默认将信息显示到屏幕上。
find 命令的参数及其作用如下:
-name	匹配名称
-perm	匹配权限
-user	匹配所有者
-group 	匹配所有组
-mtime -n +n	匹配修改内容的时间(-n 指 n 天以内, +n 指 n 天之前)
-atime -n +n	匹配访问文件的时间(-n 指 n 天以内, +n 指 n 天之前)
-ctime -n +n	匹配修改文件权限的时间(-n 指 n 天以内, +n 指 n 天之前)
-nouser			匹配无所有者的文件
-nogroup		匹配无所有组的文件
-newer f1 !f2	匹配比文件f1新但比f2旧的文件
--type b/d/c/p/l/f	匹配文件类型(块设备、目录、字符设备、管道、链接文件、文本文件)
-size			匹配文件的大小(+50KB查找超过50KB的文件,-50KB查找小于50KB的文件)
-prune			忽略某个目录
-exec ..... {}; 后面可跟进一步处理搜索结果的命令

其中, -exec 参数用于把 find 命令搜索到的结果交由紧随其后的命令做进一步处理。

在 /etc 目录中,如果想要获取到该目录中所有以 host 开头的文件列表,可以执行如下命令:

#1.常规搜索
[root@bogon test]# find /etc -name "host*" -print
/etc/selinux/targeted/active/modules/100/hostname
/etc/host.conf
/etc/hosts
/etc/hosts.allow
/etc/hosts.deny
/etc/hostname
#2.1.在当前目录下,查找类型为文本文件,大小大于100M的文件
[oracle@bat3963 ~]$ find . -type f -size +100M        
./product/11.2.0/dbhome_1/bin/oracle
./product/11.2.0/dbhome_1/javavm/admin/classes.bin
./product/11.2.0/dbhome_1/rdbms/log/upgrade_20190215144109_tmp.dmp
./product/11.2.0/dbhome_1/rdbms/log/upgrade_20190303092619_tmp.dmp
./product/11.2.0/dbhome_1/rdbms/log/upgrade_20190326162200_tmp.dmp
./product/11.2.0/dbhome_1/lib/libserver11.a
#2.2.使用管道(|)无法传递 find 的输出
[oracle@bat3963 ~]$ find . -type f -size +100M | ls -l
total 88
drwxr-xr-x.  2 oracle users 4096 Nov 25  2016 Desktop
drwxr-xr-x.  2 oracle users 4096 Nov 25  2016 Documents
drwxr-xr-x.  2 oracle users 4096 Nov 25  2016 Downloads
drwxr-xr-x.  2 oracle users 4096 Nov 25  2016 Music
drwxr-xr-x.  2 oracle users 4096 Nov 25  2016 Pictures
#2.3.对于 find 的输出参数,可以使用 xargs 传递
[oracle@bat3963 ~]$ find . -type f -size +100M |xargs  ls -l
./product/11.2.0/dbhome_1/javavm/admin/classes.bin
-rwxrwxr-x. 1 oracle users   229064198 Nov 22  2016 ./product/11.2.0/dbhome_1/lib/libserver11.a
-rw-r-----. 1 oracle users   280539136 Feb 15  2019 ./product/11.2.0/dbhome_1/rdbms/log/upgrade_20190215144109_tmp.dmp
-rw-r-----. 1 oracle users   279851008 Mar  3  2019 ./product/11.2.0/dbhome_1/rdbms/log/upgrade_20190303092619_tmp.dmp
-rw-r-----. 1 oracle users   281624576 Apr 30  2017 ./product/11.2.0/dbhome_1/rdbms/log/upgrade_20190326162200_tmp.dmp
#3.find 配合 du 命令可以更方便的查看文件的大小
[oracle@bat3963 ~]$ find . -type f -size +100M |xargs  du -h
229M	./product/11.2.0/dbhome_1/bin/oracle
105M	./product/11.2.0/dbhome_1/javavm/admin/classes.bin
268M	./product/11.2.0/dbhome_1/rdbms/log/upgrade_20190215144109_tmp.dmp
267M	./product/11.2.0/dbhome_1/rdbms/log/upgrade_20190303092619_tmp.dmp
269M	./product/11.2.0/dbhome_1/rdbms/log/upgrade_20190326162200_tmp.dmp
219M	./product/11.2.0/dbhome_1/lib/libserver11.a
#4.du 和 df 的区别
#du查看目录大小,df查看磁盘使用情况,-h用于指定以K,M,G为单位,提高信息的可读性
[oracle@bat3963 ~]$ df -h
Filesystem                      Size  Used Avail Use% Mounted on
/dev/mapper/vg_bat3995-lv_root   60G   52G  5.4G  91% /
tmpfs                           6.9G  133M  6.7G   2% /dev/shm
/dev/sda1                       485M   39M  421M   9% /boot
 
#find命令 -exec ..... {};参数使用
#1.开始时,0611文件夹中只有test和findtest两个文件夹,并且test文件夹中有四个文件,findtest为空
[root@bogon 0611]# ls -R
.:
findtest  test

./findtest:

./test:
560_file  aaa.txt  aa.txt  a.txt
#2.执行find命令,将在test文件夹中找的的文件名以“a”打头的文件全部复制到findtest文件夹中
[root@bogon 0611]# find ./test -name "a*" -exec cp -a {} ./findtest/ ;
#3.再次查看文件夹,发现已经将查找到的文件都保存到了findtest中
[root@bogon 0611]# ls -R
.:
findtest  test

./findtest:
aaa.txt  aa.txt  a.txt

./test:
560_file  aaa.txt  aa.txt  a.txt
道虽迩,不行不至;事虽小,不为不成。
原文地址:https://www.cnblogs.com/rock-cc/p/9165816.html