【问题标题】:How can I use the /home directory on Mac OS X如何在 Mac OS X 上使用 /home 目录
【发布时间】:2009-09-01 14:08:59
【问题描述】:

我有一台可以运行 Leopard (10.5) 或 Snow Leopard (10.6) 版本的 OS X 的 Mac。在将文件发布到我的生产主机之前,我正在使用它进行 Web 开发/测试。

在生产主机上,我网站的文档根目录位于主目录下(例如 /home/stimulatingpixels/public_html),我想在 Mac 上复制该位置。不幸的是,它们是 Mac 上的一个隐藏和锁定占位符,看起来像一个安装在 /home 位置的驱动器,里面什么都没有。

根据经验,我知道将其移动并放入您自己的 /home 目录是不明智的,因为升级可能会导致它被擦除(顺便说一下,它不会存储在 TimeMachine 备份中)。

那么,问题是,在 Mac 上是否可以安全地使用 Leopard 或 Snow Leopard 上的 /home?

(注意:我意识到这是非常特定于 Mac 的,并且也会在 Apple 论坛中提问。除了涵盖所有基础之外,我只想在这里提问。)

更新:为了帮助描述我为什么要这样做,除了前端网站之外,我还有一系列我想运行的脚本。能够使用 /home 目录(更具体地说是从服务器根目录的相同路径)的主要目标之一是,可以在开发 mac 上使用相同的输出路径,也可以在生产服务器上使用。我知道有办法解决这个问题,但我宁愿不必处理它。真正的目标是让开发 Mac 上的所有文件在目录树的 / 根目录中具有与生产服务器相同的文件路径。

另一个更新:我之前忘记提到的另一个原因是在使用基本身份验证时设置 .htaccess 路径。由于这些路径来自文件系统根目录而不是网站 docroot,因此当它是树的一部分时,它们最终会通过“/home”。

【问题讨论】:

  • 听起来您正在使用 Wordpress 或其他不能很好地处理本地开发的 CMS。
  • 我在上面添加了更新。实际上更多的是关于我运行的辅助脚本,并希望它们在开发 Mac 上与生产服务器具有相同的文件路径。
  • 注意:这可能是特定于 Mac 的,最好在苹果支持网站上询问。为了涵盖所有基础,我在这里提出了同样的问题:discussions.apple.com/…
  • 您的苹果支持论坛链接已失效

标签: macos directory-structure


【解决方案1】:

注意:截至 2015 年,我不再使用或推荐这种方法。相反,我使用Vagrant 来设置虚拟机以进行开发和测试。它是免费的,相对简单,并且可以更好地匹配生产环境。它完全分离了开发环境,您可以根据需要制作任意数量的开发环境。 强烈推荐。为了后代,我将在下面留下原始答案。


我找到了答案here on the Apple forums

为了回收/home 目录,编辑/etc/auto_master 文件并注释掉(或删除)其中包含/home 的行。在此之后,您需要重新启动才能使更改生效(或者,根据 nilbus 的评论,尝试运行 sudo automount -vc)。这适用于 Mac OS X 10.5 (Leopard)。对于不同的版本,您的 Millage 可能会有所不同,但应该是相似的。

正如该论坛帖子中所述,您还应该知道Time Machine 会自动排除/home 目录并且不会对其进行备份


请注意,在进行系统更新之前,请务必手动备份您的 /home 目录。我相信我所做的更新之一(例如从 10.6 到 10.7)在没有警告的情况下清除了我存储在 /home 中的内容。我不是 100% 确定这就是发生的事情,但这是需要注意的事情。

【讨论】:

  • 无需重启;只需运行:sudo automount -vc
  • Apple 更改了其论坛的 URL 格式。我已经更新了指向新位置的链接。
  • 然后又消失了,在他的网络档案中也没有,这是 SO/SE 的另一个强项!
【解决方案2】:

根据上面的提示和提示将所有内容放在一起:

  • edit /etc/auto_master # 注释掉包含/home的行。

  • 重新安装:

    sudo automount -vc

  • 对 mac-ified 目录进行软链接:

    sudo ln -s $HOME /home/$USER

此时,您的路径应该与您的生产路径相匹配。 env vars 仍将指向/Users/xxxx,但您在.bashrc 中的路径中硬编码的任何内容——或者说,在~/.pip/pip.conf 中——应该基本上是等价的。为我工作。

re: “真正的目标是让开发 Mac 上的所有文件与生产服务器的目录树的 / 根目录具有相同的文件路径。”

在生产中,我的部署工作可能发生在/opt/projects/projname,所以我会确保我的帐户可以写入/opt/projects 并从那里开始。我会先做这样的事情:

sudo mkdir /opt/projects sudo chown $USER /opt/projects mkdir /opt/projects/projname cd /opt/projects/projname

使用 LVM,我将为/opt/ 设置一个单独的分区,并在那里写入应用程序数据而不是$HOME。然后,我可以在需要更多磁盘空间用于项目的情况下扩展 /opt 文件系统(LVM 是你的朋友。)

【讨论】:

    【解决方案3】:

    我在 Yosemite (OS X 10.10.1) 上尝试过,sudo automount -vc 不起作用,我不得不使用 sudo umount /home

    因此我的工作流程是:

    # comment out line starting with /home sudo vi "+g/^\/home/s/\//#\//" "+x" /etc/auto_master sudo umount /home # link actual home directory (/Users/<user>) to new 'home' (/home/<user>) ln -s $HOME /home/$USER

    【讨论】:

      【解决方案4】:

      我将之前的解决方案改编为 Big Sur (macOS 11.2),由于 APFS 文件系统的更改,这有点复杂。我设法通过以下步骤更改了/home

      1. 按照 Alan W. Smith 的建议,注释掉 /etc/auto_master 中的 /home 条目。
      2. 按照 Marco Torchiano 的建议,运行
        sudo umount /home
        
      3. 由于/home 当前是/System/Volumes/Data/home 的只读链接,您必须更改后者。我用以下命令做到了:
        cd /System/Volumes/Data/
        sudo rmdir home
        sudo ln -s <some other directory> home
        

      【讨论】:

        【解决方案5】:

        为什么不直接运行 MAMP 并使用站点目录?您可以在 localhost 之外进行开发,只需为您的站点设置一堆别名。我不确定您为什么特别需要使用主目录。


        编辑: 好的,我认为您正在以错误的方式解决问题。

        如果您担心的是 HTML 路径,则以斜杠“/”开头,这将默认为主目录。

        如果它是您的 PHP 中的引用,那么您需要创建一个全局(或类似的)并将其设置为您网站的根目录。然后,您可以引用全局中的所有内容,当您将站点从开发移至生产时,您需要更改的只是全局。

        尝试以迂回的方式从 /home 进行开发,因为它看起来更像是生产服务器是一个坏主意。

        安装 MAMP,在层次结构的较高位置创建全局并开始重新引用。从长远来看,它会减少痛苦。

        【讨论】:

        • 网络服务器不是问题。我对运行 apache 很好。我真正想要的是使用 /home 目录本身。无论使用何种服务器,同样的问题都适用。我将在上面添加评论,但真正的原因是我运行了一些本地脚本,并且我希望能够在本地开发盒上定义路径,以便它们与生产中的路径匹配。这样,我就不必在部署期间更改它们。
        • 只需使用符号链接,让您的本地脚本认为它在 /home 目录上运行。
        • 但这就是使用像 MAMP 这样的环境的目的......所以您可以根据自己的喜好设置开发环境,并且路径应该完全相同。您使用的是相对路径还是精确路径?
        • Matt:符号链接在此目录中不起作用。例如,现在,我将 docroot 设置为“/www/stimulatingpixels/”,但如果我这样做:“sudo ln -s /www/stimulatingpixels/ /home/stimulatingpixels”,则响应为:“ln: / home/stimulatingpixels:不支持操作” Evernoob:我正在使用精确的路径,而这正是我正在努力的目标。与网络服务器本身无关,而是能够在 Mac 上的 /home 目录下的位置创建文件,这与在生产服务器上的位置相同。 (这主要是针对网站本身之外的其他脚本。)
        • Evernoob:支持我关注的站点的确实是 Perl 脚本。正如您所提到的,PHP 的东西不是问题。我在必要时使用 $_SERVER['DOCUMENT_ROOT'] 来访问网站的 docroot。我想做的是支持 perl 脚本(例如,一个访问外部站点并在特定路径创建包含文件的脚本)设置,因此 dev 和 prod 上的输出路径相同。我知道有办法解决这个问题,但我有兴趣看看是否有一种我不需要的方法。这样一来,我的开发环境和产品环境就会尽可能相似。
        猜你喜欢
        • 2017-07-30
        • 1970-01-01
        • 2012-04-08
        • 1970-01-01
        • 2010-09-27
        • 1970-01-01
        • 2012-01-14
        • 1970-01-01
        • 2012-02-29
        相关资源
        最近更新 更多