Je viens d'installer Cygwin et il semble que le répertoire de base de l'invite bash se trouve sur mon lecteur Z:. Ce n'est pas où je le veux.
Comment puis-je changer cela?
Depuis Cygwin 1.7.34 , il est recommandé d’ajouter un fichier personnalisé db_home
réglage sur /etc/nsswitch.conf
. Lorsque vous procédez ainsi, vous souhaitez que votre répertoire de base Cygwin soit égal à votre répertoire de profil utilisateur Windows. Ce paramètre fera cela:
db_home: windows
Ou équivalent:
db_home: /%H
Vous devez utiliser ce dernier formulaire si vous souhaitez une variation de ce schéma, par exemple pour séparer vos fichiers de base Cygwin dans un sous-répertoire de votre répertoire de profil utilisateur Windows:
db_home: /%H/cygwin
Il existe plusieurs autres schémas alternatifs pour l'option windows
ainsi que plusieurs autres schémas %
jetons que vous pouvez utiliser à la place de %H
ou en plus de cela. Voir le nsswitch.conf
description de la syntaxe dans du Guide de l'utilisateur Cygwin pour plus de détails.
Si vous avez installé Cygwin avant la version 1.7.34 ou avez exécuté son utilitaire mkpasswd
de sorte que vous ayez un /etc/passwd
, vous pouvez modifier votre répertoire de base Cygwin en modifiant l’entrée de votre utilisateur dans ce fichier. Votre répertoire personnel est l’avant-dernier élément de la ligne de votre utilisateur dans /etc/passwd
. ¹
Quelle que soit la méthode choisie, la variable d'environnement HOME
est définie lors du démarrage du shell.²
Voir this FAQ item pour plus d'informations sur le sujet.
Notes de bas de page:
Envisager de déménager /etc/passwd
et /etc/group
afin de pouvoir utiliser le nouveau mécanisme basé sur SAM/AD.
Bien qu'il soit possible de définir simplement %HOME%
via le panneau de configuration, il est officiellement déconseillé . Non seulement il redéfinit les mécanismes ci-dessus sans cérémonie, mais il ne fonctionne pas toujours, par exemple lors de l'exécution de scripts Shell via cron
.
Pour ceux qui utilisent Cygwin 1.7.34 ou une version plus récente, Cygwin prend en charge la configuration de la récupération des informations du répertoire de base, du shell de connexion et de gecos dans /etc/nsswitch.conf
. Ceci est détaillé dans la section Guide de l'utilisateur Cygwin:
Si vous avez déjà créé un fichier /etc/passwd
Ou /etc/group
, Vous souhaitez les supprimer et configurer Cygwin à l'aide du nouveau modèle de sécurité Windows sur les mappages POSIX.
[[ -f /etc/passwd ]] && mv /etc/passwd /etc/passwd.bak
[[ -f /etc/group ]] && mv /etc/group /etc/group.bak
Le paramètre /etc/nsswitch.conf
Du fichier db_home:
Définit la manière dont Cygwin va chercher le répertoire de base de l'utilisateur. Le paramètre par défaut pour db_home:
Est
db_home: /home/%U
Donc, par défaut, Cygwin définit simplement le répertoire de base sur /home/$USERNAME
. Vous pouvez cependant changer cela pour qu'il pointe vers tout autre chemin personnalisé que vous souhaitez. Les caractères génériques pris en charge sont:
%u
Le nom d'utilisateur Cygwin (c'est la lettre minuscule u).%U
Le nom d'utilisateur Windows (U majuscule).%D
Domaine Windows dans le style NetBIOS.%H
Répertoire de base Windows dans le style POSIX. Notez que, pour le paramètre db_home:
, Cela n'a de sens que juste après la barre oblique précédente, comme dans db_home: /%H/cygwin
%_
Etant donné que les espaces et les caractères de tabulation sont utilisés pour séparer les schémas, un espace dans le nom du fichier doit être défini comme %_
(C'est un trait de soulignement).%%
Un caractère en pourcentage.Au lieu d'un chemin, vous pouvez spécifier l'un des quatre schémas de chemin nommés qui sont prédéfinis.
windows
Le répertoire personnel de l'utilisateur est défini sur le même répertoire que celui utilisé comme répertoire personnel Windows, généralement quelque chose le long des lignes %USERPROFILE%
ou C:\Users\$USERNAME
. Bien entendu, le répertoire Windows est converti en style POSIX par Cygwin.
cygwin
AD uniquement: le répertoire de base de l'utilisateur est défini sur le chemin POSIX indiqué dans l'attribut cygwinHome de la classe auxiliaire cygwinUser. Voir aussi la section intitulée "Le schéma cygwin" .
unix
AD uniquement: le répertoire de base de l'utilisateur est défini sur le chemin POSIX indiqué dans l'attribut unixHomeDirectory de la classe auxiliaire posixAccount. Voir aussi la section intitulée "Le schéma unix" .
desc
Le répertoire de base de l'utilisateur est défini sur le chemin POSIX indiqué dans le paramètre similaire à XML de home = "..." dans l'attribut de description de l'utilisateur dans SAM ou AD. Voir la section intitulée "Le schéma desc" pour une description détaillée.
Dans ce qui suit, le répertoire de base de l'utilisateur dans Cygwin sera identique à celui utilisé pour le répertoire de base Windows.
db_home: windows
Pour ceux qui utilisent Cygwin 1.7.33 ou une version antérieure, effectuez une mise à jour vers la dernière version de Cygwin et supprimez le code /etc/passwd
et /etc/group
, puis suivez les étapes ci-dessus.
Sinon, suivez les étapes ci-dessous.
Tout d'abord, définissez une variable d'environnement Windows pour HOME qui pointe vers votre profil d'utilisateur:
HOME
%USERPROFILE%
Nous allons maintenant mettre à jour le fichier Cygwin /etc/passwd
Avec la variable Windows %HOME%
Que nous venons de créer. Les connexions Shell et les connexions distantes via ssh
s'appuieront sur /etc/passwd
Pour leur indiquer l'emplacement du chemin de l'utilisateur $HOME
.
À l'invite de la commande Cygwin bash, tapez ce qui suit:
cp /etc/passwd /etc/passwd.bak
mkpasswd -l -p $(cygpath -H) > /etc/passwd
mkpasswd -d -p $(cygpath -H) >> /etc/passwd
Le commutateur -d
Indique à mkpasswd d'inclure les utilisateurs DOMAIN, tandis que -l
N'indique que les utilisateurs de machine LOCAUX en sortie. Ceci est important si vous utilisez un PC au travail où les informations utilisateur sont obtenues à partir d'un contrôleur de domaine Windows.
Maintenant, vous pouvez également faire la même chose pour les groupes, bien que cela ne soit pas nécessaire, sauf si vous utiliserez un ordinateur faisant partie d'un domaine Windows. Cygwin lit les informations de groupe à partir des bases de données de comptes Windows, mais vous pouvez ajouter un fichier /etc/group
Si votre ordinateur est souvent déconnecté de son contrôleur de domaine.
À l'invite Cygwin bash, tapez ce qui suit:
cp /etc/group /etc/group.bak
mkgroup -l > /etc/group
mkgroup -d >> /etc/group
Maintenant, quittez Cygwin et redémarrez-le. Vous devriez constater que votre chemin HOME indique le même emplacement que votre profil utilisateur Windows - c.-à-d. /cygdrive/c/Users/username
J'ai fait quelque chose d'assez simple. Je ne voulais pas changer la variable d'environnement Windows 7. J'ai donc directement modifié le fichier Cygwin.bat.
@echo off
SETLOCAL
set HOME=C:\path\to\home
C:
chdir C:\apps\cygwin\bin
bash --login -i
ENDLOCAL
Cela commence simplement le Shell local avec ce répertoire de base; c'est ce que je voulais. Je ne vais pas accéder à distance à cela, donc cela a fonctionné pour moi.
Cygwin mount
supporte maintenant la méthode bind qui vous permet de monter un répertoire. Par conséquent, vous pouvez simplement ajouter la ligne suivante à /etc/fstab
, puis redémarrez votre shell:
c:/Users /home none bind 0 0
Changez votre variable d'environnement HOME.
sous XP, cliquez avec le bouton droit de la souris sur Poste de travail >> Propriétés >> Options avancées >> Variables d’environnement >> Variables utilisateur pour >> [sélectionnez la variable HOME] >> modifier
J'aimerais ajouter une correction/mise à jour au passage relatif à la priorité de $ HOME. Le répertoire personnel de/etc/passwd a priorité sur tout.
Je suis un utilisateur de longue date de Cygwin et je viens d’effectuer une nouvelle installation de Windows 7 x64 et de Cygwin V1.126. Je devenais fou en essayant de comprendre pourquoi chaque fois que je courais ssh, je continuais à recevoir:
e:\>ssh foo.bar.com
Could not create directory '/home/dhaynes/.ssh'.
The authenticity of Host 'foo.bar.com (10.66.19.19)' can't be established.
...
J'ajoute la définition HOME = c:\users\dhaynes dans l'environnement Windows, mais il essayait toujours de créer '/ home/dhaynes'. J'ai essayé tous les combos possibles, y compris la définition de HOME dans/cygdrive/c/users/dhaynes. Googlé pour le message d'erreur, rien trouvé, rien trouvé sur le site de cygwin. J'utilise cygwin à partir de cmd.exe, pas bash.exe, mais le problème était présent dans les deux.
J'ai finalement réalisé que le répertoire personnel de/etc/passwd prenait le pas sur la variable d'environnement $ HOME. J'ai simplement relancé 'mkpasswd -l>/etc/passwd' et qui a mis à jour le répertoire de base, maintenant tout va bien avec ssh.
Cela peut sembler évident aux types Linux ayant une expérience d’administrateur système, mais pour ceux d’entre nous qui utilisons principalement Windows, c’est un peu obscur.
Il m’arrive d’utiliser cwRsync (Cygwin + Rsync pour Windows) où cygwin est fourni, et je n’ai pas pu trouver/etc/passwd.
Et ça n'arrêtait pas de dire
Could not create directory '/home/username/.ssh'.
...
Failed to add the Host to the list of known hosts (/home/username/.ssh/known_hosts).
J'ai donc écrit un fichier de commandes qui a modifié la variable HOME avant d'exécuter rsync. Quelque chose comme:
set HOME=.
rsync /path1 user@Host:/path2
Et alto! Le dossier .ssh est apparu dans le répertoire de travail actuel et rsync a cessé de gêner avec les empreintes rsa.
C'est un correctif rapide, mais plus tard, vous devriez changer HOME vers un emplacement plus sécurisé.