こんにちは、インフラエンジニアのryuです。
Linuxでコマンドを入力しているとき、Tabキーを押しても何も起きない。 候補が表示されず、長いファイル名やコマンドを毎回すべて入力している。
そんな状態になっていませんか?
Tab補完は、Linuxを操作するうえで欠かせない機能です。入力時間を短縮できるだけでなく、ファイル名やパスの入力ミスも減らせます。
ただし、Tab補完が使えない原因は、bash-completionが入っていないことだけではありません。そもそもBashを使っていない、候補が複数ある、設定ファイルが読み込まれていないといった可能性もあります。
この記事では、Tab補完の仕組みから、使えない原因の切り分け、bash-completionのインストール方法まで順番に解説します。
LinuxのTab補完とは¶
Tab補完とは、入力途中のコマンド名やファイル名を、Tabキーで補ってくれる機能です。
たとえば、カレントディレクトリにsample.txtがある場合、次の途中まで入力します。
cat sam
ここでTabキーを押すと、候補が1つであれば次のように補完されます。
cat sample.txt
長いファイル名をすべて入力する必要がありません。大文字と小文字や記号を打ち間違える可能性も減らせます。
Tab補完は入力を速くするだけではない¶
初心者のうちは、Tab補完を時短機能だと思うかもしれません。
しかし、実務では入力内容が存在するかを確認する機能としても使います。
たとえば、/var/log/の下にあるログファイルを開くとき、記憶だけを頼りにファイル名を入力すると間違えることがあります。途中まで入力してTabを押せば、実際に存在する候補から選べます。
私もエンジニアとして10年以上Linuxを触っていますが、長いパスを最初から最後まで手入力することはほとんどありません。途中まで入力し、Tab補完で存在を確かめながら進めます。
Linuxコマンドを覚えるときも、すべての文字列を丸暗記する必要はありません。
【関連記事】Linuxコマンドが覚えられない人へ|丸暗記しない覚え方
候補が複数あるときはすぐに補完されない¶
Tabキーを1回押しても変化がない場合、故障とは限りません。
入力内容に一致する候補が複数あると、Bashはどれを選べばよいか判断できないためです。
たとえば、次の2つのファイルがあるとします。
sample.txt
sample.log
samまで入力してTabを押しても、どちらか一方には確定できません。環境によってはTabを2回押すと候補が一覧表示されます。
sample.log sample.txt
追加でsample.tまで入力してTabを押せば、sample.txtへ補完できます。
Tabを押しても補完されないときは、まず候補が複数ないか確認することが大切です。
Bash標準の補完とbash-completionは別の機能¶
ここは混同しやすいポイントです。
Bashには、コマンド名やファイル名を補う基本的な補完機能が最初からあります。一方のbash-completionは、コマンドごとのルールを使った、より高度な補完を追加するパッケージです。
違いを整理すると、次のようになります。
| 種類 | 主な補完内容 | bash-completion |
|---|---|---|
| Bashの基本補完 | コマンド名、ファイル名、ディレクトリ名 | なくても利用できる |
| プログラマブル補完 | サブコマンド、オプション、サービス名など | 必要になることが多い |
| アプリ固有の補完 | gitのブランチ名、ツール固有の候補など |
個別の補完定義が必要 |
たとえば、cd /var/loから/var/log/へ補完できるのに、git cheからgit checkoutが補完されない場合があります。
この場合、Tabキー自体は機能しています。bash-completionやGit用の補完定義が読み込まれていない可能性があります。
ifconfigの例には注意する¶
元記事では、ifcまで入力してTabを押し、ifconfigへ補完する例を紹介していました。
ただし、現在のLinux環境ではifconfigが最初からインストールされていないことがあります。その場合、補完機能が正常でもifconfigは候補に出ません。
ネットワーク情報の確認には、現在はipコマンドを使う場面が増えています。
ip address
候補が表示されないときは、補完機能だけでなく、対象のコマンドがインストールされているかも確認しましょう。
command -v ifconfig
何も表示されなければ、そのコマンドは現在の検索パス上にありません。
Tab補完ができない原因を順番に切り分ける¶
いきなり設定ファイルを編集するのはおすすめしません。
まず、どの補完が使えないのかを切り分けます。原因が違えば、必要な対処も変わるからです。
ファイル名の基本補完を試す¶
テスト用のディレクトリとファイルを作成します。
mkdir -p ~/tab-test
touch ~/tab-test/sample.txt
cd ~/tab-test
続いて、次のように途中まで入力してTabキーを押します。
cat sam
cat sample.txtまで補完されれば、Bashの基本的なTab補完は動いています。
この状態で特定のコマンドだけ補完されない場合は、bash-completionや、そのコマンド専用の補完定義を確認します。
現在使用しているシェルを確認する¶
bash-completionは、その名前のとおりBash向けの仕組みです。
現在のログインシェルは、次のコマンドで確認できます。
echo "$SHELL"
ただし、$SHELLにはログイン時の標準シェルが表示されるため、現在実行中のシェルと一致しない場合があります。
現在のプロセスも確認するなら、次のコマンドを使います。
ps -p $$ -o comm=
bashと表示されればBashです。zshやfishを使用している場合は、それぞれのシェルに合った補完設定が必要です。
対話型のBashかを確認する¶
Tab補完は、通常、ユーザーが直接操作する対話型シェルで使います。
次のコマンドでシェルのオプションを確認できます。
echo "$-"
表示された文字列にiが含まれていれば、対話型シェルです。
シェルスクリプトの実行中や、非対話型のシェルでは、普段のターミナルと同じ補完動作にはなりません。
Tabキーの割り当てを確認する¶
Bashでは、Tabキーの動作をReadlineが管理しています。
設定が変更されている可能性がある場合は、補完に関する割り当てを確認します。
bind -P | grep complete
一時的に通常の補完へ戻す場合は、次の設定を現在のシェルで試せます。
bind '"\C-i": complete'
TabキーとCtrl + Iは、ターミナル上で同じ入力として扱われることがあります。
bash-completionをインストールする¶
基本的なファイル補完は動くものの、コマンドのオプションやサブコマンドが補完されない場合は、bash-completionを確認します。
bash-completionは、Bashのプログラマブル補完機能を利用し、さまざまなコマンド向けの補完ルールを提供するパッケージです。
Ubuntu・Debian系でインストールする¶
UbuntuやDebianでは、aptを使います。
sudo apt update
sudo apt install bash-completion
すでにインストールされているか確認する場合は、次のコマンドを使えます。
dpkg -s bash-completion
パッケージ情報が表示されれば、インストール済みです。
Rocky Linux・AlmaLinux・Fedora系でインストールする¶
RHEL系やFedoraでは、主にdnfを使用します。
sudo dnf install bash-completion
古い環境では、yumを使う場合もあります。
sudo yum install bash-completion
インストール状況は、次のコマンドで確認できます。
rpm -q bash-completion
ディストリビューションやバージョンによって、パッケージの有無や読み込み方法は異なります。コマンドをそのままコピーするだけでなく、自分のOSも確認しましょう。
cat /etc/os-release
補完機能を現在のシェルで読み込む¶
パッケージをインストールした後は、新しいターミナルを開くか、Bashを起動し直します。
すぐに現在のシェルへ反映したい場合は、補完スクリプトが存在することを確認して読み込みます。
if [ -r /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
fi
.はsourceと同じく、指定したファイルを現在のシェルで読み込むための記述です。
設定ファイルへ追加する場合¶
ユーザー単位で設定するなら、通常は~/.bashrcを利用します。
vi ~/.bashrc
ファイルの末尾へ、次のような記述を追加します。
if [ -r /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
fi
保存したら、現在のシェルへ反映します。
source ~/.bashrc
全ユーザーへ適用するために/etc/bash.bashrcを編集する方法もありますが、システム全体へ影響します。個人の学習環境では、まず~/.bashrcを使う方が安全です。
元記事の設定画面を確認する¶
環境によっては、/etc/bash.bashrc内に補完機能を読み込むための記述があります。
vi /etc/bash.bashrc
↓/etc/bash.bashrcのファイルの中身
# enable bash completion in interactive shells
#if ! shopt -oq posix; then
# if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
# elif [ -f /etc/bash_completion ]; then
# . /etc/bash_completion
# fi
#fi

設定できたら、一旦サーバーを再起動しましょう。
ただし、現在の一般的な環境では、Tab補完の反映だけを目的にサーバー全体を再起動する必要はありません。新しいシェルを開くか、source ~/.bashrcなどで設定を読み直せば十分です。
また、画像の例では読み込み行だけが有効になっていますが、現在の環境では既存の設定ブロックを確認し、むやみにコメントを外さないようにしてください。
設定ファイルを編集する前には、バックアップを作成しておくと安心です。
sudo cp /etc/bash.bashrc /etc/bash.bashrc.bak
インストール後もTab補完が使えないときの確認項目¶
bash-completionを入れても直らない場合は、読み込み状況や対象コマンドを確認します。
一つずつ切り分ければ、原因を見つけやすくなります。
補完スクリプトのパスを確認する¶
まず、読み込もうとしているファイルが存在するか確認します。
ls -l /usr/share/bash-completion/bash_completion
存在しない場合は、別のパスへ配置されているか、パッケージが正しくインストールされていません。
Ubuntu・Debian系では、パッケージに含まれるファイルを次のように確認できます。
dpkg -L bash-completion
RPM系では、次のコマンドを使います。
rpm -ql bash-completion
No such file or directoryが表示されたときは、存在しないパスを無理に読み込まず、実際の配置場所を確認してください。
.bashrcが読み込まれているか確認する¶
~/.bashrcへ設定したのに反映されない場合は、そのファイルが現在のシェルで読み込まれていない可能性があります。
一度、明示的に読み込みます。
source ~/.bashrc
エラーが表示される場合は、直前に追加した記述の引用符やif、fiの対応を確認します。
ログインシェルでは、~/.bash_profileや~/.profileから~/.bashrcを読み込む構成になっていることもあります。どのファイルが使われるかは環境によって異なります。
特定のコマンドだけ補完されない¶
cdやcatでは補完できるのに、特定のツールだけ候補が出ない場合があります。
そのツールに対応する補完定義が入っていないか、コマンド本体が独自の補完スクリプトを提供している可能性があります。
たとえば、クラウド系CLIやコンテナ関連ツールでは、別途補完スクリプトの生成や読み込みが必要になることがあります。
つまり、bash-completionを入れれば、すべてのコマンドが必ず高度に補完されるわけではありません。
sudoを付けたときだけ補完されない¶
通常ユーザーでは補完できるのに、sudoの後では候補が出ないこともあります。
この場合も、基本補完ではなく、sudoを考慮したプログラマブル補完が読み込まれているかが関係します。
まず、通常のコマンドで補完できるかを確認し、その後でsudoを付けた場合を試すと切り分けやすくなります。
Tab補完を使うときの注意点¶
Tab補完は便利ですが、表示された候補を確認せず実行してよいわけではありません。
特に、削除や権限変更を行うコマンドでは、補完後の文字列を最後まで確認してください。
補完されたパスを必ず確認する¶
次のような削除コマンドでは、対象のパスを間違えるとファイルを失います。
rm -r directory-name
Tab補完によって存在する名前が入力されても、それが削除したい対象とは限りません。
Enterを押す前に、カレントディレクトリと補完後のパスを確認します。
pwd
ls -ld directory-name
補完は入力を助ける機能であり、操作の正しさを保証する機能ではありません。
隠しファイルはドットから入力する¶
.bashrcのような隠しファイルは、先頭の.を入力しないと候補に出ないことがあります。
vi .ba
ここでTabを押すと、.bashrcや.bash_historyなどの候補が表示されます。
Linuxの隠しファイルや設定ファイルに慣れていない方は、基本コマンドと一緒に操作を練習すると理解しやすくなります。
【関連記事】Linuxコマンド40選|初心者が最初に覚えたい基本コマンド
Tab補完を使ってLinux作業を効率化しよう¶
Tab補完ができないとき、最初からbash-completionだけを疑う必要はありません。
ファイル名の基本補完が使えるか、現在のシェルがBashか、候補が複数ないか、対象コマンドが存在するかを順番に確認します。
基本補完は動き、コマンド固有の候補だけ出ない場合は、bash-completionや個別の補完定義を確認しましょう。
インストール後は、サーバーを再起動するのではなく、新しいシェルを開くか、設定ファイルを読み直す方法で反映できます。
Tab補完を使う癖が付くと、Linux操作はかなり楽になります。入力速度だけでなく、パスやファイル名を確認しながら操作できるため、ミスも減らせます。
InfraAcademyでは、Linuxコマンドをブラウザ上で実行しながら学べます。コマンドを読んで覚えるだけでなく、実際に入力して身につけたい方におすすめです。



