一、which


  • 功能:​脚本文件的查找、查找执行文件
  • 注意:​which命令是根据PATH这个环境变量所规范的路径去查找执行文件的文件名

Linux命令与文件查找命令:which、whereis、locate、updatedb、find、grep_查找文件

  • 格式:
which [-a] filename ...
  • 相关选项:
  • -a:将所有由PATH目录中可以找到的命令均列出来,而不止第一个被找到的命令名称

演示案例

  • 查找pwd命令所在路径:
which pwd

Linux命令与文件查找命令:which、whereis、locate、updatedb、find、grep_查找文件_02

演示案例

  • 查找history这个命令所在路径:
which history

Linux命令与文件查找命令:which、whereis、locate、updatedb、find、grep_find_03

  • 查找之后显示没有,原因:因为which是在PATH所在的环境变量中查找,​history是bash内置的命令,所以查不到

二、whereis


  • 功能:​查找一个命令的二进制、源代码和手册页文件
  • 特点:

  • whereis是在某些特定的目录下查找,查找速度较快
  • whereis显示的内容包含:​/bin/sbin下面的执行文件,该可执行文件的头文件、以及/usr/share/man下面的man page文件

  • 格式:

whereis [options] [-BMS directory... -f] name...
  • 相关选项:

  • -l:可以列出whereis会去查询的几个主要目录(这个属性似乎已经不再使用)
  • -b:只找​二进制​(binary)格式的文件
  • -s:只找​source源文件
  • -m:只找在​说明文件​manual路径下的文件
  • -u:查找​不在上述​3个项目当中的其它特殊文件

演示案例

  • 查找ifconfig在何处:
whereis ifconfig

Linux命令与文件查找命令:which、whereis、locate、updatedb、find、grep_查找文件_04

演示案例

  • 将passwd可执行程序的所有信息(可执行文件路径、源文件路径、man page路径)都显示出来
whereis passwd
  • 只列出程序的可执行文件路径
whereis -b passwd

Linux命令与文件查找命令:which、whereis、locate、updatedb、find、grep_Linux基础_05

  • 只列出程序的源文件
whereis -s passwd

Linux命令与文件查找命令:which、whereis、locate、updatedb、find、grep_find_06

  • 只查找man page路径
whereis -m passwd

Linux命令与文件查找命令:which、whereis、locate、updatedb、find、grep_file_07

三、locate


  • 功能:​根据文件名进行查找
  • 特点:

  • 重点:locate是根据输入的部分文件/目录名称进行查找,所有相关/包含输入名称文件/目录都会被列出来
  • locate是利用已建立的/var/lib/mlocate数据库来查找文件名,所以查找速度较快

  • 格式:

locate [OPTION]... PATTERN...
  • 相关选项:

  • -i:忽略​大小写​的差异
  • -c:计算找到的​文件数量
  • -l:仅输出几行的意思,后面跟数字
  • -S:输出locate所使用的数据库文件的相关信息,包括该数据库记录的文件/目录数量等
  • -r:后面可接正则表达式的显示方式

演示案例

  • 输出5行:
loacte -l 5 passwd

Linux命令与文件查找命令:which、whereis、locate、updatedb、find、grep_frep_08

  • 输出查找到的包含passwd名称的文件数量:
locate -c passwd

Linux命令与文件查找命令:which、whereis、locate、updatedb、find、grep_file_09

  • 列出locate所使用的数据库文件之文件名与个数据数量:
locate -S

Linux命令与文件查找命令:which、whereis、locate、updatedb、find、grep_Linux基础_10

附加:updatedb命令


  • 功能:​updatedb命令会去读取/etc/updatedb.conf这个配置文件的设置,去查找系统硬盘内的文件,并更新到/var/lib/mlocate内的数据库文件
  • 使用场景:​其中一种使用场景是:locate是根据数据库查找文件的,如果有些文件没有更新到数据库中,那么locate是不会查找到这些文件,所以可以使用updatedb来将数据更新到数据库

四、find


  • 功能:​查找符合条件的文件、目录
  • 特点:

  • find不常用,因为find直接去硬盘内查找文件,速度慢,而且影响硬盘的性能
  • 但是find的功能很强大

  • 格式:
  • 如果没有指定目录,默认从当前路径查找

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point...] [expression]

时间选项


  • -atime:​查询关于读取时间的
  • -ctime:​查询关于状态时间的
  • -mtime:​查询关于修改时间的
  • 上面三者的功能都是相同的,只是查找的时间内容不一样。​下面以-mtime为例,n为数字

-mtime  n   :代表n天之前的[一天之内]被修改过内容的文件
-mtime +n :代表n天之前(不含n天本身)被修改过内容的文件
-mtime -n :代表n天之内(包含n天本身)被修改过内容的文件

# 如果n为0,代表目前的时间

演示案例


  • 查找现在开始到24小时前之间的:find / -mtime 0
  • 查找3天前的那一天24小时内的:find / -mitme 3

Linux命令与文件查找命令:which、whereis、locate、updatedb、find、grep_frep_11

  • 对于上图:

  • +3代表大于等于4天前的文件:find -mtime +3
  • -3代表小于等于3天内的文件:find -mtime -3
  • 3代表3-4那一天内的文件:find -mtime 3

时间选项


  • -cmin n:​查找指定n分钟内的文件
  • 例如:

find /mnt ‐cmin +10 # 查找/mnt中十分钟以上修改的
find /mnt ‐cmin ‐10 # 查找/mnt中十分钟以内修改的
find /mnt ‐ctime 10 # 查找/mnt中十天左右修改的

与使用者或用户名有关的参数


  • -uid n:​n为拥有者的账号ID(即UID,是记录在/etc/passwd里面与账号名称对应的数字)
  • -gid n:​n为用户组名称的ID(即GID,是记录在/etc/group里面与用户组名称对应的数字)
  • -user name:​查找拥有者名称为name的文件
  • -group name:​查找用户组名称为name的文件
  • -nouser:​查找文件中的拥有者不在/etc/passwd中的文件
  • -nogroup:​查找文件中的用户组不在/etc/group中的文件
  • -nouser、-nogroup这两个选项常用于:查找系统中某个账号删除了但是还存放了很多残留文件。或者当你自行安装软件、下载文件时,该软件、文件的属性当中并没有文件拥有者

演示案例

  • 查找/home下属于dongshao拥有者的文件:
find /home -user dongshao
  • 查找系统中不属于任何人的文件:
find / -nouser

与文件权限、名称有关的参数


  • -name  filename:​查找文件名称为filename的文件
  • -size [+-]SIZE:​查找比SIZE大(+)或者小(-)的文件。SIZE的规格有:c代表Bytes,k代表1KB,M代表1MB
  • -type  TYPE:​查找文件类型为TYPE的,TYPE的类型有:一般文件(f),设备文件(b,c),目录(d),链接文件(l),socket(s),FIFO(p)等
  • -perm  mode:​查找文件权限恰好等于mode的文件,mode类似于chmod的属性值
  • -perm -mode:​查找文件权限囊括mode的文件。例如:-perm  -0744(-rwxr--r--),那么-rwsr-xr-x也会被列出来,因为-rwsr-xr-x囊括了0744在内
  • -perm /mode:​查找文件权限包括任一mode的文件。例如:-perm /755(-rwxr-xr-x),那么-rw-------也会被列出来哦,因为-rw-------包括rw在内

演示案例

  • 找出系统中,文件大小大于10MB的文件:
find ~/ -size +10M

Linux命令与文件查找命令:which、whereis、locate、updatedb、find、grep_frep_12

  • 查找/目录下文件类型为soceket的文件:
find / -type s
  • 查找文件属性囊括---s--s--t在内的文件:
find / -perm -7000

其他操作选项


  • -exec command:​command为其他命令,可以再接额外的命令来处理查找到的结果
  • -print:​将结果打印到屏幕上,find的默认属性
  • -newer file:​file为一个存在的文件,列出比file还要新的文件

演示案例

  • 查找有没有比/etc目录下比passwd文件新的:
sudo find /etc -newer /etc/passwd

一个重要的例子

  • 找出符合条件的并用ls -l列出来:
find /usr/bin -perm /7000 -exec ls -l {} \;

  • {}代表将find /usr/bin -perm /7000查找的内容放置到{}中让ls -l命令处理
  • -exec \都是关键词,两个放在一起分别代表开始(-exec)、结束(\),表示一个区间

Linux命令与文件查找命令:which、whereis、locate、updatedb、find、grep_file_13

Linux命令与文件查找命令:which、whereis、locate、updatedb、find、grep_file_14

五、grep


  • 功能​:查找文件中符合条件的字符串
  • 格式:

grep [OPTIONS]    PATTERN [FILE...]

grep [OPTIONS] -e PATTERN ... [FILE...]

grep [OPTIONS] -f FILE ... [FILE...]

  • 相关选项:

  • -a:将二进制文件以文本文件的形式查看
  • -c:计算出找到的'查找字符'的个数,总共有多少行(是行数,不是个数)
  • -i:忽略文件中的大小写
  • -v:反向选择,即输出没有‘查找字符’的那一行
  • --color=auto:可以将找到的关键字部分加上颜色显示,这是默认的参数
  • -A:后面接数字。代表除了有查找字符的那一行外,前面多少行也显示出来(after)
  • -B:后面接数字。代表除了有查找字符的那一行外,后面多少行也显示出来(before)
  • -r:递归查找,用于目录中的递归查找
  • -n:将查找到的内容加上行号
  • -w:全字匹配,只查找指定的字符串
  • -C n:打印匹配行的前后n行

演示案例

  • 例如:​反向选择,把demo.txt文件中不含有'the'的行显示出来
grep -vn 'the' demo.txt
  • 例如:​假设现在有一个文件1.txt,在1.txt中查找“abc”,并加上行号
grep -n "abc" 1.txt

Linux命令与文件查找命令:which、whereis、locate、updatedb、find、grep_Linux基础_15

Linux命令与文件查找命令:which、whereis、locate、updatedb、find、grep_frep_16

  • 例如:​递归在当前路径的所有目录文件中查找带有“abc”内容的信息
grep -rn "abc" * | more

Linux命令与文件查找命令:which、whereis、locate、updatedb、find、grep_file_17

  • 例如:​在1.txt中全字匹配“abc”
grep -nw "abc" 1.txt

Linux命令与文件查找命令:which、whereis、locate、updatedb、find、grep_查找文件_18

  • 例如:​在1.txt中全字匹配“abc”,并显示前后2行的内容

Linux命令与文件查找命令:which、whereis、locate、updatedb、find、grep_file_19

演示案例(在管道中的使用)

  • 例如:​查找与sshd有关的进程
ps -ef | grep sshd

Linux命令与文件查找命令:which、whereis、locate、updatedb、find、grep_Linux基础_20

  • 但是最后一行是grep本身的命令,我们不想要,那么可以使用-v参数来取消显示带有“grep”的那一行
ps -ef | grep sshd | grep -v "grep"

Linux命令与文件查找命令:which、whereis、locate、updatedb、find、grep_查找文件_21

  • 例如:​使用ls查看/etc目录下的内容,然后使用grep筛选出以'l'开头的行,即查看链接文件(因为文件权限前面为'l'代表这个文件为链接文件)

Linux命令与文件查找命令:which、whereis、locate、updatedb、find、grep_查找文件_22

  • 例如:​承上,查看有几个链接文件,再加上wc

Linux命令与文件查找命令:which、whereis、locate、updatedb、find、grep_find_23

  • 例如:​查找含有'boot'的行

Linux命令与文件查找命令:which、whereis、locate、updatedb、find、grep_查找文件_24

  • 例如:​取出不包含'boot'的行

Linux命令与文件查找命令:which、whereis、locate、updatedb、find、grep_Linux基础_25

  • 例如:​取出'boot'的行并分割取出第一部分

Linux命令与文件查找命令:which、whereis、locate、updatedb、find、grep_find_26


  • 我是小董,V公众点击"笔记白嫖"解锁更多【Linux入门基础】资料内容。

Linux命令与文件查找命令:which、whereis、locate、updatedb、find、grep_find_27