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

可能大家会有疑问,为何要使用这几个命令,
   难道用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. [root@localhost ~]# popd +1
  13. ~ /usr/share/kde4/apps/kget
  14. [root@localhost ~]# dirs -v
  15. 0  ~
  16. 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出去

Linux 下 pushd,popd,cd- 用法的更多相关文章

  1. linux下find查找命令用法

    Linux下find命令在目录结构中搜索文件,并执行指定的操作.Linux下find命令提供了相当多的查找条件,功能很强大.由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时 ...

  2. linux command pushd popd

    Linux command pushd popd [Purpose]        Learning linux command  pushd popd   [Eevironment]        ...

  3. Linux下Date命令的用法

    转自http://blog.chinaunix.net/uid-8223172-id-2511672.html linux下date的用法比较复杂,但是也用的比较多,尤其是shell里面.现总结一下自 ...

  4. Linux下scp命令的用法

    scp 对拷文件夹 和 文件夹下的所有文件 对拷文件并重命名 对拷文件夹 (包括文件夹本身) scp -r   /home/wwwroot/www/charts/util root@192.168.1 ...

  5. Linux下mv命令高级用法

    mv 也是 Linux 下一个使用频率非常高的命令,但除了一些基本用法,你还知道它的哪些高级用法呢? 1. 基本用法 移动一个/多个文件: 移动一个/多个目录: 重命名文件/目录. 这些都是很基本的用 ...

  6. Linux下nl命令的用法详解

    Linux中nl命令和cat命令很像,不过nl命令会打上行号,属于比较不常用的命令,下面随小编一起来了解下这个鲜为人知的nl命令吧. nl命令在linux系统中用来计算文件中行号.nl 可以将输出的文 ...

  7. Linux下gcc与g++用法以及编写makefile

    1.         gcc与g++编译流程: 1)         编译流程: 2)         预处理:生成.i的预处理文件. Ø 只激活预处理,这个不生成文件,需要把它重定向一个输出文件. ...

  8. linux下iconv()函数的用法(转载并修改)

    linux shell 配置文件中默认的字符集编码为UTF-8 .UTF-8是unicode的一种表达方式,gb2312是和unicode都是字符的编码方式,所以说gb2312跟utf-8的概念应该不 ...

  9. linux shell pushd popd dirs命令

    1.dirs 1)功能显示当前目录栈中的所有记录(不带参数的dirs命令显示当前目录栈中的记录) 2)语法(1)格式:dirs  [-clpv]  [+n]  [-n](2)选项-c    删除目录栈 ...

随机推荐

  1. Django ORM 常用字段和参数

    Django ORM 常用字段和参数 一:常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. I ...

  2. MR执行环境有两种

    本地测试环境(windows): 在windows的hadoop目录bin目录有一个winutils.exe 1.在windows下配置hadoop的环境变量 2.拷贝debug工具(winutils ...

  3. linux学习第十五天 (Linux就该这么学) 找到一本不错的Linux电子书,附《Linux就该这么学》章节目录

    今天收尾DNS内容复习了,还有分享解析配置,都没有记,主要访问同一个域名,就近访问,

  4. 表table

    (一)创建表 create table if not exists mydb.employees( name string comment "employee name", sal ...

  5. linux性能监控(转)

    vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况.这个命令是我查看Linux/Unix最 ...

  6. PNP的学习-EPNP

    EPNP主要是利用已知的3d点,通过PCA选择4个控制点,建立新的局部坐标系,从而将3d坐标用新的控制点表示出来. 然后,利用相机投影模型和2d点,转换到相机坐标系中,再在相机坐标系中建立和世界坐标系 ...

  7. IE 11和const的兼容问题

    说好的IE11兼容javascript中的常量类型 const 呢 ?可能并没有完全兼容 项目中遇到一个问题,采用google浏览器访问没问题,在本地jetty启动,IE11也可以正常访问,然而当我将 ...

  8. Vmware Workstation添加centos 7系统网络问题(无IP情况)

    简单配置 命令行输入ip addr 查询不到IP的情况,如下: 解决办法: 1. vi  /etc/sysconfig/network-scripts/ifcfg-ens33 2. 最后一行,ONBO ...

  9. INTERVAL YEAR TO MONTH数据类型

    INTERVAL YEAR TO MONTH数据类型 Oracle语法: INTERVAL 'integer [- integer]' {YEAR | MONTH} [(precision)][TO ...

  10. JPA学习-03

    一.单向一对多 特点:性能差,不怎么用,有集合默认懒加载 @OneToMany 1.private Set<T> t = new HashSet<>() 2.private L ...