Mac OS X - jak Symlink / home to / Users

14

Dla tych z nas, którzy bawią się w pingwiny i jabłka, warto skorzystać ze ścieżek / home poza nawykiem lub w tych dziwnych przypadkach, w których wartość mogła zostać zsynchronizowana gdzieś wzdłuż linii w pliku używać na obu maszynach.

anthonyryan1
źródło
6
~usernamerozwija się do katalogu domowego bez względu na Mac OSX lub Linux.
nohillside
1
Jestem tego świadomy, ale niektóre aplikacje wieloplatformowe zapisują ścieżki bezwzględne. Przykładem jest Sublime Text 2.
anthonyryan1
1
W rzeczywistości po prostu ~rozwija się do twojego katalogu domowego. Czy możesz wyjaśnić w swoim pytaniu, czy chcesz utworzyć dowiązanie symboliczne do katalogu domowego użytkownika (tj. /Users/[username]), Czy w rzeczywistości samego katalogu użytkownika ( /Users/), który zawiera osobne katalogi dla wszystkich użytkowników na komputerze?
cleverbit

Odpowiedzi:

19

sudo ln -s /Users /homebędzie działać z dodatkową konfiguracją, ale nie sądzę, że to dobry pomysł, ponieważ powinieneś mieć dostęp do domu za pośrednictwem ~powłoki lub $HOME. Również /homemoże być standardowym Linux i często stosowane w systemach Unix, ale nie zawsze tak jest lepiej polegać na informacjach, które są gwarantowane do pracy nie tylko coś, co działa przez większość czasu, gdy każdy ma ograniczone do konwencji.

Aby wykonać sudo ln -s /Users /homepracę, wykonaj następujące kroki (z komentarzy):

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
użytkownik151019
źródło
7
Najpierw edytuj /etc/auto_masteri komentuj linię domową. Następnie uruchom ponownie, aby zwolnić istniejący zasób / home. Następnie możesz dowiązać katalog do katalogu, wykonując następujące czynności. ln -s /Users /home. Dopóki tego nie zrobisz, po prostu nie będziesz mógł utworzyć dowiązania symbolicznego, ponieważ zasób jest zajęty.
anthonyryan1
@AR. czy są jakieś potencjalne negatywne konsekwencje takiego postępowania (lub dlaczego tak się dzieje?). I nie mogę edytować go nawet jako root lub po chmod a + w / etc / auto_master czy jest inny sposób?
Abe
2
-1. Daje to operation not supportedkomunikat
Abe
2
@Abe Nie dzieje się, jeśli podążasz za @ AR. Pamiętaj, że nie musisz restartować się; możesz sudo automount -cvzamiast tego biegać .
zigg
@zigg dzięki. Ale to wciąż nie czyni odpowiedzi kompletną. Zaproponuję edycję - i tak nie mogłem przegłosować!
Abe
5

Żałuję, że ta odpowiedź nie jest do końca autorytatywna, ponieważ tak naprawdę nigdy tego nie zrobiłem - chociaż użyłem podobnego automountera w innych systemach uniksowych - ale oto moje rozumienie tego, co /homejest używane w OS X.

Zatem podążajmy szlakiem:

Jeśli wpiszesz najpierw mountTerminal, aby wyświetlić aktywne wierzchowce, zobaczysz następujący wiersz:

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

autofsmapy są zdefiniowane w /etc/auto_master, a /homez kolei są zdefiniowane konkretnie w /etc/auto_home. Jeśli spojrzysz /etc/auto_home, zobaczysz następujący wiersz:

+/usr/libexec/od_user_homes

Podążaj za śladem jeszcze jeden krok do strony od_user_homesman , a znajdziesz program, którego celem jest pobranie nazwy użytkownika, sprawdzenie jej w Open Directory i zwrócenie adresu URL do katalogu domowego tego użytkownika. Jeśli przeczytać na auto_masterna jego stronie man , przekonasz się, że za pomocą programu wykonywalnego przez wyników mapa w tym programie miano patrzeć URL do montażu, który jest z kolei zamontowany w miejscu.

Wydaje się, że zamierzona aplikacja polega na tym, że jeśli komputer Mac jest podłączony do usługi katalogowej, /home/jdoespowoduje to zamontowanie jdoetam katalogu domowego automountera.

Na tej podstawie logiczne wydaje się stwierdzenie, że jeśli nie zamierzasz podłączać swojego Maca do usługi katalogowej, prawdopodobnie dobrze jest usunąć /homeautomatyczne montowanie, jak opisano w tym komentarzu . Nie wiem jednak, jak poradzą sobie z tym przyszłe aktualizacje systemu operacyjnego.

zigg
źródło
1
Lubię używać automountera zamiast go wyłączać. Pozwoliłbym więc automounterowi zamontować / Users / $ USER na / home / $ USER. Zastanawiam się, czy jest to tak proste, jak zastąpienie tej linii w / etc / auto_home czymś takim jak „+ / bin / echo / home / $ 1”, czy też jeśli chcesz właściwej obsługi błędów, utwórz skrypt, który replikuje to, co robi od_user_homes
Tim B
@TimB Ciekawa myśl. automountdChociaż trochę się z tym bawiłem, nie jestem do końca pewien, czy możesz określić lokalną ścieżkę, z którą sobie poradzisz. Wydaje się możliwe wykonywanie NFS, SMB i AFS.
zigg
Nie wiem, czy to działa w systemie Linux, ale zawsze tak robiłem w systemie Solaris. Rzeczywistym katalogiem był / export / home / $ USER i istniała standardowa konfiguracja automatycznego zamontowania go w / home / $ USER. W rzeczywistości wygląda na to, że jest to teraz standardowa konfiguracja w Solarisie 11.x według blogs.oracle.com/observatory/entry/automounted_home_directory
Tim B
1
Po prostu spojrzałem szybko. Nie musisz nawet naśladować wykonywalnej mapy od_user_homes. To tylko po to, aby obsługiwać OD. Możliwe jest zwykłe automatyczne zamontowanie / Users / $ USER na / home / $ USER. Jest pokazany na stronie manuala auto_master, chociaż tam przykład pokazuje zdalne podłączanie NFS zamiast lokalnych katalogów, powinien również działać lokalnie.
Tim B
Być może robiłem coś złego, ale próbowałem skonfigurować ścieżkę lokalną, w której mógłbym użyć montowania NFS i otrzymałem Input/output errorpróbę cd. Z mojej lektury wyglądało na to, że mogłem używać tylko NFS, SMB lub AFS, tak jak powiedziałem. Ale może powinniśmy przenieść tę linię eksperymentów gdzie indziej ...
zigg
2

Nie ma po co /home. OS X, podobnie jak różne inne wersje Uniksa, ma unikalną lokalizację dla użytkownika. W Linuksie jest o /home/user, aw OS X o /Users. Dlatego dobrą praktyką jest używanie skrótu „ ~” lub zmiennej środowiskowej $HOME.

Chociaż możesz utworzyć dowiązanie symboliczne do katalogu podstawowego / domowego użytkownika /Users/[username]za pomocą następującego polecenia:

ln -s ~ /foo

Nie będzie działać tworzenie łącza o nazwie, /homeponieważ w katalogu głównym systemu jest już (n nieużywany) katalog o tej nazwie.

sprytny
źródło
1
Dokładnie. Byłem na innych systemach uniksowych, które z różnych powodów korzystały z innych konwencji dla katalogów domowych, np. /export/home/usernameNa Solarisie. Zakładanie, /home/usernameże zadziała, jest złą praktyką . Programy szukające katalogów domowych powinny używać getpwnamlub getpwuid.
zigg
1
W pełni zgadzam się, że złą praktyką dla programów jest zakładanie, że istnieje, ale to nie dotyczy tego, że czasami oprogramowanie nie jest opracowywane w sposób kompetentny.
anthonyryan1
Wśród wierzchowców w moim przypadku i innych: map auto_home on /home (autofs, automounted, nobrowse)… chociaż nie znam pochodzenia tego wierzchowca, powinienem się nie zgodzić z „bezużytecznym dla /home”.
Graham Perrin
Przepraszam, powinno być wyraźniejsze: po prostu oznaczało, że /homejest zarezerwowane, ale nieużywane w OSX, nie dlatego, że nie ma sensu go używać;)
cleverbit
@richarddas Dostaję taki sam operation not supportedbłąd sudo ln -s /Users/username /home/usernamejak z sudo ln -s /Users /home. Rozwiązanie dostarczone przez @AR działa (skomentuj /homelinię /etc/auto_masteri uruchom ponownie).
Abe
1

Nie widzę żadnego powodu, aby nie zmieniać nazwy katalogu / home (na wypadek, gdy się mylę) i tworzenia dowiązania symbolicznego z / home do / Users (lub, tak jak na moim komputerze, / Volumes / Users od mojego systemu dysk jest dla systemu, cholera!)

Pracowałem jako sysadmin na wydziale uniwersyteckim z 11 odmianami Uniksa. W globalnym drzewie katalogów mieliśmy różnego rodzaju dowiązania symboliczne, aby system plików działał właściwie, a skrypty działały tak blisko, jak to tylko możliwe, do działania wszędzie. Wpadasz na kilka błędów, ale jeśli twoje palce są przyzwyczajone do pisania / home / foo, a dowiązanie symboliczne opóźnia przekwalifikowanie pracy dla twoich palców, idź.

Podobnie niektóre linuksy będą już miały katalogi domowe jako / usr / home.

W jednym miejscu, w którym pracowałem, były katalogi domowe / Users / {group} / {username} jako częściowa ochrona przed uczniami chodzącymi po plikach profesorów, jeśli profesor był nieostrożny z jego uprawnieniami. Katalog użytkowników wykonał się, ale nie ustawiono bitów odczytu, a katalogi grup były czytelne tylko dla członków grupy.

(Wszystko to ilustrowane jest na wiele sposobów na pozbawienie tego konkretnego kota jego skóry.

Jedna możliwa gotcha - sprawdź, czy wehikuł czasu nie robi dwóch kopii wszystkiego. Nie wiem, jak TM traktuje dowiązania symboliczne. Jeśli tak, to dodaj / home do listy wykluczeń TM.

Sherwood Botsford
źródło
1
Jeśli coś lub ktoś ustawi niewłaściwy tryb lub listę ACL dla Twojej alternatywy, /Userswówczas znane procedury naprawy uprawnień prawdopodobnie nie spowodują wymaganych poprawek. Dlatego zalecam, aby /Userspowinien być tak zainstalowany przez Apple: katalog, a nie dowiązanie symboliczne.
Graham Perrin
0

Próbowałem tego wcześniej i działałem przez około tydzień, aż ponownie uruchomiłem ...

Nie możesz po prostu dowiązać symbolicznie /homedo /Users. W rzeczywistości nie można nawet usunąć /home.

Jeśli uda ci się usunąć /home, pojawi się ponownie po ponownym uruchomieniu.

Jeśli przejdziesz /homedo /home.oldi dowiązanie symboliczne /home, usunie ono dowiązanie symboliczne /home.

Możesz działać tak długo, dopóki komputer Mac nie zawiedzie się ani nie uruchomi ponownie.

Po ponownym uruchomieniu wszystko znika!

Po ponownym uruchomieniu Mac OS X wydaje się myśleć, że tworzysz nowego użytkownika, więc zastąpi on wszystkie preferencje użytkownika w starym /Users/usernamekatalogu.

Ponieważ skopiowałeś wszystko do /home/username, ls /homepo ponownym uruchomieniu będziesz widzieć swój nowy katalog domowy . Zamiast tego dostajesz NIC !!! To tak, jakby nigdy nie istniało.

W moim przypadku wariowałem przez około 30 minut, a następnie uruchomiłem tryb pojedynczego użytkownika, aby sprawdzić, czy coś można zrobić. Myślałem, że może uda mi się pobrać plik dziennika lub spróbować uruchomić narzędzie do naprawy.

W trybie pojedynczego użytkownika mój katalog domowy był tam. Apple celowo ukrywa przed użytkownikiem wszelkie nowo utworzone katalogi /homew trybie wielu użytkowników. Jest to celowo zła funkcja projektowania.

Apple jest kulawy i odradza wszelkiego rodzaju hakowanie swojego systemu operacyjnego. Co to za funkcja projektowa? Apple ukrywa zawartość nowo utworzonego /homekatalogu. Nie ma absolutnie żadnego uzasadnionego powodu, aby Apple automatycznie usunął /homekatalog ... lub jakiekolwiek katalogi utworzone przez użytkownika!

W takim przypadku montują katalog nad katalogiem / home ... skutecznie go ukrywając.

Jeśli jesteś naprawdę zdeterminowany, aby użyć /homezamiast /Users, możesz być w stanie obejść to, pisząc skrypt, aby skonfigurować wszystko przy każdym uruchomieniu.

Powinienem również wspomnieć, że powinieneś być w stanie użyć innego katalogu, który nie /homejest zamiennikiem, /Usersponieważ tylko /homejest zbanowany.

Jeśli użyjesz bash, będziesz musiał ustawić niektóre zmienne środowiskowe ... mianowicie: CD_HOMEi HOME.

Chciałbym dodać, że ... chociaż nie można odmontować ani wymusić odmontowania /home, można zamontować dysk na nim /home. Wszystko to zamontowano na „auto_home”.

Udało mi się zamontować dysk odzyskiwania z /homepowodzeniem ... być może w ten sposób można to zrobić.

Tim
źródło
TL / DR; dostosowywanie do ponownego rozruchu jest możliwe przy użyciu najlepiej ocenianej odpowiedzi
MarkHu