OSの日記

通信に関する研究をする学生A

ls, mv, rmなどのコマンドはどこから来たのか、それらは何者か、それらはどこへ行くのか、、、

我々はどこから来たのか 我々は何者か 我々はどこへ行くのか

D'où venons-nous ? Que sommes-nous ? Où allons-nous ?

 

f:id:OSa:20200213215100j:plain

 

ポール・ゴーギャンの有名な絵画にあるように、我々人間は色々な疑問を抱えている。しかし、今の私にとっての大きな疑問は題名の通り、コマンドは何者なのか。

それだけだ。

 

さて、茶番はここら辺で終えて本題に入る。

今回はターミナル上でよく使うコマンドls,mv,rmなどがどこにあり、どのようなものなのかについて説明する。

 

ターミナル上で操作する時に必要なものがコマンドであるが、あまりにも当たり前のように感じているため、どっかから降ってくるもののように感じてしまう筆者であるが、今回はこのコマンドたちについて調べてみた。

 

結論から言うと、これらのコマンドはそれぞれファイル( ls なら lsファイル, mv なら mvファイル)である。

 

今回は "ls" についてみてみよう。

まず始めに、lsファイルを探すために次のコマンドをターミナルで実行する。

$ which ls

すると、次のように返ってくる

$ /bin/ls

これが意味することは、ルートディレクトリの下のbinディレクトリの下にlsファイルがあるよ と言うことだ。

それでは、binディレクトリに移動しよう

$ cd /bin
 

それでは、実際にlsファイルの中身をみていこう!

$ vim ls
$ cat ls

上記の2つの方法でみれる。

f:id:OSa:20200213213332p:plain

お分かり頂けただろうか。

そう!人間には読めないようなデータファイルである。

これが "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  |................|
...

を使うと良い。

 

参考

rdera.hatenadiary.org

 

2020/02/13 21:45