Skip to main content

linux搜索命令

linuxlinux命令findgrepAbout 6 min

grep

grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。

-n 打印行号
-v 显示不匹配的行
-c 显示匹配的行数
-i 不区分大小写
-w 匹配整个单词
-x 匹配整行
-m 匹配的最大数 -m 1 只显示匹配的1行记录
-H 多文件匹配时,在匹配的行前面加上文件名 (默认)
-h 多文件匹配时,在匹配的行前面不加上文件名
-l 只显示匹配的文件名 此时其他显示的参数无用
-L 匹配多个文件时,显示不匹配的文件名
-o 只显示一行中匹配的部分
-R -r 递归
-A 打印匹配行的后几行
-B 打印匹配行的前几行
-C 打印匹配的前后几行

以下面的文本为例(文件名为test),演示匹配案例:

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/false,aaa,bbbb,cccc,aaaaaa
DADddd:x:2:2:daemon:/sbin:/bin/false
mail:x:8:12:mail:/var/spool/mail:/bin/false
ftp:x:14:11:ftp:/home/ftp:/bin/false
&nobody:$:99:99:nobody:/:/bin/false
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
http:x:33:33::/srv/http:/bin/false
dbus:x:81:81:System message bus:/:/bin/false
hal:x:82:82:HAL daemon:/:/bin/false
mysql:x:89:89::/var/lib/mysql:/bin/false
aaa:x:1001:1001::/home/aaa:/bin/bash
ba:x:1002:1002::/home/zhangy:/bin/bash
test:x:1003:1003::/home/test:/bin/bash
@zhangying:*:1004:1004::/home/test:/bin/bash
policykit:x:102:1005:Po

匹配test中符合an的行并打印行号

grep -in an test

7:zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
13:ba:x:1002:1002::/home/zhangy:/bin/bash
15:@zhangying:*:1004:1004::/home/test:/bin/bash

匹配test中符合an的行以及前一行

grep -inH an test -B 1


test-6-&nobody:$:99:99:nobody:/:/bin/false
test:7:zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
--
test-12-aaa:x:1001:1001::/home/aaa:/bin/bash
test:13:ba:x:1002:1002::/home/zhangy:/bin/bash
test-14-test:x:1003:1003::/home/test:/bin/bash
test:15:@zhangying:*:1004:1004::/home/test:/bin/bash

匹配当前文件中有test前缀的文件中含有an的行,并打印行号及文件名

grep -irn an test*

test:7:zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
test:13:ba:x:1002:1002::/home/zhangy:/bin/bash
test:15:@zhangying:*:1004:1004::/home/test:/bin/bash
test1:7:zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
test1:13:ba:x:1002:1002::/home/zhangy:/bin/bash
test1:15:@zhangying:*:1004:1004::/home/test:/bin/bash

查找目录和文件 find

find 路径 -命令参数 [输出形式]

参数说明:
路径:告诉find在哪儿去找你要的东西,
命令参数:参数很多下面会说到
输出形式:输出形式很多,-print,-printf,-print0,-exec,-ok,-ls

-name 按照文件名查找文件。
-perm 按照文件权限来查找文件。
-prune 使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用了- depth选项,那么-prune选项将被find命令忽略。
-mtime -n +n 按照文件的更改时间来查找文件, -n表示文件更改时间距现在n天以内,+n表示文件更改时间距现在n天以前。
-mmin -n +n 按照分钟搜索
-user 按照文件属主来查找文件。
-group 按照文件所属的组来查找文件。
-nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
-nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newer file1 ! file2 查找更改时间比文件file1新但比文件file2旧的文件。
-type 查找某一类型的文件,诸如:
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。
s - socket文件
-size n[cwbkMG] : 文件大小 为 n 个由后缀决定的数据块。其中后缀为:
b: 代表 512 位元组的区块(如果用户没有指定后缀,则默认为 b)
c: 表示字节数
k: 表示 kilo bytes (1024字节)
w: 字 (2字节)
M:兆字节(1048576字节)
G: 千兆字节 (1073741824字节)
-depth 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
-maxdepth 查找最大目录层数 如 1,即只查找一层目录
-o 是或者的意思
-a 是而且的意思
-not 是相反的意思
-empty 搜索空文件或空目录

查找以.log为后缀的文件

find ./ -name *.log -exec ls -lh {} \;

-rw-r--r-- 1 root root 4.8M May 27 17:14 ./admin/server/run.log
-rw-r--r-- 1 root root 109 May 25 05:00 ./admin/server/logs/sys-user.2021-05-25.log
-rw-r--r-- 1 root root 18K May 22 23:54 ./admin/server/logs/sys-info.2021-05-22.log
-rw-r--r-- 1 root root 18K May 24 23:41 ./admin/server/logs/sys-info.2021-05-24.log
-rw-r--r-- 1 root root 110 May 27 04:20 ./admin/server/logs/sys-user.log
-rw-r--r-- 1 root root 665K May 22 23:54 ./admin/server/logs/sys-error.2021-05-22.log
-rw-r--r-- 1 root root 219 May 26 02:55 ./admin/server/logs/sys-user.2021-05-26.log
-rw-r--r-- 1 root root 20K May 21 23:33 ./admin/server/logs/sys-info.2021-05-21.log
-rw-r--r-- 1 root root 6.3K May 17 09:43 ./admin/server/logs/sys-info.2021-05-17.log
-rw-r--r-- 1 root root 108 May 23 10:58 ./admin/server/logs/sys-user.2021-05-23.log

查找777权限且以.log为后缀的文件

首先执行chmod 777 ./admin/server/run.log将run.log的权限修改
执行下面的命令进行搜索

find ./ -name *.log -perm 777 -exec ls -lh {} \;

-rwxrwxrwx 1 root root 4.8M May 27 17:14 ./admin/server/run.log

查找小于100k的文件

find ./ -name *.log -size -100k -exec ls -lh {} \;

-rw-r--r-- 1 root root 109 May 25 05:00 ./admin/server/logs/sys-user.2021-05-25.log
-rw-r--r-- 1 root root 18K May 22 23:54 ./admin/server/logs/sys-info.2021-05-22.log
-rw-r--r-- 1 root root 18K May 24 23:41 ./admin/server/logs/sys-info.2021-05-24.log
-rw-r--r-- 1 root root 110 May 27 04:20 ./admin/server/logs/sys-user.log
-rw-r--r-- 1 root root 219 May 26 02:55 ./admin/server/logs/sys-user.2021-05-26.log
-rw-r--r-- 1 root root 20K May 21 23:33 ./admin/server/logs/sys-info.2021-05-21.log
-rw-r--r-- 1 root root 6.3K May 17 09:43 ./admin/server/logs/sys-info.2021-05-17.log
-rw-r--r-- 1 root root 108 May 23 10:58 ./admin/server/logs/sys-user.2021-05-23.log

查找1天以内修改的文件

find ./ -name *.log -mtime -1 -exec ls -lh {} \;

-rwxrwxrwx 1 root root 4.8M May 27 17:14 ./admin/server/run.log
-rw-r--r-- 1 root root 110 May 27 04:20 ./admin/server/logs/sys-user.log
-rw-r--r-- 1 root root 14K May 27 16:35 ./admin/server/logs/sys-info.log
-rw-r--r-- 1 root root 683K May 26 23:53 ./admin/server/logs/sys-error.2021-05-26.log
-rw-r--r-- 1 root root 497K May 27 16:35 ./admin/server/logs/sys-error.log
-rw-r--r-- 1 root root 19K May 26 23:53 ./admin/server/logs/sys-info.2021-05-26.log

查找1天以前修改的文件

find ./ -name *.log -mtime +1 -exec ls -lh {} \;

-rw-r--r-- 1 root root 109 May 25 05:00 ./admin/server/logs/sys-user.2021-05-25.log
-rw-r--r-- 1 root root 18K May 22 23:54 ./admin/server/logs/sys-info.2021-05-22.log
-rw-r--r-- 1 root root 18K May 24 23:41 ./admin/server/logs/sys-info.2021-05-24.log
-rw-r--r-- 1 root root 665K May 22 23:54 ./admin/server/logs/sys-error.2021-05-22.log
-rw-r--r-- 1 root root 20K May 21 23:33 ./admin/server/logs/sys-info.2021-05-21.log
-rw-r--r-- 1 root root 6.3K May 17 09:43 ./admin/server/logs/sys-info.2021-05-17.log
-rw-r--r-- 1 root root 108 May 23 10:58 ./admin/server/logs/sys-user.2021-05-23.log
What do you think?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v3.0.0-alpha.10