「>」と「>>」の違いは何ですか?


12

違いは何であるls >とはls >>?私はGCSEコンピューティングのためにこれを理解する必要がありますが、違いはわかりません。


1
以下の素敵な答えに加えて、stackoverflow.com / a / 984761/1841533の2番目の(そして最も投票された)答えをご覧ください。プロセスがまだ書き込み中にファイルが切り捨てられた場合、saifファイルの先頭に「Nul」文字が表示されません!(例:ログファイルのローテーション中)。「foo> file」はシークしないため、サイズの変化に気付かず、まだOSがNulで埋められている最初よりも先を指しています。foo >> fileはシークし、新しい位置(先頭)を指します。
オリビエデュラック14

これは教育上の質問であるため、関連するドキュメントの操作を学ぶことをお勧めします。Bashリファレンスマニュアルのセクション「リダイレクト」(こちらもアクセス可能man bash)。
デビッドフォースター

回答:


28

>>>はリダイレクト演算子です。この場合ls、何かの出力を他の場所に転送します。この出力がファイルに送信されると>、ファイルは切り捨てられます。つまり、以前のコンテンツは削除>>されますが、ファイルの最後に新しいデータが追加され、以前のコンテンツが保持されます。これはどの入力でも機能するため、たとえばechocatもこの方法で使用できます。

また|、データを別のアプリケーションに渡す演算子も興味深いのでls | cat -n、行番号付きのリストが表示されます!

パイプは関連する用語です。


2
切り捨てまたは上書きしますか?
DKボーズ14

2
:のstrace出力からの@DKBoseなので、truncateは正しい用語です。bash -c 'echo a > blah'open("blah, O_WRONLY|O_CREAT|O_TRUNC, 0666)
ムル14

「パイプ」と「出力リダイレクション」も、答えで使用します。よくやった。
0xSheepdog 14

私が意味するものを見つけました:この素晴らしい答えに加えて、stackoverflow.com / a / 984761/1841533の2番目の(そして最も支持された)答えを参照してください:>>ファイルへの書き込み(例:ログ)にも良い面があります影響はないプロセスはまだそれへの書き込み中に、ファイルが切り捨てられた場合持っている「NUL」文字は、SAIFファイルの先頭に表示されます!(例:ログファイルのローテーション中)。「foo> file」はシークしないため、サイズの変化に気付かず、まだOSがNulで埋められている最初よりも先を指しています。foo >>fileシークし、したがって新しい位置(先頭)を指します。
オリビエデュラック14

5

シンボル>>>は、出力をファイルにリダイレクトするために使用されます。

ファイルが存在しない場合、両方ともファイルを作成します。ファイルが既に存在する場合、ファイルにデータを追加する>場所でファイルを上書き>>します。

だから、ls > myfile名前の文書が作成されますmyfileが存在しない場合に。場合はmyfile、すでに存在していると、いくつかのデータが含まれ、それはあなたがそれを渡す新しいデータで上書きされます。

一方ls >> myfile、存在しない場合はファイルを作成し、データを書き込みます。ファイルに何らかのデータが存在する場合、新しいデータが最後に追加されます。


0

単一の>を使用する場合、ファイルが既に存在する場合は上書きされます。これを使用するときは非常に注意してください。

2つの>>を使用すると、既に存在する場合は追加(つまり、ファイルの下部から書き込みを開始)します。それ以外の場合、新しいファイルが存在しない場合は作成します。


1
すでに与えられた答えを繰り返すのはなぜですか?
レキスト14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.