Linux輸入,輸出的重定向以及管道


系列文章目錄

第一章 :red hat linux系統下載安裝
第二章:Linux用戶和組
第三章:Linux文件管理
第四章:Linux目錄管理
第五章:Linux文本編輯器
第六章:Linux文件查找與管理
第七章:Linux輸入,輸出的重定向以及管道


@


前言

這一次博客內容主要講解Linux的輸入、輸出和重定向以及管道的操作,照例是以實驗為主,操作開始前記得抓一張快照。


一、標准輸入和標准輸出

這個不重要簡單提一下就行了,標准輸入設備常用的有鍵盤,從鍵盤輸入數據就可以叫做標准輸入,標准輸出同理就是屏幕的顯示。

二、重定向

1.輸出重定向

Linux一般的命令結果都輸出在命令行中,我們無法進行修改或者查找等操作,所以要用到重定向
1.重定向符號 >

cat /etc/passwd >/home/chaoge/chao

查看/etc/passwd 並將結構輸出到/home/chaoge/chao文件下
在這里插入圖片描述
咱們可以看到,結果並沒有正常的從屏幕輸出,而是被重定向到相應的文件里。
>重定向為強制覆蓋
在這里插入圖片描述
df -Th為查看磁盤情況,不重要。咱們只看他結果就可以,可以發現之前重定向的內容消失了。
2.追加重定向符>>

在這里插入圖片描述
echo 為最簡單的保准輸出,咱們現在查看重定向結果
在這里插入圖片描述
可以看到內容追加到末尾,這個一般可以用於日志記錄的收集。
3.錯誤重定向符號2>/2>>
前面的重定向都是基於前部分命令是正確的重定向,現在咱們嘗試命令錯誤的重定向。
在這里插入圖片描述
咱們可以看到命令錯誤時,錯誤信息依舊輸出在屏幕上,我們希望將錯誤信息也重定向。

asdwad 2>/home/chaoge/chao

在這里插入圖片描述
追加一個道理,不說了。
4.分離重定向
如果輸出信息中有錯的也有對的怎么辦。
例如普通用戶查找/tmp目錄
在這里插入圖片描述
可以看到一部分結果正常,一部分因為權限不夠發生錯誤。

find /tmp/ >yes 2>no

分離,將對的重定向到yes中,錯的定向到no中
在這里插入圖片描述
在這里插入圖片描述
5.強制重定向&>
我也不管對錯全部定向到同一個文件

find /tmp/ &>all

在這里插入圖片描述
看以看到所有結果都被重定向到了同一個文件。

2.輸入重定向

就是把符號方向變一下<,意思基本一樣,這個用的比較少。博主也沒有找到合適的例子,簡單說一下吧。
這個博主覺得可以對比python的使用,python分為文件式和交互式,交互式就和Linux一樣一行一行輸命令,但命令比較多就寫一個文件然后運行。相當於把保准輸入命令一行一行重定向到交互式中。

三、管道

管道符號用一個 | 來表示,兩邊分別兩條命令,管道可以將左邊命令的結果集作為參數送給右邊的命令,理論比較抽象,依舊以實驗為例。

cat /etc/passwd | grep root

這兩條命令都說過,簡單過一下。
左邊:查看/etc/passwd
右邊:在文件中查看含有root的行
在這里插入圖片描述
整行命令的意思就是,先查看文件,得到內容,然后在得到的內容里查找含有root的行。

在做一個簡單的實驗,也是實際生產中會用要的,提取文件中的運行代碼
以/boot/grub2/grub.cfg為例,現在展示出這個文件的部分代碼
在這里插入圖片描述
很明顯這個文件中有很多注釋以及空行,在程序運行的時候這些是不參與運行的,現在要求咱們用管道提取參與運行的代碼。
為例讓效果比較明顯咱們,先統計一下源代碼的代碼量
在這里插入圖片描述
wc-l可直接統計行數。
現在開始一步一步過濾,首先是含#的注釋不參與運行,因為grep是支持正則表達式的,這就很簡單了
先查找到所有#

cat /boot/grub2/grub.cfg | grep ^#

在這里插入圖片描述
很容易找到含有#的行,grep有個-v可以用來取反

cat /boot/grub2/grub.cfg | grep -v ^#

在這里插入圖片描述
很明顯所有#都消失了,下一步去掉空行,依舊可以使用正則表達式^$,然后在取反即可

cat /boot/grub2/grub.cfg | grep -v ^# |grep -v ^$

這里由於#在Markdown有特殊含義,看起來不太正常,可以仔細看一下截圖
在這里插入圖片描述
可以看到所有空行都消失。
咱們在看一下實際參與運行的行數
在這里插入圖片描述
可以看到,少了小一半呢。
這里還可以和重定向繼續結合,將提取到的文件輸出到文件

cat /boot/grub2/grub.cfg | grep -v ^# |grep -v ^$ >/grub

在這里插入圖片描述

總結

這次博客內容基本就到這里,管道的應用在Linux中非常靈活,還是那個原則,沒事找例子多練練你就啥都會了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM