CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Shell 与 Bash 入门/课时/目录与文件导航
RawBlame
课时目录12 节

Shell 与 Bash 入门

  1. 01Shell 是什么
  2. 02目录与文件导航
  3. 03文件操作与权限
  4. 04管道与文本处理
  5. 05变量与字符串
  6. 06条件与循环
  7. 07函数与脚本结构
  8. 08正则表达式
  9. 09进程与定时任务
  10. 10网络命令
  11. 11系统管理与编辑器
  12. 12综合练习

目录与文件导航

pwd、cd、ls、find、mkdir。

30 分钟

目录与文件导航

这一课你将能做到

  1. 用 pwd / cd / ls 三件套在任意目录结构中自由移动并看清周围有什么
  2. 区分绝对路径与相对路径,熟练使用 .、..、~、- 四个特殊路径
  3. 用 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 的意思是把报错(比如无权访问的目录)扔进黑洞,只留干净结果。

讲清楚要点

  1. 绝对路径以 / 开头,相对路径以非 / 开头:绝对路径像快递填「XX 省 XX 市」,从哪寄都一样;相对路径像「隔壁那栋楼」,取决于你现在站哪。写脚本优先用绝对路径,避免「在哪运行结果不一样」。
  2. ls -l 输出的第一列是权限:-rw-r--r-- 里的第一个字符 - 是文件、d 是目录、l 是软链接。权限细节第 3 课展开。
  3. 隐藏文件就是 . 开头的文件:~/.bashrc 是你的个人配置,改它可以让 alias、PATH 每次登录生效。ls 看不到它,必须 ls -a。
  4. Tab 补全不仅是省事,更是防错:路径敲错是初学者命令失败的第一大原因,Tab 补全补出来的路径一定是真实存在的。
  5. find 的 -exec ... {} \; 是「找到就处理」:{} 是占位符代表找到的每个文件,常配 ls -lh、rm、gzip 使用。第 12 课综合练习里会反复出现。
  6. 生产服务器上谨慎用全盘 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 同样的路径模式看一遍

卡点急救

  1. cd 进不去目录:目录缺 x(进入)权限,ls -ld 目录名 看权限,找属主或 sudo。第 3 课会讲权限位怎么改。
  2. find 输出大量 Permission denied:加 2>/dev/null 丢弃错误流;或者干脆 sudo 运行。
  3. 中文文件名乱码: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 立即生效,否则要重新登录。

自测三问

  1. 从任意位置一步进入自己的家目录,有几种写法?
  2. ls -lht 中每个选项分别是什么意思?
  3. 找出 /opt/myapp/logs 下 7 天前的 .log 文件,命令怎么写?

小结一句话

pwd 定位、cd 移动、ls 观察、find 搜索,四个动作让你在服务器文件系统里永不迷路。

延伸

  • GNU Coreutils 官方手册
  • 下一课:文件操作与权限——复制移动删除,以及 chmod 数字背后的面试高频考点。
加载本节练习…
← 上一课Shell 是什么下一课 →文件操作与权限