ディレクトリの概要
/binは、Linuxの基本的なコマンドが置かれているディレクトリ。
最近の多くのLinuxでは/binは/usr/binへのシンボリックリンクになっている。
%type ls
ls is /usr/bin/ls
/bin配下のコマンドはC言語などでコンパイルされた実行バイナリである
端末で打ち込んだコマンドはあくまでも人間向きであり、PCはそのままでは理解ができない。
そのため、コンピュータが実行できる形に変換(コンパイル)をし、それをCPUが実行する。
その際にコンパイルされたファイルを**「実行バイナリ」**と呼ぶ
※バイナリとは、機械が扱うデータ形式のファイルのこと
Linuxコマンドを作る主な言語
| 言語 | 例 | 特徴 |
|---|---|---|
| C | ls, cp, mv, cat | Linuxで最も多い。高速 |
| C++ | 一部のツール | Cより高機能 |
| Rust | 新しいツール | 安全性が高い |
| Go | docker, kubectl など | モダンなCLIツール |
| Python | pip など | スクリプト系 |
| Shell script | which など | テキストのまま実行 |
/bin/lsのバイナリを確認してみる
実行コマンド
hexdump -C /bin/ls | head
hexdumpバイナリファイルを16進数で表示-C16進数+ASCII表示
出力
hexdump -C /bin/ls | head
00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |.ELF............|
00000010 03 00 3e 00 01 00 00 00 30 6d 00 00 00 00 00 00 |..>.....0m......|
00000020 40 00 00 00 00 00 00 00 28 24 02 00 00 00 00 00 |@.......($......|
00000030 00 00 00 00 40 00 38 00 0d 00 40 00 1f 00 1e 00 |....@.8...@.....|
00000040 06 00 00 00 04 00 00 00 40 00 00 00 00 00 00 00 |........@.......|
00000050 40 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 |@.......@.......|
00000060 d8 02 00 00 00 00 00 00 d8 02 00 00 00 00 00 00 |................|
00000070 08 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00 |................|
00000080 18 03 00 00 00 00 00 00 18 03 00 00 00 00 00 00 |................|
00000090 18 03 00 00 00 00 00 00 1c 00 00 00 00 00 00 00 |................|
先頭の7f 45 4c 46はASCIIでELF(Linuxの実行ファイル形式)を示す識別子
※ASCII(アスキー)とは、文字を数値で表すためのルール(文字コード)
共有ライブラリ
/bin内の多くのコマンドは共有ライブラリを利用して動いている。
共有ライブラリとは、複数のプログラムで共通して使われる機能をまとめた部品のこと。
ldd /bin/ls
linux-vdso.so.1 (0x000071101f116000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x000071101f0ab000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x000071101ee00000)
libpcre2-8.so.0 => /lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x000071101ed66000)
/lib64/ld-linux-x86-64.so.2 (0x000071101f118000)
ldd実行ファイルが依存している共有ライブラリを表示する(このプログラムを実行するために必要なライブラリ一覧)
上記の例で行くと、使用しているライブラリは ① linux-vdso.so.1(カーネルがユーザ空間に提供する仮想ライブラリ)
② libselinux.so.1(Linuxのセキュリティ機構)
③ libc.so.6(C言語の基本機能を提供)
④ libpcre2-8.so.0(文字列パターン処理)
⑤ ld-linux-x86-64.so.2(プログラム起動時に必要な共有ライブラリを読み込む)
の5つ。(後ろについている16進数の値はメモリアドレスを示している。)
/binのコマンドは実行権限を持っている
Linuxではファイルに実行権限がないとプログラムとして実行できない
ll /bin/ls
-rwxr-xr-x 1 root root 142312 Jun 23 2025 /bin/ls*
※llはls -alのエイリアス
先頭の-rwxr-xr-xはファイルのパーミッションを示しており、
左からそれぞれ所有者、グループ、その他ユーザの権限を意味する。
r = read(読み)
w = write(書き)
x = execute(実行)
また、パーミッションは数値で表されることもある。
| 権限 | 数値 |
|---|---|
| r | 4 |
| w | 2 |
| x | 1 |
rwxr-xr-xの場合、
rwx = 4 + 2 + 1 = 7
r-x = 4 + 0 + 1 = 5
r-x = 4 + 0 + 1 = 5
で755となる