web-dev-qa-db-fra.com

Signification de tilde dans Linux bash (pas le répertoire personnel)

Tout d'abord, je sais que ~/ est le répertoire de base. L'enregistrement dans ~ ou ~/ m'emmène au répertoire de base.

Cependant, cd ~X m'emmène dans un endroit spécial, où X semble être n'importe quoi.

En bash, si je clique sur "cd ~" et sur un onglet, il affiche un grand nombre d'options ~X possibles, telles que ~mail et ~postgres et ~ssh. Aller dans ces dossiers et faire une pwd me montre que ces dossiers ne sont pas dans le répertoire de base; ils sont partout.

Ce ne sont pas des alias. J'ai vérifié. Ce ne sont pas des variables env., sinon il faudrait un $.

Qu'est-ce qui établit ces liens et où puis-je trouver où ils sont placés?

95
jbu

C'est une fonctionnalité de Bash appelée " tilde expansion ". C'est une fonction du shell, pas du système d'exploitation. Vous obtiendrez un comportement différent avec csh, par exemple.

Pour répondre à votre question sur l'origine des informations: votre répertoire personnel provient de la variable $HOME (peu importe ce que vous y stockez), tandis que les maisons des autres utilisateurs sont récupérées en temps réel à l'aide de getpwent() . Cette fonction est généralement contrôlée par NSS ; Ainsi, par défaut, les valeurs sont extraites de /etc/passwd, bien qu'il puisse être configuré pour extraire les informations à l'aide de n'importe quelle source souhaitée, telle que NIS, LDAP ou une base de données SQL.

L'expansion de tilde est plus que la recherche de répertoire personnel. Voici un résumé:

~              $HOME
~fred          (freds home dir)

~+             $PWD   (same effect as ./)
~-             $OLDPWD (your previous directory)
~1             `dirs +1`
~2             `dirs +2`
~-1            `dirs -1`

dirs et ~1, ~-1, etc., sont utilisés conjointement avec pushd et popd.

64
tylerl

Ce sont les répertoires personnels des utilisateurs. Essayez cd ~(your username), par exemple.

33
Paul Betts

Sont-ils les répertoires personnels des utilisateurs dans /etc/passwd? Des services tels que postgres, sendmail, Apache, etc., créent des utilisateurs système dotés de répertoires personnels, comme les utilisateurs normaux.

16
Sean Bright

ce sont des utilisateurs, vérifiez votre/etc/passwd

cd ~ nom d'utilisateur

vous emmène à la maison de cet utilisateur dir

13
Joakim Elofsson

Sur ma machine, à cause de la manière dont j'ai installé les choses, je fais

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

Le premier fait attention à la valeur de la variable d'environnement $HOME; J'ai délibérément défini mon $HOME sur un système de fichiers local au lieu d'un système de fichiers monté par NFS. Le second lit le fichier de mots de passe (approximativement; NIS complique un peu les choses) et trouve que le fichier de mots de passe indique que mon répertoire de base est /u/jleffler et que des modifications y ont été apportées.

Le problème est que la plupart des logiciels se comportent comme ci-dessus (et la spécification POSIX pour le shell requiert ce comportement). J'utilise un logiciel (et je n'ai pas vraiment le choix), qui traite les informations du fichier de mots de passe comme la valeur actuelle de $ HOME, ce qui est faux.

En appliquant ceci à la question - comme d’autres l’ont déjà fait remarquer, 'cd ~x' va au répertoire de base de l’utilisateur 'x', et plus généralement, chaque fois que le tilde est développé, ~x signifie le répertoire de base de l’utilisateur 'x' (et une erreur si l'utilisateur 'x' n'existe pas).


Il convient de mentionner que:

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

Je ne peux pas immédiatement trouver un usage pour '~+', à moins que vous ne fassiez des trucs bizarres en déplaçant des liens symboliques dans le chemin menant au répertoire actuel.

Vous pouvez aussi faire:

cd -

Cela signifie la même chose que ~-.

9
Jonathan Leffler
5
TheBonsai

Si vous utilisez autofs, l'extension peut provenir de /etc/auto.home (ou similaire pour votre distribution). Par exemple, mon /etc/auto.master ressemble à:

/home2 auto.home --timeout 60

et /etc/auto.home ressemble à:

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

Il est possible que les utilisateurs OpenDirectory/ActiveDirectory/LDAP soient "montés automatiquement" dans votre répertoire personnel.

Dans * nix, ~ sera résolu dans votre répertoire personnel. De même, ~X sera résolu en "utilisateur X".

Semblable au montage automatique pour les annuaires, OpenDirectory/ActiveDirectory/LDAP est utilisé dans des environnements plus grands/d'entreprise pour monter automatiquement des annuaires d'utilisateurs. Ces utilisateurs peuvent être des personnes réelles ou des comptes d’ordinateur créés pour fournir diverses fonctionnalités.

Si vous tapez ~Tab vous verrez une liste des utilisateurs sur votre machine.

0
JS.