Shell命令

来源:https://www.cnblogs.com/xiuercui/archive/2022/09/20/16711927.html
-Advertisement-
Play Games

1.shell命令的執行機制:fork+exec執行命令(任何的shell都會執行) 2.shell中的用戶輸入處理 1 命令行參數:選項、參數 2 運行時輸入 3 read命令: 4 1.基本讀取、 5 2.超時處理-t選項、 6 3.隱藏方式讀取-s選項) 7 4.從文件中讀取 3.shell的 ...


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 f
find

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的和為:" $sum
for迴圈

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  910 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 1819 19  --限定符“*”:用來指定其前面的一個字元必須要重覆出現多少次才能滿足匹配
20 20  str=`ls /etc | grep "^sss*"`
21 21  echo "$str"
22 2223 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 3536 3637 37  --字元集不匹配“[^]”:表示不匹配其中列出的任意字元
38 38  "[^b-d]” 匹配除了從 b 到 d 範圍內所有的字元  
39 3940 40  --反斜杠字元 \轉義  使這個字元表示原來字面上的意思
41 41  “\$“表示了原來的字面意思”$”,而不是在正則表達式中表達的匹配行尾的意思.
42 4243 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 1516 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 2425 2526 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 1
route

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 -db
xargs

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 -r
View 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.txt
View Code

 

 

  ------------------歡迎關註秀兒微博--->程式界第一佳麗
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 類型載入器設計(Type Loader Design) 原文:https://github.com/dotnet/runtime/blob/main/docs/design/coreclr/botr/type-loader.md 作者: Ladi Prosek - 2007 翻譯:幾秋 (https ...
  • 最近在項目中啟用了Nullable 可為空的類型,這個特性確實很好用,在 WebAPI 的入參上可以直接採用 ? 來標記一個欄位是否允許為空,但是使用過程中遇到瞭如下一個問題,比如創建部門介面 我們定義入參模型如下: public class DtoDepartment { /// <summary ...
  • .NET 6 EFCore WebApi 使用 JMeter 進行吞吐量測試 開發環境 VS2022 .NET 6 測試環境 測試工具 介面壓力測試工具:JMeter 資料庫 MySQL 5.7 資料庫和WebApi服務在同一臺伺服器上,JMeter在本人筆記本上。 測試設置 200個線程併發,每個 ...
  • 一、 環境準備 本次配置基於DR負載均衡模式,設置一個VIP(Virtual IP)為19.50.67.173,用戶只需要訪問這個IP地址即可獲得後端服務 其中,負載均衡主機為19.50.67.165(LVS1),備機為 19.50.67.169(LVS2)。Web伺服器A為19.50.67.171 ...
  • forklift Mac版是一款強大的文件管理程式,彌補了Finder文件管理比較單一的功能,強大到能遠程連接Ftp,SFTP,Amazon S3,WebDAV,SMB,NIS,AFP等網路共用服務協議。相對其他文件管理器如Path Finder,forklift mac更加小巧快速。 除此之外Fo ...
  • PowerPoint 無法打開文件 出現的問題 今天下載老師放在學習通的ppt,居然不能打開,記錄一下 點擊修複後出現: 這並不是文件損壞了,而是powerpoint出於安全的考慮,為了保護我們的電腦,不能打開其他電腦的文件。 解決辦法 右鍵選擇屬性,進入常規界面,勾選解除鎖定,點擊引用,點擊確 ...
  • 個人超級電腦是一個新概念,目前這個市場類似上世紀70年的PC革命時代。本篇是回答一位用戶提問,LAXCUS分散式操作系統如何成為一臺“個人超級電腦”。 ...
  • mysql二進位安裝腳本部署 單實例 [[email protected] ~]# mkdir mysql //創建存放腳本目錄 [[email protected] ~]# ls anaconda-ks.cfg mysql [[email protected] ~]# cd mysql/ [[email protected] ...
一周排行
    -Advertisement-
    Play Games
  • Github / Gitee QQ群(1群) : 813100564 / QQ群(2群) : 579033769 視頻教學 介紹 MiniWord .NET Word模板引擎,藉由Word模板和數據簡單、快速生成文件。 Getting Started 安裝 nuget link : https:// ...
  • Array.Sort Array類中相當實用的我認為是Sort方法,相比起冗長的冒泡排序,它的出現讓排序更加的簡化 結果如下: 還可以聲明一個靜態方法用來專門調用指定數組排序,從名為 array 的一維數組中 a 索引處開始,到 b 元素 從小到大排序。 註意: a + b 不能大於 array 的 ...
  • 前言 在上一篇文章CLR類型系統概述里提到,當運行時掛起時, 垃圾回收會執行堆棧遍歷器(stack walker)去拿到堆棧上值類型的大小和堆棧根。這裡我們來翻譯BotR里一篇專門介紹Stackwalking的文章,希望能加深理解。 順便說一句,StackWalker在中文里似乎還沒有統一的翻譯,J ...
  • 使用過 nginx 的小伙伴應該都知道,這個中間件是可以設置跨域的,作為今天的主角,同樣的 反向代理中間件的 YARP 毫無意外也支持了跨域請求設置。 有些小伙伴可能會問了,怎樣才算是跨域呢? 在 HTML 中,一些標簽,例如 img、a 等,還有我們非常熟悉的 Ajax,都是可以指向非本站的資源的 ...
  • 什麼是Git Git 是一個開源的分散式版本控制系統,用於敏捷高效地處理任何或小或大的項目。 Git 是 Linus Torvalds 為了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟體。 Git 與常用的版本控制工具 CVS, Subversion 等不同,它採用了分散式版本庫的 ...
  • 首先CR3是什麼,CR3是一個寄存器,該寄存器內保存有頁目錄表物理地址(PDBR地址),其實CR3內部存放的就是頁目錄表的記憶體基地址,運用CR3切換可實現對特定進程記憶體地址的強制讀寫操作,此類讀寫屬於有痕讀寫,多數驅動保護都會將這個地址改為無效,此時CR3讀寫就失效了,當然如果能找到CR3的正確地址... ...
  • 說明 onlyoffice為一款開源的office線上編輯組件,提供word/excel/ppt編輯保存操作 以下操作均基於centos8系統,officeonly鏡像版本7.1.2.23 鏡像下載地址:https://yunpan.360.cn/surl_y87CKKcPdY4 (提取碼:1f92 ...
  • 二叉樹查找指定的節點 前序查找的思路 1.先判斷當前節點的no是否等於要查找的 2.如果是相等,則返回當前節點 3.如果不等,則判斷當前節點的左子節點是否為空,如果不為空,則遞歸前序查找 4.如果左遞歸前序查找,找到節點,則返回,否繼續判斷,當前的節點的右子節點是否為空,如果不為空,則繼續向右遞歸前 ...
  • ##Invalid bound statement (not found)出現原因和解決方法 ###前言: 想必各位小伙伴在碼路上經常會碰到奇奇怪怪的事情,比如出現Invalid bound statement (not found),那今天我就來分析以下出現此問題的原因。 其實出現這個問題實質就是 ...
  • ###一、背景知識 爬蟲的本質就是一個socket客戶端與服務端的通信過程,如果我們有多個url待爬取,只用一個線程且採用串列的方式執行,那隻能等待爬取一個結束後才能繼續下一個,效率會非常低。 需要強調的是:對於單線程下串列N個任務,並不完全等同於低效,如果這N個任務都是純計算的任務,那麼該線程對c ...