第九章 查找文件或者命令

一、locate        #查找文件或者目录的路径 用到了本地的数据库 文件名称的数据库 根据本地的数据库进行查找文件,不会查找到最新的文件

[root@jindada ~]# yum install -y mlocate

选项:

-i        #不区分大小写

-r        #简单使用正则表达式     $ 结尾

/var/lib/mlocate/mlocate.db

[root@jindada ~]# updatedb        #更新数据库

#把系统中所有文件名称包含passwd的文件全部查找出来

[root@jindada ~]# locate passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/root/passwd
/usr/bin/gpasswd
/usr/bin/grub2-mkpasswd-pbkdf2
/usr/bin/passwd
/usr/lib/firewalld/services/kpasswd.xml


[root@jindada ~]# locate hostnamectl
/usr/bin/hostnamectl
/usr/share/bash-completion/completions/hostnamectl
/usr/share/man/man1/hostnamectl.1.gz
/usr/share/zsh/site-functions/_hostnamectl

[root@jindada ~]# touch hostnamectl

[root@jindada ~]# updatedb

[root@jindada ~]# locate hostnamectl
/root/hostnamectl
/usr/bin/hostnamectl
/usr/share/bash-completion/completions/hostnamectl
/usr/share/man/man1/hostnamectl.1.gz
/usr/share/zsh/site-functions/_hostnamectl

[root@jindada ~]# updatedb
[root@jindada ~]# locate hostnamectl
/root/hostnamectl
/usr/bin/hostnamectl
/usr/share/bash-completion/completions/hostnamectl
/usr/share/man/man1/hostnamectl.1.gz
/usr/share/zsh/site-functions/_hostnamectl
[root@jindada ~]# locate -i hostnamectl
/opt/HOSTNAMEctl
/root/hostnamectl
/usr/bin/hostnamectl
/usr/share/bash-completion/completions/hostnamectl
/usr/share/man/man1/hostnamectl.1.gz
/usr/share/zsh/site-functions/_hostnamectl


[root@jindada ~]# locate -r hostname$
/etc/hostname
/etc/selinux/targeted/active/modules/100/hostname
/usr/bin/hostname
/usr/bin/nmtui-hostname
/usr/lib64/gettext/hostname

二、which       #查找命令的绝对路径

[root@jindada ~]# which ping
/usr/bin/ping

#查找命令的绝对路径时,是通过PATH环境变量中的路径进行查找
[root@jindada ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

#不使用which的别名进行查找命令的绝对路径

[root@jindada ~]# which cp
/usr/bin/cp


[root@jindada ~]# rpm -qf `which ping`
iputils-20160308-10.el7.x86_64

[root@jindada ~]# rpm -qf /usr/bin/ping
iputils-20160308-10.el7.x86_64

三、whereis        #查找系统二进制程序、man帮助文件、源代码文件 查找不到自己创建的文件

选项:

-b        #只查找二进制程序文件

-m        #查找man帮助文件

-s        #查找源代码文件

[root@jindada ~]# whereis ping
ping: /usr/bin/ping /usr/share/man/man8/ping.8.gz


[root@jindada ~]# whereis -b ping
ping: /usr/bin/ping
[root@jindada ~]# whereis -m ping
ping: /usr/share/man/man8/ping.8.gz

四、 type命令         #显示指定命令的类型 判断你的命令是内部命令还是外部命令

选项:

-a       #显示内置命令的绝对路径

-p        #只显示命令的绝对路径

help命令可以显示系统中所有的内置命令

 

[root@sh-jindada ~]# type cd       #cd是一个内置命令
cd is a shell builtin
[root@sh-jindada ~]# type -a cd       #查看内部命令的路径
cd is a shell builtin
cd is /usr/bin/cd
[root@sh-jindada ~]# type ip        #外部命令是不需要加-a的
ip is /usr/sbin/ip

#查看系统中的内置命令

[root@sh-jindada ~]# help

#只显示命令的绝对路径

[root@sh-jindada ~]# type -p ip
/usr/sbin/ip
[root@sh-jindada ~]# type -p cd
[root@sh-jindada ~]# type -pa cd       #内置命令需要加-a
/usr/bin/cd

 

五、find         #文件查找命令 指定路径查找 根据名称 大小 权限 时间等查找

选项:

-type         #根据文件类型进行查找

f            #普通文件

d            #目录

l           #软连接文件

s           #socket文件 套接字文件

p           #管道文件


-name         #根据名称进行查找


-iname         #查找的时候忽略大小写

* #特殊符号 通配符 不是正则 所有的意思


命令 目录 类型 普通文件 根据名称 叫什么名字
[root@sh-jindada ~]# find /etc -type f -name "hostname"       #精确查找
/etc/hostname
[root@sh-jindada ~]# find /etc -type f -name "hostname*"
/etc/hostname
[root@sh-jindada ~]# find /etc -type f -name "*hostname*"
/etc/dbus-1/system.d/org.freedesktop.hostname1.conf
/etc/hostname

#全局查找 * 所有的意思

[root@sh-jindada ~]# find / -type f -name "*hostname*"
/proc/sys/kernel/hostname
/etc/dbus-1/system.d/org.freedesktop.hostname1.conf
/etc/hostname
/root/hostname{html.php}
/root/hostname.html
/root/hostname.php
/root/hostname
/usr/bin/hostname
/usr/bin/hostnamectl

#查找以hostname为结尾的文件

[root@sh-jindada ~]# find / -type f -name "*hostname"
/proc/sys/kernel/hostname
/etc/hostname
/root/hostname
/usr/bin/hostname
/usr/lib64/gettext/hostname

#以hostname为开头的文件

[root@sh-jindada ~]# find / -type f -name "hostname*"
/proc/sys/kernel/hostname
/etc/hostname
/root/hostname{html.php}
/root/hostname.html
/root/hostname.php
/root/hostname
/usr/bin/hostname
/usr/bin/hostnamectl
/usr/lib64/gettext/hostname
/usr/share/man/man1/hostname.1.gz
/usr/share/man/man1/hostnamectl.1.gz

#精确查找,名称只能为hostname

[root@sh-jindada ~]# find / -type f -name "hostname"
/proc/sys/kernel/hostname
/etc/hostname
/root/hostname
/usr/bin/hostname
/usr/lib64/gettext/hostname


#查找名称为hostname的目录

[root@sh-jindada ~]# find / -type d -name "hostname"
/etc/selinux/targeted/active/modules/100/hostname
[root@sh-jindada ~]# ll -d /etc/selinux/targeted/active/modules/100/hostname
drwx------. 2 root root 44 Jun 9 19:57 /etc/selinux/targeted/active/modules/100/hostname
[root@sh-jindada ~]#

#查找名称的时候忽略大小写

[root@sh-jindada ~]# find / -type d -iname "hostname"
/etc/selinux/targeted/active/modules/100/hostname
/usr/lib64/perl5/auto/Sys/Hostname


#根据目录的层级查找

[root@sh-jindada ~]# find / -maxdepth 2 -type d -name "hostname"
/root/hostname
[root@sh-jindada ~]#

 

原文地址:https://www.cnblogs.com/jhno1/p/13280762.html