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

我刚刚安装了Cygwin,它看起来像bash提示符中的主目录是在我的Z:驱动器上。 这不是我想要的地方。

我怎样才能改变这个?

从Cygwin 1.7.34开始 ,推荐的方法是在/etc/nsswitch.conf添加一个自定义的db_home设置。 这样做的一个常见的愿望是使您的Cygwin主目录等于您的Windows用户configuration文件目录。 这个设置将会这样做:

 db_home: windows 

或者等同地:

 db_home: /%H 

你需要使用后一种forms,如果你想在这个scheme上有一些变化,比如把你的Cygwin主文件分离到你的Windows用户configuration文件目录的子目录中:

 db_home: /%H/cygwin 

还有几个其他的替代scheme的windows选项加​​上几个其他%令牌,你可以使用,而不是%H或除此之外。 有关详细信息,请参见“ Cygwin用户指南”中 的nsswitch.conf语法说明 。

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

无论如何,这会导致在启动shell时设置HOME环境variables

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


脚注:

  1. 考虑将/etc/passwd/etc/group移出,以便使用新的基于SAM / AD的机制 。

  2. 虽然可以通过控制面板简单地设置%HOME% ,但是它被正式拒绝了 。 它不仅毫不客气地覆盖上述机制,而且也不总是有效,比如通过cron运行shell脚本。

Cygwin 1.7.34+

对于使用Cygwin 1.7.34或更高版本的用户,Cygwin支持在/etc/nsswitch.confconfiguration如何获取主目录,loginshell和gecos信息。 这在Cygwin用户指南部分有详细介绍:

  • Cygwin的用户名,家庭目录,loginshell

如果以前创build了/etc/passwd/etc/group文件,则需要删除这些文件,并使用新的Windows安全模型将Cygwinconfiguration为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 。 你可以改变它,但指向你想要的任何其他自定义path。 受支持的通配符是:

  • %u Cygwin用户名(小写字母u)。
  • %U Windows用户名(大写U)。
  • %D在NetBIOS风格的Windows域。
  • %H用POSIX风格的Windows主目录。 请注意,对于db_home:设置,只有在上一个斜杠之后才有意义,如在db_home: /%H/cygwin
  • %_因为空格和TAB字符被用来分隔模式,所以文件名中的空格必须被赋予%_ (这是一个下划线)。
  • %%百分之一字符。

代替path,您可以指定预定义的四个命名path模式之一。

  1. windows用户的主目录设置为与Windows主目录相同的目录,通常是%USERPROFILE%C:\Users\$USERNAME 。 当然,Windows目录由Cygwin转换为POSIX风格。

  2. 仅用于cygwin AD:用户的主目录设置为cygwinUser辅助类的cygwinHome属性中给出的POSIXpath。 另请参阅“cygwin架构”一节 。

  3. 仅限于unix AD:用户的主目录设置为posixAccount辅助类的unixHomeDirectory属性中给出的POSIXpath。 另请参阅“Unix模式”一节 。

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

以下将使用户的Cygwin的主目录与用于Windows主目录的主目录相同。

 db_home: windows 

Cygwin 1.7.33或更早版本

对于那些使用Cygwin 1.7.33或更早版本的用户,请更新到Cygwin的最新版本,并删除以前使用的/etc/passwd/etc/group文件,然后查看上述步骤。

否则,请按照下面这些较旧的步骤。

首先,为HOME指定一个Windows环境variables,指向你的用户configuration文件:

  1. 控制面板上打开系统
  2. 高级选项卡上单击环境variables (向底部)
  3. 在用户variables区域点击“新build…”
  4. 对于variables名称inputHOME
  5. 对于variables值,input%USERPROFILE%
  6. 在所有打开的对话框中单击确定以应用此新设置

现在我们要用我们刚刚创build的Windows %HOME%variables来更新Cygwin /etc/passwd文件。 通过ssh Shelllogin和远程login将依靠/etc/passwd来告诉他们用户$HOMEpath的位置。

在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机器用户。 如果您正在从Windows域控制器获取用户信息的工作中使用PC,这一点非常重要。

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

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

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

现在,退出Cygwin并重新启动它。 您应该发现您的HOMEpath指向与Windows用户configuration文件相同的位置 – ie /cygdrive/c/Users/username

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

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

这只是用这个主目录启动本地shell; 这是我想要的。 我不会远程访问这个,所以这对我有效。

Cygwin mount现在支持绑定方法,它可以让你挂载一个目录。 因此,您可以简单地将以下行添加到/etc/fstab ,然后重新启动您的shell:

 c:/Users /home none bind 0 0 

改变你的HOME环境variables。

在XP上,右键单击我的电脑>>属性>>高级>>环境variables>>用户variables>> [selectvariablesHOME] >>编辑

我想添加一个关于$ 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定义,但仍然试图创build'/ home / dhaynes'。 我尝试了每一个组合,包括设置HOME / cygdrive / c / users / dhaynes。 用Googlesearch错误信息,找不到任何东西,在cygwin网站上找不到任何东西。 我从cmd.exe使用cygwin,而不是bash.exe,但问题出现在两个。

我终于意识到/ etc / passwd中的主目录优先于$ HOME环境variables。 我简单地重新运行'mkpasswd -l> / etc / passwd',并更新了主目录,现在一切正常,用ssh。

这对于具有系统pipe理员经验的linuxtypes来说可能是显而易见的,但对于那些主要使用Windows的人来说,这有些模糊。

我碰巧使用cygwin捆绑的cwRsync(Cygwin + Rsync for Windows),而我找不到/ etc / passwd。

它一直在说

 Could not create directory '/home/username/.ssh'. ... Failed to add the host to the list of known hosts (/home/username/.ssh/known_hosts). 

于是我写了一个batch file,在运行rsync之前改变了HOMEvariables。 就像是:

 set HOME=. rsync /path1 user@host:/path2 

和中提琴! .ssh文件夹出现在当前的工作目录和rsync停止与rsa指纹恼人。

这是一个快速修补程序,但稍后您应该将HOME更改为更安全的位置。