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


121

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

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


1
Cygwin 1.7.34 이상을 사용하는 경우 다른 게시물에 설명 된 방법을 사용하되 db_home:인용을 해제하고 작동하도록 하기 전에 #을 제거하는 것을 잊지 마십시오 .
Maieul 2019

답변:


180

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.


3
당신의 망할 놈의 bash 쉘 설치 한 경우 유의 git-scm.com/download/win을 , 당신은 (가) (당신이 무엇을 선택 옵션에 따라)를 설치 Cygwin에서 문제를 가지고있다. 내 cygwin ~은 내 Win7 사용자 디렉토리에서 끝나고 설명대로 ssh편집 할 때까지 제대로 작동하지 않습니다 /etc/passwd.
Allan

@Allan이 git 설치와 관련하여 여기서 언급하는 문제는 HOME에 대한 Windows 환경 변수를 설정 한 다음 /etc/passwd파일 을 다시 생성하여 해결 됩니다. 이러한 문제를 방지하려면 여기 에서 내 대답을 참조하십시오 .
Christopher

11
db_home: /%H도메인 사용자 이름 (로컬 사용자 이름 대신)을 확인할 수 있지만 원하는 것이 아닐 수 있습니다. db_home: /cygdrive/c/Users/%U내가하고 싶은 일을했습니다.
Abdull 2015 년

2
다양한 방법간에 성능 차이가 있습니다. 을 사용하면 시작 db_home: windows하는 데 sh2.5 초에서 3.5 초 정도 걸립니다 . 를 사용하면 시작 db_home: /cygdrive/c/Users/%U하는 데 sh약 0.9 ~ 1.0 초가 걸립니다 . db_home줄을 삭제 하거나 Windows 홈 디렉토리에 하드 코딩하면 sh시작하는 데 약 0.2 ~ 0.3 초가 걸립니다. 예를 들어 db_home: /cygdrive/c/Users/susam명령을 사용하여 sh명령 프롬프트에서 쉘 스크립트를 실행하는 경우가 많기 때문에 하드 코딩 된 솔루션을 사용합니다 . 예를 들어 sh foo.sh2 초 이상 기다리면 불편 해집니다.
Susam Pal

1
감사합니다 @abdull, db_home : / cygdrive / c / Users / % U는 내가 필요한 대답입니다. db_home : Windows는 내 구성에없는 "/ home / % U"를 사용합니다.
Jeff

74

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


7
-d는 정말 느립니다. : 당신은 현재 사용자가 필요한 경우 대신 -c 사용할 수 있습니다 sinewalker.wordpress.com/2006/10/27/cygwin-users-and-groups
벤 Challenor

Ben이 맞습니다. 대신 -c를 지정하여 현재 사용자에 대한 항목을 추가 할 수 있습니다. 그러나 그렇게하면 Cygwin이 ?????를 표시합니다. 도메인 또는 로컬 컴퓨터의 다른 사용자 및 그룹에 대한 레코드가 없으므로 공유 파일 시스템에 파일을 나열 할 때 사용자 및 그룹에 대해.
크리스토퍼

1
'이제 Cygwin / etc / passwd 파일을 새 $ HOME 경로로 업데이트하십시오'대신 '이제 Cygwin / etc / passwd 파일을 다음과 같이 업데이트하겠습니다. 방금 만든 HOME 변수. ' 많은 감사
로버트

-d 완료하는 데 몇 분 (5 분 후에 죽임)이 걸립니다. 그래서 나는 -c로 다시 실행했습니다. 내 필요에 모두 좋습니다.
bartosz.r

1
@Samuel mkgroup위 의 목적을 명확히하기 위해 설명을 추가했습니다 .
Christopher

30

저는 아주 간단한 일을했습니다. Windows 7 환경 변수를 변경하고 싶지 않았습니다. 그래서 Cygwin.bat 파일을 직접 편집했습니다.

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

이것은이 홈 디렉토리로 로컬 쉘을 시작합니다. 그것이 내가 원했던 것입니다. 나는 이것을 원격으로 액세스하지 않을 것이므로 이것은 나를 위해 일했습니다.


두 번째는 내 dev 컴퓨터에서 내 홈 환경 변수를 변경할 수 없기 때문입니다.
Deqing decing

@WernerCD 기본 Windows 응용 프로그램과 상호 작용할 때 의도하지 않은 결과를 초래할 수 있다는 점에주의하겠습니다. Windows 응용 프로그램은 이전 위치에서 계속 홈을 찾습니다. 예를 들어 Gvim은 이전 Windows %HOME%위치 에서 별도의 vim 구성을 유지하는 반면 Cygwin vim은 $HOME사용자가 선언 한 새 경로를 사용합니다 .
Christopher

이것은 대단합니다 ... 5 년 후, "엔지니어링"이 Cygwin 친척 newb (나와 같은)가 사용하고 이해하기에 충분히 간단하기 때문에 그것을 좋아합니다. 덧붙여서, C : \ Users \ <your_user_name> \ AppData \ Roaming \ Microsoft \ Windows \ SendTo에 .bat 파일에 대한 바로 가기를 넣으면 상황에 맞는 (오른쪽 클릭) 메뉴에서 보내기-> Cygwin으로 이동할 수 있습니다. 탐색기 (원하는 곳에 ~ / 설정을 사용하여 어디에서나 터미널을 엽니 다).
마이크 설치류

19

Cygwin은 mount이제 디렉토리를 마운트 할 수있는 bind 메소드를 지원 합니다. 따라서에 다음 줄을 추가 한 다음 /etc/fstab셸을 다시 시작할 수 있습니다.

c:/Users /home none bind 0 0

이것은 오늘날 올바른 방법입니다. 다른 답변은 구식입니다.
14:52

@ceving 문서화되어 있습니까?
Asad Saeeduddin

10

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

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


1
이렇게하면 모든 Windows 응용 프로그램에 대한 HOME 환경 변수도 변경됩니다.
mob

매우 사실입니다. 그러나 HOME 변수를 사용하는 Windows 응용 프로그램은 무엇입니까? 나는 EmacsW32와 .... Cygwin이 있습니다. Emacs를 먼저 설치했기 때문에 여기에 cygwin 홈도 있습니다.
Michael Paulukonis

1
어떻게 든 / etc / passwd와 충돌하지 않습니까? 환경 변수가 설정되지 않은 경우 / etc / passwd의 HOME으로 기본 설정됩니까? 충돌이없고 기본값이 / etc / passwd이면 완벽한 설정 인 것 같습니다. 저는 썸 드라이브에서 Cygwin을 실행하고 있습니다. 둘 다 직장에서 설치 권한을 요청하지 않아도되므로 Unix가 있습니다. Windows 상자 만 사용할 수있을 때 사용할 수있는 주머니 속 환경과 같습니다. 직장에서는 직장 컴퓨터의 홈 디렉토리가 있고 다른 곳에서는 썸 드라이브에 홈 디렉토리가있을 수 있습니다.
iconoclast

6

$ 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를 사용하는 우리에게는 약간 모호합니다.


1
/ etc / passwd의 홈 디렉토리는 모든 것보다 우선하지 않습니다. 그러나 원격으로 로그인하거나 ssh를 사용할 때 HOME 디렉토리 경로의 기본 소스로 사용됩니다. Cygwin FAQ에서 참조하십시오. cygwin.com/faq/faq.setup.html#faq.setup.home
Christopher

2

나는 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 지문으로 성가신 것을 멈췄습니다.

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.