Como criar a pasta pessoal do usuário após a criação da conta? [duplicado]

52

Eu criei um novo usuário com useradd name e esqueci de usar -d -m para criar seu diretório pessoal. Eu tentei fazer um, copiando o conteúdo de / etc / skel e chown ing tudo para o novo usuário.

Os aliases não funcionam, como ll , e eu tenho apenas um $ no prompt de comando, em vez de name@server ~$ . Além disso, usando a roda de rolagem despeja lixo na linha de comando: (

Como faço para corrigir isso ou é mais fácil excluir o usuário e começar de novo?

    
por mortona42 18.06.2012 / 21:12

6 respostas

53

Você tem $ no prompt de comando porque está usando o sh shell.

O shell com name@server é baseado no shell bash .

Você tem que mudar o shell padrão para o usuário recém-criado via: usermod -s /bin/bash .

Usando usermod novamente para adicionar o diretório pessoal do usuário, se ele não estivesse presente. usermod -d /home/username

Se o usuário não tiver um diretório inicial especificado em /etc/passwd :

Execute mkhomedir_helper <username> para criar o diretório inicial. mkhomedir_helper criará o diretório inicial do usuário e copiará o material em /etc/skel também.

Se o usuário já tiver um diretório inicial especificado em /etc/passwd :

Por exemplo, por meio de usermod -d /some/directory , mkhomedir_helper não funcionará. A única maneira é criar manualmente o diretório inicial para o usuário afetado.

    
por iridescent 17.12.2013 / 17:05
6

Aqui está um rápido script. Executar como root com sudo . Ele recebe qualquer número de argumentos, cada um sendo um nome de usuário que precisa de um diretório base. Isso faz algumas suposições: que seus diretórios pessoais estão em /home e que seu diretório de esqueleto é /etc/skel . Estes são os padrões no Ubuntu. Você pode fazer o download ou wget / curl deste script em gist .

#!/bin/bash
if [ $# -lt 1 ]; then
    echo "Syntax: $_ USER[ USER[ ...]]" >&2
    exit 1
fi

exit_code=0

for user in "$@"; do
    home="/home/$user"
    cp -R /etc/skel "$home" && echo $'\e[32m'"Copied skeleton to: $home"$'\e[m' || ( exit_code=$?; echo $'\e[31m'"Failed to create: $home"$'\e[m' ) >&2
    chown -R "$user:$user" "$home" && echo $'\e[32m'"Set owner on: $home"$'\e[m' || ( exit_code=$?; echo $'\e[31m'"Failed to set owner on: $home"$'\e[m' ) >&2
done

exit $exit_code
    
por Zenexer 20.06.2013 / 09:33
4

Para alterar o valor padrão do diretório pessoal do novo usuário, você pode fornecer

sudo useradd -D --base-dir /home/new_user
comando

. Veja useradd -D [opções] em

man useradd 
    
por numand 18.06.2012 / 21:31
4

Dê uma olhada no comando xdg-user-dirs-update . Ele criará os diretórios padrão do X Windows: Desktop, Download, etc ...

Um usuário sem os diretórios padrão pode executar xdg-user-dirs-update --force para criar os diretórios. Eu tive que fazer isso para uma das minhas contas de usuário.

Eu recomendo ler a página man antes de executar o comando xdg-user-dirs-update . A man page de xdg-user-dir adiciona mais alguns detalhes.

A "Especificação de Diretório Base do XDG" faz parte das especificações do freedesktop.org.

    
por user483623 26.12.2015 / 20:29
2

Se você esqueceu de usar -d -m , a melhor e mais rápida opção é executar

sudo mkhomedir_helper username

com cria o diretório inicial como se você tivesse fornecido as opções ausentes.

    
por David 13.10.2016 / 14:46
1

Eu corri para isso (Ubuntu 12.04) e resolvi isso criando um usuário temporário, copiando sobre o diretório do usuário, chupando-o e finalmente excluindo o usuário temporário.

sudo adduser temp
sudo cp -r /home/temp /home/name
sudo chown -R name.name /home/name
sudo deluser temp
    
por rancidfishbreath 08.05.2013 / 21:02