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?
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
.
Ce sont les répertoires personnels des utilisateurs. Essayez cd ~(your username)
, par exemple.
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.
ce sont des utilisateurs, vérifiez votre/etc/passwd
cd ~ nom d'utilisateur
vous emmène à la maison de cet utilisateur dir
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 ~-
.
Expansion de tilde dans Bash:
http://bash-hackers.org/wiki/doku.php/syntax/expansion/tilde
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
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.