设为首页 收藏本站
查看: 1300|回复: 0

Shell让切换目录更方便

[复制链接]

尚未签到

发表于 2015-4-29 09:31:31 | 显示全部楼层 |阅读模式
  原文地址 http://www.iyunv.com/zhengyuxin/articles/1933920.html
  让切换目录更方便: pushd,popd,dirs,cd -
一,为何要使用这几个命令?
   可能大家会有疑问,为何要使用这几个命令,
   难道用cd不就可以切换目录了吗?
   没错,使用cd就可以切换到需要访问的目录,
   但是有时会是一个路径很长,层次很多的目录,进到此目录下后,这时我们不小心运行了 cd命令,
   理所当然,我们回到了自己的home目录,这时如果想回去怎么办?
   还有:因为工作的需要,我们需要不停在几个很深层的目录之间切换,不止一个,
   那么即使有tab键帮忙,我们也会因为一个cd命令花费很多时间,如何在多个目录之间切换时能更方便些
   pushd,popd是我们的好帮手
   说明:  pushd,popd,dirs这几个我们讲到的命令是bash内建的命令,
         所以只要登录到了bash,这几个命令就可以使用了
二,如何在两个目录之间切换?
  如果只是在两个目录之间切换,那么还不必使用pushd,
  这时只需使用 cd -就可以了

  cd -的作用是可以回到前一个目录,
  看例子:

  [iyunv@localhost ~]# cd /usr/share/kde4/apps/kget/pics/
  [iyunv@localhost pics]# cd -
   /root
  [iyunv@localhost ~]# cd -
   /usr/share/kde4/apps/kget/pics
  [iyunv@localhost pics]#
  怎么样?在两个目录之间切换非常方便,无需再输入很长的路径
  说明:
  为何cd -能够回到前一个目录?
  这是因为 -在此处等同于 $OLDPWD变量,
  此问题可以参见bash的info信息,
  cd 一项有相关的说明: An argument of - is equivalent to $OLDPWD.  
  $OLDPWD变量就是bash所记录的前一个目录
  也就是说:$OLDPWD和-相等

  下面我们再看一个例子:
  [iyunv@localhost ~]# cd /usr/share/kde4/apps/kget/pics/
  [iyunv@localhost pics]# echo $OLDPWD;
  /root
  [iyunv@localhost pics]# cd $OLDPWD
  [iyunv@localhost ~]# echo $OLDPWD;
  /usr/share/kde4/apps/kget/pics
  [iyunv@localhost ~]# cd $OLDPWD;
  [iyunv@localhost pics]# echo $OLDPWD;
  /root
   我们可以得到结构:  用cd -和cd $OLDPWD都可以在最近所操作的两个目录之间进行切换

三,如何在多个目录之间切换?
  因为 cd -和 cd $OLDPWD都是只支持最近操作的两个目录,所以要在多个目录之间操作时,
  我们需要使用 pushd
  1,
  先来介绍我们会用到的3条命令
  pushd:切换到作为参数的目录,并把原目录和当前目录压入到一个虚拟的堆栈中
         如果不指定参数,则会回到前一个目录,并把堆栈中最近的两个目录作交换
  popd: 弹出堆栈中最近的目录
  dirs: 列出当前堆栈中保存的目录列表

  看例子:
  [iyunv@localhost ~]# pushd /usr/local/sbin/
  /usr/local/sbin ~
  [iyunv@localhost sbin]# dirs
  /usr/local/sbin ~
  [iyunv@localhost sbin]# dirs -p -v
   0  /usr/local/sbin
   1  ~
  [iyunv@localhost sbin]# pushd /usr/share/kde4/apps/kget/
  /usr/share/kde4/apps/kget /usr/local/sbin ~
  [iyunv@localhost kget]# dirs -p -v
   0  /usr/share/kde4/apps/kget
   1  /usr/local/sbin
   2  ~

  说明: dirs的 -p参数可以每行一个目录的形式显示堆栈中的目录列表
              -v参数可以在目录前加上编号
              注意:有 -v时,不添加 -p也可以每行一个目录的形式显示
  说明之二:我们可以看到:最近压入堆栈的目录位于最上面
  2,如何在最近的两个目录之间切换?
   在最近的两个目录之间切换:用pushd不加参数即可
   [iyunv@localhost kget]# pushd /boot/grub/
   /boot/grub /usr/share/kde4/apps/kget /usr/local/sbin ~
   [iyunv@localhost grub]# dirs -v
   0  /boot/grub
   1  /usr/share/kde4/apps/kget
   2  /usr/local/sbin
   3  ~
   [iyunv@localhost grub]# pushd
   /usr/share/kde4/apps/kget /boot/grub /usr/local/sbin ~
   [iyunv@localhost kget]# dirs -v
   0  /usr/share/kde4/apps/kget
   1  /boot/grub
   2  /usr/local/sbin
   3  ~
   [iyunv@localhost kget]# pushd
   /boot/grub /usr/share/kde4/apps/kget /usr/local/sbin ~
   [iyunv@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个开始数起
   看例子:
   [iyunv@localhost grub]# dirs -v
   0  /boot/grub
   1  /usr/share/kde4/apps/kget
   2  /usr/local/sbin
   3  ~
   [iyunv@localhost grub]# pushd +2
   /usr/local/sbin ~ /boot/grub /usr/share/kde4/apps/kget
   [iyunv@localhost sbin]# dirs -v
   0  /usr/local/sbin
   1  ~
   2  /boot/grub
   3  /usr/share/kde4/apps/kget
   4,如何把目录从堆栈中删除?
   用popd即可
   看例子:
   [iyunv@localhost sbin]# dirs -v
   0  /usr/local/sbin
   1  ~
   2  /boot/grub
   3  /usr/share/kde4/apps/kget
   [iyunv@localhost sbin]# popd
   ~ /boot/grub /usr/share/kde4/apps/kget
   [iyunv@localhost ~]# dirs -v
   0  ~
   1  /boot/grub
   2  /usr/share/kde4/apps/kget
   [iyunv@localhost ~]# popd +1
    ~ /usr/share/kde4/apps/kget
   [iyunv@localhost ~]# dirs -v
   0  ~
   1  /usr/share/kde4/apps/kget
   说明:可以看到popd不加参数的运行情况:
        popd把堆栈顶端的目录从堆栈中删除,并切换于位于新的顶端的目录
   说明之二: popd 加有参数 +n时,
   n是堆栈中的第n个目录,表示把堆栈中第n个目录从堆栈中删除

四,多学一点知识
   1,pushd和popd都可以只影响堆栈而不切换目录
     用 -n参数即可
   
    看例子:
    [iyunv@localhost ~]# dirs -v
    0  ~
    1  /usr/share/kde4/apps/kget
    [iyunv@localhost ~]# pushd -n /boot/grub
    ~ /boot/grub /usr/share/kde4/apps/kget
    [iyunv@localhost ~]# dirs -v
     0  ~
     1  /boot/grub
     2  /usr/share/kde4/apps/kget
    2, dirs可以清空目录堆栈
      用 -c参数即可
     看例子:
     [iyunv@localhost ~]# dirs -v
     0  ~
     1  /boot/grub
     2  /usr/share/kde4/apps/kget
     [iyunv@localhost ~]# dirs -c
     [iyunv@localhost ~]# dirs -v
     0  ~
     说明:  位于堆栈顶部的目录是当前目录,它不能被pop出去的

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-61796-1-1.html 上篇帖子: 26、linux shell常用的几个函数,diff 下篇帖子: shell程序设计的语法--lt;条件测试>
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表