Linux dirs命令详解|Bash目录堆栈管理快速切换目录实战教程

1. 命令简介

dirs 是一个 Bash 内建命令,用于显示或管理目录堆栈。目录堆栈是一个由 pushd 和 popd 命令维护的目录历史列表,允许用户在不同目录间快速切换。dirs 命令的主要功能是查看当前堆栈内容,并可选择以不同格式显示或清空堆栈。

核心概念:

目录堆栈的栈顶始终是当前工作目录。

堆栈中的目录通常以~(家目录缩写)形式显示,除非使用 -l 选项展开。

2. 语法格式

bash

运行

复制代码
dirs [选项] [+N] [-N]

格式说明:

选项:用于控制显示格式或执行清空操作。

+N:显示从栈顶(左侧)开始计数的第 N 个目录(从 0 开始)。

-N:显示从栈底(右侧)开始计数的第 N 个目录(从 0 开始)。

3. 常用选项及说明

表格

选项 说明
-c 清空目录堆栈。执行后堆栈中仅保留当前目录。
-l 展开显示。将堆栈中所有以~开头的目录路径展开为绝对路径。
-p 纵向显示。将堆栈中的每个目录单独显示在一行,不包含编号。
-v 纵向带编号显示。将堆栈中的每个目录单独显示在一行,并在行首添加从 0 开始的索引编号。

参数说明:

+N:当不提供任何选项时,dirs 默认横向显示整个堆栈。使用 +N 参数可以指定只显示堆栈中从左数(栈顶方向)的第 N 项。例如,dirs +0 显示栈顶(当前目录),dirs +1 显示栈顶的下一个目录。

-N:与 +N 方向相反,从堆栈右侧(栈底方向)开始计数。例如,dirs -0 显示栈底目录,dirs -1 显示栈底的上一个目录。

4. 示例用法

以下示例假设初始目录为家目录 (~),并通过 pushd -n 命令向堆栈中添加了几个目录(-n 表示切换目录但不改变当前工作目录)。

示例 1:初始状态,堆栈中只有当前目录(家目录)

bash

运行

复制代码
[user@host ~]$ dirs
~

示例 2:使用 pushd -n 添加目录到堆栈

bash

运行

复制代码
[user@host ~] pushd -n /Desktop
/Desktop [user@host ~]

示例 3:使用 -l 选项展开路径显示

bash

运行

复制代码
[user@host ~]$ dirs -l
/home/user /home/user/bin /home/user/Pictures /home/user/Desktop

示例 4:使用 -p 选项每行显示一个目录

bash

运行

复制代码
[user@host ~]$ dirs -p
~
~/bin
~/Pictures
~/Desktop

示例 5:使用 -v 选项每行显示一个目录并带索引编号

bash

运行

复制代码
[user@host ~]$ dirs -v
 0  ~
 1  ~/bin
 2  ~/Pictures
 3  ~/Desktop

示例 6:使用 +N 参数显示指定位置的目录(从左侧 / 栈顶数,索引从 0 开始)

bash

运行

复制代码
[user@host ~]$ dirs +2
~/Pictures
# 显示索引为2(从左数第3个)的目录

示例 7:使用 -N 参数显示指定位置的目录(从右侧 / 栈底数,索引从 0 开始)

bash

运行

复制代码
[user@host ~]$ dirs -2
~/bin
# 显示从右数索引为2(从右数第3个)的目录

示例 8:使用 -c 选项清空目录堆栈(仅保留当前目录)

bash

运行

复制代码
[user@host ~] dirs -c
[user@host ] dirs
~
# 堆栈已被清空,只剩当前目录

5. 注意事项

  • 内建命令:dirs 是 Bash shell 的内建命令,并非一个独立的可执行文件。因此,其行为可能因不同的 Shell(如 zsh, fish)而异。要获取最准确的帮助,请在 Bash 中使用 help dirs 命令查看。
  • 与 pushd/popd 的关系:dirs、pushd、popd 是三个协同工作的目录堆栈管理命令。pushd 将目录压入堆栈并切换,popd 将目录弹出堆栈并切换,而 dirs 则用于查看堆栈状态。
  • 堆栈索引:理解 +N 和 -N 的计数方向至关重要。+N 从栈顶(显示列表的最左边)开始,-N 从栈底(显示列表的最右边)开始。索引均从 0 开始。
  • 当前目录:无论堆栈如何变化,使用 dirs 显示时,列表的第一个(最左侧)条目始终代表当前工作目录。
  • 清空操作:dirs -c 会移除堆栈中除当前目录外的所有历史记录,此操作不可逆,请谨慎使用。
相关推荐
江湖有缘8 分钟前
Docker实战 | 使用Docker部署Donetick任务与家务管理应用
运维·docker·容器
实心儿儿17 分钟前
Linux —— 应用层协议HTTP
linux·网络·http
流星白龙21 分钟前
【Docker】4.NameSpace空间隔离实战
java·运维·docker
笨笨狗吞噬者21 分钟前
VS Code 内置浏览器打开网页
前端
SamChan9022 分钟前
WebSocket实现PDF翻译进度实时推送:Go后端+React前端的完整方案
前端·websocket·pdf·c#·react·机器翻译
甲维斯35 分钟前
DeepSeekFlash前端依旧拉垮,而且变慢了很多!
前端·人工智能
奈斯先生Vector1 小时前
大模型 Agentic Workflow 架构解构:异构 API 调度与 Token 路由的多模态系统设计
开发语言·前端·架构·prompt·aigc·音视频
海带紫菜菠萝汤1 小时前
FFmpeg.wasm 实践:在浏览器中运行 FFmpeg 的能力边界与性能瓶颈
前端·javascript·ffmpeg·音视频·wasm
江晓鱼未暖1 小时前
十七、Redis 核心原理与架构详解
大数据·数据库·数据仓库·redis·缓存·架构
copyer_xyf1 小时前
PostgreSQL 做向量检索:一条单库路线
数据库·agent·nestjs