噗。。為啥不是面試題了,封面船去哪里了?要開好船,先回到我們的初心---Linux,這篇文章是Linux的超級基礎且經(jīng)常用到的內(nèi)容,不多說,直接肝!可以直接拉到文末點個贊!當然,如果需要思維導圖可編輯版,私信我就好了。
一 Linux通用知識
說到操作系統(tǒng),如果讀大學的時候是計算機專業(yè),那肯定就會上這門課,我猜測當時的你們想法是這樣的
上大學使用的都是Windows系統(tǒng),界面友好,上手快,習慣性的點點點操作
大部分的課程在windows中操作,比如C++用的Vistual Studio,學數(shù)據(jù)庫的SQL Server
大學中的操作系統(tǒng)更加偏向理論研究,至于到底是怎么運作的可能懵懵懂懂
知道上了研究生到了實驗室,我發(fā)現(xiàn)實驗室的怎么都是對著一個窗口操作,瞬間覺得以前的計算機知識白學了,于是開啟了Linux之路。
其實大部分的系統(tǒng),團購,打車,快遞都部署在服務端,其中都包含Linux,什么云計算,虛擬化,大數(shù)據(jù)等也是基于Linux,那為啥在大學里都是windows?
為什么說了解Linux的生態(tài),會讓你學到更多的新技術?
我們要知道很多的大牛通過Linux來開發(fā)各種如那件,數(shù)據(jù)庫Mysql,kafka,Spark等技術都會默認提供Linux的安裝運維手冊,所以盡快的進入Linux的世界對于個人的進步和職業(yè)發(fā)展都是非常有好處的
每當我們買了手機,買了電腦,上手就可以用,這是因為預裝了操作系統(tǒng)。所以呀,那有什么歲月靜好,知識有人幫我們負重前行了,操作系統(tǒng)就是這樣一個角色。
那么操作系統(tǒng)幫助我們做了哪些事兒呢?
跑幾個問題,桌面上的圖標是什么,為啥子敲一下鍵盤就出來了畫面
電腦咋個知道我們鼠標點擊的那個位置
為什么我一回車,這些字符就飛出去了
這幾個任何一個操作,基本上都覆蓋了操作系統(tǒng)的所有功能,那我來認識熟悉而默認的操作系統(tǒng)
1 vmvare
虛擬機是什么?
虛擬機通過軟件來模擬具有完整硬件系統(tǒng)功能的,運行在完全隔離的完整計算機系統(tǒng)。每個虛擬計算機可以獨立運行并安裝各種軟件和應用
首先從官方下載并解壓虛擬機安裝包,然后雙擊運行
下一步
選擇安裝位置,最好不要出現(xiàn)中文
設置用戶體驗選項,都可以選擇
在桌面和開始菜單程序文件夾創(chuàng)建快捷方式。
百度一個許可證ZG1WH-ATY96-H80QP-X7PEX-Y30V4
打開vmvare
點擊新建虛擬機向?qū)?選擇文件-新建虛擬機打開
選擇自定義 下一步
下一步
安裝客戶機操作系統(tǒng),選擇稍后安裝操作系統(tǒng)
命名虛擬機 更改虛擬機名稱并選擇安裝得位置
更改主機配置進行處理的分配
虛擬內(nèi)存分配:注意內(nèi)存分配不能大于主機內(nèi)存
設置虛擬機網(wǎng)絡得類型,這里選擇NAT
IO控制器選擇,選擇LSILogic
磁盤類型選擇SCSI即可
創(chuàng)建磁盤選擇創(chuàng)建新虛擬磁盤
指定磁盤文件
修改路徑
選擇自定義硬件
選擇centos得ISO鏡像文件,先選擇CDDVN---ISO鏡像文件---瀏覽找到鏡像、
點擊完成
開啟虛擬機 選擇配置好的虛擬機
鼠標移動到虛擬機內(nèi)部,上下鍵選擇install centos7然后回車
選擇軟件選擇最小安裝,選擇語言
軟件安裝
選擇計算節(jié)點
開始安裝
設置root密碼,點擊完成配置
2 進行網(wǎng)絡配置
現(xiàn)在我們的centos還是個空殼子,如果我們需要訪問外網(wǎng),則需要進一步配置一波
打開配置文件
#vi?/etc/sysconfig/network-scripts/ifcfg-eth0
更改相應的配置
DEVICE=eth0?#設備名稱,可根據(jù)ifcofnig命令查看到。
BOOTPROTO=dhcp?#連接方式,dhcp會自動分配地址,此時不需要在下面設置ip和網(wǎng)關
HWADDR=00:0C:29:AD:66:9F #硬件地址,可根據(jù)ifcofnig命令查看到。
ONBOOT=yes?#yes表示啟動就執(zhí)行該配置,需要改為yes
service restart network完事 ping www.baidu.com
3 安裝xshell
我們已經(jīng)完成了安裝vmvare并導入了centos,那么我們?nèi)绾稳ネ鎯哼@個看似很牛皮的玩意?直接上手?不習慣吧,那我們用個遠程工具連連
Xshell 是一個強大的安全終端模擬軟件,Xshell 可以在 Windows 界面下用來訪問遠端不同系統(tǒng)下的服務器,從而比較好的達到遠程控制終端的目的。除此之外,其還有豐富的外觀配色方案以及樣式選擇。
下載xshell(別去下了,賊慢麻煩)
鏈接測試(因為使用的ssh,那么確保centos中22端口已經(jīng)打開了)
文件-----屬性進行XHSELL相關的配置,比如配色,字體大小等
4 基本命令的使用
命令太多,必須要全部記憶,但是要學會如何查每個命令的參數(shù)。我畫了個思維導圖可以當作小字典查看,下面列出可能我們使用頻率會更高的命令
執(zhí)行命令 | 含義 |
---|---|
cd ~ | 切換到登錄用戶的主目錄即/home/用戶名 |
cd / | 進入根目錄 |
cd /home/lj | 將/home/LJ作為當前的目錄 |
cd .. | 返回到上一層目錄 |
cd - | 回到上次所在的目錄 |
cd ../../ | 去上上層目錄 |
ls | 查看當前目錄 |
ls -la | 查看當前目錄的文件信息 包含了隱藏文件 |
pwd | 查看當前目錄的絕對路徑 |
cp /目錄/1.txt /目錄/ | 復制 |
rm | 刪除 |
q! | 不保存文件退出 |
wq! | 保存退出 |
hostname | 查看當前主機名 |
ifconfig | 查看網(wǎng)卡相關信息 |
firewall-cmd --state | centos7查看卡其關閉防火墻狀態(tài) |
5 用戶管理
剛才說了可以創(chuàng)建自己的用戶,那么怎么創(chuàng)建自己的用戶呢?
添加用戶
useradd?-d?/home/lanj?-m?lanj
更改密碼
passwd?lanj
系統(tǒng)有很多的用戶,怎么進行用戶的切換?
su?-lanj
su?-root
如果需要
用戶之間的切換使用su命令實現(xiàn)。root用戶可以無需輸入密碼切換到lj用戶,如果普通用戶lj切換到root用戶則需要輸入密碼,我們看看
su -lj
su -root
如何切換路徑,絕對路徑和相對路徑
6 軟件的安裝方法
在Linux安裝相關的工具分為三種方式,分別為源碼安裝,RPM包安裝以及YUM安裝方式
源碼安裝方式
開源軟件都會提供源碼下載的方式,對于源代碼安裝方式的好處即可以定制軟件功能,安裝需要的模塊,不需要的模塊可以屏蔽,方便管理,卸載等。
對于源碼安裝的步驟如下
下載解壓源碼
一般下載下來源碼以后都會存在一個Readme文件,首先應該仔細閱讀這個文件,可能有很多需要修復的以前人家遇見的問題都會在上面做記錄,以免入坑不回頭
分析平臺環(huán)境
編譯安裝軟件
這里會使用make工具,make工具就會通過makefile文件來實現(xiàn)。makefile文件是一種按照某種語法來編寫且定義了各個文件的依賴關系。
在Linux中,習慣使用Makefile替代makefile,當用戶執(zhí)行configure后,就會在當前目錄生成這個makefile文件,然后用戶輸入make就開始運行。我們看看Makefile是怎么個有樣子
edit?:?main.o?kbd.o?command.o?display.o?\
????????insert.o?search.o?files.o?utils.o???????/*注釋:如果后面這些.o文件比edit可執(zhí)行文件新,那么才會去執(zhí)行下面這句命令*/
????cc?-o?edit?main.o?kbd.o?command.o?display.o?\
????????insert.o?search.o?files.o?utils.o
main.o?:?main.c?defs.h
????cc?-c?main.c
kbd.o?:?kbd.c?defs.h?command.h
????cc?-c?kbd.c
command.o?:?command.c?defs.h?command.h
????cc?-c?command.c
display.o?:?display.c?defs.h?buffer.h
????cc?-c?display.c
insert.o?:?insert.c?defs.h?buffer.h
????cc?-c?insert.c
search.o?:?search.c?defs.h?buffer.h
????cc?-c?search.c
files.o?:?files.c?defs.h?buffer.h?command.h
????cc?-c?files.c
utils.o?:?utils.c?defs.h
????cc?-c?utils.c
clean?:
????rm?edit?main.o?kbd.o?command.o?display.o?\
????????insert.o?search.o?files.o?utils.o
make和make install的關系
當我們輸入make命令過后即進入了編譯階段,編譯時間根據(jù)軟件的程序規(guī)模大小以及硬件配置有關,當輸入make install就會開始安裝軟件,我們可以指定安裝目錄也可以不指定,系統(tǒng)將給你默認指定目錄為/user/local,這樣安裝完畢。
RPM安裝方式
RPM是Red Hat公司開發(fā)出來的Linux下的軟件包管理工具。這些以.rpm結尾的包包含了已經(jīng)編譯好的二進制可執(zhí)行文件,一句話即將源代碼進行編譯,安裝,然后封裝為RPM包
優(yōu)點即安裝簡單,方便,因為已經(jīng)編譯完成,安裝只是用來驗證和解壓過程,缺點也比較明顯,過于依賴于操作系統(tǒng),要求RPM包的安裝環(huán)境必須和RPM封裝時的環(huán)境保持一致,
RPM包是怎么個樣子?
server-2.1.0-22.I386.rpm
其中:server為如那件的名稱
2.1.0:軟件的版本號
22:軟件更新發(fā)行的次數(shù)
i386:適合硬件發(fā)行的次數(shù)
.rpm:rpm軟件包的標識
YUM安裝方式
查看是否存在yum
rpm?-qa?|?grep?yum
沒有則安裝
rpm?-ivh?yum-*.noarch.rpm
自定義yum的配置。我們可以通過打開/etc/yum.repos.d/Centos-Base.repo進行源的配置
YUM有哪些特點呢
安裝方便
可以同時配置多個源
配置文件簡單明了
推薦個不錯的yum源
EPEL
是一個針對紅帽企業(yè)版Linux及衍生發(fā)行版的一個高質(zhì)量附加軟件包項目。網(wǎng)址:http://fedoraproject.org/wiki/EPEL/zh-cn
RPMForge
這是一個第三方軟件倉庫,被centos社區(qū)認為是一個最安全最穩(wěn)定的一個軟件倉庫
6 shell
大部分情況都是Linux操作系統(tǒng),那么熟悉命令的用法以外,熟悉使用shell腳本能介紹不少時間
shell是什么
“ 平時經(jīng)常在Linux操作系統(tǒng)中使用各種命令,比如查看當前的目錄文件,我們會使用"ls"或者"ls -l",這些字符串參數(shù)實際上會被"某段程序"執(zhí)行并啟動它。這個負責將用戶輸入的字符串轉(zhuǎn)換為需要執(zhí)行程序的東西叫做"shell"。即幫用戶更方便使用操作系統(tǒng)接口的“殼”。同樣的殼還有當我輸入Maven+相關參數(shù)的時候是不是就會去執(zhí)行相應的功能,我們駛?cè)雜ql語句的時候,數(shù)據(jù)庫引擎是不是也會各種調(diào)用,一樣的道理
嘗試編寫第一個shell
vim創(chuàng)建打開一個文件,擴展名為.sh。如下所示
#!/bin/bash?#告訴系統(tǒng)使用什么解析器
echo?"Hello?xiaolan?!"?#?echo進行輸出
執(zhí)行方法1
?chmod?+x?./hello.sh?./hello.sh
執(zhí)行方法2
?/bin/sh?hello.sh
變量
變量名和等號之間不能有空格
定義變量注意事項
命名首個字符不能是數(shù)字,只能使用英文字母、數(shù)字和下劃線
不能使用標點符號
不能使用bash中關鍵字
變量使用
使用變量(使用變量的過程中,最好加上花括號),只需要在變量前面加上美元符號即可
#!/bin/bash
James="小皇帝"
echo?$James
只讀變量
使用readonly將變量定義為只讀,只讀意味著不能改變
#!/bin/bash
James="小皇帝"
readonly?James
James="登哥"
刪除變量
使用unset刪除變量 變量刪除以后不能再次使用,且不能刪除只讀變量
#!/bin/bash
James="小皇帝"
unset?James
echo?$James?#不會有任何輸出
變量類型
局部變量
僅當前shell可用
環(huán)境變量
所有程序都能訪問環(huán)境變量
shell變量
通過一部分環(huán)境變量和shell變量保證shell的正常運行
字符串
使用字符串的過程中,既可以用雙引號也可以用單引號,也可以不用
單引號
單引號內(nèi)容原樣輸出,不能包含變量,且不能出現(xiàn)單獨單引號
雙引號
可以出現(xiàn)轉(zhuǎn)義字符
#!/bin/bash
James="小皇帝"
str="\"$?James\"!?oh?my?gad?\n?"
echo?-e?$str?
獲取字符串長度
使用#
string="qwert"
echo?$(#string)
#?提取子字符串
echo?$(string:1:3)
#查找字符串
echo?
數(shù)組
支持以為數(shù)組
定義數(shù)組
數(shù)組元素使用“空格”隔開
array=(value1,value2,value3)
讀取數(shù)組
value1=${array[0]}
使用@輸出數(shù)組所有元素
echo?${array[@]}
獲取數(shù)組中所有元素以及數(shù)組長度
#!?/bin/bash
# author:xiaolan
array[0]=a
array[1]=b
array[3]=c
echo “數(shù)組的元素為:${array[*]}”
echo “數(shù)組的元素為:${array[@]}”
echo “數(shù)組的個數(shù)為:${#array[*]}”
echo “數(shù)組的個數(shù)為:${#array[@]}”
執(zhí)行
./array.sh
結果
注釋
單行注釋
使用#開頭的行為注釋,會被解釋器忽略
多行注釋
shell傳遞參數(shù)
在執(zhí)行shell的時候,命令行指定參數(shù),如下所示
#!/bin/bash
James="小皇帝"
echo?"執(zhí)行的文件名為:$0"
echo?"第一個參數(shù)為:$1"
echo?"第二個參數(shù)為:$2"
執(zhí)行
./param.sh 1 2
結果
幾個特殊字符
案例(partionnal.sh)
#!/bin/bash
#?author:xiaolan
echo?"--?\$*?演示?---"
for?i?in?"$*";?do
????echo?$i
done
echo?"--?\$@?演示?---"
for?i?in?"$@";?do
????echo?$i
done
執(zhí)行
./demo2.sh?1?2?3
結果
相同點:都是會引用所有參數(shù)
不同點:在使用雙引號的時候。如果腳本運行時兩個參數(shù)為a,b,則"*"等價于"ab",而"@"等價于"a","b"
#!/bin/bash
#?author:xiaolan
echo?"--?\$*?演示?---"
for?i?in?"$*";?do
????echo?$i
done
echo?"--?\$@?演示?---"
for?i?in?"$@";?do
????echo?$i
done
8 printf
使用printf格式化字符串,同時可以指定字符串寬度和對齊方式,格式如下
printf?format-string?[arguments...]
#!/bin/bash
#?author:xiaolan
printf?"%-8s?%-8s?%-4s\n"?姓名?科目?分數(shù)??
printf?"%-8s?%-8s?%-4f\n"?小明?數(shù)學?97
printf?"%-8s?%-8s?%-4f\n"?小話?語文?89
printf?"%-8s?%-8s?%-4f\n"?王三?英語?93
結果
9 test
shell中的test用于檢查某個條件是否成立
案例
#!/bin/bash
#?author:xiaolan
num1=55
num2=55
if?test?$[num1]?-eq?$[num2]
then
????echo?'兩個數(shù)相等!'
else
????echo?'兩個數(shù)不相等!'
fi
結果
字符串比較
#!/bin/bash
#?author:xiaolan
num1="xiaolan"
num2="xiaolna"
if?test?$num1?=?$num2
then
????echo?'兩個字符串相等!'
else
????echo?'兩個字符串不相等!'
fi
結果
流程
if語句語法格式
if?condition
then
????exec1?
????exec2
????...
????execN?
fi
如果簡化為一行
if?[$(ps?-ef?|?grep?-c?"httpd")?-gt?1];then?echo?"true";fi
if else-if else
if?condition1
then
????exec1
elif?condition2?
then?
????exec2
else
????execn
fi
案例 判斷兩數(shù)值是否相等
#!/bin/bash
#?author:xiaolan
a=2
b=3
if?[?$a?==?$b?]
then
???echo?"a?等于?b"
elif?[?$a?-gt?$b?]
then
???echo?"a?大于?b"
elif?[?$a?-lt?$b?]
then
???echo?"a?小于?b"
else
???echo?"沒有符合的條件"
fi
for循環(huán)
for?loop?in?1?2?3?4?5
do
????echo?"The?value?is:?$loop"
done
while語句
“ 通常用于從輸入文件不斷讀取數(shù)據(jù)
while?condition
do
????exec
done
#!/bin/bash
#?author:xiaolan
int=1
while((?$int<=6?))
do
????echo?$int
????let?"int++"#?用于執(zhí)行一個或者多個
done
無限循環(huán)
while?true
do
????exec
done
case語句
多選擇語句。取值后面為單詞in,每一個模式以")"結束。匹配發(fā)現(xiàn)取值符合某一模式后,其間所有命令開始執(zhí)行直至 ";;"。
#!/bin/bash
#?author:xiaolan
echo?'輸入?1?到?3?之間的數(shù)字:'
echo?'你輸入的數(shù)字為:'
read?aNum
case?$aNum?in
????1)??echo?'你選擇了?1'
????;;
????2)??echo?'你選擇了?2'
????;;
????3)??echo?'你選擇了?3'
????;;
????*)??echo?'你沒有輸入?1?到?3?之間的數(shù)字'
????;;
esac
輸入不同的內(nèi)容,會有不同的結果,例如:
輸入?1?到?4?之間的數(shù)字:
你輸入的數(shù)字為:
3
你選擇了?3
跳出循環(huán)
break
break命令允許跳出所有循環(huán)
#!/bin/bash
#?author:xiaolan
while?:
do
????echo?-n?"輸入?1?到?3?之間的數(shù)字:"
????read?aNum
????case?$aNum?in
????????1|2|3)?echo?"你輸入的數(shù)字為?$aNum!"
????????;;
????????*)?echo?"你輸入的數(shù)字不是?1?到?3?之間的!?游戲結束"
????????????break
????????;;
????esac
done
continue
跳出當次循環(huán)
#!/bin/bash
while?:
do
????echo?-n?"輸入?1?到?3?之間的數(shù)字:?"
????read?aNum
????case?$aNum?in
????????1|2|3|4|5)?echo?"你輸入的數(shù)字為?$aNum!"
????????;;
????????*)?echo?"你輸入的數(shù)字不是?1?到?3?之間的!"
????????????continue
????????????echo?"游戲結束"
????????;;
????esac
done
10 shell函數(shù)
用戶定義函數(shù),然后在shell腳本中隨便調(diào)用,格式如下
[?function?]?funname?[()]
{
????action;
????[return?int;]
}
例子
#!/bin/bash
#?author:xiaolan
Fun1(){
????echo?"這是我的第一個?shell?函數(shù)!"
}
echo?"-----函數(shù)開始執(zhí)行-----"
Fun1
echo?"-----函數(shù)執(zhí)行完畢-----"
帶return語句
#!/bin/bash
#?author:xiaolan
FunReturn(){
????echo?"這個函數(shù)會對輸入的兩個數(shù)字進行相加運算..."
????echo?"輸入第一個數(shù)字:?"
????read?aNum
????echo?"輸入第二個數(shù)字:?"
????read?anotherNum
????echo?"兩個數(shù)字分別為?$aNum?和?$anotherNum?!"
????return?$(($aNum+$anotherNum))
}
FunReturn
echo?"輸入的兩個數(shù)字之和為?$??!"
函數(shù)參數(shù)
#!/bin/bash
#?author:xiaolan
funParam(){
????echo?"第一個參數(shù)為?$1?!"
????echo?"第二個參數(shù)為?$2?!"
????echo?"參數(shù)總數(shù)有?$#?個!"
????echo?"作為一個字符串輸出所有參數(shù)?$*?!"
}
funParam?1?2?3?4
shell重定向
輸出重定向
command1 > file # 如果file中存在內(nèi)容將被清空覆蓋。如果追加使用command1 >>file
ls?-l?>?dir.txt
cat dir.txt
/dev/null文件
寫入到它的內(nèi)容都會被丟棄,會起到"禁止輸出"的效果,如果希望屏蔽stdout和stderr ?“ command > /dev/null 2>&1
注意:Linux命令行都會打開三個文件
標準輸入文件:stdin文件描述符為0
標準輸出文件:stdout文件描述符為1
標準錯誤文件:stderr文件描述符2
12 運算符
下表列出了常用的算術運算符,假定變量 a 為 2,變量 b 為 3:
算術運算符
算術運算符
關系運算符
布爾運算符
邏輯運算符
邏輯運算符
字符串運算符
12 shell實戰(zhàn)
請將當前目錄中demo.txt第二行第三列數(shù)據(jù)輸出到demo2.txt中
?cat?demo.txt|awk?’NR==2{print?$3}’?>demo2.txt?
日志如下統(tǒng)計訪問ip最多的前10個
awk?’{print?$1}’?*.log?|?sort?|?uniq?-c?|?sort?-nr?|?head?-n?
uniq - 刪除排序文件中的重復行 sort對于文本進行排序 -l 按照當前環(huán)境排序. -m 合并已經(jīng)排序好的文件,不排序. -n 按照字符串的數(shù)值順序比較,暗含-b -r 顛倒比較的結果.
查看占用內(nèi)存最大的進程的PID和VSZ
ps?-aux|sort?-k5nr|awk?’BEGIN{print?”PID?VSZ”}{print?![2,(https://www.zhihu.com/equation?tex=2%2C)2,5}’|awk?’NR<3′?
如何檢查文件系統(tǒng)中是否存在某個文件
if?[-f?/var/log/messages]
then
echo?"File?exts"
fi
每個腳本開始的 #!/bin/sh 或 #!/bin/bash 表示什么意思 ?
#!/bin/bash 表示腳本使用 /bin/bash。對于 python 腳本,就是 #!/usr/bin/python
&和&&區(qū)別
“ “&” 腳本在后臺運行時使用它?!?&”當前一個腳本成功完成才執(zhí)行后面的命令
腳本文件中,如何將其重定向標準輸出和標準錯誤流到 log.txt 文件 ?
./a.sh?>log.txt?2>&1
如何計算本地用戶的數(shù)目
wc?-l?/etc/passwd?|?cut?-d
shell中進行字符串比較和數(shù)字比較
[?$A?==?$B?]?–?用于字符串比較
[?$A?-eq?$B?]?–?用于數(shù)字比較
去掉字符串空格
echo $string | tr -d " "
統(tǒng)計內(nèi)存使用
#!?/bin/bash
#?author:xiaolan
sum=0
for?mem?in?`ps?aux?|awk?'{print?$6}'?|grep?-v?'RSS'?`
do
????sum=$[$sum+$mem]
done
echo?"The?total?memory?is?$sum""k"
結果
批量更改文件名
批量修改123目錄下txt為txt.temp。將temp打包為test.tar.gz
#!/bin/bash
##查找txt文件
find?/123?-type?f?-name?"*.txt"?>?/tmp/txt.list
##批量修改文件名
for?f?in?`cat?/tmp/txt.list`
do
????mv?$f?$f.temp
done
##創(chuàng)建一個目錄,為了避免目錄已經(jīng)存在,所以要加一個復雜的后綴名
d=`date?+%y%m%d%H%M%S`
mkdir?/tmp/123_$d
##把.temp文件拷貝到/tmp/123_$d
for?f?in?`cat?/tmp/txt.list`
do
????cp?$f.temp?/tmp/123_$d
done
##打包壓縮
cd?/tmp/
tar?czf?123.tar.gz?123_$d/
7 awk文本處理工具
awk是一個處理文本文件的應用程序,幾乎所有的Linux系統(tǒng)都自帶了這個程序
依次處理每一行,并讀取里面的每一個字段。對于處理生產(chǎn)環(huán)境的日志有著非常高校的作用
基本用法
#?格式
awk?做什么?文件嗎
awk?'print?$0'?lan.txt
上面lan.txt是awk需要處理的文本文件。前面單引號里面有一個大括號,單引號里面就是每一行的處理動作。其中print為打印命令,
上菜
echo?'my?name?is?lanlan'?|?awk?'{print?$0}'
上面代碼中,print
0即將標準輸入my name is lanlan ,c重新打印一遍awk根據(jù)空格和制表符,將每一行分成若干段,依次為2
echo?'my?name?is?lanlan'|?awk?'{print?$3}'
為了方便,我們直接使用/etc/passwd文件進行操作,
awk?-F?':'?'{?print?$1?}'?demo.txt
3 變量
上面我們說了,可以使用符號 “
+” 數(shù)字的方式表示第幾個字段,其實還有一些變量可以直接表示相應的字段。比如 “$NFb” 表示最后一個字段echo?'my?name?is?lanlan'|?awk?'{print?$NF}'
awk?-F?':'?'{print?NR?")?"?$1}'?demo.txtshe
這里出現(xiàn)了雙引號,表示原樣輸出
其他常用的內(nèi)置變量
FILENAME:當前文件名
FS:字段分隔符,默認是空格和制表符。
RS:行分隔符,用于分割每一行,默認是換行符。
OFS:輸出字段的分隔符,用于打印時分隔字段,默認為空格。
ORS:輸出記錄的分隔符,用于打印時分隔記錄,默認為換行符。
OFMT:數(shù)字輸出的格式,默認為%.6g。
4 函數(shù)
既然算是一門語言,函數(shù)當然少不了,下面看一波常用的函數(shù)
函數(shù)toupper()用于將字符轉(zhuǎn)為大寫
awk?-F?':'?'{?print?toupper($1)?}'?demo.txt
可以發(fā)現(xiàn)第一個字段輸出的時候變成了大寫
tolower():字符轉(zhuǎn)為小寫。
length():返回字符串長度。
substr():返回子字符串。
sin():正弦。
cos():余弦。
sqrt():平方根。
rand():隨機數(shù)。
5 條件**
通過使用相應的條件,過濾出自己想要的內(nèi)容
awk?'條件?動作'?文件名
上菜
$?awk?-F?':'?'/usr/?{print?$1}'?demo.txt
root
daemon
bin
sys
這里/usr/表示只輸出包含usr的行
這個例子輸出奇數(shù)行
#?輸出奇數(shù)行
$?awk?-F?':'?'NR?%?2?==?1?{print?$1}'?demo.txt
root
bin
sync
#?輸出第三行以后的行
$?awk?-F?':'?'NR?>3?{print?$1}'?demo.txt
sys
sync
下面的例子輸出第一個字段等于指定值的行。
$?awk?-F?':'?'$1?==?"root"?{print?$1}'?demo.txt
root
$?awk?-F?':'?'$1?==?"root"?||?$1?==?"bin"?{print?$1}'?demo.txt
root
bin
5 if語句
通過if語句編寫比較復雜的內(nèi)容
$?awk?-F?':'?'{if?($1?>?"m")?print?$1}'?demo.txt
root
sys
sync
上面代碼輸出第一個字段的第一個字符大于m
的行。
if結構還可以指定else部分。
8 進程管理與定時任務和后臺執(zhí)行
crond是什么?
crond是一個可以在指定時間執(zhí)行一個shell腳本或者一系列的Linux命令。和Windows下的計劃任務類似。當安裝完操作系統(tǒng)后,默認會安裝這個服務工具,并且會自動啟動crond進程。
在Linux中任務的調(diào)度分為兩類
系統(tǒng)任務的調(diào)度
系統(tǒng)會周期性的執(zhí)行一些工作,比如說寫緩存的數(shù)據(jù)到硬盤,清理日志等
用戶任務的調(diào)度
用戶定期也會執(zhí)行一些任務,比如用戶數(shù)據(jù)的備份,定時的郵件提醒等,這些都是通過crondtab來設置
那么crontab到底怎么用么
首先看看crontab的使用格式:
crontab?-u?user?file
常見的選項
-u user:很明顯是需要表明是那個用戶的crontab服務,別瞎搞
file:file是命名文件的名字,表示將file作為crontab的任務列表文件并載入到crontab中
-e:e為edit,表示標記某個用戶的crontab文件內(nèi)容
-l:顯示用戶的crontab文件、
crontab的含義
創(chuàng)建的crontab文件,每一行代表一項任務,每個字段都有對應的設置規(guī)則,一共分為6個字段,分別為:
minute?hour?day?month?week?command
minute:區(qū)間 0-59
hour:區(qū)間0-23
day:區(qū)間0-31
month:區(qū)間1-12
week:區(qū)間0-7 周日可以是0/7
command
這里的command代表的是需要執(zhí)行的而命令,通常為腳本文件,
除了上面幾個字段,還需要注意幾個特殊字段
*:代表所欲嘔可能的值
,:通過,來表示區(qū)間范圍的值
_:整數(shù)之間的中杠表示一個證書范圍
正斜線:表示時間的間隔頻率,比如0-23/2表示每兩個小時執(zhí)行一次
開始放幾個例子**
crontab?-e
0?5?*?*?*?/root/bin/backup.sh
這代表的是每天早上5點運行backup.sh
每個工作日11:59pm進行備份作業(yè)
59?11?*?*?1-5?/root/bin/backup.sh
每五分鐘運行一個命令
*/5?*?*?*?*?/root/bin/check-status.sh
crontab有哪些選項
crontab -e:修 改crontab文件,如果文件不存在會自動創(chuàng)建
crontab -l:顯示crontab文件
crontab -r:刪除crontab 文件
crontab -ir:刪除crontab文件前提醒用戶
9 后臺運行
用途:不掛斷的運行命令
語法:nohup Command [ Arg … ] [&]
無論是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當前目錄的 nohup.out 文件中。
如果當前目錄的 "nohup.out" 文件不可寫,輸出重定向到"home/nohup.out"
如果沒有文件能創(chuàng)建或打開以用于追加,那么 Command 參數(shù)指定的命令不可調(diào)用。
退出狀態(tài):該命令返回下列出口值:
126 可以查找但不能調(diào)用 Command 參數(shù)指定的命令。
127 nohup 命令發(fā)生錯誤或不能查找由 Command 參數(shù)指定的命令。
否則,nohup 命令的退出狀態(tài)是 Command 參數(shù)指定命令的退出狀態(tài)。
使用&
用途:在后臺運行,一般兩個一起用
nohup?command?&
往期推薦
免責聲明:本文內(nèi)容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!