ls, mv, rmなどのコマンドはどこから来たのか、それらは何者か、それらはどこへ行くのか、、、
我々はどこから来たのか 我々は何者か 我々はどこへ行くのか
D'où venons-nous ? Que sommes-nous ? Où allons-nous ?
ポール・ゴーギャンの有名な絵画にあるように、我々人間は色々な疑問を抱えている。しかし、今の私にとっての大きな疑問は題名の通り、コマンドは何者なのか。
それだけだ。
さて、茶番はここら辺で終えて本題に入る。
今回はターミナル上でよく使うコマンドls,mv,rmなどがどこにあり、どのようなものなのかについて説明する。
ターミナル上で操作する時に必要なものがコマンドであるが、あまりにも当たり前のように感じているため、どっかから降ってくるもののように感じてしまう筆者であるが、今回はこのコマンドたちについて調べてみた。
結論から言うと、これらのコマンドはそれぞれファイル( ls なら lsファイル, mv なら mvファイル)である。
今回は "ls" についてみてみよう。
まず始めに、lsファイルを探すために次のコマンドをターミナルで実行する。
$ which ls
すると、次のように返ってくる
$ /bin/ls
これが意味することは、ルートディレクトリの下のbinディレクトリの下にlsファイルがあるよ と言うことだ。
それでは、binディレクトリに移動しよう
$ cd /bin
それでは、実際にlsファイルの中身をみていこう!
$ vim ls
$ cat ls
上記の2つの方法でみれる。
お分かり頂けただろうか。
そう!人間には読めないようなデータファイルである。
これが "ls" コマンドの正体である。
これで目標は達成したが、せっかくなのでコンピュータはこのファイルをどう見ているのか、2進数とまではいかないが、16進数表記で見てみよう!
バイナリファイルを表示させるなら、
$ hexdump -C ls 00000000: cffa edfe 0700 0001 0300 0080 0200 0000 ................ 00000010: 1200 0000 1807 0000 8500 2000 0000 0000 .......... ..... 00000020: 1900 0000 4800 0000 5f5f 5041 4745 5a45 ....H...__PAGEZE 00000030: 524f 0000 0000 0000 0000 0000 0000 0000 RO.............. 00000040: 0000 0000 0100 0000 0000 0000 0000 0000 ................ 00000050: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000060: 0000 0000 0000 0000 1900 0000 2802 0000 ............(... 00000070: 5f5f 5445 5854 0000 0000 0000 0000 0000 __TEXT.......... 00000080: 0000 0000 0100 0000 0050 0000 0000 0000 .........P...... 00000090: 0000 0000 0000 0000 0050 0000 0000 0000 .........P...... 000000a0: 0700 0000 0500 0000 0600 0000 0000 0000 ................ 000000b0: 5f5f 7465 7874 0000 0000 0000 0000 0000 __text.......... 000000c0: 5f5f 5445 5854 0000 0000 0000 0000 0000 __TEXT.......... 000000d0: 080f 0000 0100 0000 1835 0000 0000 0000 .........5...... 000000e0: 080f 0000 0200 0000 0000 0000 0000 0000 ................ 000000f0: 0004 0080 0000 0000 0000 0000 0000 0000 ................ 00000100: 5f5f 7374 7562 7300 0000 0000 0000 0000 __stubs......... ...
とか、
$ xxd ls 00000000 cf fa ed fe 07 00 00 01 03 00 00 80 02 00 00 00 |................| 00000010 12 00 00 00 18 07 00 00 85 00 20 00 00 00 00 00 |.......... .....| 00000020 19 00 00 00 48 00 00 00 5f 5f 50 41 47 45 5a 45 |....H...__PAGEZE| 00000030 52 4f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |RO..............| 00000040 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 |................| 00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000060 00 00 00 00 00 00 00 00 19 00 00 00 28 02 00 00 |............(...| 00000070 5f 5f 54 45 58 54 00 00 00 00 00 00 00 00 00 00 |__TEXT..........| 00000080 00 00 00 00 01 00 00 00 00 50 00 00 00 00 00 00 |.........P......| 00000090 00 00 00 00 00 00 00 00 00 50 00 00 00 00 00 00 |.........P......| 000000a0 07 00 00 00 05 00 00 00 06 00 00 00 00 00 00 00 |................| ...
を使うと良い。
参考
2020/02/13 21:45