Linux 下 pushd,popd,cd- 用法

摘要:
您可以使用cd切换到需要访问的目录。此时,您可以使用cd-返回到上一个目录。您可以使用cd-和cd$OLDPWD在最近操作的两个目录之间切换。因为cd-和cd$OLDPWD只支持您最近操作的两个目录。列出保存在当前堆栈中的目录列表。请参见示例:
一,为何要使用这几个命令?

   可能大家会有疑问,为何要使用这几个命令,
   难道用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出去

免责声明:文章转载自《Linux 下 pushd,popd,cd- 用法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇easyui扩展行默认展开 以及 去除滚动条ps和AI使用过程中的易错点整理下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

GCC 中的编译器堆栈保护技术(转)

转自:https://www.cnblogs.com/gt-xy/p/7749725.html 前几天看到的觉得不错得博客于是转发了,但这里我补充一下一些点。 GCC通过栈保护选项-fstack-protector-all编译时额外添加两个符号,__stack_chk_guard和__stack_chk_fail分别是存储canary word值的地址...

基于S3C2440的linux-3.6.6移植——LED驱动【转】

本文转载自:http://www.voidcn.com/blog/lqxandroid2012/article/p-625005.html 目前的linux版本的许多驱动都是基于设备模型,LED也不例外。 简单地说,设备模型就是系统认为所有的设备都是挂接在总线上的,而要使设备工作,就需要相应的驱动。设备模型会产生一个虚拟的文件系统——sysfs,它给用户提...

clickhousebackup备份和恢复

版本:1.2.2 1.下载wget https://github.com/AlexAkulov/clickhouse-backup/releases/download/v0.6.0/clickhouse-backup.tar.gzwget https://github.com/AlexAkulov/clickhouse-backup/releases/do...

记一次Postgresql异常中断导致的启动失败

由于异常导致了测试服务器的Pg11宕机,启动时候报错 2019-06-11 14:20:08.121 CST [9980] 致命错误: 数据库系统启动中 2019-06-11 14:20:08.121 CST [9981] 致命错误: 数据库系统启动中 2019-06-11 14:20:08.121 CST [9964] 致命错误: 数据库系统启动中...

Windows XP官方原版系统(所有历史版本下载)

软件简介:    Windows XP,是微软公司(Microsoft)推出的供个人电脑使用的操作系统,包括商用及家用的台式电脑等。其名字“XP”的意思是英文中的“体验(Experience)”,是继Windows 2000及Windows ME,9X之后的下一代Windows操作系统,也是微软首个面向消费者且使用Windows NT5.1架构的操作系统,...

ln (link)命令

ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。 1.命令格式:  ln [参数][源文件或目录]...