Ubuntuでは、ほとんどの操作をGUIから行えるように配慮されていますが、中身はLinuxですので、各種コマンドを直接利用することもできます。何回かに分けてターミナル(端末)を利用したレシピをお届けします。
今回はまず第一回として、端末を頻繁に使う場合のノウハウを中心にお伝えします。
Ubuntuでのターミナル
Ubuntuでは、ターミナル(gnome-terminal)は、[アプリケーション]→[アクセサリ]→[端末]からアクセスできます。積極的に利用する場合、やや問題になる点が幾つかありますので、必要に応じて設定を行ってください。
まず、gnome-terminalは、デフォルトでは一部の文字の文字幅を正しく扱えません。問題になりうるのは、多くの場合は■や△、○などといった記号です。
このような問題に遭遇した場合、環境変数としてVTE_CJK_WIDTH=1をセットし、さらに、gnome-terminalの引数に--disable-factoryを与えることで、これらの文字の文字幅を正しく扱わせることができます。
ランチャに登録する場合は、図3のように「/bin/sh -c "VTE_CJK_WIDTH=1 gnome-terminal --disable-factory"」と登録し、/bin/shなどから起動させるのが良いでしょう。
ただし、VTE_CJK_WIDTH=1設定には罫線周りなどの表示が正しくなくなる副作用もあるため、標準のターミナルも残しておく必要があります。パネルなどに登録するショートカットとしてこれらを利用してください。
もうひとつ、ターミナルを利用する上で問題になるのは、「デスクトップ」などといった日本語ディレクトリ名です。ターミナルでは日本語入力をOffにしたまま操作するのが普通ですから、「cd デスクトップ」などという操作を行う場合は、「cdと入力した後、日本語入力をOnにし(全角/半角なりAlt+~を押し)、デスクトップと入力してからEnter」などという、面倒な入力を行う必要があります。
こうした面倒な操作を行いたくない場合、これらのディレクトリ名を英語にすることをお勧めします。以下のコマンドを実行することで設定ダイアログが表示されますので、変更を行ってください。
別の方法としては、日本語ディレクトリ名はそのままにしておき、ln -s デスクトップ Desktopなどとして、シンボリックリンクを貼ってしまうのも良いでしょう(ただし、あまり想定されている動作ではないので、特段の理由がなければxdg-user-dirs-gtk-updateで設定を変更することをおすすめします)。
また、「そもそもHOMEディレクトリの直下にこれらのファイルがあるのがイヤだ」という場合、ユーザ単位であれば~/.config/user-dirs.dirsに、システム単位では/etc/xdg/user-dirs.confに設定ファイルがあります。このファイルは以下のように、単に変数を列挙するだけですので、手動で編集し、~/XDG/Desktop、などといったディレクトリを指定することも可能です。なお設定後も、既存のファイルは自動的には移動されませんので、そちらも手動で行う必要があります。
/bin/shの正体は?
ターミナルを多用するようになると、シェルスクリプトを利用する機会が増えてきます。このような場合に、「最近のLinux環境」に特有の問題が起こることがあります。最近のLinux環境では、伝統的なUnix環境とは異なり、bourn shellはインストールされず、/bin/shがbashのシンボリックリンクになっています。
そして一方では、bashは/bin/shとして呼び出された場合も、bashで拡張された機能をそのまま提供してしまいます。このため、Linux向けのシェルスクリプトの一部では、「/bin/shを使うようにshebangが指定されているにもかかわらず、実際にはbashでなければ動かない」というものが存在します。
このようなシェルスクリプトを実行させた場合、Ubuntu(やDebian)では/bin/shはbashのシンボリックリンクではありませんので、動作しません。Ubuntuの/bin/shはdash(Debian Almquist Shell)のシンボリックリンクで、これはbashとは異なり、bourne shellそのものに限りなく近い動作を行います。このため、/bin/shがbashであることを期待する(あまり適切でない)シェルスクリプトは、Ubuntu上ではエラーを吐くことがあります。
典型的なのは、以下のようなスクリプト(/test.sh)です。select文はbashの機能ですので、/bin/shを指定している限り、本来であれば動作すべきではありません。
Ubuntuで実行した場合、以下の実行例のように、エラーが出力されて終了します。
このような「行儀の悪い」スクリプトへの対処方法は二種類あります。
まず一つは、問題のシェルスクリプトのshebangを/bin/shから/bin/bashへ修正してしまうことです。こちらはあまり副作用はありませんので、ほとんどの場合にお勧めします。
しかし場合によっては、shebangを単に修正しただけではスクリプトが機能しなくなることがありえます(つまり、「/bin/shという名のbash」では動作するが、bashでは動作しない)。場合によっては、修正すべきスクリプトがあまりに大量で、適切な編集を加えきれないことも考えられます。
このような場合、Ubuntuでも/bin/shをbashのシンボリックリンクに差し替える手段が提供されています。設定が必要な場合、以下のコマンドを実行してください。
実行すると「Install dash as /bin/sh?」と確認されますので、を選択することでbashが利用されるようになります。元に戻す場合は再度実行し、を選択してください。これにより、先ほどのスクリプトが動作するようになります。
とはいえ、ご自身でシェルスクリプトを書かれる場合は、/bin/shを指定したのであればきちんとbourne shellの機能だけで完結させるべきで、これは「他人が書いたスクリプトをどうしても動かさなくてはいけない」といった場合の最後の手段です。
表示言語を切り替える
ターミナルで利用される言語は、原則として環境変数LANGで指定されたものが使われます。Ubuntuの標準的な日本語環境ではja_JP.UTF-8が利用されます。この設定では多国語対応の影響で、エラーメッセージなどは日本語リソースを用いて出力されます。
しかし、既存のドキュメントを参考にする場合や、検索エンジンを利用する場合、また、ソースコードでエラーメッセージを探す場合などには、日本語のメッセージではヒットしないことが多々考えられます。
このような場合は、export LANG=Cを実行して、英語出力に切り替えてください。
lessの文字コード対応
ターミナルで作業を行う場合、lessでテキストファイルなどを表示させる場合があります。この時、テキストファイルの文字コードによってはそもそも日本語が表示できず、文字化けすることがあります。
このような場合には、lessの代わりにlvを用いるのが簡便です。lvパッケージは標準ではインストールされていませんので、適宜インストールしてください。
過去のおさらい
これまで触れてきたレシピの中にも、ターミナルを操作する上で役に立つものがあります。いくつか並べてみましょう。
デスクトップ上での右クリックでターミナルを開けるようにする
第13回で触れた通り、nautilus-open-terminalをインストールすることで行えます。
ターミナルをウィジェットにする
こちらは第15回で触れましたが、ターミナルをウィジェットとして登録することで、ショートカットキー一つで表示・非表示を切り替えるレシピです。
ターミナルを頻繁に利用する場合、キーだけで作業中のターミナルを呼び出せるようになりますので、非常におすすめです。
参考になるドキュメント
- Ubuntuでターミナルに初めて触れる人向けの、help.ubuntu.comのドキュメント
- URL:https://help.ubuntu.com/community/UsingTheTerminal/
- URL:https://help.ubuntu.com/community/CommandlineHowto