Linux dirs 命令 - 目录堆栈管理

dirs 命令用于显示当前目录堆栈的内容。目录堆栈是一个记录访问过的目录位置的列表,通常与pushdpopd命令配合使用,方便用户在目录之间快速切换。

语法格式

dirs [选项] [+N] [-N]

常用选项

选项 说明
-c 清空目录堆栈
-l 以完整路径显示(默认情况下会显示~表示家目录)
-p 每行显示一个目录
-v 每行显示一个目录,并在前面显示索引号
+N 显示从栈顶开始算起的第N个目录(N从0开始)
-N 显示从栈底开始算起的第N个目录(N从0开始)

目录堆栈概念

什么是目录堆栈?

目录堆栈是一个后进先出(LIFO)的数据结构,用于存储访问过的目录路径。堆栈有三个相关命令:

  • pushd:将目录推入堆栈并切换到该目录
  • popd:从堆栈弹出目录并切换到该目录
  • dirs:显示当前目录堆栈的内容

堆栈索引说明:堆栈顶部的目录(当前目录)索引为0,依次向下递增。

基本示例

示例1:显示当前目录堆栈

# 显示当前目录堆栈内容
dirs

默认情况下,dirs命令会显示当前目录堆栈中的所有目录,当前目录(栈顶)会首先显示。

示例2:以完整路径显示

# 使用完整路径显示目录堆栈
dirs -l

默认情况下,dirs会使用~表示家目录,使用-l选项会显示完整路径。

示例3:每行显示一个目录

# 每行显示一个目录
dirs -p

# 每行显示一个目录并带索引号
dirs -v

示例输出:

 0  /home/user/projects
 1  /var/www/html
 2  /etc/nginx
 3  /tmp

示例4:显示特定位置的目录

# 显示堆栈顶部的目录(索引0,默认)
dirs +0

# 显示第二个目录(索引1)
dirs +1

# 显示栈底的目录(从栈底开始算)
dirs -0

配合pushd和popd使用

示例5:使用pushd添加目录到堆栈

# 当前在/home/user目录
pwd
# 输出: /home/user

# 将/var/www推入堆栈并切换到该目录
pushd /var/www/html

# 查看堆栈
dirs -v
# 输出:
# 0  /var/www/html
# 1  /home/user

# 再推入一个目录
pushd /etc/nginx

# 查看堆栈
dirs -v
# 输出:
# 0  /etc/nginx
# 1  /var/www/html
# 2  /home/user

示例6:使用popd弹出目录

# 当前堆栈状态
dirs -v
# 输出:
# 0  /etc/nginx
# 1  /var/www/html
# 2  /home/user

# 弹出栈顶目录(/etc/nginx)并切换到下一个目录(/var/www/html)
popd

# 查看堆栈状态
dirs -v
# 输出:
# 0  /var/www/html
# 1  /home/user

# 再次弹出
popd

# 查看堆栈状态
dirs -v
# 输出:
# 0  /home/user

示例7:pushd切换堆栈中的目录

# 假设当前堆栈状态
dirs -v
# 输出:
# 0  /home/user
# 1  /var/www/html
# 2  /etc/nginx

# 切换到堆栈中的第二个目录(/var/www/html)
pushd +1

# 查看堆栈状态(堆栈已旋转)
dirs -v
# 输出:
# 0  /var/www/html
# 1  /etc/nginx
# 2  /home/user

实际应用场景

场景1:在多项目间快速切换
# 开发时经常需要在多个项目目录间切换
pushd /project/frontend
# 进行一些操作...

pushd /project/backend
# 进行一些操作...

pushd /project/mobile
# 进行一些操作...

# 查看当前访问过的项目目录
dirs -v
# 通过pushd +N在不同项目间快速切换
场景2:清空目录堆栈
# 清空目录堆栈(只保留当前目录)
dirs -c

# 验证堆栈已清空
dirs -v
# 输出: 0  /current/directory
场景3:使用别名简化操作
# 在~/.bashrc中添加别名
alias d='dirs -v'
alias pd=pushd

# 重新加载配置后,可以简写
d      # 查看堆栈
pd ~   # 推入家目录

注意事项

  • 堆栈大小限制:目录堆栈有最大限制(通常由DIRSTACKSIZE变量控制,默认为10),超过限制时最早推入的目录会被移除
  • Shell会话独立:每个Shell会话有自己的目录堆栈,关闭Shell后堆栈内容会丢失
  • 相对路径:dirs显示的是推入堆栈时的路径,如果之后目录被移动或重命名,堆栈中的路径可能失效
  • 负索引:使用-N参数时,索引从栈底开始计算,栈底目录的索引是-1(或-0)

相关命令

  • pushd:将目录推入堆栈并切换到该目录
  • popd:从堆栈弹出目录并切换到该目录
  • cd:切换当前工作目录
  • pwd:显示当前工作目录路径
  • jobs:显示任务列表(概念类似,但用于进程管理)

环境变量配置

# 查看目录堆栈大小限制
echo $DIRSTACKSIZE

# 设置目录堆栈最大为20个条目
export DIRSTACKSIZE=20

# 将设置添加到~/.bashrc使其永久生效
echo 'export DIRSTACKSIZE=20' >> ~/.bashrc