大家好,我是程序员柏风,AI 最全的 Vibecoding 学习地图 http://coderoadmap.cn 作者。
目录与文件导航
这一课你将能做到
- 用 pwd / cd / ls 三件套在任意目录结构中自由移动并看清周围有什么
- 区分绝对路径与相对路径,熟练使用
.、..、~、-四个特殊路径 - 用 find 按名字、大小、时间定位文件,比如找出占满磁盘的大日志
为什么要学
Linux 一切皆文件:配置是文件、日志是文件、设备也是文件。你登上一台陌生服务器排查问题,第一件事就是在文件系统里找到「案发现场」——Nginx 配置在哪、Spring Boot 日志在哪、MySQL 数据目录还剩多少空间。找不到文件,后面所有操作都是空谈。
人话:这就像在陌生城市找路。pwd 是「我现在在哪」,ls 是「周围有什么」,cd 是「我要去哪」,find 是「帮我搜一搜那个东西在哪」。这四个动作熟练了,你永远不会在服务器里迷路。
先建立图像
Linux 目录是一棵从 / 出发的倒挂树:
/
├── etc/ ← 系统配置(nginx.conf 在这附近)
│ └── nginx/
├── opt/ ← 第三方软件常放这(/opt/myapp)
│ └── myapp/
│ ├── app.jar
│ └── logs/
│ └── app.log
├── home/
│ └── deploy/ ← 普通用户家目录,~ 就指这里
├── var/
│ └── log/ ← 系统日志大本营
└── tmp/ ← 临时文件,重启可能清空
路径的四种写法(假设你当前在 /home/deploy):
| 写法 | 含义 | 完整指向 |
|---|---|---|
| /opt/myapp/app.jar | 绝对路径,从根写起 | 永远不变 |
| ./a.sh 或 a.sh | 当前目录下 | /home/deploy/a.sh |
| ../deploy | 上一级的 deploy | /home/deploy |
| ~/shell-lab | 家目录下的 shell-lab | /home/deploy/shell-lab |
跟着做
步骤 1:搭建一个练习树
mkdir -p ~/nav-lab/opt/myapp/logs ~/nav-lab/var/log
cd ~/nav-lab
echo "hello" > opt/myapp/app.jar
echo "ERROR oom" > opt/myapp/logs/app.log
echo "system log" > var/log/messages.txt
mkdir -p 可以一次创建多级目录,相当于 mkdir -p 递归模式。
步骤 2:看清当前位置和周围
pwd # 输出 /home/你的用户名/nav-lab
ls # opt var
ls -l # 长格式:权限、属主、大小、时间
ls -a # 显示隐藏文件(以 . 开头,如 .bashrc)
ls -lh # h 让大小变成 K/M/G 可读格式,运维必用
ls -lt # 按修改时间倒序,最新改的排最前
组合技:ls -lht 是「按时间倒序 + 可读大小」,看最近改过哪个配置文件极快。
步骤 3:四个特殊路径与 cd 技巧
cd opt/myapp # 相对路径进入
cd .. # 退回上一级
cd - # 回到上一个待过的目录(来回横跳神器)
cd # 什么参数都不带,直接回家 ~
cd /opt # 绝对路径,一步到位
Tab 键补全必须练成肌肉记忆:输入 cd op 按 Tab 自动补成 opt/,输入 cd opt/my 按 Tab 补成 myapp/。补全不唯一时按两下 Tab 列出候选。
步骤 4:tree 一览全貌
tree ~/nav-lab
# 没有就装:sudo apt install tree(Ubuntu)或 yum install tree(CentOS)
输出:
/home/deploy/nav-lab
├── opt
│ └── myapp
│ ├── app.jar
│ └── logs
│ └── app.log
└── var
└── log
└── messages.txt
步骤 5:find 按条件搜文件
# 按名字搜(* 是通配符,-iname 忽略大小写)
find ~/nav-lab -name "*.log"
find / -iname "nginx.conf" 2>/dev/null # 全盘搜,错误信息丢弃
# 找出 100MB 以上的大文件——磁盘告警时第一反应
find /var/log -type f -size +100M -exec ls -lh {} \;
# 找 7 天没动过的文件——清理旧日志
find /opt/myapp/logs -mtime +7 -name "*.log"
# 找目录:-type d;找空目录可以 -empty
find ~/nav-lab -type d
2>/dev/null 的意思是把报错(比如无权访问的目录)扔进黑洞,只留干净结果。
讲清楚要点
- 绝对路径以
/开头,相对路径以非/开头:绝对路径像快递填「XX 省 XX 市」,从哪寄都一样;相对路径像「隔壁那栋楼」,取决于你现在站哪。写脚本优先用绝对路径,避免「在哪运行结果不一样」。 ls -l输出的第一列是权限:-rw-r--r--里的第一个字符-是文件、d是目录、l是软链接。权限细节第 3 课展开。- 隐藏文件就是
.开头的文件:~/.bashrc是你的个人配置,改它可以让 alias、PATH 每次登录生效。ls看不到它,必须ls -a。 - Tab 补全不仅是省事,更是防错:路径敲错是初学者命令失败的第一大原因,Tab 补全补出来的路径一定是真实存在的。
- find 的
-exec ... {} \;是「找到就处理」:{}是占位符代表找到的每个文件,常配ls -lh、rm、gzip使用。第 12 课综合练习里会反复出现。 - 生产服务器上谨慎用全盘 find:
find /会扫所有挂载点,磁盘大时耗时长、IO 高。先缩小范围到/var、/opt这类可疑目录。
你可能会懵的地方
-
cd ..和cd -到底差在哪?..是目录树里的上一级,是结构概念;-是你刚才待过的上一个目录,是历史概念。从/etc跳到/var/log后,cd -回/etc,而cd ..回到/var。 -
为什么有的命令前面要加
sudo? 普通用户只能动自己权限内的文件。/var/log、/etc下的很多内容属于 root,读取修改都需要临时提权。别长期用 root 登录,需要时sudo一下,出了事有据可查。 -
2>/dev/null那个 2 是什么? 每个进程有三个标准流:0 标准输入、1 标准输出、2 标准错误。2>就是重定向错误流,/dev/null是系统黑洞设备。第 4 课管道部分会正式讲重定向。 -
tree 和 ls 该什么时候用哪个? 看一层用
ls(快),看整体结构用tree -L 2(-L 2只展开两层,避免大目录刷屏)。 -
find 结果太多刷屏怎么办? 接管道裁剪:
find /var/log -type f -size +100M | head -20,或者| wc -l先数数量再决定怎么处理。
错法对照
| 错法 | 问题 | 正解 |
|---|---|---|
cd opt(想在 /opt 但没加 /) | 被解析成相对路径,报 No such file | 去别的地方用绝对路径 cd /opt |
mkdir a/b/c 但父目录不存在 | 报错退出 | mkdir -p a/b/c |
ls *.log 想搜全盘 | 只搜当前目录 | 用 find /path -name "*.log" |
脚本里写相对路径 logs/app.log | 换个目录运行就找不到 | 脚本内基于 $0 或写绝对路径 |
rm 前不 ls 确认 | 删错文件无法恢复 | 删之前先 ls 同样的路径模式看一遍 |
卡点急救
- cd 进不去目录:目录缺
x(进入)权限,ls -ld 目录名看权限,找属主或 sudo。第 3 课会讲权限位怎么改。 - find 输出大量 Permission denied:加
2>/dev/null丢弃错误流;或者干脆 sudo 运行。 - 中文文件名乱码:SSH 终端编码设为 UTF-8;文件名本身乱码可用
ls -b或find . -inum 编号 -exec mv {} 新名 \;处理。
面试常问
-
绝对路径和相对路径的区别?脚本里该用哪个? 绝对路径从根
/出发,与当前位置无关;相对路径相对当前工作目录。脚本里应使用绝对路径,或在脚本开头cd "$(dirname "$0")"固定工作目录,否则被 crontab 等不同上下文调用时路径解析会不一致。 -
怎么快速找出 Linux 上占空间最大的文件?
du -ah /var | sort -rh | head -20(按大小倒序取前 20),或find /var -type f -size +500M -exec ls -lh {} \;。排查「磁盘满了导致 MySQL 写不进数据」这类故障时是标准动作。 -
.bashrc是干什么的?改了怎么生效? 用户级 Shell 配置文件,每次启动交互式 Shell 时读取,常用于定义 alias、环境变量、PATH。修改后用source ~/.bashrc立即生效,否则要重新登录。
自测三问
- 从任意位置一步进入自己的家目录,有几种写法?
ls -lht中每个选项分别是什么意思?- 找出
/opt/myapp/logs下 7 天前的.log文件,命令怎么写?
小结一句话
pwd 定位、cd 移动、ls 观察、find 搜索,四个动作让你在服务器文件系统里永不迷路。
延伸
- GNU Coreutils 官方手册
- 下一课:文件操作与权限——复制移动删除,以及 chmod 数字背后的面试高频考点。