Linux下如何高效切換目錄?

Linux 下對於目錄的切換,你們確定會想到一個命令:cd 命令。這個是 Linux 下再基本不過的命令,若是這個命令都不知道的話,趕忙剖腹自盡去吧。linux

cd 命令確實很方便,但若是須要頻繁在下面的目錄切換,你可能要懷疑人生了:程序員

/home/alvin/projects/blogdemos/linux-system-programming/thread
/home/alvin/projects/blogdemos/diff
/home/harry/study/日本文化/中日交流/影視業/動做片

若是隻會 cd 命令的話,那麼就須要不停地 cd ,直到你發瘋。面試

在這種狀況下,咱們如何高效進行目錄切換呢?良許給你們介紹三個命令:pushdpopddirs編程

這三個命令其實都是對 目錄棧 進行操做,而 目錄棧 就是一個保存目錄的棧結構,該棧結構的頂端永遠都存放着當前目錄(敲黑板了,重點!!)。centos

有編程基礎的同窗都知道, 都是遵循着 後進先出 的原則。也就是說,在棧結構裏,後面進棧的元素,將先出棧。架構

複習完基本概念,咱們再來詳細這三個命令。學習

顯示目錄棧內容:dirs

首先是 dirs 。這個命令很簡單,就是顯示目錄棧的內容。它有如下三個經常使用選項:網站

選項 含義
-p 每行顯示一條記錄
-v 每行顯示一條記錄,同時展現該記錄在棧中的index
-c 清空目錄棧

其中,-p-v 選項的區別是,-v 選項將顯示每條記錄在棧中的索引,除此以外徹底同樣。假如如今有一個目錄棧,咱們來看看它裏面有啥內容:code

[alvin@VM_0_16_centos dir2]$ pwd
/home/alvin/test/dir2
[alvin@VM_0_16_centos dir2]$ dirs -v
 0  ~/test/dir2
 1  ~/test/dir1
 2  ~/test/dir3
 3  ~/test

請注意,最頂部的元素永遠跟當前目錄一致,若是你在其它目錄下查看目錄棧,第一個元素將對應發生改變。同理,若是你用後文介紹的 pushdpopd 來操做目錄棧的話,當前目錄將切換到目錄棧的第一個元素對應地址。blog

若是咱們要清空目錄棧,直接使用 -c 選項便可。

[alvin@VM_0_16_centos diff]$ dirs -c
[alvin@VM_0_16_centos diff]$ dirs -v
 0  ~/projects/blogdemos/diff

壓入目錄棧:pushd

每次 pushd 命令執行完成以後,默認都會執行一個 dirs 命令來顯示目錄棧的內容。pushd 的用法主要有以下幾種:

1. pushd + 目錄

pushd 後面若是直接跟目錄使用,會切換到該目錄而且將該目錄置於目錄棧的棧頂。例子:

[alvin@VM_0_16_centos test]$ pushd dir1
~/test/dir1 ~/test
[alvin@VM_0_16_centos dir1]$ pushd ../dir2
~/test/dir2 ~/test/dir1 ~/test
[alvin@VM_0_16_centos dir2]$ pushd ../dir3
~/test/dir3 ~/test/dir2 ~/test/dir1 ~/test
[alvin@VM_0_16_centos dir3]$ dirs -v
 0  ~/test/dir3
 1  ~/test/dir2
 2  ~/test/dir1
 3  ~/test

2. pushd (不帶任何參數)

pushd 不帶任何參數執行的效果就是,將目錄棧最頂層的兩個目錄進行交換。前面咱們已經強調過,目錄棧第一個元素與當前目錄是相關的,因此第一個元素髮生改變時,當前目錄將對應切換,反之亦然。

[alvin@VM_0_16_centos dir3]$ dirs -v
 0  ~/test/dir3
 1  ~/test/dir2
 2  ~/test/dir1
 3  ~/test
[alvin@VM_0_16_centos dir3]$ pwd
/home/alvin/test/dir3
[alvin@VM_0_16_centos dir3]$ pushd
~/test/dir2 ~/test/dir3 ~/test/dir1 ~/test
[alvin@VM_0_16_centos dir2]$ pwd
/home/alvin/test/dir2    #對應目錄發生改變
[alvin@VM_0_16_centos dir2]$ dirs -v
 0  ~/test/dir2
 1  ~/test/dir3        #索引 0 和 1 的內容對調
 2  ~/test/dir1
 3  ~/test

3. pushd +/-n

pushd +/-n 就是直接切換到對應索引值的目錄。注意,這裏既能夠用加號,也能夠用減號。若是是加號的話,將從目錄棧由上往下數,而用減號的話,將從目錄棧由下往上數。

接下來就回到了咱們本文開頭的問題,若是咱們要在兩個或多個路徑很長的目錄之間頻繁切換,該如何操做?

首先,咱們用 pushd + 目錄 的方式將這幾個路徑添加到目錄棧中;

而後,再用 pushd +/-n 在不一樣的目錄間快速切換。具體演示以下:

[alvin@VM_0_16_centos dir2]$ pwd
/home/alvin/test/dir2
[alvin@VM_0_16_centos dir2]$ dirs -v
 0  ~/test/dir2
 1  ~/test/dir3
 2  ~/test/dir1
 3  ~/test
[alvin@VM_0_16_centos dir2]$ pushd +2
~/test/dir1 ~/test ~/test/dir2 ~/test/dir3
[alvin@VM_0_16_centos dir1]$ pwd
/home/alvin/test/dir1
[alvin@VM_0_16_centos dir1]$ dirs -v
 0  ~/test/dir1
 1  ~/test
 2  ~/test/dir2
 3  ~/test/dir3

彈出目錄棧:popd

每次 popd 命令執行完成以後,默認都會執行一個 dirs 命令來顯示目錄棧的內容。popd 的用法主要有以下幾種:

1. popd (不帶任何參數)

popd不帶任何參數執行的效果,就是將目錄棧中的棧頂元素出棧。這時,棧頂元素髮生變化,天然當前目錄也會發生相應的切換。

[alvin@VM_0_16_centos dir3]$ dirs -v
 0  ~/test/dir3
 1  ~/test/dir1
 2  ~/test
 3  ~/test/dir2
[alvin@VM_0_16_centos dir3]$ popd
~/test/dir1 ~/test ~/test/dir2
[alvin@VM_0_16_centos dir1]$ dirs -v
 0  ~/test/dir1
 1  ~/test
 2  ~/test/dir2

2. popd +/-n

將目錄棧中的第n個元素刪除。一樣的,加減號表示從上往下數,仍是從下往上數。

[alvin@VM_0_16_centos dir1]$ dirs -v
 0  ~/test/dir1
 1  ~/test
 2  ~/test/dir2
[alvin@VM_0_16_centos dir1]$ popd +1
~/test/dir1 ~/test/dir2
[alvin@VM_0_16_centos dir1]$ dirs -v
 0  ~/test/dir1
 1  ~/test/dir2

最後,最近不少小夥伴找我要Linux學習路線圖,因而我根據本身的經驗,利用業餘時間熬夜肝了一個月,整理了一份電子書。不管你是面試仍是自我提高,相信都會對你有幫助!

免費送給你們,只求你們金指給我點個贊!

電子書 | Linux開發學習路線圖

也但願有小夥伴能加入我,把這份電子書作得更完美!

有收穫?但願老鐵們來個三連擊,給更多的人看到這篇文章

推薦閱讀:

相關文章
相關標籤/搜索