O valor usado ~
é determinado a partir do valor obtido no banco de dados administrativo ( getent passwd
), geralmente no /etc/passwd
arquivo, para o diretório inicial 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 deste arquivo é a origem do valor usado quando alguém digita cd ~
.
nsswitch
Você pode ver o que um sistema usaria para o diretório inicial 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 através do resolvedor de sistemas, definido em /etc/nsswitch.conf
.
$ grep passwd /etc/nsswitch.conf
#passwd: db files nisplus nis
passwd: files
Os arquivos acima significam /etc/passwd
, mas o "banco de dados" pode vir de LDAP, NIS ou outros locais na rede, por exemplo.
Mover / Redefinir?
Executar esta operação é um pouco complicado depois que as contas foram criadas. Se você estiver criando contas do zero, é trivial redefinir a localização de um usuário no diretório inicial. Ao executar o useradd
comando, você pode especificar o local a ser usado para o diretório inicial de um usuário.
Exemplo
$ useradd -d /ext1/acheong ...
trecho da página do manual
-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, pois muitas vezes o caminho do diretório inicial 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 precisam ser corrigidos ou você precisará fornecer um link /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 pessoais do LDAP, NIS etc., será necessário realizar a realocação nesses sistemas e coordenar a movimentação dos arquivos de /home/sam
para /ext1/sam
.
Referências
~
para algo diferente do diretório inicial real?