目录操作 #
一、目录基础概念 #
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 目录操作的核心命令,包括切换、查看、创建、删除和管理目录。
关键要点:
cd切换目录,ls列出内容mkdir -p可以创建嵌套目录rmdir只能删除空目录du查看目录大小tree树形显示目录结构
下一章预告: 文件权限 - 学习 Linux 文件权限系统和权限管理命令。
最后更新:2026-03-27