Je viens d'installer Cygwin, et il semble que le répertoire personnel de l'invite bash se trouve sur mon lecteur Z :. Ce n'est pas là que je le veux.
Comment puis-je changer cela?
Je viens d'installer Cygwin, et il semble que le répertoire personnel de l'invite bash se trouve sur mon lecteur Z :. Ce n'est pas là que je le veux.
Comment puis-je changer cela?
Réponses:
À partir de Cygwin 1.7.34 , la méthode recommandée pour ce faire est d'ajouter un db_home
paramètre personnalisé à /etc/nsswitch.conf
. Un souhait commun lors de cette opération est de rendre votre répertoire de base Cygwin é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 variante de ce schéma, par exemple pour séparer vos fichiers personnels 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' windows
option ainsi que plusieurs autres %
jetons que vous pouvez utiliser à sa place %H
ou en plus. Voir la nsswitch.conf
description de la syntaxe dans le Guide de l'utilisateur Cygwin pour plus de détails.
Si vous avez installé Cygwin avant la 1.7.34 ou si vous avez exécuté son mkpasswd
utilitaire pour avoir un /etc/passwd
fichier, vous pouvez changer votre répertoire personnel Cygwin en éditant l'entrée de votre utilisateur dans ce fichier. Votre répertoire personnel est l'avant-dernier élément sur la ligne de votre utilisateur /etc/passwd
.¹
Quelle que soit la manière dont vous le faites, cela entraîne la HOME
définition de la variable d'environnement lors du démarrage du shell .²
Consultez cet article de la FAQ pour en savoir plus sur le sujet.
Notes de bas de page:
Pensez à vous déplacer /etc/passwd
et à vous /etc/group
écarter afin d'utiliser le nouveau mécanisme basé sur SAM / AD à la place.
Bien qu'il soit possible de configurer simplement %HOME%
via le panneau de configuration, il est officiellement déconseillé . Non seulement il remplace sans cérémonie les mécanismes ci-dessus, mais il ne fonctionne pas toujours, comme lors de l'exécution de scripts shell via cron
.
ssh
ne fonctionnait pas correctement avant de le modifier /etc/passwd
comme décrit.
/etc/passwd
fichier. Voir ma réponse ici pour éviter de tels problèmes.
db_home: /%H
peut résoudre pour un nom d'utilisateur de domaine (au lieu d'un nom d'utilisateur local), qui peut ne pas être ce que vous aimeriez avoir. db_home: /cygdrive/c/Users/%U
fait ce que je voulais.
db_home: windows
, il faut sh
environ 2,5 à 3,5 secondes pour démarrer. Lorsque j'utilise db_home: /cygdrive/c/Users/%U
, il faut sh
environ 0,9 à 1,0 seconde pour démarrer. Lorsque je supprime la db_home
ligne ou que je la code en dur dans le répertoire de base de Windows, le démarrage sh
prend environ 0,2 à 0,3 seconde. Je vais avec la solution codée en dur, par exemple db_home: /cygdrive/c/Users/susam
, parce que j'exécute souvent des scripts shell à partir de l'invite de commande en utilisant la sh
commande, par exemple sh foo.sh
et il devient gênant d'attendre plus de 2 secondes.
Pour ceux qui utilisent Cygwin 1.7.34 ou supérieur, Cygwin prend en charge la configuration de la manière de récupérer le répertoire personnel, le shell de connexion et les informations 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 voudrez les supprimer et configurer Cygwin en utilisant le nouveau modèle de sécurité Windows pour 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 récupère le répertoire personnel 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 home sur /home/$USERNAME
. Vous pouvez changer cela pour pointer vers n'importe quel autre chemin personnalisé que vous souhaitez. Les caractères génériques pris en charge sont:
%u
Le nom d'utilisateur Cygwin (c'est un u minuscule).%U
Le nom d'utilisateur Windows (c'est U majuscule).%D
Domaine Windows dans le style NetBIOS.%H
Répertoire de base Windows dans le style POSIX. Notez que, pour le db_home:
paramètre, cela n'a de sens que juste après la barre oblique précédente, comme dansdb_home: /%H/cygwin
%_
Étant donné que des espaces et des caractères TAB sont utilisés pour séparer les schémas, un espace dans le nom de fichier doit être indiqué %_
(c'est un trait de soulignement).%%
Un caractère pour cent.Au lieu d'un chemin, vous pouvez spécifier l'un des quatre schémas de chemin nommé prédéfinis.
windows
Le répertoire de base de l'utilisateur est défini sur le même répertoire que celui utilisé comme répertoire de base de Windows, généralement quelque chose du genre %USERPROFILE%
ou C:\Users\$USERNAME
. Bien entendu, le répertoire Windows est converti en style POSIX par Cygwin.
cygwin
AD uniquement: le répertoire personnel 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 personnel 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 de type XML 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.
Ce qui suit rendra le répertoire personnel de l'utilisateur dans Cygwin le même que celui utilisé pour le répertoire personnel Windows.
db_home: windows
Pour ceux qui utilisent Cygwin 1.7.33 ou une version antérieure, mettez à jour vers la dernière version de Cygwin et supprimez les fichiers /etc/passwd
et /etc/group
fichiers précédemment utilisés , puis reportez-vous aux étapes ci-dessus.
Sinon, suivez ces étapes plus anciennes ci-dessous.
Tout d'abord, définissez une variable d'environnement Windows pour HOME qui pointe vers votre profil utilisateur:
HOME
%USERPROFILE%
Nous allons maintenant mettre à jour le /etc/passwd
fichier Cygwin avec la %HOME%
variable Windows que nous venons de créer. Les connexions Shell et les connexions à distance via ssh
s'appuieront /etc/passwd
pour leur indiquer l'emplacement du $HOME
chemin de l'utilisateur .
À l'invite de 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 -d
commutateur indique à mkpasswd d'inclure les utilisateurs DOMAIN, alors -l
qu'il ne doit afficher que les utilisateurs de machine LOCAL. Ceci est important si vous utilisez un PC au travail où les informations utilisateur sont obtenues à partir d'un contrôleur de domaine Windows.
Désormais, vous pouvez également faire de même pour les groupes, bien que ce ne soit pas nécessaire, sauf si vous utilisez un ordinateur faisant partie d'un domaine Windows. Cygwin lit les informations de groupe à partir des bases de données des comptes Windows, mais vous pouvez ajouter un /etc/group
fichier si votre machine est souvent déconnectée 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 pointe vers le même emplacement que votre profil utilisateur Windows - c.-à-d./cygdrive/c/Users/username
mkgroup
ci - dessus.
J'ai fait quelque chose d'assez simple. Je ne voulais pas changer la variable d'environnement Windows 7. J'ai donc directement édité le fichier Cygwin.bat.
@echo off
SETLOCAL
set HOME=C:\path\to\home
C:
chdir C:\apps\cygwin\bin
bash --login -i
ENDLOCAL
Cela démarre simplement le shell local avec ce répertoire personnel; c'est ce que je voulais. Je ne vais pas y accéder à distance, donc cela a fonctionné pour moi.
%HOME%
emplacement Windows , tandis que Cygwin vim utilise le nouveau $HOME
chemin que vous avez déclaré.
Cygwin prend mount
désormais en charge 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émarrer votre shell:
c:/Users /home none bind 0 0
Modifiez votre variable d'environnement HOME.
sous XP, cliquez avec le bouton droit sur Poste de travail >> Propriétés >> Avancé >> Variables d'environnement >> Variables utilisateur pour >> [sélectionnez la variable HOME] >> modifier
Je voudrais ajouter une correction / mise à jour au bit sur la priorité de $ HOME. Le répertoire personnel dans / etc / passwd a priorité sur tout.
Je suis un utilisateur de longue date de Cygwin et je viens de faire une installation propre de Windows 7 x64 et Cygwin V1.126. J'étais fou d'essayer de comprendre pourquoi chaque fois que je courais ssh, je continuais à obtenir:
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 j'essayais toujours de créer '/ home / dhaynes'. J'ai essayé tous les combos que je pouvais, y compris la définition de HOME sur / cygdrive / c / users / dhaynes. Google a recherché le message d'erreur, n'a rien trouvé, n'a rien trouvé sur le site cygwin. J'utilise cygwin 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 home dans / etc / passwd prenait le pas sur la variable d'environnement $ HOME. J'ai simplement relancé 'mkpasswd -l> / etc / passwd' et cela a mis à jour le répertoire personnel, maintenant tout va bien avec ssh.
Cela peut être évident pour les types Linux avec une expérience sysadmin, mais pour ceux d'entre nous qui utilisent principalement Windows, c'est un peu obscur.
Il se trouve que j'utilise 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 batch qui a changé 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é d'être ennuyeux avec les empreintes digitales rsa.
C'est un correctif rapide, mais plus tard, vous devriez changer HOME pour un emplacement plus sûr.
db_home:
de le retirer et de le faire fonctionner.