1. 命令概述
- 命令名称:
dirs(directory stack) - 核心功能:显示目录栈内容
- 主要用途:查看和管理目录栈,配合
pushd和popd命令使用 - 特点:显示当前目录栈中的所有目录,支持格式化输出
2. 语法格式
dirs [选项] [+N] [-N]
3. 常用选项
| 选项 | 说明 |
|---|---|
-c | 清空目录栈 |
-l | 显示完整路径,不缩写 |
-p | 每行显示一个目录 |
-v | 每行显示一个目录,并显示索引号 |
+N | 显示从栈顶开始的第N个目录 |
-N | 显示从栈底开始的第N个目录 |
--help | 显示帮助信息 |
--version | 显示版本信息 |
4. 基本操作
(1) 基本目录栈查看
# 显示目录栈内容
dirs
# 显示完整路径
dirs -l
# 每行显示一个目录
dirs -p
# 每行显示一个目录并显示索引号
dirs -v
# 清空目录栈
dirs -c
(2) 指定位置查看
# 显示栈顶目录(第0个)
dirs +0
# 显示栈顶第二个目录(第1个)
dirs +1
# 显示栈底目录
dirs -0
# 显示栈底第二个目录
dirs -1
# 显示栈顶第三个目录
dirs +2
# 显示栈底第三个目录
dirs -2
(3) 组合选项使用
# 显示完整路径并每行显示一个目录
dirs -l -p
# 显示完整路径并每行显示一个目录和索引号
dirs -l -v
# 显示指定位置的完整路径
dirs -l +1
# 显示指定位置并每行显示
dirs -p +1
# 显示指定位置并显示索引号
dirs -v +1
5. 常用实例详解
(1) 基本目录栈操作示例
# 显示当前目录栈
dirs
# 输出:~(表示当前目录在栈顶)
# 压入目录到栈
pushd /etc
# 输出:/etc ~
# 再次压入目录
pushd /var/log
# 输出:/var/log /etc ~
# 显示目录栈
dirs
# 输出:/var/log /etc ~
# 显示完整路径
dirs -l
# 输出:/var/log /etc /home/user
# 每行显示一个目录
dirs -p
# 输出:
# /var/log
# /etc
# /home/user
# 每行显示一个目录并显示索引号
dirs -v
# 输出:
# 0 /var/log
# 1 /etc
# 2 /home/user
# 清空目录栈
dirs -c
# 输出:~(只剩当前目录)
(2) 指定位置查看示例
# 假设目录栈为:/var/log /etc /home/user
# 显示栈顶目录(第0个)
dirs +0
# 输出:/var/log
# 显示栈顶第二个目录(第1个)
dirs +1
# 输出:/etc
# 显示栈顶第三个目录(第2个)
dirs +2
# 输出:/home/user
# 显示栈底目录(第0个)
dirs -0
# 输出:/home/user
# 显示栈底第二个目录(第1个)
dirs -1
# 输出:/etc
# 显示栈底第三个目录(第2个)
dirs -2
# 输出:/var/log
# 显示栈顶目录的完整路径
dirs -l +0
# 输出:/var/log
# 显示栈底目录的完整路径
dirs -l -0
# 输出:/home/user
(3) 组合选项使用示例
# 假设目录栈为:/var/log /etc /home/user
# 显示完整路径并每行显示一个目录
dirs -l -p
# 输出:
# /var/log
# /etc
# /home/user
# 显示完整路径并每行显示一个目录和索引号
dirs -l -v
# 输出:
# 0 /var/log
# 1 /etc
# 2 /home/user
# 显示栈顶第二个目录的完整路径
dirs -l +1
# 输出:/etc
# 显示栈底第二个目录的完整路径
dirs -l -1
# 输出:/etc
# 显示栈顶第三个目录并每行显示
dirs -p +2
# 输出:/home/user
# 显示栈底第三个目录并显示索引号
dirs -v -2
# 输出:0 /var/log
6. 实际应用场景
场景一:快速目录切换
# 压入常用目录到栈
pushd /etc
pushd /var/log
pushd /home/user/Documents
# 查看目录栈
dirs -v
# 输出:
# 0 /home/user/Documents
# 1 /var/log
# 2 /etc
# 快速切换到指定目录
pushd +1 # 切换到 /var/log
pushd +2 # 切换到 /etc
pushd +0 # 切换到 /home/user/Documents
# 弹出栈顶目录
popd
场景二:目录栈管理
# 清空目录栈
dirs -c
# 压入多个目录
pushd /etc
pushd /var/log
pushd /home/user
# 查看目录栈
dirs -v
# 输出:
# 0 /home/user
# 1 /var/log
# 2 /etc
# 删除指定目录
popd +1 # 删除 /var/log
# 查看剩余目录
dirs -v
# 输出:
# 0 /home/user
# 1 /etc
# 清空目录栈
dirs -c
场景三:脚本中的目录栈操作
#!/bin/bash
# 保存当前目录栈
DIRS=$(dirs)
# 压入工作目录
pushd /path/to/workdir
# 执行操作
ls -l
# 恢复目录栈
dirs -c
eval "pushd $DIRS"
场景四:目录栈备份和恢复
# 备份目录栈到文件
dirs > dirs_backup.txt
# 清空目录栈
dirs -c
# 从文件恢复目录栈
while read -r dir; do
pushd "$dir"
done < dirs_backup.txt
# 查看恢复的目录栈
dirs -v
7. 与其他命令的区别
| 命令 | 特点 | 适用场景 |
|---|---|---|
dirs | 显示目录栈内容 | 查看和管理目录栈 |
pushd | 压入目录到栈 | 将目录添加到目录栈 |
popd | 弹出目录从栈 | 从目录栈中移除目录 |
cd | 切换当前目录 | 改变当前工作目录 |
pwd | 显示当前目录 | 查看当前工作目录 |
8. 注意事项
- 目录栈大小:目录栈的大小由
DIRSTACKSIZE环境变量控制,默认为10 - 权限问题:只能访问有权限的目录
- 符号链接:显示实际路径,不显示符号链接
- 相对路径:目录栈中存储的是绝对路径
- 环境变量:可以使用环境变量
DIRSTACKSIZE设置目录栈大小
9. 常见问题解决
(1) 目录栈为空
# 错误:目录栈为空
dirs +1 # 报错:dirs: +1: directory stack index out of range
# 正确:检查目录栈大小
echo $DIRSTACKSIZE
# 正确:压入目录到栈
pushd /etc
# 正确:查看目录栈
dirs
# 正确:显示栈顶目录
dirs +0
(2) 索引超出范围
# 错误:索引超出范围
dirs +10 # 报错:dirs: +10: directory stack index out of range
# 正确:查看目录栈大小
echo $DIRSTACKSIZE
# 正确:查看目录栈内容
dirs -v
# 正确:使用有效索引
dirs +0
dirs +1
dirs +2
# 正确:从栈底开始索引
dirs -0
dirs -1
dirs -2
(3) 权限不足
# 错误:权限不足
pushd /root # 报错:Permission denied
# 正确:使用sudo
sudo pushd /root
# 正确:切换到有权限的目录
pushd /tmp
# 正确:使用其他用户
su - username
pushd /path/to/dir
# 正确:修改目录权限
sudo chmod +x /path/to/dir
pushd /path/to/dir
(4) 目录不存在
# 错误:目录不存在
pushd /nonexistent # 报错:No such file or directory
# 正确:检查目录是否存在
ls -d /path/to/dir
# 正确:创建目录后压入
mkdir -p /path/to/dir && pushd /path/to/dir
# 正确:使用存在的目录
pushd /home
# 正确:使用当前目录
pushd .
核心要点总结:
dirs是显示目录栈内容的命令,用于查看和管理目录栈- 常用选项:
-c(清空目录栈)、-l(显示完整路径)、-p(每行显示一个目录)、-v(每行显示一个目录并显示索引号) - 实际应用:快速目录切换、目录栈管理、脚本中的目录栈操作、目录栈备份和恢复
- 注意事项:目录栈大小由
DIRSTACKSIZE环境变量控制,只能访问有权限的目录
dirs命令是Linux系统目录栈管理的基础工具,配合 pushd和 popd命令使用,可以大大提高目录切换效率。