chmod
runコマンドを使用すると、なぜユーザー権限が変更されないのか理解できませんfakeroot
。
最初にファイルには次の権限があります。
-rwxr-xr-x a.txt*
chmodを使用してファイルの権限を変更しようとすると、正常に動作します。
chmod 111 a.txt
---x--x--x a.txt*
一緒に実行してみると、fakeroot
あまり効果がないようです。グループや他のユーザーの権限は正しく設定されますが、ユーザーの権限は正しく設定されません。chmod
コマンドの最初の値に関係なく、読み取りおよび書き込み権限が設定されます。
fakeroot chmod 111 a.txt
-rwx--x--x a.txt*
私は何を逃したことがありませんか?
ベストアンサー1
Fakerootはすべてのファイルメタデータ変更を実行せず、これが重要です。つまり、Fakerootはその下で実行されるプログラムであるふりをします。 Fakerootは、所有者の変更など、実行できない変更を行いません。また、失敗を引き起こす可能性のある変更は行われません。たとえば、rootは権限に関係なく常にファイルを開くことができるため、rootとして実行すると次のコードが成功します。
chmod 111 a.txt
cp a.txt b.txt
ただし、root以外のユーザーとして実行するとcp
読み取れないため失敗しますa.txt
。これを防ぐために、chmod
fakerootからユーザーの権限は削除されません。
Fakerootは、実行中のプログラムを変更するふりをします。
$ stat -c "Before: %A" a.txt; fakeroot sh -c 'chmod 111 a.txt; stat -c "In fakeroot: %A" a.txt'; stat -c "After: %A" a.txt
Before: -rwx--x--x
In fakeroot: ---x--x--x
After: -rwx--x--x
通常、fakeroot内で行われたファイルメタデータの変更は、fakeroot呼び出し後も保持されるという保証はありません。それがポイントです。メタデータの変更と変更されたメタデータに対して実行したい操作(アーカイブパッケージングなど)の両方を実行するfakeroot呼び出しを作成します。