但是今天了解到目录栈操作,pushd将指定目录压入

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命令的,但是今天了解到目录栈操作,这个用于多目录切换简直方便太多了...

三、pushd、popd、dirs

Linux的多目录命令提示符中工作是一种痛苦的事情,但以下这些利用linux cd命令和pushd切换目录的技巧有助于你节省时间和精力 。

  用pushd实现在不同目录间切换。

  在命令行模式下,当你工作在不同目录中,你将发现你有很多时间都浪费在重复输入上。如果这些目录不在同一个根目录中,你不得不在转换时输入完整的路径名,这难免让人有些难以忍受。但你可以用以下的一个或两个步骤来避免所有多余的输入:用命令行解释器中的历史记录,或者用命令行函数pushd。

  用命令行解释器中的历史记录的好处是只需按很少的键。在命令行中用向上的箭头来查找你用过的命令,直到你找到,然后按回车键。如果你所切换的两个目录在整个驱动器的子目录结构中很接近,那用解释器中的历史记录可能是你最好的选择。

  然而,如果你在两个截然不同的路径间转换的话,你可能很希望利用pushd这个函数,你可以用它创建一个目录堆栈(在内存中的一个列表)。

  注释:缺省情况下,pushd函数可能不包括在你的Linux中;但它包涵在Red Hat和用Red Hat驱动的系统中。如果你的系统中没有pushd函数,你可以在ibiblio.org网站上下载相关的函数工具。

  这里说一下怎么用pushd。假设你现在工作在/usr/share/fonts目录下。你需要对/usr/share/fonts做一些改动,你将频繁的在两个目录间切换。开始在一个目录下,用pushd函数切换到另一个目录。在我们的例子中,开始在/usr/share/fonts下,你键入pushd/opt/wonderword/fonts,然后按回车键。现在,你将在下一行看到堆栈中的内容:/opt/wonderword/fonts /usr/share/fonts。

  正如你所看到的,当你键入pushd和一个路径名时,将自动产生一个堆栈,内容是你键入的目录名和你当前工作的目录名。在我们的例子中,你所键入的路径(/opt/wonderword/fonts)在堆栈的顶部。

  快速返回上一级目录,你可以直接键入pushd,如果不跟路径名,你将返回到堆栈中前一个目录的上一层目录。

  如果你需要从堆栈中删除一个目录,键入popd,然后是目录名称,再按回车键。想查看堆栈中目录列表,键入dirs,然后按回车键。popd和dirs命令也是常用函数中的一部分。

 

 

让切换目录更方便: pushd,popd,dirs,cd -

一,为何要使用这几个命令?
   可能大家会有疑问,为何要使用这几个命令,
   难道用cd不就可以切换目录了吗?
   没错,使用cd就可以切换到需要访问的目录,
   但是有时会是一个路径很长,层次很多的目录,进到此目录下后,这时我们不小心运行了 cd命令,
   理所当然,我们回到了自己的home目录,这时如果想回去怎么办?

   还有:因为工作的需要,我们需要不停在几个很深层的目录之间切换,不止一个,
   那么即使有tab键帮忙,我们也会因为一个cd命令花费很多时间,如何在多个目录之间切换时能更方便些
   pushd,popd是我们的好帮手

   说明:  pushd,popd,dirs这几个我们讲到的命令是bash内建的命令,
         所以只要登录到了bash,这几个命令就可以使用了

二,如何在两个目录之间切换?

  如果只是在两个目录之间切换,那么还不必使用pushd,
  这时只需使用 cd -就可以了
 
  cd -的作用是可以回到前一个目录,
  看例子:
 
  [root@localhost ~]# cd /usr/share/kde4/apps/kget/pics/
  [root@localhost pics]# cd -
   /root
  [root@localhost ~]# cd -
   /usr/share/kde4/apps/kget/pics
  [root@localhost pics]#

  怎么样?在两个目录之间切换非常方便,无需再输入很长的路径

  说明:
  为何cd -能够回到前一个目录?
  这是因为 -在此处等同于 $OLDPWD变量,
  此问题可以参见bash的info信息,
  cd 一项有相关的说明: An argument of - is equivalent to $OLDPWD.  

  $OLDPWD变量就是bash所记录的前一个目录
  也就是说:$OLDPWD和-相等
 
  下面我们再看一个例子:
  [root@localhost ~]# cd /usr/share/kde4/apps/kget/pics/
  [root@localhost pics]# echo $OLDPWD;
  /root
  [root@localhost pics]# cd $OLDPWD
  [root@localhost ~]# echo $OLDPWD;
  /usr/share/kde4/apps/kget/pics
  [root@localhost ~]# cd $OLDPWD;
  [root@localhost pics]# echo $OLDPWD;
  /root

   我们可以得到结构:  用cd -和cd $OLDPWD都可以在最近所操作的两个目录之间进行切换

三,如何在多个目录之间切换?
  因为 cd -和 cd $OLDPWD都是只支持最近操作的两个目录,所以要在多个目录之间操作时,
  我们需要使用 pushd

  1,
  先来介绍我们会用到的3条命令

  pushd:切换到作为参数的目录,并把原目录和当前目录压入到一个虚拟的堆栈中
         如果不指定参数,则会回到前一个目录,并把堆栈中最近的两个目录作交换

  popd: 弹出堆栈中最近的目录
  dirs: 列出当前堆栈中保存的目录列表

  看例子:
  [root@localhost ~]# pushd /usr/local/sbin/
  /usr/local/sbin ~
  [root@localhost sbin]# dirs
  /usr/local/sbin ~
  [root@localhost sbin]# dirs -p -v
   0  /usr/local/sbin
   1  ~
  [root@localhost sbin]# pushd /usr/share/kde4/apps/kget/
  /usr/share/kde4/apps/kget /usr/local/sbin ~
  [root@localhost kget]# dirs -p -v
   0  /usr/share/kde4/apps/kget
   1  /usr/local/sbin
   2  ~

  说明: dirs的 -p参数可以每行一个目录的形式显示堆栈中的目录列表
              -v参数可以在目录前加上编号
              注意:有 -v时,不添加 -p也可以每行一个目录的形式显示
  说明之二:我们可以看到:最近压入堆栈的目录位于最上面

  2,如何在最近的两个目录之间切换?

   在最近的两个目录之间切换:用pushd不加参数即可

   [root@localhost kget]# pushd /boot/grub/
   /boot/grub /usr/share/kde4/apps/kget /usr/local/sbin ~
   [root@localhost grub]# dirs -v
   0  /boot/grub
   1  /usr/share/kde4/apps/kget
   2  /usr/local/sbin
   3  ~
   [root@localhost grub]# pushd
   /usr/share/kde4/apps/kget /boot/grub /usr/local/sbin ~
   [root@localhost kget]# dirs -v
   0  /usr/share/kde4/apps/kget
   1  /boot/grub
   2  /usr/local/sbin
   3  ~
   [root@localhost kget]# pushd
   /boot/grub /usr/share/kde4/apps/kget /usr/local/sbin ~
   [root@localhost grub]# dirs -v
   0  /boot/grub
   1  /usr/share/kde4/apps/kget
   2  /usr/local/sbin
   3  ~

   说明:可以看到,用pushd不加参数在最近的两个目录之间切换时,
        当前目录总是位于堆栈的最上面

  3,如何在多个目录之间切换?

   用 pushd +n即可
   说明:
   n是一个数字,有此参数时,是切换到堆栈中的第n个目录,并把此目录以堆栈循环的方式推到堆栈的顶部
   需要注意: 堆栈从第0个开始数起

   看例子:

   [root@localhost grub]# dirs -v
   0  /boot/grub
   1  /usr/share/kde4/apps/kget
   2  /usr/local/sbin
   3  ~
   [root@localhost grub]# pushd +2
   /usr/local/sbin ~ /boot/grub /usr/share/kde4/apps/kget
   [root@localhost sbin]# dirs -v
   0  /usr/local/sbin
   1  ~
   2  /boot/grub
   3  /usr/share/kde4/apps/kget

   4,如何把目录从堆栈中删除?
   用popd即可

   看例子:
   [root@localhost sbin]# dirs -v
   0  /usr/local/sbin
   1  ~
   2  /boot/grub
   3  /usr/share/kde4/apps/kget
   [root@localhost sbin]# popd
   ~ /boot/grub /usr/share/kde4/apps/kget
   [root@localhost ~]# dirs -v
   0  ~
   1  /boot/grub
   2  /usr/share/kde4/apps/kget

   [root@localhost ~]# popd +1
    ~ /usr/share/kde4/apps/kget
   [root@localhost ~]# dirs -v
   0  ~
   1  /usr/share/kde4/apps/kget

   说明:可以看到popd不加参数的运行情况:
        popd把堆栈顶端的目录从堆栈中删除,并切换于位于新的顶端的目录
   说明之二: popd 加有参数 +n时,
   n是堆栈中的第n个目录,表示把堆栈中第n个目录从堆栈中删除

四,多学一点知识

   1,pushd和popd都可以只影响堆栈而不切换目录
     用 -n参数即可
    
    看例子:
    [root@localhost ~]# dirs -v
    0  ~
    1  /usr/share/kde4/apps/kget
    [root@localhost ~]# pushd -n /boot/grub
    ~ /boot/grub /usr/share/kde4/apps/kget
    [root@localhost ~]# dirs -v
     0  ~
     1  /boot/grub
     2  /usr/share/kde4/apps/kget

    2, dirs可以清空目录堆栈
      用 -c参数即可

     看例子:
     [root@localhost ~]# dirs -v
     0  ~
     1  /boot/grub
     2  /usr/share/kde4/apps/kget
     [root@localhost ~]# dirs -c
     [root@localhost ~]# dirs -v
     0  ~

     说明:  位于堆栈顶部的目录是当前目录,它不能被pop出去的

 

   说明:可以看到,用pushd不加参数在最近的两个目录之间切换时,
        当前目录总是位于堆栈的最上面

Linux指令详解pushd快速切换目录

指令:pushd
在不同目录间切换

在命令行模式中,当需要在不同目录中不停的切换时会发现不停的输入目录很麻烦,这个时候就需要用上pushd函数了

pushd工作原理:
pushd将指定目录压入当前shell维护的目录栈,从而可以实现多个不同路径之间的切换.

Ps:默认情况下,pushd函数可能不包括在你的Linux中,但存在于red Hat和用Red Hat驱动的系统中。

语法:
# pushd [-n] [+N | -N | dir]

参数:

-n: 只将目录加入到目录栈中,不切换目录
+N: 将第N个目录移至栈顶(+ 表示从左或上边(栈顶)数起,数字从0开始,栈顶表示为+0)
-N: 将第N个目录移至栈顶(- 表示从右或下边(栈底)数起,数字从0开始,栈底表示为-0)
dir:指定需要加入目录栈的目录,并同时切换到该目录

Ps:
1、 不带参数时pushd命令将交换目录栈栈顶的两个目录(等同于cd -)
2、 如果加入目录时没有指定目录名称,则会将当前的工作目录置入目录栈的最顶端
3、 如果加入目录时没有指定目录栈的位置,会置入目录栈的最顶端
4、 最左边或上面表示栈顶,最右或最下面边表示栈底
5、 目录栈的第0个目录(即栈顶目录),始终是当前目录
6、 最后一个被放入堆中的目录在堆的最顶部
7、 当目录栈为空时,目录栈的栈底保存的是执行 pushd 命令时的工作目录
8、 当加入pushd和一个路径名时,将自动产生一个堆栈,内容是加入的目录名和当前工作的目录名

实例
现在有如下三个目录需要经常的切换:/doiido/boy : /home/user : /etc/sshd

1:首先将三个目录放入pushd栈中
# pushd /doiido/boy
/doiido/boy ~
# pushd /home/user
/home/user /doiido/boy ~
# pushd /etc/ssh
/etc/ssh /home/user /doiido/boy ~
2:查看栈中的内容
dirs命令是查看目录栈中的内容
# dirs -v
0 /etc/ssh
1 /home/user
2 /doiido/boy
3 ~
3:切换
3.1:在/etc/ssh和/home/user之间互相切换
# pushd

3.2:切换到/doiido/boy目录
# pushd +2

4:清空
# dirs -c
其他:
1、如果需要从目录栈中删除一个目录,则使用popd。具体详见popd使用方法

2、如果想查看目录栈中目录列表,则使用dirs。具体详见dirs使用方法

指令:pushd 在不同目录间切换 在命令行模式中,当需要在不同目录中不停的切换时会发现不停的输入目录很...

pushd [-n] [+n] [-n]

一、cd   ~

           切换到用户目录

三,如何在多个目录之间切换?
  因为 cd -和 cd $OLDPWD都是只支持最近操作的两个目录,所以要在多个目录之间操作时,
  我们需要使用 pushd

仅向栈中添加目录,不切换当前工作目录。

二、cd   -

          cd - 返回进入当前目录前所在目录

    2, dirs可以清空目录堆栈
      用 -c参数即可

  快速目录切换使用到的是成为目录栈的东东,通过三个命令实现。pushd目录入栈与切换、dirs查看栈中内容、popd栈中目录出栈。

   在最近的两个目录之间切换:用pushd不加参数即可

popd [-n] [+n] 

   还有:因为工作的需要,我们需要不停在几个很深层的目录之间切换,不止一个,
   那么即使有tab键帮忙,我们也会因为一个cd命令花费很多时间,如何在多个目录之间切换时能更方便些
   pushd,popd是我们的好帮手

1、pushd命令

  pushd:切换到作为参数的目录,并把原目录和当前目录压入到一个虚拟的堆栈中
         如果不指定参数,则会回到前一个目录,并把堆栈中最近的两个目录作交换

没有选项时显示当前保存的目录。默认输出为一行,目录名用空格分开。 

   4,如何把目录从堆栈中删除?
   用popd即可

pushd命令是切换到上一次访问的目录,同时调整目录记录列表的顺序(pushd命令的实际作用和“cd -”的命令相类似)

  说明: dirs的 -p参数可以每行一个目录的形式显示堆栈中的目录列表
              -v参数可以在目录前加上编号
              注意:有 -v时,不添加 -p也可以每行一个目录的形式显示
  说明之二:我们可以看到:最近压入堆栈的目录位于最上面

删除 dirs 给出的列表中从右数第n 个目录。

本文由必威发布于必威-运维,转载请注明出处:但是今天了解到目录栈操作,pushd将指定目录压入

相关阅读