如何在安装后更改我的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项目 。
脚注:
-
考虑将
/etc/passwd
和/etc/group
移出,以便使用新的基于SAM / AD的机制 。 -
虽然可以通过控制面板简单地设置
%HOME%
,但是它被正式拒绝了 。 它不仅毫不客气地覆盖上述机制,而且也不总是有效,比如通过cron
运行shell脚本。
Cygwin 1.7.34+
对于使用Cygwin 1.7.34或更高版本的用户,Cygwin支持在/etc/nsswitch.conf
configuration如何获取主目录,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模式之一。
-
windows
用户的主目录设置为与Windows主目录相同的目录,通常是%USERPROFILE%
或C:\Users\$USERNAME
。 当然,Windows目录由Cygwin转换为POSIX风格。 -
仅用于
cygwin
AD:用户的主目录设置为cygwinUser辅助类的cygwinHome属性中给出的POSIXpath。 另请参阅“cygwin架构”一节 。 -
仅限于
unix
AD:用户的主目录设置为posixAccount辅助类的unixHomeDirectory属性中给出的POSIXpath。 另请参阅“Unix模式”一节 。 -
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文件:
- 在控制面板上打开系统
- 在高级选项卡上单击环境variables (向底部)
- 在用户variables区域点击“新build…”
- 对于variables名称input
HOME
- 对于variables值,input
%USERPROFILE%
- 在所有打开的对话框中单击确定以应用此新设置
现在我们要用我们刚刚创build的Windows %HOME%
variables来更新Cygwin /etc/passwd
文件。 通过ssh
Shelllogin和远程login将依靠/etc/passwd
来告诉他们用户$HOME
path的位置。
在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更改为更安全的位置。