[cygwin] 설치 후 Cygwin 홈 폴더를 어떻게 변경할 수 있습니까?

방금 Cygwin을 설치했는데 bash 프롬프트의 홈 디렉토리가 Z : 드라이브에있는 것 같습니다. 내가 원하는 곳이 아닙니다.

어떻게 변경할 수 있습니까?



답변

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또는 추가로 사용할 수있는 몇 가지 다른 토큰이 있습니다 . 참조 구문 설명 에서 Cygwin에서 사용 설명서 자세한 내용입니다.nsswitch.conf

1.7.34 이전에 Cygwin을 설치했거나 파일 을 가지도록 mkpasswd유틸리티를 실행 한 경우 해당 /etc/passwd파일에서 사용자 항목을 편집하여 Cygwin 홈 디렉토리를 변경할 수 있습니다. 홈 디렉토리는 사용자 행의 마지막에서 두 번째 요소입니다./etc/passwd

어떤 방법을 사용하든 HOME셸 시작 중에 환경 변수가 설정됩니다 .²

주제에 대한 자세한 내용은 이 FAQ 항목 을 참조하십시오 .


각주 :

  1. 이동을 고려 /etc/passwd하고 /etc/group사용하기 위해 길에서 새로운 SAM / AD 기반 메커니즘을 대신.

  2. %HOME%제어판을 통해 간단히 설정할 수 있지만 공식적으로는 권장하지 않습니다 . 위의 메커니즘을 무의식적으로 재정의 할뿐만 아니라 .NET을 통해 셸 스크립트를 실행할 때와 같이 항상 작동하는 것은 아닙니다 cron.


답변

Cygwin 1.7.34 이상

Cygwin 1.7.34 이상을 사용 하는 사용자를 위해 Cygwin은 .NET에서 홈 디렉토리, 로그인 셸 및 gecos 정보를 가져 오는 방법 구성을 지원합니다 /etc/nsswitch.conf. 이것은 Cygwin 사용자 가이드 섹션에 자세히 설명되어 있습니다.

이전에 /etc/passwd또는 /etc/group파일을 생성 한 경우 이를 제거하고 POSIX 매핑에 대한 새로운 Windows 보안 모델을 사용하여 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 NetBIOS 스타일의 Windows 도메인.
  • %HPOSIX 스타일의 Windows 홈 디렉토리. 그 참고에 대한 db_home:설정, 이것은 단지에서와 같이 선행 슬래시 후 감지 권리를 만든다db_home: /%H/cygwin
  • %_스키마를 구분하기 위해 공백과 TAB 문자가 사용되기 때문에 파일 이름에 공백을 %_(밑줄)로 지정해야합니다.
  • %% 백분율 문자입니다.

경로 대신 미리 정의 된 네 개의 명명 된 경로 스키마 중 하나를 지정할 수 있습니다.

  1. windows사용자의 홈 디렉토리는 Windows 홈 디렉토리로 사용되는 것과 동일한 디렉토리로 설정되며, 일반적으로 %USERPROFILE%또는 라인을 따라 C:\Users\$USERNAME있습니다. 물론 Windows 디렉토리는 Cygwin에 의해 POSIX 스타일로 변환됩니다.

  2. cygwinAD 전용 : 사용자의 홈 디렉토리는 cygwinUser 보조 클래스의 cygwinHome 속성에 제공된 POSIX 경로로 설정됩니다. “cygwin 스키마”섹션을 참조하십시오 .

  3. unixAD 전용 : 사용자의 홈 디렉토리가 posixAccount 보조 클래스의 unixHomeDirectory 속성에 제공된 POSIX 경로로 설정됩니다. “Unix 스키마”섹션을 참조하십시오 .

  4. desc사용자의 홈 디렉토리는 SAM 또는 AD의 사용자 설명 속성에있는 home = “…”XML 유사 설정에 지정된 POSIX 경로로 설정됩니다. 자세한 설명은 “desc 스키마”섹션을 참조하십시오.

다음은 Cygwin의 사용자 홈 디렉토리를 Windows 홈 디렉토리에 사용되는 것과 동일하게 만듭니다.

db_home: windows

Cygwin 1.7.33 이하

사용하는 사람들을 위해 Cygwin에서 1.7.33 로, 이전의 갱신 또는 Cygwin에서 최신 버전 및 이전에 사용 제거 /etc/passwd/etc/group 파일이 다음 위의 단계를 참조하십시오.

그렇지 않으면 아래의 이전 단계를 따르십시오.

먼저 사용자 프로필을 가리키는 HOME에 대한 Windows 환경 변수를 설정합니다.

  1. 제어판 에서 시스템 열기
  2. 고급 탭을 클릭하여 환경 변수 (아래쪽으로)를
  3. 사용자 변수 영역에서 “새로 만들기…”를 클릭합니다.
  4. 변수 이름에 다음을 입력하십시오. HOME
  5. 변수 값에 대해 %USERPROFILE%
  6. 열려있는 모든 대화 상자에서 확인을 클릭하여이 새 설정을 적용합니다.

이제 방금 만든 /etc/passwdWindows %HOME%변수로 Cygwin 파일 을 업데이트 하겠습니다. 를 통한 셸 로그인 및 원격 로그인 은 사용자의 위치를 ​​알려주 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 만 출력 로컬 컴퓨터 사용자입니다. 이는 Windows 도메인 컨트롤러에서 사용자 정보를 얻는 직장에서 PC를 사용하는 경우 중요합니다.

이제 그룹에 대해서도 동일한 작업을 수행 할 수 있지만 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이제 디렉토리를 마운트 할 수있는 bind 메소드를 지원 합니다. 따라서에 다음 줄을 추가 한 다음 /etc/fstab셸을 다시 시작할 수 있습니다.

c:/Users /home none bind 0 0


답변

HOME 환경 변수를 변경하십시오.

XP에서는 내 컴퓨터 >> 속성 >> 고급 >> 환경 변수 >> 사용자 변수 >> [변수 선택 HOME] >> 편집을 마우스 오른쪽 버튼으로 클릭합니다.


답변

$ 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로 설정하는 것을 포함하여 모든 콤보를 시도했습니다. 오류 메시지를 검색했지만 아무것도 찾을 수 없었고 cygwin 사이트에서 아무것도 찾을 수 없었습니다. bash.exe가 아닌 cmd.exe의 cygwin을 사용하지만 문제는 둘 다에 존재합니다.

마침내 / etc / passwd의 홈 디렉토리가 $ HOME 환경 변수보다 우선한다는 것을 깨달았습니다. 간단히 ‘mkpasswd -l> / etc / passwd’를 다시 실행하고 홈 디렉토리를 업데이트했습니다. 이제 모두 ssh로 잘 작동합니다.

sysadmin 경험이있는 Linux 유형에게는 분명 할 수 있지만 주로 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).

그래서 rsync를 실행하기 전에 HOME 변수를 변경 한 배치 파일을 작성했습니다. 다음과 같은 것 :

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

그리고 비올라! .ssh 폴더가 현재 작업 디렉토리에 나타나고 rsync는 rsa 지문으로 성가신 것을 멈췄습니다.

빠른 핫픽스이지만 나중에 홈을보다 안전한 위치로 변경해야합니다.