Linux中的 pushd 和 popd 命令
pushd
并且 popd
是允许您使用目录栈工作,改变 Linux 和其他类 Unix 操作系统的当前工作目录的命令。尽管 pushd
并且 popd
是非常强大和有用的命令,但它们却被低估并且很少使用。
在本教程中,我们将向您展示如何使用 pushd
和 popd
命令浏览系统的目录树。
目录堆栈
目录堆栈是您先前导航到的目录的列表。使用该 dirs
命令可以查看目录堆栈的内容。使用 pushd
命令切换到目录时,目录将添加到堆栈中,然后使用 popd
命令将目录从堆栈中删除。
当前的工作目录始终位于目录堆栈的顶部。当前的工作目录就是您当前工作位于的目录(文件夹),就是你在命令行进行交互操作的时候进行工作的目录。
pwd
命令可以帮您找出当前所在的目录。
在文件系统中导航时,请使用 Tab
键自动完成目录名称。在目录名称的末尾添加斜杠是可选的。
pushd
, popd
和 dirs
是 shell 内建的,其行为可能稍微根据不同的 shell 程序而不同。我们将介绍命令的 Bash 内置版本。
pushd
命令
该 pushd
命令的语法如下:
pushd [OPTIONS] [DIRECTORY]
例如,将目录 /var/www
保存到目录堆栈的顶部并更改为当前目录,您将输入:
~$ pushd /var/www
成功后,上面的命令将打印目录堆栈。 ~
是我们执行 pushd
命令的时候位于的目录。~
表示主目录。
/var/www ~
pushd
首先将当前工作目录保存到堆栈的顶部,然后导航到给定目录。由于当前目录必须始终位于堆栈的顶部,因此更改后,新的当前目录将移至堆栈的顶部,但不会保存在堆栈中。要保存它,必须调用 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/linuxize
如果要更改 /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 ~
结论
通常,您使用 cd
命令从一个目录导航到另一个目录。但是,如果你花了很多时间在命令行上, pushd
并 popd
命令将提高你的生产力和效率。