远离 /usr/local, /opt - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
mantianyu
V2EX    Linux

远离 /usr/local, /opt

  •  
  •   mantianyu 2013-11-19 11:45:35 +08:00 13310 次点击
    这是一个创建于 4419 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我以前安装软件喜欢自己动手编译, 绝大部分软件喜欢把 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
    22 条回复
    ichou
        1
    ichou  
       2013-11-19 11:50:44 +08:00
    一直用发行版包装的肿么救
    raptor
        2
    raptor  
       2013-11-19 11:56:10 +08:00
    FreeBSD还在用怎么破……
    halfbloodrock
        3
    halfbloodrock  
       2013-11-19 12:00:43 +08:00   1
    /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情况。
    mantianyu
        4
    mantianyu  
    OP
       2013-11-19 12:15:51 +08:00
    @ichou 发行版安装包的时候基本不会安装到 /usr/local 的啊
    mantianyu
        5
    mantianyu  
    OP
       2013-11-19 12:18:01 +08:00
    @raptor FreeBSD 目录结构不太了解耶...没有包管理系统的吗?

    @halfbloodrock 但我看了那篇文章之后, 觉得确实还是带给我们的麻烦多一些, 尤其是带给 sa 的麻烦, 而且, 我似乎还没用过 make uninstall XD...
    mamimoluo
        6
    mamimoluo  
       2013-11-19 12:19:17 +08:00
    在个人Mac上从来不碰系统路径的人路过。
    sinxccc
        7
    sinxccc  
       2013-11-19 12:22:58 +08:00   1
    给有系统洁癖但不得不自己编译安装的人推荐 GNU stow
    meta
        8
    meta  
       2013-11-19 12:26:59 +08:00   1
    “软件安装在此目录会给系统管理等造成诸多不便”,难道系统不是安装软件的人在管理,有什么不便的。

    其实我认为/usr/local都算是系统目录,应用层面的程序应该全部安装在/opt。
    steptodream
        9
    steptodream  
       2013-11-19 12:29:49 +08:00
    楼主新手
    dorentus
        10
    dorentus  
       2013-11-19 12:31:35 +08:00   1
    tl;dr
    /usr 归包管理系统;
    /usr/local、/opt 归用户。

    ------------------------

    /usr/local 就是给非包管理系统安装(比如自己编译)的情形时用的。

    正如 halfbloodrock 所说,--prefix=/usr/local/nginx 已经不是标准的用法了,默认情形下(自己手动编译安装)的 prefix 是 /usr/local。再者说,无论你的 nginx 装在哪,你都可以手写一个启动脚本放到 /etc/init.d、/etc/rc
    infong
        11
    infong  
       2013-11-19 12:48:24 +08:00
    我觉得这两个目录还是有用的,一般自己编译的包 --prefix 都会指定到 /opt 然后在 /opt/etc 下面写 init.d/rc 之类的。

    FreeBSD 用 ports 安装的都在 /usr/local 下面,如果用 pkg_add 的话都是在 /usr/bin|/usr/sbin 下面的。
    efi
        12
    efi  
       2013-11-19 13:08:12 +08:00
    完全可以--prefix=$HOME/$packagename。
    export PATH=$PATH:$HOME/$packagename/bin
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/$packagename/lib
    tywtyw2002
        13
    tywtyw2002  
       2013-11-19 13:10:21 +08:00
    习惯把软件扔到一个子目录里面呀

    /usr/local/nginx
    然后做 ln -s /usr/local/nginx/bin/nginx /usr/bin/nginx
    这么搞呀,有的时候多装几个版本的nginx 就改下软链就好了。
    编译安装后直接rm -rf 就等于把这个软件删了。。。。
    ShiningRay
        14
    ShiningRay  
       2013-11-19 13:34:44 +08:00
    不建议是针对开发linux发行版的人来说的,不是针对用户
    likuku
        15
    likuku  
       2013-11-19 14:01:35 +08:00   1
    @mantianyu freebsd 有两套相互融合的包管理系统:2进制包和自动源代码编译包管理系统ports,包管理系统将所有软件都装在 /usr/local 下。基本系统(内核,基本工具,基本网络工具)独立于包管理系统之外,传统上只以基本系统的源代码包形式发布更新,更新基本系统需要自己编译安装。

    上面也有人提到自己装软件到 /usr/local 最好是一个软件一个独立目录。
    mantianyu
        16
    mantianyu  
    OP
       2013-11-19 14:22:44 +08:00
    @likuku 原来如此...受教啦!感谢已送!
    msg7086
        17
    msg7086  
       2013-11-19 17:08:42 +08:00
    /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进去。
    Kvm
        18
    Kvm  
       2013-11-19 18:02:49 +08:00   1
    编译放哪儿没多大问题,个人习惯就好
    像@tywtyw2002所说编译后做软连接和直接用包用的目录最好
    像@dorentus所说的有些人放着/etc/init.d不用非要死磕瞎搞弄一个个性出来, 自己用还行要是换人上去维护基本都想让人跳楼, 某阿里啥云和某万啥网提供的LAMP基本就是典型类似的脑残产物.
    Kvm
        19
    Kvm  
       2013-11-19 18:03:54 +08:00
    测试下再发个/etc/init.d 会出现楼上的情况不
    mantianyu
        20
    mantianyu  
    OP
       2013-11-19 18:43:11 +08:00
    @Kvm 阿里啥云的主机可以自己装AMP的啊, 它还提供已经配置好LAMP的主机啊?
    Kvm
        21
    Kvm  
       2013-11-19 18:47:23 +08:00
    @mantianyu 我是说官方出品的东西,不是说他主机, 请看清楚谢谢!!!
    Kvm
        22
    Kvm  
       2013-11-19 18:51:04 +08:00
    声明下观点以免误会:
    1.上面想说的是"典型"案例
    2.和任何主机无关
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     939 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 22:36 PVG 06:36 LAX 14:36 JFK 17:36
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86