Shell基礎筆記

Shell文本變量及符號

特殊變量

  • $0:腳本自身的名字

  • $?:返回上一條命令是否執行成功,0爲執行成功,非0爲執行失敗

  • $#:位置參數總參數

  • $*:所有的位置參數被看做成一個字符串

  • $@:每個位置參數被看做成獨立的字符串

  • $$:當前進程的PID

  • $!:上一條運行後臺進程的PID

 

整數比較符

  • -eq:等於;-ne:不等於;-ge:大於等於;-gt:大於;-le:小於等於;-lt:小於

  • 字符串比較符

  • ==;!=>=<=><-n:字符串長度不等於0爲真;-z:字符串長度等於0爲真;str:字符串存在爲真

  • 文件測試:

  • -e:文件或目錄存在真;-f:文件存在爲真;-d:目錄存在爲真;-r:有讀權限爲真;-w:有寫權限爲真;-x:有執行權限爲真;-s:文件存在並且大小大於0爲真

 

括號用途

  • ()1、在運算中,先計算小括號裏面的內容;2、數組;3、匹配分組

  • (())1、表達式,不支持-eq這類的運算符。不支持-a-o,支持字符串比較符

  • $():執行shell命令,與反撇號等效

  • $(())1、簡單算數運算。2、支持三目運算符

  • []:條件表達式,裏面不支持邏輯判斷符

  • [[]]:條件表達式,裏面不支持-a-o,不支持字符串比較符,支持整數比較符

  • $[]:簡單算數運算

  • ${}1、引用變量。2、字符串處理

 



文本常用處理命令


grep常用參數

-E:模式是擴展正則表達式

-x:模式匹配整行

-v:打印不匹配的行

-c:只打印匹配的行數

-s:不輸出錯誤的信息

grep v E ^$|^# /etc/nginx/nginx.conf #去除開頭是空格或者#的配置文件

 

sed命令常用方法

匹配打印(p

tail /etc/services  | sed  -n ‘/^b/p#打印匹配開頭的行

tail /etc/services  |sed n 1,3p#打印13

匹配刪除(d

sed  -i /^$/d;/^#/d /etc/nginx/nginx.conf #刪除空行和註釋

匹配替換(s

tail /etc/services | sed n s/tcp/lsk/p #打印替換匹配的tcp字符

sed i s/http/lsk /etc/nginx/nginx.conf #nginx.conf配置文件上替換字符

 

awk命令(處理文本的編程語言工具)

常用選項:

-f :從文件中讀取awk程序源文件

-F fs:指定fs爲分隔符

-v var=value 指定變量符

常用模式:

BEGIN{ }:給程序賦予初始狀態,先執行的工作

END{}:程序結束之後執行的工作

邏輯notorand(!,||&&

內置變量:

FS:輸入字段分隔符,默認是空格或製表符

OFS:輸出字段分隔符,默認是空格

RS:輸入記錄分隔符,默認是換行符\n

ORS:輸出記錄分隔符,默認是換行符\n

NF: 統計當前記錄中字段個數

NR: 統計記錄編號,沒處理一行記錄,編號會自增1

FNR:統計記錄編號,沒處理一行記錄,編號自增1,處理第二個文件時,編號會重新計數

ENVIRON:當前系統的環境變量

IGNORECASE:忽略大小

 

tail /etc/services | awk F  [\#]  {print $2} //[]爲元字符,符號其中任意一個字符。每遇到一個/或者#就分割字段

tail /etc/services | awk /^blp5/{print $0} //正則表達式,匹配開頭是blp5的行

tail /etc/services  | awk '/tcp/ || /blp5/{print $0}' //篩選tcp或者blp5字段的行

awk BEGIN{FS=:;OFS=-}{print $1,$3,$5} /etc/passwd //過濾/etc/passwd文件,以冒號爲分隔符,輸出分隔符以-分隔



常用系統配置文件

  • /etc/issue 系統版本

  • /etc/hosts 主機名與IP的對應關係

  • /etc/reslov.conf DNS服務器地址

  • /etc/hostname  主機名

  • /etc/sysctl.conf 系統參數配置文件

  • /etc/sudoers sudu權限配置

  • /etc/init.d 服務器啓動腳本

  • /etc/sysconfig/network-scripts 網卡信息配置目錄

  • /etc/rc.d/rc.local 系統init初始化完後執行,不建議將啓動服務寫在這裏面,應創建自己的Systemd或者udev

  • /etc/fstab 硬盤自動掛載配置

  • /etc/inittab 系統啓動運行級別

  • /etc/crontab 系統級任務計劃

  • /var/spool/cron 用戶級任務計劃

  • /etc/crond.d 描述計算機任務計劃

  • /etc/hosts.allow TCP包訪問列表

  • /etc/hosts.deny TCP包拒絕列表

  • /usr/share/doc  各軟件的文檔

  • /etc/sshd_config SSH服務配置文件

  • /var/log 系統和應用程序日誌目錄

  • /var/spool/mail 郵件目錄

 

/dev 目錄

  • /dev/hd[a-t] IDE設備

  • /dev/sd[a-z] SCSI設備

  • /dev/dm-[-9] LVM邏輯磁盤

  • /dev/zero 無限0數據流

 

/proc 目錄

  • /proc/[0-9]+ 此目錄下數字命名的目錄是運行進程信息,目錄名爲PID

  • /proc/meminfo  物理內存、交換空間等信息,free

  • /proc/loadavg 系統負載

  • /proc/uptime 系統運行時間

  • /proc/cpuinfo CPU信息

  • /proc/mounts 文件系統掛載信息,mount

  • /proc/swaps swap分區信息

  • /proc/partitions 系統分區信息

  • /proc/version 內核版本

  • /proc/stat CPU利用率,磁盤,內存頁

  • /proc/devices 可用的設備列表

  • /proc/net

  • /proc/net/tcp TCP狀態連接信息

  • /proc/net/udp UDP狀態連接信息

  • /proc/net/arp arp信息表

  • /proc/net/dev 網卡流量

  • /proc/net/snmp 網卡傳輸協議的收發包信息

  • /proc/net/sockstat socket使用情況,比如已使用,正在使用

  • /proc/net/netstat 網絡統計數據

  • /proc/net/route 路由表


常用Shell基礎命令

echo :-n 不加換行符;-e解釋轉義符


cat:-b 顯示非空行行號;-n 顯示所有行號 -T 顯示tab,用^I表示;-E 顯示以$結尾


tac:倒序打印每一行


rev反向打印每一行


wc:-c 打印文件字節數;-m 打印文件字符數;-l  打印多少行;-L 打印最長行的長度,也可以統計字符串的長度


mkdir:-p 遞歸創建目錄; -v 顯示創建過程。


du:-h 易讀格式顯示(K,M,G);-b 單位bytes顯示,-k 單位KB顯示;-m 單位MB顯示;-s 只顯示總大小。


cut:-b 選中第幾個字符;-c 選中多少個字符;-d 指定分隔符字段,默認是空格;-f 顯示選中字段


stat:-Z 顯示selinux安全上下文;-f 顯示文件系統狀態;-c 指定格式輸出內容;-t 以簡潔的形式打印


seq:-f 使用printf樣式格式;-s 指定換行符,默認是\n-w 等寬,用0填充


sort(排序文本):-f 忽略字母大小寫;-M 根據月份比較;-h 根據易讀的單位大小比較;-g 按照常規數值排序;-n 根據字符串數值比較;-r 倒序排序;-u 去重重複

行;-t指定分隔符;-o 將結果寫入文件


uniq(去除重複行,只統計相鄰的):-c 打印出現的次數;-d 只打印重複行;-u 只答應不重複行;-D 只打印重複行,並且把所有重複行打印出來;-i 忽略大小寫;


tee(從標準輸入讀取寫到標準輸出和文件): -a 追加到文件


join(連接兩個文件):-i  忽略大小寫;-o  按照指定文件欄位顯示;-t  使用字符作爲輸入和輸出字段的分隔符


paste(合併文件):-d 指定分隔符;-s 將文件內容平行合併,默認是tab鍵分隔


head(輸出文件的前幾行):-c 打印前多少K,M-n 打印前多少行


tail(輸出文件的後幾行):-c 打印後多少K,M-f 實時讀文件,隨着文件的暑促胡附加輸出;-n 輸出最後幾行


xargs(從標準輸入中執行命令)-a file 從指定文件中讀取數據作爲標準輸入;-0 處理包含空格的文件名;-d 指定分隔符,默認是空格分隔顯示;-i 標準輸入以{}

替;-I 標準輸入的結果以指定的名字代替;-t 顯示執行命令;-p 交互顯示是否執行命令;-n 最大命令行參數


nl(打印文件行號):-b<a|t> 指定行號顯示方式,a表示所有行號都打印行號,b表示空行不顯示行號;-n <ln|rn|rz> 行號顯示方法,ln左對齊,rn右對齊,rz 右邊顯

示;-w 行號欄位在左邊佔用的寬度


date(打印或設置系統日期和時間):-d string 顯示指定字符串所描述的時間,而非當前時間;-f datefile 從日期文件中按行讀入時間描述;-I 輸出IPS 8601格式的

日期和時間;-r 顯示文件的最後修改時間;-R 輸出RFC 2822 格式的日期和時間;-s string 設置時間所描述的字符串;-u 打印或者設置UTC時間


wget(非交互式網絡下載):-b 後臺運行;-c 斷點續傳;FTP --ftp-ser=USER,--ftp-password=PASS 設置ftp用戶名和密碼;-r 指定遞歸下載


curl(發送數據到URL,類似於HTTP客戶端):-k 允許HTTPS連接網站,-C 斷點續傳;-I 查看HTTP頭信息;-s 靜默模式,不輸出任何內容;-H 自定義頭信息發送

給服務器;-T 上傳文件


scp(基於SSH的安全遠程服務器文件拷貝):-i 指定私鑰文件;-l 限制速錄;-P 指定遠程主機SSH端口;-p 保存修改時間,訪問時間和權限;-r 遞歸拷貝目錄


rsync(遠程或本地文件同步工具):-v 顯示覆制信息;-q 不輸出錯誤信息;-c 跳過基礎校驗,不判斷修改時間和大小;-a 歸檔模式,保留權限,數組;-r 遞歸目

錄;-l 拷貝軟連接;-z 壓縮傳輸數據;-e 指定遠程shell


nohup(運行程序,忽略掛起信號)


iconv(將文件內容字符集轉成其他字符集):-l 列出所有已知的字符集;-f 原始文本編碼;-t 輸出編碼;-o 輸出到文件;-s 關閉警告


tar(歸檔目錄或文件):-c:創建新歸檔;-d:比較歸檔和文件系統的差異;-r:追加文件到歸檔;-t:存檔的內容列表;-x:提取歸檔所有文件;-C:改變解壓目

錄;-f:使用歸檔文件或設備歸檔;-jbzip2壓縮;-zgzip壓縮;-v:輸出處理過程


netstat(打印網絡連接、路由表、接口統計信息、僞裝連接和多播成員):-r 顯示路由表;-i 顯示接口表;-n 不解析名字;-p 顯示程序名;-l 顯示監聽的socket-a

顯示所有的socket -o 顯示計時器;-Z 顯示上下文;-t 只顯示tcp連接;-u 只顯示udp連接;-s 顯示每個協議統計信息


ss(比netstat更強大的socket查看工具):-n 不解析名字;-a 顯示所有的socket-l 顯示所有的監聽的socket-o 顯示計時器;-e 顯示socket詳細信息;-m 顯示

socket內存使用;-p 顯示進程使用的socket-I 顯示內部的TCP信息;-s 顯示socket使用匯總;-t 只顯示TCP socket;-u 只顯示UDP socket;-d 只顯示DDCP socket


lsof(列出打開的文件):-i 監聽的網絡地址,如果沒有,默認列出所有;-U 列出Unixsocket文件;-p 制定PID-u 指定用戶名或UID所有打開的文件;+D 遞歸

搜索


ps(報告當前進程的快照):-a 顯示所有的進程;-u 選擇有效的用戶ID或名稱;-x 顯示無控制終端的進程;-e 顯示所有進程;-f 全格式;-r 只顯示運行的進程;-T

這個終端的所有進程;-p 指定進程ID-m 線程;-o 用戶自定義格式;


top(動態顯示活動的進程和系統資源利用率):-d 信息刷新時間間隔;-p 只監控指定的進程PID-i 只顯示正在使用CPU的進程;-H 顯示線程;-u只查看指定用戶

名的進程;-b 將輸出編排成易處理格式,適合輸出到文件處理;-n 指定最大循環刷新數;-----交互命令: f 添加或殺出顯示的指標;c 顯示完整命令;P CPU使用

百分率排序;按駐留內存大小排序;T 按進程使用CPU時間排序;l 顯示每個CPU核心使用率;k 終止一個進程


free(查看內存使用率)-b bytes顯示;-k KB顯示;-m M 顯示;-g G 顯示;-h易讀單位顯示;-s 沒幾秒重複打印;-c 重複打印幾次退出;


df(查看文件系統的磁盤空間的使用情況):-a 包括虛擬文件系統;-h 可易讀單位顯示;-i 顯示inode信息而非塊使用量;-k 1K塊的數量;-t 只顯示指定文件系統爲

指定類型的信息;-T 顯示文件系統類型


vmstat(報告虛擬內存,swapio,上下文和CPU統計信息):-a 打印活躍和不活躍的內存頁;-d 打印硬盤統計信息;-D 統計硬盤表;-p 打印硬盤分區統計信

息;-s 打印虛擬內存表;-m 打印內存分配信息;-t 添加時間戳到輸出


iostat(報告CPU利用率和磁盤I/O):-c 顯示CPU使用率;-d 只顯示磁盤使用率;-k 單位KB/S代替BLOCK/S-m 單位 MB/S 代替Block/s;-N 顯示所有映射設備名

字;-t 打印報告時間;-x 顯示擴展統計信息;


sar(查看系統資源綜合方面利用率):-u CPU-r memory-b disk-n DEVNIC traffic-q systemload-b TPS-o output to file


dstat(查看系統資源綜合方面利用率需要額外安裝):-p cpu統計;-d 磁盤統計;-m 內存統計;-n 網絡統計;-s swap統計;-l 負載統計


ip(查看/操作路由表、設備、路由策略和隧道):---操作對象:address 網絡設備地址;12tp 以太網IP隧道;link 配置網絡設備;monitor 動態監控網絡連

接;mroute:多播路由緩存條目;route  路由表;rule 角色在路由策略數據庫;tunnel IP隧道;


ncTCPUDP連接和監聽):-I interval 指定間隔時間發送和接收行文本;-l 監聽模式;-n 不解析域名;-p 指定本地源端口;-s 指定本地源IP地址;-u 使用udp

議;默認是tcp-v 執行過程輸出;-w timeoute連接超時時間;-x proxy_address請求連接主機使用代理地址和端口;-z 指定掃描監聽端口,不發送任何數據


evel(執行參數作爲shell命令)


sshssh遠程連接客戶端)

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章