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
コマンドなど一般的なコマンドはここに入っています.
cat
や mkdir
も使う人はいるでしょう
\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}"
などと記載すると反映されます.