本文知识点:
- linux目录切换
- 查看目录栈
- 目录入栈
- 目录出栈
- 使用目录栈进行目录切换
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]#
注:我们观察两点:
- 每次入栈之后,我们的当前目录就会变成刚才入栈的那个目录。
- 我们每次入栈的目录都是加在之前栈的栈顶,观察
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
总结
- linux目录栈相关的命令是:
dirspushdpopd- 目录栈并非C语言数据结构中意义上的严格的栈,它是可以不从栈顶出栈和入栈的,倒是更像是链表
- 目录栈的用处就是提高了我们工作中切换目录的效率