Linux通用知識(shí)

image.png
image.png

圖片

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é)果

image.gif

<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

image.gif

<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)算符

image.gif

<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ì)存在任何的廣告良拼。歡迎有興趣的小伙伴加入,加群方式掃描下方二維碼充边,備注加群即可庸推。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子予弧,更是在濱河造成了極大的恐慌刮吧,老刑警劉巖夫嗓,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酗昼,死亡現(xiàn)場(chǎng)離奇詭異石挂,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蚓庭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仅仆,“玉大人器赞,你說我怎么就攤上這事∧拱荩” “怎么了港柜?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長咳榜。 經(jīng)常有香客問我夏醉,道長,這世上最難降的妖魔是什么涌韩? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任畔柔,我火速辦了婚禮,結(jié)果婚禮上臣樱,老公的妹妹穿的比我還像新娘靶擦。我一直安慰自己,他們只是感情好雇毫,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布玄捕。 她就那樣靜靜地躺著,像睡著了一般棚放。 火紅的嫁衣襯著肌膚如雪枚粘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天席吴,我揣著相機(jī)與錄音赌结,去河邊找鬼。 笑死孝冒,一個(gè)胖子當(dāng)著我的面吹牛柬姚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播庄涡,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼量承,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起撕捍,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤拿穴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后忧风,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體默色,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年狮腿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了腿宰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡缘厢,死狀恐怖吃度,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情贴硫,我是刑警寧澤椿每,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站英遭,受9級(jí)特大地震影響间护,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贪绘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一兑牡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧税灌,春花似錦均函、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至粘秆,卻和暖如春如迟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背攻走。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來泰國打工殷勘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人昔搂。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓玲销,卻偏偏與公主長得像,于是被迫代替她去往敵國和親摘符。 傳聞我的和親對(duì)象是個(gè)殘疾皇子贤斜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容