- 類Unix系統(tǒng)都是以文件為單位輸入輸出:
- 文件描述符
0
- stdin: Unix 輸入文件/流 - 文件描述符
1
- stdout: Unix 輸出文件/流 - 文件描述符
2
- stderr: Unix 異常信息文件/流
- 文件描述符
-
文件描述符
可以理解為緩存文件
, 不會(huì)保存到磁盤上 -
文件
那就是我們磁盤上的文件了 - 默認(rèn)在終端上打命令顯示(你可以看到的)出來(lái)的所有內(nèi)容, 都輸出到了
緩存文件
里, 正常的輸出到了信息stdout
, 異常信息都輸出到了stderr
, 所以你看到的所有內(nèi)容是stdout
+stderr
>和&
-
>name
: 語(yǔ)法:文件描述符(可選)>文件名
, 意思是把一個(gè)左邊的文件描述符(默認(rèn)1
- stdout)輸出到一個(gè)右邊的name
文件里 -
&>name
- 語(yǔ)法:文件描述符(可選)&>文件名
等同于1>name 2>name
, 意思是把1
-stdout輸出到右邊的name
文件里, 同時(shí)把2
- stderr也輸出到右邊的name
文件里 -
>&
- 語(yǔ)法:文件描述符(可選)>&文件描述符
,&
把>
輸出的文件
轉(zhuǎn)換為了文件描述符
, 因此右邊可以加|grep
過(guò)濾了 - 此時(shí)大家可以試試各種命令情況
docker logs
-
docker logs cotainer_id >1.txt
: 只有stdout信息到1.txt里(>
左邊沒(méi)指定值默認(rèn)為1
- stdout) -
docker logs cotainer_id 2>1.txt
: 只有stderr信息到1.txt里, 這里的2
代表stderr
-
docker logs cotainer_id &>1.txt
: stdout和stderr都輸出到1.txt里 -
docker logs cotainer_id 2&>1.txt
: 等同于docker logs cotainer_id 2 1>1.txt 2>1.txt
, 把命令里的2
作為參數(shù), 傳到了前面的命令中, 等同于docker logs container_id 2
, 此時(shí),1.txt
里會(huì)出現(xiàn):
"docker logs" requires exactly 1 argument.
See 'docker logs --help'.
Usage: docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
你試試docker logs cotainer_id 2
是不是終端里也會(huì)出現(xiàn)一樣的內(nèi)容?
docker logs container_id 2>&1 |grep ...
ref:
- https://stackoverflow.com/questions/24793069/what-does-do-in-bash
- https://stackoverflow.com/questions/11255447/what-does-mean/11255498
- https://stackoverflow.com/questions/3385201/confused-about-stdin-stdout-and-stderr
- https://stackoverflow.com/questions/34724980/finding-a-string-in-docker-logs-of-container/38207098