導入知識
1.指令:基本的計算機操作。例如:加法,減法等
2.程式:指令的集合,一般有執行屬性,看作:菜單
3.程序:是程式的執行個體,是程式執行的過程,看作:按照菜單進行做菜的過程
4.檢視程序 使用ps -ef指令
5.Cat的工作原理:接受輸入,然後完整輸出,輸入什麼内容,cat就會輸出什麼内容
重定向
輸入輸出重定向
标準輸入(stdin)和标準輸出(stdout)
2.互動式硬體裝置
标準輸入:從該裝置接收使用者輸入的資料
标準輸出:通過該裝置向使用者輸出資料
标準錯誤:通過該裝置報告執行出錯資訊
下列的裝置檔案,檔案描述符和預設裝置是互相對應的關系,是不變的
注:1). 檔案描述符:是一個整數,用來描述一個程序打開檔案,每個程序都有每個程序的檔案描述符。
2).用ulimit -a檢視每個程序最多可以打開多少個檔案 看這行:open files (-n) 1024這是預設值,這個值可以修改:修改截圖如下
3).系統級别,最多可以打開多少檔案?
這個值可以修改:修改截圖如下
3.标準輸入和輸出
改變标準輸入、标準輸出的方向就是重定向
4.标準錯誤:通過該裝置報告執行出錯資訊
重定向标準輸出到檔案
例如:ls > /tmp/f1 将ls的内容不再螢幕上輸出轉交到/tnp/f1 下(正确輸出)
重定向标準輸出和标準錯誤到不同檔案
例如:将正确輸出輸入到f1檔案: 錯誤輸出輸入到f2檔案
重定向标準輸出和标準錯誤到同一個檔案
例如:将标準輸出和标準錯誤到f1檔案(注:沒有a2 檔案,有a.txt檔案)
1.
2.
補充:快速清空檔案内容 >yang 将yang裡面的内容清空
追加内容
兩個特殊檔案
/dev/null:過濾标準錯誤資訊(黑洞檔案)用來屏蔽輸出
/dev/zero:用來建立指定長度文,産生0
管道及相關配套指令
1.指令echo
用途:在螢幕上顯示一段文字或指定内容。
格式:echo [-n] 字元串 -n沒有換行
補充:\的作用:
1):指令行的續行
2):轉義,将特殊符号的特殊功能的去掉,隻表示特殊符号本身
補充:指令echo的其他指令格式詳見本人部落格Linux中echo指令彙總
2.資料過濾
grep資料提取程式
用途:在檔案中查找并顯示包含指定字元串的行
格式:grep [選項]… 模式 目标檔案
-i:查找時忽略大小寫
-v:反轉查找,輸出與模式不相符的行
-w:按整字查找
-n:顯示符合模式要求的行号
-r:遞歸搜尋所有檔案
.* 表示任意數量的任意字元
模式
^….:以什麼開頭
……KaTeX parse error: Expected group after '^' at position 8: :以什麼結尾 ^̲:表示空行
注:該指令行表示去掉/etc/fstab裡以#開頭的行和空行以後輸出
3.管道 (管道是程序之間進行通信的一種方法)
管道操作符号“|”
連接配接左右兩個指令,将左側的指令的标準輸出,作為右側指令的标準輸入
格式:cmd1 | cmd2 [… | cmdn]
head -5 /etc/passwd | tail -1
檢視/etc/passwd的前五行并輸出檢視倒數第一行
使用管道的前提:
1)左邊的指令要有标準輸出
2)右邊的要支援标準輸入
用grep 過濾輸出
ls –l /etc | grep pass(grep支援标準輸入也支援标準輸出)
檢視etc并将含有pass的行過濾輸出
管道和标準錯誤
find /etc –name “p*” | grep passwd (把passwd輸出)
找etc目錄下含有p的行并将含有passwd的行過濾輸出
find /etc –name “p*” | grep passwd > /tmp/aa
找etc目錄下含有p的行并将含有passwd的行過濾輸出并标準輸出到/tmp/aa
find /etc –name “p*” | grep passwd 2> /tmp/aa
find /etc –name “p*” | grep passwd &> /tmp/aa
find /etc –name “p*” 2>/dev/null | grep passwd(将錯誤輸出屏蔽,将正确輸出過濾給paawd)
4.指令xargs
用途:将參數清單轉換小塊分段傳遞給後邊指令,将前邊的标準輸出轉換為參數給後面的指令
讀入stdin的資料轉換為參數添加到指令行中
讓一些不支援管道的指令可以使用管道
5.指令seq
用途:列印出一串有序的數字(預設從一開始)
格式:seq [選項] 數字範圍
中間有步長,目前步長為一,遞減的話,步長設定為-1
-s:指定分隔符
補充:bc指令具有計算功能,可以利用seq和bc進行計算
-w:指定同等寬度
6.指令tr
字元轉換工具
不能直接對檔案操作
使用tr轉換字元
tr SET1 SET2(數量要一緻。一一轉換)
用SET2中的字元替換掉SET1中同一位置的字元
echo 123456 | tr 345 abc(将3轉換a ,4轉化為,5為c)
tr 123 abc < aa
tr ‘[a-z]’ ‘[A-Z]’ < /etc/hosts
使用tr删除字元
tr -d SET
删除與SET相同的字元
echo 123456 | tr -d 345 (将3,4,5删除)
tr -d '[0-9]’ < /etc/hosts
将etc/hosts裡的0到9的數字删除
echo “Tom, I hear a pig!” | tr -d ‘[a-z]’(删除小寫字母)
使用tr壓縮字元,替換字元
tr -s SET
将連續相同的字元壓縮成一個字元
echo 112233444555666 | tr -s 345
輸出結果為:1122345666
tr -s SET1 SET2
先替換為SET2再壓縮
echo 112233444555666 | tr -s 345 abc
echo 112233444555666 | tr 345 abc | tr -s abc
7.指令sort
預設按每行的第一個字元排序
-n:按整數進行排序
-r:遞減排序
指定排序鍵
指定按哪一列資料進行排序
-k:指定哪一列為排序鍵
Cat tt | sort -n -k4
指定字段分隔符
-t:指定字段分割符(預設是空格)
例如: sort -k3 -t: -n /etc/passwd(将passwd檔案裡的第三個字段整數排序以:為分隔符)
8.指令unip
删除經過排序後的資料的重複記錄
通常和sort連用
資料的執行個體統計
-c:顯示檔案中每行連續出現的次數
cat tt | uniq -c
-u:隻顯示不重複的行
cat tt | uniq –u
-d:隻顯示重複的行
cat tt | uniq -d
資料提取及過濾
1.指令cut
從文本檔案或者文本流中提取文本列
cut -選項 提取範圍 文本檔案
常見選項
-c:從指定提取範圍中提取字元
-f:從指定提取範圍中提取字段
提取範圍
n:第n項
n-:第n項到行尾
-m:行首到第m項
n,m:第n項和第m項
n-m:第n項到第m項
2.指令cut -c
ls -l | cut -c 10(提取每一行的第十個字元)
who | cut -c 20-40
cut -c -10 /etc/passwd(提取每一行的第一個到第十個字元)
3.指令cut -f
-d:指定分隔符預設是Tab
cut -d “:” -f 1,7 /etc/passwd (在這個檔案以:為分隔符提取第一個和第七個字段)
who | cut -d ‘ ’ -f1,6
4.指令wc(字數統計)
格式:wc [選項]… 目标檔案…
-l:統計行數
-w:統計字數 (前後都是空白的一組字元)
-c:統計字元數(可見和不可見的字元)
檔案差異對比
-
指令diff
比較兩個檔案之間的差異
輸出結果為兩個檔案的不同之處
會将不同之處 列舉出來