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
構文の説明 を参照してください。
Cygwinを1.7.34より前にインストールした場合、または mkpasswd
ユーティリティ を実行して/etc/passwd
ファイルを作成した場合は、ユーザーのエントリを編集してCygwinホームディレクトリを変更できますそのファイルに。ホームディレクトリは、/etc/passwd
のユーザーの行の最後から2番目の要素です。¹
どちらの方法でも、これによりHOME
環境変数がシェルの起動中に設定されます。²
トピックの詳細については、 this FAQ item をご覧ください。
脚注:
代わりに 新しいSAM/ADベースのメカニズム を使用するために、/etc/passwd
と/etc/group
を邪魔にならない場所に移動することを検討してください。
コントロールパネルから%HOME%
を設定することは可能ですが、 公式には推奨されていません です。上記のメカニズムを不意にオーバーライドするだけでなく、cron
を介してシェルスクリプトを実行する場合など、常に機能するとは限りません。
Cygwin 1.7.34以降を使用する場合Cygwinは、/etc/nsswitch.conf
でホームディレクトリ、ログインシェル、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_home:
のデフォルト設定は
db_home: /home/%U
そのため、デフォルトでは、Cygwinはホームディレクトリを/home/$USERNAME
に設定するだけです。ただし、必要に応じて他のカスタムパスを指すように変更できます。サポートされているワイルドカード文字は次のとおりです。
%u
Cygwinユーザー名(小文字のu)。%U
Windowsユーザー名(大文字のU)。%D
NetBIOSスタイルのWindowsドメイン。%H
POSIXスタイルのWindowsホームディレクトリ。 db_home:
設定の場合、これは、db_home: /%H/cygwin
のように、直前のスラッシュの直後にのみ意味があることに注意してください。%_
スペースとTAB文字はスキーマを区切るために使用されるため、ファイル名のスペースは%_
(アンダースコア)として指定する必要があります。%%
パーセント文字。パスの代わりに、事前定義された4つの名前付きパススキーマのいずれかを指定できます。
windows
ユーザーのホームディレクトリは、Windowsホームディレクトリとして使用されるのと同じディレクトリに設定されます。通常は、%USERPROFILE%
またはC:\Users\$USERNAME
の行に沿ったものです。もちろん、WindowsディレクトリはCygwinによってPOSIXスタイルに変換されます。
cygwin
ADのみ:ユーザーのホームディレクトリは、cygwinUser補助クラスのcygwinHome属性で指定されたPOSIXパスに設定されます。 「The cygwin schema」と呼ばれるセクション も参照してください。
unix
ADのみ:ユーザーのホームディレクトリは、posixAccount補助クラスのunixHomeDirectory属性で指定されたPOSIXパスに設定されます。 「Unixスキーマ」と呼ばれるセクション も参照してください。
desc
ユーザーのホームディレクトリは、SAMまたはADのユーザーの説明属性のhome = "..." XMLに類似した設定で指定されたPOSIXパスに設定されます。詳細については、「ディスクスキーマ」というセクションを参照してください。
以下は、CygwinのユーザーのホームディレクトリをWindowsホームディレクトリで使用されるものと同じにします。
db_home: windows
Cygwin 1.7.33以前を使用している場合は、 最新バージョン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に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を終了し、再度起動します。 HOMEパスが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.
...
HOME = c:\ users\dhaynesの定義をWindows環境に追加しましたが、それでも '/ home/dhaynes'を作成しようとし続けました。 HOMEを/ cygdrive/c/users/dhaynesに設定するなど、可能な限りすべてのコンボを試しました。エラーメッセージをGoogleで探し、何も見つけられなかった、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フィンガープリントで迷惑な動作を停止しました。
これは簡単な修正プログラムですが、後でHOMEをより安全な場所に変更する必要があります。