/homeNi siquiera es una convención universal.

/homeNi siquiera es una convención universal.

¿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, /xyztodos sus nuevos directorios de usuarios de propiedad humana se instalarían /xyz(por ejemplo, la ruta del escritorio de Sally sería /xyz/Sally/Desktopen lugar de /home/Sally/Desktopy /homeno 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 /homey 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.

/homeNi siquiera es una convención universal.

/homeFue 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 /homehay un enlace simbólico y los directorios de usuarios en realidad se encuentran bajo /usr/home.

Solaris también coloca directorios personales "reales" /export/homepara que /homepuedan estar llenos de montajes NFS automáticos y similares.

/homeno 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 ~aliasy esdiseñadoser un directorio de inicio, con ~alias/.qmailarchivos 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/wwwo /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/mysqly /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/uucpetc.
  • En OpenBSD, la cuenta del operador del sistema tiene el directorio de inicio /operatory varias cuentas de usuarios no personales tienen /var/emptycomo 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 usermodcomando en los sistemas operativos Linux.

OpenBSD usermodtiene las mismas opciones. (No hagas lo mismo con el pw usermodcomando en FreeBSD, TrueOS/PC-BSD, etc. La -m -dcombinació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 ( ) useradddel 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--homepor defectoEl directorio base es la base_dirvariable en /etc/usermgmt.confOpenBSD y la HOMEvariable en /etc/default/useraddmuchos Linux. Un administrador del sistema puede cambiar esto a su antojo.

En FreeBSD, TrueOS/PC-BSD y otros. Hay una -bopción similar al pw useraddcomando y un valor predeterminado modificable mediante la homevariable 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 HOMEvariable de entorno. Se configura mediante programas como login, userenvo systemdcuando se cambia la cuenta iniciada. Si no hay HOMEuna 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()o getpwuid()/ getpwiud_r()y extraiga el pw_dircampo. (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, desde vimhasta mailx.

Otras lecturas

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

información relacionada