Skip to content

第四章 · Ubuntu 常用命令 ​

ROS 2 的几乎所有操作都在终端里完成:ros2 run、colcon build、看日志、改配置,绕不开文件、权限和进程。这一章把两篇命令笔记合并到一起,按「文件与目录 → 文本与权限 → 进程与系统」的顺序过一遍,最后附一张小抄。不用背,先知道有这个东西,用的时候回来查。

4.1 打开终端 ​

第一件事是学会打开终端。常用的方式有两种:

  • 快捷键 Ctrl + Alt + T
  • 在文件夹里右键,选择 Open in Terminal

之后的命令都在这个终端窗口里敲。

4.2 文件与目录 ​

日常操作里最常见的就是这几件事:看目录里有什么、切换目录、确认自己在哪、建 / 删 / 复制 / 移动文件,以及查看文件内容。

4.2.1 ls:列出目录内容 ​

ls 是 list 的缩写。它不仅能查看目录里包含哪些文件,还能看到文件权限(包括目录、文件夹、文件权限)和目录信息。

bash
ls -a    # 列出目录所有文件,包含以 . 开头的隐藏文件
ls -A    # 列出除 . 及 .. 以外的其它文件
ls -r    # 反序排列
ls -t    # 以文件修改时间排序
ls -S    # 以文件大小排序
ls -h    # 以易读大小显示
ls -l    # 列出文件的权限、所有者、文件大小等详细信息

实例:

bash
# 按易读方式、按时间反序排序,并显示文件详细信息
ls -lhrt

# 按大小反序显示文件详细信息
ls -lrS

# 列出当前目录中所有以 "t" 开头的目录的详细内容
ls -l t*

# 列出文件绝对路径(不包含隐藏文件)
ls | sed "s:^:`pwd`/:"

# 列出文件绝对路径(包含隐藏文件)
find $pwd -maxdepth 1 | xargs ls -ld

ls 命令示例

4.2.2 cd:切换目录 ​

cd(changeDirectory)用于切换当前目录,语法是 cd [目录名]。

bash
# 进入根目录
cd /

# 进入 home 目录
cd ~

# 进入上一次工作路径
cd -

# 把上一个命令的参数作为 cd 的参数
cd !$

cd 命令示例

4.2.3 pwd:我在哪 ​

pwd 用于查看当前工作目录路径,是初学者最常用来确认“我现在在哪”的命令。

bash
# 查看当前路径
pwd

# 查看软链接的实际路径
pwd -P

pwd 命令示例

4.2.4 mkdir:创建文件夹 ​

mkdir 用于创建文件夹。-m 对新建目录设置存取权限;-p 在路径中某些目录尚不存在时自动建立(一次建多级)。

bash
# 当前工作目录下创建名为 t 的文件夹
mkdir t

# 在 tmp 下创建 path test/t1/t,若目录不存在则一并建立
mkdir -p /tmp/test/t1/t

4.2.5 rm:删除 ​

删除一个或多个文件或目录。如果不加 -r 选项,rm 不会删除目录;删除文件通常仍可以恢复,但删除目录需谨慎。常用参数:-i 删除前逐一询问确认、-r 递归删除(连同子目录一起删除)、-f 强制删除不提示。

bash
# 删除任何 .log 文件,删除前逐一询问
rm -i *.log

# 删除 test 子目录及其中所有内容,不一一确认
rm -rf test

# 删除以 - 开头的文件(用 -- 结束选项)
rm -- -f*

4.2.6 cp:复制 ​

将源文件复制到目标文件,或将多个源文件复制到目标目录。常用参数:-i 目标文件已存在时提示是否覆盖、-r 复制目录及目录内所有内容、-a 保持原文件的时间等属性、-s 建立符号链接(快捷方式)。

bash
# 复制 a.txt 到 test 目录,保持时间,存在则提示
cp -ai a.txt test

# 为 a.txt 建立一个链接(快捷方式)
cp -s a.txt link_a.txt

4.2.7 mv:移动 / 改名 ​

移动文件,或修改文件/目录名。当第二个参数是目录时,将第一个参数(可以是多个)移动到该目录。常用参数:-i 目标已存在时提示是否覆盖。

bash
# 将文件 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 输出所有行号。

bash
# 一次显示整个文件
cat filename

# 从键盘创建一个文件(只能新建,不能编辑已有文件)
cat > filename

# 给 log2012.log、log2013.log 加行号后输出
cat -n log2012.log log2013.log

# 反向列示文件(与 cat 相反)
tac log.txt

4.2.9 more:一页一页看 ​

功能类似于 cat,但会一页一页显示,方便逐页阅读。按空格键往下翻一页,按 b 键往回翻一页,按 q 键退出。常用参数:+n 从第 n 行开始显示、-n 定义屏幕大小为 n 行、-s 把连续多个空行显示为一行。

bash
# 显示文件中从第 3 行起的内容
more +3 text.txt

# 借助管道让 ls -l 每次只显示 5 行
ls -l | more -5

4.2.10 less:随意前后翻 ​

less 与 more 类似,但可以随意前后浏览文件(more 只能向前);而且 less 在查看之前不会加载整个文件,更适合大文件。

浏览时的操作:

text
/字符串    向下搜索字符串
?字符串    向上搜索字符串
n          重复前一个搜索
N          反向重复前一个搜索
空格       滚动一页
b          向后翻一页
-q         退出
bash
# 查看进程信息并通过 less 分页显示(带行号)
ps -aux | less -N

# 查看多个文件(按 n 下一个,p 前一个)
less 1.log 2.log

4.2.11 head:看开头 ​

显示文件的开头内容,默认显示前 10 行。常用参数:-n <行数> 显示的行数、-c <字节数> 显示前多少个字节。

bash
# 显示 1.log 文件中前 20 行
head 1.log -n 20

# 显示最后 10 行(行数为负数表示从后往前数)
head -n -10 t.log

4.2.12 tail:看结尾 ​

显示文件末尾内容,常用来查看日志文件。常用参数:-f 循环读取(适合查看动态增加的日志)、-n <行数> 显示行数(从后往前)。

bash
# 循环读取逐渐增加的文件内容
tail -f ping.log

4.2.13 查找文件:which / whereis / locate / find ​

这四个命令都能用来找文件,但原理和适用场景各不相同:

  • which:在 PATH 中查找可执行命令的位置,返回第一个匹配结果。
  • whereis:只搜索程序名相关的二进制、帮助和源码文件,速度快。
  • locate:基于系统数据库查找文件,速度很快,但新建文件可能找不到。
  • find:实际遍历硬盘查找文件,最准确但最慢。
bash
# 查看 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 显示详细处理过程。

bash
# 给文件创建软链接并显示操作信息
ln -sv source.log link.log

4.3 文本、权限与打包 ​

4.3.1 grep:搜文本 ​

强大的文本搜索命令,全称 Global Regular Expression Print,即全局正则表达式搜索。它在文件或多个文件中搜索字符串模板,结果输出到标准输出,不改变原文件内容。常用参数:-c 计算符合样式的列数、-i 忽略大小写、-l 只列出文件名、-n 显示匹配行所在行号、-R 递归查找文件夹。

bash
# 查找指定进程
ps -ef | grep svn

# 从文件夹递归查找以 grep 开头的行,只列出文件
grep -lR '^grep' /tmp

# 显示包含 ed 或 at 内容的行
grep -E 'ed|at' test.txt

4.3.2 wc:数行数、字数 ​

wc(word count)用于统计指定文件中字节数、单词数、行数,并将统计结果输出。常用参数:-c 统计字节数、-l 统计行数、-m 统计字符数、-w 统计单词数。

bash
# 统计文件的行数、单词数、字节数
wc text.txt

# 统计输出的行数
cat test.txt | wc -l

4.3.3 chmod:改权限 ​

用于改变 Linux 系统文件或目录的访问权限。权限用 r(读)、w(写)、x(执行)表示,对应数字为 4、2、1,即 r = 4、w = 2、x = 1。每一文件有三组权限:属主、属组、其他用户。-R 表示递归处理目录及子目录下所有文件。

bash
# 增加文件 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 解压。

text
-c   建立新的压缩文件
-x   从压缩包中解压
-t   显示压缩文件中的内容
-z   支持 gzip 压缩
-j   支持 bzip2 压缩
-v   显示操作过程
-f   指定压缩文件名
bash
# 将文件全部打包成 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.gz

4.4 进程与系统 ​

4.4.1 ps:看进程 ​

ps(process status)用来查看当前运行的进程状态,一次性查看;如需动态连续结果,用 top。常用参数:-A 显示所有进程、-e 显示所有进程(等同 -A)、-f 显示进程间的关系(完整格式)、-aux 显示所有包含其他信息的进程。

bash
# 显示当前所有进程环境变量及进程间关系
ps -ef

# 与 grep 联用查找某进程
ps -aux | grep apache

4.4.2 top:动态看进程 ​

动态显示当前系统正在执行的进程信息,包括进程 ID、CPU 占用率、内存占用率等。常用参数:-p <进程号> 指定进程显示、-n <次数> 循环显示次数。交互界面里按 P 按 CPU 使用率排序、按 M 按内存使用率排序、按 q 退出。

4.4.3 free:看内存 ​

显示系统内存使用情况,包括物理内存、交换区内存(swap)和内核缓冲区内存。常用参数:-m 以 MB 为单位显示、-g 以 GB 为单位显示、-s <秒> 每隔多少秒持续显示。

bash
# 显示内存使用情况
free -m

4.4.4 df:看磁盘 ​

显示磁盘空间使用情况,获取硬盘已占用多少、还剩多少等信息。常用参数:-h 以易读方式显示、-T 列出文件系统类型、-a 全部文件系统列表。

bash
# 以易读方式列出所有文件系统及其类型
df -haT

4.4.5 du:看目录占用 ​

查看文件和目录的磁盘使用空间。与 df 不同,du 针对的是具体文件或目录。常用参数:-h 以易读方式显示文件大小、-s 仅显示总计、-a 显示目录中所有文件大小。

bash
# 以易读方式显示文件夹内及子文件夹大小
du -h scf/

# 显示几个文件各自占用空间并统计总和
du -hc test/ scf/

4.4.6 kill:结束进程 ​

发送指定信号给相应进程。默认发送 SIGTERM(15) 终止指定进程,若无法终止可用 -KILL(发送 SIGKILL,9)强制结束进程。用 ps 或 jobs 查看进程号;root 用户可影响所有用户的进程,普通用户只能影响自己。常用参数:-l 列出全部信号名称、-9 <PID> 强制结束进程。

bash
# 先查找进程 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)。

bash
# 显示指定日期格式
date +%Y%m%d

# 显示下一天
date -d "+1 day" +%Y%m%d

# 显示 2013 年每个月的日历
cal -y 2013

# 将星期一作为第一列,显示前中后三月
cal -3m

4.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 中使用 opencode

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

用 VitePress 搭建 · 托管在 GitHub Pages