teeで生成された保護されたファイルの書き込み操作をキャンセルする方法は?

teeで生成された保護されたファイルの書き込み操作をキャンセルする方法は?

書き込み禁止ファイルと書き込み禁止ファイルで動作することを確認したい小さなプログラムがあります。そのため、echo $text > $fileorを使用する代わりにandを別々にecho $text >> $file使用する必要がありました。使用時に権限を変更しても、ファイルに使用するたびに次のメッセージが表示されます。echo $text | sudo tee $fileecho $text | sudo tee --append $filesudo teerm

$ ls
someFile writeProtectedFile
$ rm someFile
$ ls
writeProtectedFile
$ rm writeProtectedFile
rm remove write-protected regular file 'writeProtectedFile'? yes
$ ls

それから私はジレンマのための可能な解決策を見つけるためにオンラインを遅らせました。無効な権限または変更された権限セットの2つが見つかりました。を実行して権限を簡単に変更できるので、権限の大文字と小文字の区別が正しくないことがわかりますsudo chmod xxx filename。これで権限の変更が成功します。次に、ファイルのプロパティに問題があると仮定してファイルを実行し、ディレクトリ内の他のすべてのファイルと同じようにlsattr出力しました。-------------e--

修正する

私が使用する理由teeは、保護されたファイルに書き込むためにテキストをエコーすることです。しかし、副作用で保護された一般的なファイルにも書くこともあります...私の目標は実際には同様のことですが、sudo echo "whatever" >> /etc/someFileこれはうまくいきません。で解決策を見つけましたecho "whatever" | sudo tee /etc/someFile

ベストアンサー1

存在しないファイルを引数としてコマンドteeに渡すと、出力が書き込まれる前にファイルが生成されます。コマンドの前に を付けると、sudoシェルにteeコマンドを として実行するように要求しますroot。その結果、生成されたファイルはteeコマンドを開始したユーザーが所有するため、root他のユーザーは読み取り専用になります。実行して合計列を表示するls -lと、それを直接確認できます。usergroup

$ rm -f writeProtectedFile # Removing the file in case it already exists
$ echo $text | sudo tee writeProtectedFile
yourtext
$ ls -l
total 4
-rw-r--r-- 1 root root 9 22.07.2015 14:26 writeProtectedFile

この問題を克服するためのいくつかのオプションがあります。

  • teeファイルの作成を要求する前に、標準ユーザーとしてファイルを生成します。teeこれにより--append、所有権を変更せずに切り取るか、単に切り取ります。

    $ touch writeProtectedFile # creates the file as standard user
    $ echo $text | sudo tee writeProtectedFile
    $ rm writeProtectedFile
    
  • ファイルを削除する前にファイルの所有権を変更してください。

    $ echo $text | sudo tee writeProtectedFile
    $ sudo chown $(whoami) writeProtectedFile # `whoami` returns the current user name
    $ rm writeProtectedFile
    
  • rmファイルが書き込み禁止であることを無視するように指示するには、次のようにします-f, --force

    $ echo $text | sudo tee writeProtectedFile
    $ rm --force writeProtectedFile
    

おすすめ記事