日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux sed 测试文件夹,测试开发笔记二(Linux与Shell脚本)

發布時間:2024/10/12 linux 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux sed 测试文件夹,测试开发笔记二(Linux与Shell脚本) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

01 | Linux系統和Shell環境準備

運行shell

test.sh

#!/bin/bash

echo "hello"

運行腳本

方式一:

chmod+x ./test.sh

./test.sh

方式二:

/bin/sh test.sh 若以此方式運行,test.sh(shell腳本)中的 #!/bin/bash則不起作用

02 | Linux常用命令(文件/網絡/性能)

文件

常用命令

ls | cd | pwd | mkdir | rmdir | cp | rm | mv

文件屬性

image.png

修改文件屬性

字母模式

chmod a+rwx file # 所有人 賦予 file1 讀、寫、執行 的權限

chmod a-rwx file # 所有人 取消 file1 讀、寫、執行 的權限

chmod u+r file # 只給 file1的擁有者 賦予 讀 的權限

chmod g-w file # 只取消 同組人 寫 的權限

chmod o+x file # 只給 其他人 賦予 file1 執行 的權限

chmod ug+x,o-w file # 給文件擁有者和同組人賦予執行權限,取消其他人的寫權限

數字模式

chmod 777 file 等價于 chmod a+rwx file1 -rwxrwxrwx

chmod 765 file 等價于 chmod u+rwx,g+rw,o+rx file1 -rwxrw-r-x

chmod 432 file 等價于 chmod u+r,g+wx,o+w -r---wx-w-

網絡

ping

1.-c ping的次數

2.-l 每次ping的時間間隔

netstat 打印Linux網絡系統的狀態信息

1.-t 列出所有tcp

2.-u 列出所有udp

3.-l 只顯示監聽端口

4.-n 拒絕顯示別名,能顯示數字的全部轉化成數字(重要)

5.-p 顯示進程的pid和名字

練習

netstat -apn | grep ssh 查看指定程序的端口

netstat -apn | grep ":80" 查看運行在指定端口的進程

性能

top 持續監視系統性能

ps 查看進程信息

1.-aux 顯示所有進程,包括用戶、分組情況

03 | Linux三劍客與管道使用

管道“|”:左邊的輸出作為右邊的輸入

正則表達式

舉例

1.\bword\b 找出所有的word單詞,word前后要有空格

2.\bword\b.*\bluck\b 第1個單詞是word,最后1個單詞是luck,中間為任意內容

3.0\d{2}-\d{8} 以0開頭+兩個數字+“-”+8個數字

常用的元字符

符號

說明

.

匹配換行符以外的任意字符

\w

匹配字母或數字或下劃線或漢字

\s

匹配任意的空白符

\d

匹配數字

\b

匹配單詞的開始或結束

^

匹配行首

$

匹配行尾

常用的限定符

符號

說明

*

重復零次或更多次

+

重復1次或更多次

重復零次或1次

{n}

重復n次

{n,}

重復n次或更多次,重復上限或下限

{n,m}

重復n到m次

實例

1.匹配以字母a開頭的單詞:\ba\w*\b

2.匹配剛好6個字符的單詞:\b\w{6}\b

3.匹配1個或更多連續的數字:\d+

4.5到12位QQ號:\d{5,12}

grep

grep [options] pattern [file...]

pattern 可以是正則表達式

參數

1.-v 顯示不被pattern匹配到的行

2.-i 忽略字符大小寫

3.-n 顯示行號

4.-c 統計匹配的行數

5.-o 僅顯示匹配到的字符串

6.-E 使用ERE,相當于egrep

sed

流處理器,一次處理一行內容

若sed后不加任何參數,則只操作模式空間的內容,不操作原文件;若想修改原文件,需加參數-i

處理流程

image.png

格式

sed [-hn..][-e

命令解析

1.-h 顯示幫助

2.-n 靜默模式,僅顯示script處理后的結果

3.-e

4.-f

常用命令

1.a:新增; sed -e '4a newline' ;在第4行后新增1行,內容為“newline”

2.c:取代;sed -e '2,5c number';用“number”取代2到5行的內容

3.d:刪除;sed -e '2,5d';刪除2到5行

4.i:插入;sed -e '2i newline';在第2行前插入1行,內容為“newline”

5.p:打印;sed -n '/root/p';打印與root匹配的行

6.s:取代;sed -e 's/old/new/g';全局替換,若沒有g則只替換每行的第一個

注:-e可省略

練習

sed -i '$a abc\ndef\nghi' file 在文件末尾插入

sed -i '1i abc\ndef\nghi' file 在文件開頭插入

-sed和grep的區別

1.grep只能查詢

2.sed能夠增刪改查

awk

把文件逐行的讀入,以空格為默認分隔符將每行切片,切開的部分再進行后續處理

處理流程

image.png

格式

awk 'pattern + action' [FILE]

常用參數

1.BEGIN 處理文本之前要執行的操作

2.END 處理文本之后要執行的操作

3.FS(field separator) 輸入字段分隔符,默認空格,相當于-F

4.NF(number fields) 當前輸入記錄的字段數(列數)

5.NR(number records) 目前為止看到的記錄總數(行數)

6.OFS 輸出域分隔符(不常用)

7.ORS 輸出記錄分隔符(不常用)

8.RS(record separator) 輸入記錄分隔符,默認換行符

9.$0 整條記錄

10.$1 表示當前行的第一個字段

練習1

1.搜索/etc/passwd有root關鍵字的所有行:awk -F: '/root/{print $0}' /etc/passwd

2.打印/etc/passwd的第2行信息:awk -F: 'NR==2{print $0}' /etc/passwd

練習2

1.使用begin加入標題:awk -F: 'BEGIN {print "BEGIN,BEGIN"}{print $1,$2}' /etc/passwd

2.自定義分割符:echo "123|456|789" | awk 'BEGIN{RS="|"}{print $0}'

04 | Bash編程語法

變量

變量的作用范圍只在當前窗口

規則

1.命名只能使用英文字母、數字、下劃線,首個字符不能以數字開頭

2.中間不能有空格,可以使用下劃線

3.不能使用標點符號

4.不能使用bash里的關鍵字(可用help命令查看保留關鍵字)

定義與使用

your_name="abc"

echo $your_name

只讀變量(不能修改和刪除)

a="123"

readonly a

若想刪除只讀變量,把窗口關閉即可

刪除變量(不能刪除只讀變量)

unset variable_name

變量類型

1.字符串:your_name="timothy"

2.拼接字符串:greeting="hello,"$your_name""

3.數組:array_name=(value0 value1 value2 value3)

4.取數組:value=${array_name[n]}

5.單獨賦值:array_name[0]=value0

6.獲取數組長度:${#array_name[*]}

練習

數組初始化

array=(a b c d e)

echo ${array[0]}

echo ${array[@]} 打印所有元素

echo ${array[*]} 同上

數組單個定義

array[0]=a

array[2]=c

echo ${array[*]}

if

格式

if condition

then

command1

command2

...

commandN

fi

注意

1.if [ a==1 ];若判斷條件是雙等號,可使用單中括號

2.if [[ a>1 ]];若判斷條件是大于或小于時,要用雙中括號;若想使用單中括號,需用-gt、-lt,如if [ a -gt 1]

3.中括號左右必須有空格,不能寫成if[a==1]

運算符

符號

解釋

-gt

greater than

-lt

less than

-ge

greater or equal

-le

less or equal

-eq

equal

-ne

not equal

練習

比較兩個變量的大小并輸出不同的值

if [ $a -eq $b ];then echo "equal"; elif [ $a -lt $b ];then echo "small";elif [ $a -gt $b ];then echo "big"; fi

for

格式

for var in item1 item2 ... itemN

do

command1

command2

...

commandN

done

練習

循環讀取文件內容并輸出

for i in ${cat test.txt};do echo "$i";done

while

定義

while condition

do

command

done

例子

int=1

while(( $int<=5 ))

do

echo $int

let "int++"

done

練習

循環讀取文件內容并輸出

while read line;do echo $line;done

05 | Bash腳本編寫

read命令

概要

1.read命令是用于從終端或文件中讀取輸入的內部命令

2.讀取整行輸入

3.每行末尾的換行符不被讀入

使用

1.讀取標準輸入內容并賦值給變量:read var

2.讀取多個標準輸入內容:read var1 var2 var3

3.不指定標量(默認賦值給REPLY):read

練習

read a

123

echo $a

read a b c

123 456 789

echo $a $b $c

read

012

echo $REPLY

腳本參數傳遞

1.$0 腳本名稱

2.$1~$n 獲取參數

3.$# 傳遞到腳本的參數個數

4.$$ 腳本運行的當前進程ID號

5.$* 顯示所有的參數

6.$? 顯示最后命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤

練習

test.sh

#!/bin/bash

echo "文件名:"$0

echo "入參個數:"$#

echo "所有入參:"$*

echo "第1、2、3個入參:"$1 $2 $3

echo "退出狀態:"$?

運行test.sh

chmod u+x test.sh

bash test.sh 1 2 3

基本運算

1.加法 `expr $a + $b`

2.減法 `expr $a - $b`

3.乘法 `expr $a \* $b`

4.除法 `expr $b / $a`

5.取余 `expr $a % $b`

6.賦值 a=$b

7.相等 [ $a == $b ]

8.不相等 [ $a != $b ]

bash與目錄命令

創建目錄并生成文件

mkdir test

cd test

echo "hello" > test.txt

ls

bash與內存

統計內存使用

for i in `ps aux | awk '{print $6}' | grep -v 'RSS'`

do

echo `expr $i / 1024`

done

06 | Nginx日志分析

shell命令中單引號和雙引號的區別:單引號里內容不轉義,雙引號里的內容會轉義,舉例說明:

a=123

echo '$a' 輸出$a,$a未轉換

echo "$a" 輸出123,$a轉換為變量值

grep只支持基本正則,不支持擴展正則,要使用“|”需用egrep,舉例說明:

egrep "ab[c|cc]" test.sh

輸出abc abcc

出現次數最多的ip個數

awk '{print $1}' nginx.log | sort | uniq -c | sort -nr | head -3

grep -o '^[0-9]*.[0-9]*.[0-9]*.[0-9]*' nginx.log | sort | uniq -c | sort -nr | head -3

替換

grep "/topics/" nginx.log | sed 's#/topics/[0-9]*#/topics/number#g'

將ip地址橫向打印

awk '{print $1}' nginx.log | sed ':1;N;s/\n/|/g;t1'

N 將下一行讀取到模式空間

:1 標記

t1 t1前的命令執行成功,就跳轉到標記1

反復執行":1"和"t1"之間的命令

07 | Linux性能統計分析

uptime

命令說明

命令

全稱

說明

mpstat

Multiprocessor Statistics

多處理器狀態

vmstat

virtual memory statistics

虛擬內存狀態

iostat

input output statistics

輸入輸出狀態

uptime

15:52:31 up 4 days, 21:33, 1 user, load average: 0.00, 0.01, 0.05

當前時間 總開機時間 當前用戶 負載(1分,5分,15分)

負載

特定時間間隔內運行隊列中的平均進程數。進程滿足以下條件則位于運行隊列中:

1.未等待I/O操作的結果

2.未主動進入等待狀態(未調用wait)

3.未被停止(等待終止)

一般來說,每個CPU內核當前活動進程數不大于3,則表示系統運行表現良好。若是多核則需要累加,即4核cpu<12

dmesg | tail -20

打印系統日志

vmstat

image.png

虛擬內存:磁盤的部分空間被當做內存使用

cache:CPU和內存之間的高速緩沖存儲器

buffer:內存和磁盤之間的緩沖器

分頁:將磁盤空間轉換為虛擬內存的技術

vmstat.png

字段說明

procs(進程):

1.r:運行隊列中進程數量,可判斷是否需要增加CPU(長期大于1)

2.b:等待IO的進程數量

memory(內存):

1.swpd:使用虛擬內存大小,此值越大說明物理內存已不夠用

2.free:空閑物理內存大小

3.buff:用作緩沖的內存大小

4.cache:用作緩存的內存大小

CPU:

1.us:用戶進程執行時間

2.sy:系統進程執行時間

3.id:空閑時間(包括IO等待時間),中央處理器的空閑時間

4.wa:等待IO時間

mpstat

語法

mpstat [-P ] [internal [count]]

1.-P 指定CPU

2.internal:相鄰兩次采樣的間隔時間

3.count:采樣次數

參數

image.png

參數

說明

%usr

用戶級(應用程序)執行時發生的CPU利用率百分比

%nice

優先級較高的用戶級別執行時發生的CPU利用率百分比

%sys

系統級(內核)執行時發生的CPU利用率百分比

%iowait

系統有未完成的磁盤I / O請求時一個或多個CPU空閑的時間百分比

%irq

一個或多個CPU服務硬件中斷所花費的時間百分比

%soft

一個或多個CPU服務軟件中斷所花費的時間百分比

%idle

一個或多個CPU空閑且系統沒有未完成的磁盤I / O請求的時間百分比

理解iowait

CPU空閑時間處理io請求的占比

image.png

CPU可以并行處理io請求

image.png

其他命令

pidstat

iostat

free -m

top

1.%CPU是CPU每個核占比的累加

08 | 三劍客實戰抽獎程序腳本

抽獎實現1:有空白

#!/bin/bash

rand() {

seeds=`while read line; do echo ${line// /..}; done < wx.txt`

while [[ $count != 1 ]];do

seeds=`for seed in $seeds;do (($RANDOM%2==0)) && echo $seed; done` # seeds只有1個元素時,$RANDOM%==1,此時會輸出空白

count=`echo "$seeds" | wc -l`

done

echo $seeds

}

rand

抽獎實現2:無空白

#!/bin/bash

rand() {

local count

local seeds

count=0

seeds=`while read line; do echo ${line// /..}; done < wx.txt`

while [[ $count != 1 ]];do

seeds=`for seed in $seeds;do (($RANDOM%2==0)) && echo $seed; done`

count=`echo "$seeds" | wc -l`

done

if [[ $seeds == "" ]];then

rand # 這里用到了遞歸

fi

if [[ $seeds != "" ]];then

echo $seeds

fi

}

while true;do

rand

sleep 1s

done

抽獎實現3:去重

rand() {

local seeds

local count

count=0

seeds=`while read line;do echo ${line// /..}; done

while [[ $count != 1 ]];do

seeds=`for seed in $seeds;do (($RANDOM%2==0)) && echo $seed;done`

count=`echo "$seeds" | wc -l`

done

if [[ $seeds == "" ]];then

rand

fi

if [[ $seeds != "" ]];then

echo $seeds

fi

}

res() {

for i in `eval echo {1..$1}`;do

tmp=`rand`

while [[ `is_repeat $tmp` == 0 ]];do

tmp=`rand`

done

arrs[$i]=$tmp

done

echo ${arrs[@]}

}

is_repeat() {

for arr in ${arrs[@]};do

if [[ $arr == $1 ]];then

#此處需要有echo,因為子進程只能捕獲echo的輸出,不能捕獲return的值

echo 0

return 0

fi

done

#輸出1的邏輯在這里,因為需要遍歷完整的數組后,才能輸出1

echo 1

}

res $1

其他

1.echo $var 把所有行合并成1行輸出

2.echo "$var" 按原格式輸出

設置vim編輯器一直顯示行號

vim ~/.vimrc

set nu

總結

以上是生活随笔為你收集整理的linux sed 测试文件夹,测试开发笔记二(Linux与Shell脚本)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。