/homenem sequer é uma convenção universal.

/homenem sequer é uma convenção universal.

É possível atribuir a funcionalidade do diretório que normalmente é atribuído /home(em distribuições como Debian e Ubuntu) a outro diretório (inteiramente)? Por exemplo, se você pudesse fazer isso e alterasse para /xyztodos os seus novos diretórios de usuários de propriedade humana seriam instalados /xyz(por exemplo, o caminho da área de trabalho de Sally seria /xyz/Sally/Desktopem vez de /home/Sally/Desktope /homenão precisaria existir).

Estou trabalhando em um programa portátil que salva caminhos e os carrega. Se for usado em um computador diferente com um diretório inicial que não está em /home(e, conseqüentemente, não há /home, mas sim outro caminho com sua funcionalidade), então eu desejarei que ele ajuste o caminho para ter o local adequado do diretório inicial em para o novo computador quando o caminho for carregado.

Responder1

Os diretórios home não precisam ser inseridos /homee seu programa estará errado se estiver conectando quaisquer suposições como a de que todos os diretórios home compartilham um pai comum ou que esse pai é nomeado /home.

/homenem sequer é uma convenção universal.

/homefoi uma ideia concebida um pouco depois da invenção do Unix. Nos primeiros Unices, outros diretórios eram usados. Isso ainda pode ser visto hoje em sistemas operacionais como o FreeBSD (e seus derivados), onde /homehá um link simbólico e os diretórios de usuários realmente residem em /usr/home.

Da mesma forma, o Solaris coloca diretórios pessoais "reais" /export/homepara que /homepossam estar cheios de montagens NFS automáticas e similares.

/homenão é o pai de muitos diretórios iniciais comuns.

Existem muitos diretórios iniciais que não residem no /home.

  • O mais óbvio é /rooto diretório inicial do superusuário, movido de seu local antigo para /que os arquivos pessoais e "pontos" do root não sobrecarreguem o diretório raiz, mas mantidos no volume raiz para que o superusuário possa efetuar login mesmo quando a montagem de outros volumes de disco está falhando.
  • Vários softwares daemons possuem diretórios iniciais em outros locais, para as contas dedicadas nas quais esses daemons são executados.
    • As várias contas daemon do qmail usam, /var/qmailpor exemplo, ou /var/qmail/alias. Este último é até comumente tratado como ~aliase éprojetadopara ser um diretório inicial, com ~alias/.qmailarquivos como nos diretórios iniciais de outros usuários (reais).
    • Vários softwares de servidor HTTP(S) e FTP(s) possuem convenções (oficiais ou não oficiais). Por exemplo: diretórios iniciais para hosts virtuais que possuem contas de sistema dedicadas podem ser /var/wwwou /var/www/$VHOST.
    • Outros softwares podem ser encontrados em vários sistemas operacionais usando diretórios iniciais para contas de usuários não pessoais, como /var/unbound, /var/db/mysqle /var/db/tor.
    • Várias contas de usuário não pessoais convencionais têm diretórios iniciais, como /sbin, /var/adm, /var/spool/lpd, /var/spool/mail, /var/spool/news, /var/spool/uucpe assim por diante.
  • No OpenBSD, a conta do operador do sistema tem o diretório inicial /operatore várias contas de usuários não pessoais têm /var/emptycomo diretórios pessoais.

Os diretórios iniciais não precisam permanecer no formato /home.

Os diretórios iniciais podem ser movidos após a criação da conta usando as opções -d( --home) e -m( --move-home) do usermodcomando em sistemas operacionais Linux.

O OpenBSD usermodtem as mesmas opções. (Não faça o mesmo com o pw usermodcomando no FreeBSD, TrueOS/PC-BSD, et al.. A -m -dcombinação tem um significado sutilmente diferente.)

Os diretórios iniciais não precisam ser criados no formato /home.

Até mesmo o diretório pai convencional usado ao criar contas pode ser alterado, e não necessariamente /home.

Nos sistemas operacionais Linux e OpenBSD, a opção useradddo comando -b( --base-dir) especifica o pai no qual os diretórios iniciais são criados, se não forem explicitamente nomeados com -d( --home). OpadrãoO diretório base é a base_dirvariável no /etc/usermgmt.confOpenBSD e a HOMEvariável em /etc/default/useraddmuitos Linux. Um administrador de sistema pode alterar isso quando quiser.

No FreeBSD, TrueOS/PC-BSD, et al. há uma -bopção semelhante ao pw useraddcomando e um padrão para isso modificável por meio da homevariável em /etc/pw.conf.

Lidando com isso

Seu programa não deve estabelecer nenhuma expectativa sobre a localização dos diretórios pessoais ou de seus pais.

  • Se você quiser saber o diretório inicial do usuário conectado no momento, use a HOMEvariável de ambiente. É configurado por programas como loginou userenvquando systemda conta conectada é alterada. Se não houver nenhuma HOMEvariável de ambiente, é uma opção de design válida simplesmente abortar, alegando que as variáveis ​​de ambiente da sessão de login precisam estar presentes para que seu programa seja executado. Caso contrário, você poderá obter o UID efetivo/real (conforme apropriado) do processo e consultar o banco de dados de senhas.
  • Se você deseja saber o diretório inicial de um usuário específico, consulte o banco de dados de senhas com as funções da biblioteca getpwnam()/ getpwnam_r()ou getpwuid()/ getpwiud_r()e retire o pw_dircampo. (Observe queeste campo pode ser NULL ou pode apontar para uma string de comprimento zero.)
  • Se você deseja denotar simbolicamente o diretório inicial de um usuário de uma forma que seja independente de sua localização real, você pode adotar a convenção de uma expansão til semelhante a um shell: ~JdeBP. Muitos programas fazem isso, de vima mailx.

Leitura adicional

Responder2

se você deseja alterar o local do diretório inicial do usuário para algum outro local, consulte esta resposta

https://stackoverflow.com/questions/20797819/command-to-change-the-default-home-directory-of-a-user

informação relacionada