Windows Vista での chown / chmod コマンドに相当するものです。
訳あって C ドライブの Vista (Home Premium) をインストールしなおしたところ、 以前から D ドライブ側に置いていたファイルへのアクセスに支障が出てしまいました。
具体的には:
- 消せないファイルが多発。
- Cygwin 系コマンドでの操作が軒並み ``Permission denied'' に。
OS からは別な(しかももう存在しない!)ユーザーの所有物とみなされているのが原因です。
この問題を次のようにして解決してみました。
1. コマンドプロンプトを「管理者として実行」する
``C:\Windows\System32\cmd.exe'' のアイコンを右クリックし、「管理者として実行(A)」で起動。
2. 作業するディレクトリに移動
ここでは ``D:\cygwin'' とします。
C:\Windows\system32>d: D:\>cd cygwin D:\cygwin>
3. ファイルの所有権を取得
takeown コマンドを実行します。 ``/f '' がファイル名の指定。``/r'' は再帰的に実行することを指定するものです。
D:\cygwin>takeown /f * /r 成功: ファイル (またはフォルダ): "D:\cygwin\bin" は現在ユーザー "lt140-PC\lt140" によって所有されています。 成功: ファイル (またはフォルダ): "D:\cygwin\cygdrive" は現在ユーザー "lt140-PC\lt140" によって所有されています。 成功: ファイル (またはフォルダ): "D:\cygwin\Cygwin.bat" は現在ユーザー "lt140-PC\lt140" によって所有されています。 成功: ファイル (またはフォルダ): "D:\cygwin\Cygwin.ico" は現在ユーザー "lt140-PC\lt140" によって所有されています。 成功: ファイル (またはフォルダ): "D:\cygwin\dev" は現在ユーザー "lt140-PC\lt140" によって所有されています。 ...(以下略)
4. アクセス権を操作
icacls コマンドを実行します。 複雑なオプションを多数受け付ける高機能なコマンドですが、「ユーザーに指定したパス以下のフルコントロールを与える」のであれば ``icacls <パス名> /grant <ユーザー名>:F /t'' だけで終了です。 フルコントロール可能な状態にしたくない場所での実行には注意してください。その場合は ``:F'' とした部分を変更することになります。``icacls /?'' で詳細を確認してください。
D:\cygwin>icacls D:\cygwin /grant lt140:F /t 処理ファイル: D:\cygwin\bin 処理ファイル: D:\cygwin\cygdrive 処理ファイル: D:\cygwin\Cygwin.bat 処理ファイル: D:\cygwin\Cygwin.ico 処理ファイル: D:\cygwin\dev 処理ファイル: D:\cygwin\etc 処理ファイル: D:\cygwin\lib 処理ファイル: D:\cygwin\setup.exe 処理ファイル: D:\cygwin\tmp ...(以下略)
これで無事に読み書きできるようになりました。
…OS は忠実に自分の仕事をこなしているだけなのですが、自分がPCの管理者かつ唯一の利用者であるという状況では正直切ないですね。