命令与文件的查找

一、which(根据PATH环境变量查找脚本路径)

通过which来查找执行文件,which这个命令是根据【PATH】这环境变量所规范的路径,去查找执行文件的文件名,所以,重点是找出执行文件而已,且which后面接的是完整的文件名。若加上【-a】,可以列出所有的可以找到的同名文件夹。

[root@server /]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

例子一:查找ifconfig这个命令的完整文件名

[root@server /]# which ifconfig 
/usr/sbin/ifconfig

例子二:用which去找出which的文件名是什么

[root@server /]# which which
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
	/usr/bin/alias
	/usr/bin/which

二、whereis(在指定目录下查找文件)

whereis主要是针对在一些特定的目录中查找文件, whereis主要是针对/bin/sbin下面的执行文件,以及/usr/share/man下的man page文件

选项和参数 :

-l可以列出whereis会去查询的几个主要目录
-b只去找binary(二进制)格式的文件
-m只去找manual路径下的文件
-s只找source源文件
-u查找不在上述三个文件类型中的其他特殊类型

例子一:找出ifconfig这个文件名

[root@server /]# whereis ifconfig 
ifconfig: /usr/sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz

例子二:找出和passwd相关的文件

[root@server /]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man5/passwd.5.gz /usr/share/man/man1/passwd.1.gz

例子三:只找出和passwd有关的【说明文件】文件名(man page)

[root@server /]# whereis -m passwd
passwd: /usr/share/man/man5/passwd.5.gz /usr/share/man/man1/passwd.1.gz

三、locate/updatedb(根据数据库的记录查询文件)

locate使用简单,只需要在命令后面,直接输入文件的部分名称后,就能够得到结果。locate寻找数据是通过已经建立的数据库/var/lib/mlocate/里面的数据库所查找到的对于centos7.x来说,数据库的建立默认是在每天执行一次,所以当你新建立文件时,需要手动的使用updatedb命令更新数据库

updatedb: 根据/etc/updatedb.conf的设置去查找系统硬盘内的文件,并更新/var/lib/mlocate内的数据库文件

locate:依据/var/lib/mlocate内的数据库记录,找出用户所输入关键词的文件名

选项和参数

-i忽略大小写的差异
-c不输出文件名,只计算找到的文件数量
-l只输出给定行数的文件,如:-l 5
-S输出locate所使用的数据库文件的相关信息
-r后面可以接正则表达式的显示方式

例子一:找出系统中所有与passwd相关的文件名,且只显示5个

[root@server /]# locate -l 5 passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/root/Python-3.8.3/Lib/test/keycert.passwd.pem

例子二:列出locate查询所使用的数据库文件

[root@server /]# locate -S
Database /var/lib/mlocate/mlocate.db:
	11,904 directories
	110,551 files
	5,881,431 bytes in file names
	2,622,233 bytes used to store database

例子三:找出并计算与password相关的文件

[root@server /]# locate -c passwd
131

四、find(从磁盘中查询文件)

find是很强大的命令,但是所用时间很多,因为find直接查找磁盘。命令格式find 【path】 【option】 【action】

1、与时间有关的选项:

-atime、-ctime、-mtime

以-mtime为说明:

-mtime nn为数字,意义为在n-n+1天内被修改过内容的文件
-mtime +nn为数字,意义为n天之前被修改过内容的文件,不包括n天本身
-mtime -n列出n天之内被修改过内容的文件,包含n天
-newer filefile为一个存在的文件,列出比file还要新的文件

例子一:查询/etc下24小时内被修改过的文件

0表示从现在开始过去24小时前

[root@server /]# find /tmp/ -mtime 0
/tmp/
/tmp/bsm-agent
/tmp/testlocate

-1表示一天之内 

[root@server /]# find /tmp/ -mtime -1
/tmp/
/tmp/bsm-agent
/tmp/testlocate

例子二:查找5天前被修改过的文件

find /etc/ -mtime 5

2、与使用者或用户组名称有关的参数:

-uid nn为用户的ID,即UID,通过/etc/passwd文件查看UID
-gid nn为用户组的ID,即GID,通过/etc/group文件查看GID
-uid namename为用户的名称
-gid namename为用户组名称
-nouser

查找不属于任何用户的文件(即文件的拥有者不在/etc/passwd中)

-nogroup     查找不属于任何用户组的文件(即文件的所属组名不在/etc/group中)

例子一:查找用户yyroot的相关文件

截取一部分

[root@server /]# find /home -user yyroot
/home/yyroot
/home/yyroot/.config
[root@server /]# id yyroot
uid=1000(yyroot) gid=1001(yyroot) groups=1001(yyroot),0(root)
[root@server /]# find /home -user 1000
/home/yyroot
/home/yyroot/.config
/home/yyroot/.config/abrt
/home/yyroot/.bashrc

例子二:查找当前系统中不属于任何用户的文件

[root@server /]# find / -nouser

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

-name filename     查找文件的名称为filename
-size    [+-]SIZE          查找比SIZE还要大(+)或者小(-)的文件,SIZE单位:c代表Bytes,k:代表1024Bytes。例如:要找比50KB还要大的文件,就是【-size +50K】
-perm mode查找文件的权限刚好等于mode的文件
-perm -mode查找文件的权限大于并等于mode的文件
-perm /mode查找文件权限包含任一mode的文件
-type TYPE查找文件类型为TYPE的文件。

例子一:找出文件名为passwd的文件

/代表根目录下

[root@server /]# find / -name passwd
/etc/passwd
/etc/pam.d/passwd
/usr/share/bash-completion/completions/passwd
/usr/bin/passwd

例子二:找出包含passwd名称的文件

[root@server /]# find / -name "*passwd*"

例子三:找出run目录下,文件类型为socket的文件

[root@server /]# find /run/ -type s
/run/chrony/chronyd.sock
/run/abrt/abrt.socket
/run/dbus/system_bus_socket
/run/lsm/ipc/sim
/run/lsm/ipc/simc

4、额外可进行的操作

- exec commandcommand为其他目录,-exec后面可以在接额外的命令来处理查找到的结果
-print将结果打印到屏幕上,这是默认的操作

例子:找出run目录下,文件类型为socket的文件,并以ls -l命令打印出来

[root@server /]# find /run/ -type s -exec ls -l {} \;
srwxr-xr-x 1 chrony chrony 0 Jun  7 20:49 /run/chrony/chronyd.sock
srw-rw-rw- 1 root root 0 Jun  7 20:49 /run/abrt/abrt.socket
srw-rw-rw- 1 root root 0 Jun  7 20:49 /run/dbus/system_bus_socket
srw-rw-rw- 1 root root 0 Jun  7 20:49 /run/lsm/ipc/sim
srw-rw-rw- 1 root root 0 Jun  7 20:49 /run/lsm/ipc/simc
srw------- 1 root root 0 Nov 10 19:45 /run/udev/control
srwxrwxrwx 1 root root 0 Nov 10 19:45 /run/systemd/private
srw------- 1 root root 0 Jun  7 20:49 /run/systemd/shutdownd
srw-rw-rw- 1 root root 0 Jun  7 20:49 /run/systemd/journal/socket
srw-rw-rw- 1 root root 0 Jun  7 20:49 /run/systemd/journal/stdout
srwx------ 1 root root 0 Jun  7 20:49 /run/systemd/cgroups-agent
srwxrwxrwx 1 root root 0 Jun  7 20:49 /run/systemd/notify

其中:

{}代表的是由find找到的内容,如上,find的结果会被放置到{}位置中

-exec 一直到 \; 就是关键词,代表find额外的操作的开始(-exec)到结束(\;)。在上面ls -l {}就是额外的操作

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值