|
1:命令的搜寻
which [-a] command
选项与参数:
-a :将所有由 PATH 目录中可以找到的命令均列出,而不止第一个被找到的命令名称
# which ifconfig
which是根据$PATH路径来搜寻命令的,所以shell内部命令是找不到的,但可以用type命令查看
2:whereis (寻找特定文件)
whereis [-bmsu] 文件或目录名
选项与参数:
-b :只找 binary 格式的文件
-m :只找在说明档 manual 路径下的文件
-s :只找 source 来源文件
-u :搜寻不在上述三个项目当中的其他特殊文件
# whereis ls
3:find [OPTION]... [查找路径] [查找条件] [处理动作]
查找路径:默认为当前路径;
查找条件:指定的查找标准,可以根据文件名、大小、属主属组、类型等进行;默认为找出指定路径下的所有文件;
处理动作:对符合条件的文件做什么操作;默认为输出至屏幕;
查找条件:
(1) 根据文件名进行查找:
-name 文件名:同时-name也支持统配符,范例 -name filename
-iname 文件名:不区分大小写
# find /home -name "*.txt
# find /home -iname "*.txt"
-newer <参考文件或目录> : 修改时间.说明:find找出结果比<参照文件或目录修改时间新>
# find ./ -newer test.txt
-anewer <参考文件或目录> :访问时间.find找出结果比<参照文件或目录访问时间新>
-cnewer <参考文件或目录> : 状态改变时间,find找出结果比<参照文件或目录状态时间新>
(2)根据属主,属主查找
-user USERNAME: 根据属主来找文件,USERNAME为属主名
-group GROUPNAME:根据属组来找文件,GROUPNAME为属组名
-uid USERUID:根据用户帐号的UID找文件,USERUID为用户主UID
-gid GROUPGID:根据用户组的GID找文件,GROUPGID为用户组GID
-nouser:找没有用户主的文件
-nogroup:找没用用户组的文件
(3) 根据文件类型查找
-type TYPE:表示找的类型为TYPE,
f:普通文件
d:目录
l:符号连接
b:块设备
c:字符设备
p:命名管道
s:套接字
(4) 组合查找条件:
-a:与条件
-o:或条件
-not:非条件
!:非条件
# find /home ! -name "*.txt"
非条件优先线最高,-a条件第2,-o件优先级最低
写个范例:假如我们要找一个普通文件,并且没有用户,我们可以这样写
find /tmp --type f -a -nouser -ls
假如我们找tmp下所有没有属主,或者是属组是www 的文件
find /tmp \(-nouser -o -group www\) 因为是或条件,所以最好()括起来。
假如我们要找/etc/下不以.conf结束的文件
find /etc ! -name *.conf
!A -o !B = !(A -a B)
!A -a !B = !(A -o B)
(5) 根据文件大小的查找
-size [+-] SIZE
常用单位为K,M,G
搜索大于10KB的文件
# find . -type f -size +10k
搜索小于10KB的文件
# find . -type f -size -10k
搜索等于10KB的文件
#find . -type f -size 10k
也就说当 我们找5M的文件时,所找出的文件范围为4<X≤5
也就是大于5M,x>5M
也就是说找小于5M的文件时,所找出的范围是0≤x≤(5-1)。4M以下文件包括4M
5M:4M<X≤5 M
+5M: X>5M
-5M: 0M≤X≤4M
(6) 根据时间查找: 以天为单位的分别是下面3个
-atime 访问时间 -ctime 属性改变时间 -mtime 内容修改时间
-amin 以分钟计算访问时间 -cmin -mmin
-atime +#: 表示#+1,也就是x≥#+1 举例:-atime +3 表示从≥第4天开始。
- atime -#: 表示#-1,也就是x≤# 举例: -atime -3 表示≤ 3天,3天以内包括3天
-atime #: 就是#<x<#+1 举例: -atime 3 表示找的时间段3<x<4
# find ./ -mtime 0
那个 0 是重点!0 代表目前的时间,所以,从现在开始到 24 小时前。
(7)
根据权限查找:
-perm [+|-]MODE
MODE: 精确匹配
+MODE:找出的文件的权限"包括任一mode的权线"
-MODE: 找出的文件的权限"必须要包括全部mode的权线"
范例:我们找一个权限为644的脚本。
# find ./ -type f -name "*.sh" -perm -644
# ll remove_after.sh
-rwxr-xr-x1 root root 119 Jun 14 14:07 remove_after.sh
这个脚本权限为755,755就包括了mode模式中的所有权限。所以就会显示出来
(8)
-maxdepth <指定寻找最大层数>
# find . -maxdepth 1 -regex ".*\(\.sh\|\.log\)$"
说明:只查找当前目录下的.sh或.log
# find . -maxdepth 3 -regex ".*\(\.sh\|\.log\)$"
说明:从当前目录开始向下查找最大深度限制为3
-mindepth <指定最小寻找层数>
# find . -mindepth 1 -regex ".*\(\.sh\|\.log\)$"
说明:1为从当前目录开始向下的目录查找文件
# find . -mindepth 2 -regex ".*\(\.sh\|\.log\)$"
说明:会从第2层目录开始向下找文件。
(9) 基于正则:-regex
基于正则表达式匹配文件路径
# find . -regex ".*\(\.txt\|\.pdf\)$"
同上,-iregex 但忽略大小写
# find . -iregex ".*\(\.txt\|\.pdf\)$"
(10)-path 或 -ipath 匹配路径和目录
查找rpm文件,但是不查找当前目录test,同时把查找到的文件拷贝到/tmp目录下
# find ./ -path "./test" -prune -o -name "*.rpm" -exec cp {} /tmp/ \;
说明:-path 匹配路径和目录,这里为匹配test目录, -ipath同理,但不区分大小写。-prune:排出文件或目录
来自: http://man.linuxde.net/find
要忽略两个以上的路径如何处理?代码如下:
find /home/zth /( -path “/home/zth/astetc” -o -path “/home/zth/etc” /) -prune -o -type f -print
注意:/( 和/) 前后都有空格。
(11) ls fls print fprint fprint0 区别
# find . -regex ".*\(\.sh\|\.log\)$" -ls
说明:-ls 以列表方式直接在屏幕显示出来
# find . -regex ".*\(\.sh\|\.log\)$" -fls test.txt
说明:-fls是把找到文件以详细列表的方式保存到test.txt文件里
# find . -regex ".*\(\.sh\|\.log\)$" -print
说明:-print是把找到文件显示在屏幕上,只是找到内容以格式为每列一个名称,每个名称前皆有“./”字符串;默认已经加了-print 这个参数
# find . -regex ".*\(\.sh\|\.log\)$" -fprint test.txt
说明:把找出来结果以列的方式保存到指定的文件test.txt里
# find . -regex ".*\(\.sh\|\.log\)$" -fprint0 test.txt
说明:把找出来结果以行的方式保存到指定的文件test.txt里
(12) -fstype 指定系统文件格式
# find . -fstype ext4 -regex ".*\(\.sh\|\.log\)$"
说明:只寻找ext4该文件系统类型下的所有以.sh或.log 结尾的文件
(13)要列出所有长度为零的文件
find . -empty
(14)动作处理:
-exec command {} \;
找出当前目录下一天前的以log 结尾日志并删除
find ./ -mtime +1 -iname "*.log" -exec rm -v {} \;
-ok command {} \;
此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令;
$ find -mtime -31 -a -iname "confcmd*" | xargs tar zcvf confcmd.tar.gz
$ find -iname "confcmd-201708*" -exec tar cvf confcmd.tar.gz {} \;
|
|
|
|
|
|
|