Linux 终端生存指南:从命令补全到文件操作,一篇打通

📅 2026/8/2 14:21:51 👁️ 阅读次数 📝 编程学习
Linux 终端生存指南:从命令补全到文件操作,一篇打通

你是否有过这样的体验:在终端里敲了半天命令,结果发现输错了要重新打;想批量处理一批文件,却不知道怎么写匹配规则;想把命令的输出保存下来,结果把原文件给覆盖了……

这些“低级错误”其实不是你不小心,而是因为你还没有掌握终端里那些提升效率、避免翻车的基本功。

这篇文章不讲复杂的概念,只讲你在日常运维中一定会用到的操作技巧。学完这一篇,你的终端操作至少提速 50%。

一、命令输入的艺术:少敲键盘,多干活

1. 命令补全:Tab 键是你最好的朋友

你是不是还在一个字一个字地敲命令和路径?其实大部分时候只需要按 Tab​ 键就够了。

  • 命令补全:输入 sys 然后按 Tab,如果系统里只有一个以 sys 开头的命令(比如 systemctl),它会自动补全;如果有多个,再按一次 Tab 会列出所有候选。

  • 路径补全:输入 /etc/ng 然后按 Tab,如果只有一个匹配(比如 /etc/nginx),直接补全;否则再次 Tab 列出选项。

实操:打开终端,输入 ls /et 然后按 Tab,看看发生了什么。

2. 命令历史:找回你刚才执行过的命令

有时候你执行了一条很长的命令,想再来一次,难道要重新敲一遍?不用。

  • ​ 键可以浏览之前执行过的命令。

  • 输入 history 可以看到所有历史命令及编号。想重新执行第 123 条命令:!123

  • 想执行最近一次以 ssh 开头的命令:!ssh

  • 想获取上一条命令的最后一个参数:!$ 或者按 Esc 后再按 .

实操:先执行 echo hello world,然后输入 !! 再回车,你会发现上一条命令又被执行了一次。

3. 命令行编辑快捷键:别再用退格键慢慢删了

|
快捷键
|
作用
|
| --- | --- |
|
Ctrl + A
|
跳到行首
|
|
Ctrl + E
|
跳到行尾
|
|
Ctrl + U
|
删除光标左边所有内容
|
|
Ctrl + K
|
删除光标右边所有内容
|
|
Ctrl + W
|
删除光标左边一个单词
|
|
Ctrl + Y
|
粘贴刚刚删除的内容
|
|
Alt + F
|
向右跳一个单词
|
|
Alt + B
|
向左跳一个单词
|
|
Ctrl + L
|
清屏(相当于 clear)
|
|
Ctrl + R
|
反向搜索历史命令,输入关键字即可匹配
|

实操:输入一条长命令(比如 systemctl status sshd --no-pager),然后依次尝试 Ctrl+ACtrl+ECtrl+UCtrl+Y,感受一下。

二、文件管理:创建、复制、移动、删除的正确姿势

1. 创建目录:mkdir 的隐藏技能

你可能知道 mkdir dirname 创建目录,但有两个选项非常实用:

  • mkdir -p a/b/c/d:自动创建所有不存在的父目录,一步到位。

  • mkdir -v dirname:显示创建过程的详细信息。

  • mkdir -m 755 dirname:创建目录的同时设定权限。

实操mkdir -pv /tmp/test/sub1/sub2,看看输出。

2. 复制文件:cp 的安全用法

cp 是最常用的命令之一,但也最容易出错——一不小心就把重要文件覆盖了。

  • 交互模式cp -i source dest,覆盖前会问你确认。

  • 递归复制目录cp -r sourcedir destdir

  • 保留所有属性cp -a source dest(相当于 -dR --preserve=all),常用于备份。

  • 复制符号链接本身cp -d linkfile dest,默认会复制链接指向的目标文件。

防翻车口诀:不确定时加 -i,复制目录加 -r,要备份用 -a

3. 移动和重命名:mv 的妙用

mv 既可以移动文件,也可以重命名。同样建议加 -i 防止覆盖:

mv -i oldname newname   # 重命名
mv -i file /tmp/        # 移动到 /tmp 目录

4. 删除文件:rm 的危险与自救

rm 是 Linux 上最危险的操作之一,尤其是 rm -rf /(千万别试)。

  • 安全删除rm -i file 逐个确认。

  • 删除目录rm -r dir(或者更安全的 rm -ri dir)。

  • 强制删除rm -f file,不提示直接删。

黄金法则:在执行 rm -rf 之前,先 ls 一遍确认路径是否正确。另外,养成用 trash-cli(类似于回收站)的习惯可以救命。

三、查看文件内容:不止 cat 和 less

1. 快速查看:head 和 tail

  • head -n 20 file:查看文件前 20 行(默认 10 行)。

  • tail -n 20 file:查看文件后 20 行。

  • tail -f file实时追踪文件的新增内容,查看日志的神器。按 Ctrl+C 退出。

实战场景:排查故障时,tail -f /var/log/syslog 可以实时看到新产生的日志。

2. 分屏阅读:more 和 less

  • more file:一页一页看,按空格翻页,看完自动退出。

  • less file:更强大,支持上下翻页、搜索(输入 /keyword 搜索,按 n 跳到下一个匹配)。man 命令用的就是 less。

3. 查看文件元数据:stat 和 touch

  • stat file:查看文件的元数据,包括大小、权限、三个时间戳(Access、Modify、Change)。

  • touch file:如果文件不存在则创建空文件;如果存在则更新它的时间戳为当前时间。

  • touch -d "yesterday 14:00" file:把时间戳改成昨天下午两点。这在模拟日志时间时很有用。

实操touch mytest.txt && stat mytest.txt,看看输出里三个时间戳的值。

四、批量处理文件:通配符(Glob)的力量

当你有几十个文件需要操作时,一个一个敲名字太傻了。这时候就要用文件名通配符

常用通配符

|
模式
|
含义
|
示例
|
| --- | --- | --- |
|
*
|
匹配任意长度任意字符
|
*.log 匹配所有 .log 结尾的文件
|
|
?
|
匹配任意单个字符
|
file?.txt 匹配 file1.txtfileA.txt
|
|
[abc]
|
匹配方括号内任意一个字符
|
file[123].txt 匹配 file1.txtfile2.txtfile3.txt
|
|
[a-z]
|
匹配指定范围
|
[a-z]*.txt 匹配以小写字母开头的 txt 文件
|
|
[^abc]
|
匹配不在方括号内的字符
|
[^0-9]* 匹配不以数字开头的文件
|
|
[[:upper:]]
|
POSIX 字符类,匹配大写字母
|
等价于 [A-Z]
|

实操:先创建几个测试文件:touch report{1..5}.log note{A,B,C}.txt,然后试试 ls *.logls report?.logls note[A-C].txt

五、数据流处理:IO 重定向和管道

这是 Linux 运维中最强大的思想之一:把命令的输入输出像水管一样连接起来

1. 输出重定向:保存结果

  • command > file:将标准输出覆盖写入文件。

  • command >> file:将标准输出追加写入文件。

  • command 2> file:将错误输出重定向到文件。

  • command &> file:将标准输出和错误输出合并重定向。

  • command > file 2>&1:另一种合并写法,注意顺序。

防翻车:用 set -C 可以禁止覆盖已有文件,防止误操作。需要覆盖时用 >|

2. 输入重定向:从文件读取

  • command < file:从文件读取输入。

  • tr 'a-z' 'A-Z' < file:将文件内容从小写转为大写(tr 命令默认从标准输入读取)。

3. 管道:串联命令的魔法

管道用 | 连接,把左边命令的输出作为右边命令的输入。

cat /var/log/syslog | grep "error" | head -20

这条命令的意思是:读取日志 → 筛选出包含 error 的行 → 只显示前 20 行。

实用组合

  • history | grep ssh:查找历史中所有 ssh 相关的命令。

  • ls -l /etc | wc -l:统计 /etc 下有多少个文件。

  • du -sh /* | sort -rh | head -5:找出根目录下占用空间最大的 5 个目录。

4. tee:一边输出一边保存

command | tee file

把命令的结果同时显示在屏幕并保存到文件里。调试时特别好用。

5. xargs:把文本变成命令参数

当管道传递的是文本行,而你需要把它们作为参数传给另一个命令时,用 xargs

find /tmp -name "*.tmp" | xargs rm -f

这条命令会找到 /tmp 下所有 .tmp 文件,然后删除它们。注意:xargs 默认会把输入按空格或换行分割,如果文件名包含空格可能会出错,可以用 -0 配合 find ... -print0 处理。

6. 特殊设备:/dev/null

这是一个“黑洞”,所有写入它的数据都会被丢弃。常用于屏蔽不需要的输出:

command &> /dev/null   # 安静执行,不产生任何输出

六、变量的简单认识

在 bash 中,变量就是一块命名的内存空间。你可以用它来存储值,方便复用。

name="world"
echo "Hello, $name"   # 输出 Hello, world

变量的引用方式:

  • $name${name}:弱引用,变量会被展开。

  • '$name':强引用,原样输出 $name 字符串。

  • `command`$(command):命令替换,执行命令并用其输出替换。

实操echo "Today is $(date)",看看输出。

七、命令的执行状态

每条命令执行后都会返回一个状态码:0 表示成功,非 0 表示失败。这个状态码保存在特殊变量 $? 中。

ls /nonexist
echo $?   # 输出非 0,表示上一个命令失败了

在写脚本时,可以通过检查 $? 来决定下一步操作。

八、踩坑经验汇总

  1. 误删文件:永远不要在不确定的情况下执行 rm -rf。建议先 ls 确认,或者用 mv 移到临时目录。

  2. 管道丢失数据:有些命令(如 grep)默认是缓冲输出的,可能导致管道下游迟迟收不到数据。可以用 --line-buffered 选项强制行缓冲。

  3. 通配符没展开:如果文件名里有空格,通配符展开后可能被拆成多个参数。尽量用引号包裹变量,或用 find ... -exec 替代。

  4. 重定向顺序错误command 2>&1 > file 是错误的,正确顺序是 command > file 2>&1。因为重定向是从左到右解析的。

  5. tail -f 看不到新内容:如果日志文件被轮替(logrotate)重命名了,tail -f 盯着的还是旧文件的 inode,不会跟踪新文件。这时要用 tail -F(大写 F)。

总结

这篇文章涵盖了你在 Linux 终端里最常用的基本功:命令补全与历史、文件管理、内容查看、通配符、IO 重定向与管道。这些技能单个看起来都很简单,但组合起来威力巨大。