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 ,
這三個命令其實都是對 目錄堆疊 進行操作,而 目錄堆疊 就是一個保存目錄的堆疊結構,該堆疊結構的頂端永遠都存放著當前目錄(敲黑板了,重點!!),
有編程基礎的同學都知道,堆疊 都是遵循著 后進先出 的原則,也就是說,在堆疊結構里,后面進堆疊的元素,將先出堆疊,
復習完基本概念,我們再來詳細這三個命令,
顯示目錄堆疊內容:dirs
首先是 dirs ,這個命令很簡單,就是顯示目錄堆疊的內容,它有以下三個常用選項:
| 選項 | 含義 |
|---|---|
| -p | 每行顯示一條記錄 |
| -v | 每行顯示一條記錄,同時展示該記錄在堆疊中的index |
| -c | 清空目錄堆疊 |
其中,-p 與 -v 選項的區別是,-v 選項將顯示每條記錄在堆疊中的索引,除此之外完全一樣,假如現在有一個目錄堆疊,我們來看看它里面有啥內容:
[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
請注意,最頂部的元素永遠跟當前目錄一致,如果你在其它目錄下查看目錄堆疊,第一個元素將對應發生改變,同理,如果你用后文介紹的 pushd 和 popd 來操作目錄堆疊的話,當前目錄將切換到目錄堆疊的第一個元素對應地址,
如果我們要清空目錄堆疊,直接使用 -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
有識訓?希望老鐵們來個三連擊,給更多的人看到這篇文章
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/4923.html
標籤:Linux
上一篇:windows10下linux centOS 7.6網路配置(針對 NAT模式)
下一篇:在物理機上安裝Ubuntu指南
