AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 14562
Accepted
ericslaw
ericslaw
Asked: 2009-05-30 05:53:57 +0800 CST2009-05-30 05:53:57 +0800 CST 2009-05-30 05:53:57 +0800 CST

跨多个供应商 *nix 平台的良好通用 PATH 是什么?

  • 772

运行异构环境始终是一项挑战。拥有一个拥有 AIX、IRIX、HPUX、Ultrix、Solaris 和多种 Linux 风格的企业,什么是一个好的通用 PATH 设置,它允许一组良好的通用命令,但还包括额外的,如“ifconfig”、“ping” ,以及默认情况下通常不存在的“make”?

systempath
  • 6 6 个回答
  • 272 Views

6 个回答

  • Voted
  1. Best Answer
    carlito
    2009-05-30T11:12:13+08:002009-05-30T11:12:13+08:00
    
    $HOME/bin:$HOME/sbin:/usr/local/bin:/usr/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/ccs/bin:/usr/ucb
    

    特别是,您不希望在 .bashrc 中盲目地添加到 $PATH ,否则您最终会在 sub-sub-sub-sub shell 上弄得一团糟。您希望包括所有 sbin 目录,因为那里可以有重要的工具。您想包含 /usr/ccs/bin:/usr/ucb ,因为 Solaris 会在其中放置一些您可能会使用的东西。

    值得注意的是,本地安装软件的选择的无限排列,例如 GNU 工具 - 通常您希望它们在系统版本之前的 PATH 中。另外,我遗漏了更可能作为历史奇闻有用的目录,例如 /etc 和 /usr/libexec。

    Solaris /usr/ccs/bin 应该在实用程序的 GNU 版本之前还是之后,一直存在争议。实际上,无论您选择哪种方式,您都会偶尔遇到问题。

    • 3
  2. dsully
    2009-05-30T11:22:17+08:002009-05-30T11:22:17+08:00

    我使用检查和测试的组合通过我的 .bashrc/.profile 在任何给定系统上设置我的路径:

    首先 - 设置一个在任何地方都应该有效的基本路径。然后你需要知道你在哪里运行:

    # 引导
    未设置路径
    PATH="/usr/bin:/bin:/sbin:/usr/sbin"
    
    # 什么是操作系统和版本?
    如果 [ -x /bin/uname ] || [ -x /sbin/uname ] || [ -x /usr/bin/uname ]; 然后
        操作系统=`uname -s`
    别的
        操作系统=“未知”
    菲
    

    然后您可以添加操作系统特定的路径:

    案例 $OS 在
        Linux)
            ...
        ;;
        SunOS|Solaris)
            ck_add2path /usr/ucb /usr/ccs/bin
        ;;
    经社理事会
    

    其中 ck_add2path 定义为:

    函数 add2path () {
        对于 ${1+"$@"} 中的 NEWPATH;做
            如果 [ -z "$PATH" ] ; 然后
                导出 PATH="$NEWPATH"
            elif [ -z `echo ":$PATH:"|grep $NEWPATH` ] ; 然后
                导出 PATH="$PATH:$NEWPATH"
            菲
        完毕
        未设置新路径
    }
    
    函数 ck_add2path () {
        对于 ${1+"$@"} 中的 NEWPATH;做
            NEWPATH=`回显 $NEWPATH | sed 's/\/\//\//g'`
            如果 [ -d $NEWPATH ]; 然后
                add2path $NEWPATH
            菲
        完毕
        未设置新路径
    }
    
    • 2
  3. Xerxes
    2009-05-30T06:18:33+08:002009-05-30T06:18:33+08:00

    对于root用户,我会非常小心;我的意思是不要尝试使用通用路径,如果必须,请按操作系统执行。

    UNAME=`uname -s`
    if [ "x${UNAME}" = "xLinux" ]; then
    elif ....
    

    一点额外的工作,但你不想要任何惊喜。

    对于非root,有这么多...

    • /{bin,sbin}
    • /usr/{bin,sbin}
    • /opt/{bin,sbin}
    • /usr/local/{bin,sbin}
    • /sw/bin

    我过去遇到的问题,特别是 AIX 的问题,是对于某些命令,您希望您的 3rd 方安装优先,因此例如将 /opt/bin 放在 /bin 之前。后来的事情发生了,因为其他实用程序依赖 PATH 为它们提供 /bin/ 中的本机工具。

    • 1
  4. pjz
    2009-05-30T05:58:41+08:002009-05-30T05:58:41+08:00

    它们在“那里”,但通常在 /sbin 和/或 /usr/sbin 中。我的 .bashrc 包括:

    # I'm a sysadmin, RAAR!
    PATH="${PATH}":/usr/sbin:/sbin
    
    # set PATH so it includes user's private bin if it exists
    if [ -d ~/bin ] ; then
        PATH=~/bin:"${PATH}"
    fi  
    
    • 0
  5. ericslaw
    2009-05-30T16:49:07+08:002009-05-30T16:49:07+08:00

    我开始在修改它之前保存我的旧路径,以便随后对我的启动脚本的调用不会导致 PATH 值不断增加......但过了一段时间我最终只是将它设置为一个很好的经验建立的基线。

    我想要 X11(即使只是resize在远程 ssh 会话上调用 eval 来建立 COLUMNS 和 LINES 环境变量)

    我添加了 /usr/css/bin 因为我的一些裸安装的 solaris 在路径中没有 make(甚至更少甚至有 cc 或 gcc!)

    当然,添加了 /usr/local/ 路径集,然后在我的 homedir(有和没有架构特定路径)和“.”中添加内容。

    带有“。”的行 但是,如果您是 root,那么在路径中是有问题的。

    OLDPATH=/bin:/usr/bin:/usr/5bin:/usr/bsd:/usr/ucb:/sbin:/usr/sbin
    路径=${旧路径}
    PATH=${PATH}:/usr/openwin/bin:/usr/bin/X11:/usr/local/X11/bin
    PATH=${PATH}:/usr/ccs/bin
    PATH=/usr/local/bin:${PATH}
    PATH=${PATH}:/etc:/usr/etc:/usr/local/etc
    PATH=.:${HOME}/bin/`uname`:${HOME}/bin:${PATH}
    导出路径
    

    到目前为止,此设置在 AIX、HPUX、IRIX、Ultrix、Solaris 和 Linux 上为我提供了很好的服务。甚至可能在那些古老的阿波罗上(有人看到 /usr/5bin 了吗?)

    • 0
  6. Norman Ramsey
    2009-05-30T20:08:26+08:002009-05-30T20:08:26+08:00

    我第二次使用 dsully 的程序化方法来测试目录和添加路径。另外,当我添加$dir到时$PATH,我通常会添加$dir/../man到$MANPATH(如果存在)。

    • 0

相关问题

  • windows vista系统环境路径下如何添加文件夹?

  • PATH 中映射的网络驱动器导致延迟

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve