
umaskが"022"の環境で、"tar --no-same-permissions -xf ...."コマンドを実行すると、「読み取られる全てのファイルのパーミッションは"_rw_r__r__"となり、同じく読み取られる全てのディレクトリは"rwxr_xr_x"となる。」と理解していたのですが、そうはなりません。
次の例を参照ください。
# tar cf /tmp/tmp.tar /etc/shadow
$ umask
22
$ echo " " > echofile
$ mkdir dir
$ tar --no-same-permissions -xf /tmp/tmp.tar
$
$ ls -l
drwxr-xr-x 2 user group 4.0K 1月 28 15:05 dir/
-rw-r--r-- 1 user group 3 1月 28 15:05 echofile
drwxr-xr-x 2 user group 4.0K 1月 28 15:06 etc/
$ ls -l etc
-rw-r----- 1 user group 1.8K 1月 26 11:09 shadow
となり、shadowファイルのパーミッションはオリジナルを保持してしまいます。
何故でしょうか?
上の例で"shadow"ファイルのパーミッションを"_rw_r__r__"とするには、tarだけでなくchmodを使用しなければならないのでしょうか?
No.4ベストアンサー
- 回答日時:
その辺のからくりは #2 に
「umaskというのは、ファイルを作成するときに指定したパーミッションに対して、umaskで1になっているビットを0にするということです。umaskで0になっているビットはそのままにします。」
と, ちゃんと書いてありますよ.
No.3
- 回答日時:
「Linux系OS」というカテゴリなのでそれに沿った説明で:
Linux など Unix系の OS でファイルを作成するときには最終的にはシステムコールの open(2) を呼び出すのですが, このときにパーミッションを指定することになります. ユーザが実際にファイルを作るときにはパーミッションを指定しませんが, 裏ではシェルがパーミッションを設定しています.
Linux では install(1) を使うことにより, ファイルの作成とパーミッションの設定を同時に行うことができるようです. 例えば
install -b -m 640 /dev/null hoge
を実行すると, (hoge というファイルがなかったなら) できあがる hoge のパーミッションは 640 になります (実際にはさらに umask に従って調整されます). もちろん
install -b -m 000 /dev/null hogehoge
を実行すると「パーミッションが 000 のファイル」を作ることもできます (たぶん).
度々のご回答ありがとうございます。
しかしながら、私がお尋ねしたいのは:
1."tar -x....."に"--no-same-permissions"オプションを付けた際、英文説明にも「実効ユーザのumaskを引く。」と書かれているにもかかわらず、元のパーミッションでファイルができてしまう。
Tacosanさまは『「もともと 640 ...」..のファイルに対しては 640 のパーミッションになるのが正しい』と仰いますが、その理由をお尋ねしたいのです。
2.artooさまは『ファイル作成の際、パーミッション 000 を指定すれば、umaskに関わらずファイルのパーミッションは 000 です。』と仰います。
何故、パーミッション"000"のファイルを作成する際は"umask"が考慮されないのでしょうか。
artoo様は『(パーミッション)"000"-(umask)"022"=(実パーミッション)"000"』とのお考えなのでしょうか。それならば何故『(パーミッション)"640"-(umask)"022"=(実パーミッション)"620"とならないのでしょうか?
No.2
- 回答日時:
umaskの意味を理解されていないための誤解ですね。
umaskというのは、ファイルを作成するときに指定したパーミッションに対して、umaskで1になっているビットを0にするということです。umaskで0になっているビットはそのままにします。ファイルを作成するときにはシステムコールレベルではパーミッションの指定は必須です。
例えば、ファイルを作成するときに、パーミッションとして 000 を指定すれば、umaskに関わらず出来たファイルのパーミッションは 000 です。
umask 000 ならばファイル作成時に指定したパーミッション通りにファイルが作成されます。
No.1
- 回答日時:
例えば GNU tar 1.28 のマニュアル (
https://www.gnu.org/software/tar/manual/html_nod … ) では --no-same-permissions をWhen extracting an archive, subtract the user's umask from files from the permissions specified in the archive. This is the default behavior for ordinary users.
と説明している. つまり「読み取られる全てのファイルのパーミッションは"_rw_r__r__"となり、同じく読み取られる全てのディレクトリは"rwxr_xr_x"となる。」という「あなたの理解」がそもそも間違っている. そして, この説明の通りに動作するなら, 「もともと 640 のパーミッションを持つファイル」に対しては 640 のパーミッションになるのが正しい (英語を読めばわかる).
もちろんそれを 644 にしたければ chmod の実行が必要.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windows10 フォルダ内の自動並...
-
Winmerge ファイルの中身は同じ...
-
外字ファイル、eudc.tte と e...
-
onedriveの中身を削除したらパ...
-
教えてください!困ってます。
-
outlookuの添付ファイルが開け...
-
ショートカットアイコンと、元...
-
teratrermを使ったデータの送信...
-
ごみ箱から元に戻したのに表示...
-
RHDSetupファイルについて。
-
emlをtxtに変換するには?
-
信頼済みサイトの追加(レジス...
-
macでjwcadのファイルをpdf化に...
-
ノートンのゴーストイメージを...
-
レコードロック情報の解除方法...
-
同期センターのマークが出てま...
-
自分が送信した添付ファイルが...
-
msiファイルをexeファイルに変...
-
PALとNTSCの区別
-
mac os9 不可視ファイルの移動...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Winmerge ファイルの中身は同じ...
-
Windows10 フォルダ内の自動並...
-
onedriveの中身を削除したらパ...
-
ファイルの先頭行を全て削除したい
-
教えてください!困ってます。
-
外字ファイル、eudc.tte と e...
-
コマンドプロンプトによるフォ...
-
mrl→midファイルへ
-
emlをtxtに変換するには?
-
office365 ファイルを削除したい
-
バッチファイルで変数の中身を...
-
outlookuの添付ファイルが開け...
-
ショートカットアイコンと、元...
-
VScodeでjarファイルを開く方法
-
同期センターのマークが出てま...
-
Excelで保存時間とPCの時間があ...
-
teratrermを使ったデータの送信...
-
ファイルの「読み取り専用」が ...
-
macのdmgファイル(動画)をMP4...
-
mac ファイルの詳細情報を編集...
おすすめ情報
早速ご連絡ありがとうございます。
しかしながら、英文だけでは私には理解しかねます。
恐れ入りますがもう少し踏み込んだご説明をお願い致します。
「元々のパーミッションから、読み取るユーザのumaskを引く....」とは具体的にどのような計算を行うのでしょうか?
オリジナル 640
- My umask 022
---------------------
???
ご連絡ありがとうございます。
しかしながら「ファイルを作成するときに、パーミッションとして 000 を指定すれば。。。」とはどういうことでしょうか。
例えばumask "022"を持った私がファイルを作成する場合:
666
-022
----
644
が、ファイルのパーミッションになり、私がディレクトリを作成すれば:
777
-022
----
755
が、パーミッションとなると理解していたのですが、違うのでしょうか??????????
大変お手数ですが、長年の私の蒙昧を解くカギともなりますのでどうかご返答ください。