Significato di tilde in Linux bash (non home directory)


106

Prima di tutto, so che ~/è la directory home. CDing ~o ~/mi porta alla directory home.

Tuttavia, cd ~Xmi porta in un posto speciale, dove Xsembra essere qualsiasi cosa.

In bash, se premo " cd ~" e premo tab, mostra un sacco di possibili ~Xopzioni come ~maile ~postgrese ~ssh. Andare in quelle cartelle e fare un pwdmi mostra che queste cartelle non sono nella directory home; sono dappertutto.

Non sono alias. Ho controllato. Non sono env.variabili, altrimenti richiederebbero un file $.

Che cosa sta impostando questi collegamenti e dove posso trovare dove vengono impostati?


~ X restituisce semplicemente la "~ X" letterale ma ~ restituisce $ HOME e ~ + restituisce $ PWD - non sono speciali a parte il fatto che recuperano variabili di shell. cioè non memorizzano i valori o eseguono un comando per cercarli. Sono già definiti. Hai provato ~ -? Non riesco a pensare a un utilizzo per questo, ma ancora una volta, restituisce una variabile di shell $ OLDPWD
SDsolar

Risposte:


71

È una funzionalità di Bash chiamata " espansione tilde ". È una funzione della shell, non del sistema operativo. Otterrai un comportamento diverso con csh, per esempio.

Per rispondere alla tua domanda sulla provenienza delle informazioni: la tua home directory proviene dalla variabile $HOME(indipendentemente da cosa memorizzi lì), mentre le case degli altri utenti vengono recuperate in tempo reale utilizzando getpwent(). Questa funzione è solitamente controllata da NSS ; quindi per impostazione predefinita vengono estratti i valori /etc/passwd, sebbene possa essere configurato per recuperare le informazioni utilizzando qualsiasi fonte desiderata, come NIS, LDAP o un database SQL.

L'espansione della tilde è più che la ricerca nella directory home. Ecco un riepilogo:

~              $HOME
~fred          (freds home dir)

~+             $PWD       (your current working directory)
~-             $OLDPWD    (your previous directory)
~1             `dirs +1`
~2             `dirs +2`
~-1            `dirs -1`

dirse ~1, ~-1ecc, sono utilizzati in combinazione con pushde popd.


come nota il pesce non ne supporta nessuno tranne la semplice tilde (~)

perché hanno inventato ~+? sembra piuttosto inutile.
cregox

3
~ + è più o meno lo stesso di. Tuttavia, per usare qualcosa come ./file deve andare nel file system e capire dove. si trova - ci vogliono alcuni cicli. L'uso di ~ + consente di risparmiare il lavoro restituendo semplicemente il contenuto della variabile di shell $ PWD che è già definita mentre si attraversa il file system.
SDsolar

32

Quelle sono le home directory degli utenti. Prova cd ~(your username), per esempio.


1
Non sono collegamenti simbolici, gli account di servizio non hanno directory home in / home
Ana Betts

La migliore risposta nel mio caso. Inoltre, nel mio caso particolare, era la directory / cartella principale, non la cartella principale.
wlwl2

16

Sono le home directory degli utenti in /etc/passwd? Servizi come postgres, sendmail, apache, ecc., Creano utenti di sistema che hanno directory home proprio come gli utenti normali.


2
In effetti sono ~ username è la home directory dell'utente specificato
Steve Weet

14

Quelli sono utenti. Controlla il tuo /etc/passwd.

cd ~username ti porta alla directory home di quell'utente.


FTW. Upvote. TNX per aver chiarito tutto. Mi chiedo quanti cicli e forse anche una subshell siano coinvolti in quello. Immagina solo se il tuo sistema ha 3K utenti, come un piccolo ISP. Yikes.
SDsolar

9

Sulla mia macchina, a causa del modo in cui ho impostato le cose, faccio:

cd ~             # /work1/jleffler
cd ~jleffler     # /u/jleffler

La prima presta attenzione al valore della variabile ambientale $HOME; Ho deliberatamente impostato my $HOMEsu un file system locale anziché su un file system montato su NFS. Il secondo legge dal file delle password (approssimativamente; NIS complica un po 'le cose) e scopre che il file delle password dice che la mia home directory è /u/jlefflere passa a quella directory.

La cosa fastidiosa è che la maggior parte del software si comporta come sopra (e la specifica POSIX per la shell richiede questo comportamento). Uso un software (e non ho molta scelta per usarlo) che tratta le informazioni dal file della password come il valore corrente di $ HOME, il che è sbagliato.

Applicando questo alla domanda - come altri hanno sottolineato, " cd ~x" va alla directory home dell'utente "x" e, più in generale, ogni volta che viene eseguita l'espansione della tilde, ~xindica la directory home dell'utente "x" (ed è un errore se l'utente 'x' non esiste).


Potrebbe valere la pena ricordare che:

cd ~-       # Change to previous directory ($OLDPWD)
cd ~+       # Change to current directory ($PWD)

Non riesco a trovare immediatamente un uso per " ~+", a meno che tu non faccia cose strane con lo spostamento di collegamenti simbolici nel percorso che porta alla directory corrente.

Puoi anche fare:

cd -

Significa lo stesso di ~-.


1
Informazioni cd ~+: potresti potenzialmente usarlo per verificare se una directory in cui ti trovi attualmente esiste ancora, anche se è un modo piuttosto non ortodosso di farlo.
professorsloth


1

Se stai utilizzando, autofsl'espansione potrebbe effettivamente provenire da /etc/auto.home(o simile per la tua distribuzione). Ad esempio, il mio /etc/auto.masteraspetto è:

/home2 auto.home --timeout 60

e /etc/auto.homeassomiglia a:

mgalgs -rw,noquota,intr space:/space/mgalgs

0

È possibile che tu stia vedendo utenti OpenDirectory / ActiveDirectory / LDAP "montati automaticamente" nella tua home directory.

In * nix, ~si risolverà nella tua directory home. Allo stesso modo ~Xsi risolverà in "utente X".

Simile al montaggio automatico per le directory, OpenDirectory / ActiveDirectory / LDAP viene utilizzato in ambienti aziendali / di grandi dimensioni per il montaggio automatico delle directory utente. Questi utenti possono essere persone reali o possono essere account macchina creati per fornire varie funzionalità.

Se digiti ~Tabvedrai un elenco degli utenti sulla tua macchina.

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.