4. 目录操作命令(上)
各位好,今天我们进入目录操作的核心环节。说实话,目录操作是Linux运维的"基本功中的基本功"。我见过不少新手,甚至有些工作一两年的同事,在这些基础命令上栽过跟头。今天咱们就把pwd、cd、ls、mkdir、rmdir这五个命令彻底讲透。
4.1 pwd:你在哪?
pwd 全称是 Print Working Directory,说白了就是"打印当前工作目录"。你打开终端,总得知道自己站在哪个位置吧?
基本用法:
$ pwd
/home/zhangsan/projects
我个人习惯在写脚本时,第一件事就是 pwd 确认路径。为什么?因为脚本里一旦路径写错,后面全白干。
小技巧: 在Shell脚本中,可以用 $(pwd) 获取当前路径并赋值给变量:
CURRENT_DIR=$(pwd)
echo "当前工作目录: $CURRENT_DIR"
4.2 cd:想去哪?
cd 是 Change Directory 的缩写。这个命令太常用了,但你真的会用吗?
| 用法 | 说明 | 示例 |
|---|---|---|
cd 或 cd ~ |
回到当前用户的家目录 | cd |
cd - |
回到上一个目录 | cd - |
cd .. |
回到上一级目录 | cd .. |
cd ../.. |
回到上两级目录 | cd ../.. |
cd / |
回到根目录 | cd / |
嗯,这里要注意一个坑:cd 后面跟的是绝对路径还是相对路径?绝对路径以 / 开头,相对路径不以 / 开头。我曾经见过同事在脚本里写 cd projects,结果当前目录不对,脚本直接报错。
避坑指南: 在脚本中使用 cd 时,建议先判断目录是否存在:
if [ -d "/var/log/app" ]; then
cd /var/log/app
else
echo "目录不存在,退出"
exit 1
fi
4.3 ls:看看都有啥
ls 是 List 的缩写。这个命令参数很多,我挑几个最实用的说。
常用参数组合:
# 最常用:显示详细信息,人类可读大小
ls -lh
# 显示隐藏文件(以.开头的文件)
ls -la
# 按时间排序,最新的在最上面
ls -lt
# 递归显示子目录
ls -R
我在项目中遇到过一个问题:服务器磁盘快满了,想找大文件。用 ls -lhS 按文件大小排序,一下就定位到了几个日志文件。你想想看,如果没有这个参数,你得一个个文件看大小,多累啊。
| 参数 | 含义 | 实战场景 |
|---|---|---|
-l |
长格式显示 | 查看权限、所有者、大小、修改时间 |
-h |
人类可读大小 | 显示 1K、2M、3G 而不是字节数 |
-t |
按修改时间排序 | 找最近修改的文件 |
-S |
按文件大小排序 | 找大文件清理磁盘 |
4.4 mkdir:创建目录
mkdir 是 Make Directory 的缩写。这个命令看似简单,但有个参数我特别推荐——-p。
核心用法:
# 创建单层目录
mkdir logs
# 创建多层目录(父目录不存在时自动创建)
mkdir -p /var/log/app/2024/01
# 创建目录并设置权限
mkdir -m 755 secure_dir
为什么我强调 -p?因为在实际运维中,你经常需要一次性创建多级目录。比如部署新应用时,日志目录结构可能是 /var/log/app/2024/01。如果没有 -p,你得一层层创建,太麻烦了。
个人经验: 在自动化脚本中,我习惯这样写:
mkdir -p /data/{logs,backups,configs}/{app1,app2}
# 这会创建:
# /data/logs/app1
# /data/logs/app2
# /data/backups/app1
# /data/backups/app2
# /data/configs/app1
# /data/configs/app2
用花括号展开,一行命令创建6个目录,效率翻倍。
4.5 rmdir:删除空目录
rmdir 是 Remove Directory 的缩写。注意,它只能删除空目录。如果目录里有文件,它会报错。
基本用法:
# 删除空目录
rmdir empty_dir
# 删除空目录树(类似 mkdir -p 的反向操作)
rmdir -p /var/log/app/2024/01
我曾经犯过一个错:想删除一个目录,用了 rmdir,结果报错说目录非空。当时我还纳闷,明明看着是空的啊。后来才发现,目录里有个隐藏文件 .gitkeep。嗯,所以用 rmdir 之前,最好先用 ls -la 确认一下。
避坑指南: 如果你确定要删除非空目录,请用 rm -rf。但千万小心!
# 删除非空目录(危险操作)
rm -rf /path/to/dir
# 安全做法:先确认再删除
ls -la /path/to/dir
rm -rf /path/to/dir
我曾经见过有人写 rm -rf / var/log(注意 / 后面的空格),结果把根目录删了... 所以,rm -rf 一定要慎之又慎。
4.6 实战组合拳
光说单个命令没意思,咱们来点实战。假设你要部署一个新项目:
# 1. 先看看当前在哪
pwd
# 输出:/home/zhangsan
# 2. 创建项目目录结构
mkdir -p /home/zhangsan/projects/myapp/{src,logs,config}
# 3. 进入项目目录
cd /home/zhangsan/projects/myapp
# 4. 确认目录结构
ls -la
# 输出:
# drwxr-xr-x 5 zhangsan zhangsan 4096 Jan 15 10:00 .
# drwxr-xr-x 3 zhangsan zhangsan 4096 Jan 15 10:00 ..
# drwxr-xr-x 2 zhangsan zhangsan 4096 Jan 15 10:00 config
# drwxr-xr-x 2 zhangsan zhangsan 4096 Jan 15 10:00 logs
# drwxr-xr-x 2 zhangsan zhangsan 4096 Jan 15 10:00 src
# 5. 如果发现 config 目录不需要了,先确保它是空的
ls -la config/
# 确认空目录后删除
rmdir config/
# 6. 回到上级目录
cd ..
你想想看,这一套组合拳下来,目录操作是不是清晰多了?说白了,这些命令就是你的"文件系统导航工具"。用熟了,效率能提升一大截。
我的建议: 每天花5分钟练习这些命令,一周后你就能闭着眼睛操作了。特别是 cd - 和 mkdir -p,这两个是我日常使用频率最高的。