2001/6/11
この講習会の最初に説明したように、結局のところ 計算機の最終的な利用目的はデータの処理である。UNIX では、 ほとんどのデータはファイルか、パイプを通してやりとりされる。
しかしデータ(情報)というものは、しょせんただのビット列である。 計算機の世界では、データの用途は「データ型 (data type)」と呼ばれる。 データの型には多種多用なものが存在するが、UNIX は OS レベルでは ファイルやパイプ (ストリームで流れるデータ) の型というものを 意識していない (Windows でもこの状況は同じ)。ファイルやパイプを 流れるデータは、ただのビット列として扱われる。これを どのように扱うかはプログラム次第である。ビット列を絵としてみれば それは絵だし、テキストとしてみればテキストになる (実際には、ほどんどの形式のファイルには先頭にそのファイルの型を 示すマーク (マジックナンバー, magic number と呼ばれる) が入っていることが 多い)。ファイル中の最小単位は 1バイト (=1オクテット = 8ビット) である。
あるファイルをビット列として見たいときは、od を使う。 -tx1 オプションをつけると、od は入力ファイルの 各バイトを16進出力する。
% od -Ax -tx1 ~/.cshrc 0000000 23 20 2e 63 73 68 72 63 20 66 6f 72 20 65 75 73 0000010 6b 65 0a 0a 73 65 74 20 70 61 74 68 20 3d 20 28 0000020 20 7e 2f 62 69 6e 20 2f 75 73 72 2f 6c 6f 63 61 ...
これは新山の ~/.cshrc の先頭部分である。 16進出力のかわりに文字で見たい場合は -ta を使う。 (問. ただし、漢字は見れない。なぜか?)
% od -Ad -ta ~/.cshrc 0000000 # sp . c s h r c sp f o r sp e u s 0000016 k e nl nl s e t sp p a t h sp = sp ( 0000032 sp ~ / b i n sp / u s r / l o c a ...
UNIX はテキストファイルを処理するために発展してきたので、 テキストを見たり処理するためのプログラムが豊富にある。
プログラムファイルは、通常コンパイラやリンカで生成する。 エディタでこれらのバイナリを直接編集することはまずない。 ただし、プログラムファイル中のシンボルや、プログラム中に 埋め込まれた「文字列定数らしきもの」をとりだすことはできる。
プログラムファイルを less などで見ても、文字列定数以外は ほとんど意味不明である。また、プログラムファイルを cat などで 直接端末に出力すると、kterm などがおかしくなるのが見れるだろう。 このような場合は kterm 上で Control-Button2 を押して、 メニューから「Do Full Reset」を選べばなおる。
ビットマップ画像形式は、画面に表示されるピクセル (pixel, 点) に関する情報を直接含んでいる。いっぽうベクトル画像形式は 画面に表示される図形 (直線や円など) の抽象的な情報が ある言語によって表現されている。ビットマップ画像は 一般にディスプレイ指向であり、引き述ばすとギザギザになる。 いっぽうベクトル画像は印刷指向であり、プリンタの解像度によらず つねにスムースな出力が得られる。
画像ファイルを less などで見ても、ほとんど意味不明である。 通常、多くの画像ファイルは専用のアルゴリズム (LZH 法など) によって 圧縮されているからだ (GIF, JPEG, PNG)。しかし、XPM や BMP などの形式は「何か画像っぽい」のがわかることもある。 また PostScript や PDF は一種のプログラミング言語であるので、 わかる人が見れば理解できることもある。
1. 拡張子で見分ける:
UNIX では、ふつうはテキスト | |
.txt | テキスト |
.htm .html | HTML |
.c .h .C .H .cc | C、C++ ソース |
.o .a .so | オブジェクトファイル |
.pl .prl | perl (まれに Prolog のこともある) |
.sh | シェルスクリプト |
.el .elc | Emacs Lisp |
.java .class .jar | Java |
.tex .dvi .aux .log .def .sty | TeX関係 |
.bib .bbl .blg | BibTeX関係 |
.gif .jpg .jpeg .png .xpm .xbm .tif .tiff | ビットマップ画像 |
.obj | Tgif |
.ps .eps | PostScript |
.tar .gz .bz2 .zip .lzh | アーカイブファイル |
2. file コマンドで見分ける:
拡張子でわからないファイルの場合は、ファイルの内容を識別する file コマンドというものが用意されている。でも、ときどき判定に失敗する (日本語のテキストファイルをバイナリと解釈してしまう)。
% file /bin/ls /bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1, dynamically linked (uses shared libs), stripped % file ronbun.dvi ronbun.dvi: TeX DVI file (TeX output 2001.04.24: 1727) % file /etc/motd /etc/motd: ASCII text
3. 目で見分ける:
最終手段としては、 less や od などを使って、どんなデータ形式なのか 見当をつけるというものがある。でも、こんなことは普通やらない。
a2ps はフィルタとして利用可能。
dvips はフィルタとしては使えない。
xv はフィルタとしては使えない。
psmulti はフィルタとしては使える。
画像 → 画像に変換するときは、UNIX では PNM という形式を 介するとフィルタが充実している。
gs は入力ファイル、出力ファイルを 「-」に 指定すればフィルタとして使える。
問題. UNIX の画面イメージを TeX の文書に貼りつけたい。どうすればいいか。
問題. PDF ファイルの文書のある部分のある文字だけを切り出して web に載せたい。どうすればいいか。
1ページ進む | space |
1ページ戻る | b |
1行進む | j または Control-N または Return |
1行戻る | k または Control-P |
ファイルの先頭へ | < |
ファイルの末尾へ | > |
ファイルの指定された行へ | 行番号 + g |
ファイルの指定された位置へ | パーセント + p |
順方向検索 | / + 正規表現 |
次の候補 | n |
逆方向検索 | ?(shift+/) + 正規表現 |
前の候補 | N(shift+n) |
画面が崩れたときに再描画する | Control-L |
エディタで編集する | v (通常 vi を起動) |
終了 | q |
1ページ進む | space |
1ページ戻る | b |
1行進む | j または Control-N |
1行戻る | k または Control-P |
ファイルの先頭へ | Control-A |
ファイルの末尾へ | Control-E |
次のリンク | カーソル下 |
前のリンク | カーソル上 |
リンクをたどる | Return |
リンク先をダウンロード | d |
イメージリンクを表示 | * |
URL を開く | g |
リロード | Control-R |
順方向検索 | / + パターン |
次の候補 | n |
ブックマークに追加 | a |
ブックマークを見る | v |
ソースを見る | \ |
履歴を見る | Control-H |
オプション設定 | o |
読み込み中止 | Control-G |
画面が崩れたときに再描画する | Control-L |
終了 | q |
小言: