\r\n\r\n
多くのLinuxユーザはpushdとpopdを聞いたことがありませんが、これらは長い間存在しています。また、コマンドラインでのディレクトリの移動も大幅に短縮することができます。その使い方を紹介します。
ビルジョイが1978年に発表したCシェルは、ディレクトリスタック(pushdとpopd)という概念とその操作方法について革新的なものでした。 模倣は最も誠実なお世辞の形で、ディレクトリスタック、pushdとpopdはすぐに他のシェル(Bashなど)や他のOSにさえ統合されることになりました。
スタックのコンセプトはシンプルです。アイテムは1つずつスタックに置かれ、最近追加されたアイテムが常に最上位に位置する。スタックからアイテムを取り出すときは、上から下に向かって順番に取り出します。このような性質のスタックは、しばしばLIFO(Last In First Out)キューと呼ばれます。
実際にはpushdやpopdはこれよりもう少し柔軟性がありますが、良いモデルだと思います。
ディレクトリスタックを指す場合、pushdやpopdの「d」が「ディレクトリ」を意味するのは当然といえば当然です。これらのコマンドを使用すると、ディレクトリスタックにディレクトリをプッシュしたり、ディレクトリスタックからディレクトリをプッシュしたりすることができます。
しかし、これが何の役に立つのでしょうか?
pushdを使用する場合、以下の3つのシナリオが発生します。
以下の例では、新しいpushdコマンドを実行するたびにディレクトリスタックが大きくなっていることに注意してください。また、スタックの一番上は左側で、そこに新しいエントリーが表示されることに注意してください。
最初のpushdコマンドの後、スタックには、あなたが去ったディレクトリと、あなたが移動したディレクトリの2つのエントリが存在します。
この例では、次のように入力します。
pushd ~/Desktop pushd ~/Music pushd ~/Documents pushd ~/Pictures pushd ~最後のpushdコマンドでホームディレクトリに戻るので、スタックの最初と最後のエントリはホームディレクトリを示すチルダ(~)になっています。これは、あるディレクトリがすでにスタック上にあるにもかかわらず、他のpushdコマンドに再び追加されることを示します。
また、スタックの一番左のエントリ(一番最近追加されたエントリ)がカレントディレクトリであることに注意してください。
ディレクトリスタックは、dirsコマンドで以下のように表示することができます。
dirspushd で利用できるオプションの中には、スタック上のディレクトリの位置に関連するものがあります。
各ディレクトリの数値的な位置を見るには、以下のように -v (vertical) オプションを使用することができます。
カタログ-v
波線記号(~)の代わりにホームディレクトリの指定パスを表示したい場合は、次のように-l(ロングフォーマット)オプションを追加します。
dirs -v -lこれまで見てきたように、pushd コマンドを使用すると、3 つのことを行います: ディレクトリを変更し、新しいディレクトリをスタックに追加し、あなたに代わってスタックを表示します。n (回転なし) オプションを使用すると、カレントディレクトリを変更せずにディレクトリをスタックに追加することができます。
カタログの書庫はこちらです。
dirs -v -lここでは、pushdコマンドに-nオプションを付け、引数として/home/daveディレクトリのpasを使用することにします。その後、再度ディレクトリスタックを確認します。
以下のように入力します。
pushd -n /home/dave dirs -v -lhome/dave ディレクトリは、スタックの 2 番目の場所であるスロット 1 に追加されます。スロット0は常にカレントディレクトリであるため、一番上の位置を占めることはできません。
現在のディレクトリ ~/Videos を離れていないので、スタック内の別の場所にローテートしていないのです。
pushdの数値パラメータでスタック内の任意のディレクトリに移動することができ、その際スタックは回転する。移動するために選択されたディレクトリは、スタックの最初のエントリになります。
スタック内のディレクトリは、その位置番号で参照できます。スタックの上から数えても下から数えてもOKです。正の数(+3など)は上から、負の数(-2など)は下から数えます。
home/dave/Documentsディレクトリは、3番の場所にあります。 このディレクトリを次のコマンドで移動させることができます。
pushd +3選択したディレクトリの上にあるスタック内のディレクトリは、スタックの一番下に移動されます。選択したディレクトリが上位を占め、そのディレクトリに移動するようになりました。
スタックの一番下にあるディレクトリに変更するには、次のコマンドを使用します。
pushd -0最後のディレクトリが最初のスロットに移動し、他のすべてのディレクトリがスタックの下に移動しました。~/Pictures ディレクトリに変更しました。
ディレクトリは、popdコマンドでスタックから削除することができます。
ディレクトリスタックを見ると、位置 1 のディレクトリは /home/dave であることがわかります。 この項目をスタックから削除するには、次のようにタイプして popd に番号を渡します。
dirs -v -l popd +1home/daveディレクトリが削除され、スタック上でその下に位置するディレクトリが1つ上に移動します。
pushd と同じように、popd を使ってスタックの底からカウントすることができます。スタックから最後のディレクトリを削除するには、次のように入力します。
popd -0スタック内の最後の位置から ~/Music ディレクトリが削除されます。
ディレクトリを変更し、何らかのアクションを実行した後、前のディレクトリにジャンプして戻るには、pushdとpopdの両方を使用することができます。
別のディレクトリに移動するためにpushdを使用することにします。popdを使ってスタックの一番上のディレクトリを落とし、2番目の位置のディレクトリに移動します。これは、今移動したディレクトリなので、元いたディレクトリに戻されます。
以下のように入力します。
pushd ~ popdProjectsディレクトリからスタートし、ホームディレクトリにプッシュし、~/Projectsディレクトリにポップアップして戻ってくる。
ここでは、いくつかのネストしたディレクトリを含むスタックで回転する方法を示しますが、ファイルシステム内の任意のディレクトリを使用することができます。
私たちの巣立ちの深層は
/home/dave/Projects/htg/articlesホームディレクトリから始めて、articlesディレクトリに到達するまで、各ディレクトリを段階的にたどり、その後、ディレクトリスタックを見ることにします。
以下のように入力します。
pushd ~/Projects pushd htg pushd articles dirs -v -lpushd+1コマンドを繰り返し発行すると、ディレクトリスタックをループすることができます。これを頻繁に行うのであれば、pushd+1がエイリアスの良い候補になるでしょう。
と入力する。
pushd +1関連:Linuxでエイリアスやシェル関数を作成する方法
古い習慣に戻り、ディレクトリを変更するためにcdを使用するのは簡単です。この場合、スタック内の最初のディレクトリにスタンプを押すことになります。これは、最初のスロットが現在の作業ディレクトリのために予約されており、他の場所のどれでもないため、避けられないことです。
そのためには、次のように入力します。
dirs -v -l cd ~/Music dirs -v -lpushd と popd コマンドに慣れたら (そしておそらく、エイリアス を作るために)、ディレクトリ間を超高速で移動することができるようになります。
だから、コマンドラインにしがみつくのです。
関連:知っておきたいLinuxの重要コマンド37選