初めて Linux を操作する場合、すぐにあまり見慣れない拡張子のファイルを目にすることでしょう。ファイル拡張子は、ファイル名の後ろにあるドット (.) の後の末尾の部分です (ファイル sneakers.txt では「txt」がファイル拡張子です)。
以下に挙げるのは、拡張子とその意味の簡易一覧です。
.Z -- 圧縮ファイル
.tar -- アーカイブファイル (テープアーカイブ - tape archive の短縮名)
.gz -- 圧縮ファイル (gzip による)
.tgz -- tar と gzip を両方使用したファイル
.txt -- 平文 ASCII テキストファイル
.html/.htm -- HTML ファイル
.ps -- 印刷用にフォーマットされた PostScript ファイル
.au -- オーディオファイル
.wav -- オーディオファイル
.xpm -- 画像ファイル
.jpg -- 写真や絵などのグラフィックファイルまたは画像ファイル
.gif -- グラフィックファイルないし画像ファイル
.png -- グラフィックファイルないし画像ファイル
.rpm -- RPM パッケージマネージャファイル
.conf -- 設定ファイル
.a -- アーカイブファイル
.lock -- 「ロック」ファイル、プログラムが使用中かどうかを判別する
.h -- C および C++ プログラム言語のヘッダファイル
.c -- C プログラム言語のソースコードファイル
.cpp -- C++ プログラム言語のソースコードファイル
.o -- プログラムのオブジェクトファイル
.pl -- Perl スクリプト
.tcl -- TCL スクリプト
.so -- ライブラリファイル
しかし、ファイル拡張子は常に使用されるわけではなく、また常に一貫性を持って使われるわけでもありません。そこで、ファイルに拡張子がない場合、またはファイルの拡張子と内容が一致していないと思われない場合はどうなるのでしょうか。
そうした場合に、便利なのが file コマンドです。
「Chapter 15」で、saturday という、拡張子のないファイルを作成しました。file コマンドを使用して以下のように入力すると、このファイルの種類がわかります。
file saturday
これがテキストファイルであることが確認できます。テキストファイルであることが判明したファイルならば、cat、more、または less で読み込めることになります。
man ページをお読みください: file のより詳しい説明については、[man file] と入力して file の man ページをお読みください。
そして、ファイルの読み込みと言えば…
Linux では、ファイルを読み込む方法がたくさんあります。たとえば、「Chapter 15」では、more および less というページャ (これらのプログラムでは 1 度に 1 画面分の文書を「ページ」送りできるため、ページャと呼ばれています) を説明しました。また、cat を使用すればファイルを表示できるだけでなく、操作できることも見てきました。
しかし、README ファイル、man ページまたはユーザが作成した文書を表示する場合にはさらに多くの機能を選択できます。
テキストファイルを読む時に利用できるツールには、テキストエディタの pico、emacs、vim、ページャの more および less、そしてビューアの head、tail、cat、grep など多数のツールが用意されています。
それでは、これらのツールの機能の一部を見てみましょう。
「Chapter 15」では、less というページャを紹介しました。less は man ページの表示に使用されるページャです。
ここで、less が実際に機能しているところを確認するため、less の man ページを表示してみます。
man less
画面を先に送るには [Space] を、戻すには [b] を、終了する場合は [q] の各キーを押します。
less には他にも水平にスクロールしたりスクロールする行数を指定するなどの便利な機能が備えられています。
名前から考えると奇妙に思えるかもしれませんが、more のほうが less よりも機能は少なくなっています (事実 less は more をヒントに開発されたものです)。
ここで、more の man ページを見てみますが、今度は more を使って開いてみましょう。それには man の出力を more にパイピングすることによって行います。
man more | more
最初はあまり変わらないように見えるかもしれませんが、more は less と比べると拡張機能は少なくなっています。とりあえず気付くもっとも大きな違いは、文書内を戻る機能がないことでしょう。ただし、[Space] を押して先に送る機能と [q] を押して終了する機能は同じです。
ファイルの最初の部分だけを確認するのでしたら、head コマンドを使用できます。コマンドの構文は以下の通りです。
head<ファイル名>
head は便利な場合もありますが、表示できるのが最初の数行に限られますので、ファイルの実際の長さを確認することはできません。デフォルトでは、表示部分はファイルの最初の 10 行だけですが、以下のように入力すれば表示行数を増やすように指定できます。
head -20<ファイル名>
詳しくは、head の man ページ (man head) をお読みください。おそらく、探していた情報が当初思っていたよりもファイルの後の位置にあると分かった場合にページを送れる点で、less または more のほうが便利だと思われるでしょう。
head の逆が tail です。tail では、ファイルの最後の 10 行を確認できます。
cat コマンドは、「concatenation (連結)」を短くしたもので、ファイル全体の内容を画面にダンプ出力します。cat は、前の章で作成した sneakers.txt のように比較的短いファイルの場合に便利です。しかし、ファイルが長い場合は、cat は全ファイルを表示するため、画面がすぐにスクロールされて過ぎていってしまいます。
grep コマンドはファイル内の特定の文字列を検索する場合に便利です。たとえば、ログインディレクトリで作成した sneakers.txt ファイル内で「coffee」と記した箇所をすべて検索するとします。以下のように入力します。
grep coffee sneakers.txt
これで、「coffee」の語が検出された行がすべて表示されます。
大文字/小文字に注意: 特に指定がない限り、grep の検索では大文字/小文字が区別されます。これは Coffee の検索は coffee の検索とは異なるということです。したがって、grep のオプションには -i があり、このオプションを指定すると大文字/小文字を区別しないファイル内検索ができます。このコマンドの詳細は、grep man ページをお読みください。
情報を格納および印刷して後で読めるようにする場合、パイピングと出力リダイレクトの使用を忘れないでください。
たとえば、あるファイルの特定の内容を grep で検索し、その結果をファイルに保存する、またはプリンタに送ることができます。
たとえば、sneakers.txt 内の「coffee」の記載に関する情報を印刷するには、以下のように入力します。
grep coffee sneakers.txt | lpr
このコマンドの動作は、ls -al /etc | more コマンドと似ています。このコマンドは、「Chapter 15」で /etc ディレクトリの内容を一覧にし、その結果を画面で表示するため more コマンドに送ったときに使用した記憶があるかもしれません。
>> を使用するほうが安全: 「>」と「>>」は違いますので注意してください。> はファイルを上書きしますが、>> はファイルに情報を追加します。通常は、目的がはっきりしていない限り、貴重な情報を喪失せずに済みますので >> を使用するほうが (情報を追加したくなかった場合にはファイルを編集する必要がありますが) 安全です。
探しているファイルの名前を忘れたらどうしましょうか。コンピュータには、「'sneak' だったか 'sneak ××' とかいうファイルを検索せよ」とは命令できません。
さて実は、そのような言い方があるのです。ワイルドカードまたは正規表現を使用すると、完全なファイル名を知らなくともファイルの操作を実行できます。知っている部分を記述し、残りはワイルドカードで置き換えます。
ワイルドカードと正規表現のより詳しい内容: ワイルドカードおよび正規表現の詳細は、bash man ページをご覧ください (man bash)。groff -Tnippon /usr/share/ と入力すれば、ファイルをテキストファイルに保存できます。そうすれば、このファイルを less または pico (pico bash.txt) で開いて読むことができます。印刷したい場合は、かなり長大なファイルですからそのつもりで印刷してください。
ここでは、ファイル名を「sneak ××.txt」と記憶しているとします。その場合以下のように入力します。
ls sneak*.txt
すると、以下のファイル名が表示されます。
sneakers.txt
検索ではアスタリスク (*) がもっともよく使われるでしょう。アスタリスクは、検索するパターンに一致するすべての対象を探し出します。したがって、
ls *.txt
または
ls sn*
と入力しただけでも sneakers.txt を検索できます。ただし、システムを使用しているうちに、テキストファイルの数が増えますから、その場合は検索対象のパターンが一致するものがあれば、それらのテキストファイルがすべて表示されるようになります。
したがって、できるだけ検索範囲を絞れると助かります。
検索を絞り込む 1 つの方法は、疑問符 (?) を使用することです。アスタリスクと同様、? を使用しても検索パターンに一致するファイルを見つけることができます。
しかし、「?」は 1 文字一致検索に便利です。したがって、sneaker?.txt を検索すると、その結果、sneakers.txt および sneakerz.txt (このようなファイル名があれば) が表示されます。
たとえば、ファイル sneakers.txt が実は sneak*.txt という名前である場合など、アスタリスク自体がたまたまファイル名の一部である場合は、正規表現が便利です。
正規表現は、単純なアスタリスクや疑問符よりも複雑です。
バックスラッシュ (\) を使用すれば、アスタリスクによって一致するすべてのファイルを検索するのではなく、アスタリスクをファイル名の中に持つファイルを検索するように指定できます。
ファイル名が sneak*.txt の場合は、以下のように入力します。
sneak\*.txt
以下にワイルドカードと正規表現の簡略な一覧を示します。
* -- 任意の文字 (列) に一致
? -- 文字列中の 1 文字一に致 (sneaker?.txt など)
\* -- 「*」文字に一致
\? -- 「?」文字に一致
\) -- 「)」文字に一致
ワイルドカードは検索だけでなく、ファイルの移動や名前変更の際にも便利です。そして、正規表現は「*」や「?」などの文字が使われているファイルの名前変更に使用できます。
これらの操作については、さらにこれから説明していきます。