天天看點

52 圖初探 Linux 通用知識

這篇文章是Linux的超級基礎且經常用到的内容,不多說,直接肝!

52 圖初探 Linux 通用知識

Linux軟體安裝

52 圖初探 Linux 通用知識

Linux排查問題套路

52 圖初探 Linux 通用知識

Linux指令詳解

一 Linux通用知識

說到作業系統,如果讀大學的時候是計算機專業,那肯定就會上這門課,我猜測當時的你們想法是這樣的
  • 上大學使用的都是Windows系統,界面友好,上手快,習慣性的點點點操作
  • 大部分的課程在windows中操作,比如C++用的Vistual Studio,學資料庫的SQL Server
  • 大學中的作業系統更加偏向理論研究,至于到底是怎麼運作的可能懵懵懂懂

知道上了研究所學生到了實驗室,我發現實驗室的怎麼都是對着一個視窗操作,瞬間覺得以前的計算機知識白學了,于是開啟了Linux之路。

其實大部分的系統,團購,打車,快遞都部署在服務端,其中都包含Linux,什麼雲計算,虛拟化,大資料等也是基于Linux,那為啥在大學裡都是windows?

52 圖初探 Linux 通用知識

為什麼說了解Linux的生态,會讓你學到更多的新技術?

我們要知道很多的大牛通過Linux來開發各種如那件,資料庫Mysql,kafka,Spark等技術都會預設提供Linux的安裝運維手冊,是以盡快的進入Linux的世界對于個人的進步和職業發展都是非常有好處的

每當我們買了手機,買了電腦,上手就可以用,這是因為預裝了作業系統。是以呀,那有什麼歲月靜好,知識有人幫我們負重前行了,作業系統就是這樣一個角色。

那麼作業系統幫助我們做了哪些事兒呢?
  • 跑幾個問題,桌面上的圖示是什麼,為啥子敲一下鍵盤就出來了畫面
  • 電腦咋個知道我們滑鼠點選的那個位置
  • 為什麼我一回車,這些字元就飛出去了

這幾個任何一個操作,基本上都覆寫了作業系統的所有功能,那我來認識熟悉而預設的作業系統

1 vmvare

虛拟機是什麼?

虛拟機通過軟體來模拟具有完整硬體系統功能的,運作在完全隔離的完整計算機系統。每個虛拟計算機可以獨立運作并安裝各種軟體和應用

  • 首先從官方下載下傳并解壓虛拟機安裝包,然後輕按兩下運作
52 圖初探 Linux 通用知識

輕按兩下VMVARE

  • 下一步
52 圖初探 Linux 通用知識

接受許可進行下一步

  • 選擇安裝位置,最好不要出現中文
52 圖初探 Linux 通用知識

自定義路徑

  • 設定使用者體驗選項,都可以選擇
52 圖初探 Linux 通用知識

設定使用者體驗

  • 在桌面和開始菜單程式檔案夾建立快捷方式。
52 圖初探 Linux 通用知識

建立快捷方式

  • 百度一個許可證ZG1WH-ATY96-H80QP-X7PEX-Y30V4
52 圖初探 Linux 通用知識

輸入許可證密鑰

  • 打開vmvare
52 圖初探 Linux 通用知識

打開vmvare

  • 點選建立虛拟機向導 選擇檔案-建立虛拟機打開
52 圖初探 Linux 通用知識

建立虛拟機

  • 選擇自定義 下一步
52 圖初探 Linux 通用知識

選擇自定義

  • 下一步
52 圖初探 Linux 通用知識

選擇下一步

  • 安裝客戶機作業系統,選擇稍後安裝作業系統
52 圖初探 Linux 通用知識

選擇稍後安裝作業系統

  • 命名虛拟機 更改虛拟機名稱并選擇安裝得位置
52 圖初探 Linux 通用知識

命名虛拟機

  • 更改主機配置進行處理的配置設定
52 圖初探 Linux 通用知識

處理器核心數配置設定

  • 虛拟記憶體配置設定:注意記憶體配置設定不能大于主機記憶體
  • 52 圖初探 Linux 通用知識
  • 虛拟記憶體配置設定
  • 設定虛拟機網絡得類型,這裡選擇NAT
52 圖初探 Linux 通用知識

網絡類型暫設為NAT

  • IO控制器選擇,選擇LSILogic
  • 磁盤類型選擇SCSI即可
52 圖初探 Linux 通用知識
  • 建立磁盤選擇建立新虛拟磁盤
52 圖初探 Linux 通用知識

建立新虛拟磁盤

  • 指定磁盤檔案
52 圖初探 Linux 通用知識

指定磁盤檔案

  • 修改路徑
  • 選擇自定義硬體
52 圖初探 Linux 通用知識

選擇自定義硬體

  • 選擇centos得ISO鏡像檔案,先選擇CDDVN---ISO鏡像檔案---浏覽找到鏡像、
52 圖初探 Linux 通用知識

導入鏡像

  • 點選完成
52 圖初探 Linux 通用知識

完成

  • 開啟虛拟機 選擇配置好的虛拟機
52 圖初探 Linux 通用知識

開啟虛拟機

  • 滑鼠移動到虛拟機内部,上下鍵選擇install centos7然後回車
52 圖初探 Linux 通用知識

install centos7

  • 選擇軟體選擇最小安裝,選擇語言
  • 52 圖初探 Linux 通用知識
  • 選擇最小化安裝
  • 軟體安裝
52 圖初探 Linux 通用知識

軟體安裝

  • 選擇計算節點
52 圖初探 Linux 通用知識

選擇計算節點

  • 開始安裝
52 圖初探 Linux 通用知識

開始安裝

  • 設定root密碼,點選完成配置
  • 52 圖初探 Linux 通用知識
  • 設定root密碼

2 進行網絡配置

現在我們的centos還是個空殼子,如果我們需要通路外網,則需要進一步配置一波
  • 打開配置檔案
#vi /etc/sysconfig/network-scripts/ifcfg-eth0      
  • 更改相應的配置
DEVICE=eth0 #裝置名稱,可根據ifcofnig指令檢視到。
BOOTPROTO=dhcp #連接配接方式,dhcp會自動配置設定位址,此時不需要在下面設定ip和網關
HWADDR=00:0C:29:AD:66:9F #硬體位址,可根據ifcofnig指令檢視到。
ONBOOT=yes #yes表示啟動就執行該配置,需要改為yes      
  • service restart network完事 ping www.baidu.com
52 圖初探 Linux 通用知識

網絡檢測

3 安裝xshell

我們已經完成了安裝vmvare并導入了centos,那麼我們如何去玩兒這個看似很牛皮的玩意?直接上手?不習慣吧,那我們用個遠端工具連連

Xshell 是一個強大的安全終端模拟軟體,Xshell 可以在 Windows 界面下用來通路遠端不同系統下的伺服器,進而比較好的達到遠端控制終端的目的。除此之外,其還有豐富的外觀配色方案以及樣式選擇。

  • 下載下傳xshell(别去下了,賊慢麻煩)
  • 連結測試(因為使用的ssh,那麼確定centos中22端口已經打開了)
  • 檔案-----屬性進行XHSELL相關的配置,比如配色,字型大小等

4 基本指令的使用

指令太多,必須要全部記憶,但是要學會如何查每個指令的參數。我畫了個思維導圖可以當作小字典檢視,下面列出可能我們使用頻率會更高的指令
執行指令 含義
cd ~ 切換到登入使用者的主目錄即/home/使用者名
cd / 進入根目錄
cd /home/lj 将/home/LJ作為目前的目錄
cd .. 傳回到上一層目錄
cd - 回到上次所在的目錄
cd ../../ 去上上層目錄
ls 檢視目前目錄
ls -la 檢視目前目錄的檔案資訊 包含了隐藏檔案
pwd 檢視目前目錄的絕對路徑
cp /目錄/1.txt /目錄/ 複制
rm 删除
q! 不儲存檔案退出
wq! 儲存退出
hostname 檢視目前主機名
ifconfig 檢視網卡相關資訊
firewall-cmd --state centos7檢視卡其關閉防火牆狀态

5 使用者管理

剛才說了可以建立自己的使用者,那麼怎麼建立自己的使用者呢?

添加使用者

useradd -d /home/lanj -m lanj      

更改密碼

passwd lanj      

系統有很多的使用者,怎麼進行使用者的切換?

su -lanj      
su -root      
如果需要

使用者之間的切換使用su指令實作。root使用者可以無需輸入密碼切換到lj使用者,如果普通使用者lj切換到root使用者則需要輸入密碼,我們看看

su -lj

su -root

如何切換路徑,絕對路徑和相對路徑

6 軟體的安裝方法

在Linux安裝相關的工具分為三種方式,分别為源碼安裝,RPM包安裝以及YUM安裝方式

源碼安裝方式

開源軟體都會提供源碼下載下傳的方式,對于源代碼安裝方式的好處即可以定制軟體功能,安裝需要的子產品,不需要的子產品可以屏蔽,友善管理,解除安裝等。

對于源碼安裝的步驟如下

  • 下載下傳解壓源碼
一般下載下傳下來源碼以後都會存在一個Readme檔案,首先應該仔細閱讀這個檔案,可能有很多需要修複的以前人家遇見的問題都會在上面做記錄,以免入坑不回頭
  • 分析平台環境
  • 編譯安裝軟體

這裡會使用make工具,make工具就會通過makefile檔案來實作。makefile檔案是一種按照某種文法來編寫且定義了各個檔案的依賴關系。

在Linux中,習慣使用Makefile替代makefile,當使用者執行configure後,就會在目前目錄生成這個makefile檔案,然後使用者輸入make就開始運作。我們看看Makefile是怎麼個有樣子

edit : main.o kbd.o command.o display.o \
        insert.o search.o files.o utils.o       /*注釋:如果後面這些.o檔案比edit可執行檔案新,那麼才會去執行下面這句指令*/
    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指令過後即進入了編譯階段,編譯時間根據軟體的程式規模大小以及硬體配置有關,當輸入make install就會開始安裝軟體,我們可以指定安裝目錄也可以不指定,系統将給你預設指定目錄為/user/local,這樣安裝完畢。

RPM安裝方式

RPM是Red Hat公司開發出來的Linux下的軟體包管理工具。這些以.rpm結尾的包包含了已經編譯好的二進制可執行檔案,一句話即将源代碼進行編譯,安裝,然後封裝為RPM包

優點即安裝簡單,友善,因為已經編譯完成,安裝隻是用來驗證和解壓過程,缺點也比較明顯,過于依賴于作業系統,要求RPM包的安裝環境必須和RPM封裝時的環境保持一緻,

RPM包是怎麼個樣子?
server-2.1.0-22.I386.rpm      

其中:server為如那件的名稱

2.1.0:軟體的版本号

22:軟體更新發行的次數

i386:适合硬體發行的次數

.rpm:rpm軟體包的辨別

YUM安裝方式

  • 檢視是否存在yum
rpm -qa | grep yum      
  • 沒有則安裝
rpm -ivh yum-*.noarch.rpm      
  • 自定義yum的配置。我們可以通過打開/etc/yum.repos.d/Centos-Base.repo進行源的配置
YUM有哪些特點呢
  • 安裝友善
  • 可以同時配置多個源
  • 配置檔案簡單明了
推薦個不錯的yum源
  • EPEL

是一個針對紅帽企業版Linux及衍生發行版的一個高品質附加軟體包項目。網址:http://fedoraproject.org/wiki/EPEL/zh-cn

  • RPMForge
這是一個第三方軟體倉庫,被centos社群認為是一個最安全最穩定的一個軟體倉庫

6 shell

大部分情況都是Linux作業系統,那麼熟悉指令的用法以外,熟悉使用shell腳本能介紹不少時間

shell是什麼

“ 平時經常在Linux作業系統中使用各種指令,比如檢視目前的目錄檔案,我們會使用"ls"或者"ls -l",這些字元串參數實際上會被"某段程式"執行并啟動它。這個負責将使用者輸入的字元串轉換為需要執行程式的東西叫做"shell"。即幫使用者更友善使用作業系統接口的“殼”。同樣的殼還有當我輸入Maven+相關參數的時候是不是就會去執行相應的功能,我們駛入sql語句的時候,資料庫引擎是不是也會各種調用,一樣的道理

嘗試編寫第一個shell

vim建立打開一個檔案,擴充名為.sh。如下所示
#!/bin/bash #告訴系統使用什麼解析器
echo "Hello xiaolan !" # echo進行輸出      
  • 執行方法1
chmod +x ./hello.sh ./hello.sh      
  • 執行方法2
/bin/sh hello.sh      

變量

變量名和等号之間不能有空格

定義變量注意事項

  • 命名首個字元不能是數字,隻能使用英文字母、數字和下劃線
  • 不能使用标點符号
  • 不能使用bash中關鍵字

變量使用

使用變量(使用變量的過程中,最好加上花括号),隻需要在變量前面加上美元符号即可
#!/bin/bash
James="小皇帝"
echo $James      

隻讀變量

使用readonly将變量定義為隻讀,隻讀意味着不能改變
#!/bin/bash
James="小皇帝"
readonly James
James="登哥"      

删除變量

使用unset删除變量 變量删除以後不能再次使用,且不能删除隻讀變量
#!/bin/bash
James="小皇帝"
unset James
echo $James #不會有任何輸出      

變量類型

  • 局部變量
僅目前shell可用
  • 環境變量
所有程式都能通路環境變量
  • shell變量
通過一部分環境變量和shell變量保證shell的正常運作

字元串

使用字元串的過程中,既可以用雙引号也可以用單引号,也可以不用
  • 單引号
單引号内容原樣輸出,不能包含變量,且不能出現單獨單引号
  • 雙引号
可以出現轉義字元
#!/bin/bash
James="小皇帝"
str="\"$ James\"! oh my gad \n "
echo -e $str      

擷取字元串長度

使用#
string="qwert"
echo $(#string)

# 提取子字元串
echo $(string:1:3)
#查找字元串
echo      

數組

支援以為數組

定義數組

數組元素使用“空格”隔開
array=(value1,value2,value3)      

讀取數組

value1=${array[0]}      

使用@輸出數組所有元素

echo ${array[@]}      

擷取數組中所有元素以及數組長度

#! /bin/bash
# author:xiaolan
array[0]=a
array[1]=b
array[3]=c

echo “數組的元素為:${array[*]}”
echo “數組的元素為:${array[@]}”
echo “數組的個數為:${#array[*]}”
echo “數組的個數為:${#array[@]}”      

執行

./array.sh      

結果

52 圖初探 Linux 通用知識

result

注釋

單行注釋

使用#開頭的行為注釋,會被解釋器忽略

多行注釋

shell傳遞參數

在執行shell的時候,指令行指定參數,如下所示
#!/bin/bash
James="小皇帝"
echo "執行的檔案名為:$0"
echo "第一個參數為:$1"
echo "第二個參數為:$2"      

執行

./param.sh 1 2

結果

52 圖初探 Linux 通用知識

result

幾個特殊字元

52 圖初探 Linux 通用知識

result

案例(partionnal.sh)

#!/bin/bash
# author:xiaolan

echo "-- \$* 示範 ---"
for i in "$*"; do
    echo $i
done

echo "-- \$@ 示範 ---"
for i in "$@"; do
    echo $i
done      

執行

./demo2.sh 1 2 3      

結果

52 圖初探 Linux 通用知識

img

相同點:都是會引用所有參數

不同點:在使用雙引号的時候。如果腳本運作時兩個參數為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" 姓名 科目 分數  
printf "%-8s %-8s %-4f\n" 小明 數學 97
printf "%-8s %-8s %-4f\n" 小話 國文 89
printf "%-8s %-8s %-4f\n" 王三 英語 93      

結果

52 圖初探 Linux 通用知識

img

9 test

shell中的test用于檢查某個條件是否成立
52 圖初探 Linux 通用知識

result

案例

#!/bin/bash
# author:xiaolan
num1=55
num2=55
if test $[num1] -eq $[num2]
then
    echo '兩個數相等!'
else
    echo '兩個數不相等!'
fi      

結果

52 圖初探 Linux 通用知識

result

字元串比較

52 圖初探 Linux 通用知識

字元串比較

#!/bin/bash
# author:xiaolan
num1="xiaolan"
num2="xiaolna"
if test $num1 = $num2
then
    echo '兩個字元串相等!'
else
    echo '兩個字元串不相等!'
fi      

結果

52 圖初探 Linux 通用知識

result

流程

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      

案例 判斷兩數值是否相等

#!/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循環

for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done      

while語句

“ 通常用于從輸入檔案不斷讀取資料
while condition
do
    exec
done

#!/bin/bash
# author:xiaolan
int=1
while(( $int<=6 ))
do
    echo $int
    let "int++"# 用于執行一個或者多個
done      

無限循環

while true
do
    exec
done      

case語句

多選擇語句。取值後面為單詞in,每一個模式以")"結束。比對發現取值符合某一模式後,其間所有指令開始執行直至 ";;"。
#!/bin/bash
# author:xiaolan
echo '輸入 1 到 3 之間的數字:'
echo '你輸入的數字為:'
read aNum
case $aNum in
    1)  echo '你選擇了 1'
    ;;
    2)  echo '你選擇了 2'
    ;;
    3)  echo '你選擇了 3'
    ;;
    *)  echo '你沒有輸入 1 到 3 之間的數字'
    ;;
esac      

輸入不同的内容,會有不同的結果,例如:

輸入 1 到 4 之間的數字:
你輸入的數字為:
3
你選擇了 3      

跳出循環

break

break指令允許跳出所有循環
#!/bin/bash
# author:xiaolan
while :
do
    echo -n "輸入 1 到 3 之間的數字:"
    read aNum
    case $aNum in
        1|2|3) echo "你輸入的數字為 $aNum!"
        ;;
        *) echo "你輸入的數字不是 1 到 3 之間的! 遊戲結束"
            break
        ;;
    esac
done      

continue

跳出當次循環
#!/bin/bash
while :
do
    echo -n "輸入 1 到 3 之間的數字: "
    read aNum
    case $aNum in
        1|2|3|4|5) echo "你輸入的數字為 $aNum!"
        ;;
        *) echo "你輸入的數字不是 1 到 3 之間的!"
            continue
            echo "遊戲結束"
        ;;
    esac
done      

10 shell函數

使用者定義函數,然後在shell腳本中随便調用,格式如下
[ function ] funname [()]

{

    action;

    [return int;]

}      

例子

#!/bin/bash
# author:xiaolan

Fun1(){
    echo "這是我的第一個 shell 函數!"
}
echo "-----函數開始執行-----"
Fun1
echo "-----函數執行完畢-----"      

帶return語句

#!/bin/bash
# author:xiaolan

FunReturn(){
    echo "這個函數會對輸入的兩個數字進行相加運算..."
    echo "輸入第一個數字: "
    read aNum
    echo "輸入第二個數字: "
    read anotherNum
    echo "兩個數字分别為 $aNum 和 $anotherNum !"
    return $(($aNum+$anotherNum))
}
FunReturn
echo "輸入的兩個數字之和為 $? !"      

函數參數

#!/bin/bash
# author:xiaolan

funParam(){
    echo "第一個參數為 $1 !"
    echo "第二個參數為 $2 !"
    echo "參數總數有 $# 個!"
    echo "作為一個字元串輸出所有參數 $* !"
}
funParam 1 2 3 4      

shell重定向

輸出重定向

command1 > file # 如果file中存在内容将被清空覆寫。如果追加使用command1 >>file
ls -l > dir.txt      

cat dir.txt

52 圖初探 Linux 通用知識

img

/dev/null檔案

寫入到它的内容都會被丢棄,會起到"禁止輸出"的效果,如果希望屏蔽stdout和stderr  “ command > /dev/null 2>&1

注意:Linux指令行都會打開三個檔案

  • 标準輸入檔案:stdin檔案描述符為0
  • 标準輸出檔案:stdout檔案描述符為1
  • 标準錯誤檔案:stderr檔案描述符2

12 運算符

下表列出了常用的算術運算符,假定變量 a 為 2,變量 b 為 3:

算術運算符

52 圖初探 Linux 通用知識

算術運算符

關系運算符

52 圖初探 Linux 通用知識

關系

運算符

布爾運算符

52 圖初探 Linux 通用知識

布爾運算符

邏輯運算符

52 圖初探 Linux 通用知識

邏輯運算符

字元串運算符

52 圖初探 Linux 通用知識

12 shell實戰

  • 請将目前目錄中demo.txt第二行第三列資料輸出到demo2.txt中
cat demo.txt|awk ’NR==2{print $3}’ >demo2.txt      
  • 日志如下統計通路ip最多的前10個
awk ’{print $1}’ *.log | sort | uniq -c | sort -nr | head -n      

uniq - 删除排序檔案中的重複行 sort對于文本進行排序 -l 按照目前環境排序. -m 合并已經排序好的檔案,不排序. -n 按照字元串的數值順序比較,暗含-b -r 颠倒比較的結果.

  • 檢視占用記憶體最大的程序的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′      
  • 如何檢查檔案系統中是否存在某個檔案
if [-f /var/log/messages]
then
echo "File exts"
fi      
  • 每個腳本開始的 #!/bin/sh 或 #!/bin/bash 表示什麼意思 ?
#!/bin/bash 表示腳本使用 /bin/bash。對于 python 腳本,就是 #!/usr/bin/python
  • &和&&差別
“ “&” 腳本在背景運作時使用它。“&&”目前一個腳本成功完成才執行後面的指令
  • 腳本檔案中,如何将其重定向标準輸出和标準錯誤流到 log.txt 檔案 ?
./a.sh >log.txt 2>&1      
  • 如何計算本地使用者的數目
wc -l /etc/passwd | cut -d      
  • shell中進行字元串比較和數字比較
[ $A == $B ] – 用于字元串比較
[ $A -eq $B ] – 用于數字比較      
  • 去掉字元串空格
echo $string | tr -d " "
  • 統計記憶體使用
#! /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"      

結果

52 圖初探 Linux 通用知識

result

  • 批量更改檔案名
批量修改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
##建立一個目錄,為了避免目錄已經存在,是以要加一個複雜的字尾名
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系統都自帶了這個程式

依次處理每一行,并讀取裡面的每一個字段。對于處理生産環境的日志有着非常高校的作用

基本用法

# 格式
awk 做什麼 檔案嗎
awk 'print $0' lan.txt      

上面lan.txt是awk需要處理的文本檔案。前面單引号裡面有一個大括号,單引号裡面就是每一行的處理動作。其中print為列印指令,

上菜

echo 'my name is lanlan' | awk '{print $0}'      

上面代碼中,print 0位目前行,是以執行結果就是把每一行原樣列印出來∗∗上菜∗∗¨G56G上面代碼中,print0即将标準輸入my name is lanlan ,c重新列印一遍

awk根據空格和制表符,将每一行分成若幹段,依次為2

echo 'my name is lanlan'| awk '{print $3}'      

為了友善,我們直接使用/etc/passwd檔案進行操作,

awk -F ':' '{ print $1 }' demo.txt      

3 變量

上面我們說了,可以使用符号 “3代表第一個字段,第二個字段,第三個字段¨G57G為了友善,我們直接使用/etc/passwd檔案進行操作,¨G58G∗∗3變量∗∗上面我們說了,可以使用符号“+” 數字的方式表示第幾個字段,其實還有一些變量可以直接表示相應的字段。比如 “$NFb” 表示最後一個字段

echo 'my name is lanlan'| awk '{print $NF}'
awk -F ':' '{print NR ") " $1}' demo.txtshe      

這裡出現了雙引号,表示原樣輸出

其他常用的内置變量

  • FILENAME:目前檔案名
  • FS:字段分隔符,預設是空格和制表符。
  • RS:行分隔符,用于分割每一行,預設是換行符。
  • OFS:輸出字段的分隔符,用于列印時分隔字段,預設為空格。
  • ORS:輸出記錄的分隔符,用于列印時分隔記錄,預設為換行符。
  • OFMT:數字輸出的格式,預設為%.6g。

4 函數

既然算是一門語言,函數當然少不了,下面看一波常用的函數

函數toupper()用于将字元轉為大寫

awk -F ':' '{ print toupper($1) }' demo.txt      

可以發現第一個字段輸出的時候變成了大寫

  • tolower():字元轉為小寫。
  • length():傳回字元串長度。
  • substr():傳回子字元串。
  • sin():正弦。
  • cos():餘弦。
  • sqrt():平方根。
  • rand():随機數。

5 條件**

通過使用相應的條件,過濾出自己想要的内容

awk '條件 動作' 檔案名      

上菜

$ awk -F ':' '/usr/ {print $1}' demo.txt
root
daemon
bin
sys      

這裡/usr/表示隻輸出包含usr的行

這個例子輸出奇數行

# 輸出奇數行
$ 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語句編寫比較複雜的内容

$ awk -F ':' '{if ($1 > "m") print $1}' demo.txt
root
sys
sync      

上面代碼輸出第一個字段的第一個字元大于​

​m​

​的行。

if結構還可以指定else部分。

8 程序管理與定時任務和背景執行

crond是什麼?

crond是一個可以在指定時間執行一個shell腳本或者一系列的Linux指令。和Windows下的計劃任務類似。當安裝完作業系統後,預設會安裝這個服務工具,并且會自動啟動crond程序。

在Linux中任務的排程分為兩類

  • 系統任務的排程
系統會周期性的執行一些工作,比如說寫緩存的資料到硬碟,清理日志等
  • 使用者任務的排程
使用者定期也會執行一些任務,比如使用者資料的備份,定時的郵件提醒等,這些都是通過crondtab來設定

那麼crontab到底怎麼用麼

首先看看crontab的使用格式:

crontab -u user file      

常見的選項

  • -u user:很明顯是需要表明是那個使用者的crontab服務,别瞎搞
  • file:file是命名檔案的名字,表示将file作為crontab的任務清單檔案并載入到crontab中
  • -e:e為edit,表示标記某個使用者的crontab檔案内容
  • -l:顯示使用者的crontab檔案、

crontab的含義

建立的crontab檔案,每一行代表一項任務,每個字段都有對應的設定規則,一共分為6個字段,分别為:

minute hour day month week command      
  • minute:區間 0-59
  • hour:區間0-23
  • day:區間0-31
  • month:區間1-12
  • week:區間0-7 周日可以是0/7
  • command

這裡的command代表的是需要執行的而指令,通常為腳本檔案,

除了上面幾個字段,還需要注意幾個特殊字段

  • *:代表所欲嘔可能的值
  • ,:通過,來表示區間範圍的值
  • _:整數之間的中杠表示一個證書範圍
  • 正斜線:表示時間的間隔頻率,比如0-23/2表示每兩個小時執行一次

    開始放幾個例子**

crontab -e
0 5 * * * /root/bin/backup.sh      

這代表的是每天早上5點運作backup.sh

每個工作日11:59pm進行備份作業
59 11 * * 1-5 /root/bin/backup.sh      
每五分鐘運作一個指令
*/5 * * * * /root/bin/check-status.sh      
crontab有哪些選項

crontab -e:修 改crontab檔案,如果檔案不存在會自動建立

crontab -l:顯示crontab檔案

crontab -r:删除crontab 檔案

crontab -ir:删除crontab檔案前提醒使用者

9 背景運作

用途:不挂斷的運作指令

文法:nohup Command [ Arg … ] [&]

  • 無論是否将 nohup 指令的輸出重定向到終端,輸出都将附加到目前目錄的 nohup.out 檔案中。
  • 如果目前目錄的 "nohup.out" 檔案不可寫,輸出重定向到"home/nohup.out"
  • 如果沒有檔案能建立或打開以用于追加,那麼 Command 參數指定的指令不可調用。
  • 126 可以查找但不能調用 Command 參數指定的指令。
  • 127 nohup 指令發生錯誤或不能查找由 Command 參數指定的指令。
  • 否則,nohup 指令的退出狀态是 Command 參數指定指令的退出狀态。
nohup command &