- 類Unix系統(tǒng)都是以文件為單位輸入輸出:
- 文件描述符
0- stdin: Unix 輸入文件/流 - 文件描述符
1- stdout: Unix 輸出文件/流 - 文件描述符
2- stderr: Unix 異常信息文件/流
- 文件描述符
-
文件描述符可以理解為緩存文件, 不會保存到磁盤上 -
文件那就是我們磁盤上的文件了 - 默認(rèn)在終端上打命令顯示(你可以看到的)出來的所有內(nèi)容, 都輸出到了
緩存文件里, 正常的輸出到了信息stdout, 異常信息都輸出到了stderr, 所以你看到的所有內(nèi)容是stdout+stderr
>和&
-
>name: 語法:文件描述符(可選)>文件名, 意思是把一個左邊的文件描述符(默認(rèn)1- stdout)輸出到一個右邊的name文件里 -
&>name- 語法:文件描述符(可選)&>文件名等同于1>name 2>name, 意思是把1-stdout輸出到右邊的name文件里, 同時把2- stderr也輸出到右邊的name文件里 -
>&- 語法:文件描述符(可選)>&文件描述符,&把>輸出的文件轉(zhuǎn)換為了文件描述符, 因此右邊可以加|grep過濾了 - 此時大家可以試試各種命令情況
docker logs
-
docker logs cotainer_id >1.txt: 只有stdout信息到1.txt里(>左邊沒指定值默認(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, 此時,1.txt里會出現(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 是不是終端里也會出現(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