共计 2946 个字符,预计需要花费 8 分钟才能阅读完成。
文章目录[显示]
如果你刚接触 Linux 或 macOS 终端,面对那个黑底白字的窗口,多少会有点发怵。别担心,这篇文章会带你从最基础的文件和目录操作开始,一步步摸清终端的脾气。读完之后,你至少能在命令行里自如地浏览目录、创建文件、复制移动、删除清理——这些操作占了日常终端使用的大半。
先搞清楚你在哪:pwd
打开终端,第一件事往往是搞清楚自己当前所在的位置。pwd 就是干这个的,全称是 Print Working Directory(打印工作目录)。
pwd
# 输出示例:/home/username
它没有花哨的参数,就是老老实实告诉你 " 你现在站在文件系统的哪个位置 "。看起来简单,但在你敲了一堆 cd 跳来跳去之后,pwd 能帮你快速定位自己,避免在错误的目录里执行危险操作。
四处逛逛:cd
知道自己在哪之后,自然要学会移动。cd 是 Change Directory 的缩写,用来切换目录。
cd /etc # 跳到 /etc 目录
cd Documents # 进入当前目录下的 Documents 文件夹
cd .. # 回到上一级目录
cd ~ # 回到家目录(你的 "老巢")cd - # 回到上一次待过的目录
这里要插一句关于 绝对路径 和相对路径 的事,因为这个概念贯穿所有文件操作命令。
绝对路径 vs 相对路径
绝对路径从根目录 / 开始写,像门牌号一样完整无歧义:/home/username/Documents/report.txt。不管你当前在哪个目录,用绝对路径永远能准确定位到目标。
相对路径则以当前目录为起点。如果你正站在 /home/username,那 Documents/report.txt 就够了。这里有两个特殊符号要记住:. 代表当前目录,.. 代表上一级目录。
怎么选?坦白说,日常操作用相对路径更省事,但在写脚本或配置文件时,绝对路径更靠谱——因为脚本可能在任何目录下被执行。
看看有什么:ls
cd 到一个目录后,你需要知道里面有什么。ls(list 的缩写)是你用得最多的命令之一。
ls # 列出当前目录内容
ls -l # 长格式显示(权限、大小、修改时间等)ls -a # 显示隐藏文件(以 . 开头的文件)ls -la # 两个参数组合使用
ls -lh # -h 让文件大小显示为人类可读格式(KB、MB)ls /var/log # 查看指定目录的内容
ls -la 大概是我个人敲得最多的组合。它能让你一眼看到目录里 所有 文件(包括隐藏的配置文件),以及每个文件的权限、所有者和修改时间。
创建目录:mkdir
浏览够了,开始动手创建东西。mkdir(Make Directory)用来新建文件夹。
mkdir projects # 创建一个目录
mkdir -p projects/web/css # 一次性创建多层嵌套目录
-p 参数非常实用。没有它,如果中间层目录不存在,命令会直接报错。加上 -p,它会把缺失的中间目录一并创建,省得你一层一层 mkdir。
创建文件:touch
touch 最常见的用途是快速创建一个空文件。
touch notes.txt
touch file1.txt file2.txt file3.txt # 一次创建多个
严格来说,touch 的本职工作是更新文件的时间戳。如果文件已经存在,它不会清空内容,只会刷新修改时间。但大家用得最多的场景还是 " 快速建个空文件 "。
复制:cp
cp(Copy)的基本用法很直观——从哪里复制到哪里。
cp report.txt report_backup.txt # 复制文件并重命名
cp report.txt ~/Documents/ # 复制到指定目录
cp -r projects projects_backup # 复制整个目录
注意那个 -r(recursive,递归)。复制目录时必须加上它,否则 cp 会拒绝执行——这其实是个保护机制,防止你无意中复制了一大堆不需要的东西。
还有个 -i 参数值得一提,它会在覆盖已有文件前先问你一声:
cp -i report.txt ~/Documents/
# 如果目标位置已有同名文件,会提示:overwrite? (y/n)
移动和重命名:mv
mv(Move)做两件事:移动文件,以及重命名文件。
mv report.txt ~/Documents/ # 移动文件
mv old_name.txt new_name.txt # 重命名
mv *.txt archive/ # 把所有 txt 文件移到 archive 目录
你会发现 " 重命名 " 在 Linux 里并没有专门的命令,mv 一肩两挑。逻辑上也说得通:把一个文件从 " 旧名字 " 移动到 " 新名字 ",效果就是重命名。
mv 和 cp 一样,支持 -i 参数来避免意外覆盖。建议养成习惯,对重要文件操作时带上它。
删除:rm 和 rmdir
讲真,rm 是终端里最需要敬畏的命令。Linux 没有回收站这个概念,rm 删掉的东西基本找不回来。
rm notes.txt # 删除文件
rm -i notes.txt # 删除前确认
rm -r old_project # 删除目录及其所有内容
rmdir 是 rm 的 " 温柔版 ",只能删除 空目录:
rmdir empty_folder # 只有目录为空时才能成功
如果目录里有东西,rmdir 会直接报错拒绝执行。这个设计是故意的——它比 rm -r 安全得多。
关于 rm -rf,你可能在网上见过各种段子。这个组合的意思是 " 递归删除且不询问确认 ",威力巨大。在你对命令行足够熟悉之前,不要轻易使用它,尤其不要在根目录附近运行。
通配符:批量操作的利器
到这里,单个文件的操作你已经掌握了。但如果目录里有 200 个文件,你总不能一个一个敲名字。通配符就是解决这个问题的。
| 通配符 | 含义 | 示例 |
|---|---|---|
* |
匹配任意数量的任意字符 | *.txt 匹配所有 txt 文件 |
? |
匹配单个任意字符 | file?.txt 匹配 file1.txt、fileA.txt |
[abc] |
匹配方括号内的任意一个字符 | file[123].txt 匹配 file1.txt、file2.txt、file3.txt |
[0-9] |
匹配范围内的任意一个字符 | log[0-9].txt 匹配 log0.txt 到 log9.txt |
实际用起来是这样的:
ls *.log # 列出所有日志文件
cp *.jpg ~/Pictures/ # 把所有 jpg 图片复制到 Pictures
rm temp_* # 删除所有以 temp_ 开头的文件
mv report_202?.pdf archive/ # 移动 report_2020.pdf 到 report_2029.pdf
通配符是 Shell 在执行命令 之前 展开的,也就是说 ls *.txt 实际上会被 Shell 先翻译成 ls file1.txt file2.txt file3.txt ...,然后再交给 ls 执行。理解这一点,你就能明白为什么通配符几乎在所有命令里都能用——它不是某个命令的专属功能,而是 Shell 本身的能力。
一些实用建议
善用 Tab 键补全。 输入文件名或路径时,敲几个开头字母然后按 Tab,Shell 会自动补全。这不只是省力,还能帮你避免拼写错误。
删除前先用 ls 验证。 比如你打算执行 rm *.log,不妨先跑一下 ls *.log,确认匹配到的文件确实是你想删的。
复杂操作先在测试目录练手。 建个 ~/playground 目录,在里面随便折腾,哪怕全删了也不心疼。
这些命令看着简单,但组合起来能完成相当复杂的文件管理任务。先把每个命令的基本用法记住,然后在日常使用中慢慢摸索参数和技巧。命令行这东西,用得越多手感越好,不用死记硬背——敲多了自然就记住了。