Linux 下 pushd,popd,cd- 用法
一,为何要使用这几个命令?
可能大家会有疑问,为何要使用这几个命令,
难道用cd不就可以切换目录了吗?
没错,使用cd就可以切换到需要访问的目录,
但是有时会是一个路径很长,层次很多的目录,进到此目录下后,这时我们不小心运行了 cd命令,
理所当然,我们回到了自己的home目录,这时如果想回去怎么办?
还有:因为工作的需要,我们需要不停在几个很深层的目录之间切换,不止一个,
那么即使有tab键帮忙,我们也会因为一个cd命令花费很多时间,如何在多个目录之间切换时能更方便些
pushd,popd是我们的好帮手
说明: pushd,popd,dirs这几个我们讲到的命令是bash内建的命令,
所以只要登录到了bash,这几个命令就可以使用了
二,如何在两个目录之间切换?
如果只是在两个目录之间切换,那么还不必使用pushd,
这时只需使用 cd -就可以了
cd -的作用是可以回到前一个目录,
看例子:
- [root@localhost ~]# cd /usr/share/kde4/apps/kget/pics/
- [root@localhost pics]# cd -
- /root
- [root@localhost ~]# cd -
- /usr/share/kde4/apps/kget/pics
- [root@localhost pics]#
怎么样?在两个目录之间切换非常方便,无需再输入很长的路径
说明:
为何cd -能够回到前一个目录?
这是因为 -在此处等同于 $OLDPWD变量,
此问题可以参见bash的info信息,
cd 一项有相关的说明: An argument of - is equivalent to $OLDPWD.
$OLDPWD变量就是bash所记录的前一个目录
也就是说:$OLDPWD和-相等
下面我们再看一个例子:
- [root@localhost ~]# cd /usr/share/kde4/apps/kget/pics/
- [root@localhost pics]# echo $OLDPWD;
- /root
- [root@localhost pics]# cd $OLDPWD
- [root@localhost ~]# echo $OLDPWD;
- /usr/share/kde4/apps/kget/pics
- [root@localhost ~]# cd $OLDPWD;
- [root@localhost pics]# echo $OLDPWD;
- /root
我们可以得到结构: 用cd -和cd $OLDPWD都可以在最近所操作的两个目录之间进行切换
三,如何在多个目录之间切换?
因为 cd -和 cd $OLDPWD都是只支持最近操作的两个目录,所以要在多个目录之间操作时,
我们需要使用 pushd
1,用到的3条命令pushd,popd,dirs
pushd:切换到作为参数的目录,并把原目录和当前目录压入到一个虚拟的堆栈中
如果不指定参数,则会回到前一个目录,并把堆栈中最近的两个目录作交换
popd: 弹出堆栈中最近的目录
dirs: 列出当前堆栈中保存的目录列表
看例子:
- [root@localhost ~]# pushd /usr/local/sbin/
- /usr/local/sbin ~
- [root@localhost sbin]# dirs
- /usr/local/sbin ~
- [root@localhost sbin]# dirs -p -v
- 0 /usr/local/sbin
- 1 ~
- [root@localhost sbin]# pushd /usr/share/kde4/apps/kget/
- /usr/share/kde4/apps/kget /usr/local/sbin ~
- [root@localhost kget]# dirs -p -v
- 0 /usr/share/kde4/apps/kget
- 1 /usr/local/sbin
- 2 ~
说明: dirs的 -p参数可以每行一个目录的形式显示堆栈中的目录列表
-v参数可以在目录前加上编号
注意:有 -v时,不添加 -p也可以每行一个目录的形式显示
说明之二:我们可以看到:最近压入堆栈的目录位于最上面
2,如何在最近的两个目录之间切换?
在最近的两个目录之间切换:用pushd不加参数即可
- [root@localhost kget]# pushd /boot/grub/
- /boot/grub /usr/share/kde4/apps/kget /usr/local/sbin ~
- [root@localhost grub]# dirs -v
- 0 /boot/grub
- 1 /usr/share/kde4/apps/kget
- 2 /usr/local/sbin
- 3 ~
- [root@localhost grub]# pushd
- /usr/share/kde4/apps/kget /boot/grub /usr/local/sbin ~
- [root@localhost kget]# dirs -v
- 0 /usr/share/kde4/apps/kget
- 1 /boot/grub
- 2 /usr/local/sbin
- 3 ~
- [root@localhost kget]# pushd
- /boot/grub /usr/share/kde4/apps/kget /usr/local/sbin ~
- [root@localhost grub]# dirs -v
- 0 /boot/grub
- 1 /usr/share/kde4/apps/kget
- 2 /usr/local/sbin
- 3 ~
- /boot/grub /usr/share/kde4/apps/kget /usr/local/sbin ~
- [root@localhost grub]# dirs -v
- 0 /boot/grub
- 1 /usr/share/kde4/apps/kget
- 2 /usr/local/sbin
- 3 ~
- [root@localhost grub]# pushd
- /usr/share/kde4/apps/kget /boot/grub /usr/local/sbin ~
- [root@localhost kget]# dirs -v
- 0 /usr/share/kde4/apps/kget
- 1 /boot/grub
- 2 /usr/local/sbin
- 3 ~
- [root@localhost kget]# pushd
- /boot/grub /usr/share/kde4/apps/kget /usr/local/sbin ~
- [root@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个开始数起
看例子:
- [root@localhost grub]# dirs -v
- 0 /boot/grub
- 1 /usr/share/kde4/apps/kget
- 2 /usr/local/sbin
- 3 ~
- [root@localhost grub]# pushd +2
- /usr/local/sbin ~ /boot/grub /usr/share/kde4/apps/kget
- [root@localhost sbin]# dirs -v
- 0 /usr/local/sbin
- 1 ~
- 2 /boot/grub
- 3 /usr/share/kde4/apps/kget
4,如何把目录从堆栈中删除?
用popd即可
看例子:
- [root@localhost sbin]# dirs -v
- 0 /usr/local/sbin
- 1 ~
- 2 /boot/grub
- 3 /usr/share/kde4/apps/kget
- [root@localhost sbin]# popd
- ~ /boot/grub /usr/share/kde4/apps/kget
- [root@localhost ~]# dirs -v
- 0 ~
- 1 /boot/grub
- 2 /usr/share/kde4/apps/kget
- [root@localhost ~]# popd +1
- ~ /usr/share/kde4/apps/kget
- [root@localhost ~]# dirs -v
- 0 ~
- 1 /usr/share/kde4/apps/kget
说明:可以看到popd不加参数的运行情况:
popd把堆栈顶端的目录从堆栈中删除,并切换于位于新的顶端的目录
说明之二: popd 加有参数 +n时,
n是堆栈中的第n个目录,表示把堆栈中第n个目录从堆栈中删除
四,多学一点知识
1,pushd和popd都可以只影响堆栈而不切换目录
用 -n参数即可
看例子:
- [root@localhost ~]# dirs -v
- 0 ~
- 1 /usr/share/kde4/apps/kget
- [root@localhost ~]# pushd -n /boot/grub
- ~ /boot/grub /usr/share/kde4/apps/kget
- [root@localhost ~]# dirs -v
- 0 ~
- 1 /boot/grub
- 2 /usr/share/kde4/apps/kget
2, dirs可以清空目录堆栈
用 -c参数即可
看例子:
- [root@localhost ~]# dirs -v
- 0 ~
- 1 /boot/grub
- 2 /usr/share/kde4/apps/kget
- [root@localhost ~]# dirs -c
- [root@localhost ~]# dirs -v
- 0 ~
说明: 位于堆栈顶部的目录是当前目录,它不能被pop出去
Linux 下 pushd,popd,cd- 用法的更多相关文章
- linux下find查找命令用法
Linux下find命令在目录结构中搜索文件,并执行指定的操作.Linux下find命令提供了相当多的查找条件,功能很强大.由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时 ...
- linux command pushd popd
Linux command pushd popd [Purpose] Learning linux command pushd popd [Eevironment] ...
- Linux下Date命令的用法
转自http://blog.chinaunix.net/uid-8223172-id-2511672.html linux下date的用法比较复杂,但是也用的比较多,尤其是shell里面.现总结一下自 ...
- Linux下scp命令的用法
scp 对拷文件夹 和 文件夹下的所有文件 对拷文件并重命名 对拷文件夹 (包括文件夹本身) scp -r /home/wwwroot/www/charts/util root@192.168.1 ...
- Linux下mv命令高级用法
mv 也是 Linux 下一个使用频率非常高的命令,但除了一些基本用法,你还知道它的哪些高级用法呢? 1. 基本用法 移动一个/多个文件: 移动一个/多个目录: 重命名文件/目录. 这些都是很基本的用 ...
- Linux下nl命令的用法详解
Linux中nl命令和cat命令很像,不过nl命令会打上行号,属于比较不常用的命令,下面随小编一起来了解下这个鲜为人知的nl命令吧. nl命令在linux系统中用来计算文件中行号.nl 可以将输出的文 ...
- Linux下gcc与g++用法以及编写makefile
1. gcc与g++编译流程: 1) 编译流程: 2) 预处理:生成.i的预处理文件. Ø 只激活预处理,这个不生成文件,需要把它重定向一个输出文件. ...
- linux下iconv()函数的用法(转载并修改)
linux shell 配置文件中默认的字符集编码为UTF-8 .UTF-8是unicode的一种表达方式,gb2312是和unicode都是字符的编码方式,所以说gb2312跟utf-8的概念应该不 ...
- linux shell pushd popd dirs命令
1.dirs 1)功能显示当前目录栈中的所有记录(不带参数的dirs命令显示当前目录栈中的记录) 2)语法(1)格式:dirs [-clpv] [+n] [-n](2)选项-c 删除目录栈 ...
随机推荐
- 《笨方法学Python》加分题29
加分练习猜一猜 “if 语句” 是什么,他有什么作用.在做下一道题之前,试着用自己的话回答下面的问题: 你认为 if 对他下一行代码做了什么?为什么 if 语句的下一行需要 4 个空格缩进?如果不缩进 ...
- python 数据可视化 -- 真实数据的噪声平滑处理
平滑数据噪声的一个简单朴素的做法是,对窗口(样本)求平均,然后仅仅绘制出给定窗口的平均值,而不是所有的数据点. import matplotlib.pyplot as plt import numpy ...
- super()调用父类构造方法
super()表示调用父类中的构造方法 1.子类继承父类,子类的构造方法的第一行,系统会默认编写super(),在调用子类的构造方法时,先调用父类的无参数构造方法 2.如果父类中只有有参数构造方法,那 ...
- sqlserver 并行度
转载地址:http://www.cnblogs.com/zhijianliutang/p/4148540.html
- nodeJS接入微信公众平台开发
一.写在前面的话 Node.js是一个开放源代码.跨平台的JavaScript语言运行环境,采用Google开发的V8运行代码,使用事件驱动.非阻塞和异步输入输出模型等技术来提高性能,可优化应用程 ...
- centos6.6安装Elasticsearch
1. 安装jar8 yum list java-1.8* sudo yum install java-1.8.0-openjdk* -y java --version 2. 安装elasticsear ...
- [原创]networkx 画中文节点
一直想分享一些自己遇到的坑,但确实很多时候走的太快 很多想做的事情会被快节奏的生活冲淡, 在公司做事反而比学校还自在, 因为是悠闲的实习期... 几点小建议写在前头--xdj: 遇到问题,大多数人首先 ...
- 从知乎首页用户操作入口学习到的CSS技巧 - 合理利用伪元素实现一些装饰样式
最近在模仿做一个静态的PC版知乎,在模仿的过程中,从知乎工程师的方法中学到了不少知识,比如CSS方面的,以下介绍一个今天学到的伪元素的技巧. 示例 DOM结构为: <div class=&quo ...
- cerr与cout区别
语言:C++ 一.简介 平常常会用的主要有三个:cout.cerr.clog,首先简单介绍下三者. 这三者在C++中都是标准IO库中提供的输出工具(至于有关的重载问题在此不讨论): cout:写到标准 ...
- go基本使用方法
一,变量 var:声明变: var 变量名 数据类型 :同时还需要指定数据的类型 var 变量名 = 值 : 声明变量,根据变量值判断变量类型 := :省略var,直接可以(变量名:= 值), ...