大家好,我是良許。 相信大家平時都會有需要複製粘貼數據的時候,如果是打開文件進行複製粘貼,就不可避免的需要較多的滑鼠與鍵盤的操作,就會比較繁瑣。那麼有沒有可以省掉這些繁瑣操作的複製粘貼的方法呢? 答案是肯定的,那就是重定向。重定向是一種高效的方法,無需大量的滑鼠與鍵盤操作就可以完成數據的轉移。重定向 ...
大家好,我是良許。
相信大家平時都會有需要複製粘貼數據的時候,如果是打開文件進行複製粘貼,就不可避免的需要較多的滑鼠與鍵盤的操作,就會比較繁瑣。那麼有沒有可以省掉這些繁瑣操作的複製粘貼的方法呢?
答案是肯定的,那就是重定向。重定向是一種高效的方法,無需大量的滑鼠與鍵盤操作就可以完成數據的轉移。重定向可以分為輸入重定向以及輸出重定向這兩種類型。由於所有程式都有輸入或者輸出,因此輸入和輸出的重定向是任何編程語言或腳本語言都自帶的功能。
每當你與電腦交互時,重定向就必然會發生。學會使用重定向,不僅可以讓你與電腦更好地交互,還可以提高你的工作效率,因此,請讓良許為你講解 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 中,重定向是轉移數據的一種高效方法。你可能並不會總是使用重定向,但是學會如何使用重定向,在你需要的時候可以讓你省掉許多不必要的複製粘貼操作,因此也節省了許多操作滑鼠與鍵盤的時間。請不要執著於複製粘貼了,使用重定向可以提高你的工作效率,難道,它不香嗎?
最後,希望本文的內容對你的工作有所幫助,如果你還對 Linux 系統中的重定向有疑問,請留言告訴我唄!
公眾號:良許Linux