01 / 08
名前と中身のあいだにあるもの
ここまでで「名前を見る(ls)」と「中身を見る(cat)」ができるようになったね。
でもファイルには、その両方に入らない情報があるよ。いつ作られたか・誰のものか・何バイトか・そもそもファイルなのか入れ物なのか。
こういう「ファイルについての情報」を見るのが stat だよ。
中身を見る
INPUT · スライド
01 / 08
ここまでで「名前を見る(ls)」と「中身を見る(cat)」ができるようになったね。
でもファイルには、その両方に入らない情報があるよ。いつ作られたか・誰のものか・何バイトか・そもそもファイルなのか入れ物なのか。
こういう「ファイルについての情報」を見るのが stat だよ。
02 / 08
実は第1章で少し見ていたんだ。ls -l の1行に、いろいろ詰まっていたよね。
左端の - が「ふつうのファイル」の印(入れ物なら d)。そのあとが権限、1 がリンク数、manabiya が持ち主とグループ、7 が大きさ、そのあとが更新した日時だよ。
stat はこれを1行に詰めずに、ぜんぶ広げて見せてくれる道具だよ。
~ $ ls -l neko.txt-rw-r--r-- 1 manabiya manabiya 7 Aug 21 06:06 neko.txt03 / 08
stat にファイル名を渡すと、こんなふうに出るよ。
Size が大きさ、regular file が種類。Inode はファイルに付いた番号で、名前とは別にファイルを識別するものだよ(「ファイルシステム」の章で使うね)。
Access / Modify / Change の3つの時刻があるのが面白いところ。読んだ時刻・中身を変えた時刻・情報を変えた時刻を、それぞれ別に覚えているんだ。
~ $ stat neko.txt File: neko.txt Size: 7 Blocks: 1 IO Block: 8192 regular fileDevice: 13h/19d Inode: 4 Links: 1Access: (0644/-rw-r--r--) Uid: ( 100/manabiya) Gid: ( 101/manabiya)04 / 08
全部要らないときは -c で欲しいものだけ出せるよ。% から始まる短い記号で指定するんだ。
%s … 大きさ(バイト)%F … 種類(regular file / directory)%a … 権限を8進数で(644)%h … リンク数%n … 名前数だけが出るので、そのまま計算や次のコマンドに渡せるのがいいところだよ。
~ $ stat -c %s neko.txt705 / 08
cat はファイルの中身を人が読める形にして出してくれる。でも「本当は何が入っているのか」を見たいときもあるよ。
od -c を使うと、1バイトずつ並べて見せてくれる。od は octal dump(8進数で書き出す)の略だよ。
見てみると、ねこ が 343 201 255 343 201 223 の6バイトになっているのが分かる。日本語の1文字は3バイト、というのを実際に確かめられるんだ。
~ $ od -c neko.txt0000000 343 201 255 343 201 223 \n000000706 / 08
同じことを16進数でやるのが hexdump -C と xxd だよ。
右端に「読める文字なら文字、読めなければ .」が並ぶので、od より読みやすいことが多い。
改行が 0a として見えるのがポイントだよ。ふだん目に見えない文字も、こうすれば確かめられるんだ。
~ $ hexdump -C eigo.txt00000000 61 62 63 20 64 65 66 20 67 68 69 0a 6a 6b 6c 0a |abc def ghi.jkl.|07 / 08
ふつうの Linux には file というコマンドがあって、中身を見て種類を当てることができるよ。file shashin.jpg と打つと JPEG image data と教えてくれる。
でもこの環境には入っていない。中身から種類を当てるには 10MB ほどの判定表が必要で、ブラウザに送る大きさに収まらないんだ。
だからここでは stat(素性)と od(バイト)で確かめる。卒業して自分のパソコンで打つときは、file も使えることを覚えておいてね。
08 / 08
時刻と Inode の番号は打つたびに変わるので、答え合わせには使わないよ。
見るのは決まっている値——大きさ・種類・権限・リンク数だけ。安心して打ってみてね。