將二進製文件放在哪裡,以便它們始終在路徑中並且可以輕鬆找到
我正在製作一些我想輕鬆安裝的二進製文件、腳本等(使用我自己的 rpms)。因為我希望每個人都可以訪問它們,所以我的直覺是將它們放在 /usr/bin 中;
- 無需更改 PATH
然而; 我的執行檔現在消失在所有其他執行檔中;我怎樣才能以一種簡單的方式找回我放在那裡的所有執行檔。我在想:
- /usr/bin 中的子目錄(我知道我不能這樣做;只是為了說明我的想法)
- 另一個目錄(/opt/myself/bin)並將每個執行檔連結到 /usr/bin(大量工作)
- 另一個目錄(/opt/myself/bin)並將目錄連結到 /usr/bin(這可能嗎?)
做到這一點的“最好、最符合 linux 的方式”是什麼?
編輯:我們在公司對此進行了討論,並提出了這個次優選項:將二進製文件放在 /usr/bin/company 中,並帶有來自 /usr/bin 的符號連結。我對這個解決方案不感興趣(討論正在進行中)
如果您將二進製文件捆綁到您自己的 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 Host
RPM 中的一條線。使用/usr/bin/company?
我可能不鼓勵使用這樣的位置。主要是因為它要求您的所有系統都對其進行
$PATH
擴充以包含它並且是非標準的。自定義事物一直是每個想要 Unix 管理員的“通行權”,但除非絕對必要,否則我總是不鼓勵這樣做。像這樣的定制最大的問題是,它們成為維護環境和讓新人快速了解如何使用環境的負擔。
我可以從 RPM 中獲取文件列表嗎?
是的,你可以做到這一點,但它需要 2 次呼叫 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