情景linux--如何摆脱深路径的频繁切换烦恼?

情景

一般状况下,在linux系统上切换目录的成本很低,使用cd命令就能够了。若是须要在一个目录的不一样的子目录和其父目录之间切换,进入到这个目录以后,再使用相对路径会比较方便。若是要切换的目录的路径较浅,那使用绝对路径也何尝不可。linux

可是,若是须要频繁在两个以上的深路径的目录里切换,不管使用相对路径仍是绝对路径,切换目录都会比较耗时,严重影响你工做的效率。windows

有没有什么好方法呢?code

方案

为了方便举例,咱们在当前用户的根目录下建立一个目录dir_test,而后进入到该目录下。test

$ pwd
/home/j-tester/dir_test

再在这个目录下建立几个路径较深的目录:效率

$ mkdir -p 1/11/111/1111/11111 2/22/222/2222/22222 3/33/333/3333/33333 4/44/444/4444/44444

为了方便演示和说明,故意将每一个目录的名称都设置为数字,且根据层次依次增长数字的位数。实际情景下遇到的长路径不管是目录名称的长度仍是每层目录下的子目录数量都比本例要复杂得多的。变量

查看一下这些个目录:扩展

$ ls -l */*/*/*/*
1/11/111/1111/11111:
总用量 0

2/22/222/2222/22222:
总用量 0

3/33/333/3333/33333:
总用量 0

4/44/444/4444/44444:
总用量 0

两个目录

若是只须要在两个目录之间切换,不管目录的路径长短,使用cd -(切换到上一个目录)应该是最高效的。方法

好比,只须要在1111133333两个目录之间切换:di

先进入11111目录,再进入33333目录,此时执行cd -就进入了11111目录。再执行cd -就又回到了33333目录,如此反复。而且cd -执行后会输出当前所在的目录。环境变量

$ cd /home/j-tester/dir_test/1/11/111/1111/11111
$ pwd
/home/j-tester/dir_test/1/11/111/1111/11111
$ cd /home/j-tester/dir_test/3/33/333/3333/33333
$ pwd
/home/j-tester/dir_test/3/33/333/3333/33333
$ cd -
~/dir_test/1/11/111/1111/11111
$ cd -
~/dir_test/3/33/333/3333/33333
$ cd -
~/dir_test/1/11/111/1111/11111

是否是很方便?但务必注意,它只能记住上一个目录是什么,因此若是在两个目录之间切换它恰好适用。当须要在更多的目录里切换时,它就Hold不住了。

软连接

linux系统下能够建立软连接,至关于windows下的快捷方式。

使用软连接的方式能够从必定程度上下降切换目录的成本,但也有着明显的缺点:

  1. 若是实现n个目录的自由切换,须要建立n*(n-1)个软连接,这样看来,彷佛仅当n=2时工做量还能够接受;
  2. 切换别的目录时,还须要从新建立软连接;
  3. 建立软连接毕竟须要对目录内容进行了改变,这每每不是预期的效果;

因此,介绍软连接用于切换目录只是提供一种思路而已。

目录栈命令

但凡是切换目录的场景,目录栈命令都hold住

目录栈命令共有三个:pushd、popd、dirs。

要想熟练使用这三个命令,首先要理解什么是目录栈。

目录栈

目录栈是用户最近访问过的系统目录的列表(和环境变量DIRSTACK内容相对应),并以堆栈的形式管理,列表中的每一项都是绝对路径

dirs

dirs命令的结果显示当前目录栈中的全部记录。默认状况下的目录栈是当前目录。

dirs
~
cd dir_test
dirs
~/dir_test ~

进入到dir_test目录后执行dirs,结果首先是当前目录,其次是进入dir_test以前的目录栈内容。这说明了,cd dir_test的操做是除了进入目录以外,还将dir_test这个目录加入到了目录栈中。目录栈的最左端是栈顶,最右端是栈底。

用法:

dirs [+N] [-N] [-cplv]

参数说明:

+N   将第N个目录显示出来(从左边栈顶数起,数字从0开始)
-N   将第N个目录显示出来(从右边栈底数起,数字从0开始)
-c   删除目录栈中的全部记录
-l   以完整格式显示(默认状况下当前用户的根路径用~表示)
-p   每行一个目录来显示目录栈的内容
-v   每行一个目录来显示目录栈的内容,每一个目录前加上的编号,从0开始

pushd

pushd的做用是将目录加入到目录栈的顶部,并切换到该目录。

不带参数执行时,效果是互换目录栈顶部的前两个目录的位置,也就实现了在栈顶的最上面两个目录之间切换。

用法:

pushd [-n] [+N] [-N]
pushd [-n] [dir]

参数说明:

-n   将目录入栈时,不切换目录
+N   将第N个目录移至栈顶(从左边栈顶数起,数字从0开始)
-N   将第N个目录移至栈顶(从右边栈底数起,数字从0开始)

popd

popd的用途是删除目录栈中的记录。
不带参数执行时将删除目录栈顶部的目录,而后切换到新的栈顶元素所指向的目录。
用法:

popd [-n] [+N] [-N]

参数说明:

+N   将第N个目录删除(从左边栈顶数起,数字从0开始)
-N   将第N个目录删除(从右边栈底数起,数字从0开始)
-n   将目录出栈时,不切换目录

三个命令都有+N和-N的参数,且规则一致,为了不混淆,记住一个方向便可:

自顶(栈顶、左边)向下(栈底、右边)是正道(正号、+N)

建立别名

实际使用时还能够为pushd和popd设置别名,好比:

alias p1="pushd +1"
alias p2="pushd +2"
alias pp1="popd +1"
alias pp2="popd +2"

可根据本身的实际需求定制。

目录栈命令用起来很是灵活,也很是便利。

扩展知识

  1. 快捷目录-
  2. 软连接
  3. 目录栈及命令
相关文章
相关标签/搜索