Linux 系统下文件查找
1、which
(1)作用:用于查找并显示给定命令的绝对路径
(2)语法:which(选项)(参数)
(3)案例:
[root@localhost ~]# which cd #查找cd命令的路径
/usr/bin/cd
[root@localhost ~]# which cp #查找cp命令的路径
alias cp='cp -i'
/usr/bin/cp
2、whereis
(1)作用:来定位指令的二进制程序、源代码文件和man手册页等相关文件的路径。
(2)语法:whereis(选项)(参数)
(3)案例:
[root@dayi123 ~]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz
[root@dayi123 ~]# whereis shutdown
shutdown: /usr/sbin/shutdown /usr/share/man/man8/shutdown.8.gz
3、locate
(1)作用:查找文件或目录
(2)查找原理:根据系统上预建的文件索引数据库查找文件,依赖于事先构建的索引,索引的构建是在系统较为空闲时自动进行(周期性任务)或管理员手动更新数据库(updatedb),索引构建过程需要遍历整个根文件系统,极消耗资源
(3)工作特点:查找速度快、模糊查找、非实时查找、搜索的是文件的全路径,不仅仅是文件名、可能只搜索用户具备读取和执行权限的目录
(4)语法:locate (选项)(参数)
参数:-i 执行区分大小写的搜索
-n N只列举前N个匹配项目
(5)案例:
[root@dayi123 ~]# locate install.log #查找install.log文件
/root/install.log
/root/install.log.syslog
[root@dayi123 ~]# locate -n 6 *.sh #查找.sh结尾的文件,只显示前6个
/etc/acpi/actions/power.sh
/etc/bash_completion.d/gdbus-bash-completion.sh
/etc/dhcp/dhclient.d/ntp.sh
/etc/profile.d/colorls.sh
/etc/profile.d/glib2.sh
/etc/profile.d/lang.sh
(6)更新数据库:updatedb
locate对新建的文件查找不到,需要跟新数据库后才能查找
[root@dayi123 ~]# touch dayi123.html
[root@dayi123 ~]# locate dayi123.html #查找不到新建的文件
[root@dayi123 ~]# updatedb #更新数据库
[root@dayi123 ~]# locate dayi123.html #更新数据库后才能正常查找新建文件
/root/dayi123.html
4、find
(1)作用:实时查找工具,通过遍历指定路径完成文件查找
(2)语法:find [OPTION]... [查找路径] [查找条件] [处理动作]
查找路径:指定具体目标路径;默认为当前目录
查找条件:指定的查找标准,可以文件名、大小、类型、
权限等标准进行;默认为找出指定路径下的所有文件
处理动作:对符合条件的文件做操作,默认输出至屏幕
(3)查找条件:
1)根据文件名和inode查找:
条件:-name "文件名称":支持使用*, ?, [], [^]
-iname "文件名称":不区分字母大小写
-inum n 按inode号查找
-samefile name 相同inode号的文件
-links n 链接数为n的文件
-regex "PATTERN":以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称
[root@dayi123 ~]# find . -name dayi123.html #当前目录下查找文件名为dayi123.html文件
./dayi123.html
[root@dayi123 ~]# find . -inum 140370 #当前目录下查找inode号为140370的文件
./1.txt
[root@dayi123 ~]# find . -links 2 #当前目录下查找链接数为2的文件
./dayi123
./.ssh
2)根据属主、属组查找:
条件:-user USERNAME:查找属主为指定用户(UID)的文件
-group GRPNAME: 查找属组为指定组(GID)的文件
-uid UserID:查找属主为指定的UID号的文件
-gid GroupID:查找属组为指定的GID号的文件
-nouser:查找没有属主的文件
-nogroup:查找没有属组的文件
[root@dayi123 ~]# find /home/ -user dayi123 #查找属主为dayi123的文件
/home/dayi123
/home/dayi123/.bashrc
/home/dayi123/.bash_profile
/home/dayi123/.bash_logout
/var/spool/mail/dayi123
[root@dayi123 ~]# find /home/ -group hehe #查找属组为hehe的文件
/home/hehe
/home/hehe/.bashrc
/home/hehe/.bash_profile
/home/hehe/.bash_logout
[root@dayi123 ~]# userdel hehe
[root@dayi123 ~]# find ./ -nourser
find: unknown predicate `-nourser'
[root@dayi123 ~]# find ./ -nouser #查找没有属组的文件
./hehe.log
3)根据文件类型查找:
条件:-type TYPE:
f: 普通文件
d: 目录文件
l: 符号链接文件
s:套接字文件
b: 块设备文件
c: 字符设备文件
p: 管道文件
[root@dayi123 ~]# find . -type f #查找当前目录下的文件
./.bashrc
./1.txt
./.viminfo
./.bash_profile
./dayi123.html
./install.log
……
[root@dayi123 ~]# find /bin/ -type f #查找/bin/目录下的链接文件
/bin/taskset
/bin/ipcalc
/bin/gunzip
/bin/uname
……
4)根据文件大小来查找:
条件:-size [+|-]#UNIT
常用单位:k, M, G
[root@dayi123 ~]# find /etc/sysconfig/ -size +5k #查找/etc/sysconfig/下大于5k的文件
/etc/sysconfig/sysstat.ioconf
/etc/sysconfig/network-scripts/ifup-eth
……
[root@dayi123 ~]# find /etc/sysconfig/ -size -4k#查找/etc/sysconfig/下小于4k的文件
/etc/sysconfig/grub
/etc/sysconfig/ntpdate
/etc/sysconfig/readahead
……
5)根据时间查找(根据时间戳):
以“天”为单位;
-atime [+|-]#, 文件访问时间
-mtime [+|-]#, 文件修改时间
-ctime [+|-]#, 更改文件属性时间
以“分钟”为单位:
-amin
-mmin
-cmin
[root@dayi123 ~]# find /home/ -mtime +9 #查找9天前修改过文件内容的文件
/home/dayi123/.bashrc
/home/dayi123/.bash_profile
/home/dayi123/.bash_logout
[root@dayi123 ~]# find /etc/sysconfig/ -mtime -7 #查找7天内修改过文件内容的文件
/etc/sysconfig/
/etc/sysconfig/grub
/etc/sysconfig/keyboard
/etc/sysconfig/cbq
/etc/sysconfig/i18n
[root@dayi123 ~]# find /etc/sysconfig/ -mtime 6 #今天起往前第6天修改过内容的文件
/etc/selinux/targeted/modules/active/modules/firewallgui.pp
/etc/selinux/targeted/modules/active/modules/inn.pp
6)根据权限查找:
条件:-perm [/|-]MODE
MODE: 精确权限匹配
/|+MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,centos6位+,centos7为/
-MODE:每一类对象都必须同时拥有指定权限,与关系
用法说明:
find -perm 755 会匹配权限模式恰好是755的文件
只要当任意人有写权限时,find -perm +|/222就会匹配
只有当每个人都有写权限时,find -perm -222才会匹配
只有当其它人(other)有写权限时,find -perm -002才会匹配
[root@dayi123 ~]# find ./ -perm 755 #匹配权限恰好是755的文件
./dayi123.txt
./dayi.txt
./hahl
[root@dayi123 ~]# find ./ -perm -222 #匹配所有用户都有写权限的文件
./test
[root@dayi123 ~]# find ./ -perm /222 #匹配任意人都有写权限的文件
./.bash_logout
./.bash_profile
./.bashrc
./.cshrc
./.tcshrc
./anaconda-ks.cfg
7)组合条件
组合条件:与:-a
或:-o
非:-not, !
v 德·摩根定律:
(非 P) 或 (非 Q) = 非(P 且 Q)
(非 P) 且 (非 Q) = 非(P 或 Q)
[root@dayi123 ~]# find ./ -user dayi -not -group dayi
#查找属主是dayi且属组不是dayi的文件
./dayi.txt
[root@dayi123 ~]# find -not \( -user dayi -o -user dayi123 \)
#查找属主不是dayi或属主不是dayi123的文件
.
./.bash_logout
./.bash_profile
./.bashrc
./.cshrc
./.tcshrc
(4)处理动作:
1)-print:默认的处理动作,显示至屏幕;
[root@dayi123 ~]# find ./ -name dayi.txt -print
./dayi.txt
2)-ls:类似于对查找到的文件执行“ls -l”命令
[root@dayi123 ~]# find ./ -name dayi.txt -ls
68002599 4 -rwxr-xr-x 1 dayi dayi123 22 Mar 31 15:56 ./dayi.txt
3)-delete:删除查找到的文件;
[root@dayi123 ~]# find ./ -name dayi.txt –delete
4)-fls file:查找到的所有文件的长格式信息保存至指定文件中
[root@dayi123 ~]# find ./ -name dayi123.txt -fls dayi123.log
[root@dayi123 ~]# cat dayi123.log
68002562 4 -rwxr-xr-x 1 root root 17 Mar 31 13:22 ./dayi123.txt
5)-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令;
对于每个文件执行命令之前,都会交互式要求用户确认
[root@dayi123 ~]# find ./ -name dayi123.log -ok ls -l {} \;
< ls ... ./dayi123.log > ? y
-rw-r--r--. 1 root root 83 Apr 7 18:36 ./dayi123.log
6)-exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令
{}: 用于引用查找到的文件名称自身
[root@dayi123 ~]# find ./ -name dayi123.log -exec ls -l {} \;
-rw-r--r--. 1 root root 83 Apr 7 18:36 ./dayi123.log
7)有些命令不能接受过多参数,此时命令执行可能会失败,可用find | xargs COMMAND方式规避此问题
[root@dayi123 ~]# find /var/ -type f | xargs ls -l
-rw-r--r--. 1 root root 64 Mar 29 06:49 /var/lib/yum/yumdb/d/1d144f3e96982fed47c4e94fde884e48172b8c3b-dbus-glib-0.100-7.el7-x86_64/checksum_data
-rw-r--r--. 322 root root 6 Mar 29 06:49 /var/lib/yum/yumdb/d/1d144f3e96982fed47c4e94fde884e48172b8c3b-dbus-glib-0.100-7.el7-x86_64/checksum_type
(5)find综合案例
1)查找/var目录下属主为root,且属组为mail的所有文件
[root@dayi123 ~]# find /var/ -user root -a -group mail
/var/spool/mail
/var/spool/mqueue
/var/dayi
2)查找/usr目录下不属于root、lp、gdm的所有文件
[root@dayi123 ~]# find /usr/ -not \( -user root -o -user lp -o -user gdm \)
/usr/share/polkit-1/rules.d
[root@dayi123 ~]# find /usr -not -user root -a -not -user lp -a -not -user gdm
/usr/share/polkit-1/rules.d
3)、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件
[root@dayi123 ~]# find /etc -mtime -7 -a -not -user root -a -not -user postfix
[root@dayi123 ~]# find /etc/ -mtime -7 -a -not \( -user root -o -user postfix \)
4)查找/etc目录下大于1M且类型为普通文件的所有文件
[root@dayi123 ~]# find /etc/ -size +1M -a -type f
/etc/udev/hwdb.bin
/etc/selinux/targeted/contexts/files/file_contexts.bin
/etc/selinux/targeted/policy/policy.29
5)查找/etc目录下至少有一类用户没有执行权限的文件
[root@dayi123 ~]# find /etc -not -perm -111
34676121 12 -rw-r--r-- 1 root root 8940 Apr 5 19:43 /etc/selinux/targeted/modules/active/modules/authconfig.pp
34769376 12 -rw-r--r-- 1 root root 8234 Apr 5 19:43 /etc/selinux/targeted/modules/active/modules/jockey.pp
6)查找/etc目录下所有用户都没有写权限的文件
[root@dayi123 ~]# find /etc -not -perm /222 -ls
33766578 196 -r--r--r-- 1 root root 198453 Mar 29 06:44 /etc/pki/ca-trust/extracted/java/cacerts
67271661 352 -r--r--r-- 1 root root 359773 Mar 29 06:44 /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
7)查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件
[root@localhost ~]# find /etc/init.d/ -perm -111 -a -perm -002
[root@localhost ~]# find /etc/init.d/ -perm -113
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。