127 votes

Sens de l'tilde dans linux bash (pas de répertoire d'accueil)

Tout d'abord, je sais qu' ~/ est le répertoire d'accueil. CDing d' ~ ou ~/ me prend dans le répertoire home.

Toutefois, cd ~X m'emmène à un endroit spécial, où X semble être quelque chose.

En bash, si je frappe "cd ~" et cliquer sur l'onglet, il montre un tas de possible ~X des options comme l' ~mail et ~postgres et ~ssh. Aller à ces dossiers, et de faire un pwd me montre que ces dossiers ne sont pas dans le répertoire d'accueil; ils sont tous sur la place.

Ils ne sont pas les alias. Je l'ai vérifié. Ils ne sont pas env. variables, ou bien qu'ils avaient besoin d'un $.

Qu'est-ce que la définition de ces liens, et où puis-je trouver où ceux-ci sont mis?

96voto

tylerl Points 14541

C'est un Bash fonctionnalité appelée "tilde expansion". C'est une fonction de la coquille, pas de l'OS. Vous obtiendrez différents de comportement avec les csh, par exemple.

Pour répondre à votre question où les informations proviennent de: votre répertoire de base vient de la variable $HOME (peu importe ce que vous sauvegardez, y), tandis que d'autres utilisateurs les maisons sont récupérées en temps réel à l'aide de getpwent(). Cette fonction est habituellement contrôlé par NSS; donc par défaut les valeurs sont sortis de l' /etc/passwd, mais il peut être configuré pour récupérer les informations à l'aide de n'importe quelle source désirée, tels que NIS, LDAP ou une base de données SQL.

Tilde expansion est plus de la maison de recherche dans l'annuaire. 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 en conjonction avec d' pushd et popd.

36voto

Paul Betts Points 41354

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

19voto

Sean Bright Points 39480

Sont-ils les répertoires home des utilisateurs en /etc/passwd? Des Services comme postgres, sendmail, apache, etc., créer des utilisateurs du système qui ont des répertoires de base tout comme les utilisateurs normaux.

15voto

Joakim Elofsson Points 5048

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

cd ~nom d'utilisateur

vous faut pour que les utilisateurs de home dir

10voto

Jonathan Leffler Points 299946

Sur ma machine, car de la façon que j'ai des choses mis en place, en faisant:

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

La première accorde de l'attention à la valeur de la variable d'environnement $HOME; j'ai volontairement mis mon $HOME pour un système de fichiers local au lieu d'un NFS-système de fichiers monté. Le deuxième lit le fichier de mot de passe (environ; NIS compliquer un peu les choses) et constate que le fichier de mot de passe dit, mon répertoire de base est de /u/jleffler et des changements à ce répertoire.

Les trucs ennuyeux est que la plupart des logiciels se comporte comme ci-dessus (et la spécification POSIX pour le shell nécessite de ce comportement). J'utilise certains logiciels (et je n'ai pas beaucoup de choix quant à l'utilisation), qui traite les informations à partir du fichier de mot de passe comme la valeur actuelle de $à la MAISON, ce qui est faux.

L'application de ce à la question - comme d'autres l'ont souligné, 'cd ~x"va dans le répertoire home de l'utilisateur 'x', et, plus généralement, à chaque fois que tilde expansion est effectuée, ~x signifie que le répertoire home de l'utilisateur 'x' (et c'est une erreur si l'utilisateur 'x' n'existe pas).


Il pourrait être utile de mentionner que:

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

Je ne peux pas immédiatement trouver une utilisation pour '~+', sauf si vous avez un truc bizarre avec le déplacement des liens symboliques dans le chemin menant vers le répertoire courant.

Vous pouvez également le faire:

cd -

Que signifie la même chose que ~-.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X