文章目录
find
按照修改时间搜索-->
按照权限搜索
按照文件类型搜索
逻辑运算符
其它选项
实例
grep
选项
实例
PS
find
find 在指定目录下查找文件。匹配 文件名
-amin 查找 在指定时被 存取过的文件或目录(分钟)【cmin,mmin】
-atime 查找在指定时间存取过的文件或目录 (天) 【ctime,mtime】
-expty:寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录;
-name 按照文件名搜索
-iname 按照文件名搜索,不区分大小写
-inum 按照inode 号搜索
-size [+ | - ] 按照指定大小搜索
按照修改时间搜索–>
* Linux中文件有访问时间 (**atime**),数据修改时间 (**mime**) ,状态修改时间 (**ctime**),这三个时间。我们可以用这三个时间来搜索相关文件
这三个时间的区别我们在stat 命令中可以查看到,重点说说 【+ - 】时间的含义
* -5 :代表 5 天内修改的文件。
* 5 : 代表前 5~6 天那一天修改的文件
* +5 :代表 6 天前修改的文件。
* 画一个时间轴来解释一下
按照权限搜索
-perm /权限模式 根据权限查找: -perm [/|-]mode
mode:精确权限匹配;
/mode:任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件即满足;9位权限之间存在“或”关系;
-mode:每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足;9位权限之间存在“与”关系;
按照所有者和所属组搜索
-uid 用户ID 按照用户ID查找 所有者是指定ID的文件
-gid 组ID 按照用户组ID查找所属组是指定ID的文件
-user 用户名 按照用户名查找所有者是指定用户的文件
-group 组名 按照组名查找所属组是指定用户组的文件
-nouser 查找没有所有者的文件
-nouser 主要用于查找 垃圾文件
还有一各此方法是外来文件,比如 光盘和U盘中的文件如果是由Windows 复制的,在Linux中查看就是没有所有者的文件,再者 就是手工源码包安装 的文件,也有可能 没有所有者.
按照文件类型搜索
* -type d 查找目录
* -type f 查找普通 文件
* -type l 查找软链接文件
* > 根据文件的类型查找:
-type TYPE:
f: 普通文件
d: 目录文件
l:符号链接文件
b:块设备 文件
c:字符设备文件
p:管道文件
s:套接字文件
逻辑运算符
* -a and 逻辑 与
* -o or 逻辑或
* -not 或 ! not逻辑非
>find / -size +2k -a -type f
> 在根目录下搜索大于2KB,并且是普通的文件.
其它选项
-exec
find 搜索路径 [选项] 搜索内容 -exec 命令2 {} ;
这个选项的作用其实是把 find 命令的结果 交给 -exec 调用的 命令2 来处理 “{}” 就代表 find 命令查找的结果
-ok 与 -exec 作用一致 只是-ok 在 命令2处理的时候会询问是否执行.
实例
find /home -type f -name "*.txt"
# 查找/home 目录下的所有 .txt 的文件
# iname >>就是不区分大小写 Txt也是能查找
find /home -perm /744
# 查找 /home 目录下 权限(u g o ) 三个权限位中起码其中一个满足 (r w x )==>744(rwx r-- r-- )
find /home -name "*.txt" -o -name "*.pdf"
#查找 /home 目录下 .txt 文件或.pdf 的文件 [-a]逻辑与同理
find /home -type f -atime -7
# 查找 7天内被访问过的文件
# ctime / mtime / amin / cmin /min /+7 /7 ....
find /home -user mac -exec chown tom {} \;
# 查找 /home 目录下的所有者是mac 的文件 然后把查找的文件作为参数
# 全部交给 exec后面的命令 来执行,即 chown 改变所有者为tom
find /home -name "*.txt" -type f -exec cp {} /tmp \;
# 查找/home目录下所有.txt 的文件,然后全部复制到 /tmp 下
find ~ -perm -o=r
# 查找 家目录中对所有人可读的文件.
grep
grep [选项] “搜索内容” 文件名
选项
-i 忽略大小写
-n 输出行号
-v 反向查找
–color=auto 搜索出的关键字用颜色显示
* -o 只显示匹配到的内容.
实例
-A 数字N --> 找到所有的匹配行,并显示匹配行后面N行
grep -A 2 “a” test
表示 显示 匹配到 包含 a 的行并显示 其后面的 2 行
-B 数字N --> 找到所有匹配行,并显示匹配行的 前面 N 行
-c 显示有多少行被匹配到
-e 表示 可以使用多个 正则 表达式 grep -e "a" -e "1" -e "2" test
-f 表示 拿test1 里的每一行去匹配test2 并显示
grep -f test1 test2
-m 数字N 表示 最多匹配 N 个后停止
-R 表示 搜索当前目录及子目录
-v 表示 不包括 查找字符的所有行.取反
参数
解释
^
匹配行首
$
匹配行尾
[ ] or [ n-n ]
匹配 [ ] 内任意 一个字符
.
匹配任意的单字符
*
匹配其前一个字符任意次 包括 0 次
\
转义符 屏敝原字符的特殊意义
\?
匹配其前面的字符 0 次或 1 次 即前面可以可无
\+
匹配其前面的字符 1 次或 多 次 即前面字符至少出现 一次
\{ m\ }
匹配前面的字符 m 次
\{ m, n\ }
匹配前面的字符 至少 m 次 至多 n 次
\| 表示 或
-r 忽略子目录
实例
[root@localhost jxls] ls
test test1
[root@localhost jxls] cat -n test
1a
2bc
3def
4ght12
5abc999
6tydvl658
7123
8456
9789abc
1055.66
[root@localhost jxls] grep -n --color "33*" test
7:123
[root@localhost jxls] 这个3* 即指匹配 3 这个字符 0 次或 多 次
[root@localhost jxls] grep -n --color "^a" test
1:a
5:abc999
[root@localhost jxls] 上例 :匹配行首为 a 开头的
[root@localhost jxls] 同理 $
[root@localhost jxls] grep -n --color "3$" test
7:123
[root@localhost jxls] grep -n --color "a^ \| [0-9]$" test
[root@localhost jxls] grep -n --color "a^ \| [0-9]" test
[root@localhost jxls] echo bbb >> test
[root@localhost jxls] grep -n "[0-9]\|b\{1,\}" test
2:bc
4:ght12
5:abc999
6:tydvl658
7:123
8:456
9:789abc
10:55.66
11:bbb
[root@localhost jxls] grep -n "[0-9]\|b\{2,\}" test
4:ght12
5:abc999
6:tydvl658
7:123
8:456
9:789abc
10:55.66
11:bbb
PS
PS:需要注意的是,在基本正则表达式中,如通配符 *、+、{、|、( 和 )等,已经失去了它们原本的含义,而若要恢复它们原本的含义,则要在之前添加反斜杠 \,如 \*、\+、\{、\|、\( 和 \)
参考: