【导读】在 Linux 下切换目录,你还是只会 cd 这个命令吗? 快来学习下 pushd popd 命令吧,让你切换目录更加的方便。
在命令行模式下,当你工作在不同目录中,你将发现你有很多时间都浪费在重复输入上如果这些目录不在同一个根目录中,你不得不在转换时输入完整的路径名,这难免让人有些难以忍受但你可以用以下的一个或两个步骤来避免所有多余的输入:用命令行解释器中的历史记录,或者用命令行函数pushd。
用命令行解释器中的历史记录的好处是只需按很少的键在命令行中用向上的箭头来查找你用过的命令,直到你找到,然后按回车键如果你所切换的两个目录在整个驱动器的子目录结构中很接近,那用解释器中的历史记录可能是你最好的选择。
然而,如果你在两个截然不同的路径间转换的话,你可能很希望利用pushd这个函数,你可以用它创建一个目录堆栈(在内存中的一个列表)。
注释:缺省情况下,pushd函数可能不包括在你的Linux中;但它包涵在Red Hat和用Red Hat驱动的系统中如果你的系统中没有pushd函数,你可以在ibiblio.org网站上下载相关的函数工具。
这里说一下怎么用pushd假设你现在工作在/usr/share/fonts/目录下你需要对/usr/share/fonts/做一些改动,你将频繁的在两个目录间切换开始在一个目录下,用pushd函数切换到另一个目录在我们的例子中,开始在/usr/share/fonts/下,你键入pushd /home/yxy/,然后按回车键现在,你将在下一行看到堆栈中的内容:/home/yxy /usr/share/fonts。
正如你所看到的,当你键入pushd和一个路径名时,将自动产生一个堆栈,内容是你键入的目录名和你当前工作的目录名在我们的例子中,你所键入的路径(/opt/wonderword/fonts)在堆栈的顶部。
快速返回上一级目录,你可以直接键入pushd,如果不跟路径名,你将返回到堆栈中前一个目录的上一层目录。
如果你需要从堆栈中删除一个目录,键入popd,然后是目录名称,再按回车键想查看堆栈中目录列表,键入dirs,然后按回车键popd和dirs命令也是常用函数中的一部分。
一,为何要使用这几个命令?
可能大家会有疑问,为何要使用这几个命令,难道用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@localhostpics]# 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@localhostpics]# echo$OLDPWD;/root[root@localhostpics]# 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: 列出当前堆栈中保存的目录列表。
看例子:
[root@localhost~]# pushd/usr/local/sbin//usr/local/sbin ~[root@localhostsbin]# dirs/usr/local/sbin ~[root@localhostsbin]# dirs-p-v0 /usr/local/sbin1 ~[root@localhostsbin]# pushd/usr/share/kde4/apps/kget//usr/share/kde4/apps/kget /usr/local/sbin ~[root@localhostkget]# dirs-p-v0 /usr/share/kde4/apps/kget1 /usr/local/sbin2 ~
说明: dirs的 -p参数可以每行一个目录的形式显示堆栈中的目录列表;
-v 参数可以在目录前加上编号;
注意:有 -v时,不添加 -p也可以每行一个目录的形式显示。
说明之二:我们可以看到:最近压入堆栈的目录位于最上面。
2,如何在最近的两个目录之间切换?
在最近的两个目录之间切换:用pushd不加参数即可
[root@localhostkget]# pushd/boot/grub//boot/grub /usr/share/kde4/apps/kget /usr/local/sbin ~[root@localhost grub]# dirs -v0 /boot/grub1 /usr/share/kde4/apps/kget2 /usr/local/sbin3 ~[root@localhostgrub]# pushd/usr/share/kde4/apps/kget /boot/grub /usr/local/sbin ~[root@localhostkget]# dirs-v0 /usr/share/kde4/apps/kget1 /boot/grub2 /usr/local/sbin3 ~[root@localhostkget]# pushd/boot/grub /usr/share/kde4/apps/kget /usr/local/sbin ~[root@localhostgrub]# dirs-v0 /boot/grub1 /usr/share/kde4/apps/kget2 /usr/local/sbin3~
说明:可以看到,用pushd不加参数在最近的两个目录之间切换时,当前目录总是位于堆栈的最上面。
3,如何在多个目录之间切换?
用 pushd +n 即可
说明:n 是一个数字,有此参数时,是切换到堆栈中的第n个目录,并把此目录以堆栈循环的方式推到堆栈的顶部。
需要注意:堆栈从第0个开始数起。
看例子:
[root@localhost grub]# dirs -v0 /boot/grub1 /usr/share/kde4/apps/kget2 /usr/local/sbin3 ~[root@localhostgrub]# pushd+2/usr/local/sbin ~ /boot/grub /usr/share/kde4/apps/kget[root@localhostsbin]# dirs-v0 /usr/local/sbin1 ~2 /boot/grub3 /usr/share/kde4/apps/kget
4,如何把目录从堆栈中删除?
用popd即可。
看例子:
root@localhost sbin]# dirs -v0 /usr/local/sbin1 ~2 /boot/grub3 /usr/share/kde4/apps/kget[root@localhost sbin]# popd~ /boot/grub /usr/share/kde4/apps/kget[root@localhost~]# dirs-v0 ~1 /boot/grub2 /usr/share/kde4/apps/kget[root@localhost~]# popd+1 ~ /usr/share/kde4/apps/kget[root@localhost~]# dirs-v0 ~1 /usr/share/kde4/apps/kget
说明:可以看到popd不加参数的运行情况:
popd把堆栈顶端的目录从堆栈中删除,并切换于位于新的顶端的目录。
说明之二: popd 加有参数 +n时,n 是堆栈中的第n个目录,表示把堆栈中第n个目录从堆栈中删除。
四,多学一点知识
1,pushd和popd都可以只影响堆栈而不切换目录
用 -n 参数即可。
看例子:
[root@localhost~]# dirs-v0 ~1 /usr/share/kde4/apps/kget[root@localhost~]# pushd-n/boot/grub~ /boot/grub /usr/share/kde4/apps/kget[root@localhost~]# dirs-v0 ~1 /boot/grub2 /usr/share/kde4/apps/kget
2, dirs可以清空目录堆栈
用 -c参数即可
看例子:
[root@localhost~]# dirs-v0 ~1 /boot/grub2 /usr/share/kde4/apps/kget[root@localhost~]# dirs-c[root@localhost~]# dirs-v0 ~
说明: 位于堆栈顶部的目录是当前目录,它不能被pop出去的。
- EOF -
推荐阅读点击标题可跳转
1、怎样用 Bash 编程:语法和工具
2、Shell 信号发送与捕捉
3、Shell 监控文件变化
看完本文有收获?请分享给更多人
推荐关注「Linux 爱好者」,提升Linux技能
原文标题:pushd、popd、dirs、cd :让切换目录更方便
文章出处:【微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。
责任编辑:haq
原文标题:pushd、popd、dirs、cd :让切换目录更方便
文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。
收藏
人收藏
扫一扫,分享给好友
复制链接分享
评论
发布评论请先 登录
相关推荐
一文详解Linux内存检测技术
不同的工具有不同的侧重点,本章主要从slub_debug、kmemleak、kasan三个工具介绍。
Linux内核补给站 发表于 05-20 18:00 •
31次
阅读
统信软件宣布将以深度社区打造中国桌面操作系统根系统
昨日,统信软件宣布将以深度(deepin)社区为基础,建设立足中国、面向全球的桌面操作系统根社区,打....
科技绿洲 发表于 05-20 15:40 •
165次
阅读
Linux内核虚拟内存管理中的mmu_gather操作
本文讲解Linux内核虚拟内存管理中的mmu_gather操作,看看它是如何保证刷tlb和释放物理页....
一口Linux 发表于 05-20 14:37 •
134次
阅读
easyEncryption文件加密工具
./oschina_soft/gitee-encryptTool.zip
发表于 05-20 09:39 •
3次
阅读
MimiPenguin Linux下的密码抓取工具
./oschina_soft/mimipenguin.zip
发表于 05-20 09:28 •
3次
阅读
adkill--过滤视频广告
./oschina_soft/adkill--.zip
发表于 05-20 09:24 •
3次
阅读
Medusa登录暴力工具
./oschina_soft/medusa.zip
发表于 05-20 09:17 •
11次
阅读
详解内存池技术的原理与实现
最近在网上看到了几篇篇讲述内存池技术的文章,有一篇是有IBM中国研发中心的人写的,写的不错~~文章地....
Linux内核补给站 发表于 05-20 08:58 •
688次
阅读
申请函数kmalloc、kzalloc、vmalloc区别说明
我们都知道在用户空间动态申请内存用的函数是 malloc(),这个函数在各种操作系统上的使用是一致的....
Linux内核补给站 发表于 05-19 16:13 •
156次
阅读
Linux内存管理之页面回收
请求调页机制,只要用户态进程继续执行,他们就能获得页框,然而,请求调页没有办法强制进程释放不再使用的....
发表于 05-19 14:09 •
225次
阅读
深入理解Linux内核中的算法和数据结构
由于需要在内核中进行代码测试验证,完整编译安装内核比较耗时耗力。准备采用module形式来验证。
发表于 05-18 20:13 •
262次
阅读
虹科Automation softPLC入门知识科普
虹科KPA Automation softPLC是为Linux、Xenomai、INtime、Win....
广州虹科电子科技有限公司 发表于 05-18 15:56 •
235次
阅读
ChmFox Firefox的CHM浏览器扩展
./oschina_soft/chmfox.zip
发表于 05-18 15:42 •
3次
阅读
Tampermonkey Chrome脚本扩展
./oschina_soft/tampermonkey.zip
发表于 05-18 15:00 •
6次
阅读
一文搞定Linux内存管理原理
在x86结构中,Linux内核虚拟地址空间划分0~3G为用户空间,3~4G为内核空间(注意,内核可以....
发表于 05-18 14:43 •
271次
阅读
将C/C++语言编写的程序转换成为处理器能够执行的二进制代码的过程
大家肯定都知道计算机程序设计语言通常分为机器语言、汇编语言和高级语言三类。高级语言需要通过翻译成机器....
马哥Linux运维 发表于 05-18 13:30 •
206次
阅读
shell编程实例合集
编写hello world脚本
一口Linux 发表于 05-18 13:16 •
174次
阅读
LPS33HW压力传感器是如何做到防水功能的
为了帮助工程师更快地开发他们的应用程序,ST 提供了适用于 Android 和 Linux 的硬件....
星星科技指导员 发表于 05-18 11:12 •
126次
阅读
详解Linux系统中的零拷贝技术
Linux系统中一切皆文件,仔细想一下Linux系统的很多活动无外乎读操作和写操作,零拷贝就是为了提....
书生途 发表于 05-18 09:18 •
129次
阅读
一文详解linux的分页模型
也就是我们实际中编码时遇到的内存地址并不是对应于实际内存上的地址,我们编码中使用的地址是一个逻辑地址....
Linux内核补给站 发表于 05-18 08:59 •
200次
阅读
深入剖析SLUB分配器和SLAB分配器的区别
首先为什么要说slub分配器,内核里小内存分配一共有三种,SLAB/SLUB/SLOB,slub分配....
发表于 05-17 16:05 •
27次
阅读
USB WiFi RTL8192EU驱动移植案例
在飞凌OKMX8MP-C开发板上移植了自行搭建的Debian系统之后,发现板卡原有的WiFi模块无法....
发表于 05-17 15:37 •
34次
阅读
linux内存管理中的SLAB分配器详解
管理区页框分配器,这里我们简称为页框分配器,在页框分配器中主要是管理物理内存,将物理内存的页框分配给....
发表于 05-17 15:01 •
35次
阅读
用Golang编写的Linux ls命令替代方案
ls命令有多种替代方法,我们今后也将介绍其中的一些替代方法。
马哥Linux运维 发表于 05-17 14:02 •
260次
阅读
安防监控大升级,嵌入式板卡是如何实现NVR的呢?
随着网络技术的不断发展,通过网络对视频数据进行存储的需求越来越多,这直接推动了DVR(硬盘录像机)发展为具有网络功能的N...
发表于 05-17 11:55 •
910次
阅读
手动版实现带箭头的线段绘制
我根据一个矩形进行了各种角度旋转,就想通过绘制一个带方向的线段表示它,通过旋转矩阵很容易的获取了两个....
OpenCV学堂 发表于 05-17 11:24 •
152次
阅读
Linux CPU上下文切换的类型
在回答这个问题之前,请问,你有没有想过这些“任务”是什么?你可能会说一个任务就是一个进程或者一个线程....
strongerHuang 发表于 05-17 10:40 •
2282次
阅读
Linux虚拟内存和物理内存的深刻分析
让我们看下虚拟内存: 第一层理解 每个进程都有自己独立的4G内存空间,各个进程的内存空间具有类似的结....
发表于 05-16 18:24 •
585次
阅读
SPI硬件基础知识科普
SPI:Serial Perripheral Interface,串行外围设备接口,由 Motoro....
一口Linux 发表于 05-16 16:12 •
274次
阅读
短短几行代码,就能画出如此绚烂的图像
参赛者需要用C++编写代表三原色的RD、GR、BL三个函数,每个函数都不能超过 140 个字符。每个....
嵌入式ARM 发表于 05-16 15:34 •
208次
阅读
SQL优化经历:从30248.271s到0.001s
正常情况下是先join再进行where过滤,但是我们这里的情况,如果先join,将会有70w条数据发....
数据分析与开发 发表于 05-16 15:25 •
248次
阅读
一个单片机调试小工具的编程思路
在使用keil编译STM32后,我们会在.hex文件的同一个文件夹中发现一个.map文件。这个.ma....
硬件攻城狮 发表于 05-16 14:35 •
199次
阅读
Linux块层架构介绍 块层IO流程与块层IO调度器详解
之前一直跟大家聊文件系统,文件系统提供一层文件到物理块层的映射转换。这层逻辑可能非常复杂,依赖于文件....
Linux爱好者 发表于 05-16 12:12 •
146次
阅读
通过df命令显示磁盘空间使用情况
这 df 命令显示文件系统上的设备名称、总块数、总磁盘空间、已用磁盘空间、可用磁盘空间和挂载点信息。
马哥Linux运维 发表于 05-16 11:30 •
183次
阅读
armv8/armv9的执行状态的跳转和切换
思考:1、我们知道arm有2个执行状态:aarch32/aarch64,他们之间是如何跳转,如何切换....
Linux阅码场 发表于 05-16 09:54 •
152次
阅读
如何调用RK3588的NPU资源?
如何调用RK3588的NPU资源,还有NPU资源使用上的注意点,有NPU调用资源的教程吗?...
发表于 05-16 09:41 •
700次
阅读
深入剖析Linux文件系统的架构
虚函数都必须由底层派生出的实例实现,使用成员函数 file_operations。在linux里面的....
发表于 05-16 09:15 •
23次
阅读
Linux文件系统之硬盘的基本知识
一切都可看作是文件,其最显著的好处是对于上面所列出的输入/输出资源,只需要相同的一套 Linux 工....
发表于 05-16 09:10 •
9次
阅读
Linux文件系统的类型及工作原理
理解了文件系统的结构之后,我们来看一下文件的类型。
发表于 05-16 09:06 •
18次
阅读
Linux内存管理之伙伴系统
在内核初始化完成之后, 内存管理的责任就由伙伴系统来承担. 伙伴系统基于一种相对简单然而令人吃惊的强....
发表于 05-16 09:01 •
23次
阅读
embOS实时操作系统可应用于数十亿台设备中
Tickless 支持是 embOS 可以为产品带来优势的一个很好的例子。它还解释了为什么越来越多的....
星星科技指导员 发表于 05-15 14:13 •
219次
阅读
深入剖析Linux内核虚拟文件系统
虚拟文件系统(Virtual File System,简称VFS)是Linux内核的子系统之一,它为....
书生途 发表于 05-14 15:53 •
443次
阅读
Linux进程间通信方法之管道
上文中我们介绍了进程间通信的方法之一:信号,本文将继续介绍另一种进程间通信的方法,即管道。管道是Li....
书生途 发表于 05-14 15:47 •
464次
阅读
Linux磁盘I/O的性能指标和查看性能工具
在我之前的文章:《探讨 Linux 的磁盘 I/O》中,我谈到了 Linux 磁盘 I/O 的工作原....
马哥Linux运维 发表于 05-14 15:21 •
514次
阅读
Linux内核系统调用概述及实现原理
本文介绍了系统调用的一些实现细节。首先分析了系统调用的意义,它们与库函数和应用程序接口(API)有怎....
Linux内核补给站 发表于 05-14 14:11 •
285次
阅读
Linux进程的内存消耗和泄漏详解
当我们评估进程消耗多少内存时,就是指在用户空间消耗的内存,即虚拟地址在0~3G的部分,对应的物理地址....
书生途 发表于 05-14 10:07 •
251次
阅读
malloc和free简介及实现方式说明
malloc 分配指定大小的内存空间,返回一个指向该空间的指针。大小以字节为单位。返回 void* ....
书生途 发表于 05-14 09:56 •
274次
阅读
五种Python模块介绍及用途说明
Python 标准库有超过 200 个模块,程序员可以在他们的程序中导入和使用。虽然普通程序员对其中....
马哥Linux运维 发表于 05-13 17:27 •
354次
阅读
使用Container Canary在多个平台上测试容器图像
自带容器模型在当今的现代计算平台上得到广泛支持。换句话说,您可以在自定义软件环境中提供自己的容器映像....
星星科技指导员 发表于 05-13 17:05 •
4812次
阅读
可以节省Python执行时间的四种方式
今天我想和大家分享 4 个省时的 Python 技巧,可以节省 10~20% 的 Python 执行....
马哥Linux运维 发表于 05-13 17:01 •
239次
阅读
使用Bash处理变量的常见错误
Linux 中的 Bash 脚本语言支持对变量的操作。但是,如果您从事过其他流行的编程语言开发,那么....
马哥Linux运维 发表于 05-13 15:52 •
167次
阅读
Cumulus Linux操作系统实现数据中心操作的DevOps方法
使用 NVIDIA Air 应该足以帮助您测试和验证迁移。但是,我们强烈建议您与 NVIDIA ....
星星科技指导员 发表于 05-13 15:30 •
131次
阅读
flashDB TSDB数据库插入数据时报错是为什么?
flashDB TSDB的get_time函数时返回的系统时间戳,在使用中出现我偶然错误的将RTC时间设置得比现在的时间要大很多,后面...
发表于 05-12 16:14 •
2170次
阅读
UFX+U_DISK\EXAM1读U盘出错是为什么?
U盘数据:
*S*
00000000000
11111111111
22222222222
33333333333
44444444444
55555555555
66666666666
77777777777...
发表于 05-12 08:46 •
87次
阅读
请问linux开发环境为什么不能打包deb安装包?
哪里有指导安装说明或者视频,为什么不能打包deb安装包,我能把他投递到应用商店吗
...
发表于 05-12 07:09 •
79次
阅读
I.MX8MM开发板Linux 如何编译驱动到内核
迅为I.MX8MM开发板编译驱动到内核,在平时的驱动开发中,经常需要在内核中配置某种功能,为了方便大家开发和学习,本小节讲...
发表于 05-10 11:01 •
430次
阅读
hi3516 dv300刷linux版的小型系统,如何写一个launcher去替换原系统的launcher呢?
怎么自己写一个launcher去替换原系统的launcher呢?
或者换个说法,修改那些参数可以在系统启动后不运行系统launcher,直接运行...
发表于 05-10 10:20 •
689次
阅读
rt-thread有没有一次采样多个数据的函数?
使用定时器1捕获比较事件触发ADC采样,rt-thread有没有类似HAL库 HAL_ADC_Start_DMA这种一次可以采集多个数据的...
发表于 05-09 10:00 •
1214次
阅读
在线程里加了一个函数整个系统就卡死了怎么解决
函数是这样
我把给数组赋值的那个语句注释掉,系统就正常了
求大佬帮助
...
发表于 05-05 09:54 •
1151次
阅读
非对称的ARM双系统,如何实现工业产品的低延时——基于ZYNQ
现代工业设备系统要求越来越复杂,既要强大的多任务的事务处理能力,又需要低延时实时任务处理能力的需求,特别是工业自动化控制...
发表于 04-29 15:38 •
8297次
阅读
AM4379 AM437x ARM Cortex-A9 微处理器 (MPU)
TI AM437x高性能处理器基于ARM Cortex-A9内核。
这些处理器通过3D图形加速得到增强,可实现丰富的图形用户界面,还配备了协处理器,用于进行确定性实时处理(包括EtherCAT,PROFIBUS,EnDat等工业通信协议)。该器件支持高级操作系统(HLOS)。基于Linux的® 可从TI免费获取。其它HLOS可从TI的设计网络和生态系统合作伙伴处获取。
这些器件支持对采用较低性能ARM内核的系统升级,并提供更新外设,包括QSPI-NOR和LPDDR2等存储器选项。
这些处理器包含功能方框图中显示的子系统,并且后跟相应的“说明”中添加了更多信息说明。
处理器子系统基于ARM Cortex-A9内核,PowerVR SGX™图形加速器子系统提供3D图形加速功能以支持显示和高级用户界面。
可编程实时单元子系统和工业通信子系统(PRU-ICSS与ARM内核分离,允许单独操作和计时,以实现更高的效率和灵活性.PRU-ICSS支持更多外设接口和EtherCAT,PROFINET,EtherNet /IP,PROFIBUS,以太网Powerlink,Sercos,EnDat等...
发表于 09-25 11:51 •
626次
阅读
|