iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 28
0
自我挑戰組

30天菜鳥學 Linux 系列 第 28

28天-學習資料流重導向、串接

  • 分享至 

  • xImage
  •  

查看版本方式

test@test:~$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04.1 LTS
Release:	20.04
Codename:	focal

今天學習 : 資料流重導向

  1. 標準輸入  (stdin) :代碼為 0 ,使用 < 或 << ;
  2. 標準輸出  (stdout):代碼為 1 ,使用 > 或 >> ;
  3. 標準錯誤輸出(stderr):代碼為 2 ,使用 2> 或 2>> ;

一般來說,檔案無法讓兩個程序同時打開還同時進行讀寫,因為這樣資料內容會反覆的被改寫掉

所以要這樣寫

echo 'IT幫' > test.txt 2> test2.txt

嘗試做鳥哥老師說的測試 :

test@test:~$ sudo find /etc -name '*passwd*' > test.txt 2>&1
[sudo] password for test: 
test@test:~$ cat test.txt 
/etc/security/opasswd
/etc/pam.d/chpasswd
/etc/pam.d/passwd
/etc/passwd
/etc/passwd-

test@test:~$ sudo find /etc -name '*passwd*' > test2.txt 1>&2
/etc/security/opasswd
/etc/pam.d/chpasswd
/etc/pam.d/passwd
/etc/passwd
/etc/passwd-
test@test:~$ cat test2.txt 
test@test:~$ 

test@test:~$ sudo find /etc -name '*passwd*' > test3.txt 
test@test:~$ cat test3.txt 
/etc/security/opasswd
/etc/pam.d/chpasswd
/etc/pam.d/passwd
/etc/passwd
/etc/passwd-

讓使用者在 console 輸入文字保存在指定文件

可以使用 eof 來做結尾,假如按 ctrl + d會跳出訊息警告

test@test:~$ cat > text.txt << eof
> 123
> 456
> -bash: warning: here-document at line 79 delimited by end-of-file (wanted `eof')

學習 : 管線 (pipe) | ,鳥哥的話

讀者在前幾堂課曾經看過類似『 ll /etc | more 』的指令,較特別的是管線 (pipe, |) 的功能。管線的意思是, 將前一個指令的標準輸出作為下一個指令的標準輸入來處理!

注意 :

這個管線命令『 | 』僅能處理經由前面一個指令傳來的正確資訊,也就是 standard output 的資訊,對於 stdandard error 並沒有直接處理的能力,如果你需要處理 standard error output ,就得要搭配 2>&1 這種方式來處理才行了。

學習 : 鳥哥私房菜 - 第 9 堂課:正規表示法與 shell script 初探

只需要 inet 的資料方式 :

test@test:~$ ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:5b:9c:f9:c3  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.31.121.160  netmask 255.255.240.0  broadcast 172.31.127.255
        inet6 fe80::215:5dff:fe01:2b5a  prefixlen 64  scopeid 0x20<link>
        ether 00:15:5d:01:2b:5a  txqueuelen 1000  (Ethernet)
        RX packets 302654  bytes 343694659 (343.6 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 111160  bytes 13659665 (13.6 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 635  bytes 53365 (53.3 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 635  bytes 53365 (53.3 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

test@test:~$ ifconfig | grep 'inet[[:space:]]'
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet 172.31.121.160  netmask 255.255.240.0  broadcast 172.31.127.255
        inet 127.0.0.1  netmask 255.0.0.0


上一篇
27天-了解指令串接概念
下一篇
29天-重新開始學習 docker
系列文
30天菜鳥學 Linux 59
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言