1.shell命令的執行機制:fork+exec執行命令(任何的shell都會執行)
2.shell中的用戶輸入處理
1 命令列引數:選項、引數 2 運行時輸入 3 read命令: 4 1.基本讀取、 5 2.超時處理-t選項、 6 3.隱藏方式讀取-s選項) 7 4.從檔案中讀取
3.shell的反引號
1 /* 2 ``反引號在Linux shell命令列中有特殊的含義:反引號間的內容,會被shell先執行,其輸出被放入主命令后,主命令再被執行,命令替換,即完成參考的命令的執行,將其結果替換出來,與變數替換差不多 3 */ 4 echo `date '--date=1 hour ago' +%Y-%m-%d-%H` 5 echo $(date '--date=1 hour ago' +%Y-%m-%d-%H)
4.setuid
setuid位是讓普通用戶可以以root用戶的角色運行只有root帳號才能運行的程式或命令,
因此當程式設定了setid權限位時,普通用戶會臨時變成root權限,但實際用戶任然是原來的mike,
5.linux檔案
/etc/mtab檔案的作用:記載的是現在系統已經裝載的檔案系統,包括作業系統建立的虛擬檔案等;
/etc/fstab是系統準備裝載的find命令:以遞回的方式進行搜索檔案或檔案夾
6.find命令
1 1 --查找當前目錄下所有檔案中包含deposit_account的檔案 2 2 -- f 普通檔案 l 符號連接 d 目錄 c 字符設備 b 塊設備 s 套接字 p Fifo 3 3 find . -type f -print |xargs grep "deposit_account" 4 4 --查找根目錄下名字為create.txt的檔案 5 5 find / -name "create.txt" 6 6 --查找根目錄下檔案大小大于100M的檔案 7 7 find / -size +100M 8 8 --使用find查找png和jpg的檔案 -o 指定多個-name選項 9 9 find . -name '*.png' -o -name '*.jpg' -type ffind
7.for回圈
1 1 /*for 變數名 in 取值串列({1..100}--1到100依次執行、{1..100..2} --間隔2個) 2 2 do 3 3 命令序列 4 4 done 5 5 --舉例*/ 6 6 sum=0 7 7 for ((i=1;i<100;i++)) 8 8 do 9 9 sum=$($i+$sum) 10 10 done 11 11 echo "0-100的和為:" $sumfor回圈
8.正則運算式
1 1 --行首定位符“^”:用來匹配行首的字符 2 2 --列出etc目錄下以po開頭的檔案 3 3 str='ls /etc |grep "^po"' 4 4 echo "$str" 5 5 ? 6 6 --行尾定位符“$” 7 7 str='ls /etc |grep "conf$"' 8 8 echo "$str" 9 9 ? 10 10 --單個字符匹配“.”:圓點“.”用來匹配任意單個字符,包括空格,但是不包括換行符“\n” 11 11 --列出所有的包含字串“13”的檔案名 12 12 str=`cat dian.txt | grep "13"` 13 13 echo "$str" 14 14 echo "-------------" 15 15 --列出包含字串'13'以及另外一個字符的檔案名 16 16 str=`cat dian.txt | grep "13."` 17 17 echo "$str" 18 18 ? 19 19 --限定符“*”:用來指定其前面的一個字符必須要重復出現多少次才能滿足匹配 20 20 str=`ls /etc | grep "^sss*"` 21 21 echo "$str" 22 22 ? 23 23 --字符集匹配“[]” 24 24 /*"[a-f]”表示匹配字母表中a到f中的任意一個字母, 25 25 “[0-9]”表示匹配任意單個數字 26 26 "[^b-d]” 匹配除了從 b 到 d 范圍內所有的字符 --取反 27 27 */ 28 28 --篩選所有以字符r開頭,并且緊跟著1個字符c的文本行 29 29 str='ls /etc |grep "^rc"' 30 30 echo "$str" 31 31 echo "---------------------" 32 32 --篩選所有以字符r開頭,緊跟著1個字符為c,下面1個字符為單個數字的文本行 33 33 str='ls /etc | grep "^rc[0-9]"' 34 34 echo "$str" 35 35 ? 36 36 ? 37 37 --字符集不匹配“[^]”:表示不匹配其中列出的任意字符 38 38 "[^b-d]” 匹配除了從 b 到 d 范圍內所有的字符 39 39 ? 40 40 --反斜杠字符 \轉義 使這個字符表示原來字面上的意思 41 41 “\$“表示了原來的字面意思”$”,而不是在正則運算式中表達的匹配行尾的意思. 42 42 ? 43 43 --轉義(escape) “尖角號” \<...\> 44 44 用于表示單詞的邊界. 尖角號必須被轉義,因為不這樣做的話它們就表示單純的字面意思而已."\<the\>" 匹配單詞"the",但不匹配"them", “there”, “other”, 等等.正則運算式
9.擴展正則運算式
1 1 --限定符“+” :匹配一個或多個前面的字符.和*相似,區別是它不匹配零個字符的情況. 2 2 --篩選以字串“ss”開頭,后面至少緊跟著1個字符“s”的文本行 3 3 str=`ls /etc | egrep "^sss+"` 4 4 echo "$str" 5 5 --輸出 6 6 sssd 7 7 ? 8 8 --限定符“?”:限定前面的字符最多只出現1次,即前面的字符可以重復0次或者1次, 9 9 str=`ls /etc | egrep "^sss?"` 10 10 echo "$str" 11 11 --輸出 12 12 ssh 13 13 ssl 14 14 sssd 15 15 ? 16 16 --豎線“|” 和圓括號“()”: 17 17 --豎線“|” 表示多個正則運算式之間“或”的關系 18 18 --豎線“|” 表示多個正則運算式之間“或”的關系 19 19 #篩選含有字串“ssh”、“ssl”或者以字串“yum”開頭的文本行 20 20 #grep -E主要是用來支持擴展正則運算式 21 21 #grep -E =egrep 22 22 str=`ls /etc | egrep "(ssh|ssl|^yum)"` 23 23 echo "$str" 24 24 ? 25 25 ? 26 26 --轉義“大括號”{}指示前邊正則運算式匹配的次數,要轉義是因為不轉義的話大括號只是表示他們字面上的意思 27 27 “[0-9]\{5\}” --精確匹配 5 個數字 (從 0 到 9 的數字)擴展正則運算式
10.perl正則運算式
1 --數字匹配\d 符號“\d”匹配從0到9中的任意一個數字字符,等價于運算式“[0-9]” 2 --篩選以字串rc開頭,緊跟著一個數字的文本行 -P可以讓grep使用perl的正則運算式語法 3 str=`ls /etc | grep -P "^rc\d"` 4 echo "$str" 5 ? 6 --非數字匹配\D “\D”等價于運算式“[^0-9]” 7 --空白字符匹配\s :匹配任何空白字符,包括空格、制表符以及換頁符=“[\f\n\r\t\v]”, 8 --非空白字符匹配\S:符號“\S”匹配任何非空白字符,等價于運算式“[^\f\n\r\t\v]”perl正則運算式
處理海量資料的命令:grep、cut、awk、sed
grep、sed命令是對行進行提取
cut、awk命令是對列進行提取
11.grep命令
1 /* 2 grep [選項]...[內容]...[file] 3 -v 對內容進行取反提取 4 -n 對提取的內容排列,顯示行號 5 -w 精確匹配 6 -i 忽略大小寫 7 ^ 匹配行首 8 -E 正則匹配 9 */ 10 grep 'user' /etc/passwd --匹配包含user的行 11 grep -n 'user' /etc/passwd --顯示行號grep
12.awk命令
1 /* 2 而awk比較傾向于將一行分成多個"“欄位"然后再進行處理,awk信 息的讀入也是逐行讀取的,在使用awk命令的程序 中,可以使用邏輯運算子”&“表示"與”、"||表示"或"、"!“表示非”;還可以進行簡單的數學運算,如H+、 -、*、/、%、^分別表示加、減、乘、除、取余和乘方, 3 awk 選項 '{操作}' 檔案名 4 */ 5 awk '{print}' zz.txt --默認輸出所有 6 awk -F: '{print $1}' zz.txt --分隔符為:輸出第一列 7 echo 'this is a test' | awk '{print $NF}' --$NF表示最后一個欄位 8 awk -F ':' '{ print toupper($1) }' demo.txt --將輸出的字符轉成大寫 9 --awk '條件 動作' 檔案名 結合正則運算式 10 awk -F ':' '/usr/ {print $1}' demo.txt --只輸出包含usr的行 11 awk -F ':' 'NR % 2 == 1 {print $1}' demo.txt --輸出奇數行 12 awk -F ':' '$1 == "root" {print $1}' demo.txt --輸出第一個欄位等于指定值的行awk
13.route命令
1 /* 2 在網路中,route命令用來顯示、添加、洗掉和修改網路的路由, 3 route [-f] [-p] [Command] [Destination] [mask Netmask] [Gateway] [metric Metric] [if Interface] 4 route -f:用于清除路由表 5 route -p:用于創建永久路由 6 route Command:主要有print(列印路由)、ADD(添加路由)、DELETE(洗掉路由)、CHANGE(修改路由)4個常用命令 7 route Destination:表示到達的目的IP地址 8 route MASK:表示子網掩碼的關鍵字 9 route Netmask:表示具體的子網掩碼,如果不進行設定,系統默認設定成255.255.255.255(單機IP地址),添加掩碼時要注意,特別是要確認添加的是某個IP地址還是IP網段,如果代表全部出口子網掩碼可用0.0.0.0 10 route Gateway:表示出口網關 11 route interface:表示特殊路由的介面數 12 route metric:表示到達目的網路的跳數 13 -net 后面跟的是目標網路,gw就是gateway(網關入口) 14 */ 15 --局域網的網路地址192.168.1.0/24,局域網路連接其它網路的網關地址是192.168.1.1,主機192.168.1.20訪問172.16.1.0/24網路時,其路由設定正確的是 16 route add –net 172.16.1.0 gw 192.168.1.1 netmask 255.255.255.0 metric 1route
14.cut命令
1 cut是一個選取命令,就是將一段資料經過分析,取出我們想要的,一般來說,選取資訊通常是針對“行”來進行分析的 2 cut [-bn] [file] 或 cut [-c] [file] 或 cut [-df] [file] 3 -b :以位元組為單位進行分割,這些位元組位置將忽略多位元組字符邊界,除非也指定了-n標志, 4 -c :以字符為單位進行分割, 5 -d :自定義分隔符,默認為制表符, 6 -f :與-d一起使用,指定顯示哪個區域, 7 -n :取消分割多位元組字符,僅和 -b 標志一起使用,如果字符的最后一個位元組落在由 -b 標志的 List 引數指示的<br />范圍之內,該字符將被寫出;否則,該字符將被排除, 8 ?cut
15.sed命令
1 -n --把匹配到的行輸出列印到螢屏 2 p --以行為單位進行查詢,通常與-n一起使用 3 eg:df -h | sed -n '2p' --列印第二行 4 d --洗掉 eg :df -h |sed '2d' --洗掉第二行 5 a --在行下邊插入新的內容 eg:sed '2d 122344' 1.txt 6 i --在行上邊插入新的內容 eg:sed '2i 122344' 1.txt 7 c --替換 eg:sed '2c 122344' 1.txt 8 s/被替換的內容/新的內容/g --eg: sed s/"//g 1.txt 9 -i --對源檔案進行修改 --eg: sed -i s/"//g 1.txt 10 -e --表示可以執行多條動作 11 sed -n '/100%/p' 1.txt --匹配到100%的列印出來sed
16.xargs命令
1 /*xargs是給其他命令傳遞引數的一個過濾器,也是組合多個命令的一個工具,它擅長將標準輸入資料轉換成命令列采納數,xargs能夠處理管道或者stdin并將其轉換成特定命令的命令引數,xargs也可以單行或多行文本輸入轉換為其他格式,例如多行轉單行,單行轉多行,xargs的默認命令是echo,空格是默認定界符, 2 */ 3 --多行換入單行輸入 4 cat test.txt | xargs 5 ---n 選項多行輸出 6 cat test.txt | xargs -n3 7 --d 自定義定界符 8 echo "abcadbsbdkvbwwlg" | xargs -dbxargs
17.sort命令
1 /* 2 sort命令將檔案的每一行作為比較物件,通過將不同行進行相互比較,從而得到最終結果,比較原則是從首字符開始,向后依次按ASCII碼值進行比較,最后將結果按升序輸出 3 引數: 4 sort -u :在輸出行中去除重復行 5 sort -r :sort命令默認的排序方式是升序,如果想改成降序,就需要加上 -r 6 sort -o :由于sort默認是把結果輸出到標準輸出,所以需要用到重定向才能將結果寫入檔案,形如sort filename > newfile,但是,如果你想把排序結果輸出到原檔案中,用重定向可就不行了,需要 7 */ 8 sort -n -k 2 -t : facebook.txt --以冒號分割開,以第二列進行排序 9 sort -r number.txt -o number.txt --排序后重定向到number.txt 10 cat words.txt|xargs -n 1 |sort -rView Code
18.uniq命令
1 /* 2 uniq 命令用于檢查及洗掉文本檔案中重復出現的行列,一般與 sort 命令結合使用, 3 uniq 可檢查文本檔案中重復出現的行列,直接去重 4 -c: 在每列旁邊顯示該行重復出現的次數, 5 -d: 僅顯示重復出現的行列,顯示一行, 6 -D: 顯示所有重復出現的行列,有幾行顯示幾行, 7 -u: 僅顯示出一次的行列 8 -i: 忽略大小寫字符的不同 9 -f Fields: 忽略比較指定的列數, 10 */ 11 --統計words檔案里邊每個單詞出現的次數 12 cat words.txt|xargs -n 1 |sort -r |uniq -c |awk 'print{$2" "$1}' 13 --忽略第一列的字符 14 uniq -c -f 1 uniq.txt 15 --忽略前邊四個字符 16 uniq -c -s 4 uniq.txtView Code
------------------歡迎關注秀兒微博--->程式界第一佳麗
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/509257.html
標籤:Linux
上一篇:Windows 11 22H2 (2022 年更新) 發布,簡體中文版、英文版下載
下一篇:rsync
