¿Es posible dar la funcionalidad del directorio que normalmente se asigna /home
(en distribuciones como Debian y Ubuntu) a otro directorio (por completo)? Por ejemplo, si pudiera hacer esto y lo cambiara, /xyz
todos sus nuevos directorios de usuarios de propiedad humana se instalarían /xyz
(por ejemplo, la ruta del escritorio de Sally sería /xyz/Sally/Desktop
en lugar de /home/Sally/Desktop
y /home
no tendría que existir).
Estoy trabajando en un programa portátil que guarda rutas y las carga. Si se usa en una computadora diferente con un directorio de inicio que no está en /home
(y en consecuencia no hay /home
, sino otra ruta con su funcionalidad), entonces querré que ajuste la ruta para tener la ubicación adecuada del directorio de inicio en para la nueva computadora cuando se carga la ruta.
Respuesta1
No es necesario colocar directorios de inicio /home
y su programa es erróneo si incorpora suposiciones tales como que todos los directorios de inicio comparten un padre común o que ese padre tiene un nombre /home
.
/home
Ni siquiera es una convención universal.
/home
Fue una idea concebida bastante después de que se inventara Unix. En los primeros Unices se utilizaban otros directorios. Esto todavía se puede ver hoy en día en sistemas operativos como FreeBSD (y sus derivados), donde /home
hay un enlace simbólico y los directorios de usuarios en realidad se encuentran bajo /usr/home
.
Solaris también coloca directorios personales "reales" /export/home
para que /home
puedan estar llenos de montajes NFS automáticos y similares.
/home
no es el padre de muchos directorios personales comunes.
Hay muchos directorios personales que no se encuentran en /home
.
- El más obvio es
/root
, el directorio de inicio del superusuario, movido desde su ubicación anterior para/
que los archivos personales y "punto" del root no saturan el directorio raíz, pero se mantiene en el volumen raíz para que el superusuario pueda iniciar sesión incluso cuando El montaje de otros volúmenes de disco está fallando. - Varios softwares de demonios tienen directorios de inicio en otros lugares, para las cuentas dedicadas que ejecutan esos demonios.
- Las diversas cuentas demonio de qmail utilizan
/var/qmail
, por ejemplo, o/var/qmail/alias
. Este último incluso se aborda comúnmente como~alias
y esdiseñadoser un directorio de inicio, con~alias/.qmail
archivos como en los directorios de inicio de otros usuarios (reales). - Varios softwares de servidor HTTP(S) y FTP(s) tienen convenciones (oficiales o no oficiales). Por ejemplo: los directorios de inicio para hosts virtuales que tienen cuentas de sistema dedicadas pueden ser
/var/www
o/var/www/$VHOST
. - Se pueden encontrar otros software en varios sistemas operativos utilizando directorios de inicio para cuentas de usuarios no personales como
/var/unbound
,/var/db/mysql
y/var/db/tor
. - Varias cuentas de usuarios no personales convencionales tienen directorios de inicio como
/sbin
,/var/adm
,/var/spool/lpd
,/var/spool/mail
,/var/spool/news
,/var/spool/uucp
etc.
- Las diversas cuentas demonio de qmail utilizan
- En OpenBSD, la cuenta del operador del sistema tiene el directorio de inicio
/operator
y varias cuentas de usuarios no personales tienen/var/empty
como directorio de inicio.
Los directorios de inicio no tienen que permanecer en formato /home
.
Los directorios de inicio se pueden mover después de la creación de la cuenta usando las opciones -d
( --home
) y -m
( --move-home
) del usermod
comando en los sistemas operativos Linux.
OpenBSD usermod
tiene las mismas opciones. (No hagas lo mismo con el pw usermod
comando en FreeBSD, TrueOS/PC-BSD, etc. La -m -d
combinación allí tiene un significado sutilmente diferente).
No es necesario crear directorios de inicio en formato /home
.
Incluso el directorio principal convencional utilizado al crear cuentas se puede cambiar, y no necesariamente /home
.
En los sistemas operativos Linux y OpenBSD, la opción ( ) useradd
del comando especifica el directorio principal en el que se crean los directorios principales si no se nombra explícitamente con ( ). El-b
--base-dir
-d
--home
por defectoEl directorio base es la base_dir
variable en /etc/usermgmt.conf
OpenBSD y la HOME
variable en /etc/default/useradd
muchos Linux. Un administrador del sistema puede cambiar esto a su antojo.
En FreeBSD, TrueOS/PC-BSD y otros. Hay una -b
opción similar al pw useradd
comando y un valor predeterminado modificable mediante la home
variable en /etc/pw.conf
.
Lidiando con esto
Su programa no debe establecer ninguna expectativa sobre la ubicación de los directorios principales o sus padres.
- Si desea conocer el directorio de inicio del usuario actualmente conectado, utilice la
HOME
variable de entorno. Se configura mediante programas comologin
,userenv
osystemd
cuando se cambia la cuenta iniciada. Si no hayHOME
una variable de entorno, es una opción de diseño válida simplemente abortar, ya que las variables de entorno de la sesión de inicio de sesión deben estar presentes para que su programa se ejecute. De lo contrario, puede recurrir a obtener el UID efectivo/real (según corresponda) del proceso y consultar la base de datos de contraseñas. - Si desea conocer el directorio de inicio de un usuario específico, consulte la base de datos de contraseñas con las funciones de biblioteca
getpwnam()
/getpwnam_r()
ogetpwuid()
/getpwiud_r()
y extraiga elpw_dir
campo. (Tenga en cuenta queeste campo puede ser NULL o puede apuntar a una cadena de longitud cero.) - Si desea indicar simbólicamente el directorio de inicio de un usuario de una manera que sea independiente de su ubicación real, puede adoptar la convención de una expansión de tilde similar a un shell:
~JdeBP
. Muchos programas hacen esto, desdevim
hastamailx
.
Otras lecturas
- Diferencia entre “/export/home” y “/home”
- Jonathan de Boyne Pollard.
userenv
. Páginas del manual del conjunto de herramientas Nosh. - Jonathan de Boyne Pollard (2016). "Declaraciones falsas sobre entornos demoníacos". Erratas para systemd doco. Respuestas dadas con frecuencia.
Respuesta2
Si desea cambiar la ubicación del directorio de inicio del usuario a otra ubicación, consulte esta respuesta
https://stackoverflow.com/questions/20797819/command-to-change-the-default-home-directory-of-a-user