6 つの Linux ターミナルの時間を節約する方法

10/01 2015
タブ補完
Tab キーを使用して、入力中の単語を自動補完します。
(画像:©Future)

別名

Linux

Linux でターミナルを使用すると、特に繰り返し操作を行う場合、GUI を使用するよりも高速かつ生産的になります。これを最大限に活用するには、シェルの秘密をいくつか知っておくと役立ちます。

同じコマンド オプションを何度も繰り返し入力することがよくありますか? 正しいオプションを思い出せないことがありますか? あなたは単に怠け者で、可能な限り入力を避けたいと思っていませんか? これらのいずれかに「はい」と答えた場合は、エイリアスが最適です。

いくつかのシェル エイリアスがすでに設定されています。それらをリストするには、次のように入力します。

エイリアス

これにより、次のようなエントリが返されます (Ubuntu から)。

別名 ll='ls -alF'

エイリアス ls='ls --color=auto'

これらの例の最初の例は単純です。ll と入力すると、ls -A が実行されます。2 番目の方法は、エイリアスがコマンド名と同じであるため、より賢明です。そのため、古い ls の動作はなくなり、常に --color=auto オプションを使用して実行されます。

特定のコマンドで特定のオプションを常に使用している場合は、このようなエイリアスを使用すると、それらのオプションがデフォルトになります。

エイリアスはコマンド ラインの残りの部分が解釈される前に展開されるため、次のようになります。

ll XYZ

になる

ls -alF XYZ

これらのエイリアスは、必ずしも覚えやすいとは限りませんが、心配する必要はありません。alias コマンドの出力とまったく同じ構文を使用して、独自のエイリアスを作成できます。

エイリアス myalias='somecommand --option1 --option2'

コマンドに独自の名前を付けるのは巧妙なトリックですが、元のコマンドを使用する必要がある場合はどうすればよいでしょうか? 心配しないでください。開発者はそれを考えました。コマンドの前にバックスラッシュを付けると、エイリアスは無視されます。

\ls ドキュメント

プロフィール

Linux

エイリアスやカスタム プロンプトを使用してターミナル エクスペリエンスをカスタマイズできますが、それらをさらに便利にするには、ターミナルを開いたときにこれらを自動的に適用する方法が必要です。

これは、シェル セッションを開くたびに読み取られて実行されるコマンドを含むファイルであるプロファイルを通じて実行できます。

読み取られる場所はいくつかありますが、最初の場所は/etc/profileで、これにはグローバル プロファイル設定が含まれます。これにより、/etc/profile.d内のすべてのファイルが実行され、デフォルトのプロファイルを変更せずにグローバル設定を簡単に追加できるようになります。

次に、ユーザーのプロファイルが/.bash_profile、/.bash_login、および/.profileのいずれかから読み取られます。存在する最初のファイルのみが実行され、両方に同じものが設定されている場合、ここでの設定はグローバル プロファイルの設定をオーバーライドします。

プロファイルは、シェルの起動時に実行される一連のシェル コマンド (1 行に 1 つずつ) です。これらにより、エイリアス、環境変数を設定したり、コマンド プロンプトを設定したりできます。環境変数の一般的な使用法は、デフォルトのテキスト エディターを nano に変更することです。

EDITOR=/usr/bin/nano

単語補完

Linux

タッチ タイピストに特に自信がない場合は、コマンド名とファイル名をすべて入力し、スペルミスによるエラー メッセージに対処することにすぐにうんざりするでしょう。幸いなことに、シェルには、入力を節約し、タブ補完と呼ばれる間違いを回避する方法が用意されています。

この名前は一目瞭然です。入力している単語を完成させるために Tab キーを使用します。これが行の最初の単語である場合、それはコマンドであるため、コマンド パス内で一致するものが検索されます。たとえば、chmと入力して Tab キーを押すと、 chmodが完了します。

コマンドの後に使用すると、タブでファイル名が補完されるため、次のように入力する代わりに次のように入力します。

cat /pathto/somelongdirectory/someevenlongerfilename.txt

使用できます:

cat /pa[TAB を押す]som[TAB を押す]som[TAB を押す]

そのほうが簡単ではないですか?複数のファイルが一致する場合、Tab キーは曖昧になるまで完了します。この時点でもう一度 Tab キーを押すとオプションのリストが表示され、Tab キーで順に選択するか、別の文字を 1 つまたは 2 つ追加して再度 Tab キーを押すことができます。実際に使用するのは、説明するよりもはるかに簡単です。ぜひ試してみてください。

ワイルドカード

Linux

コマンドに複数のファイルを含めたいが、すべてを入力したくない場合があります。Linux シェルには、これを支援するいくつかの「ワイルドカード」演算子があります。最もよく使用されるのはスターで、文字列の代わりに使用されます。

したがって、 * だけでは、現在のディレクトリ内のすべてのファイルと一致します (これは、 * が . と一致しない MS-DOS シェルとは異なり、拡張子を持つファイルと一致するには*.*を使用する必要があります)。

* を使用してファイル名の一部と一致させることもできます。*.txt は.txt で終わるすべてのファイルと一致し、a*.txtは同じく a で始まるファイルのみと一致します。

この照合はシェルによって実行されます。一致した内容をファイルのリストに拡張してからコマンドに渡しますが、ワイルドカードは決して認識されず、ワイルドカードが使用されたことさえ認識されません。

これは、特に実行中のプログラムに * を渡したい場合には重要な違いとなります。たとえば、scp を使用してリモート コンピューターからファイルをコピーし、次のコマンドを実行するとします。

scp user@othercomputer:Documents/*.txt ドキュメント/

これにより、すべての .txt ファイルが他のコンピュータのドキュメント ディレクトリから同じディレクトリにコピーされると期待されるかもしれませんが、そうではありません。シェルは、ローカル システム上のすべての .txt ファイルと一致するように*.txtを展開するため、既存のファイルのみをコピーします。

このような場合は、* の前にバックスラッシュを付けて * を展開しないようにシェルに指示する必要があります。これはエスケープと呼ばれます。

scp user@othercomputer:Documents/\*.txt ドキュメント/

ここで、 Documents/*.txt を変更せずにリモート コンピュータに渡し、シェルで展開を処理させます。

2 番目のワイルドカード文字もあります。* は任意の数の文字と一致しますが、何も一致しない場合も含まれます正確に 1 つと一致します。したがって、ab?.txt はabc.txt および ab1.txt に一致しますが、ab.txt または abcd.txt には一致しません。一方、ab*.txtはそれらのすべてに一致します。

コマンド置換

Linux

シェルにはコマンド置換と呼ばれる強力な機能があります。これにより、あるコマンドの出力を別のコマンドに埋め込むことができます。

簡単な例として、システムにfooというコマンドがあり、それがコンパイル済み、Python、またはシェル スクリプトなどのプログラムの種類を知りたいとします。whatコマンドプログラムへのパスを提供し、file はファイルのタイプを報告します。以下を使用できます:

どのフー

/usr/local/bin/foo を取得してから

ファイル /usr/local/bin/foo

ファイル タイプを取得するには、コピー アンド ペーストを使用する場合でも、多大な作業が必要であり、タイプを間違えやすいです。あるいは、次のようにすることもできます。

ファイル $(どの foo)

/usr/local/bin/foo: /usr/bin/perl スクリプト、ASCII テキスト実行可能ファイル

何が起こるかというと、シェルは$(..)内の内容をすべて実行し、その出力を実行前にコマンド ラインに置き換えます。これにはバッククォートを使用することもできます。

ファイル「どのフー」

これは、入力は速くなりますが、読みにくくなります。特に、読者のフォントによって ' と ' が似てしまう可能性があるフォーラムに投稿した場合に顕著です。最初の形式では、そのような混乱はありません。

ターミナルの時間を節約する: 繰り返します

Linux

シェルの大きな利点の 1 つは、キーを数回押すだけで、どんなに複雑なコマンドでも簡単に繰り返すことができることです。最も簡単な方法では、上キーを押して前のコマンドを表示し、Enter キーを押して選択したコマンドを再度実行します。

必要に応じて、コマンドを実行する前に編集することもできます。最後に実行したいくつかのコマンドの 1 つを使用したい場合はそれでも問題ありませんが、ほとんどのシェルには、再度アクセスできる最後の 500 個ほどのコマンドの履歴が保存されます。

キーボードの上矢印キー (および目) の消耗を避けるために、Ctrl-R を押してコマンドの一部を入力します。ターミナルには、入力している内容と一致する最新のコマンドが表示され、キーを押すたびに更新されます。

非常によく似たコマンドをいくつか実行した場合は、入力を続ける必要はありません。数文字を入力して Ctrl-R をもう一度押すだけで、以前の一致が表示されます。欲しいものが見つかるまで続けてください。(心配しないでください。これは、実際に行うよりも説明するのにはるかに時間がかかる事柄の 1 つです。)

コマンドは実行前に編集できます。入力する検索語はコマンドそのものである必要はありません。コマンド ラインのどの部分でも一致するため、ファイル名から始めることもできます。

履歴内のコマンドに直接アクセスすることもできます。!_ 文字は、その履歴を参照していることをシェルに伝えます。!! は前のコマンドのショートカットであり、!-n は「n コマンド前にコマンドを実行する」ことを意味します (つまり、!!は!-1と同じです)。!xyz はxyz で始まる最後のコマンドを実行し、!?xyz はxyz を含む最後のコマンドに対して同じことを実行します (Ctrl-R とほぼ同じ)。

  • この記事は Linux Format によって TechRadar に提供されたもので、この雑誌の各号にはニュース分析、Linux の重要なトピックに関する詳細な特集、コーディング ガイド、Raspberry Pi および Maker プロジェクトなどが満載されています。ここからLinux Format の印刷版またはデジタル版を購読してください(新しいタブで開きます)