チャレンジ一覧 / linux-filesystem-top-level

Day 2: /bin

Day 1 / 2026-03-12

ディレクトリの概要

/binは、Linuxの基本的なコマンドが置かれているディレクトリ。

最近の多くのLinuxでは/bin/usr/binへのシンボリックリンクになっている。

%type ls
ls is /usr/bin/ls

usr_bin_list.txt

/bin配下のコマンドはC言語などでコンパイルされた実行バイナリである

端末で打ち込んだコマンドはあくまでも人間向きであり、PCはそのままでは理解ができない。

そのため、コンピュータが実行できる形に変換(コンパイル)をし、それをCPUが実行する。

その際にコンパイルされたファイルを**「実行バイナリ」**と呼ぶ

※バイナリとは、機械が扱うデータ形式のファイルのこと

Linuxコマンドを作る主な言語

言語特徴
Cls, cp, mv, catLinuxで最も多い。高速
C++一部のツールCより高機能
Rust新しいツール安全性が高い
Godocker, kubectl などモダンなCLIツール
Pythonpip などスクリプト系
Shell scriptwhich などテキストのまま実行

/bin/lsのバイナリを確認してみる

実行コマンド

hexdump -C /bin/ls | head

出力

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)

上記の例で行くと、使用しているライブラリは ① 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(実行)

また、パーミッションは数値で表されることもある。

権限数値
r4
w2
x1

rwxr-xr-xの場合、

rwx = 4 + 2 + 1 = 7
r-x = 4 + 0 + 1 = 5
r-x = 4 + 0 + 1 = 5

で755となる