Linuxコマンド pushd/popd/dirs(ディレクトリをスタックに追加/削除/表示する)

任意のディレクトリをディレクトリスタック(お気に入りリストみたいなもの)に登録、削除、移動、一覧表示するpushd/popd/dirsコマンドの概要と使い方を記載しています。

RHEL Fedora CentOS Vine Deblan Ubuntu Plamo

概要・使用方法

bashで用意されているディレクトリスタックに作業ディレクトリを追加/削除/表示します。

  1. pushdコマンドでディレクトリスタックに追加、並び順を変更して移動。
  2. pupdでスタックしたディレクトリに移動/削除
  3. dirsコマンドでスタックを表示/削除

ディレクトリスタックはシェル変数DIRSTACKでも参照できますが、この変数をunsetで削除してもbashのディレクトリスタックは残ります。

ディレクトリスタックとは、ディレクトリのお気に入りリストみたいな機能で、登録しておけばリスト上どこにでも瞬時に移動することができる機能コマンド群ということになります。

階層が深い場合などよく使用するディレクトリパスを登録しておくことで、忘れた場合やcdコマンドでタイピングする手間を省くことができます。

書式

$pushd [オプション] ディレクトリ名

ディレクトリを記録させておくディレクトリスタックに指定したディレクトリを追加し、指定したディレクトリに移動します。ディレクトリスタックはdirsコマンドで表示できます。ディレクトリスタックからディレクトリを取り出す(取り出したディレクトリに移動する)には、popdコマンドを使用します。

$popd [オプション]

ディレクトリスタックからディレクトリを削除し、そのディレクトリに移動します。

$dirs [オプション]

pushdオプション

-Nスタックリストの左からN番目(0からカウント)を一番左に移動するようにローテートする
+Nスタックリストの右からN番目(0からカウント)をディレクトリスタックの一番左に移動に移動するようにローテートする
-nディレクトリ移動を行わずに、指定したディレクトリをディレクトリスタックに追加する

popdオプション

-nディレクトリ移動を行わずに、指定したディレクトリをディレクトリスタックから削除する
-Nスタックリストの左からN番目(0からカウント)をスタックから削除する
+Nスタックリストの右からN番目(0からカウント)をスタックから削除する

dirsオプション

-cスタックリストをすべて削除する
-l1行にスタックリストを表示する
-pスタック1つずつ家業を含めて表示する
-vスタックリストを番号、改行を含めて表示する
-Nスタックリストの右からN番目(0からカウント)のスタックを表示する
+Nスタックリストの左からN番目(0からカウント)のスタックを表示する

【基本使用例】

ディレクトリスタックを表示する

$dirs

実行結果

[centos@work sample]$ dirs
~/work
[centos@work sample]$ 

ディレクトリスタックに追加して/varに移動する

$pushd /var

実行結果

[centos@work work]$ pushd /var
/var ~/work
[centos@work var]$ dirs

ディレクトリスタックから削除して/varに移動する

$popd

実行結果

[centos@work var]$ popd
~/work
[centos@work work]$ 

スタック操作と移動

スタックには常に現在の作業ディレクトリが先頭に入ります。このスタックを操作して過去の作業ディレクトリへの移動を行います。

実行結果

[centos@work work]$ pushd /var/log ←ディレクトリスタックに/var/logを追加
/var/log ~/work /var/opt /var
[centos@work log]$ dirs -v  ←ディレクトリスタックの一覧を表示
 0  /var/log
 1  ~/work
 2  /var/opt
 3  /var
[centos@work log]$ pushd -1 ←ディレクトリスタックの末尾から-1移動(/var/opt)
/var/opt /var /var/log ~/work

ディレクトリスタック内容を絶対パスで表示する

ディレクトリスタックの表示するのに相対パスで表示されますが、絶対パスで表示したい場合は-lオプションを付けてdirsコマンドを実行することで表示可能です。

サンプル

$dirs -l

実行結果

[centos@work work]$ dirs -l
/home/centos/work /home/centos/work /var/opt /var
[centos@work work]$