Linux中的Pushd和Popd命令
'pushd'和'popd'是允许我们使用目录堆栈并在Linux和其他类似Unix的操作系统中更改当前工作目录的命令。
尽管“ pushd”和“ popd”命令非常强大且有用,但它们却被低估并且很少使用。
在本教程中,我们将向我们展示如何使用“ pushd”和“ popd”命令浏览系统的目录树。
目录堆栈
目录堆栈是我们先前导航到的目录的列表。
可以使用“ dirs”命令查看目录堆栈的内容。
使用“ pushd”命令更改目录时,会将目录添加到堆栈中,然后使用“ popd”命令将目录删除。
当前的工作目录始终位于目录堆栈的顶部。
当前工作目录是用户当前其中工作的目录(文件夹)。
每次与命令行交互时,我们都在一个目录中工作。
使用“ pwd”命令可以找出当前所在的目录。
在文件系统中导航时,请使用“ Tab”键自动完成目录名称。
在目录名称的末 tail添加斜杠是可选的。
'pushd','popd'和'dirs'是shell内置的,它们的行为在shell之间可能略有不同。
我们将介绍命令的Bash内置版本。
'推'命令
'pushd'命令的语法如下:
pushd [OPTIONS] [DIRECTORY]
例如,要将当前目录保存到目录堆栈的顶部并更改为“/var/www”,我们将输入:
~$pushd /var/www
成功后,上面的命令将打印目录堆栈。
“~”是我们执行“ pushd”命令的目录。
代字号“~”表示主目录。
/var/www ~
'pushd'首先将当前工作目录保存到堆栈的顶部,然后导航到给定目录。
由于当前目录必须始终位于堆栈的顶部,因此更改后,新的当前目录将移至堆栈的顶部,但不会保存在堆栈中。
要保存它,我们必须从中调用“推”。
如果我们使用'cd'切换到另一个目录,则堆栈的顶层项目将丢失,
让我们向堆栈添加另一个目录:
/var/www$pushd /opt
/opt /var/www ~
要禁止更改目录,请使用'-n'选项。
例如,要将“/usr/local”目录添加到堆栈中但不更改到堆栈中,请输入:
/opt$pushd -n /usr/local
由于当前目录(始终位于顶部)没有更改,因此将“/usr/local”目录添加到堆栈顶部的第二个位置:
/opt /usr/local /var/www ~
'pushd'接受两个选项,'+ N'和'-N',它们允许我们导航到堆栈的'Nth'目录。
'+ N'选项更改为堆栈列表的'Nth'元素,从零开始从左到右计数。
当使用“ -N”时,计数的方向是从右到左。
为了更好地说明这些选项,让我们打印当前目录堆栈:
/opt$dirs -l -v
输出将显示目录堆栈的索引列表:
0 /opt 1 /usr/local 2 /var/www 3 /home/theitroad
如果要更改到“/var/www”目录,并将其置于堆栈顶部,则将使用以下方法之一。
从上到下(或者从左到右)计数时,目录的索引为'2'。
pushd +2
从下到上计数时,“/var/www”目录的索引为“ 1”。
pushd -1.
当不带任何参数使用时,“ pushd”将切换顶部的两个目录,并使新的顶部成为当前目录。
这与使用“ cd-”命令时相同。
'popd'命令
“ popd”命令采用以下形式:
popd [OPTIONS]
当不带任何参数使用时,“ popd”会从堆栈中删除顶层目录,并导航到新的顶层目录。
假设我们有以下目录堆栈:
/opt /usr/local /var/www /etc/nginx ~
如果运行“ popd”命令,它将从堆栈中删除“/opt”并更改为“/usr/local”目录:
/opt$popd
输出将显示新的目录堆栈:
/usr/local /var/www /etc/nginx ~
'-n'选项禁止默认目录更改,并从堆栈中删除第二项:
/opt$popd -n
/usr/local /etc/nginx ~
与'pushd'一样,'popd'也接受'+ N'和'-N'选项,这些选项可用于删除堆栈的'Nth'目录。
/opt$popd +1
/usr/local ~