原文地址 http://www.cnblogs.com/zhengyuxin/articles/1933920.html
讓切換目錄更方便: pushd,popd,dirs,cd -
一,為何要使用這幾個命令?
可能大家會有疑問,為何要使用這幾個命令,
難道用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@localhost pics]# 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@localhost pics]# echo $OLDPWD;
/root
[root@localhost pics]# 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@localhost sbin]# dirs
/usr/local/sbin ~
[root@localhost sbin]# dirs -p -v
0 /usr/local/sbin
1 ~
[root@localhost sbin]# pushd /usr/share/kde4/apps/kget/
/usr/share/kde4/apps/kget /usr/local/sbin ~
[root@localhost kget]# dirs -p -v
0 /usr/share/kde4/apps/kget
1 /usr/local/sbin
2 ~
說明: dirs的 -p參數可以每行一個目錄的形式顯示堆棧中的目錄列表
-v參數可以在目錄前加上編號
注意:有 -v時,不添加 -p也可以每行一個目錄的形式顯示
說明之二:我們可以看到:最近壓入堆棧的目錄位於最上面
2,如何在最近的兩個目錄之間切換?
在最近的兩個目錄之間切換:用pushd不加參數即可
[root@localhost kget]# pushd /boot/grub/
/boot/grub /usr/share/kde4/apps/kget /usr/local/sbin ~
[root@localhost grub]# dirs -v
0 /boot/grub
1 /usr/share/kde4/apps/kget
2 /usr/local/sbin
3 ~
[root@localhost grub]# pushd
/usr/share/kde4/apps/kget /boot/grub /usr/local/sbin ~
[root@localhost kget]# dirs -v
0 /usr/share/kde4/apps/kget
1 /boot/grub
2 /usr/local/sbin
3 ~
[root@localhost kget]# pushd
/boot/grub /usr/share/kde4/apps/kget /usr/local/sbin ~
[root@localhost grub]# dirs -v
0 /boot/grub
1 /usr/share/kde4/apps/kget
2 /usr/local/sbin
3 ~
說明:可以看到,用pushd不加參數在最近的兩個目錄之間切換時,
當前目錄總是位於堆棧的最上面
3,如何在多個目錄之間切換?
用 pushd +n即可
說明:
n是一個數字,有此參數時,是切換到堆棧中的第n個目錄,並把此目錄以堆棧循環的方式推到堆棧的頂部
需要注意: 堆棧從第0個開始數起
看例子:
[root@localhost grub]# dirs -v
0 /boot/grub
1 /usr/share/kde4/apps/kget
2 /usr/local/sbin
3 ~
[root@localhost grub]# pushd +2
/usr/local/sbin ~ /boot/grub /usr/share/kde4/apps/kget
[root@localhost sbin]# dirs -v
0 /usr/local/sbin
1 ~
2 /boot/grub
3 /usr/share/kde4/apps/kget
4,如何把目錄從堆棧中刪除?
用popd即可
看例子:
[root@localhost sbin]# dirs -v
0 /usr/local/sbin
1 ~
2 /boot/grub
3 /usr/share/kde4/apps/kget
[root@localhost sbin]# popd
~ /boot/grub /usr/share/kde4/apps/kget
[root@localhost ~]# dirs -v
0 ~
1 /boot/grub
2 /usr/share/kde4/apps/kget
[root@localhost ~]# popd +1
~ /usr/share/kde4/apps/kget
[root@localhost ~]# dirs -v
0 ~
1 /usr/share/kde4/apps/kget
說明:可以看到popd不加參數的運行情況:
popd把堆棧頂端的目錄從堆棧中刪除,並切換於位於新的頂端的目錄
說明之二: popd 加有參數 +n時,
n是堆棧中的第n個目錄,表示把堆棧中第n個目錄從堆棧中刪除
四,多學一點知識
1,pushd和popd都可以只影響堆棧而不切換目錄
用 -n參數即可
看例子:
[root@localhost ~]# dirs -v
0 ~
1 /usr/share/kde4/apps/kget
[root@localhost ~]# pushd -n /boot/grub
~ /boot/grub /usr/share/kde4/apps/kget
[root@localhost ~]# dirs -v
0 ~
1 /boot/grub
2 /usr/share/kde4/apps/kget
2, dirs可以清空目錄堆棧
用 -c參數即可
看例子:
[root@localhost ~]# dirs -v
0 ~
1 /boot/grub
2 /usr/share/kde4/apps/kget
[root@localhost ~]# dirs -c
[root@localhost ~]# dirs -v
0 ~
說明: 位於堆棧頂部的目錄是當前目錄,它不能被pop出去的