系列文章目錄
第一章 :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中非常靈活,還是那個原則,沒事找例子多練練你就啥都會了。