【生产实践】Linux中/usr/bin、/usr/sbin与/usr/local的关系解析(2025年技术规范)

一、核心定位与功能划分

  1. /usr/bin:用户级通用命令库
    • 定位:存储系统预装的用户级可执行文件,这些命令通常由Linux发行版官方软件包管理器(如APT、YUM)安装,属于系统默认功能的一部分。

    • 示例命令:lsgrepvimcurl等。

    • 权限与用途:所有用户均可执行,涵盖日常操作工具(如文本处理、网络工具)。

  2. /usr/sbin:系统管理命令库
    • 定位:存放需要管理员权限(root)执行的系统级管理工具,通常与网络服务、硬件配置相关。

    • 示例命令:ifconfig(网络配置)、iptables(防火墙)、useradd(用户管理)等。

    • 权限与用途:仅限管理员使用,用于系统维护和服务管理。

  3. /usr/local:用户自定义软件区
    • 定位:独立于系统包管理器的本地软件安装目录,用于存放用户手动编译或第三方安装的应用程序。

    • 子目录结构:

    /usr/local/bin:用户自定义的可执行文件(如自行编译的Python、Node.js)。

    /usr/local/sbin:用户自定义的系统管理工具(如私有服务的控制脚本)。

    /usr/local/lib/usr/local/etc:配套的库文件和配置文件。

    • 设计意义:避免系统升级时覆盖用户自定义软件,实现系统与用户程序的隔离。


二、层级关系与交互逻辑

  1. 层级划分
    • 系统核心层:

    /bin/sbin:系统启动和修复必需的基本命令(如shutdownmount),与根文件系统绑定。

    • 应用扩展层:

    /usr/bin/usr/sbin:系统预装的扩展功能,依赖/usr分区挂载后可用。

    • 用户自定义层:

    /usr/local:完全独立于系统包管理,用户自主管理的软件生态。

  2. 优先级与路径解析
    • 环境变量PATH顺序:默认路径优先级通常为 /usr/local/bin > /usr/bin > /bin,这意味着同名命令优先执行用户自定义版本(例如用户安装的Python 3.12会覆盖系统自带的Python 3.9)。

    • 权限隔离:

    /usr/sbin中的命令需sudo权限,而/usr/local/sbin的权限由用户安装时决定。


三、典型使用场景对比

目录适用场景示例操作
/usr/bin用户日常操作、开发工具、通用软件(如编辑器、编译器)执行gcc编译代码、使用wget下载文件
/usr/sbin系统级服务管理(如网络配置、用户权限控制)配置防火墙规则(iptables)、管理用户账户(useradd
/usr/local安装非官方仓库的软件(如从源码编译的Nginx)、企业私有服务部署编译安装MySQL 8.0到/usr/local/mysql,并通过/usr/local/bin/mysql启动服务

四、设计原则与最佳实践

  1. 隔离性设计
    • 系统与用户分离:/usr/bin/usr/sbin由系统维护,用户应避免直接修改;自定义软件统一放入/usr/local,确保升级兼容性。

    • 权限控制:管理员工具集中存放于/usr/sbin,降低误操作风险。

  2. 维护建议
    • 避免手动修改系统目录:修改/usr/bin中的文件可能导致包管理器(如APT)无法追踪变更。

    • 使用符号链接:若需全局访问自定义命令,可将/usr/local/bin中的可执行文件链接到/usr/bin(需谨慎操作)。

  3. 故障排查
    • 命令冲突:若自定义命令与系统命令同名,可通过which -a <command>查看所有路径下的同名文件。

    • 路径缺失:若/usr/local/bin未被加入PATH,需在~/.bashrc/etc/profile中添加export PATH="/usr/local/bin:$PATH"


五、Linux系统手动安装JDK示例

场景:在应用服务器集群中部署JDK 1.8
步骤:

  1. 解压并标准化路径:
    sudo tar -xzvf jdk-linux-x64.tar.gz -C `/usr/local  
    
  2. 配置环境变量(/etc/profile):
    export JAVA_HOME=/usr/local/jdk1.8.0_131  
    export PATH=$JAVA_HOME/bin:$PATH  
    
  3. 验证命令扩展:
    java -version && javac -version  # 双重验证编译与运行环境  
    

注意:此方法适用于老旧系统兼容场景,新项目建议选用JDK 11+。


六、总结
/usr/bin/usr/sbin:构成系统预装功能的核心,前者面向普通用户,后者面向管理员,两者均受系统包管理器管控。

/usr/local:作为用户自定义生态的“安全区”,独立于系统更新,适合部署私有化服务或非官方软件版本。

• 协同关系:三者通过路径优先级和权限隔离,实现系统稳定性与用户灵活性的平衡,是Linux模块化设计的典型体现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/82946.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能网联汽车 “中央计算” 博弈:RTOS 与跨域融合的算力分配挑战

一、引言 随着智能驾驶技术的飞速发展&#xff0c;汽车逐渐从传统的交通工具演变为移动的智能终端。智能网联汽车的核心竞争力日益体现在其强大的计算能力和高效的算力管理上。汽车电子电气架构&#xff08;EEA&#xff09;正经历从分布式架构向 “中央计算 区域控制” 架构的…

【PDF】使用Adobe Acrobat dc添加水印和加密

【PDF】使用Adobe Acrobat dc添加水印和加密 文章目录 [TOC](文章目录) 前言一、添加保护加密口令二、添加水印三、实验四、参考文章总结 实验工具&#xff1a; 1.Adobe Acrobat dc 前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、添加保护加…

python面试实战经验分享

2025/3/28第一面 杭州实在智能 见习python开发工程师 1、Python方法中参数默认值可以是列表或者字典吗? 在Python中,函数参数的默认值可以是列表或字典,列表或者字典在初始化应在函数体内,如果不正确处理,可能会导致所有调用都共享同一个列表。 2、协程、线性和进程 进程…

MIST:一键解锁 macOS 历史版本,旧系统安装不再难!

在 Mac 电脑的使用过程中&#xff0c;你是否遇到过这些困扰&#xff1f;为了运行一款经典设计软件&#xff0c;新系统却无法兼容&#xff1b;或是想给老旧 Mac 设备升级&#xff0c;却找不到适配的系统版本。而 App Store 里&#xff0c;旧版 macOS 安装包就像 “隐藏副本”&am…

win10 局域网内聊天

在 Windows 10 的局域网 中&#xff0c;如果你想实现 多个用户之间的聊天功能&#xff0c;可以选择以下几种方案&#xff0c;取决于你需要的是&#xff1a; • ✅ 命令行纯文字聊天&#xff08;如 Linux talk&#xff09; • ✅ 图形界面聊天室 • ✅ 局域网广播消息 • ✅ 多人…

Android CountDownTimer重写

Android 倒计时器重写&#xff0c;实现可重复使用&#xff0c;动态修改计时时间 CountDownTimerRew 是一个可重写、动态修改计时时间的 Android 倒计时器类。它允许开发者设置倒计时总时长、间隔时间&#xff0c;并通过 onTick 和 onFinish 方法实现定时回调。该类支持动态修改…

dp自动化登陆之hCaptcha 验证码

hCaptcha 是一种常见的验证码服务&#xff0c;用于区分人类用户和自动化程序。由于其基于图像识别和行为分析&#xff0c;下面介绍如何使用自动化点击验证码完成登陆。 思路&#xff1a;登陆目标网站触发验证码&#xff0c;截图并发给打码平台返回坐标&#xff0c;模拟人工点击…

【工作记录】crmeb后端项目打开、运行

1、下载代码 1&#xff09;安装git 不再详述 2&#xff09;git拉代码 项目地址如下&#xff0c;在vscode-分支中拉代码 # 克隆项目 git clone https://gitee.com/ZhongBangKeJi/crmeb_java/ 截图如下是已经成功拉下来 注意安装对应版本 2、maven配置 安装配置见&#x…

敏捷软件开发与Scrum

目录 一、敏捷软件开发 敏捷开发原则 敏捷开发特点 二、Scrum (一)Scrum 基础知识

Three.js模型材质调整与性能优化实战

一、材质基础调整 1.1 颜色与透明度控制 通过Material.color属性可直接修改材质颜色&#xff1a; material.color new THREE.Color(0xff0000); // 红色结合opacity属性实现透明效果&#xff1a; material.opacity 0.5; // 50%透明度如需动态调整&#xff0c;可通过Color.…

Flutter速成指南:不懂编程也能10天开发专业级App

Flutter速成指南&#xff1a;不懂编程也能10天开发专业级App &#x1f680; 轻松构建漂亮的跨平台应用 &#x1f4d1; 目录 一、Flutter是什么&#xff1f; 为什么选择Flutter&#xff1f;Flutter工作原理 二、环境搭建与命令行 安装Flutter SDK常用Flutter命令创建第一个项目…

【面试真题】王者荣耀亿级排行榜,如何设计?

目录 一、数据库 order by 二、Redis 的zset 三、抗亿级数据存在的问题 3.1 热点 key 问题 3.1.1 多级缓存&#xff08;RedisJVM本地缓存&#xff09; 3.1.2 读写分离 从库负载均衡 3.1.3 分片Key设计 3.2 内存爆炸 3.2.1 缩短键名 3.2.2 分片存储 3.3 数据持久化风…

Java 语法基础(笔记)

java 的数据类型 基本类型 Java 有八种基本类型&#xff1a; byte&#xff1a;1 字节&#xff0c;-128~127short&#xff1a;2 字节&#xff0c;-32768~32767int&#xff1a;4 字节&#xff0c;-2147483648~2147483647long&#xff1a;8 字节&#xff0c;-92233720368547758…

C# 方法(栈帧)

本章内容: 方法的结构 方法体内部的代码执行 局部变量 局部常量 控制流 方法调用 返回值 返回语句和void方法 局部函数 参数 值参数 引用参数 引用类型作为值参数和引用参数 输出参数 参数数组 参数类型总结 方法重载 命名参数 可选参数 栈帧 递归 栈帧 至此&#xff0c;我们已…

C# 使用 WinUI 3 项目模板创建桌面应用程序

文章目录 1. 概述2. 先决条件3. 创建项目步骤4. 项目结构简介5. 代码示例5.1. MainWindow.xaml (UI 定义)5.2. MainWindow.xaml.cs (逻辑代码) 6. 生成和运行应用程序7. 关键概念 1. 概述 本示例演示如何使用 Visual Studio 中的 “Blank App, Packaged (WinUI 3 in Desktop)”…

设计模式简述(十八)享元模式

享元模式 描述基本组件使用 描述 当内存中存在大量类似的对象时&#xff0c;可以考虑使用享元模式减少整体内存占用。 可以将相同的部分和不同的部分进行拆分&#xff0c;以达到多个对象共享相同部分内存的目的。 基本组件 通常享元对象通过共享的属性映射一个享元对象。 公…

大数据狙击金融欺诈——技术如何守护交易安全?

大数据狙击金融欺诈——技术如何守护交易安全? 金融领域一直是欺诈行为的“重灾区”,从传统的信用卡盗刷到精心策划的网络诈骗,攻击者不断进化手法,使得防御变得越来越复杂。然而,大数据技术的出现,让金融欺诈检测从被动防守转向主动狙击,通过深度学习、行为分析和实时…

如何通过DNS解析实现负载均衡?

在当今的互联网时代&#xff0c;随着网络应用的飞速发展&#xff0c;网站和各类在线服务面临着海量的用户请求。为了保障服务的高可用性和高性能&#xff0c;负载均衡技术应运而生。DNS&#xff08;域名系统&#xff09;负载均衡作为其中一种重要的实现方式&#xff0c;凭借其简…

MySQL解决主从复制的报错问题

MySQL 8.4 非 GTID 模式部分数据库主从复制指南 在进行MySQL 8.4非GTID模式下部分数据库主从复制时&#xff0c;以下是详细的操作步骤以及对应的执行位置说明&#xff0c;还有报错处理方法介绍&#xff1a; 操作步骤 1. 备份主库指定数据库&#xff08;db1、db2&#xff09;…

Linux的域名解析服务器

什么是DNS DNS&#xff08;Domain Name System&#xff09;是互联网上的一项服务&#xff0c;它作为将域名和IP地址相互映射的一个分 布式数据库&#xff0c;能够使人更方便的访问互联网 DNS使用的是53端口&#xff0c; 通常DNS是以UDP这个较快速的数据传输协议来查询的&…