使用 Linux 指令時,輸出太多時會不方便閱讀,這時可以透過 資料導向 這個功能.
標準輸出 (stdout)
Linux 下版標準輸出是顯示器,我們可以利用 > 或 >> 將標準輸出 (stdout) 做導向,下面的例子將執行結果導向到檔案.
root@ubuntu:~# ifconfig ens33 > ifconfig.txt root@ubuntu:~# cat ifconfig.txt ens33 Link encap:Ethernet HWaddr 00:0c:29:6d:a9:f0 inet addr:172.16.15.129 Bcast:172.16.15.255 Mask:255.255.255.0 inet6 addr: fe80::d486:b6ac:858e:5140/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3189 errors:0 dropped:0 overruns:0 frame:0 TX packets:1621 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:4085940 (4.0 MB) TX bytes:113281 (113.2 KB)
標準輸出 (stdout) 的代碼為 1,所以有時你會看到下面這種用法 1> .
root@ubuntu:~# ifconfig ens33 1> ifconfig.txt root@ubuntu:~# cat ifconfig.txt ens33 Link encap:Ethernet HWaddr 00:0c:29:6d:a9:f0 inet addr:172.16.15.129 Bcast:172.16.15.255 Mask:255.255.255.0 inet6 addr: fe80::d486:b6ac:858e:5140/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3189 errors:0 dropped:0 overruns:0 frame:0 TX packets:1621 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:4085940 (4.0 MB) TX bytes:113281 (113.2 KB)
資料的導向有分兩種模式 > >> , >> 的做法是資料的導向是以附加後面的方式來處理.
下面的例子就是透過 附加導向的方式來處理.
root@ubuntu:~# ifconfig ens33 > ifconfig.txt root@ubuntu:~# ifconfig lo >> ifconfig.txt root@ubuntu:~# cat ifconfig.txt ens33 Link encap:Ethernet HWaddr 00:0c:29:6d:a9:f0 inet addr:172.16.15.129 Bcast:172.16.15.255 Mask:255.255.255.0 inet6 addr: fe80::d486:b6ac:858e:5140/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3249 errors:0 dropped:0 overruns:0 frame:0 TX packets:1661 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:4090790 (4.0 MB) TX bytes:117769 (117.7 KB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:229 errors:0 dropped:0 overruns:0 frame:0 TX packets:229 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:17843 (17.8 KB) TX bytes:17843 (17.8 KB)
標準錯誤輸出 (stderr)
直接來看看下面這個範例,程式輸出錯誤到顯示器上而且沒有把這個內容導向檔案.
root@ubuntu:~# ifconfig 123 > ifconfig.txt 123: error fetching interface information: Device not found root@ubuntu:~# cat ifconfig.txt
輸出 (stdout) 的導向有兩種,第一種就是 標準輸出 (stdout) 的代碼為 1 ,第二種就是 標準錯誤輸出 (stderr) 代碼為 2,所以需要使用 2> , 或是 2>> 的方式才能將錯誤的內容做導向.
root@ubuntu:~# ifconfig 123 2> ifconfig.txt root@ubuntu:~# cat ifconfig.txt 123: error fetching interface information: Device not found
標準輸出 (stdout)+標準錯誤輸出 (stderr)
如果要同時將正確與錯誤的資料都寫入同一個檔案可以使用下面兩種語法 2>&1 , &> .
root@ubuntu:~# ifconfig 123 > ifconfig.txt 2>&1 root@ubuntu:~# cat ifconfig.txt 123: error fetching interface information: Device not found root@ubuntu:~# ifconfig ens33 >> ifconfig.txt 2>&1 root@ubuntu:~# cat ifconfig.txt 123: error fetching interface information: Device not found ens33 Link encap:Ethernet HWaddr 00:0c:29:6d:a9:f0 inet addr:172.16.15.129 Bcast:172.16.15.255 Mask:255.255.255.0 inet6 addr: fe80::d486:b6ac:858e:5140/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3578 errors:0 dropped:0 overruns:0 frame:0 TX packets:1835 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:4123223 (4.1 MB) TX bytes:139668 (139.6 KB)
第二種方式會比較簡潔.
root@ubuntu:~# ifconfig 123 &> ifconfig.txt root@ubuntu:~# ifconfig ens33 &>> ifconfig.txt root@ubuntu:~# cat ifconfig.txt 123: error fetching interface information: Device not found ens33 Link encap:Ethernet HWaddr 00:0c:29:6d:a9:f0 inet addr:172.16.15.129 Bcast:172.16.15.255 Mask:255.255.255.0 inet6 addr: fe80::d486:b6ac:858e:5140/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3700 errors:0 dropped:0 overruns:0 frame:0 TX packets:1898 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:4133761 (4.1 MB) TX bytes:147352 (147.3 KB)
標準輸入 (stdin)
標準輸入 (stdin) 是鍵盤,我們一樣可以透過 < 做導向.
下面的範例是資料庫的還原.
root@ubuntu:~# mysql -u root -p wordpress < wordpress.sql
關於資料庫的使用請參考 https://benjr.tw/12352 , https://benjr.tw/12461
整理一下:
- 標準輸入 (stdin) ,代碼為 0 ,可以使用 < , << , 0< 或 0<<
- 標準輸出 (stdout) ,代碼為 1 ,可以使用 > , > , 1> 或 1>>
- 標準錯誤輸出 (stderr) ,代碼為 2 ,可以使用 2> 或 2>>
- 標準輸出 (stdout)+標準錯誤輸出 (stderr) , 可以使用 2>&1 , 2>>&1 , &> 或 &>>
沒有解決問題,試試搜尋本站其他內容