我怎样才能在安装后更改我的Cygwin的主文件夹?

问题描述 投票:110回答:7

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

我怎样才能改变呢?

cygwin
7个回答
168
投票

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 descriptionCygwin User Guide了解详情。

如果你安装了Cygwin之前34年7月1日或已经走完了其mkpasswd utility,让你有一个/etc/passwd文件,您可以通过编辑您的用户在该文件中的条目改变你的Cygwin的主目录。你的主目录是第二个到最后一个元素上的用户在/etc/passwd.¹线

无论你做的方式,这将导致HOME环境变量外壳startup.²期间设置

this FAQ item更多的话题。


脚注:

  1. 您可以考虑改用/etc/passwd移动/etc/groupthe new SAM/AD-based mechanism出路。
  2. 虽然可以简单地通过控制面板设定%HOME%,它是officially discouraged。它不仅毫不客气地覆盖上述机制,它并不总是工作,通过cron运行shell脚本时如。

72
投票

Cygwin 1.7.34+

对于使用Cygwin 34年7月1日或更高的那些Cygwin的支持配置如何在/etc/nsswitch.conf获取主目录,登录shell和通用信息。这是在Cygwin的用户指南部分详细介绍:

如果您之前已经创建了一个/etc/passwd/etc/group文件,你要去掉那些和使用新的Windows安全模式POSIX映射配置Cygwin的。

[[ -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 Windows域NetBIOS中的风格。
  • %H的Windows主目录中POSIX风格。需要注意的是,对于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用户的主目录设置为在家庭中给出的POSIX路径=“...”在SAM或AD用户的描述属性的XML酷似设置。见称为“递减模式”进行了详细的描述部分。

下面将在Cygwin的用户的主目录用于Windows的主目录相同。

db_home: windows

Cygwin 1.7.33 or earlier

对于使用Cygwin 33年7月1日或更早,更新到the latest version Cygwin并删除先前使用/etc/passwd/etc/group文件那些,则见上述步骤。

否则,请按以下步骤年长。

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

  1. 控制面板上的开放式系统
  2. 在高级选项卡单击环境变量(朝向底部)
  3. 在用户变量区域中单击“新建...”
  4. 对于变量名进入HOME
  5. 对于变量值进入%USERPROFILE%
  6. 点击在所有打开的对话框确定以应用此新设置

现在,我们要更新我们刚刚创建的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包括域用户,而-l是只输出的本地机器的用户。如果您使用的是PC在其中从Windows域控制器获取的用户信息工作这一点很重要。

现在,你也可以做团体一样,虽然这是没有必要的,除非你将使用一台计算机是Windows域的一部分。 Cygwin的读取Windows帐户数据库组信息,但如果你的机器往往是从它的域控制器断开连接,你可以添加一个/etc/group文件。

在Cygwin的bash提示符输入以下命令:

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

现在,退出Cygwin和再次启动。你会发现,你的主目录指向相同的位置,您的Windows用户配置文件 - 即/cygdrive/c/Users/username


29
投票

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

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

这只是开始与该主目录的本地壳;这就是我想要的。我不打算远程访问此,所以这为我工作。


18
投票

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

c:/Users /home none bind 0 0

9
投票

更改您的家庭环境变量。

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


6
投票

我想修正/更新添加到约$ HOME采取优先次序位。在/ etc / passwd文件的home目录优先于一切。

我是一个很长一段时间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.
...

我添加了HOME = C:\用户\ dhaynes定义在Windows环境中,但仍然保持它试图创建一个“/ home / dhaynes”。我想尽组合,我可以包括设置HOME键/ cygdrive / C /用户/ dhaynes。 Google搜索的错误信息,找不到任何东西,也找不到在Cygwin的网站什么。我cygwin的使用从CMD.EXE,不bash.exe但问题是存在于两个。

我终于明白了,在/ etc主目录/ passwd文件中优先于$ HOME环境变量。我简单的重新运行“mkpasswd -l> / etc / passwd文件”和更新的主目录,现在一切都很好,SSH。

这可能是明显到Linux类型的系统管理员的经验,但对于我们这些谁主要使用Windows这是一个有点模糊。


2
投票

我碰巧使用其中的cygwin捆绑cwRsync(Cygwin的+的Rsync适用于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).

所以我写了这改变了HOME变量运行的rsync前一个批处理文件。就像是:

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

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

这是一个快速的修补程序,但后来你应该首页更改为更安全的位置。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.