​

   说明:  pushd,popd,dirs这几个我们讲到的命令是bash内建的命令,

         所以只要登录到了bash,这几个命令就可以使用了


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


 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]#



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

  我们需要使用 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出去的