1. 程式人生 > >Linux學習筆記10——管道和重定義

Linux學習筆記10——管道和重定義

管道重定義

計算機的組成有:運算器,控制器,存儲器,輸入輸出設備。於是就有了地址總線,數據總線,控制總線。事實上在機器裏面總線是復用的,一個總線三種功能。
地址總線:內存尋址
數據總線:傳輸數據
控制總結:控制指令

寄存器:CPU暫時存儲器

程序在運行時要從輸入設備獲取指令,通過輸出設備輸出作為人機交互。那麽系統在什麽地方獲取輸入輸出鍵盤鼠標硬盤還是哪裏?那麽系統就需要設定默認的輸入輸出。

系統設定

  • 默認輸出設備:標準輸出,STDOUT, 1(1為描述符號)
  • 默認輸入設備:標準輸入, STDIN, 0
  • 標準錯誤輸出:STDERR, 2

標準輸入:鍵盤
標準輸出和錯誤輸出:顯示器(廉價,不像打印機)

I/O重定向(輸入輸出重定向):改變數據的輸入來源,改變數據的輸出來源。

在Linux中輸出重定向符號為“>” 輸入重定向“<”


輸出重定向
一個大於號> : 覆蓋輸出
兩個大於號>> :追加輸出
比如:ls /etc 將etc的目錄輸出到屏幕,輸出重定向:ls /etc > /tmp/etc.out 將etc的文件目錄輸出到文件中
如果在生產中輸出的時候不小心用到了覆蓋輸出可以用 set -C來設置。
set -C: 禁止對已經存在文件使用覆蓋重定向;
在-C的情況下如果想強制覆蓋輸出,則使用 >|
set +C: 關閉上述功能

如果輸出重定向的時候使用了錯誤的輸出,同時也想將錯誤的輸出輸出到文件中,那麽如何使用?
2>: 重定向錯誤輸出

2>>: 追加方式

既想定向標準輸出,也想定向錯誤輸出:
ls /varr > /tmp/var.out 2> /tmp/war.errout (如果命令正確,將標準輸出輸出到/tmp/var.out 。如果命令錯誤,將錯誤命令輸出到/tmp/var.errout)同時也可以定向到同一個文件中。

&>: 重定向標準輸出或錯誤輸出至同一個文件
ls /varr &> /tmp/var.out


輸入重定向
<:輸入重定向
例如:tr ‘a-z‘ ‘A-Z‘ < /etc/fstab(將/etc/fatab這個文件的所有小寫換成大寫)

<<:Here Document(在此處生成文檔)

例如:cat << END
打印一些數據
END結尾會輸出這些數據

例如:cat >>/tmp/myfile.txt << END
the first line
the seconf line
cat /tmp/myfile.txt
the first line
the seconf line


管道:前一個命令的輸出,作為後一個命令的輸入
Linux的重要哲學思想:組合小命令完成復雜任務
命令1 | 命令2 | 命令3 | ...

例如echo "hello world" | tr ‘a-z‘ ‘A-Z‘
HELLO WORLD

echo "redhat" |passwd --stdin user(將user用戶的密碼改為redhat)

cut -d : -f3 /etc/passwd |sort -n

Linux學習筆記10——管道和重定義