Mac OS X - Come eseguire il collegamento simbolico / home / Utenti


14

Per quelli di noi che si dilettano in pinguini e mele, sembra molto utile essere in grado di utilizzare percorsi / home fuori dallo habbit o per quei casi strani in cui il valore potrebbe essere stato sincronizzato da qualche parte lungo la linea in alcuni file utilizzare su entrambe le macchine.


6
~usernamesi espande nella tua home directory indipendentemente da Mac OSX o Linux.
Nohillside

1
Ne sono consapevole, ma alcune applicazioni multipiattaforma salvano percorsi assoluti. Un esempio è Sublime Text 2.
anthonyryan1

1
In realtà si ~espande nella tua home directory. Potete chiarire nella domanda se si desidera collegare in modo simbolico alla directory home dell'utente (ad es. /Users/[username]) O in effetti la directory User stessa ( /Users/) che contiene directory separate per tutti gli utenti sulla macchina?
Cleverbit

Risposte:


19

sudo ln -s /Users /homefunzionerà con una configurazione aggiuntiva, ma non credo sia una buona idea in quanto dovresti accedere a casa tramite ~in shell o $HOME. /homePotrebbe anche essere uno standard Linux e spesso usato in Unix, ma non sempre è meglio fare affidamento su informazioni che sono garantite per funzionare non qualcosa che funziona solo la maggior parte delle volte se tutti hanno aderito a una convenzione.

Per far sudo ln -s /Users /homefunzionare, segui questi passaggi (dai commenti):

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

7
Prima modifica /etc/auto_mastere commenta la linea di casa. Quindi riavviare per liberare la risorsa esistente / home. Quindi è possibile collegare simbolicamente la directory utilizzando quanto segue. ln -s /Users /home. Fino a quando non lo fai, non ti sarà semplicemente permesso di creare il collegamento simbolico poiché la risorsa è occupata.
anthonyryan1

@AR. ci sono potenziali conseguenze negative nel farlo (o perché è lì in primo luogo?). E non mi è permesso modificarlo nemmeno come root o dopo chmod a + w / etc / auto_master c'è un altro modo?
Abe,

2
-1. Ciò si traduce in un operation not supportedmessaggio
Abe,

2
@Abe Non succede se segui la direzione di @ AR. Si noti che non è necessario riavviare; puoi correre sudo automount -cvinvece.
zigg

@zigg grazie. Ma ciò non rende ancora completa la risposta. Proporò una modifica - non potevo comunque effettuare il downgrade del voto!
Abe,

5

Mi dispiace che questa risposta non sia esattamente autorevole, dal momento che non l'ho mai fatto da solo - anche se ho usato un automounter simile su altri sistemi Unix - ma ecco la mia comprensione di ciò che /homeviene utilizzato su OS X.

Quindi, seguiamo il sentiero:

Se digiti per la prima volta mountnel Terminale per mostrare i mount attivi, vedrai questa riga:

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

autofsle mappe sono definite in /etc/auto_master, ed /homeè a sua volta definita in modo specifico in /etc/auto_home. Se dai un'occhiata /etc/auto_home, vedrai questa linea:

+/usr/libexec/od_user_homes

Segui la traccia ancora un passo verso la od_user_homespagina man e troverai un programma il cui scopo è prendere un nome utente, cercarlo in Open Directory e restituire un URL alla home directory dell'utente. Se continui a leggere auto_masternella sua pagina man , scoprirai che l'uso di un programma eseguibile per una mappa porta a quel programma che viene chiamato per cercare un URL da montare, che a sua volta viene montato sul posto.

L'applicazione prevista sembra essere quella, se il tuo Mac è collegato a un servizio di directory, andando a /home/jdoefar sì che il montatore automatico monti jdoelì la home directory.

Sulla base di questo, sembra logico concludere che se non si intende connettere il Mac a un servizio di directory, probabilmente si sta bene rimuovendo l' /homeauto-mount come dettagliato in questo commento . Non so come gestiranno i futuri aggiornamenti del SO.


1
Mi piace usare l'automounter, piuttosto che disabilitarlo. Quindi vorrei consentire al montaggio automatico di montare / Users / $ USER su / home / $ USER. Mi chiedo se è semplice come sostituire quella riga in / etc / auto_home con qualcosa come "+ / bin / echo / home / $ 1", o se vuoi una corretta gestione degli errori, crea uno script che replica ciò che fa od_user_homes
Tim B

@TimB Pensiero interessante. Avendolo giocato un po ', non sono del tutto sicuro che tu possa specificare un percorso locale che automountdaffronterà, comunque. Sembra possibile fare NFS, SMB e AFS.
zigg

Non so se funziona su Linux, ma era quello che ho sempre fatto su Solaris. La directory reale era / export / home / $ USER e c'era una configurazione standard per montare automaticamente quella su / home / $ USER. In effetti, sembra che ora sia la configurazione standard in Solaris 11.x secondo blogs.oracle.com/observatory/entry/automounted_home_directory
Tim B

1
Ho appena guardato in fretta. Non è nemmeno necessario imitare la mappa eseguibile od_user_homes. È lì solo per supportare OD. Il montaggio automatico ordinario di / Users / $ USER su / home / $ USER è possibile. È mostrato nella pagina man di auto_master, anche se l'esempio mostra montaggi NFS remoti piuttosto che directory locali, dovrebbe funzionare anche localmente.
Tim B

Potrei aver fatto qualcosa di sbagliato, ma ho provato a configurare un percorso locale in cui avrei potuto usare un mount NFS e ne ho ricevuto uno Input/output errorquando ci provavo cd. Dalla mia lettura, sembrava che potessi usare solo NFS, SMB o AFS, come ho detto. Ma forse dovremmo portare questa linea di sperimentazione altrove ...
zigg

2

Non serve a niente /home. OS X, come varie altre versioni di Unix, ha una posizione unica per l'utente. In Linux è a /home/user, e in OS X è a /Users. Ecco perché è buona norma utilizzare la scorciatoia " ~" o la variabile d'ambiente $HOME.

Mentre è possibile creare un collegamento simbolico alla directory base / home dell'utente /Users/[username]utilizzando il comando seguente:

ln -s ~ /foo

Non funzionerà per creare un collegamento denominato in /homequanto esiste già una directory (n non utilizzata) con quel nome nella radice del sistema.


1
Esattamente. Sono stato su altri sistemi simili a Unix che hanno usato altre convenzioni per home directory per vari motivi, ad esempio /export/home/usernamesu Solaris. È una cattiva pratica presumere /home/usernameche funzionerà. I programmi in cerca di home directory dovrebbero usare getpwnamo getpwuid.
zigg

1
Sono pienamente d'accordo sul fatto che sia una cattiva pratica per i programmi presumere che esista, ma ciò non risolve il fatto che a volte il software non è sviluppato in modo competente.
anthonyryan1

Tra i montaggi nel mio caso e altri: map auto_home on /home (autofs, automounted, nobrowse)... mentre non conosco l'origine di quel monte, dovrei essere in disaccordo con "inutile /home".
Graham Perrin,

Mi dispiace avrebbe dovuto essere più chiaro: il solo significato /homeè apparentemente riservato, ma inutilizzato in OSX, non che non abbia senso utilizzarlo;)
Cleverbit

@richarddas Ricevo lo stesso operation not supportederrore di sudo ln -s /Users/username /home/usernamecome faccio io sudo ln -s /Users /home. La soluzione fornita da @AR funziona (commentare la /homeriga /etc/auto_mastere riavviare).
Abe,

1

Non vedo alcun motivo per non rinominare la directory / home (nel caso mi sbagli) e creare un collegamento simbolico da / home a / Users (o, come nella mia macchina, / Volumes / Users dal mio sistema il disco è per il sistema, dannazione!)

Lavoravo come amministratore di sistema, in un dipartimento universitario con 11 gusti di unix. Avevamo tutti i tipi di collegamenti simbolici nella struttura di directory globale in modo che il file system facesse la cosa giusta e gli script si avvicinassero il più possibile al lavoro ovunque. Ti capita di imbatterti in alcuni trucchi, ma se le tue dita sono abituate a digitare / home / pippo e un collegamento simbolico posticipa la riqualificazione del lavoro per le tue dita, vai in fretta.

Allo stesso modo alcuni Linux avranno già le directory Home come / usr / home.

Un posto in cui ho lavorato aveva le home directory di / Users / {group} / {username} come protezione parziale contro gli studenti che cercavano file dei professori se il prof era incurante con i suoi permessi. La directory Users era eseguita ma non erano stati impostati bit di lettura e le directory del gruppo erano leggibili solo per i membri del gruppo.

(Tutto ciò nell'illustrazione ci sono molti modi per privare questo particolare felino della sua pelle.

Un possibile problema: controlla che la macchina del tempo non finisca per fare due copie di tutto. Non so come TM tratta i symlink. In tal caso, aggiungi / home all'elenco di esclusioni di TM.


1
Se qualcosa o qualcuno imposta una modalità inappropriata o ACL per la tua alternativa a /Usersallora le routine familiari per la riparazione delle autorizzazioni probabilmente non faranno le correzioni richieste. Quindi raccomando che /Usersdovrebbe essere installato da Apple: una directory, non un collegamento simbolico.
Graham Perrin,

0

L'ho provato prima e l'ho fatto funzionare per circa una settimana fino al riavvio ...

Non puoi semplicemente link simbolico /homea /Users. In effetti, non puoi nemmeno rimuoverlo /home.

Se riesci a rimuoverlo /home, riapparirà dopo il riavvio.

Se ci si sposta /homesu /home.olde collegamento simbolico /home, rimuoverà il collegamento simbolico /home.

Puoi farlo funzionare fino a quando il tuo mac non si arresta in modo anomalo o non si riavvia.

Al riavvio, tutto svanisce!

Al riavvio, Mac OS X sembra pensare di creare un nuovo utente, quindi sovrascriverà tutte le preferenze dell'utente nella vecchia /Users/usernamedirectory.

Dal momento che hai copiato tutto /home/username, ti aspetti di vedere la tua nuova directory home quando lo fai ls /homedopo il riavvio. Invece, non ottieni NIENTE !!! È come se non fosse mai esistito.

Nel mio caso, stavo andando fuori di testa per circa 30 minuti, quindi mi sono avviato in modalità utente singolo per vedere se qualcosa potesse essere fatto. Stavo pensando che potrei essere in grado di afferrare un file di registro o provare ad avviare un'utilità di riparazione.

In modalità utente singolo, la mia home directory era lì. Apple nasconde intenzionalmente tutte le nuove directory create /homedall'utente in modalità multiutente. Questa è una caratteristica del design intenzionalmente malvagia.

Apple è zoppa e scoraggia qualsiasi tipo di hacking del proprio sistema operativo. Che tipo di caratteristica di design è quella? Apple nasconde il contenuto della /homedirectory appena creata . Non c'è assolutamente alcun motivo legittimo per cui Apple rimuova automaticamente la /homedirectory ... o qualsiasi directory creata dall'utente!

In questo caso, stanno montando una directory sulla tua directory / home ... nascondendola efficacemente.

Se sei davvero determinato a utilizzare /homeinvece di /Users, potresti essere in grado di aggirare il problema scrivendo uno script per impostare tutto ad ogni avvio.

Inoltre, dovrei menzionare che dovresti essere in grado di utilizzare qualche altra directory che non è /homeun sostituto /Usersperché solo /homeè vietato.

Se usi bash, dovrai impostare alcune delle variabili d'ambiente ... vale a dire: CD_HOMEe HOME.

Vorrei aggiungere che ... sebbene non sia possibile smontare o forzare lo smontaggio /home, è possibile montare un disco sopra /home. Tutto questo montato su "auto_home".

Sono stato in grado di montare il disco di ripristino con /homesuccesso ... forse è così che si può fare.


TL / DR; la personalizzazione a prova di riavvio è possibile utilizzando la risposta più votata
MarkHu
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.