1.查找
find
查找文件或目录
语法
find [搜索范围] [选项]
选项
-name 按照指定的文件名查找
-path 可以对文件的dir_name、file_name匹配
-type 通过文件类型查找
-mtime 查找几日之内或几日之前的文件
-mmin 查找几分钟之内或几分钟之前的文件
-size 按照指定的文件大小查找文件
-a:与,即&&(默认都是与)
-o:或:即||
-not:非,即条件结果取反
-empty 搜索空文件
-user 查找属于指定用户名文件
-group 查找属于指定用户组文件
通过文件名搜索
#根据名称查找/home目录下的hello.txt文件
find /home -name hello.txt
#将当前目录及其子目录下所有文件后缀为 .txt 的文件列出来
find . -name "*.txt"
#将/etc及其子目录下所有文件后缀为 .conf 的文件列出来
find /etc -name "*.conf"
#查找/opt/dir目录下的.txt文件
find /opt -path "/*dir*/*.txt"
--在这里是不能使用-name的。因为 -name 是不能使用 / 的,除非文件名包含了 / , 因为 -name 只能匹配 file_name (即文件名),并不匹配 dir_name (即目录名)
通过文件的类型来搜索
#在/opt目录下查找所有的目录
find /opt -type d
#在/opt目录下查找所有的文件
find /opt -type f
通过文件的时间搜索
#在/opt目录下查找修改时间在5日以内的文件
find /opt -mtime -5
#在/opt目录下查找修改时间在3日以前的文件
find /opt -type f -name "*.txt" -mtime +3
#在/opt目录下查找更改时间在5分钟以内的.txt文件
find /opt -type f -name "*.txt" -mmin -5
#在/opt目录下查找修改时间在10分钟以前的文件
find /opt -mmin +10
注意:
- 无论是 -mtime +5 还是 -mtime -5 ,第五天内修改过的文件都不会被搜索出来,可看下图
通过文件的大小来搜索
b:512字节的块(默认),1b = 512c
c:bytes,指定字节大小
w:等价于两个bytes,1w=2c,一般用户匹配中文
k:平时常说的1kb,1k=1024c=2b
M:1MB,1M=1024k=2048b
G:1GB,1GB=1024MB=2048*1024b
+n 大于
-n 小于
n 等于
#在~/test目录下查找所有size=0字节的文件
find ~/test -size 0
#在~/test目录下查找所有size<100k的文件
find ~/test -size -100k
#在~/test目录下查找所有size>1MB的文件
find ~/test -size +1M
通过编程中的“与、或、非”来搜索
- -a:与,即&&(默认都是与)
- -o:或:即||
- -not:非,即条件结果取反
#在~/test目录下查找文件大小在1kb和10kb内的所有文件
find ~/test -size +1k -size -10k
find ~/test -size +1k -a -size -10k
#在~/test目录下查找大于1kb或类型为普通文件的文件
find ~/test -size +1k -o -type f
#在~/test目录下查找非空文件
find ~/test -not -size 0
#在~/test目录下查找文件或目录
find ~/test -type f -o -type d
搜索空文件
find ~/test -empty -type f
通过文件所属用户搜索
find ~/test -user root
通过文件所属组group搜索
find ~/test -group root
which
查找某个指令的路径
#查找ls命令的位置
which ls
2.搜索
grep
在文件中查找字符串
- 常常和管道符 | 结合使用
- grep过滤查找,管道符 “|”,表示将前一个命令的处理结果输出传递给后面的命令处理
语法
grep [选项] 查找内容 原文件
grep的常用选项参数
-G 默认值
-F 相当于使用fgrep,但必须用 -F
-E 相当于使用egrep,但必须用 -E。匹配多个条件使用
-V 打印 grep 的版本号
#查找f1和dir文件
ls | grep -E "f1|dir"
匹配控制选项参数
-n 显示匹配行及行号
-e 当你有多个正则表达式想同时匹配时,可以用 -e,一个 -e 接一个正则表达式,它们是或的关系,不是与的关系
-i 忽略首字母大小写
-v 反转匹配,选择没有被匹配到的内容
-w 匹配整词,精确的单词,单词的两边必须是非字符符号(即不能是字母数字或下划线)
-x 精确匹配。仅选择与整行完全匹配的匹配项
#查找含f或d的文件
ls | grep -e f -e d
#查找dir文件,忽略首字母大写。意思就是大小写都显示
ls | grep -i dir
--结果:
dir
DIR
#包含dir的文件都不显示
ls | grep -v dir
#查找jj.txt。只输入一个j是匹配不出来的
ls | grep -w jj
#查找jj.txt。与-w相比,-x必须输入整个文件名
ls | grep -x jj.txt
一般输出控制选项
-s 禁止显示错误信息
-q 安静模式,不会有任何输出内容,查找到匹配内容会返回0,未查找到匹配内容就返回非0
-m num 匹配 num 次后停止
-c 匹配成功数量
-l 列出匹配成功结果的文件来源(标准输入或文件名称)
-H 给每一个匹配结果打印来源(标准输入、文件名)
#匹配d开头文件3次
ls | grep -m 3 d
#匹配dir文件的数量
ls | grep -c dir
输出控制参数讲解
-b 输出的同时打印字节偏移
-n 输出的同时打印行号
-H 给每一个匹配结果打印来源(标准输入、文件名)
-h 输出是不显示来源(默认)
-o 只显示匹配 PATTERN 的部分
#显示匹配的dir同时显示行号
ls | grep -n dir
上下文线控制选项
-A num 匹配到搜索到的行以及该行下面的num行
-B num 匹配到搜索到的行以及该行上面的num行
-C num 匹配到搜索到的行以及上下各num行
#显示dir3及下面的2行
ls | grep -A 2 dir3
#显示dir3及上面的2行
ls | grep -B 2 dir3
#显示dir3及上下的2行
ls | grep -C 2 dir3
文件和目录选项
-a 不忽略二进制的数据
-d 当要查找的是目录而非文件时,必须使用这项参数
-r 以递归方式读取每个目录下的所有文件; 这相当于-d recurse选项。
常用语法
写的正则表达式最好用 “”包起来,当碰到需要转义符的时候才会生效
#查找/opt/dir下.txt文件
ls /opt/dir | grep ".txt"
#查找指定进程
ps -ef | grep "java"
#查找指定进程并统计数量
ps -ef | grep -c "java"
#从文件中查找关键字
grep "b" jj.txt
#从文件中查找关键字并输出它的行号
grep -n "b" jj.txt
#从多个文件中查找关键字
grep "b" jj.txt bb.txt
#查找jj.txt文件中的“b”
cat jj.txt | grep "b"
#查找jj.txt文件中的“b”,并显示行号
cat jj.txt | grep -n "b"
#从文件中查找关键字后,再从结果中找到指定关键字
cat jj.txt | grep "s" | grep "b"
#找出文件中的空白行
grep -n ^$ jj.txt
3.查看历史指令
选项
-c 清除历史记录
-w 将目前的 history 记忆内容写入 histfiles
例子
#查看所有历史指令
history
#查看命令mkdir 的历史执行记录
history | grep mkdir
#查看最近使用的10个指令(两种方式)
history 10
history | tail -10
#执行历史记录中,序号为5的命令
!5
#执行上一条命令(直接输入两个感叹号)
!!
#清除历史记录
history -c
#将当前所有历史记录写入历史文件中,默认写入 ~/.bash_history
history -w
cat ~/.bash_history#查看写入的历史记录
