5 用戶管理
剛才說了可以創(chuàng)建自己的用戶尝胆,那么怎么創(chuàng)建自己的用戶呢?
添加用戶
useradd -d /home/lanj -m lanj
更改密碼
passwd lanj
系統(tǒng)有很多的用戶晤锥,怎么進(jìn)行用戶的切換暇韧?
su -lanj
su -root
如果需要
用戶之間的切換使用su命令實(shí)現(xiàn)勾习。root用戶可以無需輸入密碼切換到lj用戶,如果普通用戶lj切換到root用戶則需要輸入密碼懈玻,我們看看
su -lj
su -root
如何切換路徑巧婶,絕對(duì)路徑和相對(duì)路徑
6 軟件的安裝方法
在Linux安裝相關(guān)的工具分為三種方式,分別為源碼安裝涂乌,RPM包安裝以及YUM安裝方式
源碼安裝方式
開源軟件都會(huì)提供源碼下載的方式艺栈,對(duì)于源代碼安裝方式的好處即可以定制軟件功能,安裝需要的模塊湾盒,不需要的模塊可以屏蔽湿右,方便管理,卸載等罚勾。
對(duì)于源碼安裝的步驟如下
- 下載解壓源碼
一般下載下來源碼以后都會(huì)存在一個(gè)Readme文件毅人,首先應(yīng)該仔細(xì)閱讀這個(gè)文件,可能有很多需要修復(fù)的以前人家遇見的問題都會(huì)在上面做記錄尖殃,以免入坑不回頭
分析平臺(tái)環(huán)境
編譯安裝軟件
這里會(huì)使用make工具丈莺,make工具就會(huì)通過makefile文件來實(shí)現(xiàn)。makefile文件是一種按照某種語法來編寫且定義了各個(gè)文件的依賴關(guān)系送丰。
在Linux中缔俄,習(xí)慣使用Makefile替代makefile,當(dāng)用戶執(zhí)行configure后器躏,就會(huì)在當(dāng)前目錄生成這個(gè)makefile文件俐载,然后用戶輸入make就開始運(yùn)行。我們看看Makefile是怎么個(gè)有樣子
edit : main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o /*注釋:如果后面這些.o文件比edit可執(zhí)行文件新,那么才會(huì)去執(zhí)行下面這句命令*/ cc -o edit main.o kbd.o command.o display.o \ insert.o search.o files.o utils.omain.o : main.c defs.h cc -c main.ckbd.o : kbd.c defs.h command.h cc -c kbd.ccommand.o : command.c defs.h command.h cc -c command.cdisplay.o : display.c defs.h buffer.h cc -c display.cinsert.o : insert.c defs.h buffer.h cc -c insert.csearch.o : search.c defs.h buffer.h cc -c search.cfiles.o : files.c defs.h buffer.h command.h cc -c files.cutils.o : utils.c defs.h cc -c utils.cclean : rm edit main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o
make和make install的關(guān)系
當(dāng)我們輸入make命令過后即進(jìn)入了編譯階段登失,編譯時(shí)間根據(jù)軟件的程序規(guī)模大小以及硬件配置有關(guān)瞎疼,當(dāng)輸入make install就會(huì)開始安裝軟件,我們可以指定安裝目錄也可以不指定壁畸,系統(tǒng)將給你默認(rèn)指定目錄為/user/local,這樣安裝完畢茅茂。
RPM安裝方式
RPM是Red Hat公司開發(fā)出來的Linux下的軟件包管理工具捏萍。這些以.rpm結(jié)尾的包包含了已經(jīng)編譯好的二進(jìn)制可執(zhí)行文件,一句話即將源代碼進(jìn)行編譯空闲,安裝令杈,然后封裝為RPM包
優(yōu)點(diǎn)即安裝簡單,方便碴倾,因?yàn)橐呀?jīng)編譯完成逗噩,安裝只是用來驗(yàn)證和解壓過程掉丽,缺點(diǎn)也比較明顯,過于依賴于操作系統(tǒng)异雁,要求RPM包的安裝環(huán)境必須和RPM封裝時(shí)的環(huán)境保持一致捶障,
RPM包是怎么個(gè)樣子?
server-2.1.0-22.I386.rpm
其中:server為如那件的名稱
2.1.0:軟件的版本號(hào)
22:軟件更新發(fā)行的次數(shù)
i386:適合硬件發(fā)行的次數(shù)
.rpm:rpm軟件包的標(biāo)識(shí)
YUM安裝方式
- 查看是否存在yum
rpm -qa | grep yum
- 沒有則安裝
rpm -ivh yum-*.noarch.rpm
- 自定義yum的配置纲刀。我們可以通過打開/etc/yum.repos.d/Centos-Base.repo進(jìn)行源的配置
YUM有哪些特點(diǎn)呢
安裝方便
可以同時(shí)配置多個(gè)源
配置文件簡單明了
推薦個(gè)不錯(cuò)的yum源
- EPEL
是一個(gè)針對(duì)紅帽企業(yè)版Linux及衍生發(fā)行版的一個(gè)高質(zhì)量附加軟件包項(xiàng)目项炼。網(wǎng)址:http://fedoraproject.org/wiki/EPEL/zh-cn
- RPMForge
這是一個(gè)第三方軟件倉庫,被centos社區(qū)認(rèn)為是一個(gè)最安全最穩(wěn)定的一個(gè)軟件倉庫
6 shell
大部分情況都是Linux操作系統(tǒng)示绊,那么熟悉命令的用法以外锭部,熟悉使用shell腳本能介紹不少時(shí)間
shell是什么
“ 平時(shí)經(jīng)常在Linux操作系統(tǒng)中使用各種命令,比如查看當(dāng)前的目錄文件面褐,我們會(huì)使用"ls"或者"ls -l"拌禾,這些字符串參數(shù)實(shí)際上會(huì)被"某段程序"執(zhí)行并啟動(dòng)它。這個(gè)負(fù)責(zé)將用戶輸入的字符串轉(zhuǎn)換為需要執(zhí)行程序的東西叫做"shell"展哭。即幫用戶更方便使用操作系統(tǒng)接口的“殼”湃窍。同樣的殼還有當(dāng)我輸入Maven+相關(guān)參數(shù)的時(shí)候是不是就會(huì)去執(zhí)行相應(yīng)的功能,我們駛?cè)雜ql語句的時(shí)候摄杂,數(shù)據(jù)庫引擎是不是也會(huì)各種調(diào)用坝咐,一樣的道理
嘗試編寫第一個(gè)shell
vim創(chuàng)建打開一個(gè)文件,擴(kuò)展名為.sh析恢。如下所示
#!/bin/bash #告訴系統(tǒng)使用什么解析器echo "Hello xiaolan !" # echo進(jìn)行輸出
- 執(zhí)行方法1
chmod +x ./hello.sh ./hello.sh
- 執(zhí)行方法2
/bin/sh hello.sh
變量
變量名和等號(hào)之間不能有空格
定義變量注意事項(xiàng)
命名首個(gè)字符不能是數(shù)字墨坚,只能使用英文字母、數(shù)字和下劃線
不能使用標(biāo)點(diǎn)符號(hào)
不能使用bash中關(guān)鍵字
變量使用
使用變量(使用變量的過程中映挂,最好加上花括號(hào))泽篮,只需要在變量前面加上美元符號(hào)即可
#!/bin/bashJames="小皇帝"echo $James
只讀變量
使用readonly將變量定義為只讀,只讀意味著不能改變
#!/bin/bashJames="小皇帝"readonly JamesJames="登哥"
刪除變量
使用unset刪除變量 變量刪除以后不能再次使用柑船,且不能刪除只讀變量
#!/bin/bashJames="小皇帝"unset Jamesecho $James #不會(huì)有任何輸出
變量類型
- 局部變量
僅當(dāng)前shell可用
- 環(huán)境變量
所有程序都能訪問環(huán)境變量
- shell變量
通過一部分環(huán)境變量和shell變量保證shell的正常運(yùn)行
字符串
使用字符串的過程中帽撑,既可以用雙引號(hào)也可以用單引號(hào),也可以不用
- 單引號(hào)
單引號(hào)內(nèi)容原樣輸出鞍时,不能包含變量亏拉,且不能出現(xiàn)單獨(dú)單引號(hào)
- 雙引號(hào)
可以出現(xiàn)轉(zhuǎn)義字符
#!/bin/bashJames="小皇帝"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:xiaolanarray[0]=aarray[1]=barray[3]=cecho “數(shù)組的元素為:${array[*]}”echo “數(shù)組的元素為:${array[@]}”echo “數(shù)組的個(gè)數(shù)為:${#array[*]}”echo “數(shù)組的個(gè)數(shù)為:${#array[@]}”
執(zhí)行
./array.sh
結(jié)果
<figcaption style="margin: 10px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; line-height: inherit; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">result</figcaption>
注釋
單行注釋
使用#開頭的行為注釋,會(huì)被解釋器忽略
多行注釋
shell傳遞參數(shù)
在執(zhí)行shell的時(shí)候逆巍,命令行指定參數(shù)及塘,如下所示
#!/bin/bashJames="小皇帝"echo "執(zhí)行的文件名為:$0"echo "第一個(gè)參數(shù)為:$1"echo "第二個(gè)參數(shù)為:$2"
執(zhí)行
./param.sh 1 2
結(jié)果
<figcaption style="margin: 10px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; line-height: inherit; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">result</figcaption>
幾個(gè)特殊字符
<figcaption style="margin: 10px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; line-height: inherit; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">result</figcaption>
案例(partionnal.sh)
#!/bin/bash# author:xiaolanecho "-- \$* 演示 ---"for i in "$*"; do echo $idoneecho "-- \$@ 演示 ---"for i in "$@"; do echo $idone
執(zhí)行
./demo2.sh 1 2 3
結(jié)果
<figcaption style="margin: 10px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; line-height: inherit; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">img</figcaption>
相同點(diǎn):都是會(huì)引用所有參數(shù)
不同點(diǎn):在使用雙引號(hào)的時(shí)候。如果腳本運(yùn)行時(shí)兩個(gè)參數(shù)為a,b锐极,則"*"等價(jià)于"ab",而"@"等價(jià)于"a","b"
#!/bin/bash# author:xiaolanecho "-- \$* 演示 ---"for i in "$*"; do echo $idoneecho "-- \$@ 演示 ---"for i in "$@"; do echo $idone
8 printf
使用printf格式化字符串笙僚,同時(shí)可以指定字符串寬度和對(duì)齊方式,格式如下
printf format-string [arguments...]#!/bin/bash# author:xiaolanprintf "%-8s %-8s %-4s\n" 姓名 科目 分?jǐn)?shù) printf "%-8s %-8s %-4f\n" 小明 數(shù)學(xué) 97printf "%-8s %-8s %-4f\n" 小話 語文 89printf "%-8s %-8s %-4f\n" 王三 英語 93
結(jié)果
<figcaption style="margin: 10px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; line-height: inherit; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">img</figcaption>
9 test
shell中的test用于檢查某個(gè)條件是否成立
<figcaption style="margin: 10px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; line-height: inherit; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">result
</figcaption>
案例
#!/bin/bash# author:xiaolannum1=55num2=55if test $[num1] -eq $[num2]then echo '兩個(gè)數(shù)相等灵再!'else echo '兩個(gè)數(shù)不相等肋层!'fi
結(jié)果
<figcaption style="margin: 10px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; line-height: inherit; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">result</figcaption>
字符串比較
<figcaption style="margin: 10px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; line-height: inherit; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">字符串比較</figcaption>
#!/bin/bash# author:xiaolannum1="xiaolan"num2="xiaolna"if test $num1 = $num2then echo '兩個(gè)字符串相等!'else echo '兩個(gè)字符串不相等!'fi
結(jié)果
<figcaption style="margin: 10px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; line-height: inherit; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">result</figcaption>
流程
if語句語法格式
if conditionthen exec1 exec2 ... execN fi
如果簡化為一行
if [$(ps -ef | grep -c "httpd") -gt 1];then echo "true";fi
if else-if else
if condition1then exec1elif condition2 then exec2else execnfi
案例 判斷兩數(shù)值是否相等
#!/bin/bash# author:xiaolana=2b=3if [ $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 5do echo "The value is: $loop"done
while語句
“ 通常用于從輸入文件不斷讀取數(shù)據(jù)
while conditiondo execdone#!/bin/bash# author:xiaolanint=1while(( $int<=6 ))do echo $int let "int++"# 用于執(zhí)行一個(gè)或者多個(gè)done
無限循環(huán)
while truedo execdone
case語句
多選擇語句亿笤。取值后面為單詞in,每一個(gè)模式以")"結(jié)束栋猖。匹配發(fā)現(xiàn)取值符合某一模式后净薛,其間所有命令開始執(zhí)行直至 ";;"。
#!/bin/bash# author:xiaolanecho '輸入 1 到 3 之間的數(shù)字:'echo '你輸入的數(shù)字為:'read aNumcase $aNum in 1) echo '你選擇了 1' ;; 2) echo '你選擇了 2' ;; 3) echo '你選擇了 3' ;; *) echo '你沒有輸入 1 到 3 之間的數(shù)字' ;;esac
輸入不同的內(nèi)容掂铐,會(huì)有不同的結(jié)果罕拂,例如:
輸入 1 到 4 之間的數(shù)字:你輸入的數(shù)字為:3你選擇了 3
跳出循環(huán)
break
break命令允許跳出所有循環(huán)
#!/bin/bash# author:xiaolanwhile :do echo -n "輸入 1 到 3 之間的數(shù)字:" read aNum case $aNum in 1|2|3) echo "你輸入的數(shù)字為 $aNum!" ;; *) echo "你輸入的數(shù)字不是 1 到 3 之間的! 游戲結(jié)束" break ;; esacdone
continue
跳出當(dāng)次循環(huán)
#!/bin/bashwhile :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 "游戲結(jié)束" ;; esacdone
10 shell函數(shù)
用戶定義函數(shù),然后在shell腳本中隨便調(diào)用全陨,格式如下
[ function ] funname [()]{ action; [return int;]}
例子
#!/bin/bash# author:xiaolanFun1(){ echo "這是我的第一個(gè) shell 函數(shù)!"}echo "-----函數(shù)開始執(zhí)行-----"Fun1echo "-----函數(shù)執(zhí)行完畢-----"
帶return語句
#!/bin/bash# author:xiaolanFunReturn(){ echo "這個(gè)函數(shù)會(huì)對(duì)輸入的兩個(gè)數(shù)字進(jìn)行相加運(yùn)算..." echo "輸入第一個(gè)數(shù)字: " read aNum echo "輸入第二個(gè)數(shù)字: " read anotherNum echo "兩個(gè)數(shù)字分別為 $aNum 和 $anotherNum !" return $(($aNum+$anotherNum))}FunReturnecho "輸入的兩個(gè)數(shù)字之和為 $? !"
函數(shù)參數(shù)
#!/bin/bash# author:xiaolanfunParam(){ echo "第一個(gè)參數(shù)為 $1 !" echo "第二個(gè)參數(shù)為 $2 !" echo "參數(shù)總數(shù)有 $# 個(gè)!" echo "作為一個(gè)字符串輸出所有參數(shù) $* !"}funParam 1 2 3 4
shell重定向
輸出重定向
command1 > file # 如果file中存在內(nèi)容將被清空覆蓋爆班。如果追加使用command1 >>file
ls -l > dir.txt
cat dir.txt
<figcaption style="margin: 10px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; line-height: inherit; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">img</figcaption>
/dev/null文件
寫入到它的內(nèi)容都會(huì)被丟棄,會(huì)起到"禁止輸出"的效果辱姨,如果希望屏蔽stdout和stderr “ command > /dev/null 2>&1
注意:Linux命令行都會(huì)打開三個(gè)文件
標(biāo)準(zhǔn)輸入文件:stdin文件描述符為0
標(biāo)準(zhǔn)輸出文件:stdout文件描述符為1
標(biāo)準(zhǔn)錯(cuò)誤文件:stderr文件描述符2
12 運(yùn)算符
下表列出了常用的算術(shù)運(yùn)算符柿菩,假定變量 a 為 2,變量 b 為 3:
算術(shù)運(yùn)算符
算術(shù)運(yùn)算符
關(guān)系運(yùn)算符
<figcaption style="margin: 10px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; line-height: inherit; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">關(guān)系運(yùn)算符</figcaption>
布爾運(yùn)算符
<figcaption style="margin: 10px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; line-height: inherit; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">布爾運(yùn)算符</figcaption>
邏輯運(yùn)算符
邏輯運(yùn)算符
字符串運(yùn)算符
<figcaption style="margin: 10px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; line-height: inherit; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">
</figcaption>
12 shell實(shí)戰(zhàn)
- 請(qǐng)將當(dāng)前目錄中demo.txt第二行第三列數(shù)據(jù)輸出到demo2.txt中
cat demo.txt|awk ’NR==2{print $3}’ >demo2.txt
- 日志如下統(tǒng)計(jì)訪問ip最多的前10個(gè)
awk ’{print $1}’ *.log | sort | uniq -c | sort -nr | head -n
uniq - 刪除排序文件中的重復(fù)行 sort對(duì)于文本進(jìn)行排序 -l 按照當(dāng)前環(huán)境排序. -m 合并已經(jīng)排序好的文件,不排序. -n 按照字符串的數(shù)值順序比較,暗含-b -r 顛倒比較的結(jié)果.
- 查看占用內(nèi)存最大的進(jìn)程的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)中是否存在某個(gè)文件
if [-f /var/log/messages]thenecho "File exts"fi
- 每個(gè)腳本開始的 #!/bin/sh 或 #!/bin/bash 表示什么意思 ?
!/bin/bash 表示腳本使用 /bin/bash雨涛。對(duì)于 python 腳本枢舶,就是 #!/usr/bin/python
- &和&&區(qū)別
“ “&” 腳本在后臺(tái)運(yùn)行時(shí)使用它√婢茫“&&”當(dāng)前一個(gè)腳本成功完成才執(zhí)行后面的命令
- 腳本文件中凉泄,如何將其重定向標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤流到 log.txt 文件 ?
./a.sh >log.txt 2>&1
- 如何計(jì)算本地用戶的數(shù)目
wc -l /etc/passwd | cut -d
- shell中進(jìn)行字符串比較和數(shù)字比較
[ $A == $B ] – 用于字符串比較[ $A -eq $B ] – 用于數(shù)字比較
- 去掉字符串空格
echo $string | tr -d " "
- 統(tǒng)計(jì)內(nèi)存使用
#! /bin/bash# author:xiaolansum=0for mem in `ps aux |awk '{print $6}' |grep -v 'RSS' `do sum=$[$sum+$mem]doneecho "The total memory is $sum""k"
結(jié)果
<figcaption style="margin: 10px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; line-height: inherit; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">result</figcaption>
- 批量更改文件名
批量修改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.tempdone##創(chuàng)建一個(gè)目錄蚯根,為了避免目錄已經(jīng)存在后众,所以要加一個(gè)復(fù)雜的后綴名d=`date +%y%m%d%H%M%S`mkdir /tmp/123_$d##把.temp文件拷貝到/tmp/123_$dfor f in `cat /tmp/txt.list`do cp $f.temp /tmp/123_$ddone##打包壓縮cd /tmp/tar czf 123.tar.gz 123_$d/
7 awk文本處理工具
awk是一個(gè)處理文本文件的應(yīng)用程序,幾乎所有的Linux系統(tǒng)都自帶了這個(gè)程序
依次處理每一行颅拦,并讀取里面的每一個(gè)字段蒂誉。對(duì)于處理生產(chǎn)環(huán)境的日志有著非常高校的作用
基本用法
# 格式awk 做什么 文件嗎awk 'print $0' lan.txt
上面lan.txt是awk需要處理的文本文件。前面單引號(hào)里面有一個(gè)大括號(hào)距帅,單引號(hào)里面就是每一行的處理動(dòng)作右锨。其中print為打印命令,
上菜
echo 'my name is lanlan' | awk '{print $0}'
上面代碼中碌秸,print 0位當(dāng)前行绍移,所以執(zhí)行結(jié)果就是把每一行原樣打印出來??上菜??¨G56G上面代碼中,print0即將標(biāo)準(zhǔn)輸入my name is lanlan ,c重新打印一遍
awk根據(jù)空格和制表符讥电,將每一行分成若干段登夫,依次為2
echo 'my name is lanlan'| awk '{print $3}'
為了方便,我們直接使用/etc/passwd文件進(jìn)行操作允趟,
awk -F ':' '{ print $1 }' demo.txt
3 變量
上面我們說了,可以使用符號(hào) “3代表第一個(gè)字段鸦致,第二個(gè)字段潮剪,第三個(gè)字段¨G57G為了方便涣楷,我們直接使用/etc/passwd文件進(jìn)行操作,¨G58G??3變量??上面我們說了抗碰,可以使用符號(hào)“+” 數(shù)字的方式表示第幾個(gè)字段狮斗,其實(shí)還有一些變量可以直接表示相應(yīng)的字段。比如 “$NFb” 表示最后一個(gè)字段
echo 'my name is lanlan'| awk '{print $NF}'awk -F ':' '{print NR ") " $1}' demo.txtshe
這里出現(xiàn)了雙引號(hào)弧蝇,表示原樣輸出
其他常用的內(nèi)置變量
FILENAME:當(dāng)前文件名
FS:字段分隔符碳褒,默認(rèn)是空格和制表符。
RS:行分隔符看疗,用于分割每一行沙峻,默認(rèn)是換行符。
OFS:輸出字段的分隔符两芳,用于打印時(shí)分隔字段摔寨,默認(rèn)為空格。
ORS:輸出記錄的分隔符怖辆,用于打印時(shí)分隔記錄是复,默認(rèn)為換行符。
OFMT:數(shù)字輸出的格式竖螃,默認(rèn)為%.6g淑廊。
4 函數(shù)
既然算是一門語言,函數(shù)當(dāng)然少不了特咆,下面看一波常用的函數(shù)
函數(shù)toupper()用于將字符轉(zhuǎn)為大寫
awk -F ':' '{ print toupper($1) }' demo.txt
可以發(fā)現(xiàn)第一個(gè)字段輸出的時(shí)候變成了大寫
tolower():字符轉(zhuǎn)為小寫季惩。
length():返回字符串長度。
substr():返回子字符串坚弱。
sin():正弦蜀备。
cos():余弦。
sqrt():平方根荒叶。
rand():隨機(jī)數(shù)碾阁。
5 條件**
通過使用相應(yīng)的條件,過濾出自己想要的內(nèi)容
awk '條件 動(dòng)作' 文件名
上菜
$ awk -F ':' '/usr/ {print $1}' demo.txtrootdaemonbinsys
這里/usr/表示只輸出包含usr的行
這個(gè)例子輸出奇數(shù)行
# 輸出奇數(shù)行$ awk -F ':' 'NR % 2 == 1 {print $1}' demo.txtrootbinsync# 輸出第三行以后的行$ awk -F ':' 'NR >3 {print $1}' demo.txtsyssync
下面的例子輸出第一個(gè)字段等于指定值的行些楣。
$ awk -F ':' '$1 == "root" {print $1}' demo.txtroot$ awk -F ':' '$1 == "root" || $1 == "bin" {print $1}' demo.txtrootbin
5 if語句
通過if語句編寫比較復(fù)雜的內(nèi)容
$ awk -F ':' '{if ($1 > "m") print $1}' demo.txtrootsyssync
上面代碼輸出第一個(gè)字段的第一個(gè)字符大于m
的行脂凶。
if結(jié)構(gòu)還可以指定else部分。
8 進(jìn)程管理與定時(shí)任務(wù)和后臺(tái)執(zhí)行
crond是什么愁茁?
crond是一個(gè)可以在指定時(shí)間執(zhí)行一個(gè)shell腳本或者一系列的Linux命令蚕钦。和Windows下的計(jì)劃任務(wù)類似。當(dāng)安裝完操作系統(tǒng)后鹅很,默認(rèn)會(huì)安裝這個(gè)服務(wù)工具嘶居,并且會(huì)自動(dòng)啟動(dòng)crond進(jìn)程。
在Linux中任務(wù)的調(diào)度分為兩類
- 系統(tǒng)任務(wù)的調(diào)度
系統(tǒng)會(huì)周期性的執(zhí)行一些工作,比如說寫緩存的數(shù)據(jù)到硬盤邮屁,清理日志等
- 用戶任務(wù)的調(diào)度
用戶定期也會(huì)執(zhí)行一些任務(wù)整袁,比如用戶數(shù)據(jù)的備份,定時(shí)的郵件提醒等佑吝,這些都是通過crondtab來設(shè)置
那么crontab到底怎么用么
首先看看crontab的使用格式:
crontab -u user file
常見的選項(xiàng)
-u user:很明顯是需要表明是那個(gè)用戶的crontab服務(wù)坐昙,別瞎搞
file:file是命名文件的名字,表示將file作為crontab的任務(wù)列表文件并載入到crontab中
-e:e為edit芋忿,表示標(biāo)記某個(gè)用戶的crontab文件內(nèi)容
-l:顯示用戶的crontab文件炸客、
crontab的含義
創(chuàng)建的crontab文件,每一行代表一項(xiàng)任務(wù)戈钢,每個(gè)字段都有對(duì)應(yīng)的設(shè)置規(guī)則痹仙,一共分為6個(gè)字段,分別為:
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í)行的而命令逆趣,通常為腳本文件蝶溶,
除了上面幾個(gè)字段,還需要注意幾個(gè)特殊字段
*:代表所欲嘔可能的值
宣渗,:通過抖所,來表示區(qū)間范圍的值
_:整數(shù)之間的中杠表示一個(gè)證書范圍
正斜線:表示時(shí)間的間隔頻率,比如0-23/2表示每兩個(gè)小時(shí)執(zhí)行一次
開始放幾個(gè)例子**
crontab -e0 5 * * * /root/bin/backup.sh
這代表的是每天早上5點(diǎn)運(yùn)行backup.sh
每個(gè)工作日11:59pm進(jìn)行備份作業(yè)
59 11 * * 1-5 /root/bin/backup.sh
每五分鐘運(yùn)行一個(gè)命令
*/5 * * * * /root/bin/check-status.sh
crontab有哪些選項(xiàng)
crontab -e:修 改crontab文件痕囱,如果文件不存在會(huì)自動(dòng)創(chuàng)建
crontab -l:顯示crontab文件
crontab -r:刪除crontab 文件
crontab -ir:刪除crontab文件前提醒用戶
9 后臺(tái)運(yùn)行
用途:不掛斷的運(yùn)行命令
語法:nohup Command [ Arg … ] [&]
無論是否將 nohup 命令的輸出重定向到終端田轧,輸出都將附加到當(dāng)前目錄的 nohup.out 文件中。
如果當(dāng)前目錄的 "nohup.out" 文件不可寫鞍恢,輸出重定向到"home/nohup.out"
如果沒有文件能創(chuàng)建或打開以用于追加傻粘,那么 Command 參數(shù)指定的命令不可調(diào)用。
退出狀態(tài):該命令返回下列出口值:
126 可以查找但不能調(diào)用 Command 參數(shù)指定的命令帮掉。
127 nohup 命令發(fā)生錯(cuò)誤或不能查找由 Command 參數(shù)指定的命令弦悉。
否則,nohup 命令的退出狀態(tài)是 Command 參數(shù)指定命令的退出狀態(tài)蟆炊。
使用&
用途:在后臺(tái)運(yùn)行,一般兩個(gè)一起用
nohup command &
嘮嗑-----求贊稽莉,求在看
為了方便大家溝通交流,資源共享涩搓。小藍(lán)準(zhǔn)備創(chuàng)建一個(gè)面試交流群污秆,讓正在面試或即將面試的小伙伴能夠一起溝通交流,當(dāng)然群里也會(huì)不定期的發(fā)發(fā)小紅包昧甘,群里不會(huì)存在任何的廣告良拼。歡迎有興趣的小伙伴加入,加群方式掃描下方二維碼充边,備注加群即可庸推。