1. 程式人生 > >朗科實習期間心得筆記(八)

朗科實習期間心得筆記(八)

網絡 基礎 運維


其他的文本處理命令:

wc命令

cut命令
在文件的每一行中提取片斷
註意:能夠被cut命令修剪的文本文件或數據內容,一般是具有某種特定格式或結構的文本文件或數據內容;如:/etc/passwd
cut [OPTION]... [FILE]...
常用選項
-d:指定在實施修剪操作時所使用的字段分隔符號,默認是TAB(空白字符);
-f:根據我們指定的字段分隔符號來指定要保留的字段編號的列表;
LIST稱為字段列表,地址定界,其書寫方法:
1.NUM:選擇被指定的單個數字所表示的字段,該字段將被保留;
2.NUM1,NUM2,NUM3,...:離散的多個被指定的字段的數字列表;所有數值所代表的字段均被保留;

3.NUM1-NUM2:連續的多個被指定的字段的數字的列表;所有數值所代表的字段均被保留;
NUM1-:從NUM1開始到結束的所有字段
-NUM2:從行首開始直到NUM2結束;
--output-delimiter:指定輸出數據時的字段分隔符號;


awk命令
pattern scanning and processing language
常用選項:
-F:指定字段分隔符,默認是空白字符;

對於awk,根據字段分隔符切分出來的各字段,分別使用$1,$2...$NF來進行標識;$1,$2...$NF是awk的內建變量;
格式:awk|gawk [options]...‘/PATTERN/{print $1,$2}‘



sort命令
sort - 對指定文件中的行,按照ASCII編碼表中的字符順序來排序輸出;
sort [OPTION]... [FILE]..
常用選項:
-n:根據數值大小進行排序
-r:倒敘顯示排序結果
-R:隨機排序;只是此次隨機排序算法非常簡陋,不適用復雜環境;
-u:重復出現的行,只出現一次;去重的作用;(連續且相同的行稱為重復行)
-t:指定字段分隔符;
-k:指定根據哪個關鍵字字段進行排序,一般和-t同時使用;


uniq命令
刪除排序文件中的重復行
註意:uniq命令本身不具備排序的功能;
格式:uniq [OPTION]... [INPUT [OUTPUT]]
常用選項:
-c:對於重復的行計算重復次數;
-d:只顯示重復的行,且每個重復行組只顯示一行;
-u:只顯示不重復的行;



diff命令
逐行比較文件內容
格式:diff [選項] 源文件 目標文件


制作補丁(patch)文件:
# diff file1 file2 > patch_file
註意:patch_file中記錄的是file2的內容和file1文件相比有哪些不同內容;
使用patch_file時應向file1打補丁;




patch命令
apply changes to files
格式:patch [-blNR][ -c| -e| -n][-d dir][-D define][-i patchfile]
[-o outfile][-p num][-r rejectfile][file]
-i patchfile:用於指明patch文件的路徑;



例子:
12 314 56 89
191 492 9 80
76 11 87 66
1024 99 721 384

從上述數字中找出最大值和最小值;
最大值:
~]# cat number.txt | tr ‘ ‘ ‘\n‘ | sort -n | tail -1
最小值:
~]# cat number.txt | tr ‘ ‘ ‘\n‘ | sort -n | head -1

條件測試命令:

test命令 == [命令,bash的內建命令;
格式: test expression 或 [ expression ]
[[:bash的關鍵字,一般僅用於某些特定結構或者格式之中;

註意:此類條件測試命令一般沒有執行結果,僅有執行狀態返回值;如果返回值為0,說明執行成功,如果執行狀態返回值為1,則表示執行錯誤;

條件測試命令共有三類條件測試表達式:
1.數值測試:雙目操作;
測試操作符:
-eq:測試兩個數值是否相等;相等為真,不等為假;
-ne:測試兩個數值是否不等;不等為真,相等為假;
-lt:小於,測試左邊的數值是否小於右邊的數值;小於為真,不小於為假;
-gt:大於,測試左邊的數值是否大於右邊的數值;大於為真,不大於為假;
-le:小於等於,測試左邊的數值是否小於等於右邊數值;符合為真,不符合為假;
-ge:大於等於,測試左邊的數值是否大於等於右邊數值;符合為真,不符合為假
註意:bash僅支持整數,不支持浮點數;

2.字符串測試:
雙目測試:
==|=:測試兩個字符串是否為相同字符串;相同為真,不同為假;
!=:測試兩個字符串是否為不同字符串;不同為真,相同為假;
>:測試左邊的字符串所對應的ASCII編碼是否比右邊的字符串對應的ASCII編碼大;符合為真,不符合為假;
<:測試左邊的字符串所對應的ASCII編碼是否比右邊的字符串對應的ASCII編碼小;符合為真,不符合為假;
STRING =~ PATTERN:測試左側的字符串能否被右邊的PATTERN所匹配;可以為真,不能為假;

註意:>,<,=~這三類測試操作符只能用在[[ expression ]]測試語句中;
單目測試:
-z ‘STRING‘:測試STRING是否為空串;空為真,不空為假;
-n ‘STRING‘:測試STRING是否為非空串;不空為真,空為假;


註意:1.通常情況下,字符串是需要用引號引用的,單引號或雙引號都可以;只有在特定的情況下,只能選擇單引號或雙引號;
2.[]和[[]]在某些情況下,意義不完全相同,需要區分對待;
3.如果使用[]或[[]]進行條件判斷,在表達式的兩端都要留有空白字符,以區分命令和參數之間的關系;
4.所有的雙目測試操作符和參數之間也要留有空白字符;


文件測試:
單目測試:
-a|-e FILE:測試文件是否存在,存在為真,不存在為假;
-b FILE:測試文件是否存在且為塊設備文件;存在且為塊設備為真,否則為假;
-c FILE:測試文件是否存在且是否為字符設備;符合為真,不符合為假;
-d FILE:測試文件是否存在且為目錄文件;符合為真,不符合為假;
-f FILE:測試文件是否存在且為普通文件;符合為真,不符合為假;
-h|-L FILE:測試文件是否存在且為符號連接文件;符合為真,不符合為假;
-s FILE:測試文件是否存在且為是否不是空文件;存在且不是空文件為真,否則為假;
-S FILE:測試文件是否存在且為套接字文件;符合為真,不符合為假;
-t FD:測試文件描述符是否在終端上被打開;被打開為真,否則為假;
-r FILE:測試文件是否存在且當前用戶是否被授予讀取權限;存在且授權為真,否則為假;
-w FILE:測試文件是否存在且當前用戶是否被授予寫權限;存在且授權為真,否則為假;
-x FILE:測試文件是否存在且當前用戶是否被授予執行權限;存在且授權為真,否則為假;


文件特殊權限標識測試:
-u FILE:測試文件是否存在且設置了SUID;存在且授權為真,否則為假;
-g FILE:測試文件是否存在且設置了GUID,存在且授權為真,否則為假;
-k FILE:測試文件是否存在且設置了STICKY,存在且授權為真,否則為假;


文件的所有權測試:
-O FILE:測試文件是否存在且屬主為當前有效用戶;存在且屬主為當前有效用戶為真,否則為假;
-G FILE:測試文件是否存在且屬組是否為當前有效用戶的所在組;存在且屬組為當前有效用戶的所在組為真,否則為假;


雙目測試:
FILE1 -ef FILE2:測試兩個文件是否擁有相同的Inode編號;即:兩個文件是否互為硬連接;

測試語句中添加邏輯運算符號:
1.利用bash的邏輯運算符號
[ expression1 ] && [ expression2 ]
[ expression1 ] || [ expression2 ]
![ expression1 ]
2.利用條件測試本身的邏輯運算符號
[ expression1 -a expression2 ]
[ expression1 -o expression2 ]
[ !expression1 ]



命令的執行結果:
1.命令的正常輸出結果
2.命令的執行狀態返回值:
0-255
0:表示命令成功執行或條件判斷為真;
1-255:表示命令執行失敗或條件判斷為假;
1,2,127:系統默認保留的;
3-126,128-255:用戶自定義的狀態返回值;


exit命令
exit the shell
格式:exit [n]
退出shell時可以使用n作為狀態返回值;如果沒有指定n,則默認的狀態返回值為最後一條命令的狀態返回值;

註意:當shell腳本運行時,一旦遇到exit命令將立即結束運行此腳本的shell進程;同時此腳本的運行也會停止;其後續的所有命令都不會再被解釋執行;因此,包含了exit命令的腳本,不要使用source命令來執行;




bash的顏色顯示規則:
調用了ASCII編碼對於顏色的設置方案:

Ctrl鍵:\033
[:控制字符和顏色代碼之間的分隔符;
所有的顏色代碼都應該是用m結尾;

顏色代碼:
0:關閉顏色顯示屬性,恢復為黑白色;
1:加粗顯示文本字符;
4:為文本字符添加下劃線標識;
5:使文本字符閃爍;
7:將文本字符的背景顏色和前景顏色交換;
8.將文本字符的背景顏色設置為與前景色相同;

30-39:設置文本字符的前景色,38,39為保留,暫時未被使用;
40-49:設置文本字符的背景色,48,49為保留,暫時未被使用;

註意:此類控制字符和顏色代碼必須放置在echo -e 模式中顯示才有效;


程序的組成部分:
一個完整的應用程序,一般包括四類文件:
二進制文件:
頭文件和庫文件:
幫助文件:
配置文件:


bash--CLI中的一種:

bash同樣屬於一種完整的應用程序,上述四類文件,bash都有;
二進制文件:/bin/bash
頭文件和庫文件:/usr/include /lib64/*.so
幫助文件:/usr/share/man/man1/bash.1.gz
配置文件:三類
1.profile:為交互式登陸的shell進程實現功能初始化的配置文件;
2.bashrc:為非交互式登陸的shell進程實現功能啟動配置的配置文件;
3.logout:為交互式登陸的shell進程提供終極及清理類功能的配置文件;


bash的類型:
1.交互式登陸的bash
1)直接通過某個終端輸入賬戶信息和密碼之後打開的bash進程;
2)su - 或 -l USERNAME 執行切換登錄打開的bash進程;

配置文件的加載順序:
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

2.非交互式登陸的bash
1)在圖形界面下,通過菜單項或右鍵菜單打開的終端所啟動的bash進程;
2)使用su USERNAME 執行切換登陸所打開的bash進程;

配置文件的加載順序:
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh


bash配置文件:
profile類:
1.全局配合文件:/etc/profile,/etc/profile.d/*.sh
註意:在 redhat 或centos 系列的發行版操作系統中,通常會存在這樣情況:如果一個配置文件的內容很多,格式很復雜,將會嘗試將此配置文件切割拆分為多個片段配置文件,往往把最核心和主要的配置留在主配置文件中,將一些附屬的或者擴展的配置內容分散存放到各個片段配置文件中;而被切分出來的片段配置文件一般會統一保存在“程序名稱.d”命名格式的目錄中;而我們約定在這類目錄中保存的片段配置文件的後綴名稱會是統一的字符串;
2.個人配置文件
~/.bash_profile


profile類配置文件的作用:
1.用於定義用戶的環境變量:
2.用於運行腳本或者執行某些特殊的命令;


bashrc類:
全局配置文件:/etc/bashrc
個人配置文件:~/.bashrc
bashrc類配置文件作用:
1.用於定義本地變量
2.用於定義命令別名
3.用於定義umask


註意:只有root用戶能夠修改全局類的bash配置文件,普通用戶只能修改其家目錄中屬於個人的配置文件;



為什麽要為bash使用配置文件?
所有利用bash命令行完成的命令操作,只要沒有涉及到文件修改的,一般都只是針對當前的shell生效,一旦shell進程結束,則此前所有的操作將失效;

配置文件的作用:
1.能夠使用戶賴以生存的配置信息長期有效
2.能夠讓用戶保存此前的配置內容;

讓配置文件中新進修改的內容生效:
1.註銷重新登陸,打開新的shell進程
2.source命令
3.exec命令



logout類:
個人配置文件:
~/bash_logout

作用:在關閉shell進程之前清除某些用戶自定義的配置或者是刪除某些臨時文件或目錄,以及撤銷用戶此前定義的變量,清理某些可能會引發安全問題的隱患等操作;





bash的變量中存放的字符串的處理方式:
bash變量:
弱變量:
1.無需事先定義即可應用
2.變量沒有數據類型的硬性要求,默認是字符型;


1.字符串切片:
${#VAR}:返回字符類型變量的變量值的長度(單位:字節)
${VAR:offset}:返回字符型變量中第“offset”位置之後的內容;不包括第offset個位置的字符;offset取值範圍為0-$[{#VAR}-1]
${VAR:offset:NUMBER}:返回字符型變量中從第“offset”個字符後開始長度為number的字符部分;
${VAR: -length}:取字符型變量字符串最右側的“length”個字符;(在length前要留有空格)

2.基於模式(PATTERN)取字符串
${VAR#*PATTERN}:自左而右,查找VAR變量所儲存的字符串中,第一次被PATTERN匹配的字符,刪除從字符串開始到第一個PATTERN匹配的字符之間的所有字符;
${VAR##*PATTERN}:自左而右,查找VAR變量所儲存的字符串中,所有被PATTERN匹配的字符,刪除從字符串開始到最後一個PATTERN匹配的字符之間的所有字符;
${VAR%PATTERN*}:自右向左,查找VAR變量所儲存的字符串中,第一次被PATTERN匹配到的字符,刪除從字符串結尾到第一個被PATTERN匹配的字符之間的所有字符;
${VAR%%PATTERN*}:自右向左,查找VAR變量所儲存的字符串中,所有被PATTERN匹配到的字符,刪除從字符串結尾到最後一個被PATTERN匹配的字符之間的所有字符;

3.查找替換
${VAR/PATTERN/SUBSTRING}:自左向右,在VAR變量中,查找能夠被PATTERN匹配的內容,將其中第一個匹配到的結果更換成substring;
${VAR//PATTERN/SUBSTRING}:自左向右,在VAR變量中,查找能夠被PATTERN匹配的內容,將其中所有匹配到的結果更換成substring;
${VAR/#PATTERN/SUBSTRING}:在VAR變量中查找行首匹配PATTERN的內容,將匹配的結果更換成SUBSTRING;
${VAR/%PATTERN/SUBSTRING}:在VAR變量中查找行尾匹配PATTERN的內容,將匹配的結果更換成SUBSTRING;

4.查找刪除
${VAR/PATTERN}:自左向右,在VAR變量中,查找能夠被PATTERN匹配的內容,將其中第一個匹配到的結果刪除;
${VAR//PATTERN}:自左向右,在VAR變量中,查找能夠被PATTERN匹配的內容,將其中所有匹配到的結果刪除;
${VAR/#PATTERN}:在VAR變量中查找行首匹配PATTERN的內容,將匹配的結果刪除;
${VAR/%PATTERN}:在VAR變量中查找行尾匹配PATTERN的內容,將匹配的結果刪除;

5.字符串的大小寫轉換:
${VAR^^}:將變量當中的所有的小寫字母轉換成大寫字母;
${VAR,,}:將變量當中的所有的大寫字母轉換成小寫字母;

6.變量賦值操作:
${VAR:-value}:如果變量VAR為空值或者變量未被定義,那麽直接返回value中的值;否則返回變量VAR的值;
${VAR:+value}:如果變量VAR不為空值或者變量已被定義,那麽直接返回value中的值;
${VAR:=value}:如果變量VAR為空值或者變量未被定義,那麽直接返回value中的值;並且將value的值賦給變量VAR,否則返回變量VAR的值;

7.變量的間接引用
如果第一個變量的值恰好是第二個變量的變量名,從第一個變量引用第二個變量的值的方法,稱為變量的間接引用;

bash提供了這樣的間接變量引用的方法:
eval MYVAR=\$$VAR1

朗科實習期間心得筆記(八)