您的位置:时时app平台注册网站 > 彩世界网址 > Linux下目录栈操作详解,linux目录详解彩世界网址

Linux下目录栈操作详解,linux目录详解彩世界网址

2019-11-03 12:55

Linux下目录栈操作详解,linux目录详解

Linux切换目录一直都是用cd命令的,但是今天了解到目录栈操作,这个用于多目录切换简直方便太多了,

  • 先贴一条概念:
    (stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。明白概念我们就比较好理解目录栈了,就像叠罗汉一样,只能一层一层的往上放,上面的自动变成最新的栈。
  • 压入栈操作命令pushd:我想要在/usr/local/tomcat7-1这个目录,/dev这个目录和/var下进行快速切换。

    • 第一步登录服务器默认停留在~用户主目录下。现在压入一个我想要切换的目录,命令:pushd /usr/local/tomcat7-1。

      这时我们可以看到已经切换到了/usr/local/tomcat7-1目录下了,并且输出内容为/usr/local/tomcat7-1 ~,这时我们默认用户主目录~变成了底部栈,/usr/local/tomcat7-1目录变成了顶部栈。

    • 第二步,我们继续压入/dev目录入栈,pushd /dev 这时当前操作目录已经变成/dev下的同时,输出目录栈顶部栈为/dev目录,
    • 第三部,我们继续压入/var到目录栈。pushd /var 这时我们看到当前操作目录已经变成/var。并输出顶部栈为/var目录
    • 现在我们创建了一个目录栈/var, /dev, /usr/local/tomcat7-1, ~,从左到右依次为顶部栈,从顶部栈一直到底部栈,顺序是从左到右依次从0开始计算位置。所以顶部栈的位置为0,次顶部为1,依次往右。
    • 显示目录栈用dirs命令
    • 当前目录为/var,快速切换到次顶部栈用pushd命令,目录就会切换到/dev目录下。
    • 当前了目录是/var,快速切换到用户主目录,也就是底部栈的时候,用pushd 3命令。顶部栈位置为0。也可以pushd -0,从右边往左以0开始。
  • 弹出栈操作命令popd: 目录栈弹出操作用popd命令,popd命令默认弹出顶部栈, N:将第N个目录删除(从左边数起,数字从0开始);-N:将第N个目录删除(从右边数起,数字从0开始)。

查看评论

Linux切换目录一直都是用cd命令的,但是今天了解到目录栈操作,这个用于多目录切换简直方便太多了...

记住堆栈索引的初始值是 0,因此我们使用 2 来访问第三个条目。

当涉及3个以上的目录时,可以使用pushd和popd实现常用的目录之间的切换。使用pushd 和 popd命令时,可以无视cd 命令

为了更好地理解 pushd 和 popd 命令的作用,让我们先讨论堆栈的概念。想象你厨房案板上有一个空白区域,你想在上面放一套盘子。你会怎么做?很简单,一个接一个地放在上面。

pushd

  • 压入并切换路径
  ~$ pushd /var/www

执行命令后当前栈中包含 /var/www ~,并且当前目录切换到/var/www

  • 查看栈内容
  $ dirs
  • 切换至栈中的任意一个路径

dirs列出的路径从0到n进行编号,执行命令

  $ pushd  n

栈翻转并切换至n对应的目录路径

pushd 和 popd 命令是类似的概念。在 Linux 系统上有一个目录堆栈,你可以堆叠目录路径以供将来使用。你可以使用 dirs 命令来在任何时间点快速查看堆栈的内容。

popd

  • 删除最后添加的路径
  $ popd
  • 删除dirs列表中指定的路径
  popd  n
  • 出栈后的当前路径

出栈后,当前路径总是为栈顶元素对应路径

相似地,你可以在 popd 命令中使用此技术来从目录堆栈删除任何条目,而不用离开当前工作目录。例如,如果要使用 popd 从顶部(目前是 ~/Downloads)删除第三个条目,你可以运行以下命令:

$ dirs ~ 
$ dirs ~/Downloads ~ 
$ popd /usr/lib ~/Downloads ~ 
$ pushd  2 ~/Downloads ~/Desktop /usr/lib ~ 

我同意 pushd 和 popd 的概念不是很直接。但是,它需要的只是一点练习 - 是的,你需要多实践。花一些时间在这些命令上,你就会开始喜欢它们,特别是当它们提供了方便时。

输出显示现在堆栈中有两个目录路径:一个是用户的主目录,还有用户的下载目录。它们的保存顺序是:主目录位于底部,新添加的 Downloads 目录位于其上。

pushd  1 

所以目录堆栈现在包含总共四个目录路径,其中主目录(~)在底部,并且用户的桌面目录在顶部。

你也可以使用负的索引值:

pushd 和 popd 命令基础

因此你可以看到 dirs 命令同样产生相同的输出。

pushd 和 popd 命令也被 Linux 服务器管理员使用,他们通常在几个相同的目录之间移动。 在这里介绍了一些其他有用的使用场景。

上面的命令对目录堆栈做的结果:

总结

注意: 在 dir 中使用 -c 选项清除目录堆栈。

确认条目已经被移除了。

现在,我们的要求是改变堆栈中目录路径的顺序,最上面的元素(~/Desktop)放到底部,剩下的每个都向上移动一个位置。这可以使用以下命令实现:

现在,假设你想回到 /usr/lib 目录,所以你所要做的就是执行 popd 命令:

一定要记住的是堆栈的头是你当前的目录。这意味着现在我们当前的工作目录是 ~/Desktop。

彩世界网址 1

现在让我们简要地讨论一下 popd 和 pushd 命令的实际用法。虽然它们第一眼看起来可能有点复杂,但是这些命令在编写 shell 脚本时会派上用场 - 你不需要记住你从哪里来;只要执行一下 popd,你就能回到你来的目录。

一些高级用法

$ dirs /usr/lib ~ ~/Downloads ~/Desktop 

如果由于某些原因,你发现你很难记住元素在目录堆栈中的位置以及它们的索引,你则可以对在 dirs 命令中使用 -v 选项。这里有一个例子:

继续下去,使用 pushd 和 popd 命令来执行存储目录路径并删除它的操作。使用 pushd 非常容易 - 只需将要存储在目录堆栈中的路径作为此命令的参数传递。这里有一个例子:

上述命令的作用是,将当前工作目录更改为你作为参数传递的目录,并且还将路径添加到目录堆栈中。为了方便用户,pushd 命令在其输出中产生目录堆栈的内容。因此,当运行上面的命令时,产生了以下输出:

$ dirs  /usr/lib ~ ~/Desktop 

所以在整个过程的最后,案板上的第一个盘子是盘子中的最后一个,你手中最后一个盘子是盘子堆中的第一个。现在当你需要一个盘子时,你选择在堆的顶部的那个盘子并使用它,然后需要时选择下一个。

popd  2 

popd 命令不仅会将当前目录切换到 /usr/lib,它还会从目录堆栈中删除 ~/Desktop,这一点可以从命令输出中看出。这样,popd 命令将允许你以相反的顺序浏览这些目录。

下面的例子显示了在命令行终端启动后立即在我的系统上使用 dirs 命令的输出:

让我们再使用下 pushd 命令:

popd >/dev/null 2>&1 
~/Downloads ~ 

【编辑推荐】

输出中的波浪号(~)表示目录堆栈当前仅包含用户的主目录。

现在我们已经讨论了 pushd 和 popd 命令的基础知识,让我们继续讨论与这些命令相关的一些其它细节。首先,这些命令还允许你操作目录堆栈。例如,假设你的目录堆栈看起来像这样:

$ dirs ~/Desktop /usr/lib ~ ~/Downloads 

上述命令确保 popd 保持静默(不产生任何输出)。同样,你也可以静默 pushd。

在我们开始之前,值得说明的一点是,此后提到的所有指导和命令已经在 Ubuntu 14.04 和 Bash shell(4.3.11)上测试过。

要验证 pushd 的输出是正确的,你还可以使用 dirs 命令:

经验丰富的脚本编写者通常以以下方式使用这些命令:

因此,我们看到目录堆栈中的元素顺序已经改变,并且现在和我们想要的一样。当然,你可以让目录堆栈元素移动任何次数。例如,以下命令会将它们向上移动两次:

因此目录堆栈现在包含:

在本系列的第一部分中,我们通过讨论 cd - 命令的用法,重点介绍了 Linux 中的命令行导航。还讨论了一些其他相关要点/概念。现在进一步讨论,在本文中,我们将讨论如何使用 pushd 和 popd 命令在 Linux 命令行上获得更快的导航体验。

你可能已经猜到了,左边的数字是索引,接下来跟的是这个索引对应的目录路径。

$ pushd -1 /usr/lib ~ ~/Downloads ~/Desktop 
$ dirs -v 0 /usr/lib 1 ~ 2 ~/Desktop 
pushd /home/himanshu/Downloads/ 
$ pushd /usr/lib/; pushd /home/himanshu/Desktop/ /usr/lib ~/Downloads ~ ~/Desktop /usr/lib ~/Downloads ~ 

本文由时时app平台注册网站发布于彩世界网址,转载请注明出处:Linux下目录栈操作详解,linux目录详解彩世界网址

关键词: