【Linux】命令行下的增删查改之“查找“

根据路径和条件搜索指定文件(find)

find 命令是 Linux 系统中一个极为重要和强大的工具,用于在目录树中递归查找文件和目录,能够根据多个条件进行筛选。

它适用于进行系统维护、文件管理和日志分析时文件的搜寻,既然其查找方式递归且从根目录开始,所以其系统资源消耗相对其他查找命令大一些;

使用 find 的时候,注意输出可能会非常庞大,尤其是在搜索全系统时,此时可以用 -print 选项将结果输出到文件中,减轻终端压力;

此外确保有权限访问你所指定的目录,如果没有适当的权限,命令可能会输出错误信息。

find [路径] [参数]

参数:

-name

匹配名称

-perm

匹配权限(mode为完全匹配,-mode为包含即可)

-user

匹配所有者

-group

匹配所有组

-mtime -n +n

匹配修改内容的时间(-n指n天以内,+n指n天以前)

-atime -n +n

匹配访问文件的时间(-n指n天以内,+n指n天以前)

-ctime -n +n

匹配修改文件权限的时间(-n指n天以内,+n指n天以前)

-nouser

匹配无所有者的文件

-nogroup

匹配无所有组的文件

-newer f1 !f2

匹配比文件f1新但比f2旧的文件

-type b/d/c/p/l/f

匹配文件类型(后面的字幕字母依次表示块设备、目录、字符设备、管道、链接文件、文本文件)

-size

匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件)

-prune

忽略某个目录

-exec …… {}\;

后面可跟用于进一步处理搜索结果的命令

实例:

  • 查找特定日期的文件:使用 -type f -mtime

查找过去 30 天内修改过的文件

find /path/to/directory -type f -mtime -30

  • 查找并删除特定类型的文件:使用-delete

慎用删除!

慎用删除!

慎用删除!

find /tmp -name "*.tmp" -delete

  • 在/etc目录中搜索所有大约1M大小的文件:
find /etc -size +1M 
  • 在/home目录中搜索所有属于指定用户的文件:
find /home -user username
  • 全盘搜索系统中所有类型为目录,且权限为1777的目录文件:
find / -type d -perm 1777

查找命令文件(which)

用于查找命令文件,仅仅查看所在路径,不需要其他任何其他信息,那么这将会是最好的选择。

which [参数] 文件

参数:

-n

指定文件名长度(不含路径)

-p

指定文件名长度(含路径)

-w 

指定输出时栏位的宽度

-V

显示版本信息

实例:

  • 查找某个指定命令文件所在位置:
which reboot

显示命令及相关文件的路径(whereis)

whereis 命令是一个用于定位二进制文件、源代码文件和手册页的 Linux 命令。

它与 find 命令和 locate 命令相比更快,因为它使用预先构建的数据库查找文件,通常只会在系统的特定目录中查找(如 /usr/bin、/usr/local/bin 和手册页目录)。

搜索范围是有限的: whereis 主要针对可执行文件、源代码和手册页的查找,不适合查找其他类型的文件。它只会在系统默认的路径中查找,而不会递归地搜索子目录。

输出信息简洁: whereis 的输出包含找到的二进制文件、源代码以及手册页的路径,通常只返回相关信息,不会输出大量无用信息。

whereis [参数] [命令名]

参数:

-b

查找二进制程序或命令

-B

从指定目录下 查找二进制程序或命令

-m

查找man手册文件

-M

从指定目录下 查找man手册文件

-s

只查找源代码文件

-S

从指定目录下 查找源代码文件

实例:

  • 显示ln命令的程序和man手册页的位置:
whereis ln

文本搜索工具(grep)

grep 是一个在 Unix 和类 Unix 系统中使用的命令行工具,用于搜索文本文件中匹配特定模式的行。它的名字来自“global regular expression print”的缩写,意为用于全面搜索的正则表达式。

对于大文件的搜索效率非常高,所以在非常大的文件上使用复杂正则匹配时应谨慎,因为那样做可能会影响性能。且支持多种选项和正则表达式,用户可以根据需求进行复杂的搜索。输出格式化便捷,提高使用者的查找效率。 但其仅能用于搜索和匹配,无法修改文本内容;要进行修改需要配合其他工具(如 sed 或 awk)。

默认情况下,grep 是区分大小写的。使用 -i 选项可以忽略大小写。在指定文件时,路径如果不正确会导致找不到文件或结果为空。当使用管道将其他命令的输出传递给 grep 时,需确保管道前的命令成功执行。如果同时使用输入流和文件,确保理解优先处理的是哪个。

grep [参数] 文件

参数:

-i

忽略大小写

-c

只输出匹配行的数量

-l

只列出符合匹配的文件名,不列出具体的匹配行

-n

列出所有的匹配行,显示行号

-h

查询多文件时不显示文件名

-s

不显示不存在、没有匹配文本的错误信息

-v

显示不包含匹配文本的所有行

-w

匹配整词

-x

匹配整行

-r

递归搜索

-q

禁止输出任何结果,已退出状态表示搜索是否成功

-b

打印匹配行距文件头部的偏移量,以字节为单位

-o

与-b结合使用,打印匹配的词据文件头部的偏移量,以字节为单位

-F

匹配固定字符串的内容

-E

支持扩展的正则表达式

实例:

  • 搜索某个文件中,包含某个关键词的内容:
grep root /etc/passwd

  • 搜索某个文件中,以某个关键词开头的内容:
grep ^root /etc/passwd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒雒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值