第四章 · Ubuntu 常用命令
ROS 2 的几乎所有操作都在终端里完成:ros2 run、colcon build、看日志、改配置,绕不开文件、权限和进程。这一章把两篇命令笔记合并到一起,按「文件与目录 → 文本与权限 → 进程与系统」的顺序过一遍,最后附一张小抄。不用背,先知道有这个东西,用的时候回来查。
4.1 打开终端
第一件事是学会打开终端。常用的方式有两种:
- 快捷键
Ctrl + Alt + T - 在文件夹里右键,选择 Open in Terminal
之后的命令都在这个终端窗口里敲。
4.2 文件与目录
日常操作里最常见的就是这几件事:看目录里有什么、切换目录、确认自己在哪、建 / 删 / 复制 / 移动文件,以及查看文件内容。
4.2.1 ls:列出目录内容
ls 是 list 的缩写。它不仅能查看目录里包含哪些文件,还能看到文件权限(包括目录、文件夹、文件权限)和目录信息。
ls -a # 列出目录所有文件,包含以 . 开头的隐藏文件
ls -A # 列出除 . 及 .. 以外的其它文件
ls -r # 反序排列
ls -t # 以文件修改时间排序
ls -S # 以文件大小排序
ls -h # 以易读大小显示
ls -l # 列出文件的权限、所有者、文件大小等详细信息实例:
# 按易读方式、按时间反序排序,并显示文件详细信息
ls -lhrt
# 按大小反序显示文件详细信息
ls -lrS
# 列出当前目录中所有以 "t" 开头的目录的详细内容
ls -l t*
# 列出文件绝对路径(不包含隐藏文件)
ls | sed "s:^:`pwd`/:"
# 列出文件绝对路径(包含隐藏文件)
find $pwd -maxdepth 1 | xargs ls -ld
4.2.2 cd:切换目录
cd(changeDirectory)用于切换当前目录,语法是 cd [目录名]。
# 进入根目录
cd /
# 进入 home 目录
cd ~
# 进入上一次工作路径
cd -
# 把上一个命令的参数作为 cd 的参数
cd !$
4.2.3 pwd:我在哪
pwd 用于查看当前工作目录路径,是初学者最常用来确认“我现在在哪”的命令。
# 查看当前路径
pwd
# 查看软链接的实际路径
pwd -P
4.2.4 mkdir:创建文件夹
mkdir 用于创建文件夹。-m 对新建目录设置存取权限;-p 在路径中某些目录尚不存在时自动建立(一次建多级)。
# 当前工作目录下创建名为 t 的文件夹
mkdir t
# 在 tmp 下创建 path test/t1/t,若目录不存在则一并建立
mkdir -p /tmp/test/t1/t4.2.5 rm:删除
删除一个或多个文件或目录。如果不加 -r 选项,rm 不会删除目录;删除文件通常仍可以恢复,但删除目录需谨慎。常用参数:-i 删除前逐一询问确认、-r 递归删除(连同子目录一起删除)、-f 强制删除不提示。
# 删除任何 .log 文件,删除前逐一询问
rm -i *.log
# 删除 test 子目录及其中所有内容,不一一确认
rm -rf test
# 删除以 - 开头的文件(用 -- 结束选项)
rm -- -f*4.2.6 cp:复制
将源文件复制到目标文件,或将多个源文件复制到目标目录。常用参数:-i 目标文件已存在时提示是否覆盖、-r 复制目录及目录内所有内容、-a 保持原文件的时间等属性、-s 建立符号链接(快捷方式)。
# 复制 a.txt 到 test 目录,保持时间,存在则提示
cp -ai a.txt test
# 为 a.txt 建立一个链接(快捷方式)
cp -s a.txt link_a.txt4.2.7 mv:移动 / 改名
移动文件,或修改文件/目录名。当第二个参数是目录时,将第一个参数(可以是多个)移动到该目录。常用参数:-i 目标已存在时提示是否覆盖。
# 将文件 test.log 改名为 test1.txt
mv test.log test1.txt
# 把多个文件移动到根的 test3 目录
mv log1.txt log2.txt log3.txt /test3
# 移动当前目录下所有文件到上一级目录
mv * ../4.2.8 cat:看文件内容
cat 主要有三大功能:一次显示整个文件;从键盘创建一个新文件;将几个文件合并成一个文件。常用参数:-b 对非空输出行号、-n 输出所有行号。
# 一次显示整个文件
cat filename
# 从键盘创建一个文件(只能新建,不能编辑已有文件)
cat > filename
# 给 log2012.log、log2013.log 加行号后输出
cat -n log2012.log log2013.log
# 反向列示文件(与 cat 相反)
tac log.txt4.2.9 more:一页一页看
功能类似于 cat,但会一页一页显示,方便逐页阅读。按空格键往下翻一页,按 b 键往回翻一页,按 q 键退出。常用参数:+n 从第 n 行开始显示、-n 定义屏幕大小为 n 行、-s 把连续多个空行显示为一行。
# 显示文件中从第 3 行起的内容
more +3 text.txt
# 借助管道让 ls -l 每次只显示 5 行
ls -l | more -54.2.10 less:随意前后翻
less 与 more 类似,但可以随意前后浏览文件(more 只能向前);而且 less 在查看之前不会加载整个文件,更适合大文件。
浏览时的操作:
/字符串 向下搜索字符串
?字符串 向上搜索字符串
n 重复前一个搜索
N 反向重复前一个搜索
空格 滚动一页
b 向后翻一页
-q 退出# 查看进程信息并通过 less 分页显示(带行号)
ps -aux | less -N
# 查看多个文件(按 n 下一个,p 前一个)
less 1.log 2.log4.2.11 head:看开头
显示文件的开头内容,默认显示前 10 行。常用参数:-n <行数> 显示的行数、-c <字节数> 显示前多少个字节。
# 显示 1.log 文件中前 20 行
head 1.log -n 20
# 显示最后 10 行(行数为负数表示从后往前数)
head -n -10 t.log4.2.12 tail:看结尾
显示文件末尾内容,常用来查看日志文件。常用参数:-f 循环读取(适合查看动态增加的日志)、-n <行数> 显示行数(从后往前)。
# 循环读取逐渐增加的文件内容
tail -f ping.log4.2.13 查找文件:which / whereis / locate / find
这四个命令都能用来找文件,但原理和适用场景各不相同:
- which:在
PATH中查找可执行命令的位置,返回第一个匹配结果。 - whereis:只搜索程序名相关的二进制、帮助和源码文件,速度快。
- locate:基于系统数据库查找文件,速度很快,但新建文件可能找不到。
- find:实际遍历硬盘查找文件,最准确但最慢。
# 查看 ls 命令是否存在及其位置
which ls
# 查找 locate 程序的相关文件
whereis locate
# 查找与 pwd 相关的所有文件
locate pwd
# 在当前目录查找以 .log 结尾的文件
find ./ -name '*.log'
# 查找 /opt 目录下权限为 777 的文件
find /opt -perm 777
# 查找更改时间在 10 日以前的文件并删除(无提示)
find . -type f -mtime +10 -exec rm -f {} \;4.2.14 ln:建立链接
为文件在另一个位置建立一个链接。软链接(ln -s)类似于 Windows 里的快捷方式,可跨文件系统、可用于目录;硬链接(ln)以文件副本形式存在,但同一文件系统内才可创建,且不占用实际空间。无论改哪一处,其余链接都会同步变化。常用参数:-s 软链接(符号链接)、-v 显示详细处理过程。
# 给文件创建软链接并显示操作信息
ln -sv source.log link.log4.3 文本、权限与打包
4.3.1 grep:搜文本
强大的文本搜索命令,全称 Global Regular Expression Print,即全局正则表达式搜索。它在文件或多个文件中搜索字符串模板,结果输出到标准输出,不改变原文件内容。常用参数:-c 计算符合样式的列数、-i 忽略大小写、-l 只列出文件名、-n 显示匹配行所在行号、-R 递归查找文件夹。
# 查找指定进程
ps -ef | grep svn
# 从文件夹递归查找以 grep 开头的行,只列出文件
grep -lR '^grep' /tmp
# 显示包含 ed 或 at 内容的行
grep -E 'ed|at' test.txt4.3.2 wc:数行数、字数
wc(word count)用于统计指定文件中字节数、单词数、行数,并将统计结果输出。常用参数:-c 统计字节数、-l 统计行数、-m 统计字符数、-w 统计单词数。
# 统计文件的行数、单词数、字节数
wc text.txt
# 统计输出的行数
cat test.txt | wc -l4.3.3 chmod:改权限
用于改变 Linux 系统文件或目录的访问权限。权限用 r(读)、w(写)、x(执行)表示,对应数字为 4、2、1,即 r = 4、w = 2、x = 1。每一文件有三组权限:属主、属组、其他用户。-R 表示递归处理目录及子目录下所有文件。
# 增加文件 t.log 所有用户的可执行权限
chmod a+x t.log
# 属主读写执行(7),属组读执行(5),其他执行(1)
chmod 751 t.log
# 将 test 目录及子目录所有文件添加可读权限
chmod u+r,g+r,o+r -R text/4.3.4 tar:打包与解压
用来打包和解压文件。注意 tar 本身只打包不压缩,压缩与解压是调用其他工具(如 gzip、bzip2)完成的。常用的两招是 tar zcvf 打包压缩、tar zxvf 解压。
-c 建立新的压缩文件
-x 从压缩包中解压
-t 显示压缩文件中的内容
-z 支持 gzip 压缩
-j 支持 bzip2 压缩
-v 显示操作过程
-f 指定压缩文件名# 将文件全部打包成 tar 包
tar -cvf log.tar log1.log log2.log
# 将 /etc 下所有文件和目录打包并用 gz 压缩
tar -zcvf /tmp/etc.tar.gz /etc
# 查看刚打包的文件内容(必须加 z,因为用 gzip 压缩)
tar -ztvf /tmp/etc.tar.gz
# 解压
tar -zxvf filename.tar.gz4.4 进程与系统
4.4.1 ps:看进程
ps(process status)用来查看当前运行的进程状态,一次性查看;如需动态连续结果,用 top。常用参数:-A 显示所有进程、-e 显示所有进程(等同 -A)、-f 显示进程间的关系(完整格式)、-aux 显示所有包含其他信息的进程。
# 显示当前所有进程环境变量及进程间关系
ps -ef
# 与 grep 联用查找某进程
ps -aux | grep apache4.4.2 top:动态看进程
动态显示当前系统正在执行的进程信息,包括进程 ID、CPU 占用率、内存占用率等。常用参数:-p <进程号> 指定进程显示、-n <次数> 循环显示次数。交互界面里按 P 按 CPU 使用率排序、按 M 按内存使用率排序、按 q 退出。
4.4.3 free:看内存
显示系统内存使用情况,包括物理内存、交换区内存(swap)和内核缓冲区内存。常用参数:-m 以 MB 为单位显示、-g 以 GB 为单位显示、-s <秒> 每隔多少秒持续显示。
# 显示内存使用情况
free -m4.4.4 df:看磁盘
显示磁盘空间使用情况,获取硬盘已占用多少、还剩多少等信息。常用参数:-h 以易读方式显示、-T 列出文件系统类型、-a 全部文件系统列表。
# 以易读方式列出所有文件系统及其类型
df -haT4.4.5 du:看目录占用
查看文件和目录的磁盘使用空间。与 df 不同,du 针对的是具体文件或目录。常用参数:-h 以易读方式显示文件大小、-s 仅显示总计、-a 显示目录中所有文件大小。
# 以易读方式显示文件夹内及子文件夹大小
du -h scf/
# 显示几个文件各自占用空间并统计总和
du -hc test/ scf/4.4.6 kill:结束进程
发送指定信号给相应进程。默认发送 SIGTERM(15) 终止指定进程,若无法终止可用 -KILL(发送 SIGKILL,9)强制结束进程。用 ps 或 jobs 查看进程号;root 用户可影响所有用户的进程,普通用户只能影响自己。常用参数:-l 列出全部信号名称、-9 <PID> 强制结束进程。
# 先查找进程 pro1,然后强制杀掉
kill -9 $(ps -ef | grep pro1)4.4.7 date 与 cal:日期和时间
date 显示或设定系统的日期与时间;cal 显示公历(阳历)日历。date 常用格式:%Y 年份(四位数)、%m 月份(01-12)、%d 日期(01-31)、%H 小时(00-23)、%M 分钟(00-59)。
# 显示指定日期格式
date +%Y%m%d
# 显示下一天
date -d "+1 day" +%Y%m%d
# 显示 2013 年每个月的日历
cal -y 2013
# 将星期一作为第一列,显示前中后三月
cal -3m4.5 常用命令小抄
| 想做什么 | 命令 | 说明 |
|---|---|---|
| 看目录详细内容 | ls -lhrt | 权限、大小、按时间反序 |
| 连隐藏文件一起看 | ls -a | 以 . 开头的文件也列出来 |
| 进入 home 目录 | cd ~ | |
| 回到上一次的目录 | cd - | |
| 我在哪 | pwd | |
| 建多级目录 | mkdir -p /tmp/test/t1/t | 目录不存在会自动建 |
| 删整个目录 | rm -rf test | 不可恢复,慎用 |
| 复制并保留属性 | cp -ai a.txt test | 目标存在会提示 |
| 改名 / 移动 | mv test.log test1.txt | 第二个参数是目录就是移动 |
| 看小文件 | cat filename | 一次全显示 |
| 分页看大文件 | less 1.log 2.log | 可前后翻,按 q 退出 |
| 盯日志 | tail -f ping.log | 新内容会持续刷出来 |
| 找文件 | find ./ -name '*.log' | 遍历硬盘,最准也最慢 |
| 找命令在哪 | which ls | 只在 PATH 里找 |
| 搜索文本 | grep -E 'ed|at' test.txt | 支持正则 |
| 统计行数 | cat test.txt | wc -l | |
| 加执行权限 | chmod a+x t.log | 所有用户可执行 |
| 打包压缩 | tar -zcvf /tmp/etc.tar.gz /etc | |
| 解压 | tar -zxvf filename.tar.gz | |
| 看进程 | ps -ef | 一次性快照 |
| 看资源占用 | top | 动态刷新,按 q 退出 |
| 找某个进程 | ps -aux | grep apache | 管道接「或」 |
| 看内存 | free -m | 以 MB 显示 |
| 看磁盘 | df -haT | 含文件系统类型 |
| 看目录占多大 | du -hc test/ scf/ | 并统计总和 |
| 杀进程 | kill -9 <PID> | 先 ps 查 PID |
| 建软链接 | ln -sv source.log link.log | 类似快捷方式 |
| 看日期 | date +%Y%m%d | |
| 看日历 | cal -3m | 前后三个月 |
4.6 题外:用自然语言使用 Ubuntu
AI 时代,古法编程的艺术仍在流传,但 Vibe Coding 已经成为主流。我的选择是:在保留自己读写代码能力的同时,先装一个 npm,再装上 opencode,然后就可以用中文愉快地使唤 Ubuntu 了(doge)。

下一篇:第五章 · Ubuntu 环境下编程,从「会敲命令」走到「会写程序」:在 Ubuntu 里跑通 C++ 和 Python 的第一个 Hello World。