電子書籍の厳選無料作品が豊富!

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を使用しなければならないのでしょうか?

質問者からの補足コメント

  • つらい・・・

    早速ご連絡ありがとうございます。
    しかしながら、英文だけでは私には理解しかねます。
    恐れ入りますがもう少し踏み込んだご説明をお願い致します。

    「元々のパーミッションから、読み取るユーザのumaskを引く....」とは具体的にどのような計算を行うのでしょうか?

    オリジナル 640
    - My umask 022
    ---------------------
    ???

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/01/28 18:42
  • つらい・・・

    ご連絡ありがとうございます。
    しかしながら「ファイルを作成するときに、パーミッションとして 000 を指定すれば。。。」とはどういうことでしょうか。
    例えばumask "022"を持った私がファイルを作成する場合:

    666
    -022
    ----
    644

    が、ファイルのパーミッションになり、私がディレクトリを作成すれば:

    777
    -022
    ----
    755

    が、パーミッションとなると理解していたのですが、違うのでしょうか??????????
    大変お手数ですが、長年の私の蒙昧を解くカギともなりますのでどうかご返答ください。

    No.2の回答に寄せられた補足コメントです。 補足日時:2016/01/29 08:04

A 回答 (4件)

その辺のからくりは #2 に


「umaskというのは、ファイルを作成するときに指定したパーミッションに対して、umaskで1になっているビットを0にするということです。umaskで0になっているビットはそのままにします。」
と, ちゃんと書いてありますよ.
    • good
    • 0

「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 のファイル」を作ることもできます (たぶん).
    • good
    • 0
この回答へのお礼

度々のご回答ありがとうございます。
しかしながら、私がお尋ねしたいのは:

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"とならないのでしょうか?

お礼日時:2016/01/29 13:20

umaskの意味を理解されていないための誤解ですね。



umaskというのは、ファイルを作成するときに指定したパーミッションに対して、umaskで1になっているビットを0にするということです。umaskで0になっているビットはそのままにします。ファイルを作成するときにはシステムコールレベルではパーミッションの指定は必須です。
例えば、ファイルを作成するときに、パーミッションとして 000 を指定すれば、umaskに関わらず出来たファイルのパーミッションは 000 です。
umask 000 ならばファイル作成時に指定したパーミッション通りにファイルが作成されます。
この回答への補足あり
    • good
    • 0

例えば 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 の実行が必要.
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!