このタスクの違いは何ですか?
echo "hahaha" >> file1
そして
echo "hahaha" |tee -a file1
?
はい、保護されたファイルにはaithにも書き込めないことがわかりましたsudo echo
。しかし、可能であれば書くこともできますsudo tee
。ありがとうございます。
答え1
データの意味に違いはありませんファイルにecho
正常に実行され、現在のユーザーがファイルを書き込める場合はtee
同じです。
このtee
コマンドは追加の出力も生成します。それ標準出力には、ファイルに追加するテキストも表示されます。最初のコマンドではこれは発生しません。
別の違いはファイルですいいえと書かれると、リダイレクトを含む最初のコマンドは実行されませんecho
。echo
会議tee
ファイルに書き込むと、2番目のコマンドの実行が失敗します(tee
ただし、端末にはまだテキストが生成されます)。
出力を生成するいくつかの長期実行プロセスを実行している場合、これは重要です。
long_running_thing >>file
long_running_thing
書き込み可能でない場合は起動file
しません。
long_running_thing | tee -a file
long_running_thing
これは最後まで実行され、実行されますが、file
書き込み可能でない場合、出力は保存されません(そして出力はターミナルから追加で書き込まれますtee
)。
質問の終わりにヒントを与えましたが、次に注目する必要があるのは
sudo echo hello >>file
file
書けないと効果はありません。現在のユーザー。リダイレクトが処理されるためです。今後コマンドが実行されます(上記を参照)。
ルートが所有するファイルに追加するには、次のようにします。
echo hello | sudo tee -a file
ここではtee
rootとして実行しています。 rootとして実行する必要はありませんが、echo
現在のユーザーが実際にファイルを書き込むユーティリティを所有していない場合は、root(またはファイルを所有するユーザー)として実行する必要があります。
もう1つの可能性は、以下を使用することです。
sudo sh -c 'echo hello >>file'
または
echo hello | sudo sh -c 'cat >>file'
これにより、リダイレクトを使用してファイルにデータが追加されますが、この場合、リダイレクトを実行するシェルはrootとして実行されるため、制限されたアクセス許可/所有権のためにファイルを追加/作成すると失敗しません(まだ失敗する可能性があります)file
。ディレクトリ名)。
答え2
Tシャツは主に出力を複数のファイルにリダイレクトするコピーコマンドを別々に呼び出す代わりに。
たとえば、
wc -l | tee -a file1.txt file2.txt file3.txt
プロセス全体ではなく、teeコマンドだけで権限を昇格できます。 >>これは、昇格された権限が開始される前に開始されます。