En primer lugar, sé que ~/
es el directorio de inicio. Grabando ~
o ~/
me lleva al directorio de inicio.
Sin embargo, cd ~X
me lleva a un lugar especial, donde X
parece haber cualquier cosa.
En bash, si presiono " cd ~
" y presiono tabulador, muestra un montón de ~X
opciones posibles como ~mail
y ~postgres
y ~ssh
. Ir a esas carpetas y hacer una pwd
me muestra que estas carpetas no están en el directorio de inicio; están por todos lados.
No son alias. He comprobado. No son env.
variables, de lo contrario requerirían un $
.
¿Qué es la configuración de estos enlaces y dónde puedo encontrar dónde se establecen?
Respuestas:
Es una función de Bash llamada " expansión de tilde ". Es una función del shell, no del sistema operativo. Obtendrá un comportamiento diferente con csh, por ejemplo.
Para responder a su pregunta sobre de dónde proviene la información: su directorio de inicio proviene de la variable
$HOME
(sin importar lo que almacene allí), mientras que las casas de otros usuarios se recuperan en tiempo real usandogetpwent()
. Esta función suele estar controlada por NSS ; por lo tanto, los valores predeterminados se extraen/etc/passwd
, aunque se puede configurar para recuperar la información utilizando cualquier fuente deseada, como NIS, LDAP o una base de datos SQL.La expansión de Tilde es más que una búsqueda en el directorio de inicio. He aquí un resumen:
dirs
y~1
,~-1
, etc., se utilizan en conjunción conpushd
ypopd
.fuente
~+
? parece bastante inútil.Esos son los directorios de inicio de los usuarios. Prueba
cd ~(your username)
, por ejemplo.fuente
¿Son los directorios de inicio de los usuarios de
/etc/passwd
? Servicios como postgres, sendmail, apache, etc., crean usuarios del sistema que tienen directorios de inicio como los usuarios normales.fuente
Son usuarios. Compruebe su
/etc/passwd
.cd ~username
lo lleva al directorio de inicio de ese usuario.fuente
En mi máquina, debido a la forma en que tengo las cosas configuradas, haciendo:
El primero presta atención al valor de la variable de entorno
$HOME
; Deliberadamente configuré mi$HOME
en un sistema de archivos local en lugar de un sistema de archivos montado en NFS. El segundo lee del archivo de contraseña (aproximadamente; NIS complica un poco las cosas) y encuentra que el archivo de contraseña dice que mi directorio de inicio es/u/jleffler
y cambia a ese directorio.Lo molesto es que la mayoría del software se comporta como se indicó anteriormente (y la especificación POSIX para el shell requiere este comportamiento). Utilizo algún software (y no tengo muchas opciones sobre su uso) que trata la información del archivo de contraseña como el valor actual de $ HOME, lo cual es incorrecto.
Aplicando esto a la pregunta, como otros han señalado, '
cd ~x
' va al directorio de inicio del usuario 'x' y, de manera más general, siempre que se realiza la expansión de tilde,~x
significa el directorio de inicio del usuario 'x' (y es un error si el usuario 'x' no existe).Vale la pena mencionar que:
No puedo encontrar un uso inmediato para '
~+
', a menos que haga algunas cosas raras moviendo enlaces simbólicos en la ruta que lleva al directorio actual.También puedes hacer:
Eso significa lo mismo que
~-
.fuente
cd ~+
: potencialmente podría usarlo para verificar si un directorio en el que se encuentra actualmente todavía existe, incluso si es una forma bastante poco ortodoxa de hacerlo.Expansión de Tilde en Bash:
http://bash-hackers.org/wiki/doku.php/syntax/expansion/tilde
fuente
Si está utilizando,
autofs
entonces la expansión podría provenir de/etc/auto.home
(o similar para su distribución). Por ejemplo, mi/etc/auto.master
parece:y se
/etc/auto.home
parece a:fuente
Es posible que vea usuarios de OpenDirectory / ActiveDirectory / LDAP "montados automáticamente" en su directorio de inicio.
En * nix,
~
se resolverá en su directorio personal. Asimismo~X
se resolverá como 'usuario X'.Similar al montaje automático de directorios, OpenDirectory / ActiveDirectory / LDAP se utiliza en entornos corporativos más grandes para montar automáticamente directorios de usuarios. Estos usuarios pueden ser personas reales o pueden ser cuentas de máquina creadas para proporcionar varias funciones.
Si escribe ~Tab, verá una lista de los usuarios en su máquina.
fuente