1. 程式人生 > >9.I/O重定向和管道

9.I/O重定向和管道

標準輸入重定向(STDIN,檔案描述符為0):預設從鍵盤輸入。
標準輸出重定向(STDOUT,檔案描述符為1):預設輸出到螢幕。
錯誤輸出重定向(STDERR,檔案描述符為2):預設輸出到螢幕。

1.IO重定向

IO重定向:就是把一些預設輸入輸出修改預設的位置。

例如:
#tty
/dev/pts/0 檢視當前終端號
#hostname
Centos7.localdomain 預設輸出在當前終端/dev/pts/0
#hostname > /dev/pts/1 這樣就把輸出在/dev/pts/1視窗顯示

但是更多的是我們把輸出重定向到檔案內。
[[email protected]

data]#hostname >> demo
[[email protected] data]#cat demo
Centos7.localdomain

2.重定向符號

命令 < 檔案:將檔案作為命令的標準輸入,預設不寫就是1
命令 > 檔案:將標準輸出內容寫到一個檔案中,覆蓋原檔案內容
命令 2> 檔案:將錯誤輸出內容寫到一個檔案中,覆蓋原檔案內容
命令 >> 檔案:將標準輸出內容寫到一個檔案中,追加到原有內容的後面
命令 2>> 檔案:將錯誤輸出內容寫到一個檔案中,追加到原有內容的後面
命令 >> 檔案 2>&1 :將標準輸出與錯誤輸出一起寫到檔案中,追加到原有內容的後面
命令 &>> 檔案:功能同上

例子:

1.#cat > f1  回車之後在在鍵盤輸入 a b c
a b c
把標準輸入內容寫到f1檔案中。

2.#cat < f1 檢視f1檔案等價於 cat f1

3.#cat <f1 >f2 把f1的標準輸出當作f2的標準輸入,也就是f1內容覆蓋到f2

4.#cat <f2 >>f2  死迴圈把f2內容追加到f2本身。

3.多重重定向

應用: 常用在寫指令碼的時候,來寫一些配置檔案。

[[email protected] data]#cat >f2.log <<EOF
> hello
> hello
> world 
> goodby
> EOF
[
[email protected]
data]#cat f2.log hello hello world goodby

4.管道

管道:就是把前一個命令的標準輸出,用作下一個命令的標準輸入。

管道實現的小功能:
實現1-100相加

#echo {1..100} |tr ' ' '+'|bc
#seq -s"+" 100 | bc

通過下面的小練習可以加深對管道的理解:

1、將/etc/issue檔案中的內容轉換為大寫後儲存至/tmp/issue.out檔案中
#tr 'a-z' 'A-Z' < /etc/issue > /data/issue.out

2、將當前系統登入使用者的資訊轉換為大寫後儲存至/tmp/who.out檔案中
#logname | tr 'a-z' 'A-Z'>/data/who.out

3、一個linux使用者給root發郵件,要求郵件標題為”help”,郵件正文如下:
Hello, I am 使用者名稱,The system version is here,please help me to check it ,thanks!
作業系統版本資訊。
#mail -s help root<<EOF
> Hello,I am $USER.The system version is here,please help me to check it,thanks!$(cat /etc/centos-release)
> EOF

4、將/root/下檔案列表,顯示成一行,並檔名之間用空格隔開
#ls -1 | tr '\n' ' '

5、計算1+2+3+..+99+100的總和
#seq -s + 100 |bc

6、刪除Windows文字檔案中的‘^M’字元
#tr -d '^M'

7、處理字串“xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4”,只保留其中的數字和空格
#echo 'xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4'|tr -dc "[:blank:][:digit:]"

8、將PATH變數每個目錄顯示在獨立的一行
#echo $PATH|tr ':' '\n'

9、將指定檔案中0-9分別替代成a-j
#cat demo 
0123456789
#cat demo |tr '0-9' 'a-j'

10、將檔案/etc/centos-release中每個單詞(由字母組成)顯示在獨立的一行,並無空行
#cat /etc/centos-release | tr -d '\n'|tr ' ' '\n'

5.tee命令

應用:tee命令可以把標準輸出儲存在一個檔案中,同時還能打印出來,或者同時做為下一個命令的標準輸入。
這裡寫圖片描述

例子:

1.#ls | tee f1.log 即在螢幕上列印,也把結果寫到檔案f1.log中
[[email protected] data]#ls | tee f1.log
f1.log
file1
file2
file3
file4
[[email protected] data]#cat f1.log 
f1.log
file1
file2
file3
file4


2.即把ls內容儲存在f1.log檔案中,也作為下一個命令的標準輸入
[[email protected] data]#ls | tee f1.log |tr 'a-z' 'A-Z'
F1.LOG
FILE1
FILE2
FILE3
FILE4

3.如果要追加到f1.log檔案中,而不是覆蓋f1.log內容,用到-a
[[email protected] data]#hostname |tee -a f1.log |tr 'a-z' 'A-Z'
CENTOS7.LOCALDOMAIN
[[email protected] data]#cat f1.log 
f1.log
file1
file2
file3
file4
Centos7.localdomain

相關推薦

9.I/O定向管道

標準輸入重定向(STDIN,檔案描述符為0):預設從鍵盤輸入。 標準輸出重定向(STDOUT,檔案描述符為1):預設輸出到螢幕。 錯誤輸出重定向(STDERR,檔案描述符為2):預設輸出到螢幕。 1.IO重定向 IO重定向:就是把一些預設輸入輸出

第十章 I/O定向管道

0.摘要 概念與技巧 -I/O重定向:概念與原因 -標準輸入,輸出和標準錯誤的定義 -重定向標準I/O到檔案 -使用fork來為其他程式重定向 -管道(Pipe) -建立管道後呼叫fork 相關的系統呼叫與函式 -dup,dup2 -pipe

06 I/O定向管道

文件中 輸入輸出 行數據 cat 命令 負載 結構 系統默認 總線 .com   首先,我們知道我們的計算機結構,在第一節的時候已經介紹過了,CPU進行數據運算,同時控制器負責指令的發送,而內存則是數據存儲的地方,CPU讀取的數據均從內存中調取。電腦除了CPU和內存外,

linux i/o定向管道程式設計

1.Linux 使用三種流: 0:stdin           標準輸入 1:stdout        標準輸出 2:stderr         標準錯誤輸出 2.預設的連線是tty 如果輸入sort,按回車鍵,終端將會連線到sort工具上。隨便輸入幾行文字,當按下

第五章 linux定向管道

控制 windows 空白 設備 example 替換 刪除fstab num 研究 重定向和管道 標準輸入和輸出: 程序:指令+數據 讀入數據:Input 輸出數據:Output 打開的文件都有一個fd: file descriptor (文件描述符) Linux給程序提

Liunx學習筆記之文件權限與I/O定向

ima 所有 讀取 區別 命令執行 com ror 重定向 cd 命令 一、文件權限 1. 文件權限 在 Linux 中有四種訪問權限,列舉如下 可讀取:r,Readable 可寫入:w,Writable 可執行:x,Execute 無權限:- 我們可以使用 ls -l

20181205 I/O 定向

I/O 重定向 一.標準輸入、標準輸出、標準錯誤file descriptors (FD,檔案描述符 或 Process I/O channels):程序使用檔案描述符來管理開啟的檔案[[email protected] ~]# ls /proc/$$/fd0 1 2 3 40, 1, and 2

20181205 I/O 定向

esc 輸出 ext src -c channels vim nag proc I/O 重定向 一.標準輸入、標準輸出、標準錯誤file descriptors (FD,文件描述符 或 Process I/O channels):進程使用文件描述符來管理打開的文件[roo

IO定向管道用法

STDOUT和STDERR可以被重定向到檔案命令 操作符號 檔名支援的操作符號包括: 把STDOUT重定向到檔案2> 把STDERR重定向到檔案&> 把所有輸出重定向到檔案檔案內容會被覆蓋set –C 禁止將內容覆蓋已有檔案,但可追加| file 強制覆蓋set +C 允許覆蓋&g

linux的基本命令(三) 定向管道,資訊黑洞

重定向 “>” :輸出重定向的一個檔案,覆蓋原來的檔案 “>>”:輸出重定向到一個檔案,追加到原來的檔案 輸入重定向:<(不常用) 將 a.txt的內容當做是ls的輸入 標準

Linux Bash Shell學習 十七 I/O定向

                  本文也即《Learning the bash Shell》3rd Edition的第七章Input/Output and Command-Line Processing之讀書筆記之一。我們曾經學習過shell的基本IO重定向操作:>、<和|。基本上能滿足95%的

管理及I/O定向

顯示屏 寄存器 標準輸入 stdin 系統 存在 輸出 設備 block 程序 :指令和數據控制器:指令運算器:數據存儲器:RAM地址總線:內存尋址數據總線:傳輸數據控制總線:控制指令寄存器:CPU暫時存儲器I/O :硬盤 Input Output系統設定:默認輸出設備

C++ I/O 定向方法(定向到串列埠或Socket)

C++ 標準輸入輸出模組,為字元流操作提供了便捷的途徑,軟體開發當中,尤其是嵌入式系統開發當中,有時候需要把流資訊重新定向到特定的埠,如串列埠,乙太網,USB等。如標準輸入輸出cout, cin預設將字元流定向到螢幕或控制檯。本文介紹瞭如何過載streambuf使得使用

Shell I/O定向的原理解釋

在Unix系統中,每個程序都有STDIN、STDOUT和STDERR這3種標準I/O,它們是程式最通用的輸入輸出方式。幾乎所有語言都有相應的 標準I/O函式 ,比如,C語言可以通過scanf從終端輸入字元,通過printf向終端輸出字元。熟悉Shell的朋友都知

系統技術非業餘研究 » 大檔案定向管道的效率對比

微博上的@拉風_zhang提出了個問題: @淘寶褚霸 請教個問題,#1. cat huge_dump.sql | mysql -uroot ;#2. mysql -uroot < huge_dump.sql ;#1效率要高,在linux中通過管道傳輸 和 < 這種方式有什麼差別

Shell I/O定向與exec的使用介紹

注:該文章例子來自於網路的收集和整理,附帶本人註解。 ①I/O重定向的常用用法 符號 意義 cmd1 | cmd2 管道符,將cmd1的標準輸出作為cmd2的標準輸入。 > filename 將標準輸出

Shell定向管道操作

1.修改IP地址的方式 有幾種 1.ifconfig 臨時修改 2.修改eth檔案永久修改 2.tab鍵 用來提示 3.檢視命令歷史 history 4.快速呼叫歷史命令 ![行號]

Linux命令列學習之路(六)——定向管道

今天我們來總結一下個人認為linux下最為實用和厲害的重定向和管道 在說今天的重點之前,必須要先學一點其他的新知識:標準輸入(stdin)、標準輸出(stdout)、標準錯誤輸出(stderr) 標準輸入(stdin):程式碼為0,使用<或<<   輸入

linux初級學習筆記九:linux I/O管理,定向管道!(視頻序號:04_3)

font 運算 bsp 輸出 指令 所有 inittab tput bin 本節學習的命令:tr,tee,wc 本節學習的技能:       計算機的組成       I/O管理及重定向      管道的使用   知識點九:管理及IO重定向(4_3) 計算機組成:  

Shell基礎:介紹、歷史命令、命令不全別名、通配符、輸入輸入定向管道作業控制

基礎 一個 直接 1.5 寫到 否則 shel attr tle Shell的介紹 zsh、ksh(yum list |grep zsh 進行查看,然後可以相應的進行安裝) 命令歷史1. /root/.b