敲黑板:Linux重定向用法詳解
相信大家平時都會有需要複製貼上資料的時候,如果是開啟檔案進行復制貼上,就不可避免的需要較多的滑鼠與鍵盤的操作,就會比較繁瑣。那麼有沒有可以省掉這些繁瑣操作的複製貼上的方法呢?
答案是肯定的,那就是重定向。重定向是一種高效的方法,無需大量的滑鼠與鍵盤操作就可以完成資料的轉移。重定向可以分為輸入重定向以及輸出重定向這兩種型別。由於所有程式都有輸入或者輸出,因此輸入和輸出的重定向是任何程式語言或指令碼語言都自帶的功能。
每當你與計算機互動時,重定向就必然會發生。學會使用重定向,不僅可以讓你與計算機更好地互動,還可以提高你的工作效率,因此,這裡就為你講解 Linux 系統中重定向的常見用法:
Linux 中的資料流
談到 Linux 的重定向,就不得不提以下這3種資料流:
- 輸入資訊會從 stdin 中讀取(標準輸入,通常是鍵盤或滑鼠)。
- 輸出資訊會被輸出到 stdout (標準輸出,一個文字檔案或者資料流)。
- 錯誤資訊會被輸出到 stderr。
瞭解了這些資料流的存在,在你使用 Shell 時,你就可以更好地控制資料的流向了。
在 Linux 系統中,標準輸入,標準輸出以及標準錯誤都作為檔案存在。 你可以在 /dev 目錄下看到它們:
$ ls /dev/
std*
/dev/
stderr /dev/
stdin /dev/
stdout
重定向輸出
在 Linux 系統中,使用 > 字元表示重定向輸出。例如,將 ls 命令的輸出重定向到一個檔案中:
$ ls >
list.txt
執行以上命令後,螢幕上並不會顯示 ls 命令的輸出資訊,因為輸出資訊已經被重定向至 list.txt 檔案中了。
除此之外,重定向還有許多用途,它還可以用於複製檔案的內容,而且不限於複製文字檔案,二進位制檔案也可以複製:
$ cat image.png > picture.png
如果你想要將一個檔案的內容複製到另一個檔案的末尾,你只需將 > 字元換成 >> 字串即可,像這樣:
$ cat lxlinux >> alvin
重定向輸入
與重定向輸出相反,重定向輸入使用的是 < 字元。
輸入重定向可以將輸入資訊重定向至命令中作為引數使用。該功能可能比較少用,但是,當命令需要一個引數列表時,而這些引數都存在一個檔案中,然後你想快速地將它們從檔案中複製貼上到終端,這時這個功能就能派上用場了。
例如,package.list 裡記錄了你需要安裝的包的列表,而你想要快速地安裝所有的包,只需執行以下這一條命令,就能一次性安裝 package.list 裡的所有包:
$ sudo dnf install $(<package.list)
輸入重定向的常見用法是 Here-document (簡稱 Here-doc) 以及 Here-string 。
Here-doc 將輸入的文字塊重定向至標準輸入流,直至遇到特殊的檔案結束標記符為止(檔案結束標記符可以是任意的唯一的字串,但大部分人都預設使用 EOF)。
你可以嘗試在終端輸入以下命令(直到第二個 EOF 字串結束):
$ cat << EOF
> alvin
> lxlinux.net
> EOF
預期的輸出應該是這樣的:
alvin
lxlinux
.net
Here-doc 是 Bash 指令碼編寫者們將多行文字轉儲到檔案或螢幕上的常用技巧。
Here-string 與 Here-doc 相似,但是它只有一個字串,或者幾個被引號括起來的字串:
$ cat <<< alvin
alvin
$ cat <<<
"alvin lxlinux.net"
alvin lxlinux.net
重定向錯誤資訊
錯誤資訊預設會進入叫 stderr 的流,使用 2> 可以對其進行重定向。例如,將錯誤資訊重定向到名為 output.log 的檔案中:
$ ls /nope
2>
output.
log
重定向資料至 /dev/null
就像標準輸入、標準輸出以及標準錯誤一樣,在 Linux 檔案系統中,空,也存在一個檔案與之對應,它叫做 null ,放在 /dev 目錄下。為了方便讀,人們經常省略斜槓,直接把他讀作 dev null 。
/dev/null 並不儲存資料,被寫入 /dev/null 的資料最終都會丟失,就像被丟進虛空中一樣。因此,你可以使用重定向將不需要的資料輸送到 /dev/null 。例如,find 命令的輸出往往很冗長,而且在搜尋檔案時還經常會報告許可權衝突的錯誤,像這樣:
$ find ~ -
type f
/home/seth/actual.file
find:
`/home/seth/foggy': Permission denied
find: `/home/seth/groggy
': Permission denied
find: `/home/seth/soggy': Permission denied
/home/seth/zzz.file
這時,你就可以將錯誤資訊重定向到 /dev/null ,以過濾掉不必要的資訊,像這樣:
$ find ~ -type f
2>
/dev/null
/home/seth
/actual.file
/home
/seth/zzz.file
善用重定向
在 Bash 中,重定向是轉移資料的一種高效方法。你可能並不會總是使用重定向,但是學會如何使用重定向,在你需要的時候可以讓你省掉許多不必要的複製貼上操作,因此也節省了許多操作滑鼠與鍵盤的時間。請不要執著於複製貼上了,使用重定向可以提高你的工作效率,難道,它不香嗎?
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69923331/viewspace-2707574/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 敲黑板:InnoDB的Double Write,你必須知道
- Linux中&&和&,|和||用法及區別詳解!Linux
- StringTie用法詳解
- JSONP用法詳解JSON
- extern用法詳解
- iconfont用法詳解
- Metasploit用法詳解
- Linux重定向Linux
- axios的用法詳解iOS
- Flutter ListView 用法詳解FlutterView
- Elasticsearch SQL用法詳解ElasticsearchSQL
- git stash用法詳解Git
- SVG <markers>用法詳解SVG
- Promise用法詳解(一)Promise
- Python self用法詳解Python
- Generator用法詳解+co
- MyBatis Generator 用法詳解MyBatis
- react-dnd 用法詳解React
- struct的匿名用法詳解Struct
- golang package time 用法詳解GolangPackage
- Flutter之BoxDecoration用法詳解Flutter
- Flutter之Container用法詳解FlutterAI
- dataTransfer.setData() 用法詳解
- re.search()用法詳解
- Ubuntu mount命令用法詳解Ubuntu
- fcntl函式用法詳解函式
- cdMysql?using?用法示例詳解MySql
- c++ vector用法詳解C++
- Linux 資料重定向Linux
- Selenium用法詳解 -- selenium八大定位詳解
- Object.defineProperty的用法詳解Object
- Git tag標籤用法詳解Git
- 網路命令ifconfig用法詳解。
- java中printf中用法詳解Java
- AngularJS select中ngOptions用法詳解AngularJSGo
- Flutter之Row/Column用法詳解Flutter
- 敲黑板:滴滴雲線上技術沙龍課堂筆記來咯|附PPT資料筆記
- linux20個常用命令詳解和用法 linux常用命令大全介紹Linux