Linux路径切换命令——directory stack

操作directory stack一共需要3个命令:

dirs 、pushd、popd

  • dirs: 显示当前目录栈
  • pushd: 把目录压栈
  • popd: 把目录弹栈

dirs

显示目录栈内容,如果没有被pushd过,或者popd到底了,此时dirs会显示当前目录,就等价于pwd了

-c 清空目录栈

-l 不显示~开头的目录

[root@localhost ~]# dirs
~ ~ /tmp/dir4 /tmp/dir3 /tmp/dir2 /tmp/dir1
[root@localhost ~]# dirs -l
/root /root /tmp/dir4 /tmp/dir3 /tmp/dir2 /tmp/dir1
View Code

-p 显示目录栈,每个条目占一行

[root@localhost ~]# dirs -p
~
~
/tmp/dir4
/tmp/dir3
/tmp/dir2
/tmp/dir1
View Code

-v 显示目录栈,每个条目占一行,并且用序号标出条目在栈中的标号

[root@localhost ~]# dirs -v
 0  ~
 1  ~
 2  /tmp/dir4
 3  /tmp/dir3
 4  /tmp/dir2
 5  /tmp/dir1
View Code

如果想把~替换掉,不能-vl一起使用。这个命令比较怪,虽有单个选项不能组合写。

[root@localhost ~]# dirs -vl
-bash: dirs: -vl: invalid number
dirs: usage: dirs [-clpv] [+N] [-N]
[root@localhost ~]# dirs -v -l
 0  /root
 1  /root
 2  /tmp/dir4
 3  /tmp/dir3
 4  /tmp/dir2
 5  /tmp/dir1
View Code

pushd

上面说到dirs显示目录栈内容。即使目录栈被popd到底,提示:

[root@localhost dir1]# popd
-bash: popd: directory stack empty
View Code

目录栈实际上并没有空,此时执行dirs还是能看到目录(和pwd一样了)。如果此时pushd dir,在目录栈中dir是排在之前pwd显示目录之前的。

此时执行pushd不带参数,不带路径,会提示:

[root@localhost /]# pushd 
-bash: pushd: no other directory
View Code

因为此时目录栈中只有一个目录,没办法两个目录兑换位置

pushd  dir :将dir加到directory stack栈顶。入栈的过程中也会显示之前已经在栈里面的内容。并且入栈后,还会切换到这个目录(-n可以阻止这种行为)

[root@localhost dir3]# cd /tmp/dir4
[root@localhost dir4]# pushd .
/tmp/dir4 /tmp/dir4 /tmp/dir3 /tmp/dir2 /tmp/dir1
View Code

pushd :如果不加参数,把栈顶2个条目对换位置

[root@localhost dir4]# dirs -p
/tmp/dir4
/tmp/dir3
/tmp/dir2
/tmp/dir1
/
[root@localhost dir4]# pushd 
/tmp/dir3 /tmp/dir4 /tmp/dir2 /tmp/dir1 /
[root@localhost dir3]# dirs -p
/tmp/dir3
/tmp/dir4
/tmp/dir2
/tmp/dir1
/
View Code

pushd +N :将(从上到下,以0开始)第几个移到栈顶

pushd -N  :将(从下到上,以0开始)第几个移到栈顶

[root@localhost dir3]# dirs -v
 0  /tmp/dir3
 1  /tmp/dir4
 2  /tmp/dir2
 3  /tmp/dir1
 4  /
[root@localhost dir3]# pushd +1
/tmp/dir4 /tmp/dir2 /tmp/dir1 / /tmp/dir3
[root@localhost dir4]# dirs -v
 0  /tmp/dir4
 1  /tmp/dir2
 2  /tmp/dir1
 3  /
 4  /tmp/dir3
[root@localhost dir4]# pushd -1
/ /tmp/dir3 /tmp/dir4 /tmp/dir2 /tmp/dir1
[root@localhost /]# dirs -v
 0  /
 1  /tmp/dir3
 2  /tmp/dir4
 3  /tmp/dir2
 4  /tmp/dir1
View Code

popd

不加参数时,默认行为弹出栈顶目录并且换到该目录。使用-n可以不切换目录

popd +N :将(从上到下,以0开始)第几个删除,栈中原有条目位置不变

popd -N  :将(从下到上,以0开始)第几个删除,栈中原有条目位置不变

[root@localhost dir4]# dirs -v
 0  /tmp/dir4
 1  /tmp/dir3
 2  /tmp/dir2
 3  /tmp/dir1
 4  /
[root@localhost dir4]# popd +1
/tmp/dir4 /tmp/dir2 /tmp/dir1 /
[root@localhost dir4]# dirs -v
 0  /tmp/dir4
 1  /tmp/dir2
 2  /tmp/dir1
 3  /
[root@localhost dir4]# popd -1
/tmp/dir4 /tmp/dir2 /
[root@localhost dir4]# dirs -v
 0  /tmp/dir4
 1  /tmp/dir2
 2  /
View Code

除了目录栈用于切换目录,还可以使用Autojump和bd


 

上面高级目录切换技术,即使最小化安装Linux也有。后面2中技术,需要单独安装

Autojump

Autojump使用Python编写

自动补完不算什么,一键直达目录才是终极神器!

bd

bd:快速返回某级父目录而不用冗余地输入 “cd ../../..”

原文地址:https://www.cnblogs.com/kelamoyujuzhen/p/9172273.html