Linux下/bin、/sbin、/usr/bin、/usr/sbin、/usr/local/bin和/usr/local/sbin目录详解

文章详细介绍了在CentOS6.5环境下,不同用户(root和普通用户)的PATH变量设置,解释了/bin、/sbin、/usr/bin、/usr/sbin等目录的用途,以及它们与用户权限的关系。它强调了sbin目录通常包含系统管理命令,而/bin目录则包含普通用户和管理员都会用到的基本命令。此外,文章还讨论了如何通过PATH变量寻找和执行命令,以及在某些情况下使用绝对路径的必要性。

实验环境:

CentOS 6.5

[root@localhost ~]# uname -a
Linux 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 ~]# whoami
root
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# 

普通用户

[test1280@localhost ~]$ whoami
test1280
[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 ls
alias ls='ls --color=auto'
    /bin/ls
[root@localhost ~]# which pwd
/bin/pwd
[root@localhost ~]# su - test1280
[test1280@localhost ~]$ which ls
alias 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;

再补充一些其他目录说明

  • 主目录:/root、/home/username
  • 用户可执行文件:/bin、/usr/bin、/usr/local/bin
  • 系统可执行文件:/sbin、/usr/sbin、/usr/local/sbin
  • 其他挂载点:/media、/mnt
  • 配置:/etc
  • 临时文件:/tmp
  • 内核和Bootloader:/boot
  • 服务器数据:/var、/srv
  • 系统信息:/proc、/sys
  • 共享库:/lib、/usr/lib、/usr/local/lib

参考资料:

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

### 通过 Linux 命令行重启指定路径下的进程 在 Linux 系统中,可以通过组合使用 `pkill` 其他命令来实现对特定路径下进程的重启。以下是针对 `/usr/local/sbin/oled` 进程的详细方法[^1]。 #### 终止指定路径下的进程 可以使用 `pkill` 命令根据进程名称终止目标进程。例如,终止 `/usr/local/sbin/oled` 的进程: ```bash pkill -f "/usr/local/sbin/oled" ``` 此命令会匹配完整路径 `/usr/local/sbin/oled` 并终止相关进程。`-f` 参数表示根据完整的命令行进行匹配[^1]。 #### 启动指定路径下的进程 在终止进程后,可以通过后台运行的方式重新启动该进程。以下是一个示例命令: ```bash nohup /usr/local/sbin/oled > /dev/null 2>&1 & ``` 此命令将 `/usr/local/sbin/oled` 以后台方式运行,并将标准输出错误输出重定向到 `/dev/null`,避免生成多余的日志文件。 #### 将终止与启动整合为单个脚本 为了方便管理,可以将上述两个操作整合为一个 Bash 脚本。例如: ```bash #!/bin/bash # 终止进程 pkill -f "/usr/local/sbin/oled" # 等待几秒钟确保进程完全终止 sleep 2 # 启动进程 nohup /usr/local/sbin/oled > /dev/null 2>&1 & ``` 保存此脚本为 `restart_oled.sh`,并赋予可执行权限: ```bash chmod +x restart_oled.sh ``` 然后可以通过以下命令执行脚本: ```bash ./restart_oled.sh ``` #### 验证进程状态 在重启后,可以使用以下命令验证进程是否成功启动: ```bash ps aux | grep "/usr/local/sbin/oled" ``` 如果看到相关的进程信息,则说明进程已成功启动。 ### 注意事项 - 在使用 `pkill` 时,确保模式匹配正确,以免误杀其他无关进程。 - 如果需要频繁重启进程,可以结合 `cron` 定时任务实现自动化操作[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值