パイプ記号("|")

前のコマンドの出力を、次のコマンドの入力として使用してください。 複数のコマンドは、複数のパイプ記号を使用して接続できます。

# 输出字符串'hello world'给wc命令进行单词数量统计
echo "hello world" | wc -w
# 输出:
2

出力リダイレクト演算子(">")

コマンドの出力をファイルにリダイレクトします。 リダイレクトの説明:通常、プログラムは標準出力(stdout)に出力します。標準出力は通常、使用している端末です。リダイレクト演算子は、標準出力を標準出力以外の場所にリダイレクトします。

# 将字符串hello world重定向(写入)到文件hello.txt中
# 如果文件不存在,则创建文件;如果文件存在,则覆盖文件内容
echo "hello world" > hello.txt
# 输出hello.txt文件内容
cat hello.txt
# 输出:
hello world

リダイレクト演算子(">>") を追加します

コマンドの出力をファイルに追加します。

# 将字符串hello world追加到文件hello.txt中
# 如果文件不存在,则创建文件;如果文件存在,则追加内容到文件末尾
echo "hello world" >> hello.txt
# 输出hello.txt文件内容
cat hello.txt
# 输出:
hello world
hello world

echoコマンドはデフォルトでは1行を出力するため、出力は自動的に改行文字で終わります。

入力リダイレクト文字("<")

コマンドの入力としてファイルを使用してください。

echo "hello world" > hello.txt
# 将文件hello.txt作为wc命令的输入
wc -w < hello.txt
# 输出:
2

複数行入力のリダイレクト文字("<<")

ヒアドキュメントとも呼ばれ、コマンドの入力として複数行の文字列を受け取ります。

# 将多行字符串作为wc命令的输入
# 用EOF(end of file)作为结束标志是惯例,可以用其他的。
# EOF前后不能有任何字符或空格。
wc -w << EOF
> hello world
> hello world
> EOF
# 输出:
4

特別なリダイレクト記号

このプログラムは実行時に以下の3つのファイルを開きます。

標準入力ファイル(stdin)

標準入力のファイルディスクリプタは0であり、プログラムはデフォルトで標準入力からデータを読み込みます。

標準出力ファイル(stdout)

stdoutのファイルディスクリプタは1であり、プログラムはデフォルトでstdoutにデータを出力します。

標準エラーファイル(stderr)

stderr のファイルディスクリプタは 2 であり、プログラムはエラー情報を stderr ストリームに書き込みます。

エラー出力リダイレクト文字("2>")

# 将命令的错误输出重定向到文件error.txt中
# 如果文件不存在,则创建文件;如果文件存在,则覆盖文件内容
ls not-exist-directory/ 2> error.txt
# 输出error.txt文件内容
cat error.txt
# 输出:
ls: cannot access 'not-exist-directory/': No such file or directory

標準出力とエラー出力を結合します (">&")

1>&2の正しい戻り値は出力チャネル 2 に渡されます。&2 は、出力チャネル 2 が正しい出力チャネルであることを示します。

2>&1のエラー戻り値は出力チャネル 1 に渡されます。ここで、&1 は出力チャネル 1 を示します。

スペースは入れないでください。

ファイル構造を作成する

mkdir exist-directory
touch exist-directory/exist-file.txt
# 将命令的错误输出合并到标准输出通道
# 并写入文件out.txt中
ls not-exist-directory/ exist-directory/ > out.txt 2>&1
# 输出out.txt文件内容
cat out.txt
# 输出:
ls: cannot access 'not-exist-directory/': No such file or directory
exist-directory/:
exist-file.txt
# 先理解
ls not-exist-directory/ exist-directory/ > out.txt
# 等于
ls not-exist-directory/ exist-directory/ 1> out.txt
# 这是将标准输出重定向到文件out.txt中,而错误输出还是输出到终端
# 同理
ls not-exist-directory/ exist-directory/ 2> out.txt
# 这是将错误输出重定向到文件out.txt中,而标准输出还是输出到终端
# 将命令的标准输出合并到错误输出
# 并将合并后的错误输出写入文件out.txt中
ls not-exist-directory/ exist-directory/ 2> out.txt 1>&2
# 输出out.txt文件内容
cat out.txt
# 输出:
ls: cannot access 'not-exist-directory/': No such file or directory
exist-directory/:
exist-file.txt

出力をファイルにマージする(「&>」)

# 将命令的标准输出和错误输出合并到文件out.txt中。
# 是上面两种方式的简写
ls not-exist-directory/ exist-directory/ &> out.txt
# 输出out.txt文件内容
cat out.txt
# 输出:
ls: cannot access 'not-exist-directory/': No such file or directory
exist-directory/:
exist-file.txt

したがって、一般的なコマンドには以下が含まれます。

xxx &> /dev/null
xxx > /dev/null 2>&1

これは、 xxxプログラムの標準出力とエラー出力を/dev/nullファイルにリダイレクトすることを意味します。つまり、出力を破棄します。