Linux 基本命令超详细解释第三期 grep | wc | 管道符‘|’ | echo | tail | 重定向符

一、grep 命令

grep 全称 Global Regular Expression Print,用来在文件中搜索符合条件的字符串/正则表达式,并输出匹配的行

语法

bash 复制代码
grep [选项] 模式 文件

常用选项

  • -i:忽略大小写

  • -n:显示行号

  • -v:显示 不匹配的行

  • -c:只显示匹配的行数

  • -o:只显示匹配到的内容

  • -r:递归搜索子目录下所有文件

  • -E:使用扩展正则表达式(相当于 egrep

使用示例

bash 复制代码
grep "main" hello.cpp         # 在 hello.cpp 中查找包含 "main" 的行
grep -n "main" hello.cpp      # 查找并显示行号
grep -i "error" log.txt       # 忽略大小写查找 error
grep -v "test" data.txt       # 输出不包含 test 的行
grep -c "for" hello.cpp       # 统计 for 出现的行数
grep -r "TODO" ./src          # 在 src 目录下递归查找 TODO

二、wc 命令

wc 全称 Word Count,用来统计文件内容的信息,包括:行数、单词数、字节数

语法

bash 复制代码
wc [选项] 文件

常用选项

  • -l:统计行数

  • -w:统计单词数

  • -c:统计字节数

  • -m:统计字符数(字符区别于字节,见下文字符与字节的区别)

  • -L:输出文件中最长行的长度

使用示例

bash 复制代码
wc file.txt             # 输出 行数、单词数、字节数
wc -l file.txt          # 统计行数
wc -w file.txt          # 统计单词数
wc -c file.txt          # 统计字节数
wc -m file.txt          # 统计字符数(UTF-8 字符长度不同)
wc -L file.txt          # 输出最长行的长度

字符与字节的区别

  • 字节数(-c) :统计文件内容所占用的实际存储空间,也就是文件里有多少个字节

  • 字符数(-m) :统计文件中有多少个人类可读的字符

区别在于:

  • 对于 英文、数字、ASCII 符号,1 个字符 = 1 个字节。

  • 对于 中文、日文、韩文等非 ASCII 字符 ,在 UTF-8 编码下,1 个字符 = 多个字节(通常 3 个字节)。

举例说明

假设我们有一个文件 test.txt,内容如下:

bash 复制代码
abc你好

这个文件里包含:

  • 3 个英文字符a b c

  • 2 个中文字符你 好

(1) 按字符数统计

bash 复制代码
wc -m test.txt

结果:

复制代码
5 test.txt

因为一共是 5 个字符

(2) 按字节数统计

bash 复制代码
wc -c test.txt

结果(UTF-8 编码下):

bash 复制代码
9 test.txt

因为:

  • abc → 3 个字节

  • → 3 个字节

  • → 3 个字节

    合计 = 9 字节

四、管道符

管道符号 | 用来 把前一个命令的输出,作为后一个命令的输入 。它是 Linux 中 组合命令、构建强大工具链 的核心

语法:

bash 复制代码
命令1 | 命令2 | 命令3 ...

例子

bash 复制代码
ls -l | grep ".cpp"
  • ls -l:列出当前目录文件的详细信息

  • grep ".cpp":过滤出包含 .cpp 的行

    👉 最终效果:只显示 .cpp 文件的详细信息

1. 统计匹配行数

bash 复制代码
grep "error" log.txt | wc -l
  • grep 输出所有包含 "error" 的行

  • wc -l 统计这些行数

    👉 结果就是 "error" 出现的行数

2. 查看进程

bash 复制代码
ps aux | grep ssh
  • ps aux:列出所有进程

  • grep ssh:筛选包含 "ssh" 的进程

    👉 快速找到相关进程

3. 分页查看

bash 复制代码
dmesg | less
  • dmesg 输出内核日志(通常很长)

  • less 分页显示,方便浏览

4. 排序 + 去重

bash 复制代码
cat file.txt | sort | uniq
  • sort:排序

  • uniq:去除相邻的重复行

    👉 最终得到 去重后的有序结果

5. 多重管道

bash 复制代码
cat access.log | grep "200" | wc -l
  • cat 输出日志

  • grep "200" 过滤状态码 200 的记录

  • wc -l 统计数量

    👉 得到 成功访问次数

Linux 常见管道命令速查表

1. 文件内容处理

bash 复制代码
cat file.txt | less                # 分页查看文件
cat file.txt | sort | uniq         # 排序并去重
cat file.txt | sort | uniq -c      # 统计每行出现次数
cat file.txt | grep "hello" | wc -l # 统计包含 "hello" 的行数

2. 文本搜索

bash 复制代码
grep "error" log.txt | less        # 搜索 error 并分页显示
grep -i "warning" log.txt | wc -l  # 忽略大小写搜索 warning 并统计行数
grep -r "TODO" ./src | wc -l       # 递归搜索 TODO 并统计数量

3. 系统与进程管理

bash 复制代码
ps aux | grep ssh                  # 查看 ssh 相关进程
ps aux | grep -v grep | grep ssh   # 避免 grep 命令本身被匹配
ps -ef | grep nginx | wc -l        # 统计 nginx 进程数量

4. 日志分析

bash 复制代码
dmesg | grep usb                   # 查看内核日志中的 usb 相关信息
tail -f access.log | grep "404"    # 实时查看 404 错误日志
cat access.log | grep "200" | wc -l # 统计成功请求数量

5. 统计与排序

bash 复制代码
cat file.txt | wc -l               # 统计行数
cat file.txt | wc -w               # 统计单词数
cat file.txt | wc -c               # 统计字节数
cat access.log | awk '{print $1}' | sort | uniq -c | sort -nr
# 统计日志中各 IP 出现次数并按数量排序

6. 其他实用

bash 复制代码
ls -l | grep "^d"                  # 只显示目录
history | grep ssh                 # 在历史命令中查找 ssh
find . -type f | wc -l             # 统计当前目录下的文件数
  • grep → 筛选

  • wc → 统计

  • sort/uniq → 排序去重

  • less/more/head/tail → 查看

五、echo 命令

  • echo 用来 在终端输出字符串变量的值

  • 主要用于测试、调试、脚本输出

基本语法

bash 复制代码
echo [选项] [字符串]

常用选项

  • -n:输出内容后 不换行

  • -e:启用转义字符(如 \n, \t

示例

bash 复制代码
echo "Hello World"        # 输出 Hello World
echo $HOME                # 输出环境变量 HOME
echo -n "Hello"           # 输出 Hello,但不换行
echo -e "A\nB\nC"         # 输出多行 A B C
echo -e "Name\tAge"       # 输出带制表符的表格

六、tail 命令

  • tail 用来 查看文件的末尾内容

  • 默认显示 最后 10 行

基本语法

bash 复制代码
tail [选项] [文件]

常用选项

  • -n <行数>:显示文件末尾的指定行数

  • -f:实时输出文件新增加的内容(常用于日志监控)

  • -c <字节数>:显示文件末尾的指定字节数

示例

bash 复制代码
tail file.txt             # 查看文件最后 10 行
tail -n 20 file.txt       # 查看文件最后 20 行
tail -c 50 file.txt       # 查看文件最后 50 个字节
tail -f log.txt           # 实时监控 log.txt 的新增内容
tail -n 100 -f log.txt    # 从最后 100 行开始,持续跟踪新增

tail -f 做了什么

  • tail file 默认显示文件的 最后 10 行

  • 加上 -f(follow)后,tail 会先输出最后若干行(默认 10 行),然后持续运行,把文件新增的内容(被追加的字节)实时打印出来

  • 常用场景:实时查看日志文件,调试输出等

示例:

bash 复制代码
tail -f /var/log/syslog
  • 这会先显示最后 10 行,然后当有新日志写入时立刻在终端显示
bash 复制代码
tail -n 0 -f logfile     # 只显示之后追加的新行
  • 从现在开始只看新增行(不想看到历史内容)

七、重定向符

在 Linux 里,命令运行时会涉及到 三个标准文件描述符

  • 标准输入 (stdin):编号 0,默认来自键盘

  • 标准输出 (stdout):编号 1,默认输出到终端

  • 标准错误 (stderr):编号 2,默认输出到终端

重定向 就是改变它们的默认去向:

  • 把输入从文件读进来,而不是键盘

  • 把输出写到文件里,而不是屏幕

默认简写规则

  1. 标准输出 (1)

    • > 默认就是 1>

    • >> 默认就是 1>>

    bash 复制代码
    echo "hi" > out.txt     # 等价于 echo "hi" 1> out.txt
    echo "hi" >> out.txt    # 等价于 echo "hi" 1>> out.txt
  2. 标准输入 (0)

    • < 默认就是 0<
    bash 复制代码
    wc -l < file.txt        # 等价于 wc -l 0< file.txt

不能省略的情况

  1. 标准错误 (2)

    • 2> 不能省略 2,因为默认是 stdout (1)
    bash 复制代码
    ls not_exist 2> err.txt   # 正确 ✅
    ls not_exist > err.txt    # 错误 ❌(这是把标准输出写到文件,而错误还是显示在屏幕)
  2. 混合输出时

    bash 复制代码
    command > all.log 2>&1    # stdout 和 stderr 都到 all.log
    • 这里 2>&1 不能简写成 >&1,必须写清楚 2

常见的重定向符

1. 输出重定向

bash 复制代码
command > file
  • 把命令的 标准输出 写入文件(覆盖原内容)

例子:

bash 复制代码
echo "Hello" > out.txt   # 把 Hello 写入 out.txt

2. 追加重定向

bash 复制代码
command >> file
  • 把命令的输出 追加到文件末尾,不会覆盖原内容

例子:

bash 复制代码
echo "World" >> out.txt  # 把 World 追加到 out.txt

3. 输入重定向

bash 复制代码
command < file
  • 把文件作为命令的输入

例子:

bash 复制代码
wc -l < out.txt   # 统计 out.txt 的行数(输入来自文件,而不是键盘)

4. 错误输出重定向

bash 复制代码
command 2> error.txt
  • 标准错误 (stderr) 输出到文件。

例子:

bash 复制代码
ls not_exist 2> err.log   # 错误信息保存到 err.log
相关推荐
jimy14 小时前
安卓里运行Linux
linux·运维·服务器
爱凤的小光5 小时前
Linux清理磁盘技巧---个人笔记
linux·运维
耗同学一米八6 小时前
2026年河北省职业院校技能大赛中职组“网络建设与运维”赛项答案解析 1.系统安装
linux·服务器·centos
知星小度S7 小时前
系统核心解析:深入文件系统底层机制——Ext系列探秘:从磁盘结构到挂载链接的全链路解析
linux
2401_890443027 小时前
Linux 基础IO
linux·c语言
智慧地球(AI·Earth)8 小时前
在Linux上使用Claude Code 并使用本地VS Code SSH远程访问的完整指南
linux·ssh·ai编程
老王熬夜敲代码9 小时前
解决IP不够用的问题
linux·网络·笔记
zly35009 小时前
linux查看正在运行的nginx的当前工作目录(webroot)
linux·运维·nginx
QT 小鲜肉9 小时前
【Linux命令大全】001.文件管理之file命令(实操篇)
linux·运维·前端·网络·chrome·笔记
问道飞鱼10 小时前
【Linux知识】Linux 虚拟机磁盘扩缩容操作指南(按文件系统分类)
linux·运维·服务器·磁盘扩缩容