Ubuntu 的强大之处很大程度上在于其命令行终端。无论是进行文件管理、系统监控、软件安装还是网络配置,命令行都能提供高效精准的控制。下面是一些最常用、最实用的命令及其具体案例:
一、 系统信息与监控
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)
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)
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,完全未使用。
- 功能: 显示系统内存(RAM)和交换空间(Swap)的使用情况。
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 引导分区使用率很低。
- 功能: 显示磁盘分区空间使用情况。
top
/htop
- 功能: 动态、实时显示系统中各个进程的资源占用情况(CPU、内存等)。
htop
是top
的增强版,界面更友好,支持鼠标操作(通常需要先安装:sudo apt install htop
)。 案例: 实时监控系统资源占用,找出消耗 CPU 或内存最多的进程。
- 运行
top
或htop
后,按q
退出。 - 在
top
中按P
(大写) 按 CPU 使用率排序,按M
按内存使用率排序。 htop
界面更直观,直接用鼠标点击表头排序。
- 运行
- 功能: 动态、实时显示系统中各个进程的资源占用情况(CPU、内存等)。
二、 文件与目录操作
ls
- 功能: 列出目录内容。
常用选项:
-l
: 长格式显示(详细信息:权限、所有者、大小、修改时间)。-a
: 显示所有文件(包括隐藏文件,以.
开头的文件)。-h
: 与-l
一起使用,以人类可读格式显示文件大小(如 K, M, G)。
案例:
$ ls -l /home/user/Documents # 列出 Documents 目录的详细内容 $ ls -la ~ # 列出当前用户家目录(~)的所有文件(包括隐藏文件)的详细信息 $ ls -lh Downloads/*.pdf # 列出 Downloads 目录下所有 PDF 文件,并以易读格式显示大小
cd
- 功能: 切换当前工作目录。
特殊符号:
~
或$HOME
: 当前用户的家目录 (如/home/yourusername
)。..
: 上一级目录。.
: 当前目录。
案例:
$ cd /var/log # 切换到 /var/log 目录 $ cd ~ # 切换到当前用户的家目录 $ cd .. # 切换到上一级目录 $ cd Documents/Reports # 切换到当前目录下的 Documents/Reports 子目录 $ cd - # 切换到上一次所在的目录
pwd
- 功能: 打印当前工作目录的绝对路径。
案例: 当你忘记自己当前在哪个目录时。
$ pwd /home/user/Projects/website
mkdir
- 功能: 创建新目录。
- 常用选项:
-p
: 递归创建目录(如果父目录不存在,则一并创建)。 案例:
$ mkdir new_folder # 在当前目录创建名为 new_folder 的文件夹 $ mkdir -p project/src/utils # 创建嵌套目录结构 project/src/utils,即使 project 和 src 目录不存在也会创建
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 文件到备份目录,覆盖前提示并显示过程
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 目录移动到外部硬盘,覆盖前提示
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
增加安全性。
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
less
/more
- 功能: 分页查看文件内容(适用于长文件)。
less
比more
功能更强大(可上下翻页、搜索等),是更现代的选择。 案例:
$ less /var/log/syslog # 分页查看系统日志 # 在 less 中:空格键向下翻页,'b' 向上翻页,'/' 后跟关键词搜索 (n 下一个匹配项),'q' 退出。
- 功能: 分页查看文件内容(适用于长文件)。
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 停止)
- 功能: 查看文件的开头 (
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 中所有**不是注释行** (不以 # 开头) 的行
三、 文件权限与所有权
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)
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 (所有者不变)
- 功能: 改变文件或目录的所有者和/或所属组。通常需要
sudo
- 功能: 以超级用户(root)或其他用户的权限执行命令。用于执行需要管理员权限的操作。
案例:
$ sudo apt update # 以 root 权限更新软件包列表 (需要输入当前用户密码) $ sudo nano /etc/hosts # 以 root 权限编辑系统 hosts 文件 $ sudo -u postgres psql # 切换到 postgres 用户并运行 psql 命令
四、 软件包管理
sudo apt update
- 功能: 从配置的软件源(仓库)下载最新的软件包列表信息。在安装或升级任何软件之前,都应该先运行此命令。
案例:
$ sudo apt update
sudo apt upgrade
- 功能: 根据
apt update
获取的列表信息,升级所有可升级的已安装软件包到最新版本。 案例:
$ sudo apt upgrade
- 功能: 根据
sudo apt install
- 功能: 安装指定的软件包及其依赖项。
案例:
$ sudo apt install htop # 安装 htop (增强版进程查看器) $ sudo apt install nginx php-fpm # 同时安装 nginx 和 php-fpm
sudo apt remove
- 功能: 卸载指定的软件包,但保留其配置文件。
案例:
$ sudo apt remove libreoffice-* # 卸载所有 LibreOffice 包 (保留配置文件)
sudo apt purge
- 功能: 卸载指定的软件包并删除其配置文件。
案例:
$ sudo apt purge apache2 # 彻底卸载 apache2 并删除其配置文件
sudo apt autoremove
- 功能: 自动删除那些作为其他软件包的依赖被安装,但现在已不再被任何已安装软件包所需要的“孤儿”软件包。通常在
apt remove
或apt purge
之后运行来清理。 案例:
$ sudo apt remove some-package $ sudo apt autoremove # 清理不再需要的依赖项
- 功能: 自动删除那些作为其他软件包的依赖被安装,但现在已不再被任何已安装软件包所需要的“孤儿”软件包。通常在
apt search
- 功能: 在软件仓库中搜索包含指定关键词的软件包(名称或描述)。
案例:
$ apt search text editor # 搜索名称或描述中包含 "text editor" 的软件包
apt show
- 功能: 显示指定软件包的详细信息(版本、依赖、描述、大小等)。
案例:
$ apt show firefox
五、 网络相关
ping
- 功能: 测试与另一台网络主机(通过 IP 地址或域名)的连通性。发送 ICMP 回显请求包并等待回复。
- 常用选项:
-c
:指定发送多少个包后停止(默认会一直发送,按Ctrl+C
停止)。 案例:
$ ping -c 4 google.com # 向 google.com 发送 4 个 ping 包,测试连通性和延迟
ip a
(或较旧的ifconfig
)- 功能: 显示和配置网络接口信息(IP 地址、MAC 地址、状态等)。
ip
命令是现代首选,功能更强大。ifconfig
可能默认未安装。 案例:
$ ip a # 列出所有网络接口及其详细信息 # 输出会显示接口名 (如 eth0, enp0s3, wlan0)、状态 (UP/DOWN)、MAC 地址 (link/ether)、IPv4/IPv6 地址 (inet/inet6) 等。
- 功能: 显示和配置网络接口信息(IP 地址、MAC 地址、状态等)。
ss -tuln
(或较旧的netstat -tuln
)功能: 查看网络连接、路由表、接口统计等信息。
ss
是netstat
的更快速替代品。-tuln
组合常用:-t
: 显示 TCP 连接。-u
: 显示 UDP 连接。-l
: 仅显示监听 (LISTEN) 状态的套接字。-n
: 以数字形式显示地址和端口号(不尝试解析主机名和服务名)。
案例:
$ ss -tuln # 输出列出所有处于监听状态的 TCP 和 UDP 端口,以及它们绑定的 IP 地址和端口号。用于检查哪些服务在监听。
ssh
- 功能: 安全地登录到远程主机或在其上执行命令。
案例:
$ ssh user@remote.server.com # 以 user 用户身份登录到 remote.server.com (默认使用端口 22) $ ssh -p 2222 admin@backup.example.org # 使用端口 2222 连接到 backup.example.org 的 admin 用户
六、 进程管理
ps
- 功能: 显示当前进程的快照。
- 常用组合:
ps aux
(BSD 风格) 或ps -ef
(标准 Unix 风格) 查看系统上运行的所有进程的详细信息。 案例:
$ ps aux | less # 查看所有进程的详细信息,分页显示 $ ps -ef | grep nginx # 查找与 nginx 相关的进程
kill
- 功能: 向指定进程发送信号以终止或控制它。默认发送
TERM
(15) 信号(请求终止)。 常用信号:
TERM
(15): 默认,请求进程正常终止。KILL
(9): 强制立即终止进程(进程无法捕获或忽略)。仅在TERM
无效时使用,可能导致数据丢失。
案例:
$ kill 1234 # 请求 PID 为 1234 的进程正常终止 (发送 TERM 信号) $ kill -9 5678 # **强制杀死** PID 为 5678 的进程 (发送 KILL 信号)
- 功能: 向指定进程发送信号以终止或控制它。默认发送
killall
- 功能: 根据进程名称向所有匹配的进程发送信号(默认也是
TERM
)。 案例:
$ killall firefox # 请求所有名为 "firefox" 的进程正常终止 $ killall -9 mysqld # 强制杀死所有名为 "mysqld" 的进程
- 功能: 根据进程名称向所有匹配的进程发送信号(默认也是
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 调回前台运行
七、 查找文件
- 功能: 管理后台 (
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 # 在当前用户家目录(~)下查找所有空目录
locate
- 功能: 在预构建的文件名数据库 (
updatedb
生成) 中快速查找文件。速度极快,但数据库可能不是实时更新(通常每天自动更新一次)。 案例:
$ locate sshd_config # 快速查找所有名为 sshd_config 的文件路径 $ sudo updatedb # 手动更新 locate 数据库 (如果刚创建了文件但 locate 不到)
八、 其他实用命令
- 功能: 在预构建的文件名数据库 (
history
- 功能: 显示之前执行过的命令历史列表。可以使用
!
重新执行历史命令(如!55
执行第 55 条历史命令,!!
执行上一条命令)。 案例:
$ history | grep apt # 查找历史记录中所有包含 "apt" 的命令 $ !! # 重新执行上一条命令
- 功能: 显示之前执行过的命令历史列表。可以使用
man
- 功能: 查看命令、函数或配置文件的手册页 (Manual Page)。最权威的文档!
案例:
$ man ls # 查看 ls 命令的详细手册 $ man 5 passwd # 查看 passwd 文件格式的手册页 (Section 5 是关于文件格式的) $ man -k "copy file" # 在手册描述中搜索关键词 "copy file" (等价于 `apropos`)
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 指定目标目录)
温馨提示
- 功能: 打包、压缩和解压文件(常用于
- 谨慎使用
rm
和sudo
: 尤其小心rm -rf
和sudo rm -rf
,误删系统文件可能导致灾难性后果。执行前务必确认路径。 - 善用
man
: 遇到不熟悉的命令或选项,第一时间man
查看手册,这是最权威的学习资料。 - 善用
--help
: 大多数命令支持--help
或-h
选项,会输出该命令的简要用法帮助。 - Tab 键补全: 在终端中输入命令、路径或文件名时,按
Tab
键可以自动补全,提高效率并减少拼写错误。 - 历史命令: 使用方向键 ↑ ↓ 浏览历史命令,
history
查看列表,!
重新执行。 - 通配符:
*
(匹配任意数量字符),?
(匹配单个字符),[abc]
(匹配 a、b 或 c 中的任意一个) 在文件操作 (ls
,cp
,mv
,rm
) 和find
中非常有用。
掌握这些命令是有效使用 Ubuntu 命令行界面的基础。随着实践,你会发现命令行在效率和控制力上的巨大优势。不断练习和探索吧!