zoukankan      html  css  js  c++  java
  • Linux 下 pushd,popd,cd- 用法

    一,为何要使用这几个命令?

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

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

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

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


      如果只是在两个目录之间切换,那么还不必使用pushd,
      这时只需使用 cd -就可以了
     
      cd -的作用是可以回到前一个目录,
      看例子:
     

    [plain] view plain copy
     
    1. [root@localhost ~]# cd /usr/share/kde4/apps/kget/pics/  
    2. [root@localhost pics]# cd -  
    3.  /root  
    4. [root@localhost ~]# cd -  
    5.  /usr/share/kde4/apps/kget/pics  
    6. [root@localhost pics]#  



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

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

      $OLDPWD变量就是bash所记录的前一个目录
      也就是说:$OLDPWD和-相等
     
      下面我们再看一个例子:

    [plain] view plain copy
     
    1. [root@localhost ~]# cd /usr/share/kde4/apps/kget/pics/  
    2. [root@localhost pics]# echo $OLDPWD;  
    3. /root  
    4. [root@localhost pics]# cd $OLDPWD  
    5. [root@localhost ~]# echo $OLDPWD;  
    6. /usr/share/kde4/apps/kget/pics  
    7. [root@localhost ~]# cd $OLDPWD;  
    8. [root@localhost pics]# echo $OLDPWD;  
    9. /root  



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


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

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

      1,用到的3条命令pushd,popd,dirs


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

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


      看例子:

    [plain] view plain copy
     
    1. [root@localhost ~]# pushd /usr/local/sbin/  
    2. /usr/local/sbin ~  
    3. [root@localhost sbin]# dirs  
    4. /usr/local/sbin ~  
    5. [root@localhost sbin]# dirs -p -v  
    6.  0  /usr/local/sbin  
    7.  1  ~  
    8. [root@localhost sbin]# pushd /usr/share/kde4/apps/kget/  
    9. /usr/share/kde4/apps/kget /usr/local/sbin ~  
    10. [root@localhost kget]# dirs -p -v  
    11.  0  /usr/share/kde4/apps/kget  
    12.  1  /usr/local/sbin  
    13.  2  ~  




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

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


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

       
    [plain] view plain copy
     
    1. [root@localhost kget]# pushd /boot/grub/  
    2. /boot/grub /usr/share/kde4/apps/kget /usr/local/sbin ~  
    3. [root@localhost grub]# dirs -v  
    4. 0  /boot/grub  
    5. 1  /usr/share/kde4/apps/kget  
    6. 2  /usr/local/sbin  
    7. 3  ~  
    8. [root@localhost grub]# pushd  
    9. /usr/share/kde4/apps/kget /boot/grub /usr/local/sbin ~  
    10. [root@localhost kget]# dirs -v  
    11. 0  /usr/share/kde4/apps/kget  
    12. 1  /boot/grub  
    13. 2  /usr/local/sbin  
    14. 3  ~  
    15. [root@localhost kget]# pushd  
    16. /boot/grub /usr/share/kde4/apps/kget /usr/local/sbin ~  
    17. [root@localhost grub]# dirs -v  
    18. 0  /boot/grub  
    19. 1  /usr/share/kde4/apps/kget  
    20. 2  /usr/local/sbin  
    21. 3  ~  
    22. /boot/grub /usr/share/kde4/apps/kget /usr/local/sbin ~  
    23. [root@localhost grub]# dirs -v  
    24. 0  /boot/grub  
    25. 1  /usr/share/kde4/apps/kget  
    26. 2  /usr/local/sbin  
    27. 3  ~  
    28. [root@localhost grub]# pushd  
    29. /usr/share/kde4/apps/kget /boot/grub /usr/local/sbin ~  
    30. [root@localhost kget]# dirs -v  
    31. 0  /usr/share/kde4/apps/kget  
    32. 1  /boot/grub  
    33. 2  /usr/local/sbin  
    34. 3  ~  
    35. [root@localhost kget]# pushd  
    36. /boot/grub /usr/share/kde4/apps/kget /usr/local/sbin ~  
    37. [root@localhost grub]# dirs -v  
    38. 0  /boot/grub  
    39. 1  /usr/share/kde4/apps/kget  
    40. 2  /usr/local/sbin  
    41. 3  ~  


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

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


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

       看例子:

       

    [plain] view plain copy
     
    1. [root@localhost grub]# dirs -v  
    2. 0  /boot/grub  
    3. 1  /usr/share/kde4/apps/kget  
    4. 2  /usr/local/sbin  
    5. 3  ~  
    6. [root@localhost grub]# pushd +2  
    7. /usr/local/sbin ~ /boot/grub /usr/share/kde4/apps/kget  
    8. [root@localhost sbin]# dirs -v  
    9. 0  /usr/local/sbin  
    10. 1  ~  
    11. 2  /boot/grub  
    12. 3  /usr/share/kde4/apps/kget  




       4,如何把目录从堆栈中删除?

       用popd即可

       看例子:
       

    [plain] view plain copy
     
    1. [root@localhost sbin]# dirs -v  
    2. 0  /usr/local/sbin  
    3. 1  ~  
    4. 2  /boot/grub  
    5. 3  /usr/share/kde4/apps/kget  
    6. [root@localhost sbin]# popd  
    7. ~ /boot/grub /usr/share/kde4/apps/kget  
    8. [root@localhost ~]# dirs -v  
    9. 0  ~  
    10. 1  /boot/grub  
    11. 2  /usr/share/kde4/apps/kget  
    12.   
    13. [root@localhost ~]# popd +1  
    14.  ~ /usr/share/kde4/apps/kget  
    15. [root@localhost ~]# dirs -v  
    16. 0  ~  
    17. 1  /usr/share/kde4/apps/kget  




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


    四,多学一点知识

       1,pushd和popd都可以只影响堆栈而不切换目录

         用 -n参数即可
        
        看例子:
       

    [plain] view plain copy
     
    1. [root@localhost ~]# dirs -v  
    2. 0  ~  
    3. 1  /usr/share/kde4/apps/kget  
    4. [root@localhost ~]# pushd -n /boot/grub  
    5. ~ /boot/grub /usr/share/kde4/apps/kget  
    6. [root@localhost ~]# dirs -v  
    7.  0  ~  
    8.  1  /boot/grub  
    9.  2  /usr/share/kde4/apps/kget  




        2, dirs可以清空目录堆栈

          用 -c参数即可

         看例子:

    [plain] view plain copy
     
    1. [root@localhost ~]# dirs -v  
    2. 0  ~  
    3. 1  /boot/grub  
    4. 2  /usr/share/kde4/apps/kget  
    5. [root@localhost ~]# dirs -c  
    6. [root@localhost ~]# dirs -v  
    7. 0  ~  




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

  • 相关阅读:
    【C++】资源管理
    【Shell脚本】逐行处理文本文件
    【算法题】rand5()产生rand7()
    【Shell脚本】字符串处理
    Apple iOS产品硬件参数. 不及格的程序员
    与iPhone的差距! 不及格的程序员
    iPhone游戏 Mr.Karoshi"过劳死"通关. 不及格的程序员
    XCode V4 发布了, 苹果的却是个变态. 不及格的程序员
    何时readonly 字段不是 readonly 的?结果出呼你想象!!! 不及格的程序员
    object file format unrecognized, invalid, or unsuitable Command 不及格的程序员
  • 原文地址:https://www.cnblogs.com/dylancao/p/9083231.html
Copyright © 2011-2022 走看看