GNU/Linux >> Linux の 問題 >  >> Linux

出力をリダイレクトするときに特定のファイル許可を設定する方法は?

古い質問であることは承知していますが、2 セント追加したいと思います。

私も同じ考えで、BowlesCR に似た解決策を思いつきました。彼の解決策の問題点は、私のコマンド (foo) ) を実行する前に umask を変更すると機能しないため、この問題に対する私の見解は次のとおりです。

foo | ( umask 0033; cat >> /tmp/foo.log; )

ここでは、umask foo.log へのリダイレクトのみに影響します サブシェルで。他のすべては影響を受けません。

少し複雑ですが、うまくいきます。


真のスクリプティングがなければ、少し連鎖することができます:

touch /tmp/foo.log; chmod 0644 /tmp/foo.log; foo >> /tmp/foo.log

Slowki の答えと効果的に似ていますが、ワンライナーに凝縮されています。

私が考えることができる唯一の他のことは、umask をいじることです。現在の環境を汚染しないように、サブシェルでこれを行うのが最善です:

(umask 0033 && foo >> /tmp/foo.log)

ただし、それには 2 つの問題があります。

<オール>
  • umask は、creat() で指定されたレベルを超えてアクセス許可を上げることはできません syscall (0666 は Bash が使用しているようです)。
  • 既存のファイルのパーミッションは変更されません (umask ファイルの作成にのみ適用されます ).

  • 私の知る限り、パイプ中にそれを行う方法はありません。単純なスクリプトが最善の解決策かもしれません。

    if [ -e /tmp/foo.log ]; then
        foo >> /tmp/foo.log
    else
        foo >> /tmp/foo.log
        chmod 0644 /tmp/foo.log
    fi
    

    Linux
    1. Linuxは複数の連続したパスセパレーター(/ home //// username /// file)をどのように処理しますか?

    2. /var/log/messages、/var/log/syslog、および/var/log/kern.logの違いは?

    3. Linuxでログファイルを空にする方法

    1. CentOS / RHEL 5,6 で /tmp および /var/tmp ディレクトリ内のファイルの自動削除を無効にする方法

    2. /var/log/lastlog ファイルを切り詰める方法

    3. Linuxコマンド出力をファイルに出力するには?

    1. ディレクトリ内のすべてのフォルダ/ファイルにデフォルトのファイル権限を設定する方法は?

    2. resolv.conf が上書きされているときに DNS を設定するにはどうすればよいですか?

    3. デフォルトの /tmp を /home/user/tmp に変更する方法