cygwin - organizar - poner etiquetas a carpetas en windows
Cambiar de forma segura el directorio de inicio (11)
Edité mi archivo / etc / passwd directamente (asegurándome de que nada más accedería a él), y cambié todas las referencias a / home to be / Users (en Windows 7). Descubrí que, para que todo funcione correctamente, tuve que eliminar cualquier directorio en el directorio / home (o moverlos a la otra ubicación apropiada). De lo contrario, cygwin desarrollaría una personalidad dividida donde, por ejemplo, ''bash -l'' comenzaría en / home / Pablo, pero $ HOME sería / Users / Pablo y emacs parecerían hacer lo contrario. Una vez que eliminé / home / Pablo, todo funcionó bien.
Estoy tratando de actualizar de manera segura el directorio de inicio como se especifica en /etc/passwd
, pero las utilidades de Linux estándar - usermod y vipw - para hacerlo no son provistas por Cygwin.
¿Alguien podría decirme cómo cambiaron esto en Cygwin?
Siempre configuro HOME como una variable de entorno específica del usuario en Computer Properties.
Me gusta mantener sincronizada mi instalación Cygwin con un pen drive y otra computadora, por lo que odio codificar el directorio de inicio. Yo uso el siguiente cygwin.bat:
echo off
SETLOCAL
set SHELL=//bin//bash
set HOME=%~dp0../../doc/unix
bin/bash --login -i
ENDLOCAL
SETLOCAL y ENDLOCAL se aseguran de que SHELL y HOME no bloqueen las variables env existentes para otros programas. HOME=%~dp0../../doc/unix
configura HOME para que sean dos directorios hacia arriba, en el subdirectorio doc / unix. Luego, en .... / doc / unix.bashrc, incluyo PATH="/bin:/usr/local/bin:/usr/X11R6/bin:/usr/bin"
. No utilicé start /wait %CD%/bin/bash
para iniciar bash, porque estoy usando Console2 , así que no necesito una ventana adicional de cmd.
Usando la variable de entorno de Windows: HOME
Esto funciona para mí para una solución permanente, no portátil, que no sea de red; es decir, establecer la variable de entorno HOME de forma permanente en Windows.
Tenga en cuenta que esto no afecta a las sesiones de ssh o telnet que siempre se refieren a / etc / passwd
ref: Configuración de la variable de entorno Cygwin- My HOME no es lo que quiero.
CMD
Para el usuario actual (necesita ejecutarse una vez por usuario) ::
reg add HKCU/Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%
Para nuevos usuarios:
reg add HKU/.DEFAULT/Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%
Nota: Cuidado ^ antes del porcentaje-signos%
IMPORT REG FILE
Importar este archivo reg (usuario actual ):
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER/Environment]
"HOME"=hex(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,4c,/
00,45,00,25,00,00,00
Para nuevos usuarios:
Windows Registry Editor Version 5.00
[HKU/.DEFAULT/Environment]
"HOME"=hex(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,4c,/
00,45,00,25,00,00,00
REGEDIT
En Regedit, bajo:
Para el usuario actual :
HKEY_CURRENT_USER/Environment
Para nuevos usuarios:
HKU/.DEFAULT/Environment
Cree HOME como un nuevo valor de cadena expandible (* REG_EXPAND_SZ *) e ingrese% USERPROFILE%
Para evitar problemas causados por tener espacios en la ruta a su directorio de inicio, use la forma abreviada del directorio de Windows ''Perfiles'', es decir, /cygdrive/c/DOCUME~1/user
.
Puedes hacer esto escribiendo el comando:
mkpasswd -l -p "$(cygpath $(cygpath -dH))" > /etc/passwd
Terminé saliendo de todos mis shells cygwin y editándolos a mano en un editor de texto. Hasta aquí todo bien.
Nota: no escape los espacios en el directorio "Documentos y configuraciones". La entrada se verá como
user:...:/cygdrive/c/Documents and Settings/user:/bin/bash
La línea se tokeniza en el :
carácter.
Para el usuario actual, lo siguiente funcionó para mí:
- Cerrar Cygwin.
- Establezca la variable de entorno de usuario de HOME Windows.
- Comience Cygwin.
- ejecuta "mkpasswd -c -p" $ (cygpath -H) "> / etc / passwd".
- Reinicia Cygwin.
Confirmé que funcionaba ejecutando ssh-keygen sin ningún argumento. Después de realizar este cambio, la aplicación ahora de forma predeterminada guarda la clave en / cygdrive / c / Users / user en lugar de / home / user.
No sé si se requiere configurar HOME, pero lo hice de todas formas siguiendo las instrucciones para configurar TortoiseGit con Cygwin usando la documentación oficial de Tortoise para el soporte no oficial de Cygwin aquí . Sin embargo, configurar el valor de HOGAR solo no fue suficiente para que ssh-keygen reconociera el cambio del directorio de inicio.
Además, tenga en cuenta que la documentación oficial de Cygwin sobre este tema se puede encontrar aquí .
Confirmado en Windows 7 usando Cygwin v1.7.35 de 64 bits.
cd /home
rm -rf chris
ln -s /cygdrive/z chris
No estoy seguro de si es la solución más segura, pero es una solución posible que funciona para mí;)
La respuesta más simple que he encontrado es hacer que / home sea un enlace suave a su directorio de Windows Home / UserProfile
cd /
mv home oldhome
ln -s "$(cygpath -H)" home
Utilicé cygpath, ya que obtendrá la ubicación correcta para el directorio HOME en la versión actual de Windows. En mi caja cygpath -H
returns /cygdrive/c/Users
Respuesta original de Christopher de otra parte
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 los caracteres espacio y TAB se usan para separar los esquemas, un espacio en el nombre del archivo se debe dar como%_
(que 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
EDITAR: para las versiones recientes de Cygwin (1.7.34 y posteriores), vea esta pregunta más nueva .
Al igual que la respuesta de sblundy, siempre puedes editar con la mano.
Pero si quiere hacerlo de la manera "oficial", use el comando mkpasswd
específico de cygwin. A continuación se muestra un fragmento de los documentos oficiales en mkpasswd
:
Por ejemplo, este comando:
Ejemplo 3.11. Usar una raíz local alternativa
$ mkpasswd -l -p "$(cygpath -H)" > /etc/passwd
pondría los directorios de inicio de los usuarios locales en el directorio ''Perfiles'' de Windows.
Hay muchos otros comandos realmente útiles que se describen en la página de documentación de Cygwin Utilities (que incluye mkpasswd
). El uso de cygpath
en el ejemplo anterior es otra de estas herramientas específicas de cygwin.
Mientras lo hace, probablemente también desee leer el uso efectivo de Cygwin con la documentación de Windows . Hay muchos consejos realmente buenos.