第九章 Linux系统之查找文件路径命令
一、查找文件路径命令-locate
1.含义
locate命令的功能是用于快速查找文件或目录。与find命令进行全局搜索不同,locate命令是基于了数据文件(/var/lib/mlocate/mlocate.db)进行的定点查找,由于缩小了搜索范围,因此快速快很多。
Linux系统需定期执行下updatedb命令对数据库文件进行更新,然后再使用locate命令进行查找,这样才会更加准确。
语法格式:locate [参数] 文件
2.常用参数:
-d | 指定数据库所在的目录 |
---|---|
--help | 显示帮助 |
--version | 显示版本信息 |
-i | 不区分大小写 |
-r | 简单使用正则表达式 $ 结尾 |
3.常见示例
用到了本地的数据库 文件名称的数据库 根据本地的数据库进行查找文件,不会查找到最新的文件
# 安装mlocate
[root@jindada ~]# yum install -y mlocate
# 更新数据库
[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
不区分大小写把系统中所有文件包含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
把系统中所有文件以hostname结尾的文件全部查找出来
[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
1.含义
which命令的功能是用于查找命令文件,能够快速搜索二进制程序所对应的位置。如果我们既不关心同名文件(find与locate),也不关心命令所对应的源代码和帮助文件(whereis),仅仅是想找到命令本身所在的路径,那么这个which命令就太合适了。
语法格式:which [参数] 文件
2.常用参数:
-n | 指定文件名长度(不含路径) |
---|---|
-p | 指定文件名长度(含路径) |
-w | 指定输出时栏位的宽度 |
-V | 显示版本信息 |
3.常见示例
查找命令的绝对路径
[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
查找相关rpm包名称
[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
1.含义
whereis命令用来定位命令的二进制程序、源代码文件和man手册页等相关文件的路径。
whereis命令查找速度非常快,因为它不是在磁盘中乱找,而是在一个数据库中查询; 数据库是linux系统自动创建的,包含有本地所有文件的信息,并且每天通过自动执行updatedb命令更新一次。正因为这样,whereis命令的搜索结果有时候会不准确,比如刚添加的文件可能搜不到, 原因就是该数据库文件没有被更新。
语法格式:whereis [参数] [命令名]
2.常用参数:
-b | 查找二进制程序或命令 |
---|---|
-B | 从指定目录下 查找二进制程序或命令 |
-m | 查找man手册文件 |
-M | 从指定目录下 查找man手册文件 |
-s | 只查找源代码文件 |
-S | 从指定目录下 查找源代码文件 |
3.常见示例
显示ln命令的程序和man手册页的位置:
[root@jindada ~]# whereis ln
ln: /usr/bin/ln /usr/share/man/man1/ln.1.gz /usr/share/man/man1p/ln.1p.gz
显示ln命令的二进制程序的路径:
[root@jindada ~]# whereis -b ln
ln: /usr/bin/ln
显示ln命令的man手册页的路径:
[root@jindada ~]# whereis -m ln
ln: /usr/share/man/man1/ln.1.gz /usr/share/man/man1p/ln.1p.gz
四、查找文件路径命令-type
1.含义
type命令用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令。
语法格式:type [参数] [命令]
2.常用参数:
lias | 别名 |
---|---|
-a | 显示内置命令的绝对路径 |
-p | 只显示命令的绝对路径 |
keyword | 关键字,Shell保留字 |
function | 函数,Shell函数 |
builtin | 内建命令,Shell内建命令 |
file | 文件,磁盘文件,外部命令 |
unfound | 没有找到 |
3.常用示例
别名命令
[root@jindada ~]# type ls
ls is aliased to `ls --color=auto'
内建命令
[root@jindada ~]# type cd
cd is a shell builtin
关键字
[root@jindada ~]# type if
if is a shell keyword
外部命令是不需要加-a的
[root@jindada ~]# type ip
ip is /usr/sbin/ip
查看系统中的内置命令
[root@jindada ~]# help
只显示命令的绝对路径
[root@jindada ~]# type -p ip
/usr/sbin/ip
# 内置命令需要加-a
[root@jindada ~]# type -p cd
[root@jindada ~]# type -pa cd
/usr/bin/cd
五、查找文件路径命令-find
1.含义
find命令的功能是根据给定的路径和条件查找相关文件或目录,可以使用的参数很多,并且支持正则表达式,结合管道符后能够实现更加复杂的功能,是系统管理员和普通用户日常工作必须掌握的命令之一。
find命令通常进行的是从根目录(/)开始的全盘搜索,有别于whereis、which、locate……等等的有条件或部分文件的搜索。对于服务器负载较高的情况,建议不要在高峰时期使用find命令的模糊搜索,会相对消耗较多的系统资源。
语法格式:find [路径] [参数]
2.常用参数:
-name | 匹配名称 |
---|---|
-iname | 查找的时候忽略大小写 |
-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 …… {}; | 后面可跟用于进一步处理搜索结果的命令 |
* | 特殊符号 通配符 不是正则 所有的意思 |
3.常见示例
精确查找/etc目录下文件名为hostname的文件
命令 目录 类型 普通文件 根据名称 叫什么名字
[root@jindada ~]# find /etc -type f -name "hostname" #精确查找
/etc/hostname
查找/etc目录下文件名以hostname开头的文件
[root@jindada ~]# find /etc -type f -name "hostname*"
/etc/hostname
查找/etc目录下文件名包含hostname的文件
[root@jindada ~]# find /etc -type f -name "*hostname*"
/etc/dbus-1/system.d/org.freedesktop.hostname1.conf
/etc/hostname
查找以hostname为结尾的文件
[root@jindada ~]# find / -type f -name "*hostname"
/proc/sys/kernel/hostname
/etc/hostname
/root/hostname
/usr/bin/hostname
/usr/lib64/gettext/hostname
查找名称为hostname的目录
[root@jindada ~]# find / -type d -name "hostname"
/etc/selinux/targeted/active/modules/100/hostname
[root@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@jindada ~]#
查找名称的时候忽略大小写
[root@jindada ~]# find / -type d -iname "hostname"
/etc/selinux/targeted/active/modules/100/hostname
/usr/lib64/perl5/auto/Sys/Hostname
根据目录的层级查找
[root@jindada ~]# find / -maxdepth 2 -type d -name "hostname"
/root/hostname
[root@jindada ~]#
搜索当前工作目录中的所有近7天被修改过的文件:
[root@linuxcool ~]# find . -mtime +7
./.bash_logout
./.bash_profile
./.bashrc
./.cshrc
./.tcshrc
………………省略部分输出信息………………
全盘搜索系统中所有类型为普通文件,且可以执行的文件信息:
[root@jindada ~]# find / -type f -perm /a=x
/boot/vmlinuz-4.18.0-80.el8.x86_64
/boot/vmlinuz-0-rescue-c8b04558503242459d908c6c22a2d481
/etc/X11/xinit/xinitrc.d/50-systemd-user.sh
/etc/X11/xinit/xinitrc.d/00-start-message-bus.sh
/etc/X11/xinit/xinitrc.d/localuser.sh
/etc/X11/xinit/Xclients
/etc/X11/xinit/Xsession
/etc/X11/xinit/xinitrc
………………省略部分输出信息………………
全盘搜索系统中所有类型为目录,且权限为1777的目录文件:
[root@jindada ~]# find / -type d -perm 1777
/dev/mqueue
/dev/shm
/var/tmp
/tmp
………………省略部分输出信息………………
全盘搜索系统中所有后缀为.mp4的文件,并删除所有查找到的文件:
[root@jindada ~]# find / -name "*.mp4" -exec rm -rf {} \;