Linux可执行文件安装路径及源管理软件的升级

Linux可执行文件安装路径

Linux的文件路径管理比windows整齐的多,可执行文件都会放在对应的bin目录下。但是Linux的可执行文件的路径非常多,通常有如下几个:

/bin
/sbin
/usr/bin
/usr/sbin
/usr/lcoal/bin
/usr/local/sbin
/usr/home/user_name/bin

这些都是可执行文件的路径,到底有什么区别呢?

 

首先,由于Linux的任意目录都可以挂在在一个分区上,/bin和/sbin目录下就是系统启动、挂载/usr目录前的必要内核文件;/bin多用于用户命令比如ls,mv,cp,mount等;而/sbin中的s就是system的意思,多为非普通用户执行的命令,比如iptable,clock,fdisk等;

其次,Linux发行版都存在源管理软件,通过源管理软件可以快速简便的安装软件,ubuntu下为apt-get,centos则为yum,虽然名字不同,但是用法基本相同;源管理软件安装的软件都在/usr/bin和/usr/sbin目录下;sbin和bin的区别同上;

由于上面两条的存在,也就很好解释/usr/local/bin和/usr/local/sbin了,那就是用户通过make install安装的软件的路径;sbin和bin的区别同上;

在user_name路径下的bin则就是该用户自己的程序,并不是给所有用户用的。

环境变量

而我们一般输入程序的名字就可以执行,一般是由于bin目录加入了环境变量,在命令行输入echo $PATH就可以看到环境变量的目录,例如:

/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/user_name/bin

这里的路径顺序是有优先级的,当在前面的目录找到了就不会再去找后面的目录。可以看到/usr/local/bin的优先级大于/usr/bin,这也就以为了你通过make install安装的程序的优先级大于使用源管理器安装的程序。这在当需要某程序的新版本,而源管理器中只存在旧版本的情况非常有帮助。比如:centos6.x中集成的python版本为2.6,而目前 2.6已经停止维护,问的的python版本为2.7,但是绝大多数源既然没有针对centos6.x的python2.7,所以要升级python版本,可以通过wget源码然后make install之后的python安装在目录/usr/local/bin目录下,一般可执行文件名字为python2.7。不用考虑删除/usr/bin目录中的python2.6,因为/usr/bin目录下的程序是源管理器管理的,手动删除会破坏其完整性。但是为什么当我输入python -v查看版本的时候还是2.6不是2.7呢?因为你用的是python命令而不是python2.7,如果想让python命令也执行2.7版本,有人建议创建一个alias,当执行python的之后其实执行的是/usr/local/bin/python2.7,也有人建议ln -sf /usr/local/bin/python2.7 /usr/bin/python,其实这都不是好版本,其实只要在/usr/local/bin/目录下创建名为python的链接即可,即:

cd /usr/local/bin
ln -s python2.7 python

这时,只要保证环境变量中/usr/local/bin的优先级在/usr/bin的前面即可。

sudo的环境变量

但是当使用sudo命令的时候,发现/usr/local/bin的环境变量失效了。这是因为sudo默认使用了安全的环境变量,可以打开/etc/sudoers文件,修改其中的

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

Defaults   env_keep += "HOME"

这样就解决了使用sudo时环境变量不一致的问题。

 

Reference

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注

5 − 4 =