主頁 > 作業系統 > Shell命令

Shell命令

2022-09-22 06:08:55 作業系統

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

 

 

  ------------------歡迎關注秀兒微博--->程式界第一佳麗

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/509257.html

標籤:Linux

上一篇:Windows 11 22H2 (2022 年更新) 發布,簡體中文版、英文版下載

下一篇:rsync

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • CA和證書

    1、在 CentOS7 中使用 gpg 創建 RSA 非對稱密鑰對 gpg --gen-key #Centos上生成公鑰/密鑰對(存放在家目錄.gnupg/) 2、將 CentOS7 匯出的公鑰,拷貝到 CentOS8 中,在 CentOS8 中使用 CentOS7 的公鑰加密一個檔案 gpg -a ......

    uj5u.com 2020-09-10 00:09:53 more
  • Kubernetes K8S之資源控制器Job和CronJob詳解

    Kubernetes的資源控制器Job和CronJob詳解與示例 ......

    uj5u.com 2020-09-10 00:10:45 more
  • VMware下安裝CentOS

    VMware下安裝CentOS 一、軟硬體準備 1 Centos鏡像準備 1.1 CentOS鏡像下載地址 下載地址 1.2 CentOS鏡像下載程序 點擊下載地址進入如下圖的網站,選擇需要下載的版本,這里選擇的是Centos8,點擊如圖所示。 決定選擇Centos8后,選擇想要的鏡像源進行下載,此 ......

    uj5u.com 2020-09-10 00:12:10 more
  • 如何使用Grep命令查找多個字串

    如何使用Grep 命令查找多個字串 大家好,我是良許! 今天向大家介紹一個非常有用的技巧,那就是使用 grep 命令查找多個字串。 簡單介紹一下,grep 命令可以理解為是一個功能強大的命令列工具,可以用它在一個或多個輸入檔案中搜索與正則運算式相匹配的文本,然后再將每個匹配的文本用標準輸出的格式 ......

    uj5u.com 2020-09-10 00:12:28 more
  • git配置http代理

    git配置http代理 經常遇到克隆 github 慢的問題,這里記錄一下幾種配置 git 代理的方法,解決 clone github 過慢。 目錄 git配置代理 git單獨配置github代理 git配置全域代理 配置終端環境變數 git配置代理 主要使用 git config 命令 git單獨 ......

    uj5u.com 2020-09-10 00:12:33 more
  • Linux npm install 裝包時提示Error EACCES permission denied解

    npm install 裝包時提示Error EACCES permission denied解決辦法 ......

    uj5u.com 2020-09-10 00:12:53 more
  • Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包

    Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包。 18 (flaskApi) [root@67 flaskDemo]# yum -y install nginx 19 已加載插件:fastestmirror, langpacks 20 Loading ......

    uj5u.com 2020-09-10 00:13:13 more
  • Linux查看服務器暴力破解ssh IP

    在公網的服務器上經常遇到別人爆破你服務器的22埠,用來挖礦或者干其他嘿嘿嘿的事情~ 這種情況下正確的做法是: 修改默認ssh的22埠 使用設定密鑰登錄或者白名單ip登錄 建議服務器密碼為復雜密碼 創建普通用戶登錄服務器(root權限過大) 建立堡壘機,實作統一管理服務器 統計爆破IP [root ......

    uj5u.com 2020-09-10 00:13:17 more
  • CentOS 7系統常見快捷鍵操作方式

    Linux系統中一些常見的快捷方式,可有效提高操作效率,在某些時刻也能避免操作失誤帶來的問題。 ......

    uj5u.com 2020-09-10 00:13:31 more
  • CentOS 7作業系統目錄結構介紹

    作業系統存在著大量的資料檔案資訊,相應檔案資訊會存在于系統相應目錄中,為了更好的管理資料資訊,會將系統進行一些目錄規劃,不同目錄存放不同的資源。 ......

    uj5u.com 2020-09-10 00:13:35 more
最新发布
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:43:21 more
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:42:36 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:26:53 more
  • 設定Windows主機的瀏覽器為wls2的默認瀏覽器

    這里以Chrome為例。 1. 準備作業 wsl是可以使用Windows主機上安裝的exe程式,出于安全考慮,默認情況下改功能是無法使用。要使用的話,終端需要以管理員權限啟動。 我這里以Windows Terminal為例,介紹如何默認使用管理員權限打開終端,具體操作如下圖所示: 2. 操作 wsl ......

    uj5u.com 2023-04-19 09:25:49 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:19:04 more
  • Linux學習筆記

    IP地址和主機名 IP地址 ifconfig可以用來查詢本機的IP地址,如果不能使用,可以通過install net-tools安裝。 Centos系統下ens33表示主網卡;inet后表示IP地址;lo表示本地回環網卡; 127.0.0.1表示代指本機;0.0.0.0可以用于代指本機,同時在放行設 ......

    uj5u.com 2023-04-18 06:52:01 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:50 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:01 more
  • 你是不是暴露了?

    作者:袁首京 原創文章,轉載時請保留此宣告,并給出原文連接。 如果您是計算機相關從業人員,那么應該經歷不止一次網路安全專項檢查了,你肯定是收到過資訊系統技術檢測報告,要求你加強風險監測,確保你提供的系統服務堅實可靠了。 沒檢測到問題還好,檢測到問題的話,有些處理起來還是挺麻煩的,尤其是線上正在運行的 ......

    uj5u.com 2023-04-05 16:52:56 more
  • 細節拉滿,80 張圖帶你一步一步推演 slab 記憶體池的設計與實作

    1. 前文回顧 在之前的幾篇記憶體管理系列文章中,筆者帶大家從宏觀角度完整地梳理了一遍 Linux 記憶體分配的整個鏈路,本文的主題依然是記憶體分配,這一次我們會從微觀的角度來探秘一下 Linux 內核中用于零散小記憶體塊分配的記憶體池 —— slab 分配器。 在本小節中,筆者還是按照以往的風格先帶大家簡單 ......

    uj5u.com 2023-04-05 16:44:11 more