Linux中常用的搜索文件指令

Linux中对于文件的常用的最基础搜索指令,快速找到想要的文件,文件夹以及进程

yuniee
yuniee   Follow

# Linux中常用的搜索文件指令

# 🐾grep指令

作用: 文件内容查询

常用格式如下:

grep   [option]  [file1,file2…..]

# 🧬举例使用

# 前提

现在我们在/root目录下建立一个文件,命名为my,内容为:

banana  2  10  15 
apple  3  8  18  
orange  3  7  12 
apple  6  5  3  
apple  3  8  18
watermelons  5  3  4

# 常用参数

  1. 在文件my中搜索出含有字符串apple的行
grep apple my

输出结果:

root@yuniee:~# grep apple my
apple  3  8  18  
apple  6  5  3  
apple  3  8  18
  1. option: -n 输出前加上行号
grep  -n  apple my

输出结果:

root@yuniee:~# grep  -n  apple my
2:apple  3  8  18  
4:apple  6  5  3  
5:apple  3  8  18
  1. -v 匹配在文件my中搜索出不含有字符串apple的行
grep  -v  apple my

输出结果:

root@yuniee:~# grep  -v  apple my
banana  2  10  15 
orange  3  7  12 
watermelons  5  3  4
  1. -c 只显示匹配行的数量
grep  -c  apple  my

输出结果:

root@yuniee:~# grep  -c  apple  my
3
  1. ls -l 命令的运行结果中搜索出含有字符d的行
ls -l|grep d

我的计算机内/root路径下输入ls -l原本内容如下:

root@yuniee:~# ls -l
total 416
-rw-r--r-- 1 root root      0 Aug 19 12:40 add
drwxr-xr-x 3 root root   4096 Jul 13 12:22 data
-rw-r--r-- 1 root root    108 Aug 19 11:57 my
-rwxr-xr-x 1 root root  22168 Jun 28 16:48 nezha.sh
drwx------ 3 root root   4096 Jul 15 06:26 snap
-rw-r--r-- 1 root root 294407 Jul 21 06:12 stable-8719.tar.gz
-rw-r--r-- 1 root root   2217 Sep  6  2018 swap.sh
-rwxr-xr-x 1 root root  89879 Jun 25 09:18 tcpx.sh

输出结果:

-rw-r--r-- 1 root root      0 Aug 19 12:40 add
drwxr-xr-x 3 root root   4096 Jul 13 12:22 data
drwx------ 3 root root   4096 Jul 15 06:26 snap
  1. 在ls –l命令的运行结果中出首字符是d的行
ls -l|grep ^d

输出结果:

root@yuniee:~# ls -l|grep ^d
drwxr-xr-x 3 root root   4096 Jul 13 12:22 data
drwx------ 3 root root   4096 Jul 15 06:26 snap

实际上搜索出的结果就是/root下ls列出的所有的d开头的结果,也就是/root下所有的目录

  1. 在ls –l命令的运行结果中搜索出首字符不是d的行
ls -l|grep -v ^d

输出结果:

root@yuniee:~# ls -l|grep -v ^d
total 416
-rw-r--r-- 1 root root      0 Aug 19 12:40 add
-rw-r--r-- 1 root root    108 Aug 19 11:57 my
-rwxr-xr-x 1 root root  22168 Jun 28 16:48 nezha.sh
-rw-r--r-- 1 root root 294407 Jul 21 06:12 stable-8719.tar.gz
-rw-r--r-- 1 root root   2217 Sep  6  2018 swap.sh
-rwxr-xr-x 1 root root  89879 Jun 25 09:18 tcpx.sh

实际上搜索出的结果就是/root下ls列出的所有的非d开头的结果,也就是/root下所有的文件

# 🪸find指令——文件查找

作用: 在指定的目录开始,递归的搜索其各个子目录,查找满足条件的文件并对之采取相关的操作。

常用格式如下:

find   [option]  [file]

注释:find命令提供的寻找条件可以是一个用逻辑运算符not、and、or组成的复合条件。and用-a表示,or用–o表示, not用!表示

# 🧠举例使用

我的/root下所有目录和文件如下:

root@yuniee:~# ls -l
total 424
-rw-r--r-- 1 root root      0 Aug 19 12:40 add
drwxr-xr-x 3 root root   4096 Jul 13 12:22 data
drwxr-xr-x 2 root root   4096 Aug 19 13:02 map.c
-rw-r--r-- 1 root root    108 Aug 19 11:57 my
-rwxr-xr-x 1 root root  22168 Jun 28 16:48 nezha.sh
drwx------ 3 root root   4096 Jul 15 06:26 snap
-rw-r--r-- 1 root root 294407 Jul 21 06:12 stable-8719.tar.gz
-rw-r--r-- 1 root root   2217 Sep  6  2018 swap.sh
-rwxr-xr-x 1 root root  89879 Jun 25 09:18 tcpx.sh
drwxr-xr-x 2 root root   4096 Aug 19 13:02 time.c
  1. 查找/root目录以下扩展名为c的文件
find  /root  -name '*.c'

输出结果:

root@yuniee:~# find  /root  -name '*.c'
/root/time.c
/root/map.c
  1. 查找/root目录以下扩展名为c或者以h开头的文件
find   /root  -name   '*.c'  -o   -name  'h*'

输出结果:

root@yuniee:~# find   /root  -name   '*.c'  -o   -name  'h*'
/root/time.c
/root/.acme.sh/http.header
/root/.acme.sh/deploy/haproxy.sh
/root/map.c
/root/.jitsi-meet-cfg/web/acme.sh/http.header

可以看到查找是递归的

  1. 查找/root目录以下扩展名不是c的文件
find /root ! -name '*.c'

(这个结果过多就不展示了🥹🥹,总之就是所有非*.c的文件或目录)

  1. 查找/root目录以下文件名以m开头的C文件,并显示文件内容
find /root -name 'm*.c' -ok more {} \;

以及

find /root -name 'm*.c' -exec more {} \;

这两个命令都是使用 find 命令来查找文件,并使用 more 命令逐个显示找到的文件内容。

find /root -name 'm*.c' -ok more {} \;

  • 这个命令会在目录 /root 下递归查找文件名以 m 开头且以 .c 结尾的文件。
  • 对于每个找到的文件,命令会显示一个确认提示,询问是否执行后续的命令。
  • 如果输入 yY,则会执行 more 命令来逐个显示文件内容。
  • 如果输入其他任何内容,命令将跳过该文件,继续查找下一个文件。

find /root -name 'm*.c' -exec more {} \;

  • 这个命令也会在根目录 /root 下递归查找文件名以 m 开头且以 .c 结尾的文件。
  • 对于每个找到的文件,命令会立即执行 more 命令来逐个显示文件内容,无需确认提示。

这两个命令的区别在于 -ok-exec 参数的使用。-ok 会在执行前询问用户确认,而 -exec 则直接执行命令。

所以我们常常用第二个

输出结果:

root@yuniee:~# find /root -name 'm*.c' -exec more {} \;
hello I'm map.c
  1. 查找/root目录以下扩展名为c的文件,并复制到/pro目录中

我在/root目录下,首先mkdir /root/pro

find /root -name '*.c' -ok cp {} /root/pro \;

输出结果:

root@yuniee:~# find /root -name '*.c' -ok cp {} /root/pro \;
< cp ... /root/time.c > ? y
cp: -r not specified; omitting directory '/root/time.c'
< cp ... /root/map.c > ? y
< cp ... /root/pro/map.c > ? y
cp: '/root/pro/map.c' and '/root/pro/map.c' are the same file

然后看看/root/pro下的文件

root@yuniee:~# ls /root/pro
map.c

# 🎏总结

虽然这都是初学者接触的最基础的命令,但日常使用中还是总是忘记使用他们,大家有空多复习一下啊😶‍🌫️

记录一些基础但有用的玩机指南,还有我随心分享的各种内容,希望你能在这里找到你想要的