知っているかどうかで大違い!コマンドの入力補完機能を使いこなす | Linux Fan

知っているかどうかで大違い!コマンドの入力補完機能を使いこなす

2017年8月22日

Linuxを使い始めて、コマンドを正確に打たないといけないことに戸惑う人って多いですよね。そんな方にまずは覚えてもらいたいのが「コマンドの入力補完」です。大半のディストリビューションでは、コマンドラインシェル「bash」に強力な入力補完機能が搭載されています。これを知っておくだけで、格段にコマンド入力が楽になります。「Linuxを使い始めたばかりで、コマンドの実行もほとんどしたことがありません!」という方にも理解しやすいように、順を追って解説していきましょう。

ひょっとしたら、コマンドはWeb記事からコピー&ペーストしてばかりという人もいるかもしれませんね。本サイトでも、できるだけコマンドを手打ちしなくていいように、コマンド部分の右上に「copy」ボタンを表示しています(スマホ向け表示では表示されないこともあります)。

でもやっぱり、Linuxをうまく使っていくには自分でコマンドを自在に打てないといけません。そして、コマンド入力に慣れた人が必ず使っているのが「入力補完機能」です。ファイル名ディレクトリ名コマンド名はもちろん、最近では実行するコマンドにあわせたパラメーターも補完できるようになっています

基本中の基本。ファイル名の補完

では、入力補完機能を使ったことがない人は、Linuxで同じコマンドを実行しながら読んでくださいね。まず、作業するためのディレクトリを作ります。名前は「hokan」とでもしておきましょう。作ったら、「cd」コマンドでそのディレクトリに移動します。

mkdir hokan
cd hokan

次に、「linux_memo.txt」という名前のファイルを作ります。次のように、リダイレクトで文字列を書き込んでみましょう。これでファイルが作られます。

echo 'Linux Memo' > linux_memo.txt

ここまで、キーボードから全ての文字を入力しました。やっと次に入力補完を試すことができます。「cat」と入力し、その後にスペースを入れてください。そこで「Tab」を押すと、自動的に「linux_memo.txt」が入るはずです。そのままEnterを押せば、コマンドが実行されます。

ファイルがあるなら自動で入力してくれるんだから、タイプする文字はぐっと減らすことができますよね。でも、いつでもファイル名を完全に補完してもらえるわけではありません。試しに、同じディレクトリに「linux_matome.txt」を追加してみましょう。

echo 'Linux Matome' > linux_matome.txt

そして、先ほどと同じように「cat」の後にスペースを入力し、Tabキーを押してみましょう。どうなりましたか?

「linux_m」までしか補完されませんよね。「Tab」キーを押すと「機械的に判断できる部分まで文字列を自動入力する」という動作をします。「linux_memo.txt」と「linux_matome.txt」という2つのファイルがあるので、先頭から共通している「linux_m」までが補完されたというわけです。ここで、「e」と1文字打ってからTabキーを押すと、「linux_memo.txt」と補完されます。「a」を打ってTabキーを押した場合は「linux_matome.txt」となります。この、「1文字追加で入力し、さらにTabを押す」という技も多用するので覚えておきましょう。

さらに、「windows_memo.txt」と「windows_matome.txt」も作ってみましょう。

echo 'Windows Memo' > windows_memo.txt
echo 'Windows Matome' > windows_matome.txt

そして、またまた「cat」の後にスペースを入力して、Tabキーを押すとどうなるでしょうか。

何も入力されないですよね。ディストリビューションによっては、「ピッ」とか音がするかもしれません。「l」から始まるファイルと「w」から始まるファイルがあって、自動入力できる文字は1つもないのですから、当然こうなります。ここで、さらにTabキーを押してみましょう。

すると、これまで作成した4つのファイルが表示されました。これは、「ここで入力できるのはこの4つですよ」という意味です。表示された候補を参考に、「w」だけ入力してTabを押すとどうなるか、もう予想はつきますよね?

「windows_m」まで入力されました。「w」で始まるファイルは「windows_memo.txt」と「windows_matome.txt」で、共通している「windows_m」までが入力された、というわけです。ここで、たとえば「a」「Tab」と押せば、「windows_matome.txt」が入力されます。

これが、自動補完の基本的な動作です。では、次にディレクトリ名の補完も見ていきましょう。

もちろんディレクトリ名も補完できます

ファイル名と同様、ディレクトリ名もTabキーで補完させることができます。「cd /u」と打って、Tabを押してみてください。

通常は/(ルートディレクトリ)以下に「u」から始まるディレクトリは「usr」しかないので、補完されるはずです。最後に「/(スラッシュ)」か付いているので、保管されたのがディレクトリだと分かりますね。ここで、Tabを押してみましょう。

/usr/以下のディレクトリ一覧が表示されます。このように、cdする時に補完機能を使えば、lsコマンドを使わずに存在するディレクトリを確認することができます。ディレクトリごとにlsを打つより、ずっと効率的ですよね。

続けて「sh」と入力してTabを押すと「/usr/share/」に補完されます。さらに、Tabを2回押すとどうなるでしょうか。

「Display all 266 possibilities? (y or n)」のように表示されますよね(数値はシステムによって異なります)。これは、候補が多すぎる(100以上ある)ので、画面表示して良いか確認を求めるメッセージです。「y」を押すと、以下のように表示されます。

画面下の「--More--」は、次のページがあることを知らせています。次のページへ進むにはスペースキーを押します。途中で終わるには「q」キーを押してください。その後、必要に応じて文字を入力し、またTabキーを押して…の繰り返しです。これで、効率的にディレクトリを降りていくことができます。

なお、この例では「cd」で試しましたが、もちろん「cat」や「ls」といった他のコマンドに続けて入力する場合も、ディレクトリ名を補完させることができます。「cd」の場合はディレクトリのみが候補として表示されましたが、他のコマンドの場合はディレクトリとファイルの両方が候補として表示されます。たとえば、「ls -l /etc/l」と入力してTabを2回押してみてください。以下のように、ファイル名とディレクトリ名の両方が候補として表示されます。ディレクトリのみ最後に「/」をつけて表示されるので分かりやすいですね。

$ ls -l /etc/l
ld.so.cache     libblockdev/    libuser.conf    login.defs
ld.so.conf      libibverbs.d/   libvirt/        logrotate.conf
ld.so.conf.d/   libnl/          locale.conf     logrotate.d/
libaudit.conf   libreport/      localtime       lvm/

コマンド名も補完できる

ここまでファイル、ディレクトリと見てきましたが、一番最初に入力するコマンド名も補完できます。でも、基本的なコマンドの名前って「cd」とか「ls」とか「cat」とか、補完する間でもなく短いものが多いですよね。なので、初心者のうちはコマンド名の補完を使うことは少ないかもしれません。

1つ例を見ておきましょう。「his」と打ってTabを押してみてください。他に「his」から始まるコマンドがなければ、「history」に補完されるはずです。

Linuxにいろんなソフトをインストールして、いろんなコマンドを実行するようになると、長いコマンド名を打つことも出てくるでしょう。そんなときは、コマンド名も補完できることを思い出してくださいね。

その他の補完

ファイル名、ディレクトリ名、コマンド名の補完さえ使いこなせるようになれば、十分に効率的なコマンド実行ができるようになるでしょう。ここからは初心者向けではなく、さらに上を目指す方のために他の入力補完についても紹介していきましょう。

ホスト名の補完(sshでの接続時などに便利)

最近のLinuxディストリビューションには「bash-completion」というパッケージが導入されており、「入力されたコマンドに応じて適した文字列を補完する」という機能が有効になっています。そのため、ホスト名ををパラメーター取るコマンドの後ろでTabを押すと、ホスト名を補完させることができます。補完されるホスト名は、「/etc/hosts」に書かれたもののほか、「ssh」なら「~/.ssh/config」に書かれたものも使われます。以下は、「ssh」と入力して、Tabを2回押した時の例です。

$ ssh 
::1                      localhost.localdomain    localhost6.localdomain6
abc.example.com          localhost4               tokyo.example.com
def.example.com          localhost4.localdomain4  www.example.com
localhost                localhost6               
$ ssh 

ここで、「t」を入力してからTabを押すと、以下のようになります。

$ ssh tokyo.example.com 

これを使えば、長いホスト名を入力する必要がなくなりますね。なので、よく使うホストは「~/.ssh/config」や「/etc/hosts」に設定しておきましょう。もちろん、scpやsftpといったコマンドでも同じように補完できます。

変数名の補完

シェルの変数名も補完することができます。以下は、「$L」を入力してTabを2回押した例です。これまでの例と同様、補完させることができます。

$ echo $L
$LANG           $LINENO         $LIST           $LOGNAME
$LESSOPEN       $LINES          $LOADEDMODULES  $LS_COLORS
$ echo $L

ユーザー名の補完

bashでは「~ユーザー名」でユーザーのホームディレクトリにアクセスできますよね。なので、「~」から入力した文字列はユーザー名として補完されます。以下は「~」と入力してTabを2回押した時の出力例です。

$ ~
~abrt/                ~lintaro/             ~rtkit/
~adm/                 ~lp/                  ~saslauth
~apache/              ~mail/                ~setroubleshoot/
~avahi/               ~nm-openconnect/      ~shutdown/
~bin/                 ~nm-openvpn/          ~sshd/
~chrony/              ~nobody/              ~sync/
~colord/              ~openvpn/             ~systemd-coredump/
~daemon/              ~operator/            ~systemd-network/
~dbus/                ~polkitd/             ~systemd-resolve/
~ftp/                 ~pulse                ~systemd-timesync/
~games/               ~qemu/                ~tcpdump/
~gdm/                 ~radvd/               ~tss
~geoclue/             ~root/                ~usbmuxd/
~gnome-initial-setup  ~rpc                  ~vboxadd
~halt/                ~rpcuser/             
$ ~

ここで、「li」を追加してTabを押せば補完されて、「~lintaro/」になる、というわけです。

その他のコマンドパラメーターの補完

他にも、コマンドパラメーターとして入力する文字列は補完が効くものがあります。たとえば、UbuntuやDebianならapt、CentOSならyum、Fedoraならdnfといったパッケージ管理用のコマンドは、「install」や「update」といったサブコマンドを指定する必要がありますが、これらは補完可能です。以下は、Ubuntuで「sudo apt 」と入力してTabを2回押した時の出力です。

$ sudo apt 
autoclean     depends       help          purge         showsrc
autoremove    dist-upgrade  install       rdepends      source
build-dep     download      list          remove        update
changelog     edit-sources  moo           search        upgrade
clean         full-upgrade  policy        show          

ここで「i」を入力してTabを押すと「install」に補完されます。次に「apt install 」の後にダッシュ(-)を2つ入力してTabを2回押してみましょう。

$ sudo apt install --
--allow-change-held-packages   --ignore-missing
--allow-downgrades             --install-recommends
--allow-insecure-repositories  --install-suggests
--allow-remove-essential       --only-upgrade
--allow-unauthenticated        --print-uris
--arch-only                    --purge
--assume-no                    --reinstall
--assume-yes                   --remove
--auto-remove                  --show-progress
--download                     --show-upgraded
--download-only                --simulate
--dry-run                      --solver
--fix-broken                   --target-release
--fix-missing                  --trivial-only
--fix-policy                   --upgrade
--force-yes                    --verbose-versions
--ignore-hold                  

指定できるオプションが表示されました。これで、オプションを忘れてもわざわざマニュアルを表示しなくて済みますし、補完させればタイプ数も少なくなりますね。

他には、システムサービスをコントロールする「systemctl」コマンドの補完機能も便利です。「sudo systemctl 」の後にTabを2回押せば「stop」「restart」といった候補が表示されて補完できます。また、たとえば「sudo systemctl stop 」の後にTabを2回押せば、補完可能なサービス名などが表示されます。

すべてのコマンドがパラメーターの補完に対応しているわけではないですが、このように「Tabを2回押せば、パラメーターの候補を表示してくれる場合もある」ということは覚えておくと良いでしょう。

まとめ

いかがでしょうか?コマンドの補完機能を使えば、ずいぶん楽ができることは分かってもらえたのではないかと思います。自分で打つより早くて正確なのですから、使わない手はないですよね。しっかり活用して、楽にコマンドを実行できるようになりましょう。

なお、ここまで「Tab」と書いてきましたが「Ctrl-i(Ctrlを押しながらiキーを押す)」という操作でも入力補完することができます。Ctrlキーを用いたキーバインドに慣れているなら「Ctrl-i」のほうが使いやすいかもしれません。コマンドラインで使える便利なキーバインドも、改めて記事にしたいと思います。

更新履歴

2017-11-08 Ubuntu 17.10、Fedora 27で動作を確認