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