关于Linux的文件查找

前言

有时候总是忘了文件在哪,所以就会使用文件查找命令。

文件查找

which命令

这个命令是根据PATH的路径查找执行文件名。

常见格式

which 选项 文件

常见参数

-a                        将查找的所有目录列出

例子

root@iZwz90xui48s83c3hbrbjpZ:/home# which -a ls
/bin/ls

whereis命令

由一些特定目录查找文件

常见格式

whereis 选项 文件和目录

常见参数

-l                            列出会查找的几个目录
-b                            只找二进文件制
-m                            只找说明文件manual路径下的文件
-s                            只找source源文件
-u                            查找不在上面三个目录当中的其它特殊文件

例子

root@iZwz90xui48s83c3hbrbjpZ:~# whereis -l
#会查询的文件
bin: /usr/bin
bin: /usr/sbin
bin: /lib/x86_64-linux-gnu
bin: /usr/lib/x86_64-linux-gnu
bin: /usr/lib
bin: /bin
bin: /sbin
bin: /etc
bin: /lib
bin: /lib64
bin: /usr/games
bin: /usr/local/bin
bin: /usr/local/sbin
bin: /usr/local/etc
bin: /usr/local/lib
bin: /usr/local/games
bin: /usr/include
bin: /usr/local
bin: /usr/share
bin: /usr/local/apache/bin
bin: /usr/local/php73/bin
bin: /usr/local/mysql/bin
man: /usr/share/man/es
man: /usr/share/man/man5
man: /usr/share/man/da
man: /usr/share/man/man3
man: /usr/share/man/man1
man: /usr/share/man/it
man: /usr/share/man/ja
man: /usr/share/man/pt
man: /usr/share/man/fi
man: /usr/share/man/pl
man: /usr/share/man/de
man: /usr/share/man/man6
man: /usr/share/man/sv
man: /usr/share/man/pt_BR
man: /usr/share/man/ru
man: /usr/share/man/hu
man: /usr/share/man/sl
man: /usr/share/man/tr
man: /usr/share/man/man7
man: /usr/share/man/nl
man: /usr/share/man/id
man: /usr/share/man/man2
man: /usr/share/man/sr
man: /usr/share/man/fr
man: /usr/share/man/ko
man: /usr/share/man/man4
man: /usr/share/man/man8
man: /usr/share/man/zh_TW
man: /usr/share/man/zh_CN
man: /usr/share/man/cs
man: /usr/share/info
src: /usr/src/linux-headers-4.15.0-55-generic
src: /usr/src/linux-headers-4.15.0-66
src: /usr/src/linux-headers-4.15.0-55
src: /usr/src/linux-headers-4.15.0-66-generic

locate命令

locate命令并不是直接查找文件,它是通过数据库/var/lib/mlocate/mlocate.db查找文件,这个数据库大概是一天一更新,所以,新文件不一定能直接查到。但是,可以使用updatedb手动更新数据库。emmmmm,locate它查找文件是关键字,并不是文件全名来着。

常见格式

locate 选项 关键字

常见参数

-i                            忽略大小写
-c                            不输出文件名,仅仅计算找到的文件数量
-l 数字                       输出几行    
-S                            locate数据库的相关信息
-r                            后接正则表达式的显示

例子

root@iZwz90xui48s83c3hbrbjpZ:~# locate -S
Database /var/lib/mlocate/mlocate.db:
        22,748 directories
        157,995 files
        8,950,052 bytes in file names
        3,739,200 bytes used to store database

root@iZwz90xui48s83c3hbrbjpZ:~# locate -il 5 test
/boot/grub/i386-pc/bswap_test.mod
/boot/grub/i386-pc/cmdline_cat_test.mod
/boot/grub/i386-pc/cmostest.mod
/boot/grub/i386-pc/cmp_test.mod
/boot/grub/i386-pc/ctz_test.mod

root@iZwz90xui48s83c3hbrbjpZ:~# locate -c test
3124

emmmmm,正则表达式还没系统学习。

find命令

find命令就不同上面几个命令耍滑头了,它是实实在在的查询文件。

常见格式

find 路径 选项  文件

常见参数

关于时间

-atime    -ctime    -mtime

以mtime为例:
-mtime 数字            在多少天前被修改过内容的文件
-mtime +数字            在多少天前被修改过内容的文件
-mtime -数字            在多少天内被修改过内容的文件

例子

root@iZwz90xui48s83c3hbrbjpZ:~# find / -mtime 5
/tmp/sess_gp9b7uarot4nibsa6k5ovitat3
/tmp/sess_tf903m7er8uh6sr8an2kngg0fv
/tmp/sess_5tbvc9jbg9jmpm74ua8332l3ev
/tmp/sess_iv4gs135siq69b8vcnedut8g1c
/tmp/sess_4bom3puo4tu9465d1o0jhnkqka
/tmp/sess_s7b4qs6kkgmmet28qkn02s43b1
/tmp/sess_1ks5h5jvdsmv0c0hsv57ispth1
/tmp/sess_5mmoruqeo54d20jftmps62jps3
。。。。。。

关于使用者或用户名查找

-uid n                    n为使用者id,id在/etc/passwd中
-gid n                    n为用户组id,id在/etc/group中
-user name                name为使用者账户名
-group name                name为用户组名
-nouser                    用户名不在/etc/passwd中
-nogroup                用户组不在/etc/group中

最下面两个命令很方便的查找无主文件

例如:

root@iZwz90xui48s83c3hbrbjpZ:~# find / -nouser
。。。。。。
find: ‘/proc/31039/fdinfo/5’: No such file or directory
find: ‘/proc/32445/task/32451/fdinfo/28’: No such file or directory
find: ‘/proc/32445/task/32451/fdinfo/29’: No such file or directory
find: ‘/proc/32445/task/32451/fdinfo/30’: No such file or directory
/root/oneinstack/src/package.xml
/usr/local/php56/lib/php/extensions/no-debug-non-zts-20131226/ioncube_loader_lin_5.6.so
/usr/local/php55/lib/php/extensions/no-debug-non-zts-20121212/ioncube_loader_lin_5.5.so
/usr/local/php53/lib/php/extensions/no-debug-non-zts-20090626/ZendGuardLoader.so
/usr/local/php53/lib/php/extensions/no-debug-non-zts-20090626/ioncube_loader_lin_5.3.so
。。。。。。
/usr/local/mysql/docs/INFO_BIN
/usr/local/mysql/docs/INFO_SRC
。。。。。。

关于文件权限与名称查找

-name 文件名                查找文件名的文件
-size ±数字+单位            
        +为查找比数字大的文件
        -为查找比数字小的文件
        单位,c为Bytes,k为KB。。。                  
-type 文件类型
        文件类型,正规文件f,设备文件b或c,目录文件d,链接文件l,
        socket文件s,FIOF文件p。。。

mode是文件权限,数字类型:
-perm mode                  刚好等于查找的这个权限
-perm -mode                  包含查找的这个权限
-perm /mode                  包含任意一个查找的这个权限

例如:

root@iZwz90xui48s83c3hbrbjpZ:~# find / -name test
find: ‘/proc/10477’: No such file or directory
/home/test
/data/wwwroot/default/old/phpMyAdmin/js/jquery/src/jquery/sizzle/test
/data/wwwroot/default/old/phpMyAdmin/test
/usr/src/linux-headers-4.15.0-55-generic/include/config/v4l/test
/usr/src/linux-headers-4.15.0-55-generic/include/config/test
/usr/src/linux-headers-4.15.0-55-generic/include/config/pkcs7/test
。。。。。。。

root@iZwz90xui48s83c3hbrbjpZ:~# find / -size +5000k
/tmp/aliyun_assist_6F44950FF809FF6D0503519028B02941.zip
/tmp/aliyun_assist_e3c06dfd98a268d56ba8c672084965e9/1.0.2.541/aliyun_assist_update
/tmp/aliyun_assist_e3c06dfd98a268d56ba8c672084965e9/1.0.2.541/aliyun_installer
/tmp/aliyun_assist_e3c06dfd98a268d56ba8c672084965e9/1.0.2.541/assist_daemon
/tmp/aliyun_assist_e3c06dfd98a268d56ba8c672084965e9/1.0.2.541/aliyun-service
/tmp/aliyun_assist_e3c06dfd98a268d56ba8c672084965e9/1.0.2.541/acs-plugin-manager
/tmp/aliyun_assist_3F6E07C3923AD63163167DE8CBC1B45C.zip
/tmp/aliyun_assist_6564713207CF860CBC879BA5E4784306.zip
。。。。。。。

root@iZwz90xui48s83c3hbrbjpZ:~# find ~ -type f
/root/ReadMe
/root/.mysql_history
/root/.pydistutils.cfg
/root/.lesshst
/root/.cache/motd.legal-displayed
。。。。。。。

root@iZwz90xui48s83c3hbrbjpZ:~# find ~ -perm /777
/root
/root/ReadMe
/root/.mysql_history
/root/.pydistutils.cfg
/root/.lesshst
。。。。。。

其它查找

-exec 其它命令 \         对查找到的文件处理
-print                   默认执行这个命令,所以这个命令写不写关系不大
  • {}表示find找到的内容,find找到的内容放置到{}中
  • -exec\ 之间,都是额外命令
  • \ 用来表示转义,所以用;结尾

例如:

root@iZwz90xui48s83c3hbrbjpZ:~# find ~ -perm /777 -exec ls -l {} \;
total 12
drwxr-xr-x 8 root root 4096 Feb 11 19:33 oneinstack
-rw-r--r-- 1 root root  430 Feb 11 17:24 ReadMe
drwxr-xr-x 3 root root 4096 Jul 29 23:43 test666
-rw-r--r-- 1 root root 430 Feb 11 17:24 /root/ReadMe
-rw------- 1 root root 0 Dec 25  2019 /root/.mysql_history
-rw-r--r-- 1 root root 205 Feb 11 17:24 /root/.pydistutils.cfg
-rw------- 1 root root 31 Jul 30 14:58 /root/.lesshst
total 4
-rw-r--r-- 1 root root    0 Nov 13  2019 motd.legal-displayed
drwx------ 5 root root 4096 Nov 12  2019 pip
-rw-r--r-- 1 root root 0 Nov 13  2019 /root/.cache/motd.legal-displayed
。。。。。。。
Last modification:December 12th, 2020 at 10:34 pm