O valor usado para ~
é determinado pelo valor obtido do banco de dados administrativo ( getent passwd
), normalmente no arquivo /etc/passwd
, para o diretório pessoal de cada usuário definido lá.
$ 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
A sexta coluna neste arquivo é onde o valor usado quando alguém digita cd ~
vem.
nsswitch
Você pode ver o que um sistema usaria para o diretório pessoal do usuário usando o 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
O "banco de dados" que os fornece é controlado pelo resolvedor de sistemas, definido em /etc/nsswitch.conf
.
$ grep passwd /etc/nsswitch.conf
#passwd: db files nisplus nis
passwd: files
Arquivos acima significam /etc/passwd
, mas o "banco de dados" pode vir de LDAP, NIS ou outros locais na rede, por exemplo.
Mover / Redefinir?
Para executar esta operação é um pouco complicado depois que as contas foram criadas. Se você está criando contas do zero, é fácil redefinir a localização de um usuário no diretório inicial. Ao executar o comando useradd
, você pode especificar o local a ser usado para o diretório pessoal de um usuário.
Exemplo
$ useradd -d /ext1/acheong ...
trecho da 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 contas existentes?
Isso se torna mais uma operação cirúrgica, já que muitas vezes o caminho do diretório pessoal de um usuário é incluído estaticamente nos arquivos de configuração, tornando-o mais complicado.
Exemplo
$ grep home /home/sam/.*
/home/sam/.gtkrc-1.2-gnome2:include "/home/sam/.gtkrc.mine"
Eles precisarão ser corrigidos ou você precisará fornecer um link de /home/sam
para o novo local, /ext1/sam
.
Movendo quando "banco de dados" não é /etc/passwd
Se o sistema estiver obtendo os diretórios home do LDAP, NIS, etc., você precisará executar a realocação nesses sistemas e coordenar com a movimentação dos arquivos de /home/sam
para /ext1/sam
.
Referências