[转]Linux 下 pushd,popd,cd

 

 

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

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

 

 

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

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

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

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


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

 

 
  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和-相等
 
   下面我们再看一个例子:

 

 
  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: 列出当前堆栈中保存的目录列表


   看例子:

 

 
  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不加参数即可

 

 

     
 
  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个开始数起

   看例子:

   
 
  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即可

   看例子:
   
 
  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参数即可
    
    看例子:
   
 
  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参数即可

     看例子:

 

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

 

源地址:http://www.cnblogs.com/zhengyuxin/articles/1933920.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值