作者:mobiledu2502899157 | 来源:互联网 | 2023-07-17 04:38
文章目录
- 前言
- find命令
- 命令格式:
- 常用选项:
- 举例使用
- locate命令
- whereis命令
- which命令
- type命令
前言
在linux系统中一切皆文件,此时我们想要从海量的文件中快速定位中我们想要的文件来,需要指定的命令来操作。以下为收集的各个命令,以及其优劣,使用方式。
find命令
centos下:rpm包findutils-4.5.11-3.el7.x86_64
find是最常用也是最强大的查找命令,它可以查找任何类型的文件。
命令格式:
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
常用选项:
-name
:按文件名来查找文件-user
:按照文件的属主来查找文件-group
:按照文件所属的组来查找文件-perm
:按照文件权限来查找文件-prune
:不在当前指定目录中查找
举例使用
已知文件stdio.h
存放在/usr
大目录下的多个子目录,cd /usr目录下
find -name "stdio.h"
表示在当前目录查找文件名称为stdio.h
的文件
find . -path ./include -prune -o -name "stdio.h"
在当前目录查及其子目录查找名称为stdio.h
的文件,但是跳过include目录;
这里的-o参数表示或关系,即两者中只要有一个表达式满足true即可输出;
同-a
和-not
,-a
表示只要有一个表达式不满足则不输出,-not
表示对查找的结果进行取反
find . -path ./include -o -name "stdio.h" -print
将匹配到的内容文件输出到标准输出中
find / -user ceph
查找文件所有者为ceph
的文件
find / -nouser -a -nogroup
查找系统中不属于任何人,任何用户组的文件(对于该部分文件需要保持警惕)
find /usr -mtime -4
查找文件更新日时在距现在时刻4天以内的文件
find /usr -mtime +4
查找文件更新日时在距现在时刻5天以上的文件
find /usr -mtime 4
查找文件更新日时在距现在时刻4天以上5天以内的文件
find / -type [c]
根据文件属性进行查找
其中[c]包括如下属性:
p
管道文件/run/systemd/initctl/fifo
b
block块设备文件,类似与/dev/sdb磁盘盘符这种c
字符设备,类似于/dev/tty63
d
directory 目录文件f
regular file 普通文件l
symbolic link 链接文件s
socket 套接字文件
find / -size +10M
按照文件大小进行查找,+表示大于10M的文件,-
表示小于10M的文件,同时还支持K,G,b(512B的块大小)的单位查找
locate命令
centos下:rpm包为mlocate-0.26-5.el7.x86_64
locate命令实际是"find -name"的另一种写法,但是查找方式跟find不同,它比find快得多。
因为它不搜索具体目录,而是在一个数据库(/var/lib/mlocate/mlocate.db
)中搜索指定的文件。次数据库含有本地文件的所有信息,此数据库是linux系统自动创建的,数据库由updatedb程序来更新,updatedb是由cron daemon周期性建立的,默认情况下为每天更新一次,所以用locate命令你搜索不到最新更新的文件,除非你在用locate命令查找文件之前手动的用updatedb命令更新数据库。
命令格式
locate [OPTION]... [PATTERN]...
主要使用的参数含义如下:
-A
打印所有匹配到的文件-b
精确匹配需要查找的文件,即如果文件命中包含我们要查找的则不打印-c
仅打印匹配到文件个数-d --database DBPATH
指定自己的文件数据库-e
打印当前系统存在的想要查找的文件-i
忽略匹配出来的文件的差异-m
已经被忽略了,为了向后兼容-l count 或者 -n count
限制输出的条数-r
支持普通的正则匹配,类似locate -r ceph-osd.[0-9]
查找ceph-osd.后面有一个数字的文件-w
精确匹配,默认不加也是精确匹配
使用实例
这里关于参数详细的使用就不多说,以上都已经提到
这里简单说一下locate的正则匹配,基本的正则符号参考正则符号
举例:
locate -r ceph-osd.[0-9].log$
查找以包含ceph-osd
的字符串,且在ceph-osd.和.log之间有一个数字,且以log字符串结尾的文件
我们在使用locate的很多时候发现一个新的文件locate不到,关于locate命令的基本查找过程上面也已经提到,因为locate的文件获取是从操作系统定时更新的数据库中获取,但是新的文件可能还没有更新到数据库(还没有被系统设置的定时任务去更新数据库),此时我们需要手动更新以下该数据库。
关于mlocate.db数据库的更新任务在路径为/etc/cron.daily/mlocate
中,内容如下
#!/bin/sh
nodevs=$(renice +19 -p $$ >/dev/null 2>&1
ionice -c2 -n7 -p $$ >/dev/null 2>&1
/usr/bin/updatedb -f "$nodevs"
我们做出如下测试
[root@node2 ~]
[root@node2 ~]
[root@node2 ~]
[root@node2 ~]
/root/test.cron
whereis命令
centos下的rpm包util-linux-2.23.2-26.el7.x86_64
whereis命令只能用于搜索二进制文件(-b)、源代码文件(-s)、说明文件(-m)。如果省略参数则返回所有的信息
使用起来也是非常简单
使用过程:
[root@node2 ~]# whereis locate
locate: /usr/bin/locate /usr/share/man/man1/locate.1.gz
[root@node2 ~]# whereis -b locate
locate: /usr/bin/locate
[root@node2 ~]# whereis -m locate
locate: /usr/share/man/man1/locate.1.gz
[root@node2 ~]# whereis -s locate
locate:[root@node2 ~]#
该命令能够方便编译机上的组件以及对应源码的查找
which命令
which命令是在PATH变量指定的路径中搜索指定的系统命令的位置。用echo $PATH可显示当前PATH变量的值
[root@node2 ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/root/perl5/bin:/b_iscsi/bn_cli:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@node2 ~]# which locate
/bin/locate
type命令
type命令主要用于区分一个命令到底是shell自带的还是外部独立的二进制文件提供的。如果是shell自带的则会提示此命令为shell buildin,否则会列出命令的位置。例如:cd为shell自带的命令,当用which查找时,which会按照PATH变量设置的路径进行搜索,如果不是shell自带命令,则结果会显示no cd in...
;用type cd则显示cd为shell buildin命令。ssh不是shell自带命令,用type时会显示ssh的路径。
[root@node2 ~]# type cd
cd is a shell builtin
[root@node2 ~]# type find
find is hashed (/bin/find)