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

时间:2009-09-29 20:10:17

标签: cygwin

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

我该如何更改?

7 个答案:

答案 0 :(得分:166)

Starting with 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代币。有关详细信息,请参阅the nsswitch.conf syntax description中的Cygwin User Guide

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

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

有关该主题的更多信息,请参阅this FAQ item


<强>脚注:

  1. 考虑将/etc/passwd/etc/group移开,以便改为使用the new SAM/AD-based mechanism

  2. 虽然可以通过控制面板简单地设置%HOME%,但它是officially discouraged。它不仅会毫不客气地覆盖上述机制,而且并不总是有效,例如通过cron运行shell脚本时。

答案 1 :(得分:71)

Cygwin 1.7.34 +

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

如果您之前创建了/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域。
  • %H POSIX风格的Windows主目录。请注意,对于db_home:设置,这仅在前一个斜杠之后才有意义,如db_home: /%H/cygwin
  • %_由于空格和TAB字符用于分隔架构,因此文件名中的空格必须为%_(这是下划线)。
  • %%一个百分之百的角色。

您可以指定预定义的四个命名路径架构中的一个来代替路径。

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

  2. cygwin仅限AD:用户的主目录设置为cygwinUser辅助类的cygwinHome属性中给出的POSIX路径。另请参阅the section called “The cygwin schema”

  3. unix仅限AD:用户的主目录设置为posixAccount辅助类的unixHomeDirectory属性中给出的POSIX路径。另请参阅the section called “The unix schema”

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

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

    db_home: windows
    

    Cygwin 1.7.33或更早版本

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

    否则,请按照以下旧步骤进行操作。

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

    1. 控制面板
    2. 上打开系统
    3. 高级标签上,点击环境变量(向下)
    4. 在“用户变量”区域中,单击“新建...”
    5. 对于变量名称,请输入HOME
    6. 对于变量值,请输入%USERPROFILE%
    7. 在所有打开的对话框中单击“确定”以应用此新设置
    8. 现在我们将使用刚刚创建的Windows /etc/passwd变量更新Cygwin %HOME%文件。通过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

答案 2 :(得分:29)

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

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

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

答案 3 :(得分:18)

Cygwin mount现在支持 bind 方法,该方法允许您安装目录。因此,您只需将以下行添加到/etc/fstab,然后重新启动shell:

c:/Users /home none bind 0 0

答案 4 :(得分:9)

更改您的HOME环境变量。

在XP上,右键单击“我的电脑”&gt;&gt;属性&gt;&gt;高级&gt;&gt;环境变量&gt;&gt; &gt;&gt;的用户变量[选择变量HOME]&gt;&gt;修改

答案 5 :(得分:6)

我想对优先使用$ 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&gt; / etc / passwd'并且更新了主目录,现在ssh一切都很好。

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

答案 6 :(得分:2)

我碰巧使用cwRsync(Cygwin + Rsync for Windows),其中cygwin捆绑在一起,我找不到/ 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).

所以我写了一个批处理文件,在运行rsync之前更改了HOME变量。类似的东西:

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

中提琴! .ssh文件夹出现在当前正在工作的目录中,并且rsync停止了对rsa指纹的讨厌。

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