\r\n\r\n
Linuxのコマンドの中には、あまりに使い慣れすぎていて、使っていることにすら気づかないものがあります。ディレクトリの変更に使われるcdコマンドもその一つです。cdをより効率的に使うためのいくつかのコツがありますし、完全に捨ててしまうこともできます。
毎日、毎日、まばたきをしていますが、ほとんどの場合、意識していません。目に何かが入らない限り、その小さな規則正しい動きについて考えることはほとんどありません。Linuxのコマンドの中には、そういうものもあります。意識の端っこに漂っているのです。毎日使うものでも、小さくてシンプルだから目に留まらない。
Linuxコンピュータを使い始めて最初の1時間で、Bashや他のシェルに付属するcdコマンドの使い方を学ぶことができます。おそらく、他のOSで使用した経験があり、説明は必要ないでしょう。カレントワーキングディレクトリが変更されますよね?それ以外に何があるのでしょうか?
ここでは、あなたの生産性を向上させるためのヒントやコツをご紹介します。
念のため、cdの標準的な使い方をざっと見ておこう。
ホームディレクトリにいるが、/usr/lib/firefox/browserにあるディレクトリに移動して、ホームディレクトリに戻りたい場合は、次のコマンドを使用します。
cd /usr/lib/firefox/browser/ cd /home/daveディレクトリのパス全体を入力する必要はなく、オートコンプリートを使用することができます。パスの各部分に、ディレクトリ名が他の部分と区別できる程度の文字を入力し、Tabキーを押すと、ディレクトリ名がオートコンプリートされます。
例えば、コマンドラインで次のように入力します。
cd /usr/lib/fireここで、Tabキーを押すと、シェルが "firefox "ディレクトリの残りを入力してくれます。パスに「/b」を追加して再度Tabキーを押すと、コマンドに「browser」ディレクトリが追加されます。
シェルは、タブ補完処理を繰り返すことができるように、末尾にフォワードスラッシュを追加します。そのため、最初のコマンドには、末尾にフォワードスラッシュが付きます。2枚目はそうじゃなくて、そっちは打ち込みだから。
波線記号(~)は、ファイルシステムのどこからでも素早くホームディレクトリに戻るための略記法として使うことができ、次のように入力するだけです。
CD-ROM〜。
これらは絶対パスの例で、ファイルシステムのルートから目的のディレクトリまで、そしてcdまでの全パスを提供します。
相対パスは、現在の作業ディレクトリから参照されます。ホームディレクトリの中に、workというディレクトリがあります。treeコマンドは、次のように入力するだけで、作業ディレクトリのディレクトリツリーを表示することができます。
tree作業ディレクトリには、devという名前のディレクトリがあります。また、ファイルシステムのルートディレクトリには、devというディレクトリがあります。lsや-d(ディレクトリ)を使ってそれぞれを見ることができます。hl (human-readable long list) オプションは、ディレクトリのサイズと長い形式のリストに読みやすい単位を使用するように ls に指示します。
devと入力すると、シェルはカレントディレクトリにある "dev "を参照していると判断します。ルートディレクトリにある "dev "を強制的に参照させるには、次のように、ファイルシステムのルートディレクトリを示すフォワードスラッシュを先頭に追加するだけです。
ls -d dev -hl ls -d /dev -hlcdコマンドはこの点でlsと似たような動作をします。以下のようにディレクトリがdevと参照されている場合、作業ディレクトリ内のディレクトリを参照しているものとみなされます。
cd dev先頭のスラッシュがない場合は,以下のように現在の作業ディレクトリからのパスも長いと仮定する。
cd dev/mobile/android関連:Bashが知っておくべき15種類の特殊文字
ダブルドット識別子は、現在の作業ディレクトリの親ディレクトリを示す。深くネストされたサブディレクトリにいる場合、使用することができます。現在いるディレクトリの親ディレクトリに移動するには、cdを使用します。
この場合、ディレクトリツリーの2つのディレクトリが上に移動します。
と入力する。
cd .. cd ../..また、これらの操作を行うためのエイリアスのセットをタイプで作成することができます。
alias .2="cd ../.." alias .3="cd ../../.."これらのコマンドは、コマンドそのものと同じように使用することができます。
コンピュータを再起動したときにエイリアスの一貫性を保つために、エイリアスを .bashrc または .bashu alias ファイルに追加する必要があります。
関連:Linuxでエイリアスやシェル関数を作成する方法
ハイフン(-)も特殊な機能を持つ記号で、ディレクトリを元のディレクトリに戻すことができます。
この例では、"c "ディレクトリにいると仮定します。cd を使って "forth" ディレクトリに切り替えることができます。そして、cd-で2つのディレクトリを行き来することができます。
そのためには、次のように入力します。
cd.../フォワード
シーディー
シーディー
移動する前に、移動したいディレクトリの名前が表示されます。
関連:Linuxでのpushdとpopdの使い方
シェルは、現在の作業ディレクトリを相対パスの「ルート」またはベースディレクトリとして使用します。環境変数CDPATHを使用すると、相対パスのベースディレクトリとして別の場所を設定することができます。ファイルシステムツリーのある部分にほとんどの時間を費やしている場合、これは毎日多くのキーストローク(と時間)を節約することができます。
work/dev/projectsを相対パスのベースディレクトリにするために、次のように入力してみましょう。
export CDPATH=/home/dave/work/dev/projectsこれで、dcコマンドを使うたびに、まず環境変数CDPATHにある場所がディレクトリ名と一致するかどうかを確認することになります。cdコマンドで指定したターゲットと一致するものがあれば、そのディレクトリに転送されます。
これで、ファイルシステムのどこにいても、cdコマンドを使うと、シェルはターゲットディレクトリがベースディレクトリにあるかどうかをチェックするようになりました。その場合、そのターゲットディレクトリに移動します。
ターゲットディレクトリの先頭がフォワードスラッシュ(/)で絶対パスになっている場合は、環境変数CDPATHの影響を受けません。
これを実証するために、次のように入力する。
cd c cd prolog cd /usr cd forth環境変数CDPATHは、実際には環境変数pathと同じようにパスである。コマンドを入力すると、シェルはパスの中の場所に一致するものを探します。CDPATHを使用する場合、シェルは環境変数CDPATHにある場所に一致するものを探します。また、PATHと同様に、CDPATHには複数の場所を含めることができます。
関連:Bashで変数を使用する方法
シェルが CDPATH 環境変数の他の場所の前にカレントディレクトリを検索するようにするには、単にピリオド (.) を追加します。というように、この道の最初にある。
export CDPATH=.:/home/dave/work/dev/projects設定を永続的に行うには、.bashrc などの設定ファイルに追加する必要があります。
注意点としては、ベースディレクトリが設定されている場合、スクリプトで実行されるディレクトリ変更にも影響することです。これを避けるには、スクリプト内で絶対パスを使用するか、.bashrcファイルでCDPATHを指定する際に、以下のようにテストを行うことができます。
if test “${PS1+set}”; then CDPATH=.:/home/dave/work/dev/projects; fiこれは、コマンドラインプロンプト変数$PS1が設定されているかどうかのテストを実行します。テストが成功した場合のみ、CDPATH環境変数が設定されます。
関連:Linuxで$PATHにディレクトリを追加する方法
shoptコマンドを使用すると、シェルの特定のオプションを設定することができます。中には、cdの使用感を高めることができるものもあります。これらを設定するには、shoptの-s(enable)オプションでオプション名を渡せばよい。
cdspellオプションは、ディレクトリ名をチェックし、文字の入れ替わりや欠落、名前の文字数が多すぎるなど、よくある入力エラーを修正するものです。もし、何らかの修正にマッチするディレクトリが見つかれば、修正されたパスを表示し、cd操作を実行する。
例えば、次のようなコマンドを入力してcdspellオプションを設定し、「Desktop」のスペルを間違えて、シェルが修正してくれるかどうか確認します。
shopt -s cdspell cd Desktpoシェルはエラーをキャッチして修正し、「Desktop」ディレクトリに変更します。
cd と一緒に使えるもう一つの shopt オプションは autocd です。これは cd をタイプする必要は全くなく、コマンドやスクリプト、その他の実行ファイル (エイリアスなど) でないものをタイプすると、それが目的ディレクトリとして使用されます。そのディレクトリに移動できれば、ターミナルウィンドウにその旨が出力され、そのディレクトリに変更されます。
例えば、次のように入力します。
shopt -s autocd /usr/local/games /etc ~見てください!cdしなくてもファイルシステム全体をスキップすることができるのです。
shopt を使って変更した設定は、対話型シェルにのみ影響し、スクリプトには影響しません。
すべてを受け入れることはできないかもしれません。しかし、ここで何か面白いことや役に立つことが見つかるかもしれません。結局のところ、コマンドラインのナビゲーションを高速化または簡素化する方法は何でも良いのです!