第二部分: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不显示错误信息。

例如:

 grep -i基本用法

grep -i "pattern" filename
 

 该命令会在 filename 文件中搜索包含 pattern 的行,忽略大小写。例如,pattern 可以是 helloHelloHELLO 等。

grep -v基本用法

grep -v "pattern" filename
 

 这个命令会从 filename 文件中过滤掉所有包含 "pattern" 的行,只显示不包含该模式的行。

 grep -c基本用法

grep -c "pattern" filename
 

 grep -c 是 grep 命令的一个选项,用于统计匹配模式的行数。它不会显示匹配的具体内容,而是直接返回匹配的行数。

  • "pattern":要搜索的模式或字符串。
  • filename:要搜索的文件名。

grep -n基本用法 

grep -n "搜索字符串" 文件名
 

 该命令会在指定的文件中搜索包含“搜索字符串”的行,并显示这些行的行号

 grep -l基本用法

grep -l "pattern" file1 file2 ...
 

 

  • -l:仅列出包含匹配模式的文件名,而不显示匹配的具体内容。
  • "pattern":要搜索的模式,可以是字符串或正则表达式。
  • file1 file2 ...:要搜索的文件列表。可以使用通配符(如 *.txt)来匹配多个文件。

 grep -E基本用法

grep -E "pattern" file
 

 

  • "pattern":要匹配的正则表达式模式。
  • file:要搜索的文件名。

 grep-r基本用法

grep -r "pattern" /path/to/directory
 

 

  • "pattern" 是要搜索的字符串或正则表达式。
  • /path/to/directory 是要搜索的目录路径。如果省略路径,则默认在当前目录及其子目录中搜索。
  • "pattern" 是要搜索的字符串或正则表达式。
  • /path/to/directory 是要搜索的目录路径。如果省略路径,则默认在当前目录及其子目录中搜索。

2、find查找

find - 递归地在层次目录中处理文件

选项:

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

例如:

-name基本用法

find /path/to/search -name "filename"
 

这个命令会在 /path/to/search 目录及其子目录中搜索名为 filename 的文件或目录。

使用通配符

find /path/to/search -name "*.txt"
 

这个命令会搜索所有以 .txt 结尾的文件。

find -type基本用法

find /path/to/search -type f
 

使用 -type f 可以查找普通文件(即非目录、符号链接等)。

使用 -type d 可以查找目录。

find /path/to/search -type d
 

查找符号连接

find /path/to/search -type l
 

组合使用

find /path/to/search -type f ! -type l
 

ind 命令支持组合使用多个条件。例如,查找所有普通文件并排除符号链接:

-size基本用法

find 命令是 Linux 和 Unix 系统中用于查找文件和目录的强大工具。-size 选项允许用户根据文件大小来查找文件。以下是 -size 选项的详细用法和示例。

find [路径] -size [大小]
 

大小单位

-size 选项支持多种单位来指定文件大小:

  • c:字节(默认单位)
  • k:千字节(1024 字节)
  • M:兆字节(1024 千字节)
  • G:吉字节(1024 兆字节)

 查找当前目录下大小大于100字节的文件

查找/home目录下大小小于10k的文件

-maxdepth基本用法

find /path/to/search -maxdepth 1 -name "*.txt"
 

 -maxdepth 选项用于指定 find 命令在搜索文件和目录时的最大深度。深度是指从起始目录开始的层级数。例如,深度为 1 表示只搜索起始目录本身,深度为 2 表示搜索起始目录及其直接子目录。

上述命令将在 /path/to/search 目录中搜索所有扩展名为 .txt 的文件,但不会进入任何子目录。

-user基本用法

find -user 是一个在 Unix/Linux 系统中用于查找属于特定用户文件的命令。

find [路径] -user [用户名]
 

 查找/etc目录下root用户的文件详细信息并且限制搜索深度

3、sort排序

以行对文件进行排序

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

例如:

sort -f基本用法

sort -f 是 Unix/Linux 命令行工具 sort 的一个选项。它用于在排序时忽略大小写,即将大写字母和小写字母视为相同。这在需要对包含大小写混合的文本进行排序时非常有用。

 

假设有一个文本文件 file.txt,内容如下:

Apple
banana
Cherry
date
 

使用 sort -f 命令可以忽略大小写进行排序:

sort -f file.txt
 

输出结果将会是:

Apple
banana
Cherry
date
 

其他常用选项

  • -r:逆序排序(从大到小或从 Z 到 A)。
  • -n:按数值大小排序。
  • -u:去除重复行。

 例如,使用 sort -f -r 可以忽略大小写并逆序排序:

sort -f -r file.txt
 

输出结果将会是:

date
Cherry
banana
Apple
 

当执行sort -n file.txt时:

  1. 首先,对于纯数字10、5、3、7,它会按照数值大小正确排序为3、5、7、10。

  2. 对于字母a、b、z:

- 在 ASCII 编码中,字母有对应的数值编码。a的 ASCII 码值是 97,b是 98,z是 122(这里只是简单举例其数值编码情况,实际排序时会按照这种类似的数值化处理方式)。

- 按照sort -n的处理方式,它会将这些字母当作数值来处理,所以在上述数字排序之后,字母会按照其对应的编码值进行排序,结果可能类似3、5、7、10、a、b、z(这只是简单示意,实际输出格式可能因系统等因素略有不同)。

但需要注意的是,这种按照数值化处理字母的方式可能并不是你真正期望的合理排序结果。如果想要更合适的按照字母顺序的排序,可以考虑使用其他合适的选项,比如sort(默认按照字典序排序)。如果文本内容比较复杂,包含字母和数字的混合且有特定的排序需求,可能需要进一步对文本进行预处理或者采用更复杂的排序策略。

4、uniq去重

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

语法:

uniq [options] [input_file [output_file]]

选项:

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

例如:

uniq -c基本用法

uniq -c input_file
 

该命令会读取 input_file 文件,统计连续重复行的数量,并在每行前显示重复次数。

5、tr转换

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

语法:

tr [字符] 字符集1 字符集2

选项:

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

案例:

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


删除文本中的空格:


将文本中的特定字符替换为另一个字符:


压缩重复字符:

将文本中的所有小写字母转换为大写字母,并删除所有数字:

echo "hello123 world" | tr 'a-z' 'A-Z' | tr -d '0-9'
 

输出:

6、cut切割

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

语法:

cut [选项] [field-spec]

选项:

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

案例:

-c基本用法

按字符位置提取。例如,提取每行的第 1 到第 5 个字符:

cut -c 1-5 filename.txt
 

-f基本用法

按字段提取。默认字段分隔符是制表符(Tab),可以使用 -d 选项指定其他分隔符。

cut -d ',' -f 2 filename.csv
 

-d基本用法

cut -d ':' -f 1 /etc/passwd
 

定字段分隔符。例如,使用冒号作为分隔符:

-complement基本用法

cut -d ',' -f 2 --complement filename.csv
 

--complement:提取除指定部分之外的所有内容。例如,提取除第 2 个字段之外的所有字段:

7、which命令

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

语法:

which [command]

选项:

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

案例:

which-a基本用法

which -a python
 

假设系统中安装了多个版本的 python,可以使用以下命令查看所有路径:

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只查找指定大小的文件。

例如:

查找 ls 命令的二进制文件、手册页和源代码文件:

whereis ls

输出可能类似于:

ls: /bin/ls /usr/share/man/man1/ls.1.gz

仅查找 ls 命令的二进制文件:

whereis -b ls

输出可能类似于:

ls: /bin/ls

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用于大文件,减少内存使用。

基本用法:

diff 命令的基本语法如下:

diff [选项] 文件1 文件2

例如,比较两个文件 file1.txt 和 file2.txt 的差异:

diff file1.txt file2.txt

常用选项

  • -u:以统一格式(unified format)显示差异,通常用于生成补丁文件。
  • -r:递归比较目录中的所有文件。
  • -i:忽略大小写差异。
  • -w:忽略所有空白字符的差异。
  • -c:以上下文格式显示差异。
  • -q:仅报告文件是否不同,不显示具体差异。

示例

以统一格式比较两个文件:

diff -u file1.txt file2.txt

递归比较两个目录:

diff -r dir1 dir2

忽略空白字符差异:

diff -w file1.txt file2.txt

输出解释

diff 的输出通常包含以下符号:

  • <:表示第一个文件中的内容。
  • >:表示第二个文件中的内容。
  • ---:分隔两个文件的差异部分。
  • @@:在统一格式中,表示差异的行范围。

生成补丁文件

diff 常用于生成补丁文件,以便将修改应用到其他文件或目录。例如:

diff -u old_file.txt new_file.txt > patch_file.patch

生成的 patch_file.patch 可以通过 patch 命令应用到其他文件。

应用补丁

使用 patch 命令应用补丁文件:

patch file.txt < patch_file.patch

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

1、tar

归档命令

语法:

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

选项:

选项作用
-z,--gzip用 gzip 对存档压缩
-c, --create建立新的存档
-v, --verbose详细显示处理的文件
-f, --file指定存档文件路径及名称
-j, --bzip2通过 bzip2 过滤归档
-x, --extract, --get从归档中解出文件
-C指定解压后的存储路径
tvf仅查看归档包中的文件内容
--same-owner保留文件所有者(需root权限)
-J使用xz压缩

案例:

创建归档文件

tar -cvf archive.tar file1 file2 dir1
 

要将多个文件或目录打包成一个 .tar 文件

解压归档文件

tar -xvf archive.tar
 

ls:

查看归档文件内容

要查看 .tar 文件中的内容而不解压,可以使用以下命令:

tar -tvf archive.tar
 

压缩归档文件

tar -czvf archive.tar.gz file1 file2 dir1
 

tar 通常与压缩工具(如 gzip 或 bzip2)结合使用,以创建压缩的归档文件。例如,使用 gzip 压缩:

-z:使用 gzip 压缩

使用 bzip2 压缩:

tar -cjvf archive.tar.bz2 file1 file2 dir1
 

-j:使用 bzip2 压缩。

解压压缩的归档文件

解压 .tar.gz 文件:

tar -xzvf archive.tar.gz

解压 .tar.bz2 文件:

tar -xjvf archive.tar.bz2

添加文件到现有归档

要向现有的 .tar 文件中添加文件,可以使用以下命令:

tar -rvf archive.tar newfile
  • -r:向归档文件中添加文件。

从归档中提取特定文件

要从 .tar 文件中提取特定文件,可以使用以下命令:

tar -xvf archive.tar file1 file2

排除特定文件

在创建归档时,可以排除特定文件或目录:

tar -cvf archive.tar --exclude="file1" --exclude="dir1" .

2、zip/unzip

语法:

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

解压缩命令:

unzip 压缩文件名

3、gzip / gunzip

默认压缩后源文件消失

语法:

gzip 需要压缩的文件
gzip -k filename       # 保留原文件

解压缩命令:

默认解压后源文件消失

gunzip 压缩文件
gunzip -k 压缩文件

4、bzip2 / bunzip2

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

语法:

bzip2 需要压缩的文件

解压缩命令:

解压后源文件消失

bunzip2 压缩文件

5、xz / unxz

  • 压缩文件

    xz filename            # 生成filename.xz
  • 解压文件

    unxz filename.xz

工具对比

工具/格式压缩率速度典型扩展名特点
gzip.gz通用,适合文本文件
bzip2.bz2高压缩率,适合大文件
xz极高最慢.xz最高压缩率,资源消耗大
zip.zip跨平台(Windows兼容)
tar.tar仅归档,需配合压缩工具使用

三、统计命令

1、wc

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

wc -l file.txt            # 统计文件行数(常用日志分析)
wc -c file.txt            # 统计字节数
wc -m file.txt            # 统计字符数(与字节数区别在UTF-8环境)
wc -w file.txt            # 统计单词数(以空格分隔)
wc -L file.txt            # 统计最长行的长度

2、du

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

du -sh /path/to/dir       # 统计目录总大小(-s汇总,-h人性化显示)
du -h --max-depth=1 /var  # 显示/var下一级子目录大小
du -ah /path              # 显示所有文件及子目录大小(含隐藏文件)

3、高级工具 ncdu

ncdu /path/to/dir          # 交互式分析目录占用(按大小排序,支持删除)
ncdu -x /                  # 不跨越文件系统边界扫描
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值