第九章 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 {} \;
posted @ 2020-07-10 18:41  年少纵马且长歌  阅读(543)  评论(0编辑  收藏  举报