Acabo de instalar Cygwin, y parece que el directorio de inicio en el indicador de bash está en mi unidad Z :. Ahí no es donde lo quiero.
¿Cómo puedo cambiar esto?
Acabo de instalar Cygwin, y parece que el directorio de inicio en el indicador de bash está en mi unidad Z :. Ahí no es donde lo quiero.
¿Cómo puedo cambiar esto?
Respuestas:
A partir de Cygwin 1.7.34 , la forma recomendada de hacer esto es agregar una db_home
configuración personalizada a /etc/nsswitch.conf
. Un deseo común al hacer esto es hacer que su directorio de inicio de Cygwin sea igual al directorio de su perfil de usuario de Windows. Esta configuración hará eso:
db_home: windows
O equivalente:
db_home: /%H
Debe utilizar la última forma si desea alguna variación en este esquema, como segregar sus archivos de inicio de Cygwin en un subdirectorio de su directorio de perfil de usuario de Windows:
db_home: /%H/cygwin
Hay varios otros esquemas alternativos para la windows
opción más varios otros %
tokens que puede usar en lugar %H
o además de él. Consulte la nsswitch.conf
descripción de la sintaxis en la Guía del usuario de Cygwin para obtener más detalles.
Si instaló Cygwin antes de 1.7.34 o ha ejecutado su mkpasswd
utilidad para tener un /etc/passwd
archivo, puede cambiar su directorio de inicio de Cygwin editando la entrada de su usuario en ese archivo. Su directorio de inicio es el penúltimo elemento en la línea de su usuario en /etc/passwd
.¹
De cualquier forma que lo haga, esto hace que la HOME
variable de entorno se establezca durante el inicio del shell.²
Consulte este artículo de preguntas frecuentes para obtener más información sobre el tema.
Notas al pie:
Considere mudarse /etc/passwd
y /etc/group
apartarse para poder utilizar el nuevo mecanismo basado en SAM / AD .
Si bien es posible configurarlo simplemente a %HOME%
través del Panel de control, oficialmente no se recomienda . No solo anula sin ceremonias los mecanismos anteriores, sino que no siempre funciona, como cuando se ejecutan scripts de shell a través de cron
.
ssh
no funcionaría correctamente hasta editarlo /etc/passwd
como se describe.
/etc/passwd
archivo. Vea mi respuesta aquí para evitar tales problemas.
db_home: /%H
puede resolverse para un nombre de usuario de dominio (en lugar de un nombre de usuario local), que puede no ser el que le gustaría tener. db_home: /cygdrive/c/Users/%U
Hice lo que quería tener.
db_home: windows
, tarda sh
entre 2,5 y 3,5 segundos en comenzar. Cuando lo uso db_home: /cygdrive/c/Users/%U
, tarda sh
entre 0,9 y 1,0 segundos en comenzar. Cuando elimino la db_home
línea o la codifico en el directorio de inicio de Windows, sh
tarda entre 0,2 y 0,3 segundos en comenzar. Voy con la solución codificada, por ejemplo db_home: /cygdrive/c/Users/susam
, porque a menudo ejecuto scripts de shell desde el símbolo del sistema usando el sh
comando, por ejemplo, sh foo.sh
y se vuelve inconveniente esperar más de 2 segundos.
Para aquellos que usan Cygwin 1.7.34 o superior, Cygwin admite la configuración de cómo obtener el directorio de inicio, el shell de inicio de sesión y la información de gecos en formato /etc/nsswitch.conf
. Esto se detalla en la sección de la Guía del usuario de Cygwin:
Si ha creado anteriormente un archivo /etc/passwd
o /etc/group
, querrá eliminarlos y configurar Cygwin utilizando el nuevo modelo de seguridad de Windows para las asignaciones POSIX.
[[ -f /etc/passwd ]] && mv /etc/passwd /etc/passwd.bak
[[ -f /etc/group ]] && mv /etc/group /etc/group.bak
La configuración /etc/nsswitch.conf
del archivo db_home:
define cómo Cygwin obtiene el directorio de inicio del usuario. La configuración predeterminada para db_home:
es
db_home: /home/%U
Entonces, de manera predeterminada, Cygwin simplemente establece el directorio de inicio en /home/$USERNAME
. Sin embargo, puede cambiar eso para apuntar a cualquier otra ruta personalizada que desee. Los caracteres comodín admitidos son:
%u
El nombre de usuario de Cygwin (que es u minúscula).%U
El nombre de usuario de Windows (que es U mayúscula).%D
Dominio de Windows en estilo NetBIOS.%H
Directorio de inicio de Windows en estilo POSIX. Tenga en cuenta que, para la db_home:
configuración, esto solo tiene sentido justo después de la barra anterior, como endb_home: /%H/cygwin
%_
Dado que el espacio y los caracteres TAB se utilizan para separar los esquemas, se debe dar un espacio en el nombre del archivo como %_
(que es un guión bajo).%%
Un carácter de porcentaje.En lugar de una ruta, puede especificar uno de los cuatro esquemas de ruta con nombre que están predefinidos.
windows
El directorio de inicio del usuario se establece en el mismo directorio que se utiliza como directorio de inicio de Windows, normalmente algo similar a %USERPROFILE%
o C:\Users\$USERNAME
. Por supuesto, Cygwin convierte el directorio de Windows al estilo POSIX.
cygwin
Solo AD: el directorio de inicio del usuario se establece en la ruta POSIX proporcionada en el atributo cygwinHome de la clase auxiliar cygwinUser. Consulte también la sección denominada "El esquema cygwin" .
unix
Solo AD: el directorio de inicio del usuario se establece en la ruta POSIX dada en el atributo unixHomeDirectory de la clase auxiliar posixAccount. Consulte también la sección denominada "El esquema de Unix" .
desc
El directorio de inicio del usuario se establece en la ruta POSIX dada en la configuración similar a XML home = "..." en el atributo de descripción del usuario en SAM o AD. Vea la sección llamada "El esquema desc" para una descripción detallada.
Lo siguiente hará que el directorio de inicio del usuario en Cygwin sea el mismo que se usa para el directorio de inicio de Windows.
db_home: windows
Para aquellos que usan Cygwin 1.7.33 o anterior, actualice a la última versión de Cygwin y elimine los archivos /etc/passwd
y usados anteriormente /etc/group
, luego vea los pasos anteriores.
De lo contrario, siga estos pasos anteriores a continuación.
En primer lugar, configure una variable de entorno de Windows para HOME que apunte a su perfil de usuario:
HOME
%USERPROFILE%
Ahora vamos a actualizar el /etc/passwd
archivo Cygwin con la %HOME%
variable de Windows que acabamos de crear. Los inicios de sesión de Shell y los inicios de sesión remotos vía ssh
dependerán /etc/passwd
para indicarles la ubicación de la $HOME
ruta del usuario .
En el símbolo del sistema de Cygwin bash, escriba lo siguiente:
cp /etc/passwd /etc/passwd.bak
mkpasswd -l -p $(cygpath -H) > /etc/passwd
mkpasswd -d -p $(cygpath -H) >> /etc/passwd
El -d
conmutador le dice a mkpasswd que incluya a los usuarios de DOMINIO, mientras -l
que solo genera usuarios de máquinas LOCALES. Esto es importante si está utilizando una PC en el trabajo donde la información del usuario se obtiene de un controlador de dominio de Windows.
Ahora, también puede hacer lo mismo con los grupos, aunque esto no es necesario a menos que utilice una computadora que sea parte de un dominio de Windows. Cygwin lee la información del grupo de las bases de datos de la cuenta de Windows, pero puede agregar un /etc/group
archivo si su máquina a menudo se desconecta de su controlador de dominio.
En el indicador de Cygwin bash, escriba lo siguiente:
cp /etc/group /etc/group.bak
mkgroup -l > /etc/group
mkgroup -d >> /etc/group
Ahora, salga de Cygwin y vuelva a iniciarlo. Debería encontrar que su ruta de INICIO apunta a la misma ubicación que su perfil de usuario de Windows, es decir/cygdrive/c/Users/username
mkgroup
anterior.
Hice algo bastante simple. No quería cambiar la variable de entorno de Windows 7. Así que edité directamente el archivo Cygwin.bat.
@echo off
SETLOCAL
set HOME=C:\path\to\home
C:
chdir C:\apps\cygwin\bin
bash --login -i
ENDLOCAL
Esto simplemente inicia el shell local con este directorio de inicio; eso es lo que quería. No voy a acceder a esto de forma remota, así que esto funcionó para mí.
%HOME%
ubicación anterior de Windows , mientras que Cygwin vim usa la nueva $HOME
ruta que ha declarado.
Cygwin mount
ahora admite el método de enlace que le permite montar un directorio. Por lo tanto, puede simplemente agregar la siguiente línea y /etc/fstab
luego reiniciar su shell:
c:/Users /home none bind 0 0
Cambie su variable de entorno HOME.
en XP, haga clic con el botón derecho en Mi PC >> Propiedades >> Avanzado >> Variables de entorno >> Variables de usuario para >> [seleccione la variable INICIO] >> editar
Me gustaría agregar una corrección / actualización al bit sobre $ HOME que tiene prioridad. El directorio de inicio en / etc / passwd tiene prioridad sobre todo.
Soy un usuario de Cygwin desde hace mucho tiempo y acabo de hacer una instalación limpia de Windows 7 x64 y Cygwin V1.126. Me estaba volviendo loco tratando de averiguar por qué cada vez que ejecutaba ssh seguía obteniendo:
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.
...
Agregué la definición de HOME = c: \ users \ dhaynes en el entorno de Windows, pero seguía intentando crear '/ home / dhaynes'. Probé todos los combo que pude, incluida la configuración de HOME en / cygdrive / c / users / dhaynes. Busqué en Google el mensaje de error, no pude encontrar nada, no pude encontrar nada en el sitio cygwin. Utilizo cygwin de cmd.exe, no bash.exe pero el problema estaba presente en ambos.
Finalmente me di cuenta de que el directorio de inicio en / etc / passwd tenía prioridad sobre la variable de entorno $ HOME. Simplemente volví a ejecutar 'mkpasswd -l> / etc / passwd' y eso actualizó el directorio de inicio, ahora todo está bien con ssh.
Eso puede ser obvio para los tipos de Linux con experiencia en administradores de sistemas, pero para aquellos de nosotros que usamos principalmente Windows es un poco oscuro.
Sucede que uso cwRsync (Cygwin + Rsync para Windows) donde cygwin viene incluido, y no pude encontrar / etc / passwd.
Y seguía diciendo
Could not create directory '/home/username/.ssh'.
...
Failed to add the host to the list of known hosts (/home/username/.ssh/known_hosts).
Así que escribí un archivo por lotes que cambió la variable HOME antes de ejecutar rsync. Algo como:
set HOME=.
rsync /path1 user@host:/path2
¡Y viola! La carpeta .ssh apareció en el directorio de trabajo actual y rsync dejó de molestar con las huellas dactilares de rsa.
Es una revisión rápida, pero luego debería cambiar HOME a una ubicación más segura.
db_home:
para quitarlo de comillas y hacerlo funcionar.