プログラミング学習日記

プログラミング学習時のメモ帳。

commandの仕組みについて memo

間違っている場所あったら優しく教えてね

ターミナルを開くとコマンドで様々な操作をすることができる.
どこから命令を認識しているのか気になりますね .
プログラミングだったら関数を定義してその関数を見ればどのような操作か確認することができます. しかしコマンドに打った文字を処理しているのはどこに書かれているのでしょうか.

初めに環境変数

環境変数とはPATHと呼ばれるものです.
コマンド名の格納場所を指定しています.

$ echo $PATH
:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:

コマンドを打った際に初めに \usr\local\binにコマンドが存在しているかをみにいきその後に\usr\binと順番にみていきます. 同じコマンドが登録されていた場合は, 初めにヒットした方を使います.

ボクの環境では\usr\local\sbinにはPATHは通っていませんでした.

\bin

$ cd \bin
/bin $ ls -a
.       date        ksh     ps      tcsh
..      dd      launchctl   pwd     test
[       df      link        rm      unlink
bash        echo        ln      rmdir       wait4path
cat     ed      ls      sh      zsh
chmod       expr        mkdir       sleep
cp      hostname    mv      stty
csh     kill        pax     sync

これで移動した先には全てのユーザーが使えるコマンドが備わっています.
ディレクトリを移動するcdコマンド, 削除するrmコマンドなど一般的なコマンドはここに入っています. catmkdirも使う人はいるでしょう

\sbin

$ cd \sbin
/sbin $ ls -a
.           ifconfig        mount_udf
..          kextload        mount_webdav
apfs_hfs_convert    kextunload      mpioutil
autodiskmount       launchd         newfs_apfs
disklabel       md5         newfs_exfat
dmesg           mknod           newfs_hfs
dynamic_pager       mount           newfs_msdos
emond           mount_9p        newfs_udf
fibreconfig     mount_acfs      nfsd
fsck            mount_afp       nfsiod
fsck_apfs       mount_apfs      nologin
fsck_cs         mount_cd9660        pfctl
fsck_exfat      mount_cddafs        ping
fsck_hfs        mount_devfs     ping6
fsck_msdos      mount_exfat     quotacheck
fsck_udf        mount_fdesc     reboot
fstyp           mount_ftp       route
fstyp_hfs       mount_hfs       rtsol
fstyp_msdos     mount_msdos     shutdown
fstyp_ntfs      mount_nfs       umount
fstyp_udf       mount_ntfs
halt            mount_smbfs

\sbinには管理者しか使えないコマンドが入っています. 他の一般userは使うことができません. みたことないコマンドばかり . そうそう使うことのないコマンドなのでしょう

\usr\bin

\binとあまり変わりません. 全userが使用可能なコマンドが詰まっています. \binが機関部分で\usr\binが少し重要度の下がるコマンドというイメージです.
ここにはwhichコマンドやjava , whoamiなど入っていました.

\usr\local\bin

自分でインストールしたコマンドなどはここに入れておきます.
pythonコマンドはここに入っていました.

$PATHはどこで指定しているか.

全て`.bash_profileで設定していました.

PATH = "\usr\local\sbin:{$PATH}"

などと記載すると反映されます.

参考

/bin, /usr/bin, /usr/sbin, /usr/local/bin の違いとは? - Qiita

ブログを見ていただきありがとうございました