概述
在Linux系统上,对于可执行文件或可执行命令,通常可以存储在/bin、/sbin、/usr/bin、/usr/local/bin、usr/sbin等目录中,或者哪些命令保存在哪个文件夹中,有什么规范吗?具体分析如下。
系统级别
/bin
- 存放系统操作的最基本的,必须的执行命令,即对所有用户(普通用户和管理员)都可能需要用到的命令,如下为mac系统下的bin目录,标准的Linux服务器包含更多:
xyzdeMacBook-Pro:bin xyz ls
[ cp df hostname link mv rm stty unlink
bash csh echo kill ln pax rmdir sync wait4path
cat date ed ksh ls ps sh tcsh zsh
chmod dd expr launchctl mkdir pwd sleep test
/sbin
- 存放系统管理的命令,即一般为管理员用到而普通用户基本不会用到的命令,如ping, ifconfig等网络相关的命令,如下:
xyzdeMacBook-Pro:sbin xyz ls
apfs_hfs_convert fsck_hfs kextunload mount_exfat newfs_apfs quotacheck
autodiskmount fsck_msdos launchd mount_fdesc newfs_exfat reboot
disklabel fsck_udf md5 mount_ftp newfs_hfs route
dmesg fstyp mknod mount_hfs newfs_msdos rtsol
dynamic_pager fstyp_hfs mount mount_msdos newfs_udf shutdown
emond fstyp_msdos mount_acfs mount_nfs nfsd umount
fibreconfig fstyp_ntfs mount_afp mount_ntfs nfsiod
fsck fstyp_udf mount_apfs mount_smbfs nologin
fsck_apfs halt mount_cd9660 mount_udf pfctl
fsck_cs ifconfig mount_cddafs mount_webdav ping
fsck_exfat kextload mount_devfs mpioutil ping6
用户级别
/usr/bin
- 存放普通用户日常使用和工作所需的一些命令和软件,但不是必须的,如vi,wc,curl等,编程语言命令如python,java,jstat等,即系统预装的相关软件时会将该软件的可执行文件添加到该目录中。
/usr/local/bin
- 与/usr/bin的区别是,/usr/bin下面的命令通常是系统预装的命令,会随着系统的升级而改变。而/usr/local/bin通常用于存放用户下载安装的软件或者自己编写的可执行命令,这里的同名命令不会被系统升级而覆盖。如mysql,redis-cli,mvn等,而通常来说,这些软件是通过软连接的方式来连接到实际的可执行命令的地址,一般是按照在/usr/local目录下:
lrwxr-xr-x 1 xyz admin 51B 8 9 2018 mysql -> /usr/local
lrwxr-xr-x 1 xyz admin 68B 8 13 2018 my -> /usr/local/mysql-5.7.23-macos10.13-x86_64/support-files/my
lrwxr-xr-x 1 xyz admin 51B 8 12 2018 mysql_config -> ../Cellar/mysql-connector-c
lrwxr-xr-x 1 xyz admin 55B 8 28 2018 mysqldump -> /usr/localdump
/usr/sbin
- 存放管理员这个用户可能用到但不是必须的应用程序命令。