当前位置:首页>Linux>Linux 从0到1 : 03 · 文件与目录操作

Linux 从0到1 : 03 · 文件与目录操作

  • 2026-09-14 08:16:05
Linux 从0到1 : 03 · 文件与目录操作
  欢迎来到罐子的实验室
    今天来学习文件与目录操作

    本次目标 :

    掌握文件与目录的「增、删、改、查、找、链接」全套基本操作。这是你日后用得最多的一组命令。

学完你能做什么:

  • 用 cat 查看文件内容、用 ls 列目录
  • 用 touch/mkdir 创建文件和目录
  • 用 rm/mv/cp 删除、移动、复制
  • 用 find 在文件系统里找人(找文件)
  • 理解软链接/硬链接,会用 ln -s
  • 知道什么是「隐藏文件」

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 ...

常用选项

选项
作用
-l
长格式,显示权限、所有者、大小、时间
-a
显示所有文件,包括以 . 开头的隐藏文件
-h
配合 -l,用人类可读的大小(K/M/G)
-R
递归列出子目录

最经典的组合: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
选项
作用
-r
递归删除(删目录及其内容,必加否则删不了目录)
-f
强制,不问确认
-i
删之前逐个问你确认(更安全)

⚠️ 血泪警告: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
选项
作用
-r
递归复制(复制目录必加)
-i
目标存在时问你确认
-v
显示正在复制什么

动手练习 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:做个快捷方式

任务:

  1. 创建文件 config.txt,内容是 port=8080。
  2. 在同目录建一个软链接 cfg 指向它。
  3. 通过 cfg 读取内容确认。

参考答案:

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
、cat a b
ls
列目录
ls -lah
、ls /etc
touch
创建空文件 / 更新时间
touch new.txt
mkdir
建目录
mkdir -p a/b/c
rm
删除
rm file
、rm -r dir
mv
移动 / 重命名
mv old new
cp
复制
cp a b
、cp -r dir1 dir2
find
查找
find . -name "*.txt"
ln -s
软链接
ln -s 源 链接
file
查文件类型
file something

危险操作备忘

命令
风险
建议
rm -rf
不可恢复删除
删前先 ls 确认
rm -rf *
删光当前目录
慎用通配符配合 rm
rm
 带变量
变量为空时可能删错
关键操作先 echo 看变量

下一步

你已经能搬运文件了。但记住命令很累——其实 Linux 自带「说明书」,你随时可以查。

最新文章

随机文章