El valor que se utiliza ~
se determina a partir del valor que obtiene de la base de datos administrativa ( getent passwd
), generalmente en el /etc/passwd
archivo, para el directorio de inicio de cada usuario que se define allí.
$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
sam:x:500:500:Sam Mingolelli:/home/sam:/bin/bash
tracy:x:501:501::/home/tracy:/bin/bash
La sexta columna de este archivo es de donde cd ~
proviene el valor utilizado cuando alguien escribe .
nsswitch
Puede ver qué usaría un sistema para el directorio de inicio del usuario con el comando getent passwd
:
$ getent passwd
root:x:0:0:root:/root:/bin/bash
sam:x:500:500:Sam Mingolelli:/home/sam:/bin/bash
tracy:x:501:501::/home/tracy:/bin/bash
La "base de datos" que los proporciona se controla a través de su sistema de resolución, definido en /etc/nsswitch.conf
.
$ grep passwd /etc/nsswitch.conf
#passwd: db files nisplus nis
passwd: files
Los archivos anteriores significan /etc/passwd
, pero la "base de datos" podría provenir de LDAP, NIS u otras ubicaciones en la red, por ejemplo.
¿Mudarse / redefinir?
Realizar esta operación es un poco complicado después de crear las cuentas. Si está creando cuentas desde cero, es trivial redefinir la ubicación de un usuario de su directorio de inicio. Al ejecutar el useradd
comando, puede especificar la ubicación que se utilizará para el directorio de inicio de un usuario.
Ejemplo
$ useradd -d /ext1/acheong ...
extracto de la página man
-d, --home HOME_DIR
The new user will be created using HOME_DIR as the value for the user’s
login directory. The default is to append the LOGIN name to BASE_DIR and
use that as the login directory name. The directory HOME_DIR does not
have to exist but will not be created if it is missing.
Para cuentas existentes?
Esto se convierte más en una operación quirúrgica ya que muchas veces la ruta del directorio de inicio de un usuario se incluye estáticamente en los archivos de configuración, lo que lo hace más complicado.
Ejemplo
$ grep home /home/sam/.*
/home/sam/.gtkrc-1.2-gnome2:include "/home/sam/.gtkrc.mine"
Será necesario corregirlos o deberá proporcionar un enlace desde /home/sam
la nueva ubicación /ext1/sam
.
Moverse cuando la "base de datos" no está /etc/passwd
Si el sistema obtiene los directorios de inicio de LDAP, NIS, etc., deberá realizar la reubicación en esos sistemas y coordinar con el traslado de los archivos /home/sam
a /ext1/sam
.
Referencias
~
a algo diferente al directorio de inicio real?