¿Es posible networkingefinir la tilde ('~', directory particular)?

¿Es posible networkingefinir el directory de inicio? por ejemplo, a /ext1/username lugar de /home/username , es decir, expandiendo el ~ a otro directory (en lugar de cambiar el directory de inicio actual donde se encuentran los files de inicio de los usuarios).

(Esta pregunta es principalmente académica, ya que parece una mala práctica hacerlo. Tampoco tengo otra opción en el asunto del uso de csh , a pesar de haber leído el Top 10.)

La tilde ~ es interpretada por tu caparazón. Tu caparazón interpretará ~ como una forma corta de $HOME .

Pruebe (echo ~; HOME=foo; echo ~) . Esto primero debe imprimir su directory de inicio real y luego "foo", ya que establece $HOME en eso.

El valor pnetworkingeterminado de $HOME proviene de la configuration de su sistema. Use getent passwd para enumerar todos los usuarios conocidos y sus directorys de inicio. Dependiendo de la configuration de su sistema, esas inputs pueden provenir de /etc/passwd o de cualquier service de directory remoto.

Si solo quiere networkingefinir temporalmente su directory de inicio, simplemente configure otro $HOME .

Si desea cambiarlo permanentemente, debe cambiar la input de contraseña, por ejemplo, editando /etc/passwd manualmente.

El valor que se usa para ~ se determina a partir del valor que se obtiene de la database administrativa ( getent passwd ), generalmente en el /etc/passwd , para el directory principal de cada usuario que allí se define.

 $ 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 file es el valor utilizado cuando alguien escribe cd ~ .

nsswitch

Puede ver lo que un sistema usaría para el directory de inicio del usuario usando el command 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 "database" que los proporciona se controla a través de su solucionador de sistemas, definido en /etc/nsswitch.conf .

 $ grep passwd /etc/nsswitch.conf #passwd: db files nisplus nis passwd: files 

Los files anteriores significan /etc/passwd , pero la "database" podría provenir de LDAP, NIS u otras ubicaciones a través de la networking, por ejemplo.

Mover / networkingefinir?

Realizar esta operación es un poco complicado después de que se hayan creado las counts. Si está creando counts desde cero, es trivial networkingefinir la location de un usuario de su directory personal. Al ejecutar el command useradd , puede especificar la location que se utilizará para el directory 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 counts existentes?

Esto se convierte más en una operación quirúrgica ya que muchas veces la ruta del directory de inicio de un usuario se incluye de forma estática en los files de configuration, lo que lo hace más complicado.

Ejemplo

 $ grep home /home/sam/.* /home/sam/.gtkrc-1.2-gnome2:include "/home/sam/.gtkrc.mine" 

Esto deberá ser arreglado, o tendrá que proporcionar un enlace desde /home/sam a la nueva location, /ext1/sam .

Moverse cuando "database" no es /etc/passwd

Si el sistema está recibiendo los directorys de inicio de LDAP, NIS, etc., deberá configurar la relocation en esos sistemas y coordinar el movimiento de los files de /home/sam a /ext1/sam .

Referencias

  • ¿Por qué '~' fue elegido para representar el directory de inicio?

Si la razón es extender usuarios a través de varios filesystems, también puede usar el automounter . E incluso le permiten tener un directory "base" diferente para sus usuarios.