web-dev-qa-db-fra.com

Comment créer un dossier personnel après la création du compte?

J'ai créé un nouvel utilisateur avec useradd name et j'ai oublié d'utiliser -d -m pour créer leur répertoire personnel. J'ai essayé d'en créer un, de copier le contenu de/etc/skel et de chowning vers le nouvel utilisateur.

Les alias ne fonctionnent pas, tels que ll, et je viens d'avoir un $ à l'invite de commande, au lieu de name@server ~$. En outre, l’utilisation de la molette de défilement évacue des ordures sur la ligne de commande :(

Comment résoudre ce problème ou est-il plus facile de supprimer l'utilisateur et de recommencer?

59
mortona42

Vous avez $ à l'invite de commande parce que vous utilisez le shell sh.

Le shell avec name@server est basé sur le shell bash.

Vous devez changer le shell par défaut pour le nouvel utilisateur créé via: usermod -s /bin/bash.

Utilisez à nouveau usermod pour ajouter le répertoire de base de l'utilisateur s'il n'était pas présent. usermod -d /home/username

Si l'utilisateur n'a pas de répertoire de base spécifié dans /etc/passwd:

Exécutez mkhomedir_helper <username> pour créer le répertoire de base. mkhomedir_helper va créer le répertoire personnel de l'utilisateur et copier le contenu dans /etc/skel également.

Si l'utilisateur a déjà un répertoire personnel spécifié dans /etc/passwd:

Tels que via usermod -d /some/directory, mkhomedir_helper ne fonctionnera pas. Le seul moyen est de créer manuellement le répertoire de base pour l'utilisateur concerné.

57
iridescent

Voici un script rapide bash. Exécuter en tant que root avec Sudoname__. Cela prend n'importe quel nombre d'arguments, chacun étant un nom d'utilisateur ayant besoin d'un répertoire personnel. Cela suppose quelques hypothèses: que vos répertoires de départ sont dans /home et que votre répertoire squelette est /etc/skel. Ce sont les valeurs par défaut sur Ubuntu. Vous pouvez télécharger ou wgetname __/curlce script de 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
6
Zenexer

Pour changer la valeur par défaut du répertoire de base du nouvel utilisateur, vous pouvez donner

Sudo useradd -D --base-dir /home/new_user

commander. Voir seradd -D [options] de

man useradd 
4
numand

Si vous avez oublié d'utiliser -d -m, la meilleure et rapide option consiste à exécuter

Sudo mkhomedir_helper username

with crée le répertoire personnel comme si vous aviez fourni les options manquantes.

4
David

Examinez la commande xdg-user-dirs-update. Il créera les répertoires X Windows par défaut: Bureau, Téléchargement, etc ...

Un utilisateur sans les répertoires par défaut peut exécuter xdg-user-dirs-update --force pour créer les répertoires. Je devais le faire pour l'un de mes comptes d'utilisateur.

Je vous recommande de lire la page de manuel avant d'exécuter la commande xdg-user-dirs-update. La page de manuel de xdg-user-dir ajoute quelques détails supplémentaires.

La "Spécification du répertoire de base XDG" fait partie des spécifications de freedesktop.org.

4
user483623

Je viens de rencontrer ceci (Ubuntu 12.04) et je l'ai résolu en créant un utilisateur temporaire, en copiant le répertoire des utilisateurs, en le chowning et en supprimant enfin l'utilisateur temporaire.

Sudo adduser temp
Sudo cp -r /home/temp /home/name
Sudo chown -R name.name /home/name
Sudo deluser temp
1