CentOSにおけるコマンドの格納パスのおさらい
CentOSの一般ユーザーでlsofを使おうとしたがPATHが通っていなかった。なぜだろうと調べたところ、Filesystem Hierarchy Standardで決まっているコマンドの格納パスについてすっかり忘れていたのでおさらいした際のメモ
本論
あるサーバーでlsofを使おうとしたら以下の通り存在するがPATHが通っておらず実行できなかった。
疑似的に再現すると以下のような形
#lsofが見つからず実行できない [mk55@localhost ~]$ lsof bash: lsof: command not found... #$PATH以下をwhichコマンドで探してみてもない [mk55@localhost ~]$ which lsof /usr/bin/which: no lsof in (/usr/local/bin:/usr/bin:/usr/local/sbin:/home/mk55/.local/bin:/home/mk55/bin) #一般的なパス+$PATH+$MANPATHを検索してくれるwhereisで探してみると/usr/sbinの中にあった [mk55@localhost ~]$ whereis lsof lsof: /usr/sbin/lsof /usr/share/man/man8/lsof.8.gz
で、なぜだろうと思ったのだが、そもそもコマンドの用途によって実行可能なユーザーって決まっていたような…… というわけで再度調べてみると以下の通りになっているそうだ。
PATH | 内容 | CentOS6以前 | CentOS7以前 |
---|---|---|---|
/bin | 一般ユーザーでも使えてシングルユーザーモード*1に必須な一般的なコマンドが配置される | あり | なし |
/sbin | rootユーザーが使える管理コマンドが配置される | あり | なし |
/lib | /binと/sbinで使用する共有ライブラリやカーネルモジュール | あり | なし |
/usr/bin | 一般ユーザーでも使えてシングルユーザーモードに必須でない一般的なコマンドが配置される | あり | あり |
/usr/sbin | 必須でない管理コマンドが配置される | あり | あり |
/usr/lib | /usr/binや/usr/sbin以下が使用する共有ライブラリやカーネルモジュール | あり | あり |
/usr/local | ローカル環境で使うものが配置される。配下にbin/, lib/がある | あり | あり |
上の表で”なし”と書いたディレクトリは実態が存在しなくなり、ファイルは/usr配下へ統合され、フォルダは統合先へのシンボリックリンクになっている
試しにCentOS7でls -al /
してみると確かにシンボリックリンクになっている。
[mk55@localhost ~]$ cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) [mk55@localhost ~]$ ls -l / total 36 lrwxrwxrwx. 1 root root 7 May 1 18:06 bin -> usr/bin dr-xr-xr-x. 4 root root 4096 May 6 10:27 boot drwxr-xr-x. 19 root root 3320 May 24 23:50 dev drwxr-xr-x. 139 root root 12288 May 25 00:02 etc drwxr-xr-x. 3 root root 17 Nov 6 2016 home lrwxrwxrwx. 1 root root 7 May 1 18:06 lib -> usr/lib lrwxrwxrwx. 1 root root 9 May 1 18:06 lib64 -> usr/lib64 drwxr-xr-x. 2 root root 6 Nov 6 2016 media drwxr-xr-x. 3 root root 18 Nov 6 2016 mnt drwxr-xr-x. 3 root root 15 Nov 6 2016 opt dr-xr-xr-x. 130 root root 0 May 24 23:50 proc dr-xr-x---. 13 root root 4096 May 6 13:18 root drwxr-xr-x. 35 root root 1120 May 25 00:02 run lrwxrwxrwx. 1 root root 8 May 1 18:06 sbin -> usr/sbin drwxr-xr-x. 2 root root 6 Nov 6 2016 srv dr-xr-xr-x. 13 root root 0 May 24 23:50 sys drwxrwxrwt. 10 root root 4096 May 25 00:02 tmp drwxr-xr-x. 13 root root 4096 May 1 18:06 usr drwxr-xr-x. 23 root root 4096 May 24 23:50 var
参考
whereisとwhereの違い ⇒ 探し物は何ですか?(Linuxコマンドパス検索「which」他編) | UserSide Staff Blog
RHEL7(CentOS7)以降のファイルシステムレイアウトの変更内容 ⇒ 2.3. ファイルシステムレイアウト
/bin、/sbin、/lib、および /lib64 ディレクトリーは、/usr 下に移動しています。
Linuxのディレクトリ構造についてもっと知りたいならFilesystem Hierarchy Standardを調べましょう