如何在 Linux 上使用 pushd 和 popd如何在 Linux 上使用 pushd 和 popd如何在 Linux 上使用 pushd 和 popd如何在 Linux 上使用 pushd 和 popd
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Linux 上使用 pushd 和 popd

许多 Linux 用户从未听说过 pushd 和 popd,但它们一直存在。它们还可以显着加快在命令行上导航目录的过程。我们将向您介绍如何使用它们。

什么是 pushd 和 popd?

Bill Joy 在他 1978 年的 C Shell 中引入的创新之一是目录堆栈的概念和操作它的方法:pushd 和 popd。模仿是最真诚的奉承形式,目录堆栈、pushd 和 popd 很快被并入其他 shell(如 Bash)甚至其他操作系统。

堆栈的概念很简单。项目一次一个地放在堆栈上,最近添加的项目始终占据顶部位置。当从堆栈中检索项目时,它们将按顺序从上到下移除。这种性质的堆栈通常称为后进先出 (LIFO) 队列。

实际上,pushd 和 popd 比这更灵活一点,但这是一个很好的模型,现在要牢记在心。

当我们指的是目录堆栈时,pushd 和 popd 中的“d”代表“目录”也就不足为奇了。这些命令允许您将目录推入目录堆栈或将它们弹出目录堆栈。

但这对我们有什么好处呢?

pushd 如何填充堆栈

当您使用 pushd 时,会发生以下三件事:

  • 您可以像使用 cd 一样更改目录。
  • 目录的名称和路径被添加到堆栈中。
  • 堆栈显示为以空格分隔的目录列表。

在以下示例中,请注意目录堆栈如何随着每个新的 pushd 命令增长。另请注意,堆栈的顶部在左侧——这是新条目出现的地方。

在第一个 pushd 命令之后,堆栈中有两个条目:您离开的目录和您移动到的目录。

对于我们的示例,我们键入以下内容:

pushd ~/Desktop
pushd ~/Music
pushd ~/Documents
pushd ~/Pictures
pushd ~

最后一个 pushd 命令将我们带回了我们的主目录,因此堆栈中的第一个和最后一个条目是波浪号 (~),代表我们的主目录。这表明,虽然一个目录已经在堆栈中,但对于其他 pushd 命令,它将再次添加。

另请注意,堆栈中最左侧的条目(最近添加的条目)是您的当前目录。

目录命令

您可以使用 dirs 命令来显示目录堆栈,如下所示:

dirs

它不影响堆栈,它只是显示它。您可以与 pushd 一起使用的一些选项指的是目录在堆栈中的位置。

如果要查看每个目录的数字位置,可以使用-v(垂直)选项,如下所示:

目录-v

如果您希望看到主目录的拼写路径而不是波浪号 (~),请添加 -l(长格式)选项,如下所示:

dirs -v -l

将目录添加到堆栈

正如我们所见,当您使用 pushd 命令时,它会做三件事:更改您的目录,将新目录添加到堆栈,并为您显示堆栈。您可以使用 -n(无旋转)选项将目录添加到堆栈而不更改当前目录。

这是我们的目录堆栈:

dirs -v -l

现在,我们将使用带有 -n 选项的 pushd 命令,并将 /home/dave 目录中的 pas 作为参数。然后,我们将再次检查目录堆栈。

我们键入以下内容:

pushd -n /home/dave
dirs -v -l

/home/dave 目录已添加到插槽 1 中的堆栈中,这是堆栈中的第二个位置。它不能占据顶部位置,因为 slot 0 始终是当前目录。

我们没有离开当前目录,~/Videos,所以它没有旋转到堆栈中的另一个位置。

通过旋转堆栈更改目录

您可以将数字参数与 pushd 一起使用以移动到堆栈中的任何目录,并且堆栈会在您这样做时旋转。您选择移动的目录将成为堆栈中的第一个条目。

您可以通过位置编号引用堆栈中的目录。您可以从堆栈的顶部或底部开始计数。对于正数,比如+3,从上数;对于负数,例如 -2,从底部开始计数。

/home/dave/Documents 目录位于第三个位置。我们可以使用以下命令移动该目录:

pushd +3

我们选择的目录上方的堆栈中的目录被移动到堆栈的底部。我们选择的目录现在占据了顶部位置,我们被移动到该目录中。

如果我们想切换到堆栈底部的目录,我们可以使用以下命令:

pushd -0

最后一个目录被移动到第一个槽,所有其他的都在堆栈中向下移动。我们更改为 ~/Pictures 目录。

弹出命令

您可以使用 popd 命令从堆栈中删除目录。

如果我们查看目录堆栈,我们可以看到位置 1 的目录是 /home/dave。要从堆栈中删除它,我们键入以下内容以将数字传递给 popd:

dirs -v -l
popd +1

/home/dave 目录已被删除,堆栈中位于其下方的目录每个都向上移动了一个位置。

正如我们可以使用 pushd,我们可以使用 popd 从堆栈底部开始计数。要从堆栈中删除最后一个目录,我们键入:

popd -0

~/Music 目录从堆栈的最后位置移除。

要更改目录,执行某些操作,然后跳回到上一个目录,您可以同时使用 pushd 和 popd。

我们将使用 pushd 移动到不同的目录。我们将使用 popd 丢弃堆栈中最顶层的目录并移动到第二个位置的目录。这是您刚刚移出的目录,因此您将回到原来所在的目录。

我们键入以下内容:

pushd ~
popd

我们从 ~/Projects 目录开始,pushd 到主目录,然后 popd 回到 ~/Projects 目录。

旋转整个堆栈

我们将说明如何在具有一些嵌套目录的堆栈中循环,但您可以使用文件系统中任何位置的任何目录。

我们最深层次的嵌套是:

/home/dave/Projects/htg/articles

从主目录开始,我们将逐步下降到每个目录,直到我们到达文章目录。然后,我们将查看目录堆栈。

我们键入以下内容:

pushd ~/Projects
pushd htg
pushd articles
dirs -v -l

当您重复发出 pushd +1 命令时,您可以循环遍历目录堆栈。如果您经常这样做,pushd +1 将是一个很好的别名候选者。

输入以下内容:

pushd +1

在堆栈上冲压

恢复旧习惯并使用 cd 更改目录很容易。如果这样做,您将覆盖堆栈中的第一个目录。这是不可避免的,因为第一个槽是为当前工作目录保留的——其他槽都不会改变位置。

为此,请键入以下内容:

dirs -v -l
cd ~/Music
dirs -v -l

在您习惯了 pushd 和 popd 命令(并且,也许,使用它们来创建一些别名)之后,您将有一种超快速的方式来切换目录。

这就是我们在命令行闲逛的原因。效率岩石,对不对?

Linux Commands
Files tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc
Processes alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap
Networking netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld

RELATED: Best Linux Laptops for Developers and Enthusiasts

©2015-2025 艾丽卡 support@alaica.com