• 命令与文件的查找


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

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

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

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

    1. [root@server /]# which ifconfig
    2. /usr/sbin/ifconfig

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

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

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

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

    选项和参数 :

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

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

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

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

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

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

    1. [root@server /]# whereis -m passwd
    2. 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个

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

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

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

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

    1. [root@server /]# locate -c passwd
    2. 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小时前

    1. [root@server /]# find /tmp/ -mtime 0
    2. /tmp/
    3. /tmp/bsm-agent
    4. /tmp/testlocate

    -1表示一天之内 

    1. [root@server /]# find /tmp/ -mtime -1
    2. /tmp/
    3. /tmp/bsm-agent
    4. /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的相关文件

    截取一部分

    1. [root@server /]# find /home -user yyroot
    2. /home/yyroot
    3. /home/yyroot/.config
    1. [root@server /]# id yyroot
    2. uid=1000(yyroot) gid=1001(yyroot) groups=1001(yyroot),0(root)
    3. [root@server /]# find /home -user 1000
    4. /home/yyroot
    5. /home/yyroot/.config
    6. /home/yyroot/.config/abrt
    7. /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的文件

    /代表根目录下

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

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

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

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

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

    4、额外可进行的操作

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

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

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

    其中:

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

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

  • 相关阅读:
    很多人都在考的PMP认证到底有什么用?考试内容难不难?
    FileZilla创建FTP服务器-版本1.2
    Win11dll文件缺失怎么修复?Win11系统dll文件丢失的解决方法
    Redis分布式锁
    使用 XML 配置定义和管理 Spring Bean
    CORBA 架构体系指南(通用对象请求代理体系架构)​
    restify框架
    gtest学习
    考研:政治
    【译】代码更快、更好,借助 GitHub Copilot 的新功能:斜杠命令和上下文变量
  • 原文地址:https://blog.csdn.net/adminwg/article/details/127824022