orz.conf

技術メモ✍

ファイルディスクリプタ 2>&1

よく見かける2>&1の意味、ググらずにすぐに答えることは出来ますか?


標準エラー出力を標準出力にマージするという意味です。
何度も調べたことがあるかと思いますが、いきなり質問されるとどきっとしてしまいます。

標準入出力のファイルディスクリプタ
0→標準入力
1→標準出力
2→標準エラー出力

プロセスを実行すると上記のファイルディスクリプタが作成されます。


httpdのファイルディスクリプタを確認してみます。

まずはpidを確認
ps aux | grep httpd
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 17762 0.0 1.1 367636 12148 ? Ss Feb18 3:10 /usr/sbin/httpd


pidは17762と確認出来ました。
ファイルディスクリプタを確認します。

/proc/17762/fd配下にファイルディスクリプタがあります。

ls -l /proc/17762/fd

lr-x------ 1 root root 64 Mar 21 20:14 0 -> /dev/null
l-wx------ 1 root root 64 Mar 21 20:14 1 -> /dev/null
l-wx------ 1 root root 64 Mar 21 20:14 10 -> /var/log/httpd/access_log
l-wx------ 1 root root 64 Mar 21 20:14 11 -> /var/log/httpd/ssl_access_log
l-wx------ 1 root root 64 Mar 21 20:14 12 -> /var/log/httpd/ssl_request_log
lr-x------ 1 root root 64 Mar 21 20:14 13 -> /dev/urandom
l-wx------ 1 root root 64 Mar 21 20:14 2 -> /var/log/httpd/error_log
lrwx------ 1 root root 64 Mar 21 20:14 3 -> socket:[3608670]
lrwx------ 1 root root 64 Mar 21 20:14 4 -> socket:[3608671]
lrwx------ 1 root root 64 Mar 21 20:14 5 -> socket:[3608674]
lrwx------ 1 root root 64 Mar 21 20:14 6 -> socket:[3608675]
lr-x------ 1 root root 64 Mar 21 20:14 7 -> pipe:[3608682]
l-wx------ 1 root root 64 Mar 21 20:14 8 -> pipe:[3608682]
l-wx------ 1 root root 64 Mar 21 20:14 9 -> /var/log/httpd/ssl_error_log

httpdは標準出力は/dev/nullなので読み捨て、標準エラー出力は/var/log/httpd/error_log
となっているようです。

コマンド > /dev/null > 2>&1

これは標準エラー出力を標準出力にマージして読み捨てるということです。