質問
/ etc / passwd
で指定されているようにホームディレクトリを安全に更新しようとしています。
しかし、そうするための標準のLinuxユーティリティ-usermodとvipwは提供されていません
Cygwin。
Cygwinでこれをどのように変更したか教えていただけますか?
解決 2
すべてのcygwinシェルを終了し、テキストエディターで手動で編集しました。これまでのところ、とても良い。
注:「ドキュメントと設定」のスペースをエスケープしないでください。ディレクトリ。エントリは次のようになります
user:...:/cygdrive/c/Documents and Settings/user:/bin/bash
行は:
文字でトークン化されます。
他のヒント
編集: Cygwinの最新バージョン(1.7.34以降)については、この新しい質問。
sblundyの答えのように、いつでも手作業で編集できます。
しかし、もしあなたがそれをしたいなら、「公式」方法は、cygwin固有の mkpasswd
コマンド。以下は、 mkpasswd
の公式ドキュメントの抜粋です。 :
たとえば、次のコマンド:
例3.11代替ホームルートの使用
$ mkpasswd -l -p "$(cygpath -H)" > /etc/passwd
ローカルユーザーのホームディレクトリをWindowsの「プロファイル」ディレクトリに配置します。
Cygwinユーティリティで説明されている他の非常に便利なコマンドがたくさんあります。 ドキュメントページ( mkpasswd
を含む)。上記の例での cygpath
の使用は、これらのcygwin固有のツールのもう1つです。
あなたがそれをしている間、あなたはおそらく Cygwinの使用も読みたいと思うでしょう。 Windows のドキュメントで効果的に。たくさんの本当に良いアドバイスがあります。
私が見つけた最も簡単な答えは、/ homeをWindows Home / UserProfileディレクトリへのソフトリンクにすることです
cd /
mv home oldhome
ln -s "$(cygpath -H)" home
Windowsの現在のバージョンで、HOMEディレクトリの適切な場所を取得するため、cygpathを使用しました。私のボックスでは、 cygpath -H
は / cygdrive / c / Users
現在のユーザーの場合、次のように機能しました:
- Cygwinを閉じます。
- HOME Windowsユーザー環境変数を設定します。
- Cygwinを起動します。
- run" mkpasswd -c -p" $(cygpath -H)" > / etc / passwd"。
- Cygwinを再起動します。
ssh-keygenを引数なしで実行することで動作することを確認しました。この変更を行った後、アプリはデフォルトでキーを/ home / userではなく/ cygdrive / c / Users / userに保存するようになりました。
HOMEの設定が必要かどうかはわかりませんが、とにかくTortoiseの公式ドキュメントを使用してCygwinでTortoiseGitを設定するための手順に従って、非公式Cygwinサポートのこちら。ただし、ssh-keygenがホームディレクトリの変更を認識するには、HOMEを単独で設定するだけでは不十分でした。
また、この問題に関するCygwinの公式ドキュメントはこちら。
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
は、HOMEをdoc / unixサブディレクトリの2つ上のディレクトリに設定します。次に.... \ doc \ unix.bashrcに、 PATH =" / bin:/ usr / local / bin:/ usr / X11R6 / bin:/ usr / bin"
を含めます。
start / wait%CD%\ bin \ bash を使用してbashを開始しませんでした。 "nofollow"> Console2 なので、追加のcmdウィンドウは必要ありません。
Windows環境変数の使用:HOME
これは、永続的で、移植性がなく、ネットワーク以外のソリューションに役立ちます。つまり、WindowsでHOME環境変数を永続的に設定します。
注これは、常に / etc / passwd を参照する ssh または telnet セッションには影響しません。
ref:Cygwinのセットアップ-私のHOME環境変数は私が望むものではありません。
CMD
current ユーザーの場合(ユーザーごとに1回実行する必要があります)::
reg add HKCU\Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%
新規ユーザーの場合:
reg add HKU\.DEFAULT\Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%
注:キャレット^ 前パーセント記号%
インポートREGファイル
この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
新規ユーザーの場合:
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
Regeditの下:
current ユーザーの場合:
HKEY_CURRENT_USER\Environment
新規ユーザーの場合:
HKU\.DEFAULT\Environment
HOME を新しい拡張可能な文字列値(* REG_EXPAND_SZ *)として作成し、%USERPROFILE%
に配置しますのクリストファー
Cygwin 1.7.34 +
Cygwin 1.7.34 以上を使用している場合、Cygwinは、 /etc/nsswitch.conf
でホームディレクトリ、ログインシェル、gecos情報を取得する方法の構成をサポートしています。これについては、Cygwinユーザーガイドのセクションで詳しく説明しています。
以前に / etc / passwd
または / etc / group
ファイルを作成した場合、それらを削除し、新しいWindowsセキュリティモデルを使用してCygwinを構成します。 POSIXマッピングへ。
[[ -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%
または< code> C:\ Users \ $ USERNAME 。もちろん、WindowsディレクトリはCygwinによってPOSIXスタイルに変換されます。 -
cygwin
ADのみ:ユーザーのホームディレクトリは、cygwinUser補助クラスのcygwinHome属性で指定されたPOSIXパスに設定されます。 &#8220;というセクションもご覧ください。 cygwinスキーマ&#8221; 。 -
unix
ADのみ:ユーザーのホームディレクトリは、posixAccount補助クラスのunixHomeDirectory属性で指定されたPOSIXパスに設定されます。 &#8220;というセクションもご覧ください。 UNIXスキーマ&#8221; 。 -
desc
ユーザーのホームディレクトリは、home =&quot; ...&quot;で指定されたPOSIXパスに設定されます。 SAMまたはADのユーザーの説明属性のXMLに類似した設定。 &#8220; The desc schema&#8221;と呼ばれるセクションを参照してください。詳細な説明については。
次のコマンドを実行すると、CygwinのユーザーのホームディレクトリがWindowsホームディレクトリで使用されるものと同じになります。
db_home: windows
Cygwin 1.7.33以前
Cygwin 1.7.33 以前を使用している場合は、最新バージョンCygwinに更新してくださいを使用し、以前に使用した / etc / passwd
および / etc / group
ファイルを削除してから、上記の手順を参照してください。
その他、以下の古い手順に従ってください。
最初に、ユーザーのプロファイルを指すWindows環境変数をHOMEに設定します
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を削除すると、すべて正常に機能しました。