我刚安装了Cygwin,它看起来像在bash提示符的主目录是我上的Z:驱动器。这不是我想要的。
我怎样才能改变呢?
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了解详情。
如果你安装了Cygwin之前34年7月1日或已经走完了其mkpasswd
utility,让你有一个/etc/passwd
文件,您可以通过编辑您的用户在该文件中的条目改变你的Cygwin的主目录。你的主目录是第二个到最后一个元素上的用户在/etc/passwd
.¹线
无论你做的方式,这将导致HOME
环境变量外壳startup.²期间设置
见this FAQ item更多的话题。
脚注:
/etc/passwd
移动/etc/group
和the new SAM/AD-based mechanism出路。%HOME%
,它是officially discouraged。它不仅毫不客气地覆盖上述机制,它并不总是工作,通过cron
运行shell脚本时如。对于使用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字符用于图式分开,在文件名中的空间必须被给定为%_
(这是一个下划线)。%%
甲每美分的字符。在地方的路径,你可以指定四个命名的路径图式是预定义之一。
windows
用户的主目录设置为它被用作Windows家庭目录,通常沿着%USERPROFILE%
或C:\Users\$USERNAME
东西线相同的目录。当然,在Windows目录由Cygwin的转换到POSIX风格。cygwin
AD只:用户的主目录设置为从cygwinUser辅助类的cygwinHome属性给出的POSIX路径。参见the section called “The cygwin schema”。unix
AD只:用户的主目录设置为从的posixAccount的辅助类unixHomeDirectory属性给出的POSIX路径。参见the section called “The unix schema”。desc
用户的主目录设置为在家庭中给出的POSIX路径=“...”在SAM或AD用户的描述属性的XML酷似设置。见称为“递减模式”进行了详细的描述部分。下面将在Cygwin的用户的主目录用于Windows的主目录相同。
db_home: windows
对于使用Cygwin 33年7月1日或更早,更新到the latest version Cygwin并删除先前使用/etc/passwd
和/etc/group
文件那些,则见上述步骤。
否则,请按以下步骤年长。
首先,设置Windows环境变量HOME指向您的用户配置文件:
HOME
%USERPROFILE%
现在,我们要更新我们刚刚创建的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
我做了一件很简单。我并不想改变Windows 7的环境变量。所以我直接编辑Cygwin.bat文件。
@echo off
SETLOCAL
set HOME=C:\path\to\home
C:
chdir C:\apps\cygwin\bin
bash --login -i
ENDLOCAL
这只是开始与该主目录的本地壳;这就是我想要的。我不打算远程访问此,所以这为我工作。
Cygwin的mount
现在支持绑定方法,它可以让你安装的目录。因此,你可以简单地添加以下行/etc/fstab
,然后重新启动你的shell:
c:/Users /home none bind 0 0
更改您的家庭环境变量。
在XP上,其右键单击我的电脑属性>> >> >>高级环境变量>>用户变量>> [选择变量HOME] >>编辑
我想修正/更新添加到约$ 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这是一个有点模糊。
我碰巧使用其中的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的指纹。
这是一个快速的修补程序,但后来你应该首页更改为更安全的位置。