で指定されているようにホームディレクトリを安全に更新しようとしていますが/etc/passwd
、そのための標準のLinux utils(usermodおよびvipw)はCygwinによって提供されていません。
Cygwinでこれをどのように変更したか誰か教えてもらえますか?
編集: 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 を効果的に使用するドキュメントも読みたいと思うでしょう。本当に良いアドバイスがたくさんあります。
結局、すべての cygwin シェルを終了し、テキスト エディターで手動で編集しました。ここまでは順調ですね。
注: 「Documents and Settings」ディレクトリ内のスペースをエスケープしないでください。エントリは次のようになります
user:...:/cygdrive/c/Documents and Settings/user:/bin/bash
行は:
文字でトークン化されます。
私が見つけた最も簡単な答えは、/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 サポートに関する Tortoise の公式ドキュメントを使用して、Cygwin で TortoiseGit をセットアップする手順に従ってとにかく設定しました。ただし、HOME を単独で設定するだけでは、ssh-keygen がホーム ディレクトリの変更を認識するのに十分ではありませんでした。
また、この問題に関する Cygwin の公式ドキュメントはこちらにあります。
64 ビット Cygwin v1.7.35 を使用した Windows 7 で確認済み。
私は常に HOME をコンピューターのプロパティでユーザー固有の環境変数として設定しています。
私は cygwin のインストールをペン ドライブや別のコンピューターと同期させておくのが好きなので、ホーム ディレクトリをハードコーディングするのは嫌いです。次の cygwin.bat を使用します。
echo off
SETLOCAL
set SHELL=\\bin\\bash
set HOME=%~dp0..\..\doc\unix
bin\bash --login -i
ENDLOCAL
SETLOCAL と ENDLOCAL は、SHELL と HOME が他のプログラムの既存の環境変数を上書きしないようにします。HOME=%~dp0..\..\doc\unix
doc/unix サブディレクトリ内の 2 つ上のディレクトリに HOME を設定します。次に ....\doc\unix.bashrc に を含めますPATH="/bin:/usr/local/bin:/usr/X11R6/bin:/usr/bin"
。Console2start /wait %CD%\bin\bash
を使用しているため、bash の起動には使用しなかったため、追加の cmd ウィンドウは必要ありません。
これは、永続的で、移植性がなく、ネットワーク以外のソリューションで機能します。つまり、Windows で HOME 環境変数を永続的に設定します。
これは、常に/etc/passwdを参照するsshまたはtelnetセッションには影響しないことに注意してください。
ref: Cygwin のセットアップ - 私の HOME 環境変数は、私が望むものではありません。
現在のユーザーの場合 (ユーザーごとに 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 ファイルをインポートします (現在のユーザー):
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 の次の場所:
現在のユーザーの場合:
HKEY_CURRENT_USER\Environment
新規ユーザーの場合:
HKU\.DEFAULT\Environment
新しい展開可能な文字列値(*REG_EXPAND_SZ*)としてHOMEを作成し、 %USERPROFILE%に入れます
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 を削除すると、すべて正常に動作しました。