如何在Mac OS X上使用/home目录

47
我有一台Mac电脑,可以运行Leopard(10.5)或Snow Leopard(10.6)版本的OS X。我使用它在发布文件到生产主机之前进行Web开发和测试。
在生产主机上,我的网站文档根目录位于主目录下(例如/home/stimulatingpixels/public_html),我想在Mac上复制该位置。不幸的是,在Mac上存在一个隐藏的、锁定的占位符,看起来像是挂载的驱动器,但在/home位置中什么也没有。
根据我的经验,将其移动并放入自己的/home目录是不明智的,因为升级可能导致其被删除(顺便说一下,它也不会存储在TimeMachine备份中)。
因此,问题是,是否有办法安全地在Leopard或Snow Leopard上使用/home?
(注意:我意识到这非常与Mac有关,我也会在Apple论坛上提问。只是想在这里额外询问以涵盖所有基础。)
更新:为了帮助描述为什么我要这样做,除了前端网站,我还有一系列脚本要运行。能够使用/home目录(更具体地说是与服务器根目录相同的路径)的主要目标之一是使得开发mac上可以使用与生产服务器上相同的输出路径。我知道有方法可以解决这个问题,但我宁愿不要去处理它。真正的目标是让开发Mac上的所有文件都具有与生产服务器相同的目录树/根目录下的相同文件路径。
另一个更新:我之前忘记提到的另一个原因是在使用基本身份验证时设置.htaccess路径。由于这些路径来自文件系统根而不是网站文档根目录,当/home是目录树的一部分时,它们最终会通过“/home”进行传递。

听起来你正在使用WordPress或其他CMS,这些系统不能很好地处理本地开发。 - Matt Ball
我在上面添加了一个更新。这更多关于我运行的次要脚本,希望它们在开发Mac和生产服务器上具有相同的文件路径。 - Alan W. Smith
1
注意:这可能是针对Mac特定的问题,最好在苹果支持网站上询问。为了覆盖所有情况,我在这里提出了基本相同的问题:http://discussions.apple.com/thread.jspa?threadID=2138336&stqc=true - Alan W. Smith
您的苹果支持论坛链接已失效。 - user2493235
5个回答

63

注意:截至2015年,我不再使用或推荐此方法。相反,我使用Vagrant来设置用于开发和测试的虚拟机。它是免费的,相对容易使用,并且可以更好地匹配生产环境。它完全分离了开发环境,您可以根据需要创建任意数量。 强烈推荐。出于纪念的目的,我将保留以下原始答案。


我在苹果论坛上这里找到了一个答案。

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

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


一个警告,请确保在进行系统更新之前手动备份您的/home目录。我相信我所做的其中一个更新(例如从10.6到10.7)没有警告就擦除了我存储在/home中的内容。我不能百分之百确定发生了什么,但这是需要注意的事项。


12
无需重新启动,只需运行命令:sudo automount -vc。 - Edward Anderson
苹果公司更改了其论坛网址的格式。我已经更新了链接,使其指向新位置。 - Alan W. Smith
1
并且自那时起就再也没有出现过,也不在网络档案馆中,这是SO/SE的又一个优点! - Pysis

12

将上述提示和提示整合起来:

  • 编辑/etc/auto_master # 将包含/home的行注释掉。

  • 重新挂载:

    sudo automount -vc

  • 为Mac文件夹创建软链接:

    sudo ln -s $HOME /home/$USER

此时,您的路径应与生产路径匹配。 env变量仍将指向/Users/xxxx,但您在.bashrc或者例如~/.pip/pip.conf中硬编码的任何路径都应基本等效。对我有效。

关于:“真正的目标是让开发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是您的朋友)。


12

我在Yosemite(OS X 10.10.1)上尝试了一下,sudo automount -vc不起作用,我必须使用sudo umount /home

因此,我的工作流程如下:

#注释掉以"/home"开头的行 sudo vi "+g/^\/home/s/\//#\//" "+x" /etc/auto_master sudo umount /home #将实际的主目录(/Users/<user>)链接到新的“home”目录(/home/<user>) ln -s $HOME /home/$USER


2

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

  1. As recommended by Alan W. Smith, comment out the /home entry in /etc/auto_master.
  2. As suggested by Marco Torchiano, run
    sudo umount /home
    
  3. Since /home is currently a read-only link to /System/Volumes/Data/home, you have to change the latter. I did it with the following commands:
    cd /System/Volumes/Data/
    sudo rmdir home
    sudo ln -s <some other directory> home
    

-1
为什么不直接运行MAMP并使用Sites目录呢?您可以在本地主机上进行开发,并为您的站点设置一堆别名。我不确定为什么您需要特别使用主目录。

编辑:

好的,我认为你解决问题的方式是错误的。

如果你担心HTML路径的问题,那么请在每个路径前加上斜杠“/”,这将默认为主目录。

如果你担心PHP中的引用问题,那么你需要创建一个全局变量(或类似的变量),并将其设置为站点的根目录。然后你可以从全局变量引用所有内容,当你将站点从开发环境移动到生产环境时,你只需要更改全局变量即可。

试图通过/home这样的方式来进行开发,因为它看起来更像生产服务器,这是一个不好的想法。

安装MAMP,在层次结构中的高处创建全局变量,并开始重新引用。这样做会减少长期的痛苦。


Web服务器不是问题。我很满意使用Apache。我真正想要的是使用/home目录本身。无论使用哪个服务器,都会遇到相同的问题。我将在上面添加一条注释,但真正的原因是我有一些本地脚本需要运行,我希望能够定义本地开发框中的路径,以便与生产环境中的路径匹配。这样,在部署过程中就不必处理更改路径的问题了。 - Alan W. Smith
只需使用符号链接,让您的本地脚本认为它正在操作/home目录。 - Matt Ball
但这就是使用像MAMP这样的环境的原因...这样你就可以按照自己的喜好设置开发环境,路径应该完全相同。你是在使用相对路径还是绝对路径? - Evernoob
2
Matt:在这个目录中符号链接无法工作。例如,现在,我将docroot设置为“/www/stimulatingpixels/”,但如果我执行:“sudo ln -s /www/stimulatingpixels/ /home/stimulatingpixels”,则响应是:“ln:/home/stimulatingpixels:不支持的操作”Evernoob:我正在使用确切的路径,这真的是我想要的。这与Web服务器本身无关,而是能够在Mac上的/home目录下创建与生产服务器相同的位置的文件的能力。(在很大程度上,这是为了站点本身之外的其他脚本。) - Alan W. Smith
Evernoob:我主要关注支持网站的Perl脚本。正如你所提到的,PHP并不是问题。当需要时,我使用$_SERVER['DOCUMENT_ROOT']来获取网站的文档根目录。我想做的是设置支持perl脚本(例如,一个访问外部网站并在特定路径创建包含文件的脚本)以便在开发和生产环境中输出路径相同。我知道有方法可以解决这个问题,但我很想看看是否有一种方法可以避免这种情况。这样,我就可以尽可能地使我的开发和生产环境保持相似。 - Alan W. Smith
这不是对所提出问题的回答(而且该问题实际上应该在另一个 Stack Exchange 网站上提出)。 - Iain Collins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接