1.shell命令的執行機制:fork+exec執行命令(任何的shell都會執行) 2.shell中的用戶輸入處理 1 命令行參數:選項、參數 2 運行時輸入 3 read命令: 4 1.基本讀取、 5 2.超時處理-t選項、 6 3.隱藏方式讀取-s選項) 7 4.從文件中讀取 3.shell的 ...
2.shell中的用戶輸入處理
1 命令行參數:選項、參數 2 運行時輸入 3 read命令: 4 1.基本讀取、 5 2.超時處理-t選項、 6 3.隱藏方式讀取-s選項) 7 4.從文件中讀取
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
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
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
------------------歡迎關註秀兒微博--->程式界第一佳麗