歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux技術

Linux 重定向以及管道講解

1.I/O重定向:input輸入,output輸出,我們先來看一下那些是輸入那些是輸出:

輸入的數據流:<----標准輸入(stdin) 鍵盤;

輸出的數據流: ---->標准輸出(stdout) 顯示器;

錯誤的輸出流: ---->錯誤輸出 (stderr)顯示器;

2.在shell裡面標准輸入和標准輸出以及錯誤輸出都分別有一個代號。

標准輸入:0

標准輸出:1

錯誤輸出:2

3.重定向

從標准輸入讀入,標准輸出輸出,異常報告到標准錯誤。

以 > 改變標准輸出

Command > file 將Command的標准輸出重定向到文件中,而不是打印在控制台上。

[root@localhost nzg]# cat /etc/passwd > /home/nzg/a1
以 < 改變標准輸入Command < file 將Command的標准輸入修改為file

[root@localhost nzg]# cat /dev/null < /etc/passwd
以 >> 追加文件Command >> file 可將Command的輸出追加到文件file末尾

[root@localhost nzg]# cat /etc/passwd >> /home/nzg/a1
#管道的數據共享在Linux內核中是通過內存復制實現的,相較於cpu的運算,數據的移動往往更消耗時間,因此,在設計管道時,盡量把能夠減少數據量的操作置於管道的前端.這樣一來數據復制快速,二來程序運算量減少.4.特殊文件的妙用

/dev/null 黑洞,吞噬一切文件,所有寫入它內容的文件都不可讀取,對於腳本來說用處很大.

[root@localhost nzg]# cat /dev/null < /etc/passwd
/dev/zero 用來創建一個指定長度,並且初始化為空的文件這種文件一般都是用作臨時交換文件 /dev/tty 強制把信息輸出至指定終端

[root@localhost nzg]# echo hahahaha111 > /dev/pts/1
5.禁止覆蓋輸出重定向至已存在的文件;
[root@localhost nzg]# set -C
此時可使用強制覆蓋輸出; >|

開啟覆蓋輸出重定向至已存在的文件;

[root@localhost nzg]# set +C
錯誤輸出流重定向: 2>,2>>
[root@localhost nzg]# llls a1 2> 1.txt
[root@localhost nzg]# llls a1 22> 1.txt
合並正常輸出流和錯誤輸出流;

(1) &>,&>> (>為覆蓋,>>為追加)

[root@localhost nzg]# llls a1 &> 1.txt
[root@localhost nzg]# llls a1 &>> 1.txt
(2)COMMAD > /path/to/somefile 2>&1
[root@localhost nzg]# llls al > 1.txt 2>&1
COMMAD >> /path/to/somefile 2>&1

[root@localhost nzg]# llls al >> 1.txt 2>&1
6.管道重定向與管道結合起來可以發揮他的最大優勢,使用起來會很靈活,很實用。

在使用管段的時候我們可以想象成兩根水管流入另一個程序輸入端的水管,這樣做使得我們可以任意拼接程序。

管道:連接程序,實現將前一個命令的輸出直接定向後一個程序當作輸入數據流

COMMAND1 | COMMAND2 | COMMAND3 | ....

[root@localhost nzg]# head -n10 /etc/passwd | tr a-z A-Z

就像這樣我們先讀取了/etc/passwd這個文件,然後我們在執行把裡面的小寫全部轉換為大寫

本文出自 “Linux學習之路” 博客,請務必保留此出處http://luyubo.blog.51cto.com/7634254/1833119

Copyright © Linux教程網 All Rights Reserved