No.3 四个Linux查找命令

143 阅读3分钟

前言

在Linux编程中,文件查询是一个比较重要的技能,我们无时无刻都在查找文件,所以快速地查找文件,其实有助于提高工作效率,本文一共列举了四个常见的查找命令,希望对大家有所帮助!

ls

ls,即list的缩写,主要用于显示指定工作目录下的文件或文件夹。

ls命令常见的用法有:

# 显示所有文件及目录 (. 开头的隐藏文件也会列出)
$ ls -a

# 除文件名称外,将文件权限、拥有者、文件大小等信息详细列出
$ ls -l

# 显示指定目录
$ ls /bin
hostname  link      mv        rm

# 模糊搜索(常见于一个目录下文件较多,比如存放日志的文件夹)
$ ls *request*
request_2021-06-05.log  request_2021-06-06.log  request_2021-06-07.log

which

which命令,作用是在我们的机器上找到我们程序的可执行文件,比如which nginxwhich mv等。

由于可执行文件和其他配置文件等一般是存放在一起的,所以通过该命令,我们可以间接找到其他文件。

which命令常见的用法有:

$ which php
/usr/local/opt/php@7.2/bin/php

# -a 参数表示列出所有找到的可执行文件
$ which -a php
/usr/local/opt/php@7.2/bin/php
/usr/local/opt/php@5.6/bin/php
/usr/bin/php

locate

locate命令,算是我比较常用的一个命令,一是它语法简单,二是也能查找大部分的文件(不局限可执行文件),三就是查找速度快。

locate命令查找速度快,最根本的原因在于它并不是遍历每一个文件夹从而去匹配到相应的文件,而是通过查数据库的方式,不过这里的数据库并不是MySQL、Oracle这些,而是一份文件。

当然,locate命令也有其弊端,由于它是查库的,所以存在数据没有及时同步的问题(也就是你查找的路径不一定是最新的),当然我们也可以先同步后再进行查找。

通过man locate命令,我们可以找到查找的数据库路径

# 不同系统的路径不一样,此时是Mac
FILES
     /var/db/locate.database                               # 数据库路径
     /usr/libexec/locate.updatedb                          # 更新数据库的脚本

locate命令常见的用法有:

# 查找nginx的配置文件
locate nginx.conf

# 查找/etc目录下以sh开头的文件
$ locate /etc/sh

/System/Library/Templates/Data/private/etc/shells
/private/etc/shells

# -n -l 参数限制输出的条数
$ locate -l 1 /etc/sh

/System/Library/Templates/Data/private/etc/shells
locate: [show only 1 lines]

# -i 参数忽略大小写
$ locate -l 5 -i  ~/d
/Users/xxx/DataGrip
/Users/xxx/DataGrip/.DS_Store

find

find命令,用于在指定目录中搜索文件,在搜索界中,它其实是一个大而全的命令。

对于find命令,任何位于参数之前的字符串都将被视为欲查找的目录名。而且使用该命令时,如果不设置任何参数,则find命令将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部显示

语法:find <指定目录> <指定条件> <指定动作>

find命令常见的用法有:

# -name参数,即查找文件名称符合 name 的文件
$ find . -name "*.php"

# -iname参数,不区分大小写

# -type参数,即查找指定类型,比如可以只查找文件,或只查找目录
# d: 目录  f: 一般文件  c: 字型装置文件  l: 符号连结 ...
$ find . -type d
./test

# -maxdepth,限制递归深度
$ find . -maxdepth 1

# -ctime,显示在过去n天内被修改过的文件
$ find . -ctime -30

# 参数组合
$ find . -name "D*" -maxdepth 1
./DataGrip
./DockerProjects
./Desktop
./Documents
./Downloads

# 参数组合,不区分大小写
$ find . -iname "D*" -maxdepth 1
./DataGrip
./dump.rdb
...

写在最后

从上面可以看出,虽然都是查找命令,但每个命令都有其特别,或者说独到的地方。ls一般用于查看当前目录包含的文件;which命令一般用于查找可执行文件;locate命令一般用于简单查询;find命令大而全,一般用于比较复杂的查询。

各位老板,创作不易,更需不断地磨练和总结,欢迎关注我,我是言淦,为你分享各种实用的编程知识与编程技巧,你们的点赞与关注是我前进和创作的最大动力!!