主页 > 电脑硬件  > 

linux下查找文件的相关命令

linux下查找文件的相关命令
linux下查找文件的相关命令

运行环境:centos7 参考来源:man、鸟哥入门书籍

一、脚本文件查找:which/type 1. which

man手册描述: 返回当前环境可以被执行的文件(或链接)的路径。搜索PATH变量匹配参数中的可执行文件,且不会规范化路径名称(?) 命令: which [-a] 文件名 -a: 打印所有的匹配路径名

ygy@ubuntu:~$ which which /usr/bin/which ## 只找出第一个 ygy@ubuntu:~$ which -a which /usr/bin/which /bin/which ## /usr/bin 是 /bin 的符号链接 ygy@ubuntu:~$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin ygy@ubuntu:~$ which history

history是bash内置命令,不在path变量指示的路径中,所以查找不到。

2. type

查询命令是Bash shell内置命令,还是外部非bash命令。 命令:type [-tpa] name

-t:此时输出结果会以下列关键词显示name的类型 builtin:bash内置命令alias: 命令别名file: 外部命令keyword:shell保留字function:shell函数空:没有找到该name -p:如果name是外部命令,才会显示完整文件名。-a:根据PATH中的路径,将所有符合name的命令列出,包括alias、builtin、function其他参数:-P、-f ygy@ubuntu:~$ type ls ls 是“ls --color=auto”的别名 ygy@ubuntu:~$ type -t ls alias ygy@ubuntu:~$ type -a ls ls 是“ls --color=auto”的别名 ls 是 /usr/bin/ls ls 是 /bin/ls ygy@ubuntu:~$ ygy@ubuntu:~$ type cd cd 是 shell 内建 ygy@ubuntu:~$ type -t cd builtin ygy@ubuntu:~$ type -a cd cd 是 shell 内建 ## 所以第一个which命令找不到cd

type找的是可执行文件名,如果不能以可执行文件的状态找到,不会有返回内容。因此 type 命令一般找的是 可执行文件, 而不是一般文件。

二、查找一般文件:whereis/locate/find 1. whereis

whereis 用于搜索二进制文件、源文件、manual页面文件。man说明页面中提到,会去除所提供名称的前缀和后缀。并且默认是在linux标准空间(?)、PATH和MANPATH(此环境变量为什么是空的?)中定位要查询的程序。

whereis -[bmsu] name

-l:列出whereis去查询哪些目录。未指定-B/-M/-S时,会输出whereis能够在文件系统找到的所有硬编码路径。-b:只找二进制文件-m:只找在说明文件manual路径下的文件-s:只找源文件-u:查找有特殊条目的name。特殊是指:一个命令不知有一个明确请求类型的条目。如whereis -m -u *表示查找当前路径下没有文档文件或有多个文档文件的文件。

查找ls、tr的二进制文件和man页面,gcc的man页面

ygy@ubuntu:~$ whereis -bm ls tr -m gcc ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz tr: /usr/bin/tr /usr/share/man/man1/tr.1.gz gcc: /usr/share/man/man1/gcc.1.gz

-B/-M/-S等选项,是限制将要搜索的name的搜索路径。如下实例中,在所有默认路径中寻找ls,在‘/usr/share/man/man1’中寻找cal

ygy@ubuntu:~$ whereis -m ls -M /usr/share/man/man1 -f cal ls: /usr/share/man/man1/ls.1.gz cal: /usr/share/man/man1/cal.1.gz ## -f选项:配合-B/-M/-S使用,具体作用尚不清楚,man的描述:终止目录列表,发出文件名信号(猜想:对于上述示例,取消默认路径查找,转而在/usr/share/man/man1中查找-f参数后接的`cal`)

在/usr/bin中查找没有记录在/usr/man/man1,或者在/usr/src中没有源代码的所有文件:

ygy@ubuntu:~$ cd /usr/bin ygy@ubuntu:/usr/bin$ whereis -u -ms -M /usr/man/man1 -S /usr/src -f *

对比where -l 和 PATH内容,发现没有找/bin和/sbin,其他的路径-l选项都有显示。原因未知,但是/usr/bin和/usr/sbin是与上述两个目录等价,所以应该没有影响。

2. locate/updatedb

locate:是用于查找数据库(/var/lib/mlocate/)中匹配到的文件,不是像find一样直接在硬盘中查找,因此速度更快。

updatedb:由于数据库更新是定期的(CentOS是一天一次),查询前可以手动更新数据库:sudo updatedb(ubuntu上普通用户无权限),此时会根据/etc/updatedb.conf的配置去查找硬盘文件,并更新到/var/lib/mlocate/

locate支持通配符,‘.’、‘/’不会特殊区分,也会包含在通配符内。

对于普通字符串的文件名,locate会显示数据库中所有匹配到该字符串的文件名。对于包含通配符,locate只会显示精准匹配到的文件名。man文档建议,在使用通配符时以*开始,从而尽可能匹配到多的内容。

关于默认数据库的文件名、数据库更新频率、包含目录条目见updatedb

locate结果输出到终端:输出中的不寻常字符

locate [OPTION]… PATTERN…

-i:–ignore-case,忽略大小写差异。-r:–regexp REGEXP。若使用该选项,没有PATTERN。此选项可被指定多次。-c:–count,输出匹配的条目个数,而不是输出匹配PATTERN的结果。-S:–statistics,输出locate所使用的相关数据库信息。-l:–limits,-n LIMIT。表示在找到LIMIT条匹配数据后成功退出该命令的执行。 [wkm@WkmCentosHost ~]$ locate -l 5 passwd /etc/passwd /etc/passwd- /etc/pam.d/passwd /etc/security/opasswd /home/wkm/文档/testpw/passwd.nex [wkm@WkmCentosHost ~]$ locate -S 数据库 /var/lib/mlocate/mlocate.db: 15,232 文件夹 169,300 文件 8,709,199 文件名中的字节数 3,922,880 字节用于存储数据库
3. find

find [path…] [expression]

其中表达式由:选项option、动作action组成。

第一个以 ‘-’ , ‘(’ , ‘)’ , ‘,’ 或 ‘!’ 这些字符起始的参数是表达式的开始;

在它之前的任何参数是要搜索的路径,在它之后的任何参数都是表达式的余下部分。如果没有路径参数,缺省用当前目录。

1. 与时间有关的选项

以mtime为例:

-mtime n:n天前的一天之内被修改过内容的文件。-mtime +n:n天前(不包括n天本身)被修改过内容的文件。-mtime -n:n天之内(包括n天)被修改过内容的文件。 [wkm@WkmCentosHost ~]$ find /home/wkm/ -mtime 3 ## 0代表当前时间,因此该命令的含义是:查找24小时内被修改过内容的文件 [wkm@WkmCentosHost ~]$ find /home/wkm/ -mtime 0 /home/wkm/ /home/wkm/.config/dconf /home/wkm/.config/dconf/user /home/wkm/.config/gtk-3.0

关于时间:

-atime:访问时间,文件最后一次被读取的时间。

-ctime:状态时间,文件的状态(权限、属性等)最近一次被修改的时间。

-mtime:修改时间,文件内容最后一次被修改的时间。

2. 与使用者/用户组名称有关的选项 -uid n:/etc/passwd中的UID-gid n:/etc/group中的GID-user name:name为使用者账号的名称。-group name:用户组名称。-nouser:查找文件的拥有者不在/etc/passwd中-nogroup:查找文件的用户组不在/etc/group中 3. 与文件权限、名称有关的参数 -name filename:查找名为filename的文件。-size [±]SIZE:查找比SIZE要大(+)/ 小(-)的文件。SIZE的单位:c,字节;k,kb。-type TYPE。TYPE类型有: f:正规文件b,c:设备文件d:目录l:链接文件s:socketp:FIFO -perm 权限: mode:查找文件权限刚好等于mode的文件。如-rwsr-xr-x,应该使用-perm 4755。-mode:大于等于mode的文件。/mode:包含任一mode的权限的文件。

如:查找比1k小的文件

[wkm@WkmCentosHost ~]$ find ~ -size -1k /home/wkm/.config/enchant/en_US.exc /home/wkm/.config/enchant/en_US.dic /home/wkm/.gnupg/secring.gpg /home/wkm/.gnupg/pubring.gpg .... ## 查找名为passwd的文件(默认是完整文件名) $ find / -name passwd ## 包含passwd的文件 $ find / -name "*passwd*" ## 查找类型为socket的文件 $ find /run -type s ## 查找包含SGID、SUID、SBIT的属性的文件 [wkm@WkmCentosHost ~]$ find / -perm /7000 4. 其他

-exec command:接额外的命令command来处理查找到的结果。

[wkm@WkmCentosHost ~]$ find /usr/bin /usr/sbin -perm /7000 -exec ls -l {} \;

{}:代表find查找到的内容,即将find找到的内容放在{}处

\; -exec一直到\;是关键字,表示find额外操作的开始(-exec)至结束(\;),因为bash中的;有特殊含义所以用反斜杠转义。

标签:

linux下查找文件的相关命令由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“linux下查找文件的相关命令