• 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出去

  • 相关阅读:
    为什么少有人在Windows电脑上安OS X?
    Xamarin.iOS开发初体验
    MySQL MyISAM/InnoDB高并发优化经验
    windows系统上安装与使用Android NDK r8d(二)
    windows系统上安装与使用Android NDK r8d(一)
    Windows平台下如何使用Android NDK
    Xamarin 手动安装步骤+破解(最新版Xamarin V3)
    MONO,原来你是水中月
    剑客vs刀客 Java vs .NET
    终于理解了什么是LGPL
  • 原文地址:https://www.cnblogs.com/dylancao/p/9083231.html
Copyright © 2020-2023  润新知