linux的目录栈

811 阅读3分钟

本文知识点:

  1. linux目录切换
  2. 查看目录栈
  3. 目录入栈
  4. 目录出栈
  5. 使用目录栈进行目录切换

1. linux目录切换

目录切换是最常用的功能,命令大家也都很熟悉cd

这里总结目录切换的所有命令:

命令功能
cd .进入当前目录,目录没变
cd ..返回上一层目录
cd ~进入到用户的HOME目录
cd /进入到根目录
cd /目录路径进入到指定路径下的目录
cd -返回上一次的目录

2. 查看目录栈

首先说一下目录栈

栈大家都理解,只可以在一端进行压栈、出栈操作,它的作用也就是存储信息,特点就是先进后出。

目录栈就是把多个路径存入到栈中,这样的话在用到的时候方便取出来。

它最大的好处就是当我们要处理的文件分布在很多的目录下时,使用目录栈切换目录效率会很高

查看目录栈的命令dirs

选项说明
dirs输出当前目录栈内容
dirs -p每行显示一条目录
dirs -v每行显示一条目录,同时显示出当前目录在栈中的index
dirs -c清除栈

注:为了方便演示,我先前往目录栈中写入了两个目录,所以才是图中的样子,下文将会讲到如何写入栈

3. 目录入栈

目录入栈命令很简单pushd /目录

如图,我平时操作~,/root/datas, /etc,/lib比较频繁,我想要把这些目录放入栈中方便切换。

[root@centos7 ~] pushd /root/datas/
#~/datas ~
[root@centos7 datas] pushd /etc/
#/etc ~/datas ~
[root@centos7 etc] pushd /lib
#/lib /etc ~/datas ~
[root@centos7 lib] dirs -v
# 0  /lib
# 1  /etc
# 2  ~/datas
# 3  ~
[root@centos7 lib]#

注:我们观察两点:

  1. 每次入栈之后,我们的当前目录就会变成刚才入栈的那个目录。
  2. 我们每次入栈的目录都是加在之前栈的栈顶,观察index可以发现每次添加确实是在栈顶添加的。

4. 目录出栈

目录出栈命令也很简单popd +n

[root@centos7 lib] dirs -v
# 0  /lib
# 1  /etc
# 2  ~/datas
# 3  ~
[root@centos7 lib] popd +2
#/lib /etc ~
[root@centos7 lib] dirs -v
 #0  /lib
 #1  /etc
 #2  ~

注:这里的+n指的是dirs -v中显示的每个目录对应的index

还可以不加+n参数

[root@centos7 lib] dirs -v
# 0  /lib
# 1  /etc
# 2  ~
[root@centos7 lib] popd
#/etc ~
[root@centos7 etc] dirs -v
#0  /etc
#1  ~

注:如果不写+n的话,默认是出栈当前index为0的目录,思路就是出栈要从栈顶出。

5. 使用目录栈进行目录切换

目录切换也非常的方便,使用pushd +n,这里的+n也是dirs -v看到的index

[root@centos7 block] dirs -v
# 0  /dev/block
# 1  /dev
# 2  /etc
# 3  ~
[root@centos7 block] pushd 3
#-bash: pushd: 3: 没有那个文件或目录
[root@centos7 block] pushd +3
#~ /dev/block /dev /etc
[root@centos7 ~] dirs -v
#0  ~
#1  /dev/block
#2  /dev
#3  /etc

注:可以看到,我们pushd对应的index则可以跳转到相应的目录下,此处要注意,+3 不能写成 3

总结

  1. linux目录栈相关的命令是:dirs pushd popd
  2. 目录栈并非C语言数据结构中意义上的严格的栈,它是可以不从栈顶出栈和入栈的,倒是更像是链表
  3. 目录栈的用处就是提高了我们工作中切换目录的效率