orden - que puedo hacer con cygwin
¿Cómo puedo cambiar mi carpeta de inicio de Cygwin después de la instalación? (7)
Cygwin 1.7.34+
Para quienes usan Cygwin 1.7.34 o superior, Cygwin admite la configuración de cómo recuperar el directorio de inicio, el shell de inicio de sesión y la información de gecos en /etc/nsswitch.conf
. Esto se detalla en la sección de la Guía del usuario de Cygwin:
Si ha creado previamente un /etc/passwd
o /etc/group
, querrá eliminarlos y configurar Cygwin utilizando el nuevo modelo de seguridad de Windows para las asignaciones de POSIX.
[[ -f /etc/passwd ]] && mv /etc/passwd /etc/passwd.bak
[[ -f /etc/group ]] && mv /etc/group /etc/group.bak
La /etc/nsswitch.conf
db_home:
del archivo /etc/nsswitch.conf
define cómo Cygwin recupera el directorio de inicio del usuario. La configuración predeterminada para db_home:
es
db_home: /home/%U
Entonces, de forma predeterminada, Cygwin simplemente establece el directorio de inicio en /home/$USERNAME
. 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 (eso es u en minúscula). -
%U
El nombre de usuario de Windows (eso 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 el ajustedb_home:
esto solo tiene sentido justo después de la barra anterior, como endb_home: /%H/cygwin
-
%_
Como el espacio y los caracteres TAB se usan para separar los esquemas, un espacio en el nombre del archivo se debe dar como%_
(es un guión bajo). -
%%
Un personaje por ciento.
En lugar de una ruta, puede especificar uno de los cuatro esquemas de ruta nombrados que están predefinidos.
windows
El directorio de inicio del usuario está configurado en el mismo directorio que se usa como directorio de inicio de Windows, generalmente algo en la línea de%USERPROFILE%
oC:/Users/$USERNAME
. Por supuesto, el directorio de Windows se convierte a estilo POSIX por Cygwin.Solo
cygwin
AD: el directorio de inicio del usuario se establece en la ruta POSIX proporcionada en el atributo cygwinHome de la clase auxiliar cygwinUser. Ver también la sección llamada "El esquema cygwin" .unix
AD only: el directorio de inicio del usuario se establece en la ruta POSIX dada en el atributo unixHomeDirectory de la clase auxiliar posixAccount. Ver también la sección llamada "El esquema de Unix" .desc
El directoriodesc
usuario se establece en la ruta POSIX dada en la configuración home = "..." XML-like en el atributo de descripción del usuario en SAM o AD. Consulte la sección llamada "El esquema de descifrado" para obtener 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
Cygwin 1.7.33 o anterior
Para aquellos que usan Cygwin 1.7.33 o anterior, actualicen a la última versión de Cygwin y eliminen los archivos /etc/passwd
y /etc/group
previamente utilizados, luego vea los pasos anteriores.
De lo contrario, siga estos pasos anteriores más abajo.
En primer lugar, establezca una variable de entorno de Windows para HOME que apunte a su perfil de usuario:
- Sistema abierto en el panel de control
- En la pestaña Avanzado, haga clic en Variables de entorno (hacia abajo)
- En el área Variables de usuario, haga clic en "Nuevo ..."
- Para nombre de variable, ingrese
HOME
- Para el valor de variable, ingrese
%USERPROFILE%
- Haga clic en Aceptar en todos los cuadros de diálogo abiertos para aplicar esta nueva configuración
Ahora vamos a actualizar el /etc/passwd
Cygwin /etc/passwd
con la variable Windows %HOME%
que acabamos de crear. Los inicios de sesión de Shell y los inicios de sesión remotos a través de ssh
se basarán en /etc/passwd
para indicarles la ubicación de la ruta $HOME
del usuario.
En el indicador de comando 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
le dice a mkpasswd que incluya usuarios de DOMINIO, mientras que -l
solo debe enviar usuarios de la máquina LOCAL. 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 para los grupos, aunque esto no es necesario a menos que use una computadora que sea parte de un Dominio de Windows. Cygwin lee información de grupo de las bases de datos de cuenta de Windows, pero puede agregar un /etc/group
si su máquina a menudo está desconectada de su Controlador de dominio.
En el indicador de bash de Cygwin, 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 HOME apunta a la misma ubicación que su perfil de usuario de Windows, es decir, /cygdrive/c/Users/username
Acabo de instalar Cygwin, y parece que el directorio de inicio en el indicador bash está en mi Z: unidad. No es donde yo quiero.
¿Cómo puedo cambiar esto?
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
Cygwin mount
ahora es compatible con el método bind que le permite montar un directorio. Por lo tanto, puede simplemente agregar la siguiente línea a /etc/fstab
, luego reinicie su shell:
c:/Users /home none bind 0 0
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 solo inicia el shell local con este directorio de inicio; eso es lo que yo quería No voy a acceder de forma remota a esto, así que esto funcionó para mí.
Me gustaría agregar una corrección / actualización al bit sobre $ HOME tomando precedencia. 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 descubrir 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 aún así traté de crear ''/ home / dhaynes''. Probé todas las combinaciones que pude, incluso estableciendo HOME en / cygdrive / c / users / dhaynes. Busqué el mensaje de error en Google, no pude encontrar nada, no pude encontrar nada en el sitio de cygwin. Uso cygwin desde 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 estaba teniendo 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 sysadmin, pero para aquellos de nosotros que usamos Windows principalmente es un poco oscuro.
Utilizo cwRsync (Cygwin + Rsync para Windows) donde cygwin viene empaquetado, y no pude encontrar / etc / passwd.
Y siguió 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 digitales de rsa.
Es una revisión rápida, pero luego debe cambiar HOME a una ubicación más segura.
Comenzando con Cygwin 1.7.34 , la forma recomendada de hacerlo es agregar una configuración de db_home
personalizada a /etc/nsswitch.conf
. Un deseo común al hacer esto es hacer que su directorio de inicio de Cygwin sea igual a su directorio de perfil de usuario de Windows. Esta configuración hará eso:
db_home: windows
O equivalente:
db_home: /%H
Necesita utilizar el último formulario si desea alguna variación en este esquema, como separar los archivos de inicio de su Cygwin en un subdirectorio de su directorio de perfil de usuario de Windows:
db_home: /%H/cygwin
Hay varios otros esquemas alternativos para la opción de windows
más varios otros %
símbolos que puede usar en lugar de %H
o además de él. Consulte la descripción de la sintaxis de nsswitch.conf
en la Guía del usuario de Cygwin para obtener más información.
Si instaló Cygwin antes de 1.7.34 o ejecutó su utilidad mkpasswd
para que tenga un /etc/passwd
, puede cambiar su directorio de inicio de Cygwin editando la entrada de su usuario en ese archivo. Su directorio principal es el penúltimo elemento en la línea de su usuario en /etc/passwd
.¹
Cualquiera que sea la forma en que lo haga, esto provoca que la variable de entorno HOME
se establezca durante el inicio del shell.²
Consulte este elemento de Preguntas frecuentes para obtener más información sobre el tema.
Notas al pie:
Considere mover
/etc/passwd
y/etc/group
para usar el nuevo mecanismo SAM / AD en su lugar.Si bien es posible simplemente establecer
%HOME%
través del Panel de control, se desaconseja oficialmente . No solo invalida sin preaviso los mecanismos anteriores, no siempre funciona, como cuando se ejecutan scripts de shell a través decron
.