From 26cd0805c78639b8b353804aec38381749ab51a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=B6=9B?= Date: Fri, 28 May 2021 11:27:37 +0800 Subject: [PATCH] =?UTF-8?q?post:=E5=AE=8C=E6=88=90Linux=E4=BA=8C=E8=BF=9B?= =?UTF-8?q?=E5=88=B6=E6=94=BE=E7=BD=AE=E6=96=87=E7=AB=A0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/_posts/linux-binary-placement.md | 51 +++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 source/_posts/linux-binary-placement.md diff --git a/source/_posts/linux-binary-placement.md b/source/_posts/linux-binary-placement.md new file mode 100644 index 0000000..7473b4b --- /dev/null +++ b/source/_posts/linux-binary-placement.md @@ -0,0 +1,51 @@ +--- +title: Linux下二进制文件的放置 +tags: + - DevOps + - Linux + - Directory + - Manaagement +categories: + - - DevOps + - 系统管理 +keywords: '系统管理,Linux,bin,usr,sbin,二进制,放置' +date: 2021-05-28 11:27:11 +--- + +在Linux系统的使用过程中,如何放置二进制文件一直是困扰很多人的难题。其实Linux对于二进制文件的放置始终都是有其独特的规定的。 + +## 常见目录的功能与区别 + +在Linux中,常用来放置二进制文件的目录就那么几个(不算手动增加到`PATH`环境变量中的目录)。这些目录之间的区别可以参考下表,在向其中放置文件的时候可以避免放入错误的文件。 + +| 二进制文件目录 | 面向用户 | 更新频率 | 放置内容 | +|---|---|---|---| +| `/bin` | 所有用户 | 系统更新 | 系统命令。 | +| `/sbin` | 超级用户 | 系统更新 | 系统命令。 | +| `/usr/bin` | 所有用户 | 应用安装 | 一般都是安装到系统供处理日常操作的应用。 | +| `/usr/sbin` | 超级用户 | 应用安装 | 一般都是安装到系统的用于对外提供服务的应用,例如Nginx。 | +| `/usr/local/bin` | 所有用户 | 手工更新 | 本机无关的第三方应用。 | +| `/usr/local/sbin` | 超级用户 | 手工更新 | 本机无关的第三方应用。 | + +## 推荐应用的手工安装过程 + +由于上面这些目录中的内容可能会随着系统的使用变得越来越臃肿,所以在手工安装应用的时候并不推荐直接将应用放置在这些目录中。 + +这里比较推荐的一种软件的安装方式是使用符号链接来安装。不少应用的安装说明上都会要求用户在安装应用以后修改`PATH`环境变量把应用的安装目录添加进去。但是这样做的后果就是,随着应用的安装,`PATH`环境变量中的内容会越来越多,每次执行一个命令的时候,系统都会沿着`PATH`中的所有路径去搜索一遍。 + +然而使用符号链接的安装方法就比较方便了,可以使用以下步骤来操作。 + +1. 创建一个所有用户都拥有访问权限的目录,不要选择当前用户或者某个用户的Home目录。 +1. 将需要安装的应用解压缩到这个目录中。 +1. 记录下其中二进制可执行文件的位置,例如`./bin`。 +1. 用下面的命令把所有的可执行文件都链接到`/usr/local/bin`目录里。 + +```bash +find ./bin -type f -and -perm +100 | xargs -I @ sh -c 'ln -s @ /usr/local/bin/`basename "@"`' +``` + +删除就比较费事了,需要做好几个判断。 + +```bash +find /usr/local/bin -type l | xargs readlink | grep /app | xargs -I @ sh -c 'rm `basename "@"`' +```