【導讀】在 Linux 下切換目錄,你還是只會 cd 這個命令嗎? 快來學習下 pushd popd 命令吧,讓你切換目錄更加的方便。
在命令行模式下,當你工作在不同目錄中,你將發(fā)現(xiàn)你有很多時間都浪費在重復輸入上如果這些目錄不在同一個根目錄中,你不得不在轉(zhuǎn)換時輸入完整的路徑名,這難免讓人有些難以忍受但你可以用以下的一個或兩個步驟來避免所有多余的輸入:用命令行解釋器中的歷史記錄,或者用命令行函數(shù)pushd。
用命令行解釋器中的歷史記錄的好處是只需按很少的鍵在命令行中用向上的箭頭來查找你用過的命令,直到你找到,然后按回車鍵如果你所切換的兩個目錄在整個驅(qū)動器的子目錄結(jié)構(gòu)中很接近,那用解釋器中的歷史記錄可能是你最好的選擇。
然而,如果你在兩個截然不同的路徑間轉(zhuǎn)換的話,你可能很希望利用pushd這個函數(shù),你可以用它創(chuàng)建一個目錄堆棧(在內(nèi)存中的一個列表)。
注釋:缺省情況下,pushd函數(shù)可能不包括在你的Linux中;但它包涵在Red Hat和用Red Hat驅(qū)動的系統(tǒng)中如果你的系統(tǒng)中沒有pushd函數(shù),你可以在ibiblio.org網(wǎng)站上下載相關的函數(shù)工具。
這里說一下怎么用pushd假設你現(xiàn)在工作在/usr/share/fonts/目錄下你需要對/usr/share/fonts/做一些改動,你將頻繁的在兩個目錄間切換開始在一個目錄下,用pushd函數(shù)切換到另一個目錄在我們的例子中,開始在/usr/share/fonts/下,你鍵入pushd /home/yxy/,然后按回車鍵現(xiàn)在,你將在下一行看到堆棧中的內(nèi)容:/home/yxy /usr/share/fonts。
正如你所看到的,當你鍵入pushd和一個路徑名時,將自動產(chǎn)生一個堆棧,內(nèi)容是你鍵入的目錄名和你當前工作的目錄名在我們的例子中,你所鍵入的路徑(/opt/wonderword/fonts)在堆棧的頂部。
快速返回上一級目錄,你可以直接鍵入pushd,如果不跟路徑名,你將返回到堆棧中前一個目錄的上一層目錄。
如果你需要從堆棧中刪除一個目錄,鍵入popd,然后是目錄名稱,再按回車鍵想查看堆棧中目錄列表,鍵入dirs,然后按回車鍵popd和dirs命令也是常用函數(shù)中的一部分。
一,為何要使用這幾個命令?
可能大家會有疑問,為何要使用這幾個命令,難道用cd不就可以切換目錄了嗎?
沒錯,使用cd就可以切換到需要訪問的目錄,但是有時會是一個路徑很長,層次很多的目錄,進到此目錄下后,這時我們不小心運行了 cd命令,理所當然,我們回到了自己的home目錄,這時如果想回去怎么辦?
還有:因為工作的需要,我們需要不停在幾個很深層的目錄之間切換,不止一個,那么即使有tab鍵幫忙,我們也會因為一個cd命令花費很多時間,如何在多個目錄之間切換時能更方便些呢?
pushd、popd是我們的好幫手
說明: pushd、popd、dirs 這幾個我們講到的命令是bash內(nèi)建的命令,所以只要登錄到了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
我們可以得到結(jié)構(gòu): 用cd -和cd $OLDPWD都可以在最近所操作的兩個目錄之間進行切換。
三,如何在多個目錄之間切換?
因為 cd -和 cd $OLDPWD都是只支持最近操作的兩個目錄,所以要在多個目錄之間操作時,我們需要使用 pushd。
1、先來介紹我們會用到的3條命令
pushd:切換到作為參數(shù)的目錄,并把原目錄和當前目錄壓入到一個虛擬的堆棧中如果不指定參數(shù),則會回到前一個目錄,并把堆棧中最近的兩個目錄作交換。
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參數(shù)可以每行一個目錄的形式顯示堆棧中的目錄列表;
-v 參數(shù)可以在目錄前加上編號;
注意:有 -v時,不添加 -p也可以每行一個目錄的形式顯示。
說明之二:我們可以看到:最近壓入堆棧的目錄位于最上面。
2,如何在最近的兩個目錄之間切換?
在最近的兩個目錄之間切換:用pushd不加參數(shù)即可
[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不加參數(shù)在最近的兩個目錄之間切換時,當前目錄總是位于堆棧的最上面。
3,如何在多個目錄之間切換?
用 pushd +n 即可
說明:n 是一個數(shù)字,有此參數(shù)時,是切換到堆棧中的第n個目錄,并把此目錄以堆棧循環(huán)的方式推到堆棧的頂部。
需要注意:堆棧從第0個開始數(shù)起。
看例子:
[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不加參數(shù)的運行情況:
popd把堆棧頂端的目錄從堆棧中刪除,并切換于位于新的頂端的目錄。
說明之二: popd 加有參數(shù) +n時,n 是堆棧中的第n個目錄,表示把堆棧中第n個目錄從堆棧中刪除。
四,多學一點知識
1,pushd和popd都可以只影響堆棧而不切換目錄
用 -n 參數(shù)即可。
看例子:
[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參數(shù)即可
看例子:
[root@localhost~]# dirs-v0 ~1 /boot/grub2 /usr/share/kde4/apps/kget[root@localhost~]# dirs-c[root@localhost~]# dirs-v0 ~
說明: 位于堆棧頂部的目錄是當前目錄,它不能被pop出去的。
- EOF -
推薦閱讀點擊標題可跳轉(zhuǎn)
1、怎樣用 Bash 編程:語法和工具
2、Shell 信號發(fā)送與捕捉
3、Shell 監(jiān)控文件變化
看完本文有收獲?請分享給更多人
推薦關注「Linux 愛好者」,提升Linux技能
原文標題:pushd、popd、dirs、cd :讓切換目錄更方便
文章出處:【微信公眾號:Linux愛好者】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
責任編輯:haq
-
Linux
+關注
關注
87文章
11320瀏覽量
209851 -
函數(shù)
+關注
關注
3文章
4338瀏覽量
62749
原文標題:pushd、popd、dirs、cd :讓切換目錄更方便
文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論