Linux命令与文件查找命令:which、whereis、locate、updatedb、find、grep

一、which

  • 功能:脚本文件的查找、查找执行文件
  • 注意:which命令是根据PATH这个环境变量所规范的路径去查找执行文件的文件名

  • 格式:
which [-a] filename ...
  • 相关选项:
    • -a:将所有由PATH目录中可以找到的命令均列出来,而不止第一个被找到的命令名称

演示案例

  • 查找pwd命令所在路径:
which pwd

演示案例

  • 查找history这个命令所在路径:
which history

  • 查找之后显示没有,原因:因为which是在PATH所在的环境变量中查找,history是bash内置的命令,所以查不到

二、whereis

  • 功能:查找一个命令的二进制、源代码和手册页文件
  • 特点:
    • whereis是在某些特定的目录下查找,查找速度较快
    • whereis显示的内容包含:/bin/sbin下面的执行文件,该可执行文件的头文件、以及/usr/share/man下面的man page文件
  • 格式:
whereis [options] [-BMS directory... -f] name...
  • 相关选项:
    • -l:可以列出whereis会去查询的几个主要目录(这个属性似乎已经不再使用)
    • -b:只找二进制(binary)格式的文件
    • -s:只找source源文件
    • -m:只找在说明文件manual路径下的文件
    • -u:查找不在上述3个项目当中的其它特殊文件

演示案例

  • 查找ifconfig在何处:
whereis ifconfig

演示案例

  • 将passwd可执行程序的所有信息(可执行文件路径、源文件路径、man page路径)都显示出来
whereis passwd
  • 只列出程序的可执行文件路径
whereis -b passwd

  • 只列出程序的源文件
whereis -s passwd

  • 只查找man page路径
whereis -m passwd

三、locate

  • 功能:根据文件名进行查找
  • 特点:
    • 重点:locate是根据输入的部分文件/目录名称进行查找,所有相关/包含输入名称文件/目录都会被列出来
    • locate是利用已建立的/var/lib/mlocate数据库来查找文件名,所以查找速度较快
  • 格式:
locate [OPTION]... PATTERN...
  • 相关选项:
    • -i:忽略大小写的差异
    • -c:计算找到的文件数量
    • -l:仅输出几行的意思,后面跟数字
    • -S:输出locate所使用的数据库文件的相关信息,包括该数据库记录的文件/目录数量等
    • -r:后面可接正则表达式的显示方式

演示案例

  • 输出5行:
loacte -l 5 passwd

  • 输出查找到的包含passwd名称的文件数量:
locate -c passwd

  • 列出locate所使用的数据库文件之文件名与个数据数量:
locate -S

附加:updatedb命令

  • 功能:updatedb命令会去读取/etc/updatedb.conf这个配置文件的设置,去查找系统硬盘内的文件,并更新到/var/lib/mlocate内的数据库文件
  • 使用场景:其中一种使用场景是:locate是根据数据库查找文件的,如果有些文件没有更新到数据库中,那么locate是不会查找到这些文件,所以可以使用updatedb来将数据更新到数据库

四、find

  • 功能:查找符合条件的文件、目录
  • 特点:
    • find不常用,因为find直接去硬盘内查找文件,速度慢,而且影响硬盘的性能
    • 但是find的功能很强大
  • 格式:
    • 如果没有指定目录,默认从当前路径查找
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point...] [expression]

时间选项

  • -atime:查询关于读取时间的
  • -ctime:查询关于状态时间的
  • -mtime:查询关于修改时间的
  • 上面三者的功能都是相同的,只是查找的时间内容不一样。下面以-mtime为例,n为数字
-mtime  n   :代表n天之前的[一天之内]被修改过内容的文件
-mtime +n   :代表n天之前(不含n天本身)被修改过内容的文件
-mtime -n   :代表n天之内(包含n天本身)被修改过内容的文件

# 如果n为0,代表目前的时间

演示案例

  • 查找现在开始到24小时前之间的:find / -mtime 0
  • 查找3天前的那一天24小时内的:find / -mitme 3

  • 对于上图:
    • +3代表大于等于4天前的文件:find -mtime +3
    • -3代表小于等于3天内的文件:find -mtime -3
    • 3代表3-4那一天内的文件:find -mtime 3

时间选项

  • -cmin n:查找指定n分钟内的文件
  • 例如:
find /mnt ‐cmin +10 # 查找/mnt中十分钟以上修改的
find /mnt ‐cmin ‐10 # 查找/mnt中十分钟以内修改的
find /mnt ‐ctime 10 # 查找/mnt中十天左右修改的

与使用者或用户名有关的参数

  • -uid n:n为拥有者的账号ID(即UID,是记录在/etc/passwd里面与账号名称对应的数字)
  • -gid n:n为用户组名称的ID(即GID,是记录在/etc/group里面与用户组名称对应的数字)
  • -user name:查找拥有者名称为name的文件
  • -group name:查找用户组名称为name的文件
  • -nouser:查找文件中的拥有者不在/etc/passwd中的文件
  • -nogroup:查找文件中的用户组不在/etc/group中的文件
  • -nouser、-nogroup这两个选项常用于:查找系统中某个账号删除了但是还存放了很多残留文件。或者当你自行安装软件、下载文件时,该软件、文件的属性当中并没有文件拥有者

演示案例

  • 查找/home下属于dongshao拥有者的文件:
find /home -user dongshao
  • 查找系统中不属于任何人的文件:
find / -nouser

与文件权限、名称有关的参数

  • -name  filename:查找文件名称为filename的文件
  • -size [+-]SIZE:查找比SIZE大(+)或者小(-)的文件。SIZE的规格有:c代表Bytes,k代表1KB,M代表1MB
  • -type  TYPE:查找文件类型为TYPE的,TYPE的类型有:一般文件(f),设备文件(b,c),目录(d),链接文件(l),socket(s),FIFO(p)等
  • -perm  mode:查找文件权限恰好等于mode的文件,mode类似于chmod的属性值
  • -perm -mode:查找文件权限囊括mode的文件。例如:-perm  -0744(-rwxr--r--),那么-rwsr-xr-x也会被列出来,因为-rwsr-xr-x囊括了0744在内
  • -perm /mode:查找文件权限包括任一mode的文件。例如:-perm /755(-rwxr-xr-x),那么-rw-------也会被列出来哦,因为-rw-------包括rw在内

演示案例

  • 找出系统中,文件大小大于10MB的文件:
find ~/ -size +10M

  • 查找/目录下文件类型为soceket的文件:
find / -type s
  • 查找文件属性囊括---s--s--t在内的文件:
find / -perm -7000

其他操作选项

  • -exec command:command为其他命令,可以再接额外的命令来处理查找到的结果
  • -print:将结果打印到屏幕上,find的默认属性
  • -newer file:file为一个存在的文件,列出比file还要新的文件

演示案例

  • 查找有没有比/etc目录下比passwd文件新的:
sudo find /etc -newer /etc/passwd

一个重要的例子

  • 找出符合条件的并用ls -l列出来:
find /usr/bin -perm /7000 -exec ls -l {} \;
  • {}代表将find /usr/bin -perm /7000查找的内容放置到{}中让ls -l命令处理
  • -exec \都是关键词,两个放在一起分别代表开始(-exec)、结束(\),表示一个区间

五、grep

  • 功能查找文件中符合条件的字符串
  • 格式:
grep [OPTIONS]    PATTERN [FILE...]

grep [OPTIONS] -e PATTERN ... [FILE...]

grep [OPTIONS] -f FILE ... [FILE...]
  • 相关选项:
    • -a:将二进制文件以文本文件的形式查看
    • -c:计算出找到的'查找字符'的个数,总共有多少行(是行数,不是个数)
    • -i:忽略文件中的大小写
    • -v:反向选择,即输出没有‘查找字符’的那一行
    • --color=auto:可以将找到的关键字部分加上颜色显示,这是默认的参数
    • -A:后面接数字。代表除了有查找字符的那一行外,前面多少行也显示出来(after)
    • -B:后面接数字。代表除了有查找字符的那一行外,后面多少行也显示出来(before)
    • -r:递归查找,用于目录中的递归查找
    • -n:将查找到的内容加上行号
    • -w:全字匹配,只查找指定的字符串
    • -C n:打印匹配行的前后n行
  • 附加:

演示案例

  • 例如:反向选择,把demo.txt文件中不含有'the'的行显示出来
grep -vn 'the' demo.txt
  • 例如:假设现在有一个文件1.txt,在1.txt中查找“abc”,并加上行号
grep -n "abc" 1.txt

  • 例如:递归在当前路径的所有目录文件中查找带有“abc”内容的信息
grep -rn "abc" * | more

  • 例如:在1.txt中全字匹配“abc”
grep -nw "abc" 1.txt

  • 例如:在1.txt中全字匹配“abc”,并显示前后2行的内容

演示案例(在管道中的使用)

  • 例如:查找与sshd有关的进程
ps -ef | grep sshd

  • 但是最后一行是grep本身的命令,我们不想要,那么可以使用-v参数来取消显示带有“grep”的那一行
ps -ef | grep sshd | grep -v "grep"

  • 例如:使用ls查看/etc目录下的内容,然后使用grep筛选出以'l'开头的行,即查看链接文件(因为文件权限前面为'l'代表这个文件为链接文件)

  • 例如:承上,查看有几个链接文件,再加上wc

  • 例如:查找含有'boot'的行

  • 例如:取出不包含'boot'的行

  • 例如:取出'boot'的行并分割取出第一部分


  • 我是小董,V公众点击"笔记白嫖"解锁更多【Linux入门基础】资料内容。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

董哥的黑板报

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

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

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

打赏作者

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

抵扣说明:

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

余额充值