远离 /usr/local, /opt
- 0次
- 2021-07-20 06:04:04
- idczone
我以前安装软件喜欢自己动手编译, 绝大部分软件喜欢把 prefix 默认为 /usr/local, 我那时觉得这很好很不错, 我的软件我都要亲手编译, 都要放在 /usr/local 下.
今天我看了一篇文章才知道这实际上是个已废弃的目录, 软件安装在此目录会给系统管理等造成诸多不便, 看完这篇文章我回想了一下......
确实...过去我在本机启动个 nginx 都要 sudo /usr/local/nginx/bin/nginx, 二而不去用发行版包管理系统提供的 /etc/init.d 启动脚本, 笨拙!
唉, 不多说了, 发文章链接...
http://www.tldp.org/HOWTO/HighQuality-Apps-HOWTO/fhs.html
FHS:
http://www.pathname.com/fhs/pub/fhs-2.3.html#SRVDATAFORSERVICESPROVIDEDBYSYSTEM
一直用发行版包装的肿么救
FreeBSD还在用怎么破……
/usr/local其实是属于系统PATH的。问题在于你编译时候用了--prefix=/usr/local/nginx,
echo $PATH
/usr/local/sbin:/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/admintool/:/root/bin
正常情况下,makefile写的符合标准的话,./configure之后,默认的应该是把binary程序放到/usr/local/bin/ 或者sbin/的。
编译的软件一般放到/usr/local的原因是,如果make uninstall出问题了,确保不会把系统/bin等目录里东西删除。坏也就坏一个/usr/local目录。
连接里的文章没错,但是他对应的情况是如果打包成rpm或者deb情况。
发行版安装包的时候基本不会安装到 /usr/local 的啊
FreeBSD 目录结构不太了解耶...没有包管理系统的吗?
但我看了那篇文章之后, 觉得确实还是带给我们的麻烦多一些, 尤其是带给 sa 的麻烦, 而且, 我似乎还没用过 make uninstall XD...
在个人Mac上从来不碰系统路径的人路过。
给有系统洁癖但不得不自己编译安装的人推荐 GNU stow
“软件安装在此目录会给系统管理等造成诸多不便”,难道系统不是安装软件的人在管理,有什么不便的。
其实我认为/usr/local都算是系统目录,应用层面的程序应该全部安装在/opt。
楼主新手
tl;dr
/usr 归包管理系统;
/usr/local、/opt 归用户。
------------------------
/usr/local 就是给非包管理系统安装(比如自己编译)的情形时用的。
正如 halfbloodrock 所说,--prefix=/usr/local/nginx 已经不是标准的用法了,默认情形下(自己手动编译安装)的 prefix 是 /usr/local。再者说,无论你的 nginx 装在哪,你都可以手写一个启动脚本放到 /etc/init.d、/etc/rc
我觉得这两个目录还是有用的,一般自己编译的包 --prefix 都会指定到 /opt 然后在 /opt/etc 下面写 init.d/rc 之类的。
FreeBSD 用 ports 安装的都在 /usr/local 下面,如果用 pkg_add 的话都是在 /usr/bin|/usr/sbin 下面的。
完全可以--prefix=$HOME/$packagename。
export PATH=$PATH:$HOME/$packagename/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/$packagename/lib
习惯把软件扔到一个子目录里面呀
/usr/local/nginx
然后做 ln -s /usr/local/nginx/bin/nginx /usr/bin/nginx
这么搞呀,有的时候多装几个版本的nginx 就改下软链就好了。
编译安装后直接rm -rf 就等于把这个软件删了。。。。
不建议是针对开发linux发行版的人来说的,不是针对用户
freebsd 有两套相互融合的包管理系统:2进制包和自动源代码编译包管理系统ports,包管理系统将所有软件都装在 /usr/local 下。基本系统(内核,基本工具,基本网络工具)独立于包管理系统之外,传统上只以基本系统的源代码包形式发布更新,更新基本系统需要自己编译安装。
上面也有人提到自己装软件到 /usr/local 最好是一个软件一个独立目录。
原来如此...受教啦!感谢已送!
/usr/local, /opt
These are obsolete folders. When UNIX didn't have a package system (like RPM), sysadmins needed to separate an optional (or local) Software from the main OS. These were the directories used for that.
所以通常源码编译的软件都会进这种奇怪的地方,但是跟着系统软件包更新的那些软件,都会进系统目录,由包管理来维护。
个人比较偏向应用层的软件扔~/bin/里,比如离线下载工具啊网盘上传工具啊btsync啊,编译完了ln或者cp进去。
编译放哪儿没多大问题,个人习惯就好
像@tywtyw2002所说编译后做软连接和直接用包用的目录最好
像@dorentus所说的有些人放着/etc/init.d不用非要死磕瞎搞弄一个个性出来, 自己用还行要是换人上去维护基本都想让人跳楼, 某阿里啥云和某万啥网提供的LAMP基本就是典型类似的脑残产物.
测试下再发个/etc/init.d 会出现楼上的情况不
阿里啥云的主机可以自己装AMP的啊, 它还提供已经配置好LAMP的主机啊?
我是说官方出品的东西,不是说他主机, 请看清楚谢谢!!!
声明下观点以免误会:
1.上面想说的是"典型"案例
2.和任何主机无关