Linux実践講座

Linux実践講座

コンピュータを便利に使う tips などをメモ

grep はパターンにマッチする行を表示する便利なコマンドです

読了までの目安時間:約 23分

grep は、「UNIXプログラミング環境」でも紹介されているコマンドで、32ページに

これはファイルを検索して、あるパターンに一致した行を探してくれるコマンドである。(その名前の由来は、ed コマンドの g/regular-expression/p であり、これについては付録1に説明がある。)

と書かれています。

プログラムのソースを調べたり、サーバ管理の為にログを解析したり環境変数を調べる時に良く使います。
man grep でgrepの使い方を調べてみましょう。

名称
grep, egrep, fgrep, zgrep - パターンにマッチする行を表示する

書式
grep [options] PATTERN [FILE...]
grep [options] [-e PATTERN | -f FILE] [FILE...]

解説
grep は、 FILE で名前を指定された入力ファイル (ファイルが指定されてないか、 file の部分に - が指定された場合は標準入力) を読み込み、与えられたPATTERN にマッチする部分を含む行を探します。デフォルト動作では、 grepはマッチした行を表示します。さらに、2 つのプログラム egrep と fgrep を利用可能です。 egrep はgrep -E と同じです。 fgrep は grep -F と同じです。 zgrep は grep -Z と同じです。

オプション
-A NUM, --after-context=NUM
NUM で指定した行数だけ、パターンにマッチした行の後の行も表示します。

-a, --text
バイナリファイルをテキストファイルであるかのように処理します。これは --binary-files=text オプションと等価です。

-B NUM, --before-context=NUM
NUM で指定した行数だけ、パターンにマッチした行の前の行も表示します。

-C [NUM], -NUM, --context[=NUM]
NUM で指定した行数 (デフォルトは 2) だけ、パターンにマッチした行の前後の行も表示します。

-b, --byte-offset
各出力行の前に、入力ファイルの先頭からのバイト単位のオフセットを表示します。

--binary-files=TYPE
ファイルの最初の数バイトが、ファイルの内容がバイナリファイルであることを示す場合、ファイルのタイプを TYPE であると仮定します。デフォルトでは TYPE は binary であり、 grep は通常、バイナリファイルの一致を示す一行メッセージを表示するか、マッチしない場合にはなに も表示しません。 TYPE が without-match の場合、 grep はバイナリファイルはマッチしないものと仮定します。これは -I オプションと等価です。 TYPE が text の場合、 grep はバイナリファイルをテキストであるかのように扱います。これは -a オプションと等価です。 警告: grep --binary-files=text はバイナリのゴミを表示する可能性があります。出力先が端末である場合で、端末ドライバがこのゴミの一部をコマンドであると解釈する場合、このゴミが悪い副作用をおよぼす可能性があります。

-c, --count
通常の出力はせず、各入力ファイルについてマッチした行数を表示します。 -v, --invert-match オプションと共に指定した場合は、マッチしなかった行数を表示します (下記参照)。

-d ACTION, --directories=ACTION
入力ファイルがディレクトリの場合に、 ACTION を使ってその処理を行います。デフォルトでは ACTION は read であり、ディレクトリを普通のファイルであるかの様に読み取る事を意味します。 ACTION が skip な ら、ディレクトリを黙って読み飛ばします。 ACTION が recurse なら、 grep は各ディレクトリ下のすべてのファイルを再帰的に読み取ります。これは -r オプションと等価です。

-E, --extended-regexp
PATTERN を拡張された正規表現として扱います (下記参照)。

-e PATTERN, --regexp=PATTERN
PATTERN をパターンとして指定します。 - で始まるパターンを保護するために有効です。

-F, --fixed-strings
PATTERN を改行で区切られた固定文字列のリストとして扱います。その文字列のどれかとマッチするかを調べます。

-f FILE, --file=FILE
パ ターンを FILE から 1 行ごとに読み込みます。空のファイルはパターンを含まないので、何にもマッチしません。

-G, --basic-regexp
PATTERN を基本的な正規表現として扱います (下記参照)。デフォルトです。

-H, --with-filename
各々のマッチに対してファイル名を表示します。

-h, --no-filename
複数ファイルを検索した時に、出力の前にファイル名を付けることを抑制します。

--help 簡単なヘルプメッセージを出力します。

-I バイナリファイルをマッチするデータを含まないかのように処理します。これは --binary-files=without-match オプションと等価です。

-i, --ignore-case
PATTERN と入力ファイルの双方で、英大文字と小文字の区別をしないようにします。

-L, --files-without-match
通常の出力はせず、このオプションを指定しなかったときに全く出力されない入力ファイルの名前を表示します。スキャン動作は最初のマッチで終了します。

-l, --files-with-matches
通常の出力はせず、このオプションを指定しなかったときに出力される入力ファイルの名前を表示します。スキャン動作は最初のマッチで終了します。

--mmap 可能ならば、デフォルトの read(2) システムコ ー ル の 代 わ り に mmap(2) システムコールを使って入力を読み取ります。ある状況において、 --mmap はよりよい性能をもたらします。しかし、 grep の動作中に 入力ファイルが小さくなるか、または I/O エラーが生じた場合に、 --mmap は (コアダンプを含む) 未定義の動作を引き起こす可能性が あります。

-n, --line-number
各出力行の前に、入力ファイルにおける行番号を表示します。

-q, --quiet, --silent
沈黙。通常の出力を抑止します。スキャン動作は最初のマッチで終了します。下記の -s や --no-messages オプションも参照。

-r, --recursive
各ディレクトリ下のすべてのファイルを再帰的に読み取ります。これは -d recurse オプションと等価です。

-s, --no-messages
指定されたファイルが存在しないことや読み込みできないことを示すエラーメッセージを抑止します。移植性に関する注: GNU grep とは異 なり 、伝統的な grep は POSIX.2 に適合していませんでした。なぜなら、伝統的な grep には -q オプションが無く、 -s オプション は GNU grep の -q オプションの様に動作したからです。伝統的な grep へ移植可能であることを意図したシェルスクリプトは、 -q と -s を両方とも使わずに、出力を /dev/null へリダイレクトすべきです。

-U, --binary
フ ァイルをバイナリとして扱います。デフォルトでは、MS-DOS と MS-Windows 環境下で grep は、ファイルから読み取った最初の 32KB の内容を見て、ファイルタイプを推測します。 grep はファイルをテキストファイルと判断した場合、オリジナルのファイル内容から ( ^ と $ が使われている正規表現を正しく動作させるために ) CR 文字を取り除きます。 -U を指定すると、この当て推量を抑制し、すべてのファイルを読み取ってマッチ機構へそのまま渡します。もしファイルが各行の末尾に CR/LF の組みを持つテキストファイルなら、このオプションは正規表現を役に立たなくさせることがあるでしょう。このオプションは MS-DOS と MS-Windows 以外のプラットフォームでは効果がありません。

-u, --unix-byte-offsets
unix 形式のバイト単位オフセットを報告します。このスイッチを指定すると grep は、ファイルが unix 形式のテキストファイル、すなわち、 CR 文字が取り除かれたファイルであるかのごとくにバイト単位オフセットを報告します。このことは grep を Unix マシンで動作させたのと同じ結果を生成します。このオプションは -b オプションも使用しない限り効果がありません。 MS-DOS と MS-Windows 以外のプラットフォームでは効果がありません。

-V, --version
grep のバージョン番号を標準エラー出力に表示します。バグレポー トには、この番号を付記してください (下記参照)。

-v, --invert-match
結果を反転し、マッチしなかった行を選択します。

-w, --word-regexp
完全な語にマッチする行のみを選択します。マッチする部分文字列が行頭から始まっているか、単語構成文字以外の文字が前にあることがテストされます。同様に、マッチする部分文字列が行末まであるか、単語構成文字以外の文字が後にある必要があります。単語構成文字とは、レター・数字・アンダスコアです。

-x, --line-regexp
行全体と正確にマッチする行のみを選択します。

-y -i と同じ意味を持つ旧式のオプションです。

--null 通常ファイル名の後に続く文字の代わりにバイト 0 (ASCII NUL 文字) を出力します。例えば、 grep -l --null は各ファイル名の後に、通常の newline ではなくバイト 0 を出力します。このオプションを指定すると、 newline 等の例外的な文字を含むファイル名に直面した場合 でも 出力が明白になります。このオプションを find -print0, perl -0,sort -z, xargs -0 等のコマンドと共に使用すれば、任意のファイル名を 処理できます。ファイル名が newline 文字を含んでいても処理可能です。

-Z, --decompress
検索を開始する前に入力データを伸長します。このオプションは zlib ライブラリと共にコンパイルした場合のみ使用可能です。

正規表現
正規表現は、文字列の集合を表現するパターンの事です。数式表現と同様に、より小さな表現を組み合わせるさまざまな演算子を用いる事で、正規表現を 組み立てます。

grep は、「基本」正規表現と「拡張」正規表現の 2 種類の正規表現文法を扱う事ができます。 GNU grep では、どちらの正規表現文法も機能的な違いは あり ません。他の実装では、基本正規表現は拡張正規表現より能力が低くなっています。ここでは、拡張正規表現について説明します。基本正規表現との違 いは、その後に説明します。

正規表現の基本単位は、1 文字にマッチする正規表現です。レターと数字を含む多くの文字は、それ自身にマッチする正規表現です。また、特殊な意味を 持つ メタ文字も、その文字の前にバックスラッシュを付けると、その本来の文字にマッチするようになります。

[ と ] で囲まれた文字のリストは、そのリスト中に含まれるどれか 1 文字 にマッチします。ただし、リストの先頭がキャレット ^ の場合は、そのリストに含まれ ない文字にマッチします。例えば、正規表現 [0123456789] は数 字 1文字にマッチします。文字の範囲は最初と最後の文字をハイフン (‘-’) でつなぐことで指定できます。最後に、特定の名前を持つ文字クラスがあらかじめ 定義 さ れ て い ま す 。 名 前 が内容を示しており、それらは、 [:alnum:],[:alpha:], [:cntrl:], [:digit:], [:graph:], [:lower:], [:print:],[:punct:], [:space:], [:upper:], [:xdigit:] です。例えば、 [[:alnum:]]は [0-9A-Za-z] と同じですが、後者は POSIX ロケールや ASCII コード順に依存 しますので、前者の方がロケールや文字集合に依存しません。 (クラス名の中の角括弧はシンボル名の一部であり、リストを区切る角括弧とは別に指定 する 必要があることに注意) リストの中では、ほとんどのメタ文字は通常の文字として扱われます。リテラル ] を含めるには、この文字をリストの先頭に置いてください。同様に、リテラル ^ を含めるには、この文字をリストの先頭以外に置いてください。リテラル - を含めるには、この文字をリストの最後に置いてください。

ピリオド . は、任意の 1 文字にマッチします。シンボル \w は [[:alnum:]]と同じ意味で、シンボル \W は [^[:alnum:]] と同じ意味です。

キャレット ^ と、ドル記号 $ は、それぞれ行頭と行末の空文字列にマッチ する メタ文字です。シンボル \< とシンボル \> は、それぞれ単語の先頭と末尾の空文字列にマッチするメタ文字です。シンボル \b は単語の端の空文字列 にマッチします。シンボル \B は単語の端 以外の空文字列にマッチします。

正規表現の後には、繰り返し演算子のどれかが続くことがあります。
? 直前の項目はオプションであり、最大 1 回マッチします。
* 直前の項目は 0 回以上マッチします。
+ 直前の項目は 1 回以上マッチします。
{n} 直前の項目は厳密に n 回マッチします。
{n,} 直前の項目は n 回以上マッチします。
{n,m} 直前の項目は、最低 n 回、最大 m 回マッチします。

2 つの正規表現は結合可能です。結果としてできあがる正規表現は、結合された 2 つの部分表現にそれぞれマッチする 2 つの部分文字列を結合した任意 の文字列にマッチします。

2 つの正規表現は中置き型演算子 | で繋ぐことが可能です。結果としてできあがる正規表現は、どちらかの部分表現にマッチする任意の文字列にマッチし ます。

繰 り返しは結合に優先します。また結合は選択に優先します。これらの優先規則を無効とするために、部分表現全体を括弧で囲むことが可能です。

n が 1 つの数字であるような後方参照 \n は、正規表現中の括弧で囲まれた n番目の部分表現がマッチした文字列とマッチします。

基 本正規表現では、メタ文字 ?, +, {, |, (, ) は、その特殊な意味を失います。代わりに、バックスラッシュを付けた \?, \+, \{, \|, \(, \) を使用 してください。

伝 統的な egrep は、メタ文字 { をサポートしませんでした。また、このメタ文字の代わりに \{ をサポートする egrep 実装もいくつか存在するので、移植可 能なスクリプトでは、リテラル { にマッチさせるために egrep パターンで{ を使うことは避けて [{] を使うべきです。

GNU egrep は、 { が不正な範囲指定の始まりであるなら特殊文字ではない、と想 定 し て、伝統的な使用法のサポートを試みます。例えば、シェルコマンドegrep ’{1’ は正規表現の文法エラーを報告せずに、2 文字の文字列 {1 を検索します。 POSIX.2 は、この動作を一つの拡張として許可していますが、移植可能なスクリプトではこの使用法を避けるべきです。

環境変数
GREP_OPTIONS
この変数は明示的なオプションの前に指定されるデフォルトオプションを指定します。例えば、もし GREP_OPTIONS が ’--binary-files=with- out-match --directories=skip’ である場合、 grep は 2 つのオプション --binary-files=without-match と --directories=skip が明示的なオプションの前に指定されている様に動作します。オプションの指定は空白によって区切られます。バックスラッシュは次の文字をエスケープします。これは空白やバックスラッシュを含むオプションを指定するために用いられます。

LC_ALL, LC_MESSAGES, LANG
これらの変数は grep がメッセージに使用する言語を決定する LC_MES-SAGES を指定します。ロケールはこれらの変数のうち最初に設定されているものにより決定されます。もしこれらの変数全てが設定されていない場合、またはメッセージカタログがインストールされていない場合、または grep が国際言語サポートつき (NLS) でコンパイルされてない場合には、アメリカンイングリッシュが用いられます。

LC_ALL, LC_CTYPE, LANG
これらの変数は、例えばどの文字が空白であるかなど、文字の種類を決定する LC_CTYPE を指定します。ロケールはこれらの変数のうち最初に設定されているものにより決定されます。もしこれらの変数全てが設定されていない場合、またはメッセージカタログがインストールされていない場合、または grep が国際言語サポートつき (NLS) でコンパイ ルされてない場合には、 POSIX ロケールが用いられます。

POSIXLY_CORRECT
設 定されている場合、 grep は POSIX.2 として動作し、それ以外の場合は grep は他の GNU プログラムのように動作します。 POSIX.2 ではファイル名の後に続くオプションはファイル名として扱われます。デフォルトでは、このようなオプションはオペランドリストの先頭に並び変えられて、オプションとして扱われます。また、POSIX.2 では認識できないオプションは “ 不法 (illegal)” であると診断されますが、法 律に 違 反 し て いるわけではないので、デフォルトではこれらは“不正 (invalid)” であると診断されます。

診断
通常、パターンにマッチした行が見つかった場合は 0 を、見つからなかった場合 は 1 を返します。(ただし、 -v オプションを指定した場合は、逆になります。) パターンに文法エラーが存在したり、入力ファイルにアクセスできな いなどのシステムエラーが発生した場合は、2 を返します。

バグ
バ グレポートは、 bug-gnu-utils@gnu.org まで Email してください。この時、“Subject:” のどこかに “grep” という単語を忘れずに入れてください。

{m,n} の表現で非常に大きな繰り返しを指定すると、非常に多くのメモリを 消費 します。さらに、ある種のあいまいな正規表現を指定すると、必要となる時間とメモリ領域は指数的に増大し、 grep がメモリ不足を起こす可能性があ ります。

後方参照は非常に動作が遅く、必要となる時間は指数的に増大します。

【 grep 】 文字列を検索する
UNIXの部屋 コマンド検索: grep
grep について分かりやすく書かれています。感謝。

man オンラインマニュアルでコマンドの使い方を理解する

読了までの目安時間:約 20分

近年、Linux もGUI環境が充実して Microsoft Windows のように簡単に操作出きるようになっていますが、コマンドラインの使い方を覚える事が Linux をより効率よく使う近道です。

linux にはコマンドラインの使い方のマニュアルを参照する man コマンドが用意されています。man コマンドの使い方を知りたければ下記のように 'man 調べたいコマンド' でオンラインマニュアルを参照する事ができます。

$ man man

manページを日本語化する Ubuntu

$ sudo aptitude install manpages-ja

man コマンドで表示されるテキストを文字化けさせずにテキストファイルに

$ man hoge | col -b > hoge.txt

col コマンド manより

名前
col - 入力中にある逆改行コードを処理するフィルタ

書式
col [-bfpx] [-l num]

説明
col は、逆方向への改行および半改行を取り除き、通常の改行方向だけで出力可能なものに変換する。同時に、可能な限り空白文字部分をタブに置き換える処理をする。これは、 nroff(1) や tbl(1) の出力を処理するのに役立つ。

col は、データを標準入力から読み込み、標準出力に書き出す。

オプションとしては以下のものがある:

-b バックスペースを出力しないようにする。 (訳註: 同じ箇所に複数の文字が書かれる場合は) 行中のその箇所に最後に書かれた文字だけを表示する。

-f 半改行を含めることを許可する (‘‘fine’’ モード)。通常、行と行の境界に表示されることになる文字は、次の行に表示される。

-p 不明なコントロール文字を変更せずに表示する。通常 col は、以下に挙げるような認識・解釈できるコントロール文字でなければ、その文字を入力から取り除く。

-x タブのかわりに複数個の空白文字を出力する。

-lnum メモリ上に、少なくとも num 行分をバッファする。デフォルトでは 128行分がバッファされる。

col が認識する復帰動作のためのコントロール文字と、その文字の 10 進数での値を以下の表に示す:

ESC-7 逆方向に改行する (エスケープの後に 7)
ESC-8 逆方向に半改行する (エスケープの後に 8)
ESC-9 通常方向に半改行する (エスケープの後に 9)
backspace 逆方向に 1 カラム分戻す (8)。最初のカラムでは無視される
carriage return 行頭に復帰する (13)
newline 通常方向に改行する (10)。行頭への復帰も行う
shift in 通常の文字セットを選択する (15)
shift out 特別な文字セットを選択する (14)
space 通常方向に 1 カラム分に移動する (32)
tab 次のタブ位置へ移動する (9)
vertical tab 逆方向に改行する (11)

col が認識できないコントロール文字およびエスケープシーケンスは削除される。

col は文字列を読み込みながら追って行き、出力する際に正しいかを確認する。

すでに出力してしまった行を超えて戻るような逆改行の処理が入った場合、 colは警告メッセージを表示する。

関連項目
expand(1), nroff(1), tbl(1)

準拠
col ユーティリティは Single UNIX Specification, Version 2 に従う。 -l オ
プションは、この規格を拡張したものである。

履歴
col コマンドは Version 6 AT&T UNIX から登場した。

man コマンド man より

名前
man - オンラインマニュアルページを整形し表示する。
manpath - ユーザー個々のマニュアルページの検索パスを決める。

書式
man [-adfhktwW] [-m system] [-p string] [-C config_file] [-M path] [-P
pager] [-S section_list] [section] name ...

説明
man はオンライン・マニュアル・ページを整形し表示する。このバージョン の
man コマンドでは環境変数 MANPATH と (MAN)PAGER を設定できる。これにより
、個人的なマニュアルページを設定したり、整形したページを表示するプロ グ
ラ ムを好きに選べる。 section を指定すると、 man はマニュアルのそのセク
ションのみ探す。またコマンドライン・オプションや環境変数で、それぞれ の
セ クションを検索する順序や、ソース・ファイルに対してどんなプリプロセッ
サを用いるかを指定したりすることができる。 name に / が含まれているとき
man コマンドはまずファイル名として扱う。したがって man ./foo.5 または
man /cd/foo/bar.1.gz とさえできる。

オプション
-C config_file
使用する man.conf ファイルを指定する。デフォルトは /etc/man.con-
fig (参照: man.conf(5))

-M path
マニュアル・ページを探すディレクトリのリストを指定する。このオプ
ションを指定しない場合、環境変数 MANPATH を使う。この環境変数 も
指 定しないと、 /etc/man.config に指定されたデフォルトのリストを
使う。 MANPATH 中の空の文字列はデフォルトのリストを意味する。

-P pager
使用するページャーを指定 す る 。 デ フ ォ ル ト で は man は
/usr/bin/less-is を使う。このオプションは環境変数 MANPAGER より
優先する。この環境変数は PAGER よりも優先する。デフォル ト で は
man は /usr/bin/less-is を使用する。

-S section_list
コロンで分けられたリストで、マニュアルを探すセクションを指定する
。このオプションは環境変数 MANSECT より優先される。

-a デフォルトでは、man は見つかった最初のマニュアルページを表示した
あと終了する。このオプションを使うと、man は最初にみつかったもの
だけでなく name にマッチしたすべてのページを表示する。

-c 最新の cat 形式のページがあってもマニュアルページのソースを整 形
し なおす。このオプションは cat ページが端末と違った幅で整形され
ているときや壊れている場合などに有用である。

-d マニュアル・ページを表示せず、大量のデバッグ情報を出力する。

-D デバッグ情報とマニュアル・ページの両方を表示する。

-f whatis コマンドと同じ。

-h 1行ヘルプ・メッセージを表示して終了する。

-k apropos コマンドと同じ。 -K 「全ての」マニュアル・ページより指定
し た文字列を探す。警告: これは非常に遅いので セクションを指定し
た方が良い。(私のマシンでは、だいたいの目安として、500 ページ を
検索するのに 1分間かかる。)

-m system
別のシステムのマニュアル・ページを検索するように指定する。

-p string
nroff や troff のまえに実行するプリプロセッサの順番を指定する。
インストールの状態によってはフルセットのプリプロセッサが用意され
てないかもしない。いくつかのプリプロセッサとそれを指し示す文字は
次のとおり: eqn (e), grap (g), pic (p), tbl (t), vgrind (v),
refer (r)。このオプションは環境変数 MANROFFSEQ より優先される。

-t マニュアル・ページの整形に /usr/bin/groff -Tps -mandoc を使い、
stdout に出力する。 /usr/bin/groff -Tps -mandoc からの出力は印刷
するまえになんらかのフィルターなどを通す必要があるかもしれない。

-w or --path
マニュア・ルページを表示せず、すでにフォーマットまたは表示に使用
す るソース・ファイルの位置を表示する。引数を与えないと man がマ
ニュア・ルページを検索するディレクトリのリストを(標準出力に)表示
する。 manpath が man にリンクされているときは "manpath" は "man
--path" と同じになる。

-W -w に似ているが、ファイル名を追加情報なしに1行1つずつ表示す る
。これはシェル上で ,B "man -aW man | xargs ls -l" などと使うのに
便利である。

CAT ページ
man コマンドはすでに整形されたマニュアルページを、次にそのページが必 要
に な っ た と き の 整形時間の節約のために、保存しようとする。伝統的に
、DIR/manX の整形済みマニュアルは DIR/catX にセーブされるが、man ディレ
ク トリから cat ディレクトリへの他のマッピング方法を /etc/man.config に
指定できる。 cat ディレクトリが用意されてなかった場合、cat ページはセー
ブされない。

man コマンドをユーザー man に suid することができる。そのすると
cat ディレクトリのオーナーが man かつモードが 0755 (ユーザー man だけ
が書き込み可)で、cat ファイルのオーナーが man かつモードが 0644 また は
0444 ( ユーザー man だけが書き込み可、またはユーザーすべてが書き込み不
可) のとき、普通のユーザーは cat ページを変更したり他のファイル を cat
ディレクトリ置いたりすることができなくなる。 man コマンドが suid されて
いなければ、すべてのユーザーが cat ページを cat ディレクトリに置ける よ
うに、 cat ディレクトリのモードを 0777 にする必要がある。

cat ページがあったとしても、オプション -c をつけると強制的にマニュアル
ページを再整形する。

環境変数
MANPATH
MANPATH を設定すると、マニュアル・ページを探すときそのパスを使う

MANROFFSEQ
MANROFFSEQ を設定すると、nroff や troff の前に実行するプリプロセ
ッサを決定するのにその値を使う。デフォルトではマニュアルページは
nroff のまえにテーブル用のプリプロセッサに通される。

MANSECT
MANSECT を設定すると、その値を元にどのマニュアル・セクションを探
すかを決める。

MANWIDTH
MANWIDTH を設定すると、その値を表示するマニュアル・ページの幅 と
して使用する。指定しなかった場合には画面の幅一杯まで使用する。

MANPAGER
MANPAGER を設定すると、マニュアル・ページを表示するプログラムと
して使用する。指定しなかった場合には、 PAGER が使用される。ど ち
らも設定されていない場合には /usr/bin/less -is が使われる。

LANG LANG を設定すると、man コマンドその名前のサブディレクトリから最
初にマニュアル・ぺージを探す。それゆえ、’LANG=dk man 1 foo’ とコ
マ ンドラインから打つと、man コマンドはまず .../dk/man1/foo.1 を
探し、見つからなければ .../man1/foo.1 を探す。この ... はサー チ
パスのディレクトリである。

NLSPATH, LC_MESSAGES, LANG
環境変数 NLSPATH と LC_MESSAGES (また後者がないときは LANG )はメ
ッセージ・カタログの位置を指定する。 (英語のメッセージはコンパイ
ル時に組み込まれているので、英語の場合は
カタログは必要ない) man に呼び出される col(1) のような moプログ
ラムは 、たとえば LC_CTYPE 使うことに注意すること。

PATH PATH はマニュアル・ページのデフォルトの検索パスの構築に使われ る

SYSTEM SYSTEM はデフォルトのシステム名を得るのに使われる。 ( -m オプシ
ョンとともに使う)

関連項目
apropos(1), whatis(1), less(1), groff(1).

バグ
-t オプションは troff ライクなプログラムがインストールされている場合 の
み有効である。
も しハイフンのかわりに、点滅する \255 や が表示された場合には環境
変数に ’LESSCHARSET=latin1’ を設定すると良い。

(訳注: 日本語を使用する場合にはを使用するために、この方法では対応できな
い。groff のオプションで -Tnippon また -Tascii を使用すること。)

manコマンドの出力結果を日本語化する

普段使用しているUbuntu 12.04 LTS だと日本語表示されていなかったので、日本語表示するように設定します。.bashrcに次の行を追加した後、source .bashrcで環境変数を設定します。

MANPATH=/usr/bin/man:/usr/bin/X11/man/ja:/usr/local/man:/usr/share/man/ja
export MANPATH 
念のために
$ sudo apt-get install manpages-jaも実効。

参考URL

Linux入門:マニュアルページ(manコマンド)活用法のページがとても参考になりました。感謝です。
manページをテキストファイルにすると文字化けしてしまう

du コマンドでどのディレクトリが一番 disk を使用しているかを調べる

読了までの目安時間:約 10分

サーバのメンテナンスをしていると不要なファイルを削除したいなど、サブディレクトリの分はディレクトリ名を表示しないで各ディレクトリの使用量を調べたい時があります。

● どのディレクトリが disk を使用しているかを調べる


$ du -S | sort -rn

ls コマンドの結果をファイルサイズ順にソートする時は下記のように -S オプションをつけるだけでよい。


$ ls -S

● ファイルシステムのディスク容量の使用状況を表示する。
df コマンド (man)より

名前
df - ファイルシステムのディスク容量の使用状況を表示する

書式
df [options] [file...]

POSIX オプション: [-kP]

GNU オ プ シ ョ ン (簡略形式): [-ahiklmvHPT] [-t fstype] [-x fstype]
[--block-size=SIZE] [--no-sync] [--sync] [--help] [--version] [--]

説明
df は各ファイルシステムにおいて、すでに使用中のディスクの量と使用可能な
ディスクの量を表示する。

引 き数がない場合、 df は現在マウントされている (全てのタイプの) 全ファ
イルシステムについて使用量と使用可能量を表示する。引き数が指定されて い
る場合、 df は引き数 file が含まれるファイルシステムについて表示する。

POSIX 詳細
出力はデフォルトでは 512 バイト単位であるが、 -k オプションが指定された
場合は 1024 バイト単位になる。 -P オプションが指定されない場合、出力 フ
ォーマットは未定義である。 file が通常のファイル、ディレクトリ、FIFO の
いずれでもない場合の結果は規定されていない。

GNU 詳細
引き数 file がディスクデバイスファイルで、かつそこにマウント済みのフ ァ
イ ルシステムが含まれている場合、 df はそのデバイスノードの属しているフ
ァイルシステムではなく、デバイスファイルに対応している方のファイルシ ス
テムの使用可能量を表示する。

POSIX オプション
-k デフォルトの 512 バイト単位の代わりに 1024 バイト単位を用いる。

-P ‘Filesystem N-blocks Used Available Capacity Mounted on’ という
ヘッダをつけて 6 列で出力する (通常は N=512、-k オプションが指定
されたときは N=1024)。

GNU オプション
-a, --all
サ イズが 0 ブロックのファイルシステムやタイプが ‘ignore’ または
‘auto’ のファイルシステムもリスト表示に含める (デフォルトでは 省
かれる)。

-h, --human-readable
そ れぞれのサイズに、例えばメガバイトなら M のようなサイズ文字を
付加する。 10 の累乗ではなく 2 の累乗を用 い る の で 、 M は
1,048,576 バイトを表す。

-i, --inodes
ブ ロック単位での使用容量のかわりに inode の使用状況をリスト表示
する。

-k, --kilobytes
デフォルトのブロックサイズを無視し、 1024 バイトを 1 ブロック と
してサイズを表示する。

-l, --local
ローカルファイルシステムのみをリスト表示する。

-m, --megabytes
メガバイト (1,048,576 バイト) ブロック単位でサイズを表示する。

-t fstype, --type=fstype
タイプが fstype のファイルシステムのみをリスト表示する。 -t オプ
ションを複数指定すれば、複数のタイプを表示するようにできる。デフ
ォルトで省略されるものについては --all を参照すること。

-v このオプションは無視される (System V 版の df との互換性のために
ある)。

-x fstype, --exclude-type=fstype
タイプが fstype のファイルシステムを除外する。 -x オプションを複
数指定すれば、複数のファイルシステムタイプを表示から削除できる。
デフォルトでは、どのファイルシステムタイプも除外されない。デフォ
ルトで省略されるものについては --all を参照すること。

-H, --si
そ れぞれのサイズについて、例えばメガバイトなら M といったサイズ
文字を付加する。 (SIとは国際単位系のことで、これらのサイズ文字を
定 義 し て い る) 2 の累乗ではなく 10 の累乗を用いるので、 M は
1,000,000 バイトを表す。

-P, --portability
POSIX 出力形式を用いる。これはデフォルトの表示形式に似ているが、
以下の a), b), c) の点が異なる。 a) ファイルシステムについての情
報が常に 1 行で表示される。このオプションを付けるとマウントデ バ
イ ス名だけが単独で 1 行に表示されることはない。すなわちマウント
デバイス名が 20 文字以上の場合 (例えばネットワークマウントな ど)
コラムの整列が崩れることになる。 b) 丸めが繰上げになる。 c) コラ
ムのヘッダが POSIX に準拠している。

-T, --print-type
各ファイルシステムのタイプを表示する。 mount(8) を参照。

--block-size=SIZE
ブロックサイズを SIZE に設定し、環境変数の値を無視する。

--no-sync
使用量データを得る前に sync(2) を呼ばない。このオプション は df
の 動 作がかなり速くなるかもしれないが、システムによっては (特に
SunOS では) 結果が少し古くなるかもしれない。このオプションはデフ
ォルトである。

--sync 使用量データを得る前に sync(2) を呼ぶ。システムによっては (特に
SunOS では) より新しい結果を得ることができる。しかし一般的に、こ
のオプションは df の動作をずっと遅くする (特にファイルシステムが
多い場合や、更新が非常に頻繁なファイルシステムがある場合)。

● man コマンドで表示されるヘルプをファイルに保存する。


$ man hoge | col -bfx > hoge.txt

スクリプト言語 awk を使って効率的にテキストデータを処理しよう

読了までの目安時間:約 4分

AWK は、簡単なスクリプトを記述することで、効率的にテキストファイルを処理することを目的として開発されたスクリプト言語でアルフレッド・エイホ(Alfred Aho)、ペーター・ワインバーガ(Peter Weinberger)、ブライアン・カーニハン(Brian Kernighan)の3人によって開発されました。3人の頭文字を取って awk (オーク) と命名されました。

プログラミング言語awk の序章に awk について端的に述べられています。

 コンピュータの利用者は、多くの時間をデータの書式を変更したり、その整合性を検査したり、ある性質を持った項目を探したり、数を足し込んだり、あるいはレポートを出力したりするような、単純で機械的なデータ操作に費やしている。これらの仕事の多くは機械化されるべきであるが、かといってそれらを処理する特別なプログラムを毎回 C や Pascal のような一般的な言語でかくのはばかげている。
 Awk はこういった仕事を、たいていは1行か2行で済むようなとても短いプログラムで始末できるように設計されたプログラミング言語である。Awk プログラムは、入力データのなかから見つけるべきパターンと、見つかったときに実行するアクションの列とからなっている。Awkは、それらのパターンのどれかと適合する行をファイルの集合のなかから探しだし、いったんそのような行が見つかれば対応するアクションを実効する。パターンは、正規表現と、文字列、数、欄、変数、それに配列要素の比較演算との組み合わせにより行を選択できる。アクションは、そうやって選択された行に対して任意の処理を実効できる。このアクションを記述する言語は C に似ているが、宣言を持たなかったり、文字列や数も組み込みのデータ型として備えている点がちょっと違う。
 Awk は入力ファイルを操作して、それぞれの入力行を自動的に欄に分解する。入力、欄への分解、記憶領域の管理、初期化など、とても多くのことが自動的に行われるので、awk プログラムは通常、より伝統的な言語で書くよりもずっと小さくなる。それゆえ awk のごく普通の使い方は、上で述べたようなデータ操作に類するものである。1行か2行の長さのプログラムは、キーボードから直接入力して一度だけ走らせ、そして捨てられる。実際 awk は、多数の特殊な道具やプログラムにとって代わる汎用のプログラム可能な道具である。
 Awk は、簡潔な氷原と便利な演算によって、より大きなプログラムの試作品を作る際の重要な道具にもなる。数行のものから始めて、お望みの仕事をこなせるようになるまでプログラムをすこしづつ仕上げていき、他の方法も簡単に試してみたりして、その設計が妥当かどうかを検査できる。そうしたプログラムは短いので、とっつきやすく、実権の結果他によい方法が見つかった場合でも簡単にやり直せる。さらに、いったん設計が正しいことが判明すれば、awk プログラムを他の言語に翻訳するのは実にたやすい。

awk 言語の使い方を覚えて、効率よく仕事をこなせるようになりましょう。

ubuntu に gawk をインストールする


sudo apt-get install gawk

Gnu awk 3.1.5以降の仕様は、length()がバイト単位ではなく、キャラクタ単位の文字数を返すようになっているので注意。

● awk で文字数をカウントする


gawk '{n += length($0)} END {print n}' foo.txt

テキストエディタ vi の使い方を覚えよう

読了までの目安時間:約 2分

vi は、ビル・ジョイによって開発されたテキストエディターです。最近のlinuxディストリビューションでは vi コマンドで上位互換の vim や nvi が起動されているようです。

vi は
●マウスを使わない
●カーソルキーを使わない
●命令を覚える必要がある
 他に、vi はコンパクトで負荷が小さいため、作業中にテキストファイルの一部を書き換えたり、通信速度の遅いネットワークの先にあるマシンで編集したりといった作業に向いている。 また、コンパクトで負荷が小さいという利点から、最低限の UNIX環境 でも含まれている事が多く、スマートフォン、無線LANルータ、液晶テレビなど、コアシステムとしてLinuxを採用しているハードウェアの多くにviもしくは vi 互換のエディタが搭載されている。
という特徴があります。
 GUIでの操作に慣れている人には、少し敷居が高いかもしれません。しかし、マウスカーソルやカーソルキーを利用できないハードウェア上でも利用することが出来、命令を覚えると素早いカーソル移動や編集操作を効率的に行えるので操作を覚える事をお勧めします。

Vimの使い方(入門)
vi操作手引き書
のページで、分かりやすい解説をされています。 感謝です。

● vim で文字数をカウントする方法


:%s/./&/g

無料で使えるPHPグラフ生成用ライブラリ JpGraph

読了までの目安時間:約 2分

JpGraph とは

JpGraph3.xはPHP言語(PHP5.1から5.3)に対応した高機能なグラフ生成用ライブラリです。データベースと連動させ動的にグラフを描画することができることはもちろん、20種類以上のプロット形式をサポートしています。

非営利目的で使用する場合、QPL (Qt Free License) 1.0ライセンスの下で、JpGraphコミュニティ版として無料で使う事ができます。

JpGraphの特徴は下記の通りです。

  • 豊富なプロット形式であらゆるグラフニーズに対応(合計23種類)
  • データベースに連動した動的なグラフ生成が可能-日々変化する数値に対応
  • 少ないコード量で作成(オブジェクト指向機能に沿ったタイプ)
  • QRコード、スパム対策にも対応
  • PHPを使用したWebアプリケーションの世界的に幅広く使用されているグラフライブラリ

JpGraph のサンプル

http://www.gadgety.net/shin/tips/unix/php5.html#JPGRAPH のページにインストールの方法および使い方が書かれています。感謝です。

gnuplot でらくらくお絵描き

読了までの目安時間:約 2分

グラフ作成を便利にできるアプリケーションにフリーウェアの gnuplot (ニュープロット) があります。
1986年に最初のバージョンが開発され、現在は多くの OS (Linux、UNIX、Windows、Mac OS Xなど) に対応したバージョンが開発されています。

OSが Ubuntu 12.04 の場合、下記のようにすれば簡単に gnuplot をインストールする事が出来ます。


$ sudo apt-get install gnuplot-*

http://t16web.lanl.gov/Kawano/gnuplot/index.html および gnuplot のページ (Takeno Lab) で gnuplot の詳しい解説がされています。感謝です。

gnuplot を起動してコマンドラインで指示すれば簡単にグラフを描く事ができます。

plot [0:10] 1-exp(-x)

これから、gnuplot と PHP を使ってリアルタイムにグラフを表示する方法などを解説していきます。

温故知新 UNIXプログラミング環境 その1

読了までの目安時間:約 3分

簡単にLinuxをインストールして、すぐれたプログラミング環境を手に入れる事がとても簡単に出きるようになった今こそ読んでおきたい Unix の思想の原点ともいえる一冊があります。

『UNIXプログラミング環境』(アスキー出版局)

単行本: 514ページ
出版社: アスキー (1985/09)
ISBN-10: 4871483517
ISBN-13: 978-4871483513
発売日: 1985/09

この本の「はじめに」にも書いてありますが、UNIX のプログラミング哲学を知りたい人にお進めしたい本です。

 本書の目的は、この UNIX のプログラミング哲学を知ってもらうことにある。個々のツール (プログラム) についての説明に紙面の多くを割いているが、そん哲学はプログラムの結びつき方をきそにしているので、至るところにプログラムの結合とか、プログラムを使ってプログラムを組み立てるといったテーマが登場する。 UNIX システムとそのコンポーネントをうまく使うためには、プログラムの使い方だけではなくそれをどうやって環境に合わせるかを理解しなくてはならない。

 コマンド・インタープリタ、すなわちシェルはプログラムの実効だけでなく、その作成のためにも基本的なツールといえる。第3章では、読者地震の目的に合わせたシェルの使い方に焦点をあてる。内容は、新しいコマンドの作成、コマンドの引数、シェル変数、初歩的な制御フロー、入出力の切替えである。
 第4章ではフィルタを扱う。フィルタはデータがシステムを流れていくときに、幾つかの単純な変換を行う室グラムである。最初の節ではパターン検索コマンド grep とその関連コマンドを取り扱う。2節では sort などの一般的なフィルタについて説明する。さらにこの章の残りの部分は、sed や awk と呼ばれる汎用データ変換プログラムの解説にあてた。 このうち sed はストリーム・エディタの一種で、データの流れにそって編集して書き換えるプログラムである。また awk は、単純な情報検索や報告書作成のためのプログラミング言語となっている。時々シェルとやりとりしなが、これらのプログラムを使うだけで、通常のプログラム作成をしなくてすむことが多い。
 第5章では、シェルを使ってプログラムを下記、それを他のU亜にも使えるようにする方法について述べる。このトピックには、もっと高度な制御フローや変数、あるいはトラップや割込み (インタラプト) 操作が含まれる。この章の例題には、シェルと同時に sed や awk をかなり使用する。

今後、この UNIXプログラミング環境 に書いてある面白い例題やツールの使い方を紹介していきたいと思っています。

1 25 26 27
無料メルマガ登録
最近の投稿