目录操作 #

一、目录基础概念 #

1.1 目录结构 #

Linux 采用树形目录结构,从根目录 / 开始:

text
/                    根目录
├── home/            用户主目录
│   ├── user1/
│   └── user2/
├── etc/             系统配置
├── var/             可变数据
├── usr/             用户程序
└── tmp/             临时文件

1.2 路径类型 #

绝对路径: 从根目录开始的完整路径

bash
/home/user/documents
/etc/nginx/nginx.conf
/var/log/syslog

相对路径: 从当前目录开始的路径

bash
./documents         当前目录下的 documents
../config           上级目录的 config
~/downloads         用户主目录的 downloads

1.3 特殊目录符号 #

符号 说明
/ 根目录
~ 用户主目录
. 当前目录
上级目录
- 上一个工作目录

二、切换目录 #

2.1 cd - 切换目录 #

bash
# 切换到指定目录
cd /home/user

# 切换到用户主目录
cd
cd ~

# 切换到上级目录
cd ..

# 切换到上两级目录
cd ../..

# 切换到上一个工作目录
cd -

# 切换到当前目录(刷新)
cd .

2.2 实用技巧 #

bash
# 使用 Tab 补全
cd /ho<Tab>/us<Tab>

# 使用通配符
cd /var/l*

# 使用变量
cd $HOME
cd $PWD/../

# 使用命令替换
cd $(dirname /etc/nginx/nginx.conf)

2.3 目录栈 #

bash
# 压入目录到栈
pushd /var/log

# 弹出目录
popd

# 查看目录栈
dirs
dirs -v
dirs -p

三、查看目录 #

3.1 ls - 列出目录内容 #

bash
# 基本列出
ls

# 显示详细信息
ls -l

# 显示所有文件(包括隐藏文件)
ls -a

# 显示人类可读的大小
ls -lh

# 按时间排序
ls -lt

# 按大小排序
ls -lS

# 反向排序
ls -lr

# 递归显示
ls -R

# 显示 inode 号
ls -i

# 显示文件类型标识
ls -F

3.2 ls 输出解读 #

bash
ls -l file.txt
# -rw-r--r-- 1 user group 1024 Mar 27 10:00 file.txt
字段 说明
-rw-r–r– 文件类型和权限
1 硬链接数
user 所有者
group 所属组
1024 文件大小(字节)
Mar 27 10:00 修改时间
file.txt 文件名

3.3 文件类型标识 #

bash
ls -F
符号 说明
/ 目录
* 可执行文件
@ 软链接
| 管道文件
= 套接字文件

3.4 tree - 树形显示 #

bash
# 安装 tree
sudo apt install tree

# 基本用法
tree

# 指定目录
tree /home/user

# 限制深度
tree -L 2

# 只显示目录
tree -d

# 显示文件大小
tree -sh

# 显示完整路径
tree -f

# 过滤文件
tree -P "*.txt"

# 排除文件
tree -I "node_modules"

# 输出到文件
tree > directory_tree.txt

四、创建目录 #

4.1 mkdir - 创建目录 #

bash
# 创建单个目录
mkdir directory

# 创建多个目录
mkdir dir1 dir2 dir3

# 创建嵌套目录
mkdir -p parent/child/grandchild

# 创建目录并设置权限
mkdir -m 755 directory

# 显示创建过程
mkdir -v directory

# 创建带空格的目录名
mkdir "my directory"

4.2 批量创建 #

bash
# 使用花括号展开
mkdir dir{1..10}
mkdir {a..z}_dir
mkdir test_{01..10}

# 创建多级目录结构
mkdir -p project/{src,bin,lib,docs}
mkdir -p project/{src/{main,test},bin,lib}

# 创建日期目录
mkdir backup_$(date +%Y%m%d)

4.3 创建示例 #

bash
# 创建项目目录结构
mkdir -p myproject/{src/{main,test},docs,config,scripts}

# 创建日志目录
mkdir -p /var/log/myapp/{access,error,debug}

# 创建用户目录
mkdir -p /home/user/{Desktop,Documents,Downloads,Music,Pictures,Videos}

五、删除目录 #

5.1 rmdir - 删除空目录 #

bash
# 删除空目录
rmdir directory

# 删除多级空目录
rmdir -p parent/child/grandchild

# 显示删除过程
rmdir -v directory

5.2 rm - 删除目录 #

bash
# 删除非空目录
rm -r directory

# 强制删除(不提示)
rm -rf directory

# 交互式删除
rm -ri directory

# 显示删除过程
rm -rv directory

5.3 安全删除 #

bash
# 使用 find 删除空目录
find . -type d -empty -delete

# 使用 find 删除特定目录
find . -type d -name "__pycache__" -exec rm -rf {} +

# 使用 trash-cli
sudo apt install trash-cli
trash directory

六、复制和移动目录 #

6.1 复制目录 #

bash
# 复制目录
cp -r source_dir/ dest_dir/

# 保持属性复制
cp -rp source_dir/ dest_dir/

# 显示进度
cp -rv source_dir/ dest_dir/

# 只复制更新的文件
cp -ru source_dir/ dest_dir/

6.2 移动目录 #

bash
# 移动目录
mv source_dir/ /path/to/destination/

# 重命名目录
mv old_name/ new_name/

# 强制移动
mv -f source_dir/ dest_dir/

# 交互式移动
mv -i source_dir/ dest_dir/

七、目录大小 #

7.1 du - 查看目录大小 #

bash
# 查看目录大小
du directory

# 人类可读格式
du -h directory

# 只显示总大小
du -sh directory

# 显示所有子目录大小
du -h --max-depth=1 directory

# 按大小排序
du -h directory | sort -h

# 显示最大的 10 个目录
du -h --max-depth=1 /var | sort -hr | head -10

# 排除某些目录
du -h --exclude="*.log" directory

7.2 ncdu - 交互式磁盘使用分析 #

bash
# 安装 ncdu
sudo apt install ncdu

# 扫描目录
ncdu /home

# 扫描根目录
ncdu /

# 导出报告
ncdu -o report.ncdu /
ncdu -f report.ncdu

八、路径操作 #

8.1 basename - 获取文件名 #

bash
# 获取文件名
basename /home/user/file.txt
# 输出: file.txt

# 去除后缀
basename /home/user/file.txt .txt
# 输出: file

8.2 dirname - 获取目录名 #

bash
# 获取目录路径
dirname /home/user/file.txt
# 输出: /home/user

# 获取上级目录
dirname /home/user/documents/
# 输出: /home/user

8.3 realpath - 获取绝对路径 #

bash
# 获取绝对路径
realpath file.txt

# 解析软链接
realpath -s link_file

# 相对路径转换
realpath --relative-to=/home /var/log

8.4 pwd - 显示当前目录 #

bash
# 显示当前目录
pwd

# 显示物理路径(不包含符号链接)
pwd -P

# 显示逻辑路径(包含符号链接)
pwd -L

九、目录权限 #

9.1 查看目录权限 #

bash
ls -ld directory
# drwxr-xr-x 2 user group 4096 Mar 27 10:00 directory

9.2 修改目录权限 #

bash
# 设置权限
chmod 755 directory

# 递归设置
chmod -R 755 directory

# 添加执行权限
chmod +x directory

# 设置所有者权限
chmod u+rwx directory

9.3 修改目录所有者 #

bash
# 修改所有者
chown user directory

# 修改所有者和组
chown user:group directory

# 递归修改
chown -R user:group directory

# 只修改组
chgrp group directory

十、实践练习 #

10.1 练习一:目录导航 #

bash
# 1. 查看当前目录
pwd

# 2. 列出当前目录内容
ls -la

# 3. 切换到用户主目录
cd ~

# 4. 切换到根目录
cd /

# 5. 返回上一个目录
cd -

10.2 练习二:创建目录结构 #

bash
# 1. 创建项目目录
mkdir -p ~/myproject/{src/{main,test},docs,config}

# 2. 查看目录结构
tree ~/myproject

# 3. 创建日期备份目录
mkdir -p ~/backup/$(date +%Y%m%d)

# 4. 创建多级空目录
mkdir -p ~/test/a/b/c/d/e

10.3 练习三:目录管理 #

bash
# 1. 复制目录
cp -r ~/myproject ~/myproject_backup

# 2. 移动目录
mv ~/myproject_backup ~/project_backup

# 3. 查看目录大小
du -sh ~/myproject

# 4. 删除测试目录
rm -rf ~/test

10.4 练习四:目录查找 #

bash
# 1. 查找所有目录
find ~ -type d -name "myproject"

# 2. 查找空目录
find ~ -type d -empty

# 3. 查找最近修改的目录
find ~ -type d -mtime -1

# 4. 查找并删除空目录
find ~ -type d -empty -delete

十一、小结 #

本章学习了 Linux 目录操作的核心命令,包括切换、查看、创建、删除和管理目录。

关键要点:

  1. cd 切换目录,ls 列出内容
  2. mkdir -p 可以创建嵌套目录
  3. rmdir 只能删除空目录
  4. du 查看目录大小
  5. tree 树形显示目录结构

下一章预告: 文件权限 - 学习 Linux 文件权限系统和权限管理命令。

最后更新:2026-03-27