# **Linux命令使用:**
## **History**
展示歷史命令
**參考菜鳥 : [Linux 命令大全 | 菜鳥教程 (runoob.com)](https://www.runoob.com/linux/linux-command-manual.html)**
## **Ls:**
* a 顯示所有文件及目錄 (**.**?開頭的隱藏文件也會列出)
* l 除文件名稱外,亦將文件型態、權限、擁有者、文件大小等資訊詳細列出
* r 將文件以相反次序顯示(原定依英文字母次序)
* t 將文件依建立時間之先后次序列出
* h 以人可讀常用單位展示大小
* A 同 -a ,但不列出 "." (目前目錄) 及 ".." (父目錄)
* F 在列出的文件名稱后加一符號;例如可執行檔則加 "\*", 目錄則加 "/"
* R 若目錄下有文件,則以下之文件亦皆依序列出
### **eg:`ls -lhtr /home/`**
## **Cp:**
* a:此選項通常在復制目錄時使用,它保留鏈接、文件屬性,并復制目錄下的所有內容。其作用等于dpR參數組合。
* d:復制時保留鏈接。這里所說的鏈接相當于 Windows 系統中的快捷方式。
* f:覆蓋已經存在的目標文件而不給出提示。
* i:與?**f**?選項相反,在覆蓋目標文件之前給出提示,要求用戶確認是否覆蓋,回答?**y**?時目標文件將被覆蓋。
* p:除復制文件的內容外,還把修改時間和訪問權限也復制到新文件中。
* r:若給出的源文件是一個目錄文件,此時將復制該目錄下所有的子目錄和文件。
* l:不復制文件,只是生成鏈接文件。
### **eg:`cp -rf /home/packageA/* /home/cp/packageB/`**
## **Scp:**
* 1: 強制scp命令使用協議ssh1
* 2: 強制scp命令使用協議ssh2
* 4: 強制scp命令只使用IPv4尋址
* 6: 強制scp命令只使用IPv6尋址
* B: 使用批處理模式(傳輸過程中不詢問傳輸口令或短語)
* C: 允許壓縮。(將-C標志傳遞給ssh,從而打開壓縮功能)
* p:保留原文件的修改時間,訪問時間和訪問權限。
* q: 不顯示傳輸進度條。
* r: 遞歸復制整個目錄。
* v:詳細方式顯示輸出。scp和ssh(1)會顯示出整個過程的調試信息。這些信息用于調試連接,驗證和配置問題。
* c cipher: 以cipher將數據傳輸進行加密,這個選項將直接傳遞給ssh。
* F ssh\_config: 指定一個替代的ssh配置文件,此參數直接傳遞給ssh。
* i identity\_file: 從指定文件中讀取傳輸時使用的密鑰文件,此參數直接傳遞給ssh。
* l limit: 限定用戶所能使用的帶寬,以Kbit/s為單位。
* o ssh\_option: 如果習慣于使用ssh\_config(5)中的參數傳遞方式,
* P port:注意是大寫的P, port是指定數據傳輸用到的端口號
* S program: 指定加密傳輸時所使用的程序。此程序必須能夠理解ssh(1)的選項。
1.本地文件或目錄復制到遠程
**eg:`scp -r local_file remote_username@remote_ip:remote_folde`**
或
**eg:`scp -r local_file remote_ip:remote_folder`**
2.遠程復制到本地:只要將從本地復制到遠程的命令的后2個參數調換順序即可
3.遠程服務器防火墻有為scp命令設置了指定的端口,我們需要使用 -P 參數來設置命令的端口號
**eg:`scp -P 4588 remote@www.runoob.com:/usr/local/sin.sh /home/administrator/`**
## **Nc:**
1.?實現任意TCP/UDP端口的偵聽,nc可以作為server以TCP或UDP方式偵聽指定端口
2.端口的掃描,nc可以作為client發起TCP或UDP連接
3.機器之間傳輸文件
4.機器之間網絡測速
### **參數:**
\-g 設置路由器躍程通信網關,最多可設置8個。
\-G 設置來源路由指向器,其數值為4的倍數。
h 在線幫助。
\-i 設置時間間隔,以便傳送信息及掃描通信端口。
\-l 使用監聽模式,管控傳入的資料。
\-n 直接使用IP地址,而不通過域名服務器。
\-o 指定文件名稱,把往來傳輸的數據以16進制字碼傾倒成該文件保存。
\-p 設置本地主機使用的通信端口。
\-r 亂數指定本地與遠端主機的通信端口。
\-s 設置本地主機送出數據包的IP地址。
\-u 使用UDP傳輸協議。
\-v 顯示指令執行過程。
\-w 設置等待連線的時間。
\-z 使用0輸入/輸出模式,只在掃描通信端口時使用。
### **示例:**
$ nc -l 9999 ???????????????????????# 開啟一個本地9999的TCP協議端口,由客戶端主動發起連接,一旦連接必須由服務端發起關閉
$ nc -vw 2 192.168.21.248 11111 ????# 通過nc去訪問192.168.21.248主機的11111端口,確認是否存活;可不加參數
$ nc -ul 9999 ??????????????????????# 開啟一個本地9999的UDP協議端口,客戶端不需要由服務端主動發起關閉
$ nc 192.168.21.248 9999 < test ????# 通過192.168.21.248的9999TCP端口發送數據文件
$ nc -l 9999 > zabbix.file ?????????# 開啟一個本地9999的TCP端口,用來接收文件內容
### **測試網速:**
A機器操作如下:
$yum install -y dstat ????? # A機器安裝dstat命令
$ nc -l 9999 > /dev/null
B機器開啟數據傳輸
nc 10.0.1.161 9999 </dev/zero
A機器進行網絡監控
$ dstat
## **vi:**
### **1、進入vi**
????在系統提示符號輸入vi及文件名稱后,就進入vi全屏幕編輯畫面:
$ vi myfile
首先會進入「命令行模式(command mode)」
a) 切換至插入模式(Insert mode)編輯文件
在「命令行模式(command mode)」下按一下字母「i」就可以進入「插入模式(Insert mode)」,這時候你就可以開始輸入文字了。 按ESC退回命令行模式
b) 退出vi及保存文件
在「命令行模式(command mode)」下,按一下「:」冒號鍵進入「Last line mode」,例如:
: w filename (輸入 「w filename」將文章以指定的文件名filename保存)
: wq (輸入「wq」,存盤并退出vi)
: q! (輸入q!, 不存盤強制退出vi)
按ESC退回命令行模式
### **2、命令行模式(command mode)功能鍵**
1). 插入模式
按「i」切換進入插入模式「insert mode」,按“i”進入插入模式后是從光標當前位置開始輸入文件;
按「a」進入插入模式后,是從目前光標所在位置的下一個位置開始輸入文字;
按「o」進入插入模式后,是插入新的一行,從行首開始輸入文字。
2). 從插入模式切換為命令行模式
按「ESC」鍵。
3). 移動光標
vi可以直接用鍵盤上的光標來上下左右移動,但正規的vi是用小寫英文字母「h」、「j」、「k」、「l」,分別控制光標左、下、上、右移一格。
按「ctrl」+「b」:屏幕往“后”移動一頁。
按「ctrl」+「f」:屏幕往“前”移動一頁。
按「ctrl」+「u」:屏幕往“后”移動半頁。
按「ctrl」+「d」:屏幕往“前”移動半頁。
按數字「0」:移到文章的開頭。
按「G」:移動到文章的最后。
按「$」:移動到光標所在行的“行尾”。
按「^」:移動到光標所在行的“行首”
按「w」:光標跳到下個字的開頭
按「e」:光標跳到下個字的字尾
按「b」:光標回到上個字的開頭
按「#l」:光標移到該行的第#個位置,如:5l,56l。
4). 刪除文字
「x」:每按一次,刪除光標所在位置的“后面”一個字符。
「#x」:例如,「6x」表示刪除光標所在位置的“后面”6個字符。
「X」:大寫的X,每按一次,刪除光標所在位置的“前面”一個字符。
「#X」:例如,「20X」表示刪除光標所在位置的“前面”20個字符。
「dd」:刪除光標所在行。
「#dd」:從光標所在行開始刪除#行
5). 復制
「yw」:將光標所在之處到字尾的字符復制到緩沖區中。
「#yw」:復制#個字到緩沖區
「yy」:復制光標所在行到緩沖區。
「#yy」:例如,「6yy」表示拷貝從光標所在的該行“往下數”6行文字。
「p」:將緩沖區內的字符貼到光標所在位置。注意:所有與“y”有關的復制命令都必須與“p”配合才能完成復制與粘貼功能。
6). 替換
「r」:替換光標所在處的字符。
「R」:替換光標所到之處的字符,直到按下「ESC」鍵為止。
7). 回復上一次操作
「u」:如果您誤執行一個命令,可以馬上按下「u」,回到上一個操作。按多次“u”可以執行多次回復。
8). 更改
「cw」:更改光標所在處的字到字尾處
「c#w」:例如,「c3w」表示更改3個字
9). 跳至指定的行
「ctrl」+「g」列出光標所在行的行號。
「#G」:例如,「15G」,表示移動光標至文章的第15行行首。
### **3、Last line mode下命令簡介**
在使用「last line mode」之前,請記住先按「ESC」鍵確定您已經處于「command mode」下后,再按「:」冒號即可進入「last line mode」。
A) 列出行號
「set nu」:輸入「set nu」后,會在文件中的每一行前面列出行號。
B) 跳到文件中的某一行
「#」:「#」號表示一個數字,在冒號后輸入一個數字,再按回車鍵就會跳到該行了,如輸入數字15,再回車,就會跳到文章的第15行。
C) 查找字符
「/關鍵字」:先按「/」鍵,再輸入您想尋找的字符,如果第一次找的關鍵字不是您想要的,可以一直按「n」會往后尋找到您要的關鍵字為止。
「?關鍵字」:先按「?」鍵,再輸入您想尋找的字符,如果第一次找的關鍵字不是您想要的,可以一直按「n」會往前尋找到您要的關鍵字為止。
D) 保存文件
「w」:在冒號輸入字母「w」就可以將文件保存起來。
E) 離開vi
「q」:按「q」就是退出,如果無法離開vi,可以在「q」后跟一個「!」強制離開vi。
「qw」:一般建議離開時,搭配「w」一起使用,這樣在退出的時候還可以保存文件。
「Z」:和qw一樣具有保存功能
## **Chmod:**
其中參數:
·u 表示該文件的擁有者,g 表示與該文件的擁有者屬于同一個群體(group)者,o 表示其他以外的人,a 表示這三者皆是。
·\+ 表示增加權限、- 表示取消權限、= 表示唯一設定權限。
·r 表示可讀取,w 表示可寫入,x 表示可執行,X 表示只有當該文件是個子目錄或者該文件已經被設定過為可執行。
其他參數說明:
·\-c : 若該文件權限確實已經更改,才顯示其更改動作
·\-f : 若該文件權限無法被更改也不要顯示錯誤訊息
·\-v : 顯示權限變更的詳細資料
·\-R : 對目前目錄下的所有文件與子目錄進行相同的權限變更(即以遞歸的方式逐個變更)
·\--help : 顯示輔助說明
·\--version : 顯示版本
### **實例**
將文件 file1.txt 設為所有人皆可讀取 :
chmod ugo+r file1.txt
將文件 file1.txt 設為所有人皆可讀取 :
chmod a+r file1.txt
將文件 file1.txt 與 file2.txt 設為該文件擁有者,與其所屬同一個群體者可寫入,但其他以外的人則不可寫入 :
chmod ug+w,o\-w file1.txt file2.txt
為 ex1.py 文件擁有者增加可執行權限:
chmod u+x ex1.py
將目前目錄下的所有文件與子目錄皆設為任何人可讀取 :
chmod \-R a+r \*
此外chmod也可以用數字來表示權限如 :
chmod 777?file
語法為:
chmod abc file
其中a,b,c各為一個數字,分別表示User、Group、及Other的權限。
r=4,w=2,x=1
·若要 rwx 屬性則 4+2+1=7;
·若要 rw- 屬性則 4+2=6;
·若要 r-x 屬性則 4+1=5。
## **chown:**
**參數**?:
* user : 新的文件擁有者的使用者 ID
* group : 新的文件擁有者的使用者組(group)
* c : 顯示更改的部分的信息
* f : 忽略錯誤信息
* h :修復符號鏈接
* v : 顯示詳細的處理信息
* R : 處理指定目錄以及其子目錄下的所有文件
* \-help : 顯示輔助說明
* \-version : 顯示版本
### **實例**
把 /var/run/httpd.pid 的所有者設置 root:
* chown root /var/run/httpd.pid
將文件 file1.txt 的擁有者設為 runoob,群體的使用者 runoobgroup :
* chown runoob:runoobgroup file1.txt
將當前前目錄下的所有文件與子目錄的擁有者皆設為 runoob,群體的使用者 runoobgroup:
* chown -R runoob:runoobgroup \*
把 /home/runoob 的關聯組設置為 512 (關聯組ID),不改變所有者:
* chown :512 /home/runoob
## **Top、Htop:**
### **參數:**
top: -d delay -n iterations [-u user | -U user] -p pid [,pid ...]
-d 每[延遲]秒更新一次
-n 更新[計數]次
-u 查看指定使用者
-p 查看指定任務id
htop:
-C--無顏色使用單色配色方案
-d--delay設置更新之間的延遲,以十分之一秒為單位
-h--幫助打印此幫助屏幕
-s--sort key=按列排序(try--sort key=列表幫助)
-u--user=USERNAME僅顯示給定用戶的進程
-p--pid,[,pid,pid…]僅顯示給定的PID
-v--版本打印版本信息
### **區別:**
* htop提供了正在運行的完整進程列表,而不是最消耗資源的進程
* htop使用顏色并提供關于處理器,交換和內存狀態的視覺信息。
* htop支持鼠標操作,top不支持
### **解析使用:**
top: [https://www.cnblogs.com/zhoug2020/p/6336453.html](https://www.cnblogs.com/zhoug2020/p/6336453.html)
htop: [https://www.cnblogs.com/yqsun/p/5396363.html](https://www.cnblogs.com/yqsun/p/5396363.html)
## **Free:**
### **參數:**
usage: free [-b|-k|-m|-g|-h] [-l] [-o] [-t] [-s delay] [-c count] [-V]
-b,-k,-m,-g 以字節、KB、MB或GB為單位顯示輸出
-h 人類可讀輸出(自動單位縮放)
-l 顯示詳細的低內存和高內存統計信息
-o 使用舊格式(無-/+緩沖區/緩存線)
-t 顯示RAM+交換的總計
-s 每[延遲]秒更新一次
-c 更新[計數]次
-a 如果由內核導出,則顯示可用內存(>每行80個字符)
-V 顯示版本信息并退出
### **常用:**
$ free -h -s 10 -c 6 # 每10秒刷新一次,共刷新6次,測試終止任務查看內存釋放,可配合重定向使用(free -h -s 10 -c 6 > ./log.free &)
## **Netstart:**
### **參數:**
-a (all) 顯示所有選項,默認不顯示LISTEN相關。
-t (tcp) 僅顯示tcp相關選項。
-u (udp) 僅顯示udp相關選項。
-n 拒絕顯示別名,能顯示數字的全部轉化成數字。
-l 僅列出有在 Listen (監聽) 的服務狀態。
-p 顯示建立相關鏈接的程序名
-r 顯示路由信息,路由表
-e 顯示擴展信息,例如uid等
-s 按各個協議進行統計
-c 每隔一個固定時間,執行該netstat命令。
### **使用:**
1、列出所有端口?$netstat?-a
2、列出所有?tcp?端口 $netstat?-at
3、列出所有?udp?端口?$netstat?-au
4、只顯示監聽端口?$netstat?-l
5、只列出所有監聽?tcp?端口?$netstat?-lt
6、只列出所有監聽?udp?端口?$netstat?-lu
7、列出所有監聽?UNIX?端口?$netstat?-lx
8、顯示所有端口的統計信息?$netstat?-s
9、顯示?TCP?或?UDP?端口的統計信息?$netstat?-st?或?-su
10、?輸出中顯示?PID?和進程名稱?$netstat?-p
11、netstat?輸出中不顯示主機,端口和用戶名?(host,?port?or?user)
當你不想讓主機,端口和用戶名顯示,使用?netstat?-n。將會使用數字代替那些名稱。
同樣可以加速輸出,因為不用進行比對查詢。
$netstat?-an
如果只是不想讓這三個名稱中的一個被顯示,使用以下命令
$netsat?-a?--numeric-ports
$netsat?-a?--numeric-hosts
$netsat?-a?--numeric-users
12、持續輸出?netstat?信息??#netstat?-c
13、找出程序運行的端口?#netstat??-ap?|?grep?':80'
14、查看連接某服務端口最多的的IP地址(前20個)
$netstat?-nat?|?grep?"10.1.62.23:443"?|awk?'{print?$5}'|awk?-F:?'{print?$1}'|sort|uniq?-c|sort?-nr|head?-20
15、TCP各種狀態列表?
$netstat?-nat?|awk?'{print?$6}'
統計數量
$netstat?-nat?|awk?'{print?$6}'|sort|uniq?-c
排序
$netstat?-nat?|awk?'{print?$6}'|sort|uniq?-c|sort?-rn
$netstat?-n?|?awk?'/^tcp/?{++S\[$NF\]}?END?{for(a?in?S)?print?a,?S\[a\]}'
16、直接統計tcp數量監聽的數量
$netstat?-ant?|?wc?-l
17、監控端口使用情況(常用)
$netstat?-nltp