4、目录操作命令(上):pwd、cd、ls、mkdir、rmdir命令详解与实战

各位好,今天我们进入目录操作的核心环节。说实话,目录操作是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,这两个是我日常使用频率最高的。

好了,这一章就到这里。下一章我们继续讲目录操作的"下"半部分,包括 cp、mv、rm 等命令。记住,基础打牢了,后面才走得稳。