Mac OS X - Как сделать Symlink / home to / Users

14

Для тех из нас, кто интересуется пингвинами и яблоками, очень важно иметь возможность использовать / home пути вне привычки или для тех странных случаев, когда значение могло быть синхронизировано где-то вдоль строки в каком-то файле, который вы использовать на обеих машинах.

anthonyryan1
источник
6
~usernameрасширяется до вашего домашнего каталога независимо от Mac OSX или Linux.
nohillside
1
Я знаю об этом, но некоторые кроссплатформенные приложения сохраняют абсолютные пути. Примером является Sublime Text 2.
anthonyryan1
1
На самом деле просто ~расширяется до вашего домашнего каталога. Не могли бы вы уточнить в своем вопросе, хотите ли вы использовать символическую ссылку на домашний каталог пользователя (т.е. /Users/[username]) или на самом деле сам каталог пользователя ( /Users/), который содержит отдельные каталоги для всех пользователей на машине?
умный битник

Ответы:

19

sudo ln -s /Users /homeбудет работать с дополнительной конфигурацией, но я не думаю, что это хорошая идея, так как вы должны получить доступ к дому через ~в оболочке или $HOME. Также /homeможет быть стандартом Linux и часто используется в Unix, но не всегда так лучше полагаться на информацию, которая гарантированно работает, а не на то, что работает большую часть времени, если все придерживаются соглашения.

Чтобы сделать sudo ln -s /Users /homeработу, выполните следующие действия (из комментариев):

EDITOR=nano sudo -e /etc/auto_master
# add a "#" at the start of the line beginning with /home
# save changes
sudo automount -cv
sudo ln -s /Users /home
user151019
источник
7
Сначала отредактируйте /etc/auto_masterи закомментируйте домашнюю линию. Затем перезагрузитесь, чтобы освободить существующий ресурс / home. Затем вы можете использовать символическую ссылку на каталог, используя следующее. ln -s /Users /home, Пока вы не сделаете это, вам просто не разрешат создавать символическую ссылку, поскольку ресурс занят.
anthonyryan1
@AR. Есть ли потенциальные негативные последствия этого (или почему это происходит в первую очередь?). И мне не разрешено редактировать его даже как root или после chmod + w / etc / auto_master есть другой способ?
Abe
2
-1. Это приводит к operation not supportedсообщению
Abe
2
@Abe Это не так, если вы следуете указаниям @ AR. Обратите внимание, что вам не нужно перезагружаться; ты можешь бежать sudo automount -cvвместо этого.
зигг
@ Зигг, спасибо. Но это все еще не делает ответ полным. Я предложу правку - я все равно не могу понизить голос!
Abe
5

Я сожалею, что этот ответ не является абсолютно авторитетным, поскольку я никогда не делал этого сам - хотя я использовал подобный автомонтировщик в других системах Unix - но вот мое понимание того, для чего /homeиспользуется в OS X.

Итак, давайте пойдем по следу:

Если вы сначала наберете « mountТерминал», чтобы отобразить активные подключения, вы увидите следующую строку:

map auto_home on /home (autofs, automounted, nobrowse)

autofsкарты определены в /etc/auto_master, и /home, в свою очередь, определены конкретно в /etc/auto_home. Если вы посмотрите на /etc/auto_home, вы увидите эту строку:

+/usr/libexec/od_user_homes

Следуйте по следу еще на один шаг к странице руководстваod_user_homes , и вы найдете программу, цель которой - взять имя пользователя, найти его в Open Directory и вернуть URL в домашний каталог этого пользователя. Если вы прочитаете auto_masterна его странице руководства , вы обнаружите, что использование исполняемой программы для карты приводит к тому, что эта программа вызывается для поиска URL-адреса для монтирования, который, в свою очередь, монтируется на месте.

Предполагается, что предполагаемое приложение заключается в том, что, если ваш Mac подключен к службе каталогов, переход к нему /home/jdoeприведет к тому, что автомонтировщик смонтирует там jdoeдомашний каталог.

Исходя из этого, кажется логичным заключить, что если вы не собираетесь подключать свой Mac к службе каталогов, вы, вероятно, в порядке, удалив /homeавтоматическое монтирование, как описано в этом комментарии . Я не знаю, как будущие обновления ОС будут иметь дело с этим, хотя.

zigg
источник
1
Мне нравится использовать автомонтер, а не отключать его. Поэтому я бы позволил автомонтированию монтировать / Users / $ USER на / home / $ USER. Интересно, это так же просто, как заменить эту строку в / etc / auto_home чем-то вроде «+ / bin / echo / home / $ 1», или если вы хотите правильно обработать ошибку, создайте сценарий, который повторяет то, что делает od_user_homes
Тим Б
@TimB Интересная мысль. Немного поиграв с этим, я не совсем уверен, что вы можете указать локальный путь, с которым automountdбудете иметь дело. Кажется возможным сделать NFS, SMB и AFS.
зигг
Я не знаю, работает ли это на Linux, но это было то, что я всегда делал на Solaris. Настоящий каталог был / export / home / $ USER, и была стандартная конфигурация для автоматического подключения к / home / $ USER. На самом деле, похоже, что теперь это стандартная конфигурация в Solaris 11.x в соответствии с blogs.oracle.com/observatory/entry/automounting_home_directory
Tim B
1
Я просто посмотрел быстро. Вам даже не нужно имитировать исполняемую карту od_user_homes. Вот только чтобы поддержать ОД. Возможно обычное автоматическое подключение / Users / $ USER к / home / $ USER. Он показан на странице справки auto_master, хотя в приведенном здесь примере показаны удаленные монтирования NFS, а не локальные каталоги, он также должен работать локально.
Тим Б
Возможно, я делал что-то не так, но я попытался настроить локальный путь, где я мог использовать монтирование NFS и получил Input/output errorпри попытке cd. Из моего чтения выглядело так, как будто я мог использовать только NFS, SMB или AFS, как я уже сказал. Но, может быть, мы должны провести эту линию экспериментов в другом месте ...
Зигг
2

Там нет смысла для /home. OS X, как и другие версии Unix, имеет уникальное местоположение для пользователя. В Linux это в /home/user, и в OS X это в /Users. Вот почему рекомендуется использовать сокращение " ~" или переменную окружения $HOME.

Хотя вы можете создать символическую ссылку на каталог пользователя base / home, /Users/[username]используя следующую команду:

ln -s ~ /foo

Это не будет работать, чтобы создать ссылку с именем, так /homeкак уже есть (n неиспользуемый) каталог с таким именем в корне системы.

cleverbit
источник
1
Точно. Я был на других Unix-подобных системах, которые использовали различные соглашения для домашних каталогов по разным причинам, например /export/home/usernameна Solaris. Это плохая практика, чтобы предположить, /home/usernameбудет работать Программы, ищущие домашние каталоги, должны использовать getpwnamили getpwuid.
зигг
1
Я полностью согласен с тем, что для программ считается плохой практикой предполагать, что они существуют, но это не означает, что иногда программное обеспечение не разрабатывается компетентным образом.
anthonyryan1
Среди маунтов в моем случае и других: map auto_home on /home (autofs, automounted, nobrowse)… хотя я не знаю происхождение этого маунта, я должен не согласиться с «бесполезным для /home».
Грэм Перрин
Извините, должно быть, было понятнее: просто подразумевается, что /homeон явно зарезервирован, но не используется в OSX, а не то, что нет смысла его использовать;)
cleverbit
@ Richarddas Я получаю ту же operation not supportedошибку, sudo ln -s /Users/username /home/usernameчто и я sudo ln -s /Users /home. Решение, предоставляемое @AR работает (закомментируйте /homeстроку /etc/auto_masterи перезагрузите компьютер).
Abe
1

Я не вижу никакой причины вообще не переименовывать каталог / home (в случае, если я ошибаюсь) и создавать символическую ссылку из / home на / Users (или, как на моем компьютере, / Volumes / Users, так как моя система диск для системы, черт побери!)

Я работал системным администратором в университетском отделе с 11 разновидностями Unix. У нас были все виды символических ссылок в глобальном дереве каталогов, чтобы файловая система работала правильно, а сценарии были максимально приближены к работе везде. Вы сталкиваетесь с несколькими затруднениями, но если ваши пальцы привыкли печатать / home / foo, а символическая ссылка откладывает переобучение для ваших пальцев, идите!

Аналогично, некоторые linuxen уже будут иметь домашние каталоги как / usr / home.

В одном месте, где я работал, имелись домашние каталоги / Users / {group} / {username} в качестве частичной защиты от студентов, которые копались в файлах профессора, если проф был небрежен со своими разрешениями. Каталог Users выполнил, но не установил биты чтения, и каталоги группы были доступны для чтения только членам группы.

(Все это наглядно показывает, что существует множество способов лишить этого особого кошачьего шкуры.

Одна возможная ошибка - проверьте, что машина времени не делает две копии всего. Я не знаю, как ТМ обрабатывает символические ссылки. Если это так, то добавьте / home в список исключений ТМ.

Шервуд Ботсфорд
источник
1
Если что-то или кто-то установит неподходящий режим или ACL для вашей альтернативы, /Usersто знакомые процедуры восстановления разрешений, вероятно, не смогут внести необходимые исправления. Поэтому я рекомендую, /Usersчтобы они были установлены Apple: каталог, а не символическая ссылка.
Грэм Перрин
0

Я пробовал это раньше и работал около недели, пока не перезагрузился ...

Вы не можете просто символическую ссылку /homeна /Users. На самом деле, вы даже не можете удалить /home.

Если вам удастся удалить /home, он появится снова после перезагрузки.

Если вы перейдете /homeк /home.oldсимволической ссылке /home, она удалит символическую ссылку /home.

Это может работать до тех пор, пока ваш Mac не зависнет или не перезагрузится.

При перезагрузке все пропадает!

Когда вы перезагружаетесь, Mac OS X, кажется, думает, что вы создаете нового пользователя, поэтому он перезапишет все ваши пользовательские настройки в вашем старом /Users/usernameкаталоге.

Поскольку вы скопировали все в /home/username, вы ожидаете увидеть свой новый домашний каталог при выполнении ls /homeпосле перезагрузки. Вместо этого вы НИЧЕГО не получаете !!! Как будто его никогда не было.

В моем случае я волновался около 30 минут, затем я загрузился в однопользовательском режиме, чтобы посмотреть, можно ли что-то сделать. Я думал, что я мог бы получить файл журнала или попытаться запустить утилиту восстановления.

В однопользовательском режиме мой домашний каталог был там. Apple намеренно скрывает любые новые каталоги /homeот пользователя в многопользовательском режиме. Это намеренно злая особенность дизайна.

Apple хромает и не поощряет любые взломы своих ОС. Что это за особенность дизайна? Apple скрывает содержимое только что созданного /homeкаталога. У Apple нет абсолютно никакой законной причины автоматически удалять /homeкаталог ... или любые созданные пользователем каталоги!

В этом случае они монтируют каталог над вашим каталогом / home ... фактически скрывая его.

Если вы действительно решили использовать /homeвместо /Users, вы могли бы обойти это, написав сценарий, чтобы настроить все при каждой загрузке.

Кроме того, я должен отметить, что вы должны иметь возможность использовать какой-то другой каталог, который не /homeявляется заменой, /Usersпотому что только /homeзапрещен.

Если вы используете bash, вам придется установить некоторые переменные окружения ... а именно: CD_HOMEи HOME.

Я хочу добавить, что ... хотя вы не можете размонтировать или принудительно размонтировать /home, вы можете смонтировать диск поверх /home. Все это установлено на вершине "auto_home".

Мне удалось смонтировать диск восстановления поверх /homeуспешно ... возможно, это то, как это можно сделать.

Тим
источник
TL / DR; возможность повторной загрузки с защитой от
взлома