
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で質問しましょう!
似たような質問が見つかりました
- Android tar.ファイルのインストールについて知りたいです 2 2022/07/23 15:34
- UNIX・Linux Linuxのtarコマンドで同一ディレクトリに解凍するコマンドは何でしょうか? 1 2022/04/25 12:59
- その他(データベース) AWSのcloud9で「 ls -l ~/.ssh/」のコマンドで公開鍵、 秘密鍵を知ろうとすると「 1 2023/07/09 02:10
- UNIX・Linux cronの@rebootでのdateコマンドの実行につきまして 2 2023/06/11 16:23
- UNIX・Linux Linuxについて質問です。 シェルスクリプト名をfind.shとして、以下の条件をすべて満たすファ 1 2023/02/03 03:50
- Visual Basic(VBA) VBA GetAttrについて教えてください 2 2022/12/22 15:25
- Excel(エクセル) 【マクロ】フォルダAからダBへファイルを、ファイルの更新日時の条件で、1つづつ移動するには? 3 2022/08/25 09:56
- Excel(エクセル) マクロのコードを、少しでも削って短くしたい 3 2022/08/30 07:46
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/06 13:01
- UNIX・Linux cpio使ってた人はtarが流行りだしてから焦ったり驚いたりしたか 1 2023/05/07 10:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Winmerge ファイルの中身は同じ...
-
ファイルの先頭行を全て削除したい
-
教えてください!困ってます。
-
emlをtxtに変換するには?
-
コマンドプロンプトによるフォ...
-
onedriveの中身を削除したらパ...
-
バッチファイルで変数の中身を...
-
ファイル操作(削除など…)の履...
-
ショートカットアイコンと、元...
-
ファイルの単位
-
Excelで保存時間とPCの時間があ...
-
.rndというRNDファイルは、何な...
-
ODBCエラー「admin」によってロ...
-
office365 ファイルを削除したい
-
windows7から10へアップグレー...
-
ファイルの「読み取り専用」が ...
-
突然ですみません、教えて欲し...
-
macでjwcadのファイルをpdf化に...
-
シンボリックリンクからの被参...
-
macのdmgファイル(動画)をMP4...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Winmerge ファイルの中身は同じ...
-
教えてください!困ってます。
-
emlをtxtに変換するには?
-
onedriveの中身を削除したらパ...
-
同期センターのマークが出てま...
-
コマンドプロンプトによるフォ...
-
ファイルの先頭行を全て削除したい
-
mrl→midファイルへ
-
外字ファイル、eudc.tte と e...
-
バッチファイルで変数の中身を...
-
office365 ファイルを削除したい
-
Windows10 フォルダ内の自動並...
-
ファイルの単位
-
ショートカットアイコンと、元...
-
VScodeでjarファイルを開く方法
-
macのdmgファイル(動画)をMP4...
-
バッチファイルからタスクスケ...
-
フォルダ内の一覧を印刷するには?
-
mac ファイルの詳細情報を編集...
-
Excellにて→ファイルエラー:デ...
おすすめ情報
早速ご連絡ありがとうございます。
しかしながら、英文だけでは私には理解しかねます。
恐れ入りますがもう少し踏み込んだご説明をお願い致します。
「元々のパーミッションから、読み取るユーザのumaskを引く....」とは具体的にどのような計算を行うのでしょうか?
オリジナル 640
- My umask 022
---------------------
???
ご連絡ありがとうございます。
しかしながら「ファイルを作成するときに、パーミッションとして 000 を指定すれば。。。」とはどういうことでしょうか。
例えばumask "022"を持った私がファイルを作成する場合:
666
-022
----
644
が、ファイルのパーミッションになり、私がディレクトリを作成すれば:
777
-022
----
755
が、パーミッションとなると理解していたのですが、違うのでしょうか??????????
大変お手数ですが、長年の私の蒙昧を解くカギともなりますのでどうかご返答ください。