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 chown
ing 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?
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é.
Voici un script rapide bash. Exécuter en tant que root avec Sudo
name__. 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 wget
name __/curl
ce 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
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
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.
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.
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