「Linux文件及目录管理」文件内容的显示和处理类命令

91 阅读9分钟

在Linux系统中,高效地查看和处理文件内容是日常运维和开发的基本技能。主要包括cattacmorelessheadtailfilewcsortuniqecho等命令。

相关知识点

1.cat:连接文件并打印到标准输出,常用于查看文件内容。
基本语法

cat [选项]... [文件]...

常用选项

  • -n 或 --number:显示行号(包括空行)
  • -b 或 --number-nonblank:显示行号(忽略空行)
  • -s 或 --squeeze-blank:压缩连续的空白行
  • -E 或 --show-ends:在每行结尾显示 $ 符号
  • -T 或 --show-tabs:将 TAB 字符显示为 ^I
  • -A 或 --show-all:等价于 -vET(显示所有特殊字符)
  • -v 或 --show-nonprinting:显示非打印字符(除换行和TAB外)

2.tac:与cat相反,从最后一行开始显示文件内容。
基本语法

tac [选项]... [文件]...

常用选项

  • -b 或 --before:在行前而非行尾添加分隔符
  • -r 或 --regex:将分隔符视为正则表达式
  • -s 或 --separator=STRING:使用指定字符串作为分隔符(默认是换行符)
  • --help:显示帮助信息
  • --version:显示版本信息

3.more:分页显示文件内容,适合查看大文件,但只能向前翻页。
基本语法

more [选项] 文件名

常用选项

  • -d:显示提示信息 "[Press space to continue, 'q' to quit.]" 并显示错误信息
  • -f:强制处理特殊文件(如二进制文件)
  • -l:不处理 ^L(换页符)
  • -p:不滚屏,而是清屏后显示文本
  • -c:不滚屏,而是从上到下显示文本
  • -u:禁用下划线
  • -s:将多个空行压缩为单个空行
  • +行号:从指定行号开始显示
  • +/模式:从匹配模式的字符串前两行开始显示

交互式操作命令

  • 空格键:向下翻一页
  • Enter:向下翻一行
  • q:退出
  • =:显示当前行号
  • :f:显示文件名和当前行号
  • /字符串:向下搜索指定字符串
  • n:重复前一个搜索
  • !命令:执行 shell 命令
  • v:启动默认编辑器(如 vi)
  • h:显示帮助信息

4.less:比more更强大的分页工具,支持前后翻页、搜索等功能。
基本语法

less [选项] 文件名

常用选项

  • -N:显示行号
  • -i:忽略搜索时的大小写
  • -F:如果内容少于一屏,自动退出
  • -S:截断长行而不是换行显示
  • -X: 退出时不清屏
  • -m:显示更多提示信息(类似 more
  • +/pattern:打开文件后立即搜索指定模式
  • +行号:从指定行号开始显示

交互式操作命令:移动命令

  • 空格键 或 f:向前翻一页
  • b:向后翻一页
  • Enter 或 e:向前翻一行
  • y:向后翻一行
  • g:跳到文件开头
  • G:跳到文件末尾
  • 50%:跳到文件50%位置

交互式操作命令:搜索命令

  • /pattern:向前搜索指定模式
  • ?pattern:向后搜索指定模式
  • n:重复上一次搜索
  • N:反向重复上一次搜索

其他命令

  • v:用默认编辑器打开当前文件
  • h:显示帮助信息
  • q:退出 less
  • F:类似 tail -f,实时跟踪文件变化
  • !command:执行 shell 命令

5.head:显示文件的开头部分,默认显示前10行。
基本语法

head [选项]... [文件]...

常用选项

  • -n 或 --lines=[-]NUM:显示前NUM行(负值表示显示除最后NUM行外的所有行)
  • -c 或 --bytes=[-]NUM:示前NUM字节(负值表示显示除最后NUM字节外的所有字节)
  • -q 或 --quiet:不显示文件名头(多文件时)
  • -v 或 --verbose:总是显示文件名头
  • --help:显示帮助信息
  • --version:显示版本信息

6.tail:显示文件的末尾部分,默认显示最后10行,常用于监控日志文件。
基本语法

tail [选项]... [文件]...

常用选项

  • -n 或 --lines=[+]NUM:显示最后NUM行(加号表示从第NUM行开始显示)
  • -c 或 --bytes=[+]NUM:显示最后NUM字节(加号表示从第NUM字节开始显示)
  • -f 或 --follow:实时追踪文件变化(常用于查看日志)
  • -F:同-f,但会跟踪文件名变化(文件被轮转时仍然有效)
  • -q 或 --quiet:不显示文件名头(多文件时)
  • -v 或 --verbose:总是显示文件名头
  • --pid=PID:与-f一起使用,当指定PID结束时停止跟踪
  • -s 或 --sleep-interval=N:与-f一起使用,设置检查间隔时间(秒)
  • --help:显示帮助信息
  • --version:显示版本信息

7.file:确定文件类型。
基本语法

file [选项]... [文件]...

常用选项

  • -b 或 --brief:简洁输出模式(不显示文件名)
  • -i 或 --mime:显示 MIME 类型而非描述
  • -f 或 --files-from FILE:从指定文件读取要检测的文件列表
  • -F 或 --separator STRING:使用自定义分隔符(默认是冒号)
  • -L 或 --dereference:跟随符号链接(显示链接指向的文件类型)
  • -z 或 --uncompress:尝试查看压缩文件的内容类型
  • -k 或 --keep-going:不因第一个匹配结果停止,继续检测
  • -n 或 --no-buffer:立即刷新标准输出
  • -s 或 --special-files:也检测特殊文件(如设备文件)
  • -v 或 --version:显示版本信息
  • --help:显示帮助信息

8.wc:统计文件中的行数、单词数、字节数。
基本语法

wc [选项]... [文件]...

常用选项

  • -c 或 --bytes:显示字节数
  • -m 或 --chars:显示字符数
  • -l 或 --lines:显示行数
  • -w 或 --words:显示单词数
  • -L 或 --max-line-length:显示最长行的长度
  • --help:显示帮助信息
  • --version:显示版本信息

9.sort:对文件内容进行排序。
基本语法

sort [选项]... [文件]...

常用选项

  • -b:忽略前导空白字符
  • -d:只考虑字母、数字和空格(字典顺序
  • -f:忽略大小写
  • -g:按一般数值排序(科学计数法
  • -h:按人类可读数值排序(如 2K, 1G)
  • -n:按数值排序
  • -R:随机排序
  • -r:逆序排序
  • -V:自然排序(版本号排序)

10.uniq:去除或统计重复行。
基本语法

uniq [选项]... [输入文件 [输出文件]]

常用选项

  • -c 或 --count:在每行前显示重复次数
  • -d 或 --repeated:只显示重复的行(每组显示一次)
  • -D 或 --all-repeated[=METHOD]:显示所有重复行(METHOD可以是none/prepend/separate)
  • -f 或 --skip-fields=N:忽略前N个字段(字段由空格或制表符分隔)
  • -i 或 --ignore-case:忽略大小写
  • -s 或 --skip-chars=N:忽略前N个字符
  • -u 或 --unique:只显示不重复的行
  • -w 或 --check-chars=N:只比较每行的前N个字符
  • --help:显示帮助信息
  • --version:显示版本信息

11.echo:显示一行文本或变量值。
基本语法

echo [选项] [字符串/变量...]

常用选项

  • -n:不输出末尾的换行符
  • -e:启用反斜杠转义解释
  • -E:禁用反斜杠转义解释(默认)
  • --help:显示帮助信息
  • --version:显示版本信息

案例与解析

案例:使用cat查看文件内容

cat /etc/passwd

解析:显示/etc/passwd文件的内容,该文件包含系统用户信息。

案例:使用tac反向显示文件

tac /etc/passwd | head -n 5

解析:先使用tac反向显示/etc/passwd文件,然后通过head -n 5只显示前5行(实际上是原文件的最后5行)。

案例:使用less分页查看大文件

less /var/log/maillog

解析less命令适合查看大文件,支持按空格键翻页,q键退出。

案例:使用head和tail快速查看文件开头和结尾

head -n 3 /etc/passwd  # 显示前3行
tail -n 3 /etc/passwd  # 显示后3行

解析:分别显示/etc/passwd文件的前3行和后3行。

案例:使用file确定文件类型

file /bin/ls

解析:显示/bin/ls文件的类型,通常为ELF可执行文件。

案例:使用wc统计文件信息

wc -l /etc/passwd  # 统计行数

解析:统计/etc/passwd文件的行数。

案例:使用sort和uniq排序并去重

sort /etc/passwd | uniq -c

解析:先对/etc/passwd文件内容进行排序,然后使用uniq -c统计每行出现的次数(/etc/passwd通常没有重复行,显示每行出现的次数均为1)。

案例:使用echo输出文本

echo "Hello, World!"

解析:在终端输出"Hello, World!"。

案例:使用tail -f实时监控日志文件

tail -f /var/log/maillog

解析:实时监控/var/log/maillog文件的更新,常用于查看日志文件的最新内容。

常见错误及解决方法

错误cat: /nonexistent/file: No such file or directory
解决方法:检查文件路径是否正确,确保文件存在。

错误less: cannot open /large/file: Permission denied 解决方法:使用sudo或以具有足够权限的用户身份运行命令。

错误wc: invalid option -- 'x' 解决方法:检查命令选项是否正确,wc的常用选项为-l(行数)、-w(单词数)、-c(字节数)。

理论练习

问答:如何使用cat命令查看两个文件的内容并合并输出?
答案cat file1.txt file2.txt

问答tail -f命令有什么用途?
答案tail -f用于实时监控文件的追加内容,常用于查看日志文件的最新更新。

问答wc -lwc -w分别统计什么? 答案wc -l统计行数,wc -w统计单词数。

问答:如何使用sortuniq命令统计文件中不同行的数量?
答案sort file.txt | uniq | wc -l

实操练习

练习:编写一个脚本,使用headtail命令提取/etc/passwd文件的第5到第10行。
答案

#!/bin/bash
head -n 10 /etc/passwd | tail -n 6

练习:使用echo命令输出当前目录下的所有文件和子目录名称,每行一个。
答案

#!/bin/bash
echo "当前目录下的文件和子目录:"
ls -l

解析:使用ls -1命令以每行一个的形式输出当前目录下的文件和子目录名称。

知识总结

  • cattac用于查看文件内容,前者正向,后者反向。
  • moreless用于分页查看大文件,less功能更强大。
  • headtail用于快速查看文件的开头和结尾。
  • file用于确定文件类型。
  • wc用于统计文件信息。
  • sortuniq用于排序和去重。
  • echo用于输出文本或变量值。