Linux系统文件与目录内容检索

一、文件和目录内容检索处理命令

1、grep筛选

在文本中查找指定的字符串所在的行。

语法:

grep [选项] file

选项:

选项作用
-i忽略大小写。
-v反转匹配,只显示不匹配的行。
-c计数,只输出匹配行的数量。
-n显示匹配行及其行号。
-l(小写L)只输出包含匹配字符串的文件名。
-L只输出不包含匹配字符串的文件名。
-q(暂时不用)静默模式,不输出任何匹配信息。
-E使用扩展正则表达式。
-o只输出匹配到的部分,而不是整行内容。
-A [NUM]打印匹配行和之后的[NUM]行。
-B [NUM]打印匹配行和之前的[NUM]行。
-C [NUM] 或 --context=[NUM]打印匹配行及其前后的[NUM]行。
-P使用Perl正则表达式。
-r 或 --recursive递归搜索目录中的文件。
-R 或 --text将二进制文件当作文本文件处理。
-s 或 --no-messages不显示错误信息。

案例:

1)、忽略大小写

grep -i "a" test.txt
adcxyzxyzxyz
abcABC
AxyzxyzC
#tast

2)、根据关键字查找目录下文件内容并返回文件名称

grep -lr "a" ./
./test.txt
#查看/var/log/目录下包含"error"的日志文件并返回文件名
grep -lr "error" /var/log/
/var/log/gdm/:0.log.3
/var/log/gdm/:0.log.2
/var/log/gdm/:0.log.1
/var/log/gdm/:0.log
/var/log/anaconda/syslog
/var/log/anaconda/X.log
/var/log/anaconda/program.log
/var/log/anaconda/packaging.log
/var/log/anaconda/journal.log
/var/log/Xorg.9.log
/var/log/messages-20240401
/var/log/vmware-network.6.log
/var/log/vmware-vmusr-root.log
/var/log/Xorg.0.log.old
/var/log/Xorg.0.log
/var/log/messages
​

3)、根据通配符查找

^: 以什么什么开头

$:以什么什么结尾

.:表示单个字符

#查找以f开头d结尾,中间有两个字符的字符串
[root@c2407 c2407-3]# grep '^f..d$' -n test.txt 
4:food
25:ferd
#过滤掉注释内容和空行内容
[root@c2407 c2407-3]# grep "^$" -v test.txt  | grep -v "^#" -n
1:shirt
2:short
3:good
4:food
5:wood
6:wooooooood
7:gooood
8:adcxyzxyzxyz
9:abcABC
10:best
11:besssst
12:ofion
13:ofson
14:ofison
15:AxyzxyzC
21:ferd

2、find查找

find - 递归地在层次目录中处理目录内容

 for i in {1..10};do dd if=/dev/zero of=./f$i bs=1M count=$i;done

选项:

选项作用
-name根据关键字查找,支持通配符*
-type根据文件类型查找
-size根据文件大小查找
-maxdepth指定查找时的路径深度
-exec将find命令查找到的内容交给-exec后面的命令再次处理
-user根据文件的属主进行查找
-perm根据文件的权限进行查找

案例:

1)、根据关键字查找

[root@c2407 log]# find /var/log -name "*.log"

2)、根据文件类型查找

文件类型:

  • 普通文件: f

  • 目录:d

  • 连接文件: l

  • 字符设备文件: c

  • 块设备文件: b

  • 管道文件:p

  • 套接字文件:s

#查找所有的普通文件
[root@c2407 log]# find ./ -type f
#查找目录文件
[root@c2407 log]# find ./ -type d
#查找连接文件
[root@c2407 /]# find ./ -type l
#查找字符设备文件
[root@c2407 dev]# find ./ -type c
#查找块设备文件
[root@c2407 dev]# find ./ -type b
​

3)、根据文件大小查找

#查找等于指定容量
[root@c2407 c2407-3]# find ./ -size 100M
#查找小于指定容量
[root@c2407 c2407-3]# find ./ -size -100M
#查找大于指定容量
[root@c2407 c2407-3]# find ./ -size +100M

4)、多选项查找

#查找文件类型为普通文件且文件后缀为.conf并且容量大于100M
[root@c2407 c2407-3]# find ./ -name "*.conf" -type f -size +100M

5)、指定路径深度进行查找

[root@c2407 log]# find ./ -maxdepth 1 -name "*.log" 

6)、使用-exec处理find查找到的结果

#查找普通文件容量小于100M并删除
[root@c2407 c2407-3]# find ./ -size -100M -type f -exec rm -rf {} \;
#查找普通文件容量大于100M并显示详细信息
[root@c2407 c2407-3]# find ./ -size +100M -type f -exec ls -lh {} \;
​

7)、find结合xargs命令进行结果的再处理

[root@c2407 c2407-3]# find /root/c2407-3/ -size +100M -type f | xargs rm -rf

8、逻辑条件

#-a:并且,条件必须同时满足
[root@localhost opt]# find ./ -size +10M -a -type f
./2.txt
./3.txt
./4.txt
./5.txt
./6.txt
./8.txt
./9.txt
./10.txt
#-o:或者,满足其中一个条件即可
[root@localhost opt]# find ./ -size -10M -o -type f
./
./zhao
./zhao/.mozilla
./zhao/.mozilla/extensions
./zhao/.mozilla/plugins
./zhao/dir1
./zhao/dir1/dir2
./zhao/dir1/dir3
./7.txt
./1.txt
./2.txt
./3.txt
./4.txt
./5.txt
./6.txt
./8.txt
./9.txt
./10.txt
#!:取反
[root@localhost opt]# find ./ ! -size  -10M 
./1.txt
./2.txt
./3.txt
./4.txt
./5.txt
./6.txt
./8.txt
./9.txt
./10.txt

3、sort排序

以行对文件进行排序

选项作用
-f忽略大小写,会将小写字母都转换为大写字母来进行比较
-b忽略每行前面的空格
-n按照数值进行排序
-r反向排序
-u等同于uniq,表示相同的数据仅显示一行,去重显示
-t指定字段分隔符,默认使用[Tab]键分隔
-k指定排序字段
-o<输出文件>将排序后的结果转存至指定文件
-h友好显示

案例:

ls | sort -n
​
 for i in {a..z};do touch ${i}.${i}txt;done
 for i in {1..10};do touch ${i}.${i}txt;done

说明:

当使用sort -n对包含英文字母的文本进行排序时,它会尝试将英文字母按照其在字符编码中的顺序进行数值化解释并排序。

例如,假设有以下文本内容file.txt

10
5
a
7
b
3
z

当执行sort -n file.txt时:

sort -n 会优先识别纯数字字符串,将其按数值大小排序;

对于非数字字符串(比如 abz),sort -n 无法将其解析为数字,会把这类字符串默认归为「小于所有数字」的类别,且非数字之间仍按字符的 ASCII 码顺序排序。

4、uniq去重

uniq 是 Unix 和类 Unix 系统中的命令,用于从排序的文本数据中去除重复行,仅保留唯一的行。它通常与 sort 命令结合使用,因为 uniq 只能删除相邻的重复行。

语法:

uniq [options] [input_file [output_file]]

选项:

选项作用
-c进行计数,并删除文件中重复出现的行
-d仅显示连续的重复行
-u仅显示出现一次的行
-i忽略大小写

案例:

  1. 删除输入文件中的重复行:

sort input.txt | uniq
  1. 仅显示重复的行:

sort input.txt | uniq -d
  1. 忽略大小写进行比较:

sort -i input.txt | uniq -i

5、tr转换

tr 命令是 Unix 和类 Unix 系统中的一个用于字符转换或删除的实用程序。tr 命令通常用于处理文本数据,例如删除特定字符、替换字符、转换大小写等操作。

语法:

tr [options] set1 set2

选项:

选项作用
-c保留字符集1的字符,其他的字符用(包括换行符\n)字符集2替换
-d删除所有属于字符集1(-d 后面的参数)的字符
-s将重复出现的字符串压缩为一个字符串;用字符集2 替换 字符集1
-t字符集2 替换 字符集1,不加选项同结果

案例:

  1. 将文本中的大写字母转换为小写字母:

echo "HELLO" | tr 'A-Z' 'a-z'
  1. 删除文本中的空格:

echo "hello world" | tr -d ' '
  1. 将文本中的特定字符替换为另一个字符:

echo "abc-" | tr 'a-z' 'X-Y'
  1. 压缩重复字符:

echo "foo     bar" | tr -s ' '
  1. 去掉空白符:

echo "hello\tworld" | tr -d '[:space:]'

6、cut切割

cut 是 Unix 和类 Unix 系统中的命令,用于根据指定的字符分隔符从输入中提取字段。cut 命令用于处理文本文件,通常与管道 (|) 和其他命令一起使用,以进一步处理和分析文本数据。

语法:

cut [options] [field-spec]

选项:

选项作用
-f通过指定哪一个字段进行提取。cut命令使用“TAB”作为默认的字段分割符
-d“TAB”是默认的分隔符,使用此选项可更改为其他的分隔符
-c以字符为单位进行分割
- -complement用于排除所指定的字段
- -output-delimiter更改输出内容的分隔符
-s跳过空白字段
-b, -B仅打印非空白的字段。

案例:

以下是使用 cut 命令的一些示例:

  1. 提取指定范围内的字段:(连续)

cut -d ':' -f 1-3 file.txt
  1. 使用制表符作为分隔符提取字段:

cut -d $'\t' -f 1 file.txt
  1. 提取指定文件中的所有字段:(rocky9中不可用)

cut -d ':' -f * file.txt
  1. 仅提取非空白字段:

cut -b 3 file.txt
  1. 使用通配符提取多个字段:(可以不连续)

cut -d':' -f 1,2,3 file.txt
  1. 统计messages(系统)日志每个时间点产生日志的条目数量

cat /var/log/messages | tr -s ' ' | cut -d' ' -f3  | cut -d: -f1  | sort | uniq  -c
  1. 统计web站点访问用户数

[root@c2407 nginx]# cat access.log  | cut -d " " -f 1 | uniq -c
     12 192.168.115.1
     25 192.168.115.100

7、which命令

which 命令在 Unix 和类 Unix 系统中用于查找一个命令的完整路径。当您输入一个命令名称时,which 命令会告诉您该命令位于哪个文件系统中。which 命令通常用于确认命令是否存在于系统 PATH 中,或者用于在脚本中获取命令的确切路径。如果您想要查找的命令不存在于 PATH 中,which 命令将不会返回任何输出。

语法:

which [command]

选项:

选项作用
-a--all打印所有匹配的命令路径,而不仅仅是第一个匹配的。
-p--print-path除了命令名称外,还打印出完整的路径。
-v--version打印 which 命令的版本信息。

案例:

8、whereis命令

whereis 命令在 Unix 和类 Unix 系统中用于查找二进制文件、源代码文件和手册页的位置。它搜索默认的文件系统路径来确定指定命令的相关文件。

语法:

whereis [-bms] [-u] [-f] [-h] [-L] [-M] [-S] [-version] [command]

选项:

选项作用
-b--binary只查找二进制文件。
-m--manual只查找手册页。
-s--source只查找源代码文件。
-u--usage打印使用说明。
-f--follow跟随符号链接。
-h--help打印帮助信息。
L--logical搜索逻辑路径,不包含物理符号链接。
-M--physical搜索物理路径,不包含逻辑符号链接。
-S--size只查找指定大小的文件。

案例:

9、diff命令

语法:

diff [选项] 文件1 文件2

选项:

选项作用
-q--quiet只输出文件差异的文件名,不显示详细差异。
-c--context以语境方式显示差异,默认显示3个字符的上下文。
-u--unified以统一的方式显示差异,这是默认模式,显示共同的祖先与当前文件之间的差异。
-a--text比较文本文件,忽略文件的格式差异。
-b--ignore-space-change忽略空白的差异(空格、制表符等)。
-B--ignore-space-at-eol忽略每行末尾的空白差异。
-i--ignore-case忽略大小写差异。
-D--horizontal-split以水平分割的方式显示差异。
-E--sideby-side以并排的方式显示差异。
-l--from-file只显示文件2相对于文件1的差异。
-r--recursive递归地比较目录。
-N--new-file当文件2是文件1不存在的文件时,只显示文件2的内容。
-x--exclude跳过指定模式的文件。
-X--exclude-from从指定的文件中读取排除模式。
--from-file=FILE-l,指定比较的基准文件。
--horizontalsplit-D,以水平分割的方式显示差异。
--left-column只显示左侧列的差异。
--no-dereference不解析符号链接。
--old-file当文件1是文件2不存在的文件时,只显示文件1的内容。
--recursive-r,递归地比较目录。
--right-column只显示右侧列的差异。
--speed-large-files用于大文件,减少内存使用。

案例:

[root@c2407 opt]# diff /etc/passwd ./passwd 
44d43
< nginx:x:988:982:Nginx web server:/var/lib/nginx:/sbin/nologin

二、文件与目录归档压缩命令

1、tar命令

归档命令

语法:

tar [选项] [归档文件名] [-C] [解压路径]

选项:

选项作用
-z,--gzip用 gzip 对存档压缩
-c, --create建立新的存档
-v, --verbose详细显示处理的文件
-f, --file指定存档文件路径及名称
-j, --bzip2通过 bzip2 过滤归档
-x, --extract, --get从归档中解出文件
-C指定解压后的存储路径
tvf仅查看归档包中的文件内容

案例:

  1. 压缩

tar -jcvf lx.tar.bz2 lx.txt
tar -zcvf lx.tar.gz lx.txt
  1. 解压

tar xf lx.tar.gz -C /opt

2、zip命令

语法:

zip 压缩后的文件名 需要压缩的文件

解压缩命令:

unzip 压缩文件名

3、gzip命令

压缩后源文件消失

语法:

gzip 需要压缩的文件

解压缩命令:

解压后源文件消失

gunzip 压缩文件

4、bzip2命令

压缩后源文件消失,压缩率最高

语法:

bzip2 需要压缩的文件

解压缩命令:

解压后源文件消失

bunzip2 压缩文件

三、统计命令

1、wc

统计文件内容的行数、字符数、单词数

wc -l 行数 
wc -w 单词
wc -c 字符

2、du

统计文件占用磁盘空间的容量

du -sh 总容量
su -ah 每个文件的容量及总容量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值