Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
安装后如何更改Cygwin主文件夹?_Cygwin - Fatal编程技术网

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

安装后如何更改Cygwin主文件夹?,cygwin,Cygwin,我刚刚安装了Cygwin,看起来bash提示符中的主目录在我的Z:drive上。那不是我想要的地方 如何更改此设置?,建议的方法是将自定义的db\u home设置添加到/etc/nsswitch.conf。执行此操作时的一个常见愿望是使Cygwin主目录与Windows用户配置文件目录相等。此设置将执行以下操作: db_home: windows 或者,相当于: db_home: /%H 如果希望对该方案进行一些修改,例如将Cygwin主文件分隔到Windows用户配置文件目录的子目录中,则

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

如何更改此设置?

,建议的方法是将自定义的
db\u home
设置添加到
/etc/nsswitch.conf
。执行此操作时的一个常见愿望是使Cygwin主目录与Windows用户配置文件目录相等。此设置将执行以下操作:

db_home: windows
或者,相当于:

db_home: /%H
如果希望对该方案进行一些修改,例如将Cygwin主文件分隔到Windows用户配置文件目录的子目录中,则需要使用后一种形式:

db_home: /%H/cygwin
对于
windows
选项,还有一些其他的替代方案,加上一些其他的
%
令牌,您可以使用它们来代替
%H
,或者作为它的补充。有关详细信息,请参见中的

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

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

有关此主题的详细信息,请参阅


脚注:

  • 考虑将
    /etc/passwd
    /etc/group
    移到一边,以便使用

  • 虽然可以通过控制面板简单地设置
    %HOME%
    ,但它是。它不仅随意地覆盖了上述机制,而且并不总是起作用,例如通过
    cron
    运行shell脚本时


  • 更改您的家庭环境变量

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

    我碰巧使用了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).
    
    因此,我编写了一个批处理文件,在运行rsync之前更改了HOME变量。比如:

    set HOME=.
    rsync /path1 user@host:/path2
    
    瞧!.ssh文件夹出现在当前工作目录中,rsync不再使用rsa指纹进行骚扰


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

    我想对$HOME优先的位添加一个更正/更新。/etc/passwd中的主目录优先于所有内容

    我是Cygwin的长期用户,我刚刚干净地安装了Windows7x64和CygwinV1.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”。我尝试了各种组合,包括设置/cygdrive/c/users/dhaynes。谷歌搜索错误消息,找不到任何东西,在cygwin网站上找不到任何东西。我使用cmd.exe中的cygwin,而不是bash.exe,但这两个版本都存在问题

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

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

    Cygwin 1.7.34+ 对于那些使用Cygwin 1.7.34或更高版本的用户,Cygwin支持在
    /etc/nsswitch.conf
    中配置如何获取主目录、登录shell和gecos信息。这在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\u home:
    的默认设置为

    db_home: /home/%U
    
    因此,默认情况下,Cygwin只将home dir设置为
    /home/$USERNAME
    。您可以将其更改为指向所需的任何其他自定义路径。支持的通配符包括:

    • %u
      Cygwin用户名(小写u)
    • %U
      Windows用户名(大写U)
    • %D
      NetBIOS风格的Windows域
    • %H
      POSIX风格的Windows主目录。请注意,对于
      db\u home:
      设置,这仅在前面的斜杠之后才有意义,如
      db\u home:/%H/cygwin
    • %.
      由于使用空格和制表符分隔模式,因此文件名中的空格必须指定为
      %.
      (这是一个下划线)
    • %%
      百分比字符
    代替路径,您可以指定预定义的四个命名路径模式之一

  • windows
    用户的主目录设置为与windows主目录相同的目录,通常与
    %USERPROFILE%
    C:\Users\$USERNAME
    类似。当然,Cygwin将Windows目录转换为POSIX样式

  • cygwin
    AD only:用户的主目录设置为cygwinUser辅助类的cygwinHome属性中给定的POSIX路径。另见

  • unix
    AD only:用户的主目录设置为posixAccount辅助类的unixHomeDirectory属性中给定的POSIX路径。另见

  • desc
    用户的主目录设置为SAM或AD中用户描述属性的home=“…”XML类似设置中给定的POSIX路径。有关详细信息,请参阅“描述模式”一节
    db_home: windows
    
    cp /etc/passwd /etc/passwd.bak
    mkpasswd -l -p $(cygpath -H)  > /etc/passwd 
    mkpasswd -d -p $(cygpath -H)  >> /etc/passwd 
    
    cp /etc/group /etc/group.bak
    mkgroup -l > /etc/group 
    mkgroup -d >> /etc/group 
    
    @echo off
    SETLOCAL
    set HOME=C:\path\to\home
    C:
    chdir C:\apps\cygwin\bin
    bash --login -i
    ENDLOCAL
    
    c:/Users /home none bind 0 0