Linux 命令集全解析:从基础到高级实践指南

Linux 作为一款开源操作系统,其强大的生命力很大程度上源于命令行工具。无论是系统管理、开发调试、自动化脚本还是日常运维,掌握 Linux 命令都是提升效率的核心技能。相较于图形界面,命令行工具更轻量、更灵活,且能通过组合实现复杂功能。本文将系统梳理 Linux 命令集,从基础语法到高级技巧,结合实例与最佳实践,帮助读者构建完整的命令行知识体系。

目录#

  1. Linux 命令基础

    • 命令结构与组成
    • 选项与参数的区别
    • 如何获取帮助(man 与 --help)
  2. 文件与目录管理命令

    • 浏览与切换:ls, cd, pwd
    • 创建与删除:mkdir, touch, rm
    • 复制与移动:cp, mv
    • 查找与统计:find, du, df
    • 最佳实践:安全操作与效率技巧
  3. 文本处理命令

    • 查看文件:cat, more, less
    • 行操作:head, tail
    • 搜索匹配:grep
    • 流编辑:sed
    • 数据提取:awk
    • 最佳实践:大文件处理与精准匹配
  4. 系统信息与监控命令

    • 系统基本信息:uname, hostname, uptime
    • 资源监控:top, htop, free, vmstat
    • 磁盘与文件系统:df, du, iostat
  5. 进程管理命令

    • 进程查看:ps, pstree
    • 进程控制:kill, pkill, pgrep
    • 作业控制:jobs, bg, fg
  6. 网络管理命令

    • 网络诊断:ping, traceroute, mtr
    • 网络配置:ip, ifconfig (已过时)
    • 连接监控:netstat, ss
    • 数据传输:curl, wget, scp
  7. 用户与权限管理

    • 用户/组操作:useradd, groupadd, passwd
    • 权限修改:chmod, chown, chgrp
    • 特权管理:sudo, su
  8. 包管理命令

    • Debian/Ubuntu:apt 系列
    • RHEL/CentOS:yum/dnf 系列
    • Arch Linux:pacman 系列
  9. 高级命令技巧

    • 管道(|)与重定向(>, >>, <
    • 别名(alias)与环境变量
    • 通配符与正则表达式基础
  10. 常见问题与最佳实践总结

  11. 参考资料

1. Linux 命令基础#

1.1 命令基本结构#

Linux 命令的通用格式为:

命令 [选项] [参数]
  • 命令(Command):核心功能,如 ls(列出文件)、cd(切换目录)。
  • 选项(Options):修改命令行为,分为短选项(- 前缀,如 -l)和长选项(-- 前缀,如 --help)。
  • 参数(Arguments):命令作用的对象,如文件名、目录路径。

示例

ls -l /home/user  # 以长格式列出 /home/user 目录内容

1.2 选项与参数的区别#

  • 选项:控制命令的细节行为,如 -l(长格式)、-a(显示隐藏文件)。
  • 参数:指定命令的操作目标,如文件路径、用户名。

注意:部分命令的选项和参数顺序可互换,但建议按「命令 → 选项 → 参数」顺序书写,提高可读性。

1.3 获取帮助:man--help#

  • man 命令:查看命令的手册页(最权威),按 q 退出。
    示例:man ls 查看 ls 命令的详细说明。
  • 命令 --help:快速查看命令的选项摘要。
    示例:ls --help 列出 ls 的常用选项。

2. 文件与目录管理命令#

文件与目录管理是 Linux 命令最核心的应用场景,以下是高频命令详解。

2.1 浏览与切换:ls, cd, pwd#

ls(列出目录内容)#

  • 功能:列出指定目录的文件和子目录。
  • 常用选项
    • -l:长格式显示(权限、所有者、大小、修改时间等)。
    • -a:显示隐藏文件(以 . 开头的文件)。
    • -h:以人类可读格式显示大小(如 1K, 2M)。
    • -t:按修改时间排序(最新在前)。
  • 示例
    ls -laht /home  # 显示 /home 目录下所有文件(含隐藏),按时间排序,长格式+人类可读大小

cd(切换目录)#

  • 功能:切换当前工作目录。
  • 特殊路径
    • cdcd ~:切换到当前用户家目录。
    • cd ..:切换到父目录。
    • cd -:切换到上一次工作目录。
  • 示例
    cd /var/log  # 切换到 /var/log 目录
    cd ~/Documents  # 切换到用户家目录下的 Documents 子目录

pwd(显示当前路径)#

  • 功能:打印当前工作目录的绝对路径。
    示例:pwd → 输出 /home/user/Documents

2.2 创建与删除:mkdir, touch, rm#

mkdir(创建目录)#

  • 功能:创建新目录。
  • 常用选项
    • -p:递归创建嵌套目录(父目录不存在时自动创建)。
  • 示例
    mkdir test  # 创建单个目录 test
    mkdir -p a/b/c  # 递归创建 a/b/c 嵌套目录

touch(创建空文件)#

  • 功能:创建空文件,或更新已有文件的修改时间。
    示例:touch file.txt → 创建空文件 file.txt

rm(删除文件/目录)#

  • 功能:删除文件或目录(危险操作,需谨慎!)。
  • 常用选项
    • -f:强制删除,不提示(忽略不存在的文件)。
    • -r:递归删除目录及其内容。
    • -i:删除前提示确认(安全选项)。
  • 示例
    rm file.txt  # 删除单个文件(会提示确认,除非设置了 alias rm='rm -i')
    rm -rf dir/  # 强制递归删除 dir 目录(高危!避免用于系统目录)
    rm -i *.log  # 删除所有 .log 文件,删除前逐个确认

最佳实践

  • 避免直接使用 rm -rf /rm -rf *,可先用 ls 确认目标文件。
  • 重要文件建议先备份,或使用 -i 选项强制确认。

2.3 复制与移动:cp, mv#

cp(复制文件/目录)#

  • 功能:复制文件或目录。
  • 常用选项
    • -r:递归复制目录。
    • -i:覆盖前提示确认。
    • -a:归档复制(保留权限、时间戳等元数据,常用于备份)。
  • 示例
    cp file.txt /tmp/  # 复制 file.txt 到 /tmp 目录
    cp -r dir/ /backup/  # 递归复制 dir 目录到 /backup
    cp -ai old/ new/  # 归档复制 old 目录到 new 目录(保留所有属性)

mv(移动/重命名文件)#

  • 功能:移动文件/目录,或重命名(同一目录下操作即为重命名)。
    示例:
    mv file.txt /tmp/  # 移动 file.txt 到 /tmp 目录
    mv oldname.txt newname.txt  # 重命名文件
    mv dir/ /backup/  # 移动 dir 目录到 /backup

2.4 查找与统计:find, du, df#

find(查找文件/目录)#

  • 功能:按条件递归查找文件/目录。
  • 常用参数
    • -name "模式":按文件名匹配(支持通配符 * ?)。
    • -type f/d:指定类型(f 文件,d 目录)。
    • -size +10M:查找大小大于 10M 的文件(-10M 为小于)。
    • -mtime -7:查找 7 天内修改过的文件(+7 为 7 天前)。
    • -exec 命令 {} \;:对找到的文件执行指定命令({} 代表文件名)。
  • 示例
    find /home -name "*.log"  # 在 /home 下查找所有 .log 文件
    find /var -type f -size +100M  # 在 /var 下查找大小超过 100M 的文件
    find . -mtime -1 -exec grep "error" {} \;  # 在当前目录查找 1 天内修改的文件,并搜索 "error"

du(查看目录大小)#

  • 功能:估算文件/目录的磁盘占用大小。
  • 常用选项
    • -s:仅显示总计大小。
    • -h:人类可读格式(K, M, G)。
  • 示例
    du -sh /home/user  # 显示 /home/user 目录的总大小
    du -h *  # 显示当前目录下所有文件/目录的大小(含子目录)

df(查看磁盘空间)#

  • 功能:显示文件系统的磁盘使用情况。
  • 常用选项
    • -h:人类可读格式。
    • -T:显示文件系统类型。
  • 示例
    df -h  # 以人类可读格式显示所有挂载点的磁盘使用情况
    df -Th /  # 显示根目录的文件系统类型和使用情况

3. 文本处理命令#

Linux 系统中,日志、配置文件多为文本格式,掌握文本处理命令可大幅提升效率。

3.1 查看文件:cat, more, less#

cat(连接并显示文件)#

  • 功能:显示文件内容,或连接多个文件。
    示例:
    cat file.txt  # 显示 file.txt 内容
    cat a.txt b.txt > c.txt  # 合并 a.txt 和 b.txt 到 c.txt
  • 注意:避免用 cat 查看超大文件(会瞬间刷屏),建议用 lessmore

moreless(分页显示文件)#

  • more:按页显示文件,支持空格键翻页,q 退出。
    示例:more large_file.log
  • less:功能更强大的分页工具,支持上下滚动、搜索(/关键词 向下搜,?关键词 向上搜),q 退出。
    示例:less /var/log/syslog

3.2 行操作:head, tail#

head(显示文件头部)#

  • 功能:显示文件的前 N 行(默认前 10 行)。
    示例:
    head file.txt  # 显示前 10 行
    head -n 5 file.txt  # 显示前 5 行

tail(显示文件尾部)#

  • 功能:显示文件的后 N 行,或实时监控文件更新(日志常用)。
  • 常用选项
    • -n:指定行数(默认 10 行)。
    • -f:实时跟踪文件新增内容(Ctrl+C 退出)。
  • 示例
    tail /var/log/auth.log  # 显示 auth.log 最后 10 行
    tail -n 20 /var/log/syslog  # 显示最后 20 行
    tail -f /var/log/nginx/access.log  # 实时监控 nginx 访问日志

3.3 搜索匹配:grep#

  • 功能:在文本中搜索匹配指定模式的行(支持正则表达式)。
  • 常用选项
    • -i:忽略大小写。
    • -n:显示匹配行的行号。
    • -r:递归搜索目录下的所有文件。
    • -v:反向匹配(显示不包含模式的行)。
    • --color:高亮显示匹配的关键词。
  • 示例
    grep "error" /var/log/syslog  # 在 syslog 中搜索 "error"
    grep -ir "warning" /etc/  # 递归搜索 /etc 目录下含 "warning" 的文件(忽略大小写)
    grep -n "^root" /etc/passwd  # 显示 /etc/passwd 中以 "root" 开头的行及其行号

3.4 流编辑:sed#

  • 功能:流式文本编辑,支持替换、删除、插入等操作(不修改原文件,除非重定向输出)。
  • 常用语法sed [选项] '操作' 文件
  • 示例
    sed 's/old/new/g' file.txt  # 将 file.txt 中所有 "old" 替换为 "new"(输出到终端,不修改原文件)
    sed -i 's/old/new/g' file.txt  # 直接修改 file.txt(-i 原地替换,建议先备份)
    sed '/^#/d' file.txt  # 删除所有以 "#" 开头的行(注释行)

3.5 数据提取:awk#

  • 功能:按列处理文本,适合结构化数据(如日志、CSV)。
  • 基本语法awk '条件 {动作}' 文件,默认以空格/制表符分隔列,列索引从 $1 开始($0 代表整行)。
  • 示例
    awk '{print $1, $3}' file.txt  # 打印每行第 1 列和第 3 列
    awk -F ',' '{print $2}' data.csv  # 以逗号分隔,打印 CSV 文件的第 2 列
    awk '$3 > 100 {print $0}' scores.txt  # 打印第 3 列(分数)大于 100 的行

4. 系统信息与监控命令#

4.1 系统基本信息#

  • uname -a:显示内核版本、主机名、硬件架构等完整信息。
    示例输出:Linux server 5.4.0-125-generic #141-Ubuntu SMP Wed Aug 31 11:30:15 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
  • hostname:显示或设置主机名。
  • uptime:显示系统运行时间、登录用户数、负载均值(1/5/15 分钟)。
    示例输出:12:34:56 up 2 days, 3h, 2 users, load average: 0.85, 0.92, 0.78(负载均值越低越好,通常建议不超过 CPU 核心数)。

4.2 资源监控#

tophtop(进程监控)#

  • top:实时显示进程资源占用(CPU、内存、PID 等),按 P 按 CPU 排序,M 按内存排序,q 退出。
  • htop(需安装):top 的增强版,支持鼠标操作、颜色显示,更直观。
    安装:apt install htop(Debian/Ubuntu)或 yum install htop(RHEL/CentOS)。

free(内存使用)#

  • 功能:显示内存和交换分区使用情况。
    示例:free -h-h 人类可读格式)。
    输出解读:total(总内存)、used(已用)、free(空闲)、available(可用,含缓存/缓冲区)。

vmstat(虚拟内存统计)#

  • 功能:显示系统内存、进程、IO 等统计信息。
    示例:vmstat 2(每 2 秒刷新一次)。

4.3 磁盘与文件系统#

  • df -h:查看磁盘空间使用情况(已在文件管理部分提及)。
  • iostat:监控磁盘 IO 性能(需安装 sysstat 包)。
    示例:iostat -x 1(每秒显示一次详细 IO 统计)。

5. 进程管理命令#

5.1 进程查看:ps, pstree#

ps(进程状态)#

  • 功能:显示当前进程快照。
  • 常用选项组合
    • ps aux:BSD 风格,显示所有用户进程(a 所有终端,u 显示用户信息,x 无终端进程)。
    • ps -ef:System V 风格,显示进程树(PPID 父进程 ID)。
  • 示例
    ps aux | grep nginx  # 查找所有 nginx 进程
    ps -ef | grep 'python3'  # 查找 python3 进程及其父进程

pstree(进程树)#

  • 功能:以树状图显示进程间关系。
    示例:pstree -p(显示 PID)。

5.2 进程控制:kill, pkill, pgrep#

  • kill [信号] PID:向进程发送信号(默认信号 15/SIGTERM,请求进程退出;信号 9/SIGKILL,强制终止)。
    示例:
    kill 1234  # 发送 SIGTERM 终止 PID 1234 的进程
    kill -9 1234  # 强制终止 PID 1234(慎用,可能导致数据丢失)
  • pgrep 进程名:通过进程名查找 PID。
    示例:pgrep nginx → 输出 nginx 进程的 PID。
  • pkill 进程名:通过进程名终止进程(等效于 kill $(pgrep 进程名))。
    示例:pkill -9 nginx → 强制终止所有 nginx 进程。

5.3 作业控制:jobs, bg, fg#

  • 后台运行:命令后加 &,如 sleep 100 &
  • jobs:查看当前终端的后台作业(编号以 [] 表示,如 [1] Running)。
  • fg %N:将后台作业 N 调至前台(% 可省略,fg 不带参数调最近的作业)。
  • bg %N:将暂停的后台作业 N 恢复运行。
    示例:
    sleep 1000 &  # 后台运行 sleep 1000
    jobs  # 查看作业:[1]+  Running                 sleep 1000 &
    fg 1  # 将作业 1 调至前台(按 Ctrl+Z 可暂停,再用 bg 1 恢复后台运行)

6. 网络管理命令#

6.1 网络诊断:ping, traceroute, mtr#

  • ping 目标IP/域名:测试网络连通性(ICMP 协议)。
    示例:ping -c 4 google.com(发送 4 个 ICMP 包)。
  • traceroute 目标:追踪数据包从本地到目标的路径(显示每一跳的 IP 和延迟)。
    示例:traceroute baidu.com
  • mtr 目标:结合 pingtraceroute,实时显示路径丢包率(需安装)。

6.2 网络配置:ip#

  • 功能:现代网络配置工具,替代已过时的 ifconfig
  • 常用子命令
    • ip addr:查看网卡 IP 地址(ip a 缩写)。
    • ip route:查看路由表(ip r 缩写)。
    • ip link set eth0 up/down:启用/禁用网卡 eth0
  • 示例
    ip a show eth0  # 显示网卡 eth0 的详细信息(IP、MAC 等)
    ip r add default via 192.168.1.1 dev eth0  # 设置默认网关为 192.168.1.1

6.3 连接监控:ss, netstat#

  • ss:查看网络连接状态(比 netstat 更快,推荐使用)。
    示例:ss -tulnt TCP,u UDP,l 监听中,n 数字显示端口)。
  • netstat:传统工具(部分系统需安装 net-tools 包),用法类似 ss
    示例:netstat -tulnpp 显示进程 PID)。

6.4 数据传输:curl, wget, scp#

  • curl URL:发送 HTTP/HTTPS 请求(下载文件、提交表单等)。
    示例:curl -O https://example.com/file.iso(下载文件并保存为原名)。
  • wget URL:专注于文件下载,支持断点续传。
    示例:wget -c https://example.com/largefile.zip(断点续传)。
  • scp:通过 SSH 安全复制文件(远程到本地/本地到远程)。
    示例:
    scp user@remotehost:/path/file.txt /local/path/  # 从远程复制文件到本地
    scp -r /local/dir/ user@remotehost:/remote/path/  # 递归复制目录

7. 用户与权限管理#

7.1 用户/组操作#

  • useradd 用户名:创建用户(需 root 权限)。
    示例:useradd -m -s /bin/bash newuser-m 创建家目录,-s 指定默认 shell)。
  • passwd 用户名:设置用户密码。
    示例:passwd newuser(输入两次密码)。
  • groupadd 组名:创建用户组。
  • usermod -aG 组名 用户名:将用户添加到组(-a 追加,-G 指定附加组)。

7.2 权限修改:chmod, chown, chgrp#

chmod(修改文件权限)#

  • Linux 文件权限分为三类:所有者(u)、所属组(g)、其他用户(o),权限包括读(r=4)、写(w=2)、执行(x=1)。
  • 语法chmod [选项] 权限模式 文件
  • 示例
    chmod u+x script.sh  # 给所有者添加执行权限
    chmod 755 file.txt  # 所有者 rwx (7),组 rx (5),其他 rx (5)
    chmod -R 770 dir/  # 递归修改 dir 目录权限为 u=rwx, g=rwx, o=---

chownchgrp#

  • chown 所有者:所属组 文件:修改文件的所有者和所属组。
    示例:chown user:group file.txt
  • chgrp 组名 文件:仅修改所属组。
    示例:chgrp staff data.csv

7.3 特权管理:sudo, su#

  • su - 用户名:切换到指定用户(- 选项加载目标用户的环境变量)。
    示例:su - root(切换到 root 用户,需输入 root 密码)。
  • sudo 命令:以 root 权限执行单个命令(需用户在 sudoers 文件中,通过 visudo 配置)。
    示例:sudo apt update(以 root 权限更新软件源)。

8. 包管理命令#

Linux 包管理用于安装、更新、卸载软件,不同发行版工具不同:

8.1 Debian/Ubuntu(apt 系列)#

  • 更新软件源sudo apt update
  • 升级已安装包sudo apt upgrade-y 自动确认)。
  • 安装包sudo apt install 包名(如 sudo apt install nginx)。
  • 卸载包sudo apt remove 包名(保留配置文件);sudo apt purge 包名(彻底删除)。
  • 搜索包apt search 关键词

8.2 RHEL/CentOS(yum/dnf#

  • yum(CentOS 7 及以下):
    sudo yum install 包名sudo yum updatesudo yum remove 包名
  • dnf(CentOS 8+,替代 yum):用法与 yum 基本一致,如 sudo dnf install nginx

8.3 Arch Linux(pacman#

  • 同步包数据库sudo pacman -Sy
  • 安装包sudo pacman -S 包名
  • 升级系统sudo pacman -Syu
  • 卸载包sudo pacman -R 包名(保留依赖);sudo pacman -Rs 包名(删除依赖)。

9. 高级命令技巧#

9.1 管道(|)与重定向(>, >>, <#

  • 管道(|:将前一个命令的输出作为后一个命令的输入。
    示例:ls -l | grep ".txt" | wc -l(列出所有 .txt 文件并统计行数)。
  • 重定向
    • >:覆盖输出到文件(如 ls > file.txt)。
    • >>:追加输出到文件(如 echo "new line" >> file.txt)。
    • <:从文件读取输入(如 grep "error" < log.txt,等效于 grep "error" log.txt)。
    • 2>:重定向错误输出(如 command 2> error.log)。

9.2 别名(alias#

  • 功能:为常用命令创建快捷别名,临时生效(终端内)或永久生效(写入 .bashrc)。
    示例:
    alias ll='ls -laht'  # 临时别名:ll 等效于 ls -laht
    echo "alias ll='ls -laht'" >> ~/.bashrc  # 永久生效(需重启终端或 source ~/.bashrc)

9.3 通配符与正则表达式#

  • 通配符(shell 层面匹配文件名):
    • *:匹配任意字符(0 个或多个),如 *.txt 匹配所有 .txt 文件。
    • ?:匹配单个字符,如 file?.log 匹配 file1.logfileA.log 等。
    • []:匹配指定范围,如 file[0-9].log 匹配 file0.logfile9.log
  • 正则表达式(命令层面,如 grep, sed):
    • ^:行开头,$:行结尾,如 ^error 匹配以 "error" 开头的行。
    • .:匹配任意单个字符,*:匹配前一个字符 0 次或多次。

10. 常见问题与最佳实践总结#

  1. 安全操作

    • 避免直接使用 root 用户操作,通过 sudo 执行特权命令。
    • 删除文件前用 ls-i 选项确认,重要文件定期备份。
    • 修改系统配置文件前先备份(如 cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak)。
  2. 效率提升

    • 善用 tab 键自动补全命令/路径(减少输入错误)。
    • history 命令查看历史操作,或按 Ctrl+R 搜索历史命令。
    • 将复杂命令写成脚本(.sh 文件),或设置别名。
  3. 问题排查

    • 命令报错时,先检查选项和参数是否正确(命令 --help)。
    • 网络问题:先 ping 测试连通性,再 traceroute 定位路径故障。
    • 日志文件是排查问题的关键(如 /var/log/syslog, /var/log/auth.log)。

11. 参考资料#

  • 官方文档Linux man-pages(命令手册页)。
  • 在线工具TLDR pages(简化版命令示例)。
  • 书籍:《Linux命令行与Shell脚本编程大全》《鸟哥的Linux私房菜》。
  • 社区:Stack Overflow(搜索具体命令问题)、Linux中国社区。

通过本文的系统梳理,相信你已对 Linux 命令集有了全面认识。命令行的魅力在于「组合」—— 将基础命令通过管道、重定向等技巧串联,可实现复杂功能。建议多动手实践,结合具体场景记忆命令,逐步从「会用」到「精通」。