最近在做Linux嵌入式系统的大作业,经常需要切换Linux系统中目录,实在太麻烦,之前是靠打开多个终端来解决,但这样又会显得窗口太多很乱,除非放在不同的工作区但又觉得没有必要。今天看书发现解决这个问题其实很容易,只需要使用Linux的目录栈就行了,操作的指令也只有两个,一个是pushd,一个是popd,非常好用。
这里就不多解释什么是栈了,而目录栈就相当于把用户正在使用的目录列表存放起来,而且具有栈的先入后出的特性。
闲话少说,具体看看如何用目录栈来简化的我们操作。
假设我们需要经常在三个目录下切换,分别是:~/src, /opt/test , /etc。注:代字符~是用户主目录的名字。
另外假设我们是刚打开终端,初始位置在:~
平常我们用cd进入一个目录,这个时候就不要这么用,请用pushd,假设我们要进目录(如果存在的话):~/src,那么:
simon@simon-A8Sc:~$ pushd ~/src/
~/src ~
simon@simon-A8Sc:~/src$
可以看到终端先回显出了目录栈的最新内容,此时有两个:~/src和~。最左边相当于目录栈的顶部,最右边相当与目录栈的底部。同时,重要的是,当前目录切换到了: ~/src。
再切换到需要另外用的一个目录 /opt/test
simon@simon-A8Sc:~/src$ pushd /opt/test
/opt/test ~/src ~
simon@simon-A8Sc:/opt/test$
可以看到栈顶部多出了目录/opt/test,而且当前目录也切换到了/opt/test。
为了方便说明,再次压入第三个目录/etc
simon@simon-A8Sc:/opt/test$ pushd /etc/
/etc /opt/test ~/src ~
simon@simon-A8Sc:/etc$
情况1. 如何在这三个目录快速切换呢?假设目录栈现就是现在这样,我们要回到/opt/test,可以使用无参数的命令pushd,它表示切换目录栈最上面的两个目录:
simon@simon-A8Sc:/etc$ pushd
/opt/test /etc ~/src ~
simon@simon-A8Sc:/opt/test$
情况2. 但如果想从/etc直接切换到 ~/src呢?此时可以使用带参数的命令pushd,
simon@simon-A8Sc:/etc$ pushd +2
~/src ~ /etc /opt/test
simon@simon-A8Sc:~/src$
参数+2中的2指编号,编号从栈顶开始算起,顶部为0。具体栈里面的目录顺序是怎么变的?可以看作是循环移了两位。
如何查看目录栈?
使用命令dirs
如何将目录从栈中弹出?
使用命令popd。
无参数时,将栈顶目录弹出,同时当前目录会变成最新的栈顶目录。
有参数时,如$ popd +2,则是将编号为2的目录弹出。不会改变当前目录。