Linux:/bin;/sbin;/usr/bin;/usr/sbin;/usr/local/bin;/usr/local/sbin的意义

来源:互联网 发布:ido软件下载中文版 编辑:程序博客网 时间:2024/05/22 05:07

Linux:/bin;/sbin;/usr/bin;/usr/sbin;/usr/local/bin;/usr/local/sbin的意义

实验环境:

CentOS 6.5

[root@localhost ~]# uname -aLinux localhost.localdomain 2.6.32-431.el6.i686 #1 SMP Fri Nov 22 00:26:36 UTC 2013 i686 i686 i386 GNU/Linux[root@localhost ~]# 

首先看下PATH变量在不同用户下的值:

root用户:

[root@localhost ~]# whoamiroot[root@localhost ~]# echo $PATH/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin[root@localhost ~]# 

普通用户:

[test1280@localhost ~]$ whoamitest1280[test1280@localhost ~]$ echo $PATH/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/test1280/bin

bin是binary的缩写,二进制。

上述六个目录的含义:

/bin:通常是普通用户和超级用户都会用到的必要的命令,例如ls,pwd等等。

[root@localhost ~]# which lsalias ls='ls --color=auto'    /bin/ls[root@localhost ~]# which pwd/bin/pwd[root@localhost ~]# su - test1280[test1280@localhost ~]$ which lsalias ls='ls --color=auto'    /bin/ls[test1280@localhost ~]$ which pwd/bin/pwd[test1280@localhost ~]$

/sbin:通常是系统管理员使用的必要的来管理系统的命令,例如shutdown,ifconfig等等。

[root@localhost ~]# which shutdown /sbin/shutdown[root@localhost ~]# which ifconfig/sbin/ifconfig[root@localhost ~]# su - test1280[test1280@localhost ~]$ which shutdown /sbin/shutdown[test1280@localhost ~]$ which ifconfig/sbin/ifconfig[test1280@localhost ~]$ 

注:sbin意义为system binary。

/usr/bin:通常是一些非必要的,但是普通用户和超级用户都可能使用到的命令,例如gcc,ldd等等。

[root@localhost ~]# which gcc/usr/bin/gcc[root@localhost ~]# which ldd/usr/bin/ldd[root@localhost ~]# su - test1280[test1280@localhost ~]$ which gcc/usr/bin/gcc[test1280@localhost ~]$ which ldd/usr/bin/ldd[test1280@localhost ~]$ 

注:很多时候我们自己安装的软件,可能在此处建立一个软连接(符号链接),指向实际的可执行文件。

/usr/sbin:通常是一些非必要的,由系统管理员来使用的管理系统的命令,例如crond,httpd等等。

[root@localhost ~]# which crond/usr/sbin/crond[root@localhost ~]# which httpd/usr/sbin/httpd[root@localhost ~]# su - test1280[test1280@localhost ~]$ which crond/usr/sbin/crond[test1280@localhost ~]$ which httpd/usr/sbin/httpd[test1280@localhost ~]$

注:这里面有很多类似httpd等这样的后台程序,主要是提供一些服务,有相当一部分是关于网络的(并不全是,例如crond),这个时候这个进程就是作为一个“服务器”,接受外部的请求。

/usr/local/bin:通常是用户后来安装的软件,可能被普通用户或超级用户使用。

/usr/local/sbin:通常是用户后来安装的软件,一般是用来管理系统的,被系统管理员使用。

从用户权限角度来看,*sbin下的命令都是用来管理系统的,所以一般是普通用户无法执行,只有系统管理员可以执行,而*bin下的命令则是所有用户都可以执行的。

注:以上所说的并不是绝对的,例如ifconfig在/sbin下,但是普通用户一般具有可执行权限。

[test1280@localhost ~]$ ll /sbin/ifconfig -rwxr-xr-x. 1 root root 70024 May 10  2012 /sbin/ifconfig[test1280@localhost ~]$ 

从可运行的时间角度看,/bin以及/sbin是和/在同一文件系统,在挂载其他文件系统之前就可以使用/bin以及/sbin下的命令。

/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin可能与根文件系统不在同一文件系统之中,可能是在其他文件系统中后挂载上去的。

使用Tarball(源代码)编译安装的软件通常都是在/usr/local/bin以及/usr/local/sbin中。

十分重要的二进制程序放置在/bin以及/sbin中;
不是十分重要的二进制程序放置在/usr/bin以及/usr/sbin中。
进行这样子的分隔是为了尽可能地缩小根分区。

在最开始不同用户下的PATH示例中我们看到,普通用户与超级用户有基本一样的PATH(包含的搜索目录列表差不多),但是他们在看到一个命令时搜索的路径顺序不相同。

在我实验的环境中,普通用户也是包含了*sbin这样的目录列表。

在有些版本中,普通用户的PATH不包含*sbin目录列表,所以当执行ifconfig时,通常会报command not found这样的错误,原因是ifconfig在/sbin中,但是PATH没有包含/sbin这个目录,导致报错。

这个时候如果我们用绝对路径来执行:

/sbin/ifconfig

如果ifconfig对一般用户具有可执行权限,那么就可以正常执行。

关键点在于,告诉你当前的shell,我去哪里找这个命令(可执行文件)。
当PATH包含的目录下没有时,我可以使用绝对路径来指定。

下面这四句话是引用自别的博客:

如果是用户和管理员必备的二进制文件,就会放在/bin;

如果是系统管理员必备,但是一般用户根本不会用到的二进制文件,就会放在/sbin;

如果不是用户必备的二进制文件,多半会放在/usr/bin;

如果不是系统管理员必备的工具,如网络管理命令,多半会放在/usr/sbin;

参考资料:

1.http://blog.sina.com.cn/s/blog_8184e03301012z2x.html
2.http://blog.csdn.net/kkdelta/article/details/7708250
3.http://blog.csdn.net/xh16319/article/details/12861523

1 0
原创粉丝点击