で指定されているようにホームディレクトリを安全に更新しようとしていますが/etc/passwd
、そのための標準のLinuxユーティリティ(usermodとvipw)はCygwinによって提供されていません。
Cygwinでこれをどのように変更したか誰か教えてもらえますか?
で指定されているようにホームディレクトリを安全に更新しようとしていますが/etc/passwd
、そのための標準のLinuxユーティリティ(usermodとvipw)はCygwinによって提供されていません。
Cygwinでこれをどのように変更したか誰か教えてもらえますか?
回答:
編集: Cygwinの最近のバージョン(1.7.34以降)については、この新しい質問を参照してください。
sblundyの答えのように、いつでも手作業で編集できます。
ただし、これを「公式」な方法で実行する場合は、cygwin固有のmkpasswd
コマンドを使用します。以下は、次の公式ドキュメントの抜粋mkpasswd
です。
たとえば、次のコマンドは次のとおりです。
例3.11。代替ホームルートの使用
$ mkpasswd -l -p "$(cygpath -H)" > /etc/passwd
ローカルユーザーのホームディレクトリをWindowsの「プロファイル」ディレクトリに配置します。
Cygwinユーティリティのドキュメントページ(を含むmkpasswd
)には、他にも非常に便利なコマンドがたくさんあります。cygpath
上記の例での使用は、これらのcygwin固有のツールのもう1つです。
その間、WindowsでのCygwinの効果的な使用に関するドキュメントも読むことをお勧めします。本当に良いアドバイスがたくさんあります。
-d
ドメインの場合) $ mkpasswd -l -d -p "$(cygpath -H)" > /etc/passwd
これは私には機能しませんでした-基本的にハングしました。このマシンを使用しているのは私だけなので、この代替手段を使用できます。これは、ドメインを使用しているかどうかに関係なく安全です(-c
「現在のユーザー」用です) $ mkpasswd -l -c -p "$(cygpath -H)" > /etc/passwd
$HOME
。これを修正する方法はありますか?
最終的に、すべてのcygwinシェルを終了し、テキストエディターで手動で編集しました。ここまでは順調ですね。
注:「ドキュメントと設定」ディレクトリのスペースをエスケープしないでください。エントリは次のようになります
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
cygwin -H
。これは最も賢明な場所であり、Windows 7以降、そのパスにもスペースがありません。
現在のユーザーの場合、次のことがうまくいきました。
引数なしでssh-keygenを実行することで機能することを確認しました。この変更を行った後、アプリはデフォルトでキーを/ home / userではなく/ cygdrive / c / Users / userに保存するようになりました。
HOMEの設定が必要かどうかはわかりませんが、Cygwinの非公式サポートに関するTortoiseの公式ドキュメントを使用して、CygwinでTortoiseGitを設定する手順に従って行いました。。ただし、HOMEを単独で設定するだけでは、ssh-keygenがホームディレクトリの変更を認識するのに十分ではありませんでした。
また、この問題に関するCygwinの公式ドキュメントはここにあります。。
64ビットのCygwinv1.7.35を使用するWindows7で確認済み。
コンピューターのプロパティで、常に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
HOMEをdoc / unixサブディレクトリの2つのディレクトリに設定します。次に、.... \ doc \ unix.bashrcにPATH="/bin:/usr/local/bin:/usr/X11R6/bin:/usr/bin"
。を含めます。私が使用していなかったstart /wait %CD%\bin\bash
私が使用していますので、bashのを開始するためにコンソール2を、私は、追加のcmdウィンドウを必要としないので、。
これは、永続的で、移植性がなく、ネットワーク以外のソリューションで機能します。つまり、WindowsでHOME環境変数を永続的に設定します。
これは、常に/ etc / passwdを参照するsshまたはtelnetセッションには影響しないことに注意してください。
ref:Cygwinのセットアップ-私のHOME環境変数は私が望むものではありません。
以下のために、現在のユーザー(ニーズはかつて、ユーザーごとに実行する)::
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
HOMEを新しい拡張可能な文字列値(* REG_EXPAND_SZ *)として作成し、%USERPROFILE%に入れます
Cygwin 1.7.34以降を使用している場合、Cygwinは、ホームディレクトリ、ログインシェル、およびgecos情報をで取得する方法の構成をサポートしています/etc/nsswitch.conf
。これについては、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パスに設定されます。「cygwinスキーマ」というセクションも参照してください。
unix
ADのみ:ユーザーのホームディレクトリは、posixAccount補助クラスのunixHomeDirectory属性で指定されたPOSIXパスに設定されます。「UNIXスキーマ」というセクションも参照してください。
desc
ユーザーのホームディレクトリは、SAMまたはADのユーザーのdescription属性のhome = "..." XMLに似た設定で指定されたPOSIXパスに設定されます。詳細な説明については、「descスキーマ」というセクションを参照してください。
以下は、CygwinのユーザーのホームディレクトリをWindowsのホームディレクトリに使用されるものと同じにします。
db_home: windows
Cygwin 1.7.33以前を使用している場合は、最新バージョンのCygwinに更新し、以前に使用したもの/etc/passwd
と/etc/group
ファイルは、その後、上記の手順を参照してください。
それ以外の場合は、以下の古い手順に従ってください。
まず、ユーザープロファイルを指すHOMEのWindows環境変数を設定します。
HOME
%USERPROFILE%
次に/etc/passwd
、%HOME%
作成したWindows変数で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を終了し、再起動します。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を削除すると、すべて正常に機能しました。
C:\Users\username
cygwinを開始するときだけ、参加する必要がありました。だから、私はちょうど追加し.bashrc
、.profile
cd ${HOMEPATH}
の~/.
代わりに使用し$HOMEPATH
たい場合は、以下を追加することもできます。
export HOME=${HOMEPATH}
このようにして、cygwinのインストールを妨げません。