Linux常用命令学习笔记:dirs

1. 命令概述

  • 命令名称dirs(directory stack)
  • 核心功能显示目录栈内容
  • 主要用途:查看和管理目录栈,配合 pushdpopd命令使用
  • 特点:显示当前目录栈中的所有目录,支持格式化输出

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. 注意事项

  1. 目录栈大小:目录栈的大小由 DIRSTACKSIZE环境变量控制,默认为10
  2. 权限问题:只能访问有权限的目录
  3. 符号链接:显示实际路径,不显示符号链接
  4. 相对路径:目录栈中存储的是绝对路径
  5. 环境变量:可以使用环境变量 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系统目录栈管理的基础工具,配合 pushdpopd命令使用,可以大大提高目录切换效率。


作 者:南烛
链 接:https://www.itnotes.top/archives/459
来 源:IT笔记
文章版权归作者所有,转载请注明出处!


上一篇
下一篇