Title: Linux命令行技巧——使用目录栈进行导航
Author: Charles Shih
Create: 2017-08-31 17:03:28
目录栈导航
基本命令
dirs
列出当前的目录栈;
pushd
改变目录并将“原当前目录”入栈;
popd
将栈顶的目录出栈并改变当前目录;
备注:dirs
命令的-v
参数用于列出目录及其序号,-l
参数用于列出目录全名,而-c
参数用于清空目录栈。
目录栈结构
[cheshi@cheshi-laptop2 ~]$ dirs -l -v
0 /home/cheshi
1 /home/cheshi/temp/0/5
2 /home/cheshi/temp/0/4
3 /home/cheshi/temp/0/3
4 /home/cheshi/temp/0/2
5 /home/cheshi/temp/0/1
[cheshi@cheshi-laptop2 ~]$
备注:栈中序号为”0”的是当前目录,序号越小目录越靠近栈顶。
pushd命令
pushd
与cd
命令的异同:
- 相同点:它们都可以改变当前目录,即栈中序号为”0”的目录。
- 不同点:cd
不改变目录栈的结构(除序号”0”对应的目录改变),但pushd
会使原来栈中所有目录的序号加”1”(即发生入栈)。
连续使用不带参数的pushd
命令:当前目录会在栈中序号为”0”和”1”的目录之间切换,效果类似于cd -
(但cd
命令只改变序号为”0”的目录)。
[cheshi@cheshi-laptop2 0]$ dirs -v
0 ~/temp/0
1 ~/temp/0/5
2 ~/temp/0/4
3 ~/temp/0/3
4 ~/temp/0/2
5 ~/temp/0/1
[cheshi@cheshi-laptop2 0]$ cd -; dirs -v
/home/cheshi/temp/0/5
0 ~/temp/0/5
1 ~/temp/0/5
2 ~/temp/0/4
3 ~/temp/0/3
4 ~/temp/0/2
5 ~/temp/0/1
[cheshi@cheshi-laptop2 5]$ cd -; dirs -v
/home/cheshi/temp/0
0 ~/temp/0
1 ~/temp/0/5
2 ~/temp/0/4
3 ~/temp/0/3
4 ~/temp/0/2
5 ~/temp/0/1
[cheshi@cheshi-laptop2 0]$ pushd; dirs -v
~/temp/0/5 ~/temp/0 ~/temp/0/4 ~/temp/0/3 ~/temp/0/2 ~/temp/0/1
0 ~/temp/0/5
1 ~/temp/0
2 ~/temp/0/4
3 ~/temp/0/3
4 ~/temp/0/2
5 ~/temp/0/1
[cheshi@cheshi-laptop2 5]$ pushd; dirs -v
~/temp/0 ~/temp/0/5 ~/temp/0/4 ~/temp/0/3 ~/temp/0/2 ~/temp/0/1
0 ~/temp/0
1 ~/temp/0/5
2 ~/temp/0/4
3 ~/temp/0/3
4 ~/temp/0/2
5 ~/temp/0/1
[cheshi@cheshi-laptop2 0]$
pushd +N
可以用来“轮寻”堆栈,将当前序号为”N”的目录循环到栈顶(同时也切换到这个目录)。这个命令不改变栈中目录之间的次序关系,它是最常用的“目录栈”导航方式。
[cheshi@cheshi-laptop2 0]$ dirs -v
0 ~/temp/0
1 ~/temp/0/5
2 ~/temp/0/4
3 ~/temp/0/3
4 ~/temp/0/2
5 ~/temp/0/1
[cheshi@cheshi-laptop2 0]$ pushd +4; dirs -v
~/temp/0/2 ~/temp/0/1 ~/temp/0 ~/temp/0/5 ~/temp/0/4 ~/temp/0/3
0 ~/temp/0/2
1 ~/temp/0/1
2 ~/temp/0
3 ~/temp/0/5
4 ~/temp/0/4
5 ~/temp/0/3
[cheshi@cheshi-laptop2 2]$
此外,pushd
也支持-N
操作,效果跟+N
差不多,只是方向相反,不再赘述。
popd命令
popd
正好与pushd
相反,使用不带参数的popd
将会使目录栈中序号为”0”的目录出栈,其他所有目录的序号减”1”,原序号为”1”的目录成为序号为”0”的当前目录。
[cheshi@cheshi-laptop2 0]$ dirs -v
0 ~/temp/0
1 ~/temp/0/5
2 ~/temp/0/4
3 ~/temp/0/3
4 ~/temp/0/2
5 ~/temp/0/1
[cheshi@cheshi-laptop2 0]$ popd; dirs -v
~/temp/0/5 ~/temp/0/4 ~/temp/0/3 ~/temp/0/2 ~/temp/0/1
0 ~/temp/0/5
1 ~/temp/0/4
2 ~/temp/0/3
3 ~/temp/0/2
4 ~/temp/0/1
[cheshi@cheshi-laptop2 5]$
popd +N
命令用来将指定序号的目录出栈,并将其后的所有目录序号减”1”。但要注意的是,这个操作并不改变当前目录(除非你指定的是序号为”0”的目录)。
[cheshi@cheshi-laptop2 0]$ dirs -v
0 ~/temp/0
1 ~/temp/0/3
2 ~/temp/0/2
3 ~/temp/0/1
4 ~/temp/0
5 ~/temp/0/5
6 ~/temp/0/4
[cheshi@cheshi-laptop2 0]$ popd +4; dirs -v
~/temp/0 ~/temp/0/3 ~/temp/0/2 ~/temp/0/1 ~/temp/0/5 ~/temp/0/4
0 ~/temp/0
1 ~/temp/0/3
2 ~/temp/0/2
3 ~/temp/0/1
4 ~/temp/0/5
5 ~/temp/0/4
[cheshi@cheshi-laptop2 0]$
此外,popd
同样也支持-N
操作,与+N
类似,只不过它是从栈底开始计数的,因此-0
为栈中最后一个目录,不再赘述。