背景:无聊,玩了cmatrix后,打算跑一跑小火车,于是
$ sudo apt install sl
但是,运行就寄了
$ sl
bash: command not found: sl
我寻思着,不是安了吗,为啥找不到,就看看sl安在哪里了
$ whereis sl
sl:/usr/games/sl
大概明白了,默认不是安装在系统目录,所以找不到sl这个命令,于是看看系统目录在哪
$ echo $PATH
/opt/ros/melodic/bin:/root/anaconda3/bin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
那要解决问题就很简单了,把/usr/games下的sl拷贝或移动到PATH之一,或者把/usr/games添加到PATH
但我进一步好奇,PATH里/bin /sbin /usr/bin /usr/sbin这四个经常看见,有什么特别之处吗,于是进去看看
$ cd /sbin && la
依次把这四个里的东西看了一遍后,发现了很多熟悉的面孔,比如
# /bin里有
bash cp rm echo rmdir uname ls chmod touch # 等
# /sbin里有
shutdown reboot init halt poweroff # 等
# /usr/bin里有
apt #等超多
#/usr/sbin里有
addgroup chgpasswd # 等
那就很清楚了,本着"linux一切皆文件"的理念,我们平常用到的rm等命令,本质也是一个二进制文件,shell会去PATH下找它们,找不到就是command not found
而/bin和/sbin的区别是一个放普通命令,一个放系统命令。/usr的bin sbin就好说了,放的很多事自己安装的脚本