欢迎来到罐子的实验室
本次目标 :
掌握文件与目录的「增、删、改、查、找、链接」全套基本操作。这是你日后用得最多的一组命令。学完你能做什么:
1. 查看文件内容:cat
cat(concatenate,拼接)最常用的功能是把文件内容打印到屏幕:
user@host:~$ cat /etc/hostnamemyhost
它一次能看多个文件,按顺序拼起来:
user@host:~$ echo Hello > a.txtuser@host:~$ echo World > b.txtuser@host:~$ cat a.txt b.txtHelloWorld
💡 > 是「输出重定向」,把命令的输出写进文件而不是显示在屏幕上,详见《06》。这里先用它造测试文件。
动手练习 1:看你的身份文件
任务:用 cat 查看 /etc/passwd 的开头部分(这个文件记录了系统所有用户)。文件可能很长,直接 cat 会刷屏——结合《模块 07》的 head 更好,但现在先直接看。
思路引导:cat /etc/passwd。
参考答案:
user@host:~$ cat /etc/passwdroot:x:0:0:root:/root:/bin/bashdaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin...user:x:1000:1000::/home/user:/bin/bash
常见错误:
- ❌
cat 一个二进制文件(如图片、可执行程序)——屏幕会变成乱码。查文件类型用 file 文件名。
2. 列出目录内容:ls
ls(list)列出目录里有什么。不给参数就列当前目录:
user@host:~$ lsDesktop Documents Downloads Music Pictures
给它一个目录路径作为参数,就列那个目录:
user@host:~$ ls /etcfstab hostname hosts passwd shadow ...
常用选项
最经典的组合:ls -lah(长格式 + 全部 + 友好大小)。
user@host:~$ ls -lahtotal 24Kdrwxr-xr-x 4 user user 4.0K Jun 30 18:00 .drwxr-xr-x 3 root root 4.0K Jun 28 09:00 ..-rw-r--r-- 1 user user 220 Jun 30 18:00 .bashrcdrwxr-xr-x 2 user user 4.0K Jun 30 18:00 Documents
动手练习 2:看清细节
任务:用长格式列出 /etc 目录,找出最大的几个文件(看 size 那一列)。
思路引导:ls -lh /etc,size 在第 5 列。
参考答案:
user@host:~$ ls -lh /etctotal 1.2M-rw-r--r-- 1 root root 44K Jun 30 10:00 services-rw-r--r-- 1 root root 3.0K Jun 30 10:00 passwd...
常见错误:嫌 ls 输出挤在一起——加 -l 立刻清爽。
3. 创建文件:touch
touch 原本的作用是「更新文件的时间戳」,但它有个副作用被广泛使用:文件不存在就创建一个空文件。
user@host:~$ cd ~/linux-practice# 先建个练习目录user@host:~/linux-practice$ touch note.txtuser@host:~/linux-practice$ lsnote.txtuser@host:~/linux-practice$ touch note.txt# 再 touch 一次,文件还在,只是更新时间user@host:~/linux-practice$ ls -l note.txt-rw-r--r-- 1 user user 0 Jun 30 18:05 note.txt# 注意 size 是 0,空文件
动手练习 3:批量建文件
任务:在练习目录里创建 a.txt、b.txt、c.txt 三个空文件。
思路引导:touch 可以一次接多个参数。
参考答案:
user@host:~/linux-practice$ touch a.txt b.txt c.txtuser@host:~/linux-practice$ lsa.txt b.txt c.txt note.txt
4. 删除文件:rm
rm(remove)删除文件。删除后无法从回收站恢复,要小心。
user@host:~/linux-practice$ rm a.txtuser@host:~/linux-practice$ lsb.txt c.txt note.txt
⚠️ 血泪警告:rm -rf 路径 是「删库跑路」专用——它会无提示、不可恢复地删掉你指定的一切。绝对不要在你不完全确定的路径上用 rm -rf,尤其是带通配符的时候(→ 详见《 14》)。养成「先 ls 看清楚再 rm」的习惯。
动手练习 4:清理练习
任务:删除刚建的 b.txt 和 c.txt。
参考答案:
user@host:~/linux-practice$ rm b.txt c.txtuser@host:~/linux-practice$ lsnote.txt
常见错误:
- ❌
rm somedir(somdir 是目录)——报 rm: cannot remove 'somedir': Is a directory。删目录要加 -r:rm -r somedir。
5. 移动 / 重命名:mv
mv(move)既能移动文件到别处,也能重命名(本质都是改路径)。
# 重命名user@host:~/linux-practice$ mv note.txt todo.txtuser@host:~/linux-practice$ lstodo.txt# 移动到别处user@host:~/linux-practice$ mkdir archiveuser@host:~/linux-practice$ mv todo.txt archive/user@host:~/linux-practice$ ls archive/todo.txt
mv 源 目标:
动手练习 5:归档
任务:把 archive/todo.txt 移回练习目录并改名为 done.txt。
参考答案:
user@host:~/linux-practice$ mv archive/todo.txt ./done.txtuser@host:~/linux-practice$ lsarchive done.txt
常见错误:mv a b c dest/ 把多个文件移到目录——可以,但最后一个参数必须是已存在的目录。
6. 复制:cp
cp(copy)和 mv 用法一样,但保留源文件。
user@host:~/linux-practice$ cp done.txt backup.txtuser@host:~/linux-practice$ lsarchive backup.txt done.txt
动手练习 6:备份整个目录
任务:把 archive 目录复制一份叫 archive_backup。
思路引导:复制目录要加 -r。
参考答案:
user@host:~/linux-practice$ cp -r archive archive_backupuser@host:~/linux-practice$ lsarchive archive_backup backup.txt done.txt
常见错误:复制目录忘了 -r → cp: -r not specified; omitting directory 'archive'。
7. 创建目录:mkdir
mkdir(make directory)建目录。
user@host:~/linux-practice$ mkdir photos
| |
|---|
-p | 连父目录一起建(没有就创建),且目录已存在时不报错 |
-p 非常有用,能一次建多层:
user@host:~/linux-practice$ mkdir -p a/b/c/d# 一次性建出四层嵌套
不加 -p 的话,a 不存在就报错。
动手练习 7:建嵌套结构
任务:在练习目录下建 projects/2024/q1 这三层目录。
参考答案:
user@host:~/linux-practice$ mkdir -p projects/2024/q1user@host:~/linux-practice$ ls -R projectsprojects:2024projects/2024:q1projects/2024/q1:
8. 查找文件:find
文件多了,光靠 ls 不够。find 是「按条件搜索文件」的利器。
最简单的形式:find 起始目录 会列出该目录下所有文件和子目录:
user@host:~/linux-practice$ find../archive./archive/todo.txt./done.txt./backup.txt
(不写起始目录,默认从当前目录开始。)
按名字找
user@host:~/linux-practice$ find -name done.txt./done.txtuser@host:~/linux-practice$ find -name ”*.txt”# 所有 .txt 文件./archive/todo.txt./done.txt./backup.txt
在整个系统找
user@host:~$ find / -name passwd/etc/passwd/usr/share/base-files/passwdfind: '/proc/...': Permission denied# 这些报错可以忽略
💡 在 / 下找会有大量 Permission denied,是因为很多系统目录普通用户进不去。要么忽略,要么 find / -name xxx 2>/dev/null 把错误丢掉(2> 详见《06》)。
动手练习 8:大海捞针
任务:在你的家目录下找出所有扩展名为 .txt 的文件。
思路引导:find ~ -name "*.txt"。注意 *.txt 要加引号,否则会被 Shell 提前展开。
参考答案:
user@host:~$ find ~ -name ”*.txt”/home/user/linux-practice/archive/todo.txt/home/user/linux-practice/done.txt/home/user/linux-practice/backup.txt
常见错误:
- ❌
find -name *.txt(没引号)——如果当前目录恰好有 .txt 文件,Shell 会把 *.txt 替换成具体文件名,find 就变成只找那一个了。永远给 find 的模式加引号。
9. 隐藏文件
Linux 有个约定:文件名以 . 开头的文件,默认不显示。这些叫「隐藏文件」或「点文件」。配置文件常用这种命名,比如 .bashrc、.gitignore。
user@host:~/linux-practice$ touch .secretuser@host:~/linux-practice$ ls# 看不到 .secretarchive backup.txt done.txtuser@host:~/linux-practice$ ls -a# -a = all,能看到了. .. .secret archive backup.txt done.txt
注意 ls -a 还会显示 .(当前目录)和 ..(上级目录),它们也是「点开头」的。
动手练习 9:找出隐藏的
任务:查看你的家目录里有哪些隐藏文件。
参考答案:
user@host:~$ ls -a ~. .bashrc .cache .config .profile .bash_history.. .local Documents Downloads ...
这些 .bashrc、.profile 是 Shell 启动时读取的配置(→ 详见《 08》《14》)。
10. 链接:ln
有时你希望两个路径指向同一份数据——比如某个文件你既想在 A 目录访问,又想在 B 目录访问,又不想复制两份。Linux 用**链接(link)**解决。
链接分两种:
| | |
|---|
| 硬链接(hard link) | | ln 源 链接名 |
| 软链接 / 符号链接(symbolic link / symlink) | 一个门牌上写着「请去 X 街 Y 号」,是「指向」 | ln -s 源 链接名 |
实际中软链接用得远比硬链接多,因为它跨目录、跨文件系统都能用,也更直观。
user@host:~/linux-practice$ echo ”important data” > original.txtuser@host:~/linux-practice$ ln -s original.txt shortcut.txtuser@host:~/linux-practice$ cat shortcut.txt# 通过软链接读到了源文件important datauser@host:~/linux-practice$ ls -l shortcut.txtlrwxrwxrwx 1 user user 12 Jun 30 18:10 shortcut.txt -> original.txt
ls -l 看软链接,权限开头的 l(link)和末尾的 -> original.txt 都暴露了它的身份。
用 file 命令也能识别:
user@host:~/linux-practice$ file shortcut.txtshortcut.txt: symbolic link to original.txt
⚠️ 注意参数顺序:ln -s 源 链接,源在前!顺序反了会让很多人困惑。
动手练习 10:做个快捷方式
任务:
- 创建文件
config.txt,内容是 port=8080。
参考答案:
user@host:~/linux-practice$ echo ”port=8080” > config.txtuser@host:~/linux-practice$ ln -s config.txt cfguser@host:~/linux-practice$ cat cfgport=8080user@host:~/linux-practice$ ls -l cfglrwxrwxrwx 1 user user 9 Jun 30 18:11 cfg -> config.txt
常见错误:
- ❌ 删了源文件,软链接变成「悬空链接」——
cat 会报 No such file or directory,因为目标没了。 - ❌ 顺序写反
ln -s cfg config.txt——创建了反向的链接,行为混乱。记住:源在前。
速查表
| | |
|---|
cat | | cat file |
ls | | ls -lah |
touch | | touch new.txt |
mkdir | | mkdir -p a/b/c |
rm | | rm file |
mv | | mv old new |
cp | | cp a b |
find | | find . -name "*.txt" |
ln -s | | ln -s 源 链接 |
file | | file something |
危险操作备忘
下一步
你已经能搬运文件了。但记住命令很累——其实 Linux 自带「说明书」,你随时可以查。