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

Linuxターミナルでリダイレクトを使用して、どこからでもデータを読み書きできます

入力と出力のリダイレクトは、プログラミング言語やスクリプト言語の自然な機能です。技術的には、コンピュータを操作するたびに本質的に発生します。入力はstdinから読み取られます (標準入力、通常はキーボードまたはマウス)、出力は stdoutに送られます (標準出力、テキストまたはデータストリーム)、およびエラーは stderrに送信されます 。これらのデータストリームが存在することを理解することで、BashやZshなどのシェルを使用しているときに情報がどこに行くかを制御できます。

Linuxには、標準入力、標準出力、および標準エラーがファイルシステムの場所として存在します。それらは/devで見ることができます :

$ ls /dev/std*
/dev/stderr@  /dev/stdin@  /dev/stdout@

それらを直接使用することはできませんが、データを送信できるメタロケーションと考えると便利な場合があります。

リダイレクトの基本は単純です。いくつかの>を使用します 出力をリダイレクトする文字、およびいくつかの < 入力をリダイレクトする文字。

出力のリダイレクト

lsコマンドの出力をファイルに書き込むには:

$ ls > list.txt

lsの出力は表示されません 通常どおり、出力は list.txtに書き込まれるためです。 画面の代わりにファイル。実際、これは非常に用途が広いので、あるファイルの内容を別のファイルにコピーするために使用することもできます。テキストファイルである必要もありません。バイナリデータにリダイレクトを使用できます:

$ cat image.png > picture.png

(なぜそれをやりたいのか疑問に思っている場合は、ファイルのアクセス許可に影響を与えることがあります。)

入力のリダイレクト

入力をコマンドに「リダイレクト」することもできます。多くのコマンドは、指定した引数から入力を取得するようにすでにハードコーディングされているため、これは出力のリダイレクトよりもおそらく有用ではありません。ただし、コマンドが引数のリストを予期していて、それらの引数がファイルにあり、ファイルからターミナルにすばやく「コピーアンドペースト」したい場合(実際にはコピーしたくない場合を除く)に便利です。貼り付け):

$ sudo dnf install $(<package.list)

入力リダイレクトの一般的な使用法は、ヒアドキュメントです。 (または単にヒアドキュメント 略して)およびここの文字列 テクニック。この入力メソッドは、テキストのブロックを標準の入力ストリームに、特別なファイルの終わりマーカーまでリダイレクトします(ほとんどの人は EOF を使用します) 、ただし、一意であると予想される任意の文字列にすることができます)。これを入力してみてください( EOF の2番目のインスタンスまで) )ターミナルに:

$ echo << EOF
> foo
> bar
> baz
> EOF

期待される結果:

foo
bar
baz

ヒアドキュメント これは、Bashスクリプターが数行のテキストをファイルまたは画面にダンプするために使用する一般的なトリックです。句をファイルの終わりマーカーで終了することを忘れない限り、 echoの扱いにくいリストを回避する効果的な方法です。 またはprintf ステートメント。

ここの文字列 ヒアドキュメントに似ています 、ただし、1つの文字列(または引用符で囲まれた単一の文字列に偽装した複数の文字列)で構成されます:

$ cat <<< "foo bar baz"
foo bar baz
エラーメッセージのリダイレクト

エラーメッセージはstderrというストリームに送られます 、 2>として指定 リダイレクトの目的で。このコマンドは、エラーメッセージを output.logというファイルに送信します。 :

$ ls /nope 2> output.log

/ dev/nullへのデータの送信

Bashの詳細

  • バッシュチートシート
  • Bashを使用したプログラミングの概要
  • Bashスクリプトに関するシステム管理者ガイド
  • 最新のBash記事

標準入力、標準出力、エラーの場所があるのと同じように、どこにもない場所もあります。 Linuxファイルシステム上。これはnullと呼ばれます 、および / devにあります 、そのため、「slashdevslashnull」と言うにはあまりにも頻繁に使用する人々によって「devnull」と発音されることがよくあります。

/ dev / nullにデータを送信できます リダイレクトを使用します。たとえば、 find コマンドは冗長になる傾向があり、ファイルの検索中に権限の競合が報告されることがよくあります:

$ find ~ -type f 
/home/seth/actual.file
find: `/home/seth/foggy': Permission denied
find: `/home/seth/groggy': Permission denied
find: `/home/seth/soggy': Permission denied
/home/seth/zzz.file

find コマンドはそれをエラーとして処理するため、エラーメッセージだけを / dev / nullにリダイレクトできます。 :

$ find ~ -type f 2> /dev/null
/home/seth/actual.file
/home/seth/zzz.file
リダイレクトの使用

リダイレクトは、Bashのある場所から別の場所にデータを取得するための効率的な方法です。常にリダイレクトを使用するわけではありませんが、必要なときにリダイレクトを使用することを学ぶと、ファイルを開いたり、データをコピーして貼り付けたりする必要がなくなります。これらはすべて、通常、マウスを動かしたり、キーを押したりする必要があります。そのような極端に頼らないでください。良い生活を送り、リダイレクトを使用します。


Linux
  1. Linuxターミナルでファイルをコピーする

  2. Linuxターミナルでファイルの名前を変更します

  3. Linuxターミナルでファイルを移動する

  1. xclipを使用してLinuxコマンドラインでコピーして貼り付けます

  2. Linuxでの入出力とエラーリダイレクトの操作

  3. Linuxスクリプトコマンドを使用してターミナルセッションをキャプチャして出力する方法

  1. Linux/Unixでの入力/出力リダイレクト

  2. Linuxで上書きせずに同じファイルを読み書きしますか?

  3. LinuxでCでファイルを書く方法は?