【 pushd 】コマンド/【 popd 】コマンド/【 dirs 】コマンド――カレントディレクトリを変更するLinux基本コマンドTips(168)

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、ディレクトリスタックを使ってカレントディレクトリを変更、表示する「pushd」コマンド、「popd」コマンド、「dirs」コマンドです。

» 2017年12月15日 05時00分 公開
[西村めぐみ@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、ディレクトリスタックを使ってカレントディレクトリを変更、表示する「pushd」コマンド、「popd」コマンド、「dirs」コマンドです。

pushdコマンド、popdコマンド、dirsコマンドとは?

 今回紹介する3つのコマンドは「ディレクトリスタック」と呼ぶ記憶領域を利用して、カレントディレクトリを変更、表示します。ディレクトリスタックには複数のパス(ディレクトリ)を格納できます。

 bashでは、ディレクトリスタックに保存したディレクトリから1つを選び、カレントディレクトリを変更できます ※1。

 「pushd」コマンドはディレクトリスタックへディレクトリを保存するコマンドです。さらにカレントディレクトリをそのディレクトリに変更します。

 「popd」はディレクトリスタックからディレクトリを取り出すコマンドです。カレントディレクトリを最後に保存した場所に変更し、ディレクトリスタックから登録を削除します。

 「dirs」はディレクトリスタックの内容を表示する他、クリアできるコマンドです。

※1 連載第167回で紹介したcdコマンドを使うと2つのディレクトリを交互にカレントディレクトリにできる。具体的には「cd -」を繰り返せばよい。しかし3つ以上のディレクトリから変更先を決めることができない。





pushdコマンドの書式

pushd [オプション] または [ディレクトリ]

popdコマンドの書式

popd [オプション]

dirsコマンドの書式

dirs [オプション]

※[ ]は省略可能な引数を示しています。




pushdの主なオプション

短いオプション 意味
+番号 「+3」でディレクトリスタックの左から4番目が先頭になるように保存内容を回転(ローテート)して、先頭になったディレクトリをカレントディレクトリに変更する ※2
-番号 同様に右から数えてローテート後、カレントディレクトリを変更する
-n スタックの操作のみを実行する。カレントディレクトリは変更しない

popdの主なオプション

短いオプション 意味
+番号 「+3」でディレクトリスタックの左から4番目を削除しその場所をカレントディレクトリとする ※2
-番号 右から数えて削除後、その場所に変更する
-n スタックからの削除のみを実行、カレントディレクトリは変更しない

dirsの主なオプション

短いオプション 意味
-c カレントディレクトリだけを残してディレクトリスタックを空にする
-l ホームディレクトリの表示に「~」を使用しない
-p ディレクトリスタックを1件1行で表示する
-v ディレクトリスタックを0から番号付きで表示する
+番号 「+3」でディレクトリスタックの左から4番目を表示する ※2
-番号 同様に右から数えて表示する

※2 pushd、popd、dirsは、オプション指定がない場合、実行時にディレクトリスタックを横一列に表示する。「+3」は左から4番目となる(本文参照)。





カレントディレクトリを変更する(pushdとpopdを利用)

 pushdとpopdを組み合わせることで、カレントディレクトリを次々と変更する使い方ができます。

 基本的な使い方は「pushd ディレクトリ」でカレントディレクトリを変更していき、「popd」で1つ1つ元に戻す、という操作です。

 「pushd ディレクトリ」を実行すると、(1)ディレクトリスタックにディレクトリを保存、(2)ホームディレクトリを指定したディレクトリに変更するという2つの動作を1度に実行します。

 画面1では現在のカレントディレクトリが分かりやすいよう、pwdコマンド(第167回)でカレントディレクトリを確認しています。

画面1 画面1 pushを使ってカレントディレクトリを移動し、popdを使って1つ1つ元に戻したところ


カレントディレクトリを変更する(pushdのみ利用)

 「pushd」のみで実行すると、ディレクトリスタックの最新の2つを入れ替えて、カレントディレクトリを先頭になった場所に変えます(画面2)。つまり、カレントディレクトリを直前のディレクトリへ変更します(※1と同じ動作)。

画面2 画面2 pushdを繰り返すとカレントディレクトリを1つ前に戻すことができる


番号を指定してディレクトリを操作する

 ディレクトリスタックに複数のディレクトリを格納した状態では、番号を指定してカレントディレクトリを変更できます。ディレクトリスタックの番号は左端を0番と数えます ※3。

 ディレクトリスタックに「A B C D」が保存されている状態で「pushd +1」と指定すると、まず、スタックの1番(左から2番目のB)が先頭になるように内容を回転(ローテイト)して、カレントディレクトリが「B」ディレクトリに変わります。ディレクトリスタックの内容は「B C D A」に変わります。

 「pushd -1」と指定すると、ディレクトリスタックの内容が「A B C D」から、右から2番目の「C」を先頭にするように「C D A B」へと変わります。カレントディレクトリは「C」ディレクトリに変わります ※4。

 popコマンドでも番号を指定してディレクトリスタックの内容を操作できます。「popd +1」は、スタックの1番(左から2番目)を削除し、カレントディレクトリがそのディレクトリに変わります。

 pushd、popdともにカレントディレクトリを変更せずに、ディレクトリスタックの内容のみを操作できます。そのためには「-n」オプションを使います。

 「dirs -v」でディレクトリスタックを番号付きで一覧表示します。この場合、左端を0とした番号が付きます。

※3 cdコマンドを使ってカレントディレクトリを変更すると、(pushdやpopd使わなくても)ディレクトリスタックの左端(0番)がカレントディレクトリに変わる。
※4 「pushd +0」と「pushd -0」は違う結果になる。pushd +0はスタックの左端を先頭に変えるため何も起こらないが、pushd -0は右端を先頭にするため、「A B C D」が「D A B C」となる。popdコマンドでも同様だ。



画面3 画面3 ディレクトリスタックの番号を指定して内容を操作したところ


必要な場所だけをディレクトリスタックに保存する

 「pushd -n ディレクトリ」の使いどころは、手入力よりも設定ファイルでしょう。頻繁に使うディレクトリがある場合は、シェルの設定ファイルなどにpushdコマンドを記述しておきます。

画面4 画面4 カレントディレクトリを変えずにディレクトリスタックを設定したところ


筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。