ROS2系列 (0) : Linux 常用命令
ROS2系列 (0) : Linux 常用命令
Linux 命令是操作 Linux 系统的核心工具,掌握常用命令能大幅提升工作效率。本文整理了 31 个高频 Linux 命令,涵盖文件操作、目录管理、进程监控、系统信息查询等核心场景,每个命令包含功能说明、常用参数和可直接运行的实战实例。
目录
- ls - 列出目录内容
- cd - 切换工作目录
- pwd - 查看当前路径
- mkdir - 创建目录
- rm - 删除文件/目录
- rmdir - 删除空目录
- mv - 移动/重命名文件
- cp - 复制文件/目录
- cat - 查看/合并文件
- more - 分页查看文件
- less - 灵活浏览文件
- head - 查看文件开头
- tail - 查看文件结尾
- which - 查找命令路径
- whereis - 查找程序文件
- locate - 快速查找文件
- find - 精准搜索文件
- chmod - 修改文件权限
- tar - 打包压缩文件
- chown - 修改文件所有者
- df - 查看磁盘空间
- du - 查看目录大小
- ln - 创建文件链接
- date - 查看/设置时间
- cal - 显示日历
- grep - 文本搜索
- wc - 统计文件内容
- ps - 查看进程状态
- top - 监控系统进程
- kill - 终止进程
- free - 查看内存使用
1. ls - 列出目录内容
ls(list)命令用于查看目录包含的文件,支持显示权限、大小、修改时间等详细信息。
常用参数
-a:显示所有文件(含隐藏文件,以.开头)-l:显示详细信息(权限、所有者、大小等)-h:以易读单位显示大小(KB/MB/GB)-t:按修改时间排序-r:反向排序-S:按文件大小排序
实战实例
# 1. 按易读方式、时间反序显示详细信息
ls -lhrt# 2. 按大小反序显示详细信息
ls -lrS# 3. 列出当前目录下所有以"t"开头的目录详情
ls -l t*
2. cd - 切换工作目录
cd(change directory)命令用于切换当前工作目录,是最常用的导航命令。
常用参数
无额外参数,通过目录路径实现切换。
实战实例
# 1. 进入系统根目录
cd /# 2. 进入当前用户的家目录
cd ~# 3. 回到上一次工作目录
cd -
cd - 是一个非常实用的命令,作用是切换回上一次所在的工作目录,相当于在两个目录之间快速切换。
举个例子:
假设你现在的操作步骤如下:
-
初始目录是
/home/user/Documents(可以用pwd命令查看当前目录)pwd # 输出:/home/user/Documents -
然后你切换到了
/home/user/Downloads目录:cd /home/user/Downloads pwd # 输出:/home/user/Downloads -
此时执行
cd -,就会立刻回到上一次的目录(即/home/user/Documents):cd - pwd # 输出:/home/user/Documents -
再执行一次
cd -,又会切换回/home/user/Downloads:cd - pwd # 输出:/home/user/Downloads
3. pwd - 查看当前路径
pwd(print working directory)命令用于显示当前所在的工作目录路径。
常用参数
-P:显示软链接的实际路径
实战实例
# 1. 查看当前工作路径
pwd# 2. 查看软链接指向的实际路径
pwd -P
什么是 pwd -P?
pwd -P 命令的核心作用是 显示当前工作目录的「实际物理路径」,而非软链接(符号链接)的表面路径。
pwd是print working directory的缩写,默认显示当前所在路径(若当前目录是软链接,则显示软链接的路径)。-P参数是--physical的缩写,强制穿透软链接,显示其背后指向的真实目录路径。
实际场景例子
假设我们有这样的目录结构:
- 真实目录:
/home/user/documents/work(存放实际工作文件) - 软链接:在
/home/user/下创建一个名为mywork的软链接,指向上面的真实目录。
步骤 1:创建软链接(模拟场景)
先执行以下命令创建测试环境:
# 1. 创建真实目录并进入
mkdir -p /home/user/documents/work
cd /home/user/documents/work# 2. 在 /home/user/ 目录下,创建指向真实目录的软链接
ln -s /home/user/documents/work /home/user/mywork
步骤 2:对比 pwd 和 pwd -P 的区别
# 1. 进入软链接目录(表面路径是 mywork)
cd /home/user/mywork# 2. 执行默认 pwd:显示软链接的表面路径
pwd
# 输出结果:/home/user/mywork(软链接的路径,非真实路径)# 3. 执行 pwd -P:穿透软链接,显示真实物理路径
pwd -P
# 输出结果:/home/user/documents/work(软链接指向的实际目录)
步骤 3:验证软链接关系
可以通过 ls -l 查看软链接的指向,确认 pwd -P 的结果正确:
# 查看 /home/user/ 下的 mywork 软链接详情
ls -l /home/user/mywork
# 输出结果:lrwxrwxrwx 1 user user 26 5月 20 14:30 /home/user/mywork -> /home/user/documents/work
# 箭头 -> 明确显示软链接指向的真实路径
4. mkdir - 创建目录
mkdir(make directory)命令用于创建一个或多个目录,支持递归创建多级目录。
常用参数
-p:递归创建多级目录(路径中不存在的目录自动创建)-m:创建时指定权限(如 755、644)
实战实例
# 1. 在当前目录创建名为 t 的文件夹
mkdir t# 2. 递归创建多级目录(不存在则自动创建)
mkdir -p /tmp/test/t1/t# 3. 创建目录并指定权限(所有者读写执行,其他只读)
mkdir -m 755 project
5. rm - 删除文件/目录
rm(remove)命令用于删除文件或目录,默认不删除目录,需配合参数使用。
常用参数
-i:删除前逐一确认-f:强制删除(不提示)-r:递归删除目录及内容
实战实例
# 1. 删除所有 .log 文件,删除前确认
rm -i *.log# 2. 强制删除 test 目录及所有子内容(无提示)
rm -rf test# 3. 删除以 "-f" 开头的文件(-- 表示参数结束)
rm -- -f*
6. rmdir - 删除空目录
rmdir(remove directory)命令仅用于删除空目录,删除非空目录需先用 rm 清理内容。
常用参数
-p:删除子目录后,若父目录为空则一并删除
实战实例
# 删除子目录后,若 parent 目录为空则同时删除
rmdir -p parent/child/child11
7. mv - 移动/重命名文件
mv(move)命令兼具移动文件和修改文件名功能,根据第二个参数类型自动判断。
常用参数
-i:目标文件存在时提示是否覆盖
实战实例
# 1. 将文件重命名(test.log → test1.txt)
mv test.log test1.txt# 2. 将多个文件移动到 /test3 目录
mv log1.txt log2.txt log3.txt /test3# 3. 重命名时若目标文件存在则提示覆盖
mv -i log1.txt log2.txt# 4. 将当前目录所有文件移动到上一级目录
mv * ../
8. cp - 复制文件/目录
cp(copy)命令用于复制文件或目录,支持保持原文件属性、创建链接等功能。
常用参数
-i:目标文件存在时提示覆盖-r:递归复制目录及所有子内容-a:保持原文件时间、权限等属性-s:创建软链接(而非实际复制)
实战实例
# 1. 复制文件到 test 目录,保持原属性,存在则提示
cp -ai a.txt test# 2. 为 a.txt 创建软链接(快捷方式)
cp -s a.txt link_a.txt# 3. 递归复制目录及所有内容
cp -r src_dir dest_dir
9. cat - 查看/合并文件
cat(concatenate)命令主要用于查看文件内容、创建新文件或合并多个文件。
常用参数
-n:显示所有行号(含空行)-b:仅显示非空行的行号
实战实例
# 1. 查看文件完整内容
cat filename.txt# 2. 给文件内容加行号,输出到新文件
cat -n log2012.log > log2013.log# 3. 合并多个文件内容,附加到 log.log(非空行加行号)
cat -b log2012.log log2013.log >> log.log# 4. 从键盘创建新文件(输入完成后按 Ctrl+D 保存)
cat > newfile.txt << EOF
Hello World
PWD = $(pwd)
EOF# 5. 反向显示文件内容(tac 是 cat 的反向命令)
tac log.txt
(1)例子2、3场景举例:
假设当前目录下有两个文件:
-
log2012.log内容如下(3行文本,含1个空行):2012-01-01 系统启动 2012-01-02 数据同步2012-01-03 任务完成 -
log2013.log初始为空(后续会被第一个命令写入内容)。
1. 命令 cat -n log2012.log > log2013.log
-
作用:读取
log2012.log的内容,给每一行(包括空行)加上行号,然后将结果写入log2013.log(若文件已存在会覆盖)。 -
执行后:
log2013.log会生成如下内容(注意空行也被编号):1 2012-01-01 系统启动2 2012-01-02 数据同步3 4 2012-01-03 任务完成
2. 命令 cat -b log2012.log log2013.log >> log.log
-
作用:
- 读取
log2012.log和log2013.log两个文件的内容。 - 用
-b选项给非空行加行号(空行不编号)。 - 将结果追加到
log.log(若文件不存在会新建,存在则在末尾添加内容)。
- 读取
-
执行后:
log.log会生成如下内容(注意空行无编号,且两个文件内容按顺序合并):1 2012-01-01 系统启动2 2012-01-02 数据同步3 2012-01-03 任务完成4 1 2012-01-01 系统启动5 2 2012-01-02 数据同步6 3 7 4 2012-01-03 任务完成
这个命令是通过 cat 结合here document( heredoc ) 语法从键盘创建新文件的方式,功能是手动输入内容并保存到 newfile.txt 中,同时支持嵌入命令执行结果。
(2)例子4逐部分解释:
-
cat > newfile.txtcat命令用于读取内容并输出。>表示“重定向输出”,将cat读取的内容写入到newfile.txt(若文件不存在则创建,存在则覆盖原有内容)。
-
<< EOF- 这是 heredoc 的语法标记,用来定义“输入结束符”(这里的
EOF是自定义的标记,也可以换成其他字符串,比如END、MARK等)。 - 作用是:告诉系统“接下来输入的内容直到遇到
EOF标记为止,都作为cat要读取的内容”。
- 这是 heredoc 的语法标记,用来定义“输入结束符”(这里的
-
中间的输入内容
Hello World PWD = $(pwd)- 这部分是你手动输入的文本内容(也可以预先写在命令里,像例子中这样直接执行)。
- 特别注意:
$(pwd)是命令替换,会自动执行pwd命令(显示当前目录路径),并将结果嵌入到文本中。比如当前目录是/home/user,这一行会变成PWD = /home/user。
-
最后的
EOF- 当输入到这里时,系统识别到结束符,停止接收输入,
cat会把前面所有内容(包括命令替换后的结果)写入newfile.txt。
- 当输入到这里时,系统识别到结束符,停止接收输入,
执行效果:
假设当前目录是 /home/work,执行完这个命令后:
- 会生成
newfile.txt文件。 - 打开文件后内容是:
Hello World PWD = /home/work
为什么不用 Ctrl+D?
例子中直接把内容写在了 << EOF 和 EOF 之间,属于“预先定义好内容”的写法,执行后会自动完成写入,不需要手动按 Ctrl+D。
如果想手动实时输入内容,可以简化命令为:
cat > newfile.txt
这时你可以键盘输入任意内容,输完后按 Ctrl+D 结束输入并保存,效果和 heredoc 类似,但 heredoc 更适合预先知道内容、或需要嵌入命令结果的场景。
10. more - 分页查看文件
more 命令以分页方式显示文件内容,适合查看大文件,支持逐页导航。
常用参数
+n:从第 n 行开始显示-n:指定每页显示 n 行-d:显示操作提示(按空格继续,q 退出)
导航快捷键
- 空格键:下一页
- b 键:上一页
- Enter 键:下一行
- q 键:退出
实战实例
# 1. 从第 3 行开始查看文件
more +3 text.txt# 2. 分页显示目录详情,每页 5 行
ls -l | more -5
11. less - 灵活浏览文件
less 命令功能与 more 类似,但支持前后自由浏览,且不加载整个文件(打开大文件更快)。
常用参数
-N:显示行号-i:搜索时忽略大小写/字符串:向下搜索指定字符串?字符串:向上搜索指定字符串
导航快捷键
- 空格键/PageDown:下一页
- PageUp:上一页
- n 键:继续下一个搜索结果
- N 键:反向搜索结果
- q 键:退出
实战实例
# 1. 分页显示进程信息,显示行号
ps -aux | less -N# 2. 查看多个文件(n 切换下一个,p 切换上一个)
less 1.log 2.log
12. head - 查看文件开头
head 命令默认显示文件前 10 行,支持指定显示行数或字节数。
常用参数
-n <行数>:显示指定行数(负数表示排除最后 n 行)-c <字节数>:显示指定字节数
实战实例
# 1. 显示文件前 20 行
head -n 20 1.log# 2. 显示文件前 20 字节
head -c 20 log2014.log# 3. 显示文件除最后 10 行外的所有内容
head -n -10 t.log
13. tail - 查看文件结尾
tail 命令默认显示文件最后 10 行,常用于实时查看日志文件(如应用运行日志)。
常用参数
-n <行数>:显示指定行数-f:实时跟踪文件更新(日志新增内容会自动显示)
实战实例
# 1. 显示文件最后 10 行(默认)
tail t.log# 2. 实时查看日志文件更新(常用)
tail -f ping.log# 3. 显示文件最后 20 行
tail -n 20 app.log
14. which - 查找命令路径
which 命令在系统 PATH 环境变量指定的路径中,搜索可执行命令的位置。
常用参数
-n <长度>:指定文件名显示长度
实战实例
# 1. 查找 ls 命令的执行路径
which ls# 2. 查找 which 命令本身的路径
which which# 3. 查看当前 PATH 配置(命令搜索路径)
echo $PATH
15. whereis - 查找程序文件
whereis 命令专门搜索程序相关文件,包括二进制文件、帮助文档、源代码文件。
常用参数
-b:仅查找二进制文件-m:仅查找帮助文档-s:仅查找源代码文件
实战实例
# 1. 查找 locate 程序的所有相关文件
whereis locate# 2. 仅查找 locate 的帮助文档
whereis -m locate# 3. 仅查找 locate 的二进制文件
whereis -b locate
16. locate - 快速查找文件
locate 命令通过系统内置数据库快速查找文件,比 find 命令速度快,但不实时(数据库默认每天更新)。
常用参数
-r:支持正则表达式匹配-l <数量>:限制显示结果数量
实战实例
# 1. 查找所有文件名包含 pwd 的文件
locate pwd# 2. 查找 /etc 目录下以 sh 开头的文件
locate /etc/sh# 3. 查找 /var 目录下以 reason 结尾的文件(正则匹配)
locate -r '^/var.*reason$'
17. find - 精准搜索文件
find 命令直接遍历文件系统查找文件,支持按名称、权限、大小、修改时间等多条件筛选,功能强大。
常用参数
-name <模式>:按文件名匹配(支持通配符 * ?)-type <类型>:按文件类型筛选(f 普通文件、d 目录、l 软链接)-size <大小>:按文件大小筛选(+1000c 大于 1KB,1000c 等于 1KB)-mtime <天数>:按修改时间筛选(+10 10天前,-2 2天内)-exec <命令>:对查找结果执行指定命令
实战实例
# 1. 在当前目录查找所有 .log 文件
find ./ -name '*.log'# 2. 查找 48 小时内修改过的文件
find -atime -2# 3. 查找 /opt 目录下权限为 777 的文件
find /opt -perm 777# 4. 查找大于 1KB 的普通文件
find -type f -size +1000c# 5. 查找 10 天前的 .log 文件并删除(无提示)
find . -name '*.log' -mtime +10 -exec rm -f {} \;# 6. 查找内容包含 "pkg" 的 passwd 开头文件
find . -type f -name 'passwd*' -exec grep "pkg" {} \;
18. chmod - 修改文件权限
chmod(change mode)命令用于修改文件或目录的访问权限,支持文字模式和数字模式两种设置方式。
权限说明
- 权限分组:所有者(u)、同组用户(g)、其他用户(o)、所有用户(a)
- 权限类型:读(r=4)、写(w=2)、执行(x=1)、无权限(-=0)
- 数字模式:三位数字分别对应所有者、同组、其他用户权限(如 755=u=rwx,g=rx,o=rx)
常用参数
-c:显示权限修改结果-R:递归修改目录及子内容权限
实战实例
# 1. 给所有用户添加执行权限(文字模式)
chmod a+x t.log# 2. 重置权限:所有者只读,其他无权限(数字模式)
chmod 400 t.log -c# 3. 所有者读写执行,同组读执行,其他执行(数字模式)
chmod 751 t.log -c# 4. 递归给目录及所有子文件添加读权限
chmod -R u+r,g+r,o+r test/
19. tar - 打包压缩文件
tar 命令用于文件打包(将多个文件合并为一个)和压缩,本身不压缩,需配合 gzip/bzip2 等工具。
常用参数
-c:创建新压缩包-x:解压压缩包-z:使用 gzip 压缩/解压(.tar.gz 格式)-j:使用 bzip2 压缩/解压(.tar.bz2 格式)-f <文件名>:指定压缩包名称-v:显示操作过程--exclude <路径>:排除指定文件/目录
实战实例
# 1. 打包所有 .log 文件(不压缩)
tar -cvf log.tar *.log# 2. 打包并使用 gzip 压缩(常用)
tar -zcvf etc.tar.gz /etc# 3. 解压 .tar.gz 压缩包
tar -zxvf etc.tar.gz# 4. 打包 /home 和 /etc,排除 /home/dmtsai
tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc# 5. 查看压缩包内容(不解压)
tar -ztvf etc.tar.gz
20. chown - 修改文件所有者
chown(change owner)命令用于修改文件或目录的所有者和所属组。
常用参数
-c:显示修改结果-R:递归修改目录及子内容
实战实例
# 1. 把文件所有者和组改为 mail
chown -c mail:mail log2012.log# 2. 只修改文件所属组为 mail
chown -c :mail t.log# 3. 递归修改目录及所有子文件的所有者为 mail
chown -cR mail: test/
21. df - 查看磁盘空间
df(disk free)命令用于查看文件系统的磁盘空间使用情况,包括总空间、已用空间、剩余空间。
常用参数
-h:以易读单位显示(KB/MB/GB)-T:显示文件系统类型-l:仅显示本地磁盘
实战实例
# 1. 以易读方式查看所有磁盘空间
df -h# 2. 查看本地磁盘空间及文件系统类型
df -hlT
22. du - 查看目录大小
du(disk usage)命令用于查看文件或目录占用的磁盘空间,与 df 不同,du 直接统计文件实际大小。
常用参数
-h:以易读单位显示-a:显示目录下所有文件大小-s:仅显示总计大小-c:显示总计大小(末尾额外输出总和)--max-depth=<级别>:限制目录深度
实战实例
# 1. 查看目录及子目录大小(易读格式)
du -h scf/# 2. 查看目录下所有文件大小
du -ah scf/# 3. 查看多个目录大小并显示总和
du -hc test/ scf/# 4. 仅显示当前目录下一级子目录大小
du -hc --max-depth=1 scf/
23. ln - 创建文件链接
ln(link)命令用于创建文件链接,分为软链接(符号链接)和硬链接,可实现文件共享。
链接类型
- 软链接(-s):类似 Windows 快捷方式,可跨文件系统,支持链接目录
- 硬链接:文件副本(不占额外空间),不可跨文件系统,不可链接目录
常用参数
-s:创建软链接-v:显示创建过程
实战实例
# 1. 创建文件软链接(快捷方式)
ln -sv source.log link.log# 2. 创建文件硬链接
ln -v source.log link1.log# 3. 创建目录软链接
ln -sv /opt/soft/test/test3 /opt/soft/test/test5
24. date - 查看/设置时间
date 命令用于显示或修改系统日期和时间,支持自定义输出格式。
常用参数
-d <字符串>:显示指定日期时间(如 “next monday”)-s <字符串>:设置系统时间(需 root 权限)- 格式符:%Y(四位数年份)、%m(月份)、%d(日期)、%H(小时)、%M(分钟)
实战实例
# 1. 显示当前时间(自定义格式:年-月-日 时:分:秒)
date +"%Y-%m-%d %H:%M:%S"# 2. 显示明天日期
date +%Y%m%d --date="+1 day"# 3. 显示下周一日期
date -d 'next monday' +"%Y-%m-%d"# 4. 设置系统时间(需 root 权限)
date -s "2024-05-20 14:30:00"
25. cal - 显示日历
cal(calendar)命令用于显示公历日历,支持显示指定年月、全年日历等。
常用参数
-3:显示前一月、当前月、后一月-m:以星期一为每周第一天-y <年份>:显示指定年份全年日历-j:显示日期在当年的第几天
实战实例
# 1. 显示当前月日历
cal# 2. 显示 2024 年全年日历
cal -y 2024# 3. 显示 2024 年 9 月日历
cal 9 2024# 4. 显示前中后三月,以星期一为第一天
cal -3m
26. grep - 文本搜索
grep(global regular expression print)命令是强大的文本搜索工具,支持正则表达式匹配。
常用参数
-i:忽略大小写-n:显示匹配行号-c:统计匹配行数-R:递归搜索目录下所有文件-l:仅显示包含匹配内容的文件名-A <行数>:显示匹配行后 n 行-B <行数>:显示匹配行前 n 行-C <行数>:显示匹配行前后 n 行
实战实例
# 1. 搜索文件中包含 "error" 的行(忽略大小写)
grep -i "error" app.log# 2. 递归搜索目录下所有文件,显示匹配行号
grep -Rn "user" /var/log/# 3. 统计匹配 "success" 的行数
grep -c "success" result.log
27. wc - 统计文件内容
wc(word count)命令用于统计文件的行数、字数、字节数和字符数。
常用参数
-l:仅统计行数-w:仅统计字数-c:仅统计字节数-m:仅统计字符数
实战实例
# 1. 统计文件的行数、字数、字节数
wc text.txt# 2. 仅统计文件行数(常用)
wc -l text.txt# 3. 统计命令输出结果的行数
cat text.txt | wc -l
28. ps - 查看进程状态
ps(process status)命令用于查看系统当前运行的进程状态,一次性输出结果。
进程状态码
- R:运行中
- S:休眠中
- D:不可中断休眠
- T:停止
- Z:僵尸进程
常用参数
-ef:显示所有进程的详细信息(含进程树)-aux:显示所有进程(含 CPU/内存占用率)
实战实例
# 1. 查看所有进程的详细信息
ps -ef# 2. 查看所有进程的 CPU/内存占用情况
ps -aux# 3. 查找包含 apache 的进程
ps -aux | grep apache# 4. 查找 cron 和 syslog 服务的 PID
ps aux | grep '(cron|syslog)'
29. top - 监控系统进程
top 命令用于实时监控系统进程状态,动态更新 CPU、内存占用率等信息。
常用参数
-c:显示完整命令行-p <PID>:仅监控指定进程-n <次数>:指定更新次数后退出
交互快捷键
- P:按 CPU 占用率排序
- M:按内存占用率排序
- T:按运行时间排序
- k:终止指定进程
- q:退出监控
实战实例
# 1. 实时监控系统进程(默认每秒更新)
top# 2. 监控指定进程(PID 为 1234)
top -p 1234# 3. 显示完整命令行,更新 10 次后退出
top -c -n 10
30. kill - 终止进程
kill 命令用于向进程发送信号,默认发送终止信号(SIGTERM,信号 15),强制终止需使用信号 9(SIGKILL)。
常用参数
-9:强制终止进程(无法忽略)-l:列出所有信号类型
实战实例
# 1. 终止指定 PID 的进程(正常终止)
kill 1234# 2. 强制终止指定 PID 的进程(常用)
kill -9 1234# 3. 终止所有包含 pro1 的进程
kill -9 $(ps -ef | grep pro1 | grep -v grep)
31. free - 查看内存使用
free 命令用于查看系统内存使用情况,包括物理内存、交换内存(swap)的总容量、已用容量和空闲容量。
常用参数
-h:以易读单位显示(KB/MB/GB)-t:显示内存使用总和-s <秒数>:周期性显示内存状态
实战实例
# 1. 以易读方式查看内存使用
free -h# 2. 显示内存使用总和(含物理内存+交换内存)
free -ht# 3. 每 10 秒显示一次内存状态(按 Ctrl+C 退出)
free -s 10
