Linux重定向用法詳解

来源:https://www.cnblogs.com/yychuyu/archive/2020/07/27/13387637.html
-Advertisement-
Play Games

大家好,我是良許。 相信大家平時都會有需要複製粘貼數據的時候,如果是打開文件進行複製粘貼,就不可避免的需要較多的滑鼠與鍵盤的操作,就會比較繁瑣。那麼有沒有可以省掉這些繁瑣操作的複製粘貼的方法呢? 答案是肯定的,那就是重定向。重定向是一種高效的方法,無需大量的滑鼠與鍵盤操作就可以完成數據的轉移。重定向 ...


大家好,我是良許。

相信大家平時都會有需要複製粘貼數據的時候,如果是打開文件進行複製粘貼,就不可避免的需要較多的滑鼠與鍵盤的操作,就會比較繁瑣。那麼有沒有可以省掉這些繁瑣操作的複製粘貼的方法呢?

答案是肯定的,那就是重定向。重定向是一種高效的方法,無需大量的滑鼠與鍵盤操作就可以完成數據的轉移。重定向可以分為輸入重定向以及輸出重定向這兩種類型。由於所有程式都有輸入或者輸出,因此輸入和輸出的重定向是任何編程語言或腳本語言都自帶的功能。

每當你與電腦交互時,重定向就必然會發生。學會使用重定向,不僅可以讓你與電腦更好地交互,還可以提高你的工作效率,因此,請讓良許為你講解 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

有收穫?希望老鐵們來個三連擊,給更多的人看到這篇文章


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Debug LinkedList源碼 前置知識 LinkedList基於鏈表,LinkedList的Node節點定義 成員變數 //鏈表中元素的數量 transient int size = 0; /** * 鏈表的頭節點:用於遍歷 */ transient Node<E> first; /** * ...
  • 1 int StringSearch(char str[], char strSearch[]) 2 { 3 int i = -1; 4 while (str[i]) 5 { 6 char c = strSearch[0];//鎖定查找字元的第1位置 7 if (str[i] != c)//判斷查找 ...
  • 學習就是為了不斷的看到自己的知識盲點,然後改正,以前知道如何使用break來跳出迴圈,突然學習到可以用break跳出外部的迴圈(以前只知道怎麼調本次的迴圈)。 上正題代碼如下: break跳出本次迴圈: public static void main(String[] args) { for (in ...
  • 功能介紹 客戶端給所有線上用戶發送消息 客戶端給指定線上用戶發送消息 伺服器給客戶端發送消息(輪詢方式) 註意:socket只是實現一些簡單的功能,具體的還需根據自身情況,代碼稍微改造下 項目搭建 項目結構圖 pom.xml <?xml version="1.0" encoding="UTF-8"? ...
  • 本文源碼:GitHub·點這裡 || GitEE·點這裡 一、分支語句 流程式控制制語句對任何一門編程語言都是非常重要的,Java中基於流程式控制製程序執行的不同步驟和代碼塊。 1、IF條件 IF條件語句會根據不同的判斷條件執行不同的語句,if後括弧內的條件是否成立關鍵步驟,IF條件的判斷結果必然要是tru ...
  • 在上篇文章中,我為構建自定義端點可視化圖奠定了基礎,正如我在第一篇文章中展示的那樣。該圖顯示了端點路由的不同部分:文字值,參數,動詞約束和產生結果的端點: 在本文中,我將展示如何通過創建一個自定義的DfaGraphWriter來為自己的應用程式創建一個端點圖。 這篇文章使用了本系列前幾篇文章中的技巧 ...
  • 最近用戶反映一些電腦啟動程式就崩潰,還給演示了一個比較詭異的問題 “把軟體重新拷貝到另外一個目錄,就能正常運行"。還說過一段時間又不能運行需要在換個位置。 ’由於當時沒有設置全局異常,只能藉助系統操作日誌來分析, 系統日誌記錄不全,就說發生一個異常程式掛掉。 就簡單加上全局異常捕獲。 public ...
  • Kubernetes K8S 概述、特性與架構說明,以及核心技術概念和API對象詳解 ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...