Linux下的目录切换,大家肯定会想到一个命令:cd命令。这是Linux下最基本的命令。如果你不知道这个命令,就去自杀吧。cd命令确实很方便,但是如果你需要经常在以下目录之间切换,你可能会怀疑人生:/home/alvin/projects/blogdemos/linux-system-programming/thread/home/alvin/projects/blogdemos/diff/home/harry/study/日本文化/中日交流/电影行业/动作电影如果你只知道cd命令,那么你需要一直cd到你发疯。在这种情况下,我们如何高效地切换目录呢?良旭给大家介绍三个命令:pushd、popd、dirs。这三个命令实际上是对目录栈进行操作的,目录栈是保存目录的栈结构。栈顶结构总是存放当前目录(敲黑板,重点!!)。有编程基础的同学都知道栈遵循后进先出的原则。也就是说,在栈结构中,后入栈的元素会先出栈。在回顾了基本概念之后,让我们详细了解这三个命令。显示目录堆栈内容:dirsfirstdirs。这个命令很简单,就是显示目录栈的内容。它有以下三个常用的选项:选项含义-p每行显示一条记录-v每行显示一条记录,并显示记录在栈中的索引-c清空目录栈,-p和-p的区别-v选项是,-v选项会显示栈中每条记录的索引,否则完全一样。如果现在有一个目录栈,让我们看看里面有什么:[alvin@VM_0_16_centosdir2]$pwd/home/alvin/test/dir2[alvin@VM_0_16_centosdir2]$dirs-v0~/test/dir21~/test/dir12~/test/dir33~/test请注意最顶层的元素始终与当前目录一致。如果在其他目录下查看目录栈,第一个元素会相应变化。同样,如果使用后面介绍的pushd和popd操作目录栈,则当前目录会切换到目录栈第一个元素对应的地址。如果我们要清除目录栈,直接使用-c选项即可。[alvin@VM_0_16_centosdiff]$dirs-c[alvin@VM_0_16_centosdiff]$dirs-v0~/projects/blogdemos/diff压入目录栈:pushd每执行一次pushd命令后,默认执行一条dirs命令显示目录堆栈的内容。pushd的用法主要如下:1.pushd+directory如果pushd直接和目录一起使用,会切换到目录,并将目录放在目录栈的最顶层。示例:[alvin@VM_0_16_centos测试]$pushddir1~/test/dir1~/test[alvin@VM_0_16_centosdir1]$pushd../dir2~/test/dir2~/test/dir1~/test[alvin@VM_0_16_centosdir2]$pushd../dir3~/test/dir3~/test/dir2~/test/dir1~/test[alvin@VM_0_16_centosdir3]$dirs-v0~/test/dir31~/test/dir22~/test/dir13~/test2.pushd(withoutanyparameters)不带任何参数的pushd的作用是交换目录栈顶部的两个目录。前面我们强调过,目录栈的第一个元素是和当前目录相关的,所以当第一个元素发生变化时,当前目录也会随之切换,反之亦然。[alvin@VM_0_16_centosdir3]$dirs-v0~/test/dir31~/test/dir22~/test/dir13~/test[alvin@VM_0_16_centosdir3]$pwd/home/alvin/test/dir3[alvin@VM_0_16_centosdir3]$pushd~/test/dir2~/test/dir3~/test/dir1~/test[alvin@VM_0_16_centosdir2]$pwd/home/alvin/test/dir2#相应的目录变化[alvin@VM_0_16_centosdir2]$dirs-v0~/test/dir21~/test/dir3#交换索引0和1的内容2~/test/dir13~/test3.pushd+/-npushd+/-n就是直接切换到索引值对应的目录。请注意,这里可以同时使用加号和减号。如果是加号,则从目录栈的上到下计数,如果是减号,则从目录栈的下到顶计数。接下来,我们回到本文开头的问题。如果我们要在两个或多个路径较长的目录之间频繁切换,该怎么办呢?首先,我们使用pushd+directory将这些路径添加到目录栈中;然后,使用pushd+/-n在不同目录之间快速切换。具体演示如下:[alvin@VM_0_16_centosdir2]$pwd/home/alvin/test/dir2[alvin@VM_0_16_centosdir2]$dirs-v0~/test/dir21~/test/dir32~/test/dir13~/test[alvin@VM_0_16_centosdir2]$pushd+2~/test/dir1~/test~/test/dir2~/test/dir3[alvin@VM_0_16_centosdir1]$pwd/home/alvin/test/dir1[alvin@VM_0_16_centosdir1]$dirs-v0~/test/dir11~/test2~/test/dir23~/test/dir3弹出目录栈:popd后默认会执行一条dirs命令显示目录每个popd命令执行的都是堆栈的内容。popd的用法主要如下:1.popd(不带任何参数)popd不带任何参数的作用是弹出目录栈中的栈顶元素。这时候栈顶元素发生变化,自然当前目录也会随之切换。[alvin@VM_0_16_centosdir3]$dirs-v0~/test/dir31~/test/dir12~/test3~/test/dir2[alvin@VM_0_16_centosdir3]$popd~/test/dir1~/test~/测试/dir2[alvin@VM_0_16_centosdir1]$dirs-v0~/test/dir11~/test2~/test/dir22.popd+/-n删除目录堆栈中的第n个元素。同样,加号和减号表示是从上到下还是从下到上计数。[alvin@VM_0_16_centosdir1]$dirs-v0~/test/dir11~/test2~/test/dir2[alvin@VM_0_16_centosdir1]$popd+1~/test/dir1~/test/dir2[alvin@VM_0_16_centosdir1]$dirs-v0~/test/dir11~/test/dir2最后,最近有很多朋友问我Linux学习路线图,所以根据自己的经验,利用业余时间熬夜了一个一个月,整理出一本电子书。无论你是面试还是自我提升,相信都会对你有所帮助!免费送给大家,只求大家给我点个赞!电子书|LinuxDevelopmentLearningRoadmap也希望有小伙伴可以和我一起把这本电子书做得更完美!获得?希望老铁们来个三连击,让更多人看到这篇文章。推荐阅读:干货|程序员和高级架构师免费发送工件的必备资源|支持搜索的资源网站
