/etc/passwd
で指定されているようにホームディレクトリを安全に更新しようとしていますが、そのための標準のLinux utils(usermodおよびvipw)はCygwinによって提供されていません。
Cygwinでこれをどのように変更したか教えてください。
結局、すべてのcygwinシェルを終了し、テキストエディターで手動で編集しました。ここまでは順調ですね。
注:「Documents and Settings」ディレクトリ内のスペースをエスケープしないでください。エントリは次のようになります
user:...:/cygdrive/c/Documents and Settings/user:/bin/bash
行は:
文字でトークン化されます。
EDIT:Cygwinの最新バージョン(1.7.34以降)については、 この新しい質問 を参照してください。
Sblundyの答えのように、いつでも手作業で編集できます。
しかし、「公式」な方法でやりたい場合は、cygwin固有の mkpasswd
コマンドを使用します。以下は mkpasswd
に関する公式ドキュメントの抜粋です。
たとえば、次のコマンド:
例3.11代替ホームルートの使用
$ mkpasswd -l -p "$(cygpath -H)" > /etc/passwd
ローカルユーザーのホームディレクトリをWindowsの「プロファイル」ディレクトリに配置します。
Cygwin Utilities ドキュメントページ(mkpasswd
を含む)には、他にも非常に便利なコマンドがたくさんあります。 。上記の例でのcygpath
の使用は、これらのcygwin固有のツールのもう1つです。
あなたがそれをしている間に、おそらく WindowsでCygwinを効果的に使用する のドキュメントも読みたいでしょう。本当に良いアドバイスがたくさんあります。
私が見つけた最も簡単な答えは、/ homeをWindows Home/UserProfileディレクトリへのソフトリンクにすることです
cd /
mv home oldhome
ln -s "$(cygpath -H)" home
現在のバージョンのWindowsでHOMEディレクトリの適切な場所を取得するため、cygpathを使用しました。私の箱でcygpath -H
返却値 /cygdrive/c/Users
現在のユーザーの場合、以下が私のために働いた:
引数なしでssh-keygenを実行することで動作することを確認しました。この変更を行った後、アプリはデフォルトでキーを/ home/userではなく/ cygdrive/c/Users/userに保存するようになりました。
HOMEの設定が必要かどうかはわかりませんが、とにかくCygwinでTortoiseGitをセットアップする手順に従って、非公式のCygwinサポートに関するTortoiseの公式ドキュメントを使用して行いました here 。ただし、ssh-keygenがホームディレクトリの変更を認識するには、HOMEを単独で設定するだけでは不十分でした。
また、この問題に関するCygwinの公式ドキュメントは here にあります。
64ビットCygwin v1.7.35を使用してWindows 7で確認済み。
[コンピューターのプロパティ]で、常にHOMEをユーザー固有の環境変数として設定します。
ホームディレクトリへのパスにスペースがあることによる問題を回避するには、Windowsの「プロファイル」ディレクトリの短い形式を使用します-/cygdrive/c/DOCUME~1/user
。
これを行うには、次のコマンドを入力します。
mkpasswd -l -p "$(cygpath $(cygpath -dH))" > /etc/passwd
私はcygwinのインストールをペンドライブと別のコンピューターに同期させたいので、ホームディレクトリをハードコーディングするのは嫌です。次のcygwin.batを使用します。
echo off
SETLOCAL
set Shell=\\bin\\bash
set HOME=%~dp0..\..\doc\unix
bin\bash --login -i
ENDLOCAL
SETLOCALおよびENDLOCALは、ShellおよびHOMEが他のプログラムの既存のenv変数を上書きしないようにします。 HOME=%~dp0..\..\doc\unix
は、doc/unixサブディレクトリ内で、HOMEを2つ上のディレクトリに設定します。次に....\doc\unix.bashrcにPATH="/bin:/usr/local/bin:/usr/X11R6/bin:/usr/bin"
を含めます。 Console2 を使用しているため、bashの開始にstart /wait %CD%\bin\bash
を使用しなかったため、追加のcmdウィンドウは必要ありません。
これは、永続的で、移植性がなく、ネットワーク以外のソリューションに役立ちます。つまり、WindowsでHOME環境変数を永続的に設定します。
注これはsshまたはtelnet/ etc/passwdを常に参照するセッション
参照:Cygwinのセットアップ-私のHOME環境変数は私が望むものではありません。
currentユーザーの場合(ユーザーごとに1回実行する必要があります)::
reg add HKCU\Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%
newユーザーの場合:
reg add HKU\.DEFAULT\Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%
注:キャレット^beforeパーセント記号%
このregファイルをインポートします(currentユーザー):
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Environment]
"HOME"=hex(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,4c,\
00,45,00,25,00,00,00
newユーザーの場合:
Windows Registry Editor Version 5.00
[HKU\.DEFAULT\Environment]
"HOME"=hex(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,4c,\
00,45,00,25,00,00,00
Regeditで、以下を実行します。
currentユーザーの場合:
HKEY_CURRENT_USER\Environment
newユーザーの場合:
HKU\.DEFAULT\Environment
[〜#〜] home [〜#〜]を新しいとして展開可能な文字列値(* REG_EXPAND_SZ *)と入力%USERPROFILE%
オリジナル answer by Christopher from elsewhere
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
を指していることがわかります。
cd /home
rm -rf chris
ln -s /cygdrive/z chris
それが最も安全な解決策であるかどうかは確かではありませんが、それは私のために働く可能性のある解決策です;)
/ etc/passwdファイルを直接編集し(他に何もアクセスしていないことを確認して)、/ homeへのすべての参照を/ Usersに変更しました(Windows 7)。すべてが正しく機能するためには、/ homeディレクトリ内のディレクトリを削除する(または適切な他の場所に移動する)必要があることがわかりました。それ以外の場合、cygwinは、たとえば 'bash -l'が/ home/Pabloで始まるが、$ HOMEが/ Users/Pabloであり、emacsがその逆を行うように見える、分割されたパーソナリティを開発します。/home/Pabloを削除すると、すべて正常に機能しました。
Cygwinを起動するときは、C:\Users\username
にいる必要がありました。そこで、.bashrc
と.profile
に追加しました
cd ${HOMEPATH}
~/.
の代わりに$HOMEPATH
を使用する場合は、次を追加することもできます。
export HOME=${HOMEPATH}
このようにして、cygwinのインストールを邪魔しません。