文章目录
本文是一份详尽的Linux命令行指南,专为后端开发者设计。文中逐一解析了54个常用命令,涵盖文件操作、性能监控到网络诊断。每个命令都包含功能、参数及实战示例,同时教授管道与重定向等组合用法,是一篇值得收藏的速查宝典。
前言
对于每一位后端开发者而言,命令行界面(CLI)不仅是一个工具,更是我们在服务器世界中施展拳脚的舞台。熟练掌握Linux命令,能极大地提升我们的工作效率和解决问题的能力。
这篇文章是一份为你精心准备的 “Linux命令行终极宝典”,涵盖了从基础文件操作到系统深度诊断的超过50个核心命令,并为每个命令提供了详细的参数说明和贴近实战的案例。
建议你立即收藏本文,它将成为你未来工作中可靠的速查手册。

本文大纲
- 基石 · 文件与目录核心操作
- 利刃 · 文本处理与文件搜索
- 武装 · 软件安装与包管理
- 洞察 · 系统状态与性能监控
- 掌控 · 进程与服务控制
- 联通 · 网络诊断与远程操作
- 守护 · 权限安全与用户切换
- 打包 · 压缩归档
- 内省 · 系统信息与硬件识别
- 环境 · 编辑、链接与其它
- 终极技巧 · 命令组合与流控制
第一篇:基石 · 文件与目录核心操作
1. ls:列出文件和目录
核心功能:列出指定目录下的文件和子目录。
常用参数:
-l:使用长列表格式,显示权限、所有者、大小、修改时间等详细信息。-a:显示所有文件,包括.开头的隐藏文件。-h:配合-l,以可读的格式(如KB,MB)显示文件大小。-t:按修改时间排序,最新的文件排在最前面。-r:反向排序。常与-t结合使用 (-tr),列出最旧的文件。
实践案例:
# 详细地列出当前目录下所有文件(包括隐藏),并按修改时间倒序排列
ls -alht
2. cd:切换目录
核心功能:更改当前所在的终端工作目录。
常用用法:
cd /var/log/nginx: 切换到 Nginx 日志目录。cd ..: 切换到上一级目录。cd ~或cd: 切换到当前用户的主目录。cd -: 切换到上一次所在的目录。
实践案例:
# 快速进入用户主目录
cd
# 查看日志后,快速返回之前的工作目录
cd /var/log
# ... do something ...
cd -
3. pwd:显示当前路径
核心功能:打印出当前工作目录的绝对路径。
实践案例:
# 确认自己当前的位置
pwd
# 输出: /root/log/
4. mkdir:创建目录
核心功能:创建一个新的目录。
常用参数:
-p: 递归创建目录。如果父目录不存在,会自动创建父目录。
实践案例:
# 创建一个多层级的目录结构用于存放应用日志
mkdir -p my-app/logs/archived
5. rm:删除文件或目录
核心功能:移除(删除)文件或目录。
常用参数:
-r: 递归删除,用于删除目录及其全部内容。-f: 强制删除,不进行任何确认提示。
实践案例:
# 强制删除名为 'temp_logs' 的目录及其所有内容
# !!! 警告:这是一个高危操作,执行前请再三确认路径 !!!
rm -rf temp_logs
6. cp:复制文件或目录
核心功能:复制文件或目录到指定位置。
常用参数:
-r: 递归复制,用于复制整个目录。-p:保留源文件的属性,如所有者、权限、时间戳。
实践案例:
# 在修改配置文件前,先做一个备份
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
# 复制整个项目目录为备份
cp -r my-project my-project-backup
7. mv:移动或重命名
核心功能:1. 移动文件或目录到另一个位置;2. 重命名文件或目录。
实践案例:
# 移动已部署的jar包到归档目录
mv my-app.jar deployed/archive/
# 将一个日志文件重命名,加上日期戳
mv app.log app-$(date +%Y-%m-%d).log
第二篇:利刃 · 文本处理与文件搜索
8. cat:查看和合并文件内容
核心功能:将一个或多个文件的内容输出到标准输出(通常是终端屏幕)。
常用参数:
-n: 在输出的每一行前加上行号。
实践案例:
# 快速查看一个配置文件的内容
cat /etc/hosts
# 将两个SQL片段合并成一个文件
cat part1.sql part2.sql > final.sql
9. less:分页查看文件
核心功能:以可交互的方式分页浏览大文件内容,比cat更适合查看日志等大文件。
常用操作(在less界面中):
/keyword: 向下搜索keyword。?keyword: 向上搜索keyword。n: 跳转到下一个搜索结果。q: 退出less。
实践案例:
# 查看一个几百兆的Nginx访问日志
less /var/log/nginx/access.log
10. head:查看文件开头
核心功能:显示文件的开头部分,默认为10行。
常用参数:
-n <行数>: 指定要显示的行数。
实践案例:
# 查看一个CSV文件的前5行,以确认文件格式和表头
head -n 5 data.csv
11. tail:查看文件结尾
核心功能:显示文件的结尾部分,默认为10行。
常用参数:
-n <行数>: 指定要显示的行数。-f: (高频使用) 实时跟踪文件的新增内容,直到按下Ctrl+C。
实践案例:
# 实时监控应用日志,排查线上问题
tail -f /home/app/logs/my-app.log
12. grep:文本搜索
核心功能:在文件或标准输入中搜索包含指定模式的行。
常用参数:
-i: 忽略大小写。-v: 反向匹配,显示不包含模式的行。-r或-R: 递归搜索目录下的所有文件。-n: 显示匹配行的行号。-C <N>: 显示匹配行及其上下文(前后N行)。
实践案例:
# 在实时日志中,只看包含"ERROR"的行(不区分大小写)
tail -f app.log | grep -i "ERROR"
# 在当前项目代码中,查找所有使用 "deprecatedFunction" 的地方
grep -r "deprecatedFunction" .
13. find:查找文件
核心功能:在指定的目录树中按各种条件(名称、大小、类型、修改时间等)查找文件。
常用参数:
-name <模式>: 按文件名查找。-type <类型>: 按文件类型查找 (f为文件,d为目录)。-size <大小>: 按文件大小查找 (+100M表示大于100MB)。-mtime <天数>: 按最后修改时间查找 (-7表示7天内,+7表示7天前)。-exec <命令> {} \;: 对找到的每个文件执行指定命令。
实践案例:
# 查找/var/log目录下所有7天前修改过的、以.log结尾的文件,并删除它们
find /var/log -type f -name "*.log" -mtime +7 -exec rm {} \;
第三篇:武装 · 软件安装与包管理
14. apt:Debian/Ubuntu包管理器
核心功能:在 Debian、Ubuntu 及其衍生发行版上,用于搜索、安装、更新和卸载软件包。
常用参数:
update: 更新本地的软件包索引列表,通常在安装或升级前执行。install <包名>: 安装指定的软件包。upgrade: 升级所有已安装的软件包。remove <包名>: 卸载指定的软件包(保留配置文件)。autoremove: 自动移除不再需要的依赖包。search <关键词>: 搜索软件包。
实践案例:
# 更新包列表,然后安装Nginx
sudo apt update
sudo apt install nginx
15. yum:CentOS/RHEL包管理器
核心功能:在较旧的 RHEL、CentOS 等发行版上,用于管理软件包。
常用参数:
install <包名>: 安装软件包。update <包名>: 更新软件包。remove <包名>: 卸载软件包。list installed: 列出所有已安装的包。search <关键词>: 搜索软件包。
实践案例:
# 在CentOS 7上安装htop工具
sudo yum install htop
16. dnf:新一代CentOS/RHEL包管理器
核心功能:在现代的 Fedora、RHEL 8+、CentOS 8+ 发行版中,作为 yum 的继任者,提供更好的性能和依赖解析。
常用参数:与 yum 基本一致。
实践案例:
# 在CentOS 8上安装httpd(Apache服务器)
sudo dnf install httpd
17. rpm:RPM包管理底层工具
核心功能:是 Red Hat 及其衍生发行版(如CentOS)中用于管理 .rpm 软件包文件的底层工具。yum 和 dnf 是构建在 rpm 之上的高级工具。
常用参数:
-i: 安装 (install)。-v: 显示详细过程 (verbose)。-h: 显示安装进度条 (hash)。-q: 查询 (query)。-e: 卸载 (erase)。-U: 升级 (upgrade)。
实践案例:
# 假设你下载了一个.rpm文件,手动安装它
rpm -ivh some-package.rpm
# 查询系统中是否安装了nginx
rpm -q nginx
第四篇:洞察 · 系统状态与性能监控
18. top:实时进程监视器
核心功能:实时、动态地显示系统中各个进程的资源占用情况,如CPU、内存等。
常用操作(在top界面中):
P(大写): 按CPU使用率降序排序。M(大写): 按内存使用率降序排序。k: 输入进程PID后回车,以终止该进程。q: 退出top。
实践案例:
# 登录服务器后,直接输入top,查看是哪个进程占用了过高的CPU
top
19. htop:交互式进程浏览器
核心功能:top的彩色、可交互增强版,界面更友好,支持鼠标操作,功能更强大。
安装方法:
sudo apt install htop # Debian/Ubuntu
sudo yum install htop # CentOS/RHEL
实践案例:
# 使用htop,可以方便地用方向键选择进程,按F9发送信号来终止它
htop
20. ps:进程状态快照
核心功能:显示当前系统进程在某个时间点的快照,不像top是动态的。
常用参数:
a: 显示所有用户的进程。u: 显示用户及更详细的信息。x: 显示没有控制终端的后台进程。aux: 是最常用的参数组合,显示系统上所有进程的详细信息。
实践案例:
# 查找Java相关的进程及其PID,以便进行下一步操作(如kill)
ps aux | grep java
21. pstree:树状显示进程
核心功能:以树状图的形式展示进程之间的父子关系,非常直观。
安装方法:通常系统自带,若无则:
sudo apt install psmisc # Debian/Ubuntu
sudo yum install psmisc # CentOS/RHEL
实践案例:
# 查看Nginx主进程启动了哪些工作进程
pstree | grep nginx
22. df:查看磁盘分区使用情况
核心功能:显示文件系统的磁盘空间占用情况。
常用参数:
-h: 以人类可读的格式(G,M,K)显示大小。-T: 显示文件系统类型。
实践案例:
# 查看服务器上各个磁盘分区的空间是否充足
df -h
23. free:查看内存使用情况
核心功能:显示系统物理内存和交换空间(swap)的使用情况。
常用参数:
-h: 以人类可读的格式显示。-g/-m/-k: 分别以 GB / MB / KB 为单位显示。
实践案例:
# 快速检查服务器的内存使用状况
free -h
24. du:查看文件和目录大小
核心功能:估算并显示文件或目录占用的磁盘空间大小。与df看整个分区不同,du关注具体目录。
常用参数:
-h: 以人类可读的格式显示。-s: 只显示总计大小(summarize),不显示子目录详情。--max-depth=N: 指定要深入的目录层级。
实践案例:
# 查找/var/log目录下哪个子目录占用空间最大
du -sh /var/log/*
第五篇:掌控 · 进程与服务控制
25. kill:向进程发送信号
核心功能:向一个或多个进程发送信号,最常用的是终止信号。
常用信号:
-15(SIGTERM): 默认信号,通知进程自行终止(优雅关闭),允许进程进行清理工作。-9(SIGKILL): 强制、立即终止进程,进程无法捕获此信号,可能会导致数据丢失。
实践案例:
# 1. 找到卡死的应用进程PID
# ps aux | grep my-app
# 假设PID为 12345
# 2. 尝试优雅地关闭它
kill 12345
# 3. 如果无效,则强制杀死
kill -9 123445
26. nohup:让进程在后台持续运行
核心功能:在命令前加上 nohup,该命令将在用户退出登录后继续运行,不受挂断信号(SIGHUP)的影响。通常与 & 结合使用。
符号说明:
&: 将命令放入后台执行。> file 2>&1: 将标准输出和标准错误输出都重定向到同一个文件。
实践案例:
# 在后台启动一个Java应用,并将所有日志输出到app.log,即使用户断开SSH连接,应用依然运行
nohup java -jar my-app.jar > app.log 2>&1 &
27. systemctl:systemd服务管理器
核心功能:在现代Linux发行版(使用systemd)中,用于控制系统服务的核心工具。
常用命令:
start <服务名>: 启动服务。stop <服务名>: 停止服务。restart <服务名>: 重启服务。status <服务名>: 查看服务状态(排错首选)。enable <服务名>: 设置服务开机自启。disable <服务名>: 取消开机自启。
实践案例:
# 重启Nginx服务,并检查其状态以确认是否成功
sudo systemctl restart nginx
sudo systemctl status nginx
第六篇:联通 · 网络诊断与远程操作
28. ping:测试网络连通性
核心功能:向目标主机发送ICMP ECHO_REQUEST数据包,以测试网络是否通畅、测量往返时间(延迟)。
常用参数:
-c <次数>: 指定发送数据包的次数。-i <秒数>: 指定每次发送的间隔时间。
实践案例:
# 测试与数据库服务器 'db.server.com' 的网络连接,只发送4个包
ping -c 4 db.server.com
29. ifconfig:配置网络接口(传统)
核心功能:用于显示和配置网络接口(网卡)的传统命令。在许多现代发行版中,它已被ip命令取代,但仍然广泛使用。
实践案例:
# 显示所有网络接口的配置信息,包括IP地址、MAC地址等
ifconfig
30. ip:现代网络配置工具
核心功能:一个功能强大的现代网络配置工具,是 ifconfig, route, netstat 等传统命令的集合体和替代品。
常用子命令:
addr show(或a): 显示IP地址信息。route show(或r): 显示路由表。link show: 显示网络接口(链路层)信息。neigh show: 显示ARP缓存(邻居表)。
实践案例:
# 查看本机所有网卡的IP地址
ip addr show
# 查看系统的默认网关
ip route
31. netstat:显示网络连接(传统)
核心功能:显示网络连接、路由表、接口统计等信息的传统工具。
常用参数:
-t: TCP连接。-u: UDP连接。-l: 监听中的端口。-p: 显示建立连接的程序名/PID。-n: 以数字形式显示地址和端口,不做反向解析(速度更快)。-a: 显示所有连接和监听端口。
实践案例:
# 查看所有监听中的TCP和UDP端口及其对应的程序
sudo netstat -tulnp
32. ss:获取套接字统计
核心功能:netstat的现代替代品,查询速度更快,能处理更多的连接信息。
常用参数:与netstat类似。
-t,-u,-l,-p,-n,-a。
实践案例:
# 快速找出是哪个进程占用了8080端口
sudo ss -tulpn | grep ':8080'
33. telnet:测试远程端口
核心功能:一个简单的远程连接协议客户端,常被开发者用来快速测试某个IP的特定端口是否开放和可达。
安装方法:
sudo apt install telnet # Debian/Ubuntu
sudo yum install telnet # CentOS/RHEL
实践案例:
# 测试Redis服务器(192.168.1.100)的6379端口是否能够连接
# 如果连接成功,屏幕会变黑等待输入;如果失败,会提示 "Connection refused" 或超时
telnet 192.168.1.100 6379
34. curl:HTTP请求工具
核心功能:一个功能极其强大的命令行工具,用于发送各种网络协议的请求,最常用于HTTP(S)。
常用参数:
-I: 只获取HTTP响应头。-X <方法>: 指定请求方法,如POST,PUT,DELETE。-H "<头信息>": 添加自定义请求头。-d "<数据>": 发送POST请求的数据体。-o <文件名>: 将输出保存到文件。
实践案例:
# 测试一个健康检查接口
curl http://localhost:8080/health
# 发送一个带JSON体的POST请求
curl -X POST -H "Content-Type: application/json" -d '{"name":"test"}' http://localhost:8080/api/users
35. wget:网络文件下载器
核心功能:一个非交互式的命令行工具,用于从网络上自动下载文件。
常用参数:
-c: 断点续传。-O <文件名>: 将下载内容保存为指定的文件名。-P <目录>: 指定下载文件的保存目录。--no-check-certificate: 忽略SSL证书验证(不安全,仅用于特殊场景)。
实践案例:
# 下载最新版的Tomcat安装包
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.83/bin/apache-tomcat-9.0.83.tar.gz
36. ssh:安全远程登录
核心功能:Secure Shell,用于安全地远程登录到另一台主机并执行命令。
常用参数:
-p <端口>: 指定远程主机的SSH端口。-i <私钥文件>: 指定用于身份验证的私钥文件。
实践案例:
# 以user用户身份登录到IP为192.168.1.200的服务器
ssh user@192.168.1.200
# 使用指定的私钥文件登录
ssh -i ~/.ssh/my_key user@192.168.1.200
37. scp:安全文件复制
核心功能:Secure Copy,基于SSH协议,在本地和远程主机之间安全地复制文件。
常用参数:
-r: 递归复制,用于复制整个目录。-P <端口>: 指定远程主机的SSH端口(注意是大写P)。-i <私钥文件>: 指定私钥文件。
实践案例:
# 将本地打包好的应用 'app.jar' 上传到服务器的 '/opt/apps' 目录
scp ./app.jar user@remote_host:/opt/apps/
# 将服务器上的Nginx日志目录下载到本地
scp -r user@remote_host:/var/log/nginx ./nginx_logs
第七篇:守护 · 权限安全与用户切换
38. chmod:修改文件权限
核心功能:更改文件或目录的访问权限(读、写、执行)。
常用参数/模式:
- 符号模式:
+(添加权限),-(移除权限),=(设置权限)。u(用户),g(组),o(其他),a(所有)。 - 数字模式:
4(读),2(写),1(执行)。将所需权限的数字相加。例如7(4+2+1) 代表读写执行,5(4+1) 代表读和执行。
实践案例:
# 给一个脚本文件添加可执行权限,以便能直接运行它
chmod +x my_script.sh
# 将一个项目目录权限设置为:所有者可读写执行,所属组可读可执行,其他人可读可执行
chmod 755 project_dir
39. chown:更改文件所有者
核心功能:更改文件或目录的所有者和/或所属组。
常用参数:
-R: 递归更改,用于目录。
语法:chown <新所有者> <文件>chown <新所有者>:<新所属组> <文件>
实践案例:
# 将网站根目录的所有权交给 Nginx 运行的用户 'www-data'
sudo chown -R www-data:www-data /var/www/html
40. sudo:以超级用户身份执行
核心功能:Superuser Do,允许普通用户以超级用户(root)或其他用户的身份执行命令。
实践案例:
# 安装软件、修改系统配置、重启服务等操作都需要管理员权限
sudo systemctl restart nginx
41. su:切换用户
核心功能:切换到另一个用户账户。
常用参数:
-或-l: 在切换用户的同时,也切换到新用户的完整环境(包括$PATH等环境变量),模拟一次完整的登录。
实践案例:
# 切换到 'appuser' 用户,并加载其完整的环境变量后,再执行操作
su - appuser
42. sestatus:查看SELinux状态
核心功能:显示 Security-Enhanced Linux (SELinux) 的状态。SELinux是一种强制访问控制安全机制,常见于CentOS/RHEL。
实践案例:
# 在CentOS上,如果Nginx无法访问文件,即使文件权限(rwx)正确,
# 也应该检查SELinux状态。如果状态是'Enforcing',则问题可能出在SELinux策略上。
sestatus
第八篇:打包 · 压缩归档
43. tar:打包与解包
核心功能:将多个文件或目录打包成一个 .tar 文件,并能选择性地使用 gzip (.gz) 或 bzip2 (.bz2) 进行压缩。
常用参数:
-c: 创建 (create) 一个归档文件。-x: 提取 (extract) 归档文件。-v: 显示详细过程 (verbose)。-f: 指定归档文件名 (file)(此参数后必须紧跟文件名)。-z: 使用 gzip 进行压缩/解压缩。
实践案例:
# 将 'my_project' 目录打包并用 gzip 压缩成 'project_backup.tar.gz'
tar -czvf project_backup.tar.gz my_project
# 从 'project_backup.tar.gz' 中解压文件
tar -xzvf project_backup.tar.gz
44. zip:创建zip压缩文件
核心功能:创建与Windows系统兼容的 .zip 格式压缩文件。
安装方法:
sudo apt install zip unzip # Debian/Ubuntu
sudo yum install zip unzip # CentOS/RHEL
常用参数:
-r: 递归处理,用于压缩目录。-q: 安静模式,不显示过程信息。
实践案例:
# 将 'my_docs' 目录压缩成 'docs_archive.zip'
zip -r docs_archive.zip my_docs
45. unzip:解压zip文件
核心功能:解压 .zip 格式的压缩文件。
安装方法:同zip。
常用参数:
-d <目录>: 指定解压到的目标目录。
实践案例:
# 将 'docs_archive.zip' 文件解压到 'extracted_docs' 目录
unzip docs_archive.zip -d extracted_docs
第九篇:内省 · 系统信息与硬件识别
46. uname:显示系统信息
核心功能:打印当前系统的基本信息,如内核名称、版本、硬件架构等。
常用参数:
-a: 显示所有可用信息 (all)。-r: 显示内核版本。-m: 显示机器硬件名称(架构)。
实践案例:
# 快速查看服务器的内核版本和操作系统架构
uname -a
47. lscpu:显示CPU信息
核心功能:以易读的格式显示有关CPU架构的详细信息,如核心数、线程数、缓存大小等。
实践案例:
# 检查服务器的CPU配置,以进行性能评估或资源分配
lscpu
48. lspci:列出PCI设备
核心功能:列出系统中所有的PCI设备,如网卡、显卡、RAID控制器等。
实践案例:
# 查看服务器上物理网卡的型号
lspci | grep -i "ethernet"
49. lsusb:列出USB设备
核心功能:列出连接到系统的所有USB设备。
实践案例:
# 确认服务器是否识别到了新插入的USB加密狗或存储设备
lsusb
50. ldd:显示共享库依赖
核心功能:打印一个可执行文件或共享库所依赖的动态链接库。对于排查“缺少库文件”类型的错误非常有用。
实践案例:
# 查看nginx可执行文件依赖哪些共享库
ldd $(which nginx)
51. history:查看命令历史
核心功能:显示当前用户在终端中执行过的历史命令列表。
常用技巧:
!n: 执行历史记录中编号为n的命令。!!: 执行上一条命令。history | grep <关键词>: 搜索历史命令。Ctrl+R: 反向搜索历史命令。
实践案例:
# 忘记了上次用来重启某个服务的复杂命令,可以搜索历史记录
history | grep "systemctl"
第十篇:环境 · 编辑、链接与其它
52. vi:经典文本编辑器
核心功能:经典的命令行文本编辑器,是所有类Unix系统的标准配置。它以模式化编辑而闻名,功能强大但学习曲线较陡。
核心模式:
- 命令模式 (Normal Mode): 默认进入的模式,用于移动光标、删除文本、复制粘贴等。
- 插入模式 (Insert Mode): 在命令模式下按
i(在光标前插入)、a(在光标后追加)、o(在下一行插入) 等键进入,用于输入文本。按Esc键返回命令模式。 - 底线命令模式 (Command-line Mode): 在命令模式下按
:进入,用于执行保存、退出、替换等命令。
实践案例:
# 在一台极简安装的服务器上,vi可能是唯一可用的编辑器
# 快速编辑一个脚本
vi my_script.sh
# (进入后按'i'开始编辑,编辑完成后按'Esc',然后输入':wq'回车,即可保存并退出)
53. vim:增强版vi编辑器
核心功能:vi的改进版(Vi IMproved),在vi的基础上增加了大量功能,如语法高亮、代码补全、分屏、多级撤销等,是开发者的首选命令行编辑器。
安装方法:
sudo apt install vim # Debian/Ubuntu
sudo yum install vim # CentOS/RHEL
实践案例:
# 使用vim编辑Nginx配置文件,它会自动识别文件类型并进行语法高亮,极大提升了可读性
vim /etc/nginx/nginx.conf
54. ln:创建链接
核心功能:为文件或目录创建链接,分为硬链接(hard link)和符号链接(symbolic link)。
常用参数:
-s: 创建符号链接(symbolic link),也叫软链接。这是最常用的类型,它像一个指向源文件的快捷方式。
区别:- 符号链接:可以跨文件系统,删除源文件会导致链接失效。
- 硬链接:不能跨文件系统,相当于文件的另一个入口,删除任意一个入口,文件实体依然存在,直到所有链接都被删除。
实践案例:
# 场景:应用版本管理
# 假设应用部署在 /opt/apps/my-app-v1.2 目录
# 创建一个名为 'current' 的软链接指向它
ln -s /opt/apps/my-app-v1.2 /opt/apps/current
# 当发布新版本v1.3时,只需更新链接,而不需要修改任何引用了'current'路径的配置
rm /opt/apps/current
ln -s /opt/apps/my-app-v1.3 /opt/apps/current
第十一篇:终极技巧 · 命令组合与流控制
到目前为止,我们已经学习了大量独立的命令。但Linux命令行的真正魔力在于其“组合”能力,这遵循了Unix哲学的核心思想:“每个程序只做一件事,并把它做好。” 通过管道和重定向,我们可以将这些专注的小工具串联起来,构建出强大的数据处理工作流。
1. 管道 (Pipe |)
核心概念:管道符 | 就像一根水管,它将前一个命令的标准输出(Standard Output)直接连接到后一个命令的标准输入(Standard Input)。这形成了一个命令处理流水线,数据在其中流动并被逐级处理。
语法:
command1 | command2 | command3 ...
实践案例:
-
案例一:经典组合
ps+grep
我们之前已经用过这个组合,现在来深入理解它。ps aux会输出当前系统所有的进程信息,内容非常多。我们只关心nginx相关的进程。# `ps aux` 的输出 -> 作为 `grep nginx` 的输入 ps aux | grep nginx这里,
grep不再需要从文件中读取,而是直接处理从管道传来的ps命令的结果。 -
案例二:统计文件数量
ls+wc
wc -l命令可以统计输入的行数。我们可以用它来统计当前目录下的文件和目录总数。# `ls -l` 的输出 -> 作为 `wc -l` 的输入,统计总行数 # (注意:结果会比实际数量多1,因为ls -l第一行是total) ls -l | wc -l -
案例三:后端日志分析(多级管道)
这是最能体现管道威力的场景。假设我们要从 Nginx 的access.log中找出访问量最高的前10个IP地址。# 分析访问日志,找出访问量TOP 10的IP cat access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -n 10让我们拆解这条流水线:
cat access.log: 读取整个日志文件的内容并输出。| awk '{print $1}':awk按列处理文本,{print $1}表示只提取并输出每一行的第一列(即IP地址)。| sort: 对所有IP地址进行排序,这是为了让相同的IP地址能够相邻,为下一步做准备。| uniq -c:uniq去除重复的行,-c参数会同时计算每个IP地址连续出现了多少次。| sort -rn:sort再次进行排序。-r表示反向(降序),-n表示按数值大小排序。这样,出现次数最多的IP就排在了最前面。| head -n 10: 最后,head命令只取出排序后的前10行,即TOP 10的IP。
2. 重定向 (Redirection)
核心概念:重定向是改变命令的默认输入/输出目标。默认情况下,输入来自键盘,输出到屏幕。重定向可以让我们从文件读取输入,或将输出写入到文件。
常用符号:
-
>(输出重定向 - 覆盖)
将命令的标准输出重定向到一个文件。如果文件不存在,则创建;如果文件已存在,则会覆盖其全部内容。# 将当前目录的详细列表写入 file_list.txt,会覆盖旧内容 ls -lh > file_list.txt -
>>(输出重定向 - 追加)
将命令的标准输出追加到一个文件的末尾。如果文件不存在,则创建;如果文件已存在,内容会加在后面,不会覆盖。# 将一条新的日志信息追加到 app.log 文件末尾 echo "$(date): Application restarted" >> app.log -
<(输入重定向)
将命令的标准输入从键盘改为一个文件。# 使用 a.sql 文件作为 mysql 客户端的输入,来执行SQL脚本 mysql -u root -p my_database < a.sql -
2>(错误重定向)
Linux中有两种主要的输出:标准输出(stdout, 文件描述符1)和标准错误(stderr, 文件描述符2)。>只重定向标准输出。2>则专门用于重定向标准错误输出。# 尝试执行一个可能出错的命令,只把错误信息保存到 error.log ./my_script.sh 2> error.log -
2>&1(合并标准输出和标准错误)
这是一个非常常见的用法,表示将标准错误(2)重定向到与标准输出(1)相同的地方。常与>结合,实现将所有输出(无论正常还是错误)都保存到同一个文件。# 以后台方式运行一个脚本,并将它的所有输出(stdout和stderr)都写入到 output.log nohup ./long_running_task.sh > output.log 2>&1 &
组合使用管道和重定向
你可以将流水线的最终结果重定向到文件中,进行保存或后续分析。
# 将前面日志分析的结果保存到 top_ips.txt 文件中
cat access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -n 10 > top_ips.txt
总结
恭喜你,坚持看到了这里!
掌握命令行,是每一位后端工程师从优秀走向卓越的必经之路。它赋予我们直接、高效地与系统对话的能力。本文中逐一详解的这50多个命令,构成了我们日常开发与运维工作的坚实骨架。
更重要的是,我们学习了如何通过管道符 | 和重定向 > 将这些独立的命令组合起来,构建出解决复杂问题的强大工作流。这正是Linux命令行的精髓所在。真心希望这本“终极宝典”能成为你探索Linux世界的一张详尽地图。
写在最后
大家好,这里是[编程实践录],一个热衷于分享实用开发技巧的技术博客。
写一篇高质量文章不易,如果这篇文章确实帮助到了你,希望可以点赞、收藏、关注一下,这也是我持续创作的最大动力!
当然,我更推荐你来我的公众号【编程实践录】找我。
为什么?因为在那里,除了所有文章的首发,我还准备了:
- 深度交流:你可以随时在公众号后台向我提问,我都会逐一回复。
- 硬核干货:更多关于编程实践的独家技巧和思考。
在微信搜索框里,直接搜索“编程实践录”,就可以找到我。我们换个地方,聊点更深的!
Linux命令行精华50+
1412

被折叠的 条评论
为什么被折叠?



