Linux講座にようこそ。このページは「Linuxの使い方 - 第4章 ファイル操作のコマンド2」です。
ここでは、次のコマンドの説明を行います。
Fedoraの場合、標準ではnkfコマンドはインストールされないようですので、個別にインストールする必要があります。
fileコマンドのオプションに付いては省略します。
lnコマンドはファイルに複数のパス名を付加しますが、これは別名をつけると思っていただければよいでしょう。別名の付け方として、ハードリンクとシンボリックリンクと呼ぶ2つの方法があります。ハードリンクはファイルに対して別名を付けるだけで、ディレクトリに別名を付けることは出来ませんし、別のファイルシステムのファイルや、ディレクトリに別名を付けることも出来ません。これに対して、シンボリックリンクはディレクトリに別名を付けることも出来ますし、別のファイルシステムのファイルや、ディレクトリに別名を付けることも出来ます。
オプション | 意味 |
---|---|
-s, --symbolic | シンボリックリンク(ソフトリンク)と呼ぶリンクを作成します。指定しない場合はハードリンクを作成します。 |
wcコマンドのオプションを省略した場合は、バイト数・単語数・行数を表示します。
オプション | 意味 |
---|---|
-c, --bytes | バイト数を表示します。 |
-w, --words | 単語数(ワード数)を表示します。 |
-l, --lines | 行数を表示します。 |
-m, --chars | 文字数を表示します。日本語の漢字や平仮名はもちろん、半角スペースや改行も1文字と数えます。 |
オプション | 意味 |
---|---|
-j | JISコードに変換します。 |
-e | 日本語EUCコードに変換します。 |
-s | シフトJISコードに変換します。 |
-w | UTF-8コードに変換します。 |
-c | 改行コードとして、NL(New Line)の後ろにCR(Carriage Return)を付加します。これはMS-DOSやWindowsのテキストファイル形式です。 |
-d | NLの後ろのCRを削除します。 |
odコマンドは「-t 表示形式」または「--format=表示形式」オプションで表示形式を指定できますが、同じことが表4-26のオプションでもできます。こちらは直接表示種別を指定していることになります。なお、オプションを指定しない場合は八進数として表示します。
オプション | 意味 |
---|---|
-c | ASCIIコードで表示します。「-t c」及び「--format=c」でも同じです。 |
-x | 十六進数として表示します。当オプションを省略すると八進数として表示します。「-t x」及び「--format=x」でも同じです。 |
cmpコマンドはバイト単位に比較しますので、バイナリファイルの比較もできます。また、比較するファイルとして-(負記号)を指定すると、標準入力からの入力となります。比較結果は終了ステータスで分かります。0の場合は同じ、1の場合は異なる、2の場合はエラー発生を表します。
オプション | 意味 |
---|---|
-l, --verbose | 異なる全てのバイトの情報(オフセット行とバイト数)を表示します。 |
-s, --quiet, --silent | なにも表示しません。(シェルスクリプトで使うときに便利かもしれません) |
-i バイト1:バイト2, --ignore-initial=バイト1:バイト2 | 比較するファイルのバイト1あるいはバイト2までをスキップ(比較しない)します。バイト2は2つ目のファイルに対する指定です。 |
-n, --bytes=バイト | ファイルの先頭から指定したバイト数分だけ比較します。 |
カレントディレクトリの下のファイルの種類を調べます。
$ file * BKUP: directory a.out: ELF 32-bit LSB executable, Intel 80386, version 1, dynamically linked (uses shared libs), not stripped file1: EUC text prg1.c: C program text scr1.sh: Bourne-Again shell script text $
./a.outに別名(ハードリンク)../../mybin/hello.prgを付けます。
$ ls -l a.out -rwxr-xr-x 1 merry merry 4667 2010-11-17 17:11 a.out $ $ ln a.out ../../mybin/hello.prg $ $ ls -l a.out ../../mybin/hello.prg -rwxr-xr-x 2 merry merry 4667 2010-11-17 17:11 ../../mybin/hello.prg -rwxr-xr-x 2 merry merry 4667 2010-11-17 17:11 a.out ↑ リンク数と呼ばれているもので、 この場合、1つのファイル実体が2つの名前(パス)を持っていることを表わします $ $ rm a.out ← a.outを削除します $ ls -l ../../mybin/hello.prg -rwxr-xr-x 1 merry merry 4667 2010-11-17 17:11 ../../mybin/hello.prg ↑ a.outを削除したため、リンク数が1になりました $
TMP/BACKUPディレクトリに別名(シンボリックリンク)MYBKUPを付けます。
$ ln -s ./TMP/BACKUP MYBKUP $ ls -ld MYBKUP lrwxr-xr-x 1 merry users 13 10月 5 17:21 MYBKUP -> ./TMP/BACKUP/ ↑「l」はシンボリックリンクであることを表わし、 MYBKUP -> ./TMP/BACKUP/は./TMP/BACKUP/へのシンボリックリンクであることを表わします $ $ ls MYBKUP merry.tar.bz2 merry_back.tar.bz2 merryall.tar.bz2 $
カレントディレクトリの下のmemo.txtファイルのバイト数、単語数、行数、文字数を表示します。
$ cat memo.txt Hello World. 今日は世界 (^ ^); $ wc memo.txt 5 5 38 memo.txt ← 行数、単語数、バイト数の順で表示します $ $ wc -c memo.txt 38 memo.txt ← バイト数のみ表示します $ $ wc -w memo.txt 5 memo.txt ← 単語数のみ表示します $ $ wc -l memo.txt 5 memo.txt ← 行数のみ表示します $ $ wc -m memo.txt 28 memo.txt ← 文字数のみ表示します $
Windowsで作成したファイル(シフトJIS)をLinuxで取り扱えるファイル(UTF-8)に変換します。変換結果は標準出力に出力されますので、ファイルに保存したい場合はリダイレクトします。
$ nkf -wd winfile.txt > linuxfile.txt $
カレントディレクトリの下のa.outファイルの内容を十六進数とASCIIコードで表示します。
$ od -x a.out ← -xオプションを指定して十六進数で表示します 0000000 457f 464c 0102 0001 0000 0000 0000 0000 0000020 0002 003e 0001 0000 0440 0040 0000 0000 0000040 0040 0000 0000 0000 1168 0000 0000 0000 0000060 0000 0000 0040 0038 0009 0040 001e 001b 0000100 0006 0000 0005 0000 0040 0000 0000 0000 (以下省略) $ $ od -xc a.out | head ← -xcオプションを指定して十六進数とASCIIコードで表示します(headコマンで先頭から10行だけを表示) 0000000 457f 464c 0102 0001 0000 0000 0000 0000 177 E L F 002 001 001 \0 \0 \0 \0 \0 \0 \0 \0 \0 0000020 0002 003e 0001 0000 0440 0040 0000 0000 002 \0 > \0 001 \0 \0 \0 @ 004 @ \0 \0 \0 \0 \0 0000040 0040 0000 0000 0000 1168 0000 0000 0000 @ \0 \0 \0 \0 \0 \0 \0 h 021 \0 \0 \0 \0 \0 \0 0000060 0000 0000 0040 0038 0009 0040 001e 001b \0 \0 \0 \0 @ \0 8 \0 \t \0 @ \0 036 \0 033 \0 0000100 0006 0000 0005 0000 0040 0000 0000 0000 006 \0 \0 \0 005 \0 \0 \0 @ \0 \0 \0 \0 \0 \0 \0 $
カレントディレクトリの下の2つのファイルの内容を比較します。
$ cat file_1.txt Hello World. ← 以下3行がfile_1.txtファイルの内容です 2015年 10月 25日 日曜日 09:26:45 JST $ $ cat file_2.txt Hello world. ← 以下3行がfile_2.txtファイルの内容です 2015年 10月 25日 日曜日 09:27:07 JST $ $ cmp file_1.txt file_2.txt ← オプションの指定をしていません file_1.txt file_2.txt 異なります: バイト 7、行 1 $ $ cmp -l file_1.txt file_2.txt ← -lオプションを指定して異なる部分の位置と内容を表示します 7 127 167 49 66 67 51 64 60 52 65 67 $