当前位置:  开发笔记 > 编程语言 > 正文

如何在安装后更改我的Cygwin主文件夹?

如何解决《如何在安装后更改我的Cygwin主文件夹?》经验,为你挑选了6个好方法。

我刚刚安装了Cygwin,看起来bash提示符中的主目录位于我的Z:驱动器上.那不是我想要的地方.

我怎么能改变这个?



1> Warren Young..:

从Cygwin 1.7.34开始,建议的方法是添加自定义db_home设置/etc/nsswitch.conf.这样做的一个共同愿望是使您的Cygwin主目录等于您的Windows用户配置文件目录.此设置将执行此操作:

db_home: windows

或者,等效地:

db_home: /%H

如果您想要对此方案进行一些变更,则需要使用后一种形式,例如将Cygwin主文件分隔到Windows用户配置文件目录的子目录中:

db_home: /%H/cygwin

windows选项还有其他几种替代方案,以及%您可以使用的其他几种代币,而不是%H它们.见该nsswitch.conf语法描述了在Cygwin的用户指南了解详情.

如果您在1.7.34之前安装了Cygwin或者已运行其实用mkpasswd程序以便拥有/etc/passwd文件,则可以通过编辑该文件中的用户条目来更改Cygwin主目录.您的主目录是用户行中的倒数第二个元素/etc/passwd

无论您采用哪种方式,都会导致HOME在shell启动期间设置环境变量

有关该主题的更多信息,请参阅此FAQ项.


脚注:

    考虑移动/etc/passwd/etc/group移开以便使用新的基于SAM/AD的机制.

    虽然可以%HOME%通过控制面板进行简单设置,但官方不鼓励这样做.它不仅毫不客气地覆盖了上述机制,而且并不总是有效,例如通过运行shell脚本时cron.


`db_home:/%H`可以解析域用户名(而不是本地用户名),这可能不是你想要的.`db_home:/ cygdrive/c/Users /%U`做了我想要的.
请注意,如果您从http://git-scm.com/download/win安装了Git bash shell,则_might_会遇到cygwin安装问题(具体取决于您选择的选项).我的cygwin~最终在我的Win7用户目录中,``ssh`在编辑`/ etc/passwd`之前无法正常工作.
我看到各种方法之间的性能差异.当我使用`db_home:windows`时,启动时需要大约2.5到3.5秒的"sh".当我使用`db_home:/ cygdrive/c/Users /%U`时,启动时需要大约0.9到1.0秒的"sh".当我删除`db_home`行或将其硬编码到Windows主目录时,`sh`需要大约0.2到0.3秒才能启动.我将使用硬编码的解决方案,例如`db_home:/ cygdrive/c/Users/susam`,因为我经常使用`sh`命令从命令提示符运行shell脚本,例如`sh foo.sh`它变成了不方便等待超过2秒.

2> Christopher..:

Cygwin 1.7.34+

对于使用Cygwin 1.7.34或更高版本的用户,Cygwin支持配置如何获取主目录,登录shell和gecos信息/etc/nsswitch.conf.这在Cygwin用户指南部分中有详细说明:

Cygwin用户名,home dirs,登录shell

如果您之前创建了一个/etc/passwd/etc/group文件,则需要删除它们并使用新的Windows安全模型将Cygwin配置为POSIX映射.

[[ -f /etc/passwd ]] && mv /etc/passwd /etc/passwd.bak
[[ -f /etc/group ]] && mv /etc/group /etc/group.bak

/etc/nsswitch.conf文件的db_home:设置定义了Cygwin如何获取用户的主目录.的默认设置db_home:

db_home: /home/%U

所以默认情况下,Cygwin只是将主目录设置为/home/$USERNAME.您可以更改它,但指向您想要的任何其他自定义路径.支持的通配符是:

%u Cygwin用户名(小写的u).

%U Windows用户名(即大写的U).

%D NetBIOS风格的Windows域.

%HPOSIX风格的Windows主目录.请注意,对于db_home:设置,这仅在前一个斜杠之后才有意义,如db_home: /%H/cygwin

%_由于space和TAB字符用于分隔schemata,因此必须给出文件名中的空格%_(即下划线).

%% 百分之一的角色.

可以指定预定义的四个命名路径模式之一来代替路径.

    windows用户的主目录设置为用作Windows主目录的同一目录,通常是沿着%USERPROFILE%或的行C:\Users\$USERNAME.当然,Cygwin将Windows目录转换为POSIX风格.

    cygwin仅限AD:用户的主目录设置为cygwinUser辅助类的cygwinHome属性中给出的POSIX路径.另请参阅"cygwin架构"一节.

    unix仅限AD:用户的主目录设置为posixAccount辅助类的unixHomeDirectory属性中给出的POSIX路径.另请参阅"unix架构"一节.

    desc用户的主目录设置为SAM或AD中用户描述属性中home ="..."XML类似设置中给出的POSIX路径.有关详细说明,请参阅"desc架构"一节.

以下内容将使用户在Cygwin中的主目录与用于Windows主目录的主目录相同.

db_home: windows

Cygwin 1.7.33或更早版本

对于使用这些Cygwin的33年7月1日或更早的版本,更新到最新版本的Cygwin,并删除以前使用/etc/passwd/etc/group文件,再看看上面的步骤.

否则,请按照以下旧步骤操作.

首先,为HOME设置一个指向用户配置文件的Windows环境变量:

    控制面板上打开系统

    在" 高级"选项卡上,单击" 环境变量"(向下)

    在"用户变量"区域中,单击"新建..."

    对于变量名称输入 HOME

    对于变量值输入 %USERPROFILE%

    在所有打开的对话框中单击"确定"以应用此新设置

现在我们将/etc/passwd使用%HOME%刚刚创建的Windows 变量更新Cygwin 文件.Shell登录和远程登录via ssh将依赖于/etc/passwd告诉他们用户$HOME路径的位置.

在Cygwin bash命令提示符下键入以下内容:

cp /etc/passwd /etc/passwd.bak
mkpasswd -l -p $(cygpath -H)  > /etc/passwd 
mkpasswd -d -p $(cygpath -H)  >> /etc/passwd 

-d开关告诉mkpasswd包含DOMAIN用户,而-l只是输出LOCAL机器用户.如果您在工作中使用PC从Windows域控制器获取用户信息,这一点很重要.

现在,您也可以对组执行相同的操作,但除非您将使用属于Windows域的计算机,否则不需要这样做.Cygwin从Windows帐户数据库中读取组信息,但/etc/group如果您的计算机经常与其域控制器断开连接,则可以添加文件.

在Cygwin bash提示符下键入以下内容:

cp /etc/group /etc/group.bak
mkgroup -l > /etc/group 
mkgroup -d >> /etc/group 

现在,退出Cygwin并重新启动它.您应该发现您的HOME路径指向与Windows用户配置文件相同的位置 - 即/cygdrive/c/Users/username


-d真的很慢.如果您只需要当前用户,则可以使用-c代替:http://sinewalker.wordpress.com/2006/10/27/cygwin-users-and-groups

3> 小智..:

我做了一件很简单的事.我不想改变windows 7环境变量.所以我直接编辑了Cygwin.bat文件.

@echo off
SETLOCAL
set HOME=C:\path\to\home
C:
chdir C:\apps\cygwin\bin
bash --login -i
ENDLOCAL

这只是用这个主目录启动本地shell; 这就是我想要的.我不打算远程访问它,所以这对我有用.



4> 小智..:

Cygwin mount现在支持bind方法,允许您挂载目录.因此,您只需添加以下行/etc/fstab,然后重新启动shell:

c:/Users /home none bind 0 0



5> Michael Paul..:

更改HOME环境变量.

在XP上,右键单击我的电脑>>属性>>高级>>环境变量>>用户变量>> [选择变量HOME] >>编辑



6> Dan Haynes..:

我想对优先使用$ HOME的位添加更正/更新./ etc/passwd中的主目录优先于所有内容.

我是很长时间的Cygwin用户,我刚刚安装了Windows 7 x64和Cygwin V1.126.我疯狂地想弄清楚为什么每次我跑ssh我都会得到:

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.
...

我在Windows环境中添加了HOME = c:\ users\dhaynes定义,但仍然在尝试创建'/ home/dhaynes'.我尝试了每一个组合,包括将HOME设置为/ cygdrive/c/users/dhaynes.用Google搜索错误消息,找不到任何内容,在cygwin网站上找不到任何内容.我使用cmd.exe中的cygwin,而不是bash.exe,但两者都存在问题.

我终于意识到/ etc/passwd中的主目录优先于$ HOME环境变量.我简单地重新运行'mkpasswd -l>/etc/passwd'并更新了主目录,现在ssh一切都很好.

对于具有sysadmin经验的linux类型来说,这可能是显而易见的,但对于我们这些主要使用Windows的人来说,它有点模糊.

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有