Ubuntu 的强大之处很大程度上在于其命令行终端。无论是进行文件管理、系统监控、软件安装还是网络配置,命令行都能提供高效精准的控制。下面是一些最常用、最实用的命令及其具体案例:

一、 系统信息与监控

  1. uname -a

    • 功能: 显示详细的系统内核信息(内核版本、硬件架构、主机名等)。
    • 案例: 查看当前运行的内核版本和系统架构。

      $ uname -a
      Linux mypc 5.15.0-86-generic #96-Ubuntu SMP Wed Sep 20 08:23:49 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
      # 输出显示:内核名称(Linux)、主机名(mypc)、内核版本(5.15.0-86-generic)、编译信息、架构(x86_64)、操作系统(GNU/Linux)
  2. uptime

    • 功能: 显示系统运行时间、当前登录用户数以及过去 1、5、15 分钟的系统平均负载。
    • 案例: 快速了解系统已经运行了多久以及负载情况。

      $ uptime
      10:30:45 up 2 days, 15:20,  3 users,  load average: 0.08, 0.03, 0.05
      # 输出表示:当前时间 10:30:45,系统运行了 2天15小时20分钟,有3个用户登录,平均负载(1分钟:0.08, 5分钟:0.03, 15分钟:0.05)
  3. free -h

    • 功能: 显示系统内存(RAM)和交换空间(Swap)的使用情况。-h 参数表示以人类可读的单位(GiB, MiB)显示。
    • 案例: 检查内存和 Swap 的使用量及剩余量。

      $ free -h
                     total        used        free      shared  buff/cache   available
      Mem:            15Gi       4.2Gi       8.3Gi       123Mi       2.5Gi        10Gi
      Swap:           2.0Gi       0B         2.0Gi
      # 输出显示:总内存 15GiB,已用 4.2GiB,空闲 8.3GiB,共享内存 123MiB,缓存/缓冲区 2.5GiB,可用内存约 10GiB。Swap 总空间 2GiB,完全未使用。
  4. df -h

    • 功能: 显示磁盘分区空间使用情况。-h 参数表示以人类可读的单位显示。
    • 案例: 查看各个挂载点(如 /, /home)的磁盘使用情况。

      $ df -h
      Filesystem      Size  Used Avail Use% Mounted on
      /dev/nvme0n1p2  234G   87G  136G  40% /
      /dev/nvme0n1p1  511M  6.1M  505M   2% /boot/efi
      tmpfs           1.6G   20K  1.6G   1% /run/user/1000
      # 输出显示:根分区 `/` 总大小 234GB,已用 87GB,可用 136GB,使用率 40%;EFI 引导分区使用率很低。
  5. top / htop

    • 功能: 动态、实时显示系统中各个进程的资源占用情况(CPU、内存等)。htoptop 的增强版,界面更友好,支持鼠标操作(通常需要先安装:sudo apt install htop)。
    • 案例: 实时监控系统资源占用,找出消耗 CPU 或内存最多的进程。

      • 运行 tophtop 后,按 q 退出。
      • top 中按 P (大写) 按 CPU 使用率排序,按 M 按内存使用率排序。
      • htop 界面更直观,直接用鼠标点击表头排序。

二、 文件与目录操作

  1. ls

    • 功能: 列出目录内容。
    • 常用选项:

      • -l: 长格式显示(详细信息:权限、所有者、大小、修改时间)。
      • -a: 显示所有文件(包括隐藏文件,以 . 开头的文件)。
      • -h: 与 -l 一起使用,以人类可读格式显示文件大小(如 K, M, G)。
    • 案例:

      $ ls -l /home/user/Documents  # 列出 Documents 目录的详细内容
      $ ls -la ~                   # 列出当前用户家目录(~)的所有文件(包括隐藏文件)的详细信息
      $ ls -lh Downloads/*.pdf     # 列出 Downloads 目录下所有 PDF 文件,并以易读格式显示大小
  2. cd

    • 功能: 切换当前工作目录。
    • 特殊符号:

      • ~$HOME: 当前用户的家目录 (如 /home/yourusername)。
      • ..: 上一级目录。
      • .: 当前目录。
    • 案例:

      $ cd /var/log          # 切换到 /var/log 目录
      $ cd ~                 # 切换到当前用户的家目录
      $ cd ..                # 切换到上一级目录
      $ cd Documents/Reports # 切换到当前目录下的 Documents/Reports 子目录
      $ cd -                 # 切换到上一次所在的目录
  3. pwd

    • 功能: 打印当前工作目录的绝对路径。
    • 案例: 当你忘记自己当前在哪个目录时。

      $ pwd
      /home/user/Projects/website
  4. mkdir

    • 功能: 创建新目录。
    • 常用选项: -p: 递归创建目录(如果父目录不存在,则一并创建)。
    • 案例:

      $ mkdir new_folder            # 在当前目录创建名为 new_folder 的文件夹
      $ mkdir -p project/src/utils  # 创建嵌套目录结构 project/src/utils,即使 project 和 src 目录不存在也会创建
  5. cp

    • 功能: 复制文件或目录。
    • 常用选项:

      • -r-R: 递归复制目录及其内容。
      • -i: 覆盖前提示确认。
      • -v: 显示复制过程(Verbose)。
    • 案例:

      $ cp file.txt file_backup.txt       # 复制 file.txt 为 file_backup.txt
      $ cp -r old_dir/ new_dir/           # 递归复制整个 old_dir 目录到 new_dir
      $ cp -iv *.jpg /media/backup/photos # 复制当前目录所有 JPG 文件到备份目录,覆盖前提示并显示过程
  6. mv

    • 功能: 移动文件或目录,也可用于重命名。
    • 常用选项: -i (覆盖前提示), -v (显示过程)。
    • 案例:

      $ mv old_name.txt new_name.txt       # 将 old_name.txt 重命名为 new_name.txt (在同一目录下)
      $ mv report.doc ~/Documents/         # 将 report.doc 移动到 Documents 目录
      $ mv -i data/ /media/external_drive/ # 将 data 目录移动到外部硬盘,覆盖前提示
  7. rm

    • 功能: 删除文件或目录。极其危险! 删除后通常无法恢复。
    • 常用选项:

      • -r-R: 递归删除目录及其内容。
      • -f: 强制删除,不提示确认。
      • -i: 删除前提示确认(推荐!)。
    • 案例 (谨慎使用!):

      $ rm temporary.log             # 删除单个文件 temporary.log (系统可能提示确认)
      $ rm -i *.tmp                 # 删除所有 .tmp 文件,每个删除前都提示确认
      $ rm -rf old_build/           # **强制递归删除** old_build 目录及其所有内容,**无任何提示!(非常危险!)** 只在绝对确定时使用!
    • 重要警告: rm -rf /rm -rf /*删除整个系统!永远不要执行!使用 -i-v 增加安全性。
  8. cat

    • 功能: 连接文件内容并打印到标准输出(屏幕)。常用于查看较短文件内容、创建小文件、合并文件。
    • 案例:

      $ cat config.txt        # 在屏幕上显示 config.txt 的完整内容
      $ cat file1.txt file2.txt > combined.txt # 将 file1 和 file2 的内容合并输出到 combined.txt
      $ cat > newfile.txt     # 从键盘输入创建新文件 (输入完成后按 Ctrl+D 结束)
      This is line one.
      This is line two.
      ^D
  9. less / more

    • 功能: 分页查看文件内容(适用于长文件)。lessmore 功能更强大(可上下翻页、搜索等),是更现代的选择。
    • 案例:

      $ less /var/log/syslog  # 分页查看系统日志
      # 在 less 中:空格键向下翻页,'b' 向上翻页,'/' 后跟关键词搜索 (n 下一个匹配项),'q' 退出。
  10. head / tail

    • 功能: 查看文件的开头 (head) 或结尾 (tail) 部分内容。
    • 常用选项: -n :指定显示的行数。
    • 案例:

      $ head -n 10 large_file.csv # 显示 large_file.csv 的前 10 行
      $ tail -n 20 server.log     # 显示 server.log 的最后 20 行
      $ tail -f /var/log/apache2/access.log # **实时追踪**访问日志的新增内容 (非常有用!按 Ctrl+C 停止)
  11. grep

    • 功能: 强大的文本搜索工具,使用正则表达式在文件或输入流中查找匹配的行。
    • 常用选项:

      • -i: 忽略大小写。
      • -r-R: 递归搜索目录中的文件。
      • -n: 显示匹配行所在的行号。
      • -v: 显示匹配的行(反向选择)。
      • -E: 使用扩展正则表达式 (或直接使用 egrep)。
    • 案例:

      $ grep "error" app.log          # 在 app.log 中查找包含 "error" 的行 (区分大小写)
      $ grep -i "warning" system.log  # 在 system.log 中查找包含 "warning" 或 "WARNING" 的行
      $ grep -rn "TODO" src/          # 在 src 目录下所有文件中递归搜索 "TODO",并显示行号
      $ ps aux | grep firefox         # 在进程列表 (`ps aux` 输出) 中查找包含 "firefox" 的行
      $ grep -v "#" config.ini        # 显示 config.ini 中所有**不是注释行** (不以 # 开头) 的行

      三、 文件权限与所有权

  12. chmod

    • 功能: 改变文件或目录的访问权限。
    • 权限表示:

      • 符号模式:u (user/所有者), g (group/组), o (others/其他), a (all/所有); + (添加), - (移除), = (设置); r (读), w (写), x (执行)。
      • 数字模式 (八进制):4(读), 2(写), 1(执行)。将所有者(u)、组(g)、其他(o)的权限值相加。如 755:u=rwx(7), g=rx(5), o=rx(5)。
    • 案例:

      $ chmod u+x script.sh        # 给所有者添加执行权限 (使 script.sh 可执行)
      $ chmod go-w shared_file.txt # 移除组和其他用户的写权限
      $ chmod 644 config.conf      # 设置权限:所有者读写(rw-), 组只读(r--), 其他只读(r--) => rw-r--r--
      $ chmod -R 755 public_html/  # 递归设置 public_html 目录及其下所有文件的权限为 755 (rwxr-xr-x)
  13. chown

    • 功能: 改变文件或目录的所有者和/或所属组。通常需要 sudo
    • 语法: chown [新所有者][:[新组]] 文件/目录
    • 案例:

      $ sudo chown www-data:www-data /var/www/html/index.html # 将文件所有者和组都改为 www-data (常用于 Web 服务器文件)
      $ sudo chown -R user:developers project/               # 递归将 project 目录及其下所有内容的所有者改为 user,组改为 developers
      $ sudo chown :backup /data/archive.tar.gz              # 只改变文件所属组为 backup (所有者不变)
  14. sudo

    • 功能: 以超级用户(root)或其他用户的权限执行命令。用于执行需要管理员权限的操作。
    • 案例:

      $ sudo apt update             # 以 root 权限更新软件包列表 (需要输入当前用户密码)
      $ sudo nano /etc/hosts        # 以 root 权限编辑系统 hosts 文件
      $ sudo -u postgres psql       # 切换到 postgres 用户并运行 psql 命令

      四、 软件包管理

  15. sudo apt update

    • 功能: 从配置的软件源(仓库)下载最新的软件包列表信息。在安装或升级任何软件之前,都应该先运行此命令。
    • 案例:

      $ sudo apt update
  16. sudo apt upgrade

    • 功能: 根据 apt update 获取的列表信息,升级所有可升级的已安装软件包到最新版本。
    • 案例:

      $ sudo apt upgrade
  17. sudo apt install

    • 功能: 安装指定的软件包及其依赖项。
    • 案例:

      $ sudo apt install htop         # 安装 htop (增强版进程查看器)
      $ sudo apt install nginx php-fpm # 同时安装 nginx 和 php-fpm
  18. sudo apt remove

    • 功能: 卸载指定的软件包,但保留其配置文件
    • 案例:

      $ sudo apt remove libreoffice-* # 卸载所有 LibreOffice 包 (保留配置文件)
  19. sudo apt purge

    • 功能: 卸载指定的软件包并删除其配置文件
    • 案例:

      $ sudo apt purge apache2        # 彻底卸载 apache2 并删除其配置文件
  20. sudo apt autoremove

    • 功能: 自动删除那些作为其他软件包的依赖被安装,但现在已不再被任何已安装软件包所需要的“孤儿”软件包。通常在 apt removeapt purge 之后运行来清理。
    • 案例:

      $ sudo apt remove some-package
      $ sudo apt autoremove          # 清理不再需要的依赖项
  21. apt search

    • 功能: 在软件仓库中搜索包含指定关键词的软件包(名称或描述)。
    • 案例:

      $ apt search text editor # 搜索名称或描述中包含 "text editor" 的软件包
  22. apt show

    • 功能: 显示指定软件包的详细信息(版本、依赖、描述、大小等)。
    • 案例:

      $ apt show firefox

      五、 网络相关

  23. ping

    • 功能: 测试与另一台网络主机(通过 IP 地址或域名)的连通性。发送 ICMP 回显请求包并等待回复。
    • 常用选项: -c :指定发送多少个包后停止(默认会一直发送,按 Ctrl+C 停止)。
    • 案例:

      $ ping -c 4 google.com  # 向 google.com 发送 4 个 ping 包,测试连通性和延迟
  24. ip a (或较旧的 ifconfig)

    • 功能: 显示和配置网络接口信息(IP 地址、MAC 地址、状态等)。ip 命令是现代首选,功能更强大。ifconfig 可能默认未安装。
    • 案例:

      $ ip a                     # 列出所有网络接口及其详细信息
      # 输出会显示接口名 (如 eth0, enp0s3, wlan0)、状态 (UP/DOWN)、MAC 地址 (link/ether)、IPv4/IPv6 地址 (inet/inet6) 等。
  25. ss -tuln (或较旧的 netstat -tuln)

    • 功能: 查看网络连接、路由表、接口统计等信息。ssnetstat 的更快速替代品。-tuln 组合常用:

      • -t: 显示 TCP 连接。
      • -u: 显示 UDP 连接。
      • -l: 仅显示监听 (LISTEN) 状态的套接字。
      • -n: 以数字形式显示地址和端口号(不尝试解析主机名和服务名)。
    • 案例:

      $ ss -tuln
      # 输出列出所有处于监听状态的 TCP 和 UDP 端口,以及它们绑定的 IP 地址和端口号。用于检查哪些服务在监听。
  26. ssh

    • 功能: 安全地登录到远程主机或在其上执行命令。
    • 案例:

      $ ssh user@remote.server.com   # 以 user 用户身份登录到 remote.server.com (默认使用端口 22)
      $ ssh -p 2222 admin@backup.example.org # 使用端口 2222 连接到 backup.example.org 的 admin 用户

      六、 进程管理

  27. ps

    • 功能: 显示当前进程的快照。
    • 常用组合: ps aux (BSD 风格) 或 ps -ef (标准 Unix 风格) 查看系统上运行的所有进程的详细信息。
    • 案例:

      $ ps aux | less           # 查看所有进程的详细信息,分页显示
      $ ps -ef | grep nginx     # 查找与 nginx 相关的进程
  28. kill

    • 功能: 向指定进程发送信号以终止或控制它。默认发送 TERM (15) 信号(请求终止)。
    • 常用信号:

      • TERM (15): 默认,请求进程正常终止。
      • KILL (9): 强制立即终止进程(进程无法捕获或忽略)。仅在 TERM 无效时使用,可能导致数据丢失。
    • 案例:

      $ kill 1234               # 请求 PID 为 1234 的进程正常终止 (发送 TERM 信号)
      $ kill -9 5678            # **强制杀死** PID 为 5678 的进程 (发送 KILL 信号)
  29. killall

    • 功能: 根据进程名称向所有匹配的进程发送信号(默认也是 TERM)。
    • 案例:

      $ killall firefox         # 请求所有名为 "firefox" 的进程正常终止
      $ killall -9 mysqld       # 强制杀死所有名为 "mysqld" 的进程
  30. bg / fg / jobs

    • 功能: 管理后台 (bg) 和前台 (fg) 作业(Job)。jobs 列出当前 shell 中的后台作业。
    • 案例:

      $ long_running_command    # 启动一个耗时命令
      ^Z                        # 按下 Ctrl+Z 暂停该命令并将其放入后台 (状态为 Stopped)
      $ jobs                    # 查看作业列表,会看到 [1]  Stopped  long_running_command
      $ bg %1                   # 让作业编号 1 在后台继续运行 (状态变为 Running)
      $ fg %1                   # 将作业编号 1 调回前台运行

      七、 查找文件

  31. find

    • 功能: 在目录树中递归搜索文件和目录,功能极其强大,支持按名称、类型、大小、时间、权限等多种条件查找。
    • 基本语法: find [路径] [表达式]
    • 常用表达式:

      • -name :按文件名搜索(支持通配符 * ?)。
      • -type :按类型搜索(f 普通文件, d 目录, l 符号链接)。
      • -size [+|-]:按文件大小搜索(如 +10M 大于 10MB, -1G 小于 1GB)。
      • -mtime :按修改时间搜索(天数,如 +7 超过 7 天前修改,-1 1 天内修改)。
      • -exec {} +:对找到的文件执行命令 ({} 代表找到的文件,;+ 表示命令结束)。
    • 案例:

      $ find /home -name "*.bak"        # 在 /home 目录下递归查找所有扩展名为 .bak 的文件
      $ find . -type f -size +5M        # 在当前目录(.)及其子目录下查找大于 5MB 的普通文件
      $ find /var/log -name "*.log" -mtime +30 -exec rm {} \; # 删除 /var/log 下所有超过 30 天未修改的 .log 文件 (谨慎!)
      $ find ~ -empty -type d           # 在当前用户家目录(~)下查找所有空目录
  32. locate

    • 功能: 在预构建的文件名数据库 (updatedb 生成) 中快速查找文件。速度极快,但数据库可能不是实时更新(通常每天自动更新一次)。
    • 案例:

      $ locate sshd_config       # 快速查找所有名为 sshd_config 的文件路径
      $ sudo updatedb            # 手动更新 locate 数据库 (如果刚创建了文件但 locate 不到)

      八、 其他实用命令

  33. history

    • 功能: 显示之前执行过的命令历史列表。可以使用 ! 重新执行历史命令(如 !55 执行第 55 条历史命令,!! 执行上一条命令)。
    • 案例:

      $ history | grep apt       # 查找历史记录中所有包含 "apt" 的命令
      $ !!                       # 重新执行上一条命令
  34. man

    • 功能: 查看命令、函数或配置文件的手册页 (Manual Page)。最权威的文档!
    • 案例:

      $ man ls                   # 查看 ls 命令的详细手册
      $ man 5 passwd             # 查看 passwd 文件格式的手册页 (Section 5 是关于文件格式的)
      $ man -k "copy file"       # 在手册描述中搜索关键词 "copy file" (等价于 `apropos`)
  35. tar

    • 功能: 打包、压缩和解压文件(常用于 .tar.gz, .tar.bz2, .tar.xz 文件)。
    • 常用组合:

      • 创建压缩包: tar -czvf .tar.gz (gzip) / tar -cjvf .tar.bz2 (bzip2) / tar -cJvf .tar.xz (xz)
      • 解压缩包: tar -xzvf .tar.gz / tar -xjvf .tar.bz2 / tar -xJvf .tar.xz
    • 参数解释:

      • -c: 创建新的归档文件。
      • -x: 从归档文件中提取文件。
      • -z: 使用 gzip 压缩/解压 (配合 .gz)。
      • -j: 使用 bzip2 压缩/解压 (配合 .bz2)。
      • -J: 使用 xz 压缩/解压 (配合 .xz)。
      • -v: 显示处理过程中的详细信息 (Verbose)。
      • -f :指定归档文件名 (这个参数后面必须紧跟文件名)。
    • 案例:

      $ tar -czvf backup.tar.gz Documents/ Pictures/ # 将 Documents 和 Pictures 目录打包并用 gzip 压缩成 backup.tar.gz
      $ tar -xzvf downloaded.tar.gz -C /opt/        # 解压 downloaded.tar.gz 到 /opt 目录 (-C 指定目标目录)

      温馨提示

  36. 谨慎使用 rmsudo 尤其小心 rm -rfsudo rm -rf,误删系统文件可能导致灾难性后果。执行前务必确认路径。
  37. 善用 man 遇到不熟悉的命令或选项,第一时间 man 查看手册,这是最权威的学习资料。
  38. 善用 --help 大多数命令支持 --help-h 选项,会输出该命令的简要用法帮助。
  39. Tab 键补全: 在终端中输入命令、路径或文件名时,按 Tab 键可以自动补全,提高效率并减少拼写错误。
  40. 历史命令: 使用方向键 ↑ ↓ 浏览历史命令,history 查看列表,! 重新执行。
  41. 通配符: * (匹配任意数量字符), ? (匹配单个字符), [abc] (匹配 a、b 或 c 中的任意一个) 在文件操作 (ls, cp, mv, rm) 和 find 中非常有用。

掌握这些命令是有效使用 Ubuntu 命令行界面的基础。随着实践,你会发现命令行在效率和控制力上的巨大优势。不断练习和探索吧!

发表评论