1.grep
过滤:在文件中或管道中进行查找,找出想要的内容(字符串)默认按照行查找.
grep会把匹配到的行显示出来
1.1概述
grep选项 | 说明 |
---|
-n | line-number 显示行号 |
-v | 排除,取反 |
-i | ignore-case 过滤的时候忽略大小写 |
1.2基本用法
在/etc/passwd中过滤出包含root的行
grep '你要找的内容' /etc/passwd
grep 'root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
grep 也可以对接管道
过滤出叫crond的进程
ps -ef |grep 'crond'
2.find
四剑客四号选择,擅长查找文件。在指定的目录中查找你要的文
件,文件名。
find命令选项 | 说明 |
---|
-type | 什么类型的文件 f表示文件 d表示目录 |
-name | 文件名 |
-size | 根据大小查找文件 +表示大于 -表示小于+10k(小写K) +10M(大写) G |
-mtime | 根据修改时间查找文件 |
2.1基础用法
find 目录 指定类型 指定名字
#案例01 在/etc/目录中找出文件名叫hostname文件
精确查找,指定文件名。
find /etc/ -type f -name 'hostname'
/etc/hostname
#案例02 找出/etc/下面以.conf结尾的文件
a.conf b.conf c.conf lidao.conf xxxx.conf
find /etc/ -type f -name '*.conf'
#进阶案例06 查找文件的时候指定最多找多少层目录.
find / -maxdepth 2 -type f -name "*.conf"
-maxdepth 1 选项位置第1个,指定find命令查找的最大深度
(层数),不加上就是所有层。
#案例07 查找的时候不区分文件名的大小写
find / -type f -iname "*.conf"
#ignore case
2.2特别注意
我们发现find命令使用管道把数据传输给其他命令失败了!!!
find /oldboy/find/ -type f -name "*.txt" | ls -l
无法使用。
关于管道的秘密:
find /oldboy/find/ -type f -name '*.txt' | ls
-lh
ls 选项 参数
错误的心路历程:
默认管道是无法把数据变化为命令的参数,导致传递失败,find
命令找出的内容相当于被丢弃了,就相当于执行ls -lh命令,显示当
前目录下内容并详细信息。
故障原因:
前面的命令通过管道传递给后面命令,传递的是 字符串 .
这个命令(ls)中传递文字符号就不行,传递 参数 .
所以上面的命令相当于find白白浪费了,仅仅执行了下ls -lh而已 .
如何解决:
通过|xargs把前面命令传递过来的字符串转换为后面命令可以识别参数.
效果展示:
find /oldboy/find/ -type f -name '*.txt' |xargs ls -lh