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

Linux軟體安裝
Linux排查問題套路
Linux指令詳解
一 Linux通用知識
說到作業系統,如果讀大學的時候是計算機專業,那肯定就會上這門課,我猜測當時的你們想法是這樣的
- 上大學使用的都是Windows系統,界面友好,上手快,習慣性的點點點操作
- 大部分的課程在windows中操作,比如C++用的Vistual Studio,學資料庫的SQL Server
- 大學中的作業系統更加偏向理論研究,至于到底是怎麼運作的可能懵懵懂懂
知道上了研究所學生到了實驗室,我發現實驗室的怎麼都是對着一個視窗操作,瞬間覺得以前的計算機知識白學了,于是開啟了Linux之路。
其實大部分的系統,團購,打車,快遞都部署在服務端,其中都包含Linux,什麼雲計算,虛拟化,大資料等也是基于Linux,那為啥在大學裡都是windows?
咦
為什麼說了解Linux的生态,會讓你學到更多的新技術?
我們要知道很多的大牛通過Linux來開發各種如那件,資料庫Mysql,kafka,Spark等技術都會預設提供Linux的安裝運維手冊,是以盡快的進入Linux的世界對于個人的進步和職業發展都是非常有好處的
每當我們買了手機,買了電腦,上手就可以用,這是因為預裝了作業系統。是以呀,那有什麼歲月靜好,知識有人幫我們負重前行了,作業系統就是這樣一個角色。
那麼作業系統幫助我們做了哪些事兒呢?
- 跑幾個問題,桌面上的圖示是什麼,為啥子敲一下鍵盤就出來了畫面
- 電腦咋個知道我們滑鼠點選的那個位置
- 為什麼我一回車,這些字元就飛出去了
這幾個任何一個操作,基本上都覆寫了作業系統的所有功能,那我來認識熟悉而預設的作業系統
1 vmvare
虛拟機是什麼?
虛拟機通過軟體來模拟具有完整硬體系統功能的,運作在完全隔離的完整計算機系統。每個虛拟計算機可以獨立運作并安裝各種軟體和應用
- 首先從官方下載下傳并解壓虛拟機安裝包,然後輕按兩下運作
輕按兩下VMVARE
- 下一步
接受許可進行下一步
- 選擇安裝位置,最好不要出現中文
自定義路徑
- 設定使用者體驗選項,都可以選擇
設定使用者體驗
- 在桌面和開始菜單程式檔案夾建立快捷方式。
建立快捷方式
- 百度一個許可證ZG1WH-ATY96-H80QP-X7PEX-Y30V4
輸入許可證密鑰
- 打開vmvare
打開vmvare
- 點選建立虛拟機向導 選擇檔案-建立虛拟機打開
建立虛拟機
- 選擇自定義 下一步
選擇自定義
- 下一步
選擇下一步
- 安裝客戶機作業系統,選擇稍後安裝作業系統
選擇稍後安裝作業系統
- 命名虛拟機 更改虛拟機名稱并選擇安裝得位置
命名虛拟機
- 更改主機配置進行處理的配置設定
處理器核心數配置設定
- 虛拟記憶體配置設定:注意記憶體配置設定不能大于主機記憶體
- 虛拟記憶體配置設定
- 設定虛拟機網絡得類型,這裡選擇NAT
網絡類型暫設為NAT
- IO控制器選擇,選擇LSILogic
- 磁盤類型選擇SCSI即可
- 建立磁盤選擇建立新虛拟磁盤
建立新虛拟磁盤
- 指定磁盤檔案
指定磁盤檔案
- 修改路徑
- 選擇自定義硬體
選擇自定義硬體
- 選擇centos得ISO鏡像檔案,先選擇CDDVN---ISO鏡像檔案---浏覽找到鏡像、
導入鏡像
- 點選完成
完成
- 開啟虛拟機 選擇配置好的虛拟機
開啟虛拟機
- 滑鼠移動到虛拟機内部,上下鍵選擇install centos7然後回車
install centos7
- 選擇軟體選擇最小安裝,選擇語言
- 選擇最小化安裝
- 軟體安裝
軟體安裝
- 選擇計算節點
選擇計算節點
- 開始安裝
開始安裝
- 設定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
網絡檢測
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
結果
result
注釋
單行注釋
使用#開頭的行為注釋,會被解釋器忽略
多行注釋
shell傳遞參數
在執行shell的時候,指令行指定參數,如下所示
#!/bin/bash
James="小皇帝"
echo "執行的檔案名為:$0"
echo "第一個參數為:$1"
echo "第二個參數為:$2"
執行
./param.sh 1 2
結果
result
幾個特殊字元
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
結果
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
結果
img
9 test
shell中的test用于檢查某個條件是否成立
result
案例
#!/bin/bash
# author:xiaolan
num1=55
num2=55
if test $[num1] -eq $[num2]
then
echo '兩個數相等!'
else
echo '兩個數不相等!'
fi
結果
result
字元串比較
字元串比較
#!/bin/bash
# author:xiaolan
num1="xiaolan"
num2="xiaolna"
if test $num1 = $num2
then
echo '兩個字元串相等!'
else
echo '兩個字元串不相等!'
fi
結果
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
img
/dev/null檔案
寫入到它的内容都會被丢棄,會起到"禁止輸出"的效果,如果希望屏蔽stdout和stderr “ command > /dev/null 2>&1
注意:Linux指令行都會打開三個檔案
- 标準輸入檔案:stdin檔案描述符為0
- 标準輸出檔案:stdout檔案描述符為1
- 标準錯誤檔案:stderr檔案描述符2
12 運算符
下表列出了常用的算術運算符,假定變量 a 為 2,變量 b 為 3:
算術運算符
算術運算符
關系運算符
關系
運算符
布爾運算符
布爾運算符
邏輯運算符
邏輯運算符
字元串運算符
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"
結果
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 &