将二进制文件放在哪里,以便它们始终在路径中并且可以轻松找到


10

我正在制作一些我想轻松安装的二进制文件,脚本等(使用自己的rpm)。因为我希望每个人都可以使用它们,所以我的直觉是将它们放在/ usr / bin中;

  • 无需更改路径

然而; 我的可执行文件现在消失在其他所有文件中;我如何以一种简单的方式找回放置在其中的所有可执行文件。我在想:

  • / usr / bin中的一个子目录(我知道我不能这样做;只是为了说明我的想法)
  • 另一个目录(/ opt / myself / bin),并将每个可执行文件链接到/ usr / bin(很多工作)
  • 另一个目录(/ opt / myself / bin)并将目录链接到/ usr / bin(这可能吗?)

做到这一点的“最佳,最符合Linux的方式”是什么?

编辑:我们在公司中对此进行了讨论,并提出了这个次优的选择:使用来自/ usr / bin的符号链接将二进制文件放在/ usr / bin / company中。我对这种解决方案并不感到兴奋(讨论仍在进行中)

Answers:


7

如果将二进制文件捆绑到自己的RPM中,那么获取它们的名称和安装位置的列表很简单。

$ rpm -ql httpd| head -10
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.d/README
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf.modules.d
/etc/httpd/conf.modules.d/00-base.conf

我建议将可执行文件放入/usr/bin或中,/usr/local/bin然后滚动自己的RPM。做到这一点非常简单,通过使用RPM管理软件部署,您将能够使用版本号标记捆绑软件,从而进一步简化了软件在部署时的配置管理。

确定哪些RPM是“我的”?

您可以使用一些已知信息来构建RPM,然后在进行构建之前就可以达成共识。我经常在我的域所拥有的系统上构建软件包,因此仅通过搜索在主机X.mydom.com上构建的所有RPM来查找RPM都是很简单的。

$ rpm -qi httpd
Name        : httpd
Version     : 2.4.7
Release     : 1.fc19
Architecture: x86_64
Install Date: Mon 17 Feb 2014 01:53:15 AM EST
Group       : System Environment/Daemons
Size        : 3865725
License     : ASL 2.0
Signature   : RSA/SHA256, Mon 27 Jan 2014 11:00:08 AM EST, Key ID 07477e65fb4b18e6
Source RPM  : httpd-2.4.7-1.fc19.src.rpm
Build Date  : Mon 27 Jan 2014 08:39:13 AM EST
Build Host  : buildvm-20.phx2.fedoraproject.org
Relocations : (not relocatable)
Packager    : Fedora Project
Vendor      : Fedora Project
URL         : http://httpd.apache.org/
Summary     : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.

这就是Build HostRPM中的界限。

使用/ usr / bin / company?

我可能不鼓励使用这样的位置。主要是因为它要求您的所有系统都进行$PATH扩充以包括它,因此是非标准的。定制事物一直是每个wannabee Unix管理员的“通过权利”,但是除非绝对必要,否则我始终不鼓励这样做。

这样的定制最大的问题是,它们既成为维护您的环境,又使新的人们快速了解如何使用您的环境的负担。

我可以从RPM中获取文件列表吗?

是的,您可以实现这一点,但是需要两次调用RPM。第一个将构建在主机X.mydom.com上构建的软件包的列表。获取此列表后,您需要重新调用RPM查询以获取每个软件包所拥有的文件。您可以使用这种衬板实现此目的:

$ rpm -ql $(rpm -qa --queryformat "%-30{NAME}%{BUILDHOST}\n" | \
    grep X.mydom.com | awk '{print $1}') | head -10
/etc/pam.d/run_init
/etc/sestatus.conf
/usr/bin/secon
/usr/bin/semodule_deps
/usr/bin/semodule_expand
/usr/bin/semodule_link
/usr/bin/semodule_package
/usr/bin/semodule_unpackage
/usr/sbin/fixfiles
/usr/sbin/genhomedircon

以及如何获取我安装的所有rpm安装的所有二进制文件的列表?幸运的是,我们同意将公司名称放在rpm名称中;所以类似“ rpm -qa | grep company”的列表会列出我安装的rpm
Chris Maes 2014年

@ChrisMaes-查看更新。我使用构建主机来确定哪些pkg是“我的”。
slm

感谢更新; 如果您仅可以添加一条命令来查找我的rpm拥有的所有二进制文件(其名称中带有“ company”),那就太棒了
Chris Maes 2014年

@ChrisMaes-如果需要进一步的指导,请参阅更新,LMK。
slm

很好的书面答案;完整且格式正确。非常感谢!
克里斯·梅斯

4

一个明显的建议是以一种特殊的方式命名您的二进制文件或软件包。因此,例如,您可以cm-按照本文中给出的首字母缩写为它们添加前缀。如果要安装rpm,则需要/usr/bin按照FHS 进行安装(如果它们是用户级别的可执行文件)。/usr/local/bin例如,它们不应进入。那仅用于本地安装。

作为记录,我没有想到将二进制文件放在一个特殊的目录中并将它们链接起来的想法很吸引人,尽管我认为这样的事情有时会完成。还请记住,如果您需要找出哪些二进制文件属于哪个软件包,则可以查询打包系统。


3

不属于系统或发行版的二进制文件通常位于

/usr/local/bin

该目录通常在标准目录中,$PATH以便找到您的二进制文件。


通常,/ usr / local / bin用于仅在该计算机上“本地”存在的二进制文件;不是二进制文件,我将使用rpm在其他计算机上分发...?
克里斯·梅斯

2
在Linux下,/usr/local/bin用于手动安装的可执行文件。包管理器管理的可执行文件进入/usr/bin
吉尔斯(Gilles)'所以

@Gilles,我对该问题的第一个解释是安装在一台计算机上,使二进制文件可供每个用户使用(而不是在$ HOME中安装)。现在我看到的不是我真正理解的。
Matteo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.