參考文章: 每天一個linux命令目錄
目錄
一、文件瀏覽命令
格式: 命令 [option] file
- cat 由第一行開始顯示文件內容
- tac 從最后一行開始顯示,tac 是 cat 的倒寫
- nl 顯示行號 -b a :空行也列出行號(類似 cat -n); -b t :非空行才列出行號(默認值);
- more 一頁一頁的顯示文件內容 [空格鍵]下一頁,[Backspace]上一頁。 +n 從笫n行開始顯示 -n 定義屏幕大小為n行 -c 清屏顯示
- less 與 more 類似,但他可以往前翻頁 [空格鍵] 滾動一行, [回車鍵] 滾動一頁,[pagedown]: 下一頁,[pageup]:上一頁
- head 看頭幾行, -n 設定行數
- tail 看尾部幾行 -f 循環讀取 tail -100f catalina.out
- od 以二進制的方式讀取文件內容
二、文件目錄操作命令
1. mkdir -m:mode 設定權限 -p:parents 創建父級目錄 mkdir -m 777 -p dir1/dir2
2. rm -r 遞歸 -f force 強行刪除,忽略不存在的文件,系統不再提示 rm -rf dir
3. mv -b :覆蓋前先備份 -f :force 強制覆蓋 -i :詢問是否覆蓋 mv 1.txt 2.txt 可用於重命名
4. ls命令 列出目錄中所有子目錄和文件
-a, –all 列出目錄下的所有文件,包括以.開頭的隱含文件
-l 列出目錄或文件的詳細信息,包括文件的權限、所有者、文件大小等
-R, –recursive 遞歸查詢 -r, –reverse 依相反次序排列 -t 以文件修改時間排序
-F 顯示文件類型(File type),在列出的文件名后添加符號:/ 表明是一個目錄;@ 表明是到其它文件的符號鏈接;* 表明是一個可執行文件。
ls -l s* 列出當前目錄中所有以“s”開頭的目錄的詳細內容
ls -F /opt/soft |grep /$ 只列出文件下的子目錄
ls -ltr s* 列出目錄下以s 開頭的檔案,愈新的排愈后面
ls | sed "s:^:`pwd`/:" 列出文件的絕對路徑
5. tar 為linux的文件和目錄創建檔案
tar [主選項+輔選項] 文件或目錄
主選項:【每條命令只能有一個主選項】
-c: --create 新建一個壓縮文檔,即打包 -x: --extract,--get 解壓文件
-t: --list 查看壓縮文檔里的所有內容 -r:--append 向壓縮文檔里追加文件 -u:--update 更新原壓縮包中的文件
輔助選項:
-z 支持gzip解壓文件 -j 支持bzip2解壓文件 -Z 支持compress解壓文件
-v 顯示操作過程 -f 指定壓縮文件 -t 顯示壓縮文件的內容
-d 記錄文件的差別 -W 確認壓縮文件的正確性 -l 文件系統邊界設置
-k 保留原有文件不覆蓋 -m 保留文件不被覆蓋
tar -cvf log.tar 1.log 2.log 僅打包,不壓縮!
tar -tf log.tar 不解壓的情況下查看
6. gzip
-a 使用ASCII文字模式 -d 解壓文件 -l 列出壓縮文件的詳細信息 -r 遞歸處理 -v 顯示指令執行過程
-num 用指定的數字num調整壓縮的速度,-1或--fast表示最快壓縮方法(低壓縮比),-9或--best表示最慢壓縮方法(高壓縮比)。系統缺省值為6。
gzip * / gzip -dv * 壓縮和解壓縮文件或目錄,若當前目錄下有10個文件則生成10個.gz的壓縮包,gzip沒有打包功能!
三、文件查找命令
1. find命令 在目錄結構中搜索文件
格式:find pathname -options [-print -exec -ok ...]
命令選項:
-name 按照文件名查找文件 -perm 按照文件權限來查找文件
-user 按照文件屬主來查找文件 -group 按照文件所屬的組來查找文件
-mtime (modify time)指文件內容被修改的時間 +n:大於n, -n:小於n
-atime (access time)文件被讀取或者執行的時間 -ctime (change time)文件狀態改變時間,如通過chmod修改文件屬性
-type 查找某一類型的文件,f:普通文件,d:目錄,p:管道文件,l:符號鏈接文件,c:字符設備文件,b:塊設備文件
-size n:[c] 查找文件長度為n塊的文件,帶有c時表示文件長度以字節計 -depth:在查找文件時,首先查找當前目錄中的文件,然后再在其子目錄中查找
find -atime -2 查找2天內修改過的文件
find . -type f -name "*.log" 根據關鍵字和類型查找
find /opt/soft/ -perm 777 按照目錄或文件的權限來查找文件
find . -size +1000c -print 查找當前目錄大於1K的文件
2. which命令 查看可執行文件的位置
which指令會在PATH變量指定的路徑中,搜索某個系統命令的位置,並且返回第一個搜索結果。 which pwd
3. whereis命令 定位文件在文件系統中的位置
-b 查找二進制文件 -m 幫助文件 -s 源代碼文件 whereis -b svn
4. locate命令 配合數據庫查看文件位置
locate和find功能類似,但locate是透過updatedb程序將硬盤中的所有檔案和目錄資料先建立一個索引數據庫,在執行loacte時直接找該索引,查詢速度會較快
locate pwd 查找和pwd相關的所有文件
locate /etc/sh 搜索etc目錄下所有以sh開頭的文件
四、文件權限設置命令
1. chmod命令
權限分為只讀r、只寫w 和 可執行x,用戶分為 文件所有者u、同組用戶g、其他用戶o 和 所有的用戶及群組a
1)文字設定法: chmod [who] [+ | - | =] [mode] 文件名
2)數字設定法: chmod [mode] 文件名
- 數字屬性的mode為3個數字,按順序表示(u)(g)(o)對應的權限。r=4,w=2,x=1 ,- 為0 表示刪除權限
- rwx屬性為4+2+1=7 ; rw-屬性則4+2=6;r-x屬性則4+1=5。
- chmod ug+w,o-x test.log ; chmod -R 777 dir
2. chgrp命令 (change group) 改變文件或目錄所屬的用戶組
-c 當發生改變時輸出調試信息 -f 不顯示錯誤信息 -R 遞歸處理 -v 運行時顯示詳細的處理信息
--dereference 作用於符號鏈接的指向,而不是符號鏈接本身 --no-dereference 作用於符號鏈接本身
用戶組的所有信息都存放在/etc/group文件中 cat /etc/group
chgrp -v group1 1.log
chgrp --reference=1.log 2.log 改變文件2.log的群組屬性,使得文件2.log的群組屬性和參考文件1.log的群組屬性相同
3. chown命令(change owner) 改變文件或目錄的所有者和所屬的用戶組
chown -R root /usr/tony
五、系統性能監控命令
1. top命令 能夠實時顯示系統中各個進程的資源占用狀況,常用於服務端性能分析。
-u 指定用戶名; -p 指定進程; -n 循環顯示的次數
顯示結果中的S 表示進程狀態。D=不可中斷的睡眠狀態 R=運行 S=睡眠 T=跟蹤/停止 Z=僵屍進程
2. free命令 顯示系統使用和空閑的內存情況
-k 以KB為單位顯示內存使用情況; -m 以MB為單位;-g 以GB為單位; -s<間隔秒數> 持續觀察內存使用狀況。
free -m -s 10
3. vmstat命令 顯示關於內核線程、虛擬內存、磁盤、陷阱和 CPU 活動的統計信息。
-a:顯示活躍和非活躍內存
-f:顯示從系統啟動至今的fork數量 。
-m:顯示slabinfo
-n:只在開始時顯示一次各字段名稱。
-s:顯示內存相關統計信息及多種系統活動數量。
-d:顯示磁盤相關統計信息。
Procs(進程) r: 運行隊列中進程數量 b: 等待IO的進程數量
Memory(內存) swpd: 使用虛擬內存大小 free: 可用內存大小 buff: 用作緩沖的內存大小 cache: 用作緩存的內存大小
Swap si: 每秒從交換區寫到內存的大小 so: 每秒寫入交換區的內存大小
IO bi: 每秒讀取的塊數 bo: 每秒寫入的塊數
系統 in: 每秒中斷數,包括時鍾中斷 cs: 每秒上下文切換數。
CPU us: 用戶進程執行時間(user time) sy: 系統進程執行時間 id: 中央處理器的空閑時間(包括IO等待時間) wa: 等待IO時間 (以百分比表示)
4. iostat命令 統計系統的磁盤操作活動
查看CPU、網卡、tty設備、磁盤、CD-ROM 等等設備的活動情況, 負載信息。但不能指定進程。
格式:iostat[參數][時間][次數]
-C 顯示CPU使用情況 -d 顯示磁盤使用情況
-k 以 KB 為單位顯示 -m 以 M 為單位顯示
-N 顯示磁盤陣列(LVM) 信息 -n 顯示NFS 使用情況
-p[磁盤] 顯示磁盤和分區的情況 -t 顯示終端和CPU的信息
-x 顯示詳細信息 -V 顯示版本信息
(1) iostat -2 -3 每隔2秒刷新顯示,且顯示3次
%user:CPU處在用戶模式下的時間百分比 %nice:CPU處在帶NICE值的用戶模式下的時間百分比 %system:系統模式
%iowait:CPU等待輸入輸出完成時間的百分比 %steal:管理程序維護另一個虛擬處理器時,虛擬CPU的無意識等待時間百分比 %idle:CPU空閑時間百分比
備注:如果%iowait的值過高,表示硬盤存在I/O瓶頸,%idle值高,表示CPU較空閑,如果%idle值高但系統響應慢時,有可能是CPU等待分配內存,此時應加大內存容量。%idle值如果持續低於10,那么系統的CPU處理能力相對較低,表明系統中最需要解決的資源是CPU。
(2) iostat -d -x -k 1 1 查看設備使用率(%util)、響應時間(await)
每秒用於 I/O 操作的時間比,如果 %util 接近 100%,說明產生的I/O請求太多,I/O系統已經滿負荷,該磁盤可能存在瓶頸。
5. lsof命令 列出當前系統打開的文件
-c <進程名> 列出指定進程所打開的文件; -p <進程號> 列出指定進程號所打開的文件
-u username 顯示所屬user進程打開的文件; -g gid 顯示歸屬gid的進程情況
+d <目錄> 顯示目錄下被進程打開的文件 +D<目錄> 同上,但是會搜索目錄下的所有目錄,時間相對較長
-a 表示兩個參數都必須滿足時才顯示結果 -i 用以顯示符合條件的進程情況
lsof -d <FD> 0表示標准輸入,1表示標准輸出,2表示標准錯誤,所以大多數應用程序所打開的文件的 FD 都是從 3 開始
lsof -c mysql -c apache 列出一個或多個程序進程所打開的文件信息
lsof -i 列出所有的網絡連接 lsof -i tcp/udp/:3306/udp:55/tcp:80
lsof -i @peida.linux:20,21,22,25,53,80 -r 3 每隔3秒打印peida.linux上端口為:20,21,22,25,53,80相關的所有文件信息
6. ps (Process Status) 列出系統當前運行的進程。
-a 顯示同一終端下的所有程序 -aux 顯示所有包含其他使用者的行程 -f 顯示程序間的關系 -u 指定用戶
ps -ef|grep tomcat ps 與grep常用組合用法,查找特定進程
ps -aux --sort -pcpu | less 根據 CPU 使用率按降序排序
ps -aux --sort -pmem | less 根據內存使用率按降序排序
六、網絡查看命令
1. ifconfig命令 獲取或修改網絡接口配置信息
格式:ifconfig [網絡設備] [參數]
ifconfig 顯示網絡設備信息
ifconfig eth0 up/down 啟動/關閉指定網卡
ifconfig eth0 add/del 33ffe:3240:800:1005::2/64 為網卡eth0配置/刪除IPv6地址
ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE 修改MAC地址
ifconfig eth0 192.168.120.56 netmask 255.255.255.0 broadcast 192.168.120.255 配置IP地址,添加子掩碼和廣播地址
ifconfig eth0 mtu 1500 設置最大傳輸單元
ifconfig eth0 arp/-arp 啟用/關閉ARP協議
2. ip命令 ip命令用來顯示或操縱Linux主機的路由、網絡設備、策略路由和隧道。[替換ifconfig]
3. netstat命令 顯示網絡連接狀態及其相關信息
-a 顯示所有socket,包括正在監聽的。 -c 每隔1秒就重新顯示一遍,直到用戶中斷它。
-i 顯示所有網絡接口的信息 -n 以網絡IP地址代替名稱,顯示出網絡連接情形。
-t 顯示TCP協議的連接情況 -u 顯示UDP協議的連接情況。
-p 顯示建立相關連接的程序名和PID。 -b 顯示在創建每個連接或偵聽端口時涉及的可執行程序。 -o顯示與每個連接相關的所屬進程 ID。
-e 顯示以太網統計。此選項可以與 -s 選項結合使用。 -s 顯示每個協議的統計。
-f 顯示外部地址的完全限定域名(FQDN)。 -r顯示核心路由表,格式同“route -e”
netstat -l 顯示監聽的套接口
netstat -a | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 統計機器中網絡連接各個狀態個數
netstat -ap | grep ssh 找出程序運行的端口
netstat -anpt | grep ':8080' 找出運行在指定端口的進程
4. ss命令 (Socket Statistics) 用來獲取socket統計信息 [替換netstat]
ss可以顯示和netstat類似的內容。但它能夠顯示更多更詳細的有關TCP和連接狀態的信息,而且比netstat更快速更高效。ss比netstat快的主要原因是,netstat是遍歷/proc下面每個PID目錄,ss直接讀/proc/net下面的統計信息。可以使用 time ss 和 time netstat -at 對比兩個命令的效率。
ss常用參數和netstat類似,如-anp
5. ping命令 用來測試與目標主機的連通性
ping -c 10 -i 0.5 192.168.120.206 -c 指定次數 -i 間隔的秒數
ping -b 192.168.120.1 ping網關,可用route查看網關地址
6. telnet命令 遠程登錄
telnet因為采用明文傳送報文,安全性不好,很多Linux服務器都不開放telnet服務,而改用更安全的ssh方式了
telnet <ip/hostname>
7. ssh命令 遠程登錄
8. rcp命令 (remote file copy) 遠程文件拷貝
rcp [參數] [源文件] [目標文件] -r 遞歸 -x 為傳送的所有數據打開DES加密 -p 試圖保留源文件的修改時間和模式
rcp -r /home/root/dir hostname:/home/root/
9. scp命令 (secure copy) 遠程文件拷貝
scp [參數] [原路徑] [目標路徑]
scp root@192.168.120.204:/home/root/test.tar.gz /home/root/ 從遠處復制文件到本地目錄, scp傳輸是加密的
10. route命令 顯示和操作IP路由表
route -n 顯示當前路由
route add/del default gw 192.168.120.240 添加/刪除默認網關
route add/del -net 224.0.0.0 netmask 240.0.0.0 dev eth0 添加/刪除網關/設置網關
route add/del -net 224.0.0.0 netmask 240.0.0.0 reject 添加/刪除一條屏蔽的路由,目的地址為 224.x.x.x 將被拒絕
11. traceroute命令 檢測發出數據包的主機到目標主機之間所經過的網關
-q: 設置向每個網關發送的探測包個數(缺省為3) -m 設置跳數
以下返回結果每個紀錄就是一跳 ,每跳表示一個網關,我們看到每行有三個時間,其實就是3個數據包對映的網關響應時間。
[root@localhost ~]# traceroute www.baidu.com traceroute to www.baidu.com (61.135.169.125), 30 hops max, 40 byte packets 1 192.168.74.2 (192.168.74.2) 2.606 ms 2.771 ms 2.950 ms 2 211.151.56.57 (211.151.56.57) 0.596 ms 0.598 ms 0.591 ms 3 211.151.227.206 (211.151.227.206) 0.546 ms 0.544 ms 0.538 ms 4 210.77.139.145 (210.77.139.145) 0.710 ms 0.748 ms 0.801 ms 5 202.106.42.101 (202.106.42.101) 6.759 ms 6.945 ms 7.107 ms 6 61.148.154.97 (61.148.154.97) 718.908 ms * bt-228-025.bta.net.cn (202.106.228.25) 5.177 ms 7 124.65.58.213 (124.65.58.213) 4.343 ms 4.336 ms 4.367 ms 8 202.106.35.190 (202.106.35.190) 1.795 ms 61.148.156.138 (61.148.156.138) 1.899 ms 1.951 ms 9 * * * 10 * * *
七、linux 其他命令
1. grep 文本搜索
ps -ef|grep -c svn 查找指定進程個數
cat test.txt | grep -nf key.txt 從文件中讀取關鍵詞對test.txt進行搜索, 且顯示行號
grep 'linux' test1.txt test2.txt 從多個文件中查找關鍵詞
cat test.txt |grep ^[^u] 輸出非u開頭的行內容
cat test.txt |grep hat$ 輸出以hat結尾的行內容
2. wc 統計指定文件中的字節數、字數、行數
-c 統計字節數。 -m 統計字符數。這個標志不能與 -c 標志一起使用。
-l 統計行數。 -w word統計單詞數。計算由空白、跳格或換行字符分隔的字符串數量。
wc test.txt 顯示:行數 單詞數 字節數 文件名
ls -l | wc -l 統計當前目錄下的文件數
3. watch 周期性執行命令/定時執行命令
-n或--interval 指定間隔的時間(缺省2秒) -d或--differences 會高亮顯示變化的區域
watch -n 5 -d 'cat /proc/loadavg' 每10秒輸出系統的平均負載
4. ln 文件鏈接
為某一個文件在另外一個位置建立一個同步的鏈接,可以將其視為檔案的別名,而鏈接又可分為兩種 : 硬鏈接(hard link)與軟鏈接(symbolic link)。硬鏈接會在你選定的位置上生成一個和源文件大小相同的文件,無論是軟鏈接還是硬鏈接,文件都保持同步變化。
軟鏈接:
1.軟鏈接,以路徑的形式存在。類似於Windows操作系統中的快捷方式
2.軟鏈接可以 跨文件系統 ,硬鏈接不可以
3.軟鏈接可以對一個不存在的文件名進行鏈接
4.軟鏈接可以對目錄進行鏈接
硬鏈接:
1.硬鏈接,以文件副本的形式存在。但不占用實際空間。
2.不允許給目錄創建硬鏈接
3.硬鏈接只有在同一個文件系統中才能創建
ln [參數][源文件或目錄][目標文件或目錄]
-b 刪除,覆蓋以前建立的鏈接 -i 交互模式,文件存在則提示用戶是否覆蓋
-d 允許超級用戶制作目錄的硬鏈接 -f 強制執行
-s 軟鏈接(符號鏈接) -n 把符號鏈接視為一般目錄 -v 顯示詳細的處理過程
ln -s test.log link1 給文件創建軟鏈接
ln test.log ln1 給文件創建硬鏈接
ln test.log /opt/soft 創建test.log的硬連接/opt/soft/test.log
1)源文件被刪除后,並沒有影響硬鏈接文件;軟鏈接文件在centos系統下不斷的閃爍,提示源文件已經不存在
2)重建源文件后,軟鏈接不在閃爍提示,說明已經鏈接成功,找到了鏈接文件系統;重建后,硬鏈接文件並沒有受到源文件影響,硬鏈接文件的內容還是保留了刪除前源文件的內容,說明硬鏈接已經失效
5. make 編譯命令
make是一個解釋makefile中指令的命令工具,make可自動完成編譯工作,而不用gcc命令單獨編譯每個源文件,並且可以只對程序員在上次編譯后修改過的部分進行編譯,提高了開發效率。Makefile文件描述了整個工程的編譯、連接等規則。
Linux應用軟件的安裝包通常有三種:
a. tar包,如software.tar.gz。它是使用UNIX系統的打包工具tar打包的。
1)“tar –xvf 解壓后的tar包”進行解包;
2) 閱讀附帶的INSTALL文件、README文件;
3) 執行“./configure”命令為編譯做好准備;
4) 執行“make”命令進行軟件編譯;
5) 執行“make install”完成安裝;
6) 執行“make clean”刪除安裝時產生的臨時文件。
b. rpm包,如software.rpm。它是Redhat Linux提供的一種包封裝格式。
rpm參數 : -i 安裝軟件 -t 測試安裝,不是真的安裝 -p 顯示安裝進度
-U 升級安裝 -v 檢測套件是否正確安裝 -f 忽略任何錯誤
安裝:rpm –ivh software.rpm 卸載: rpm –e software //軟件名
c. dpkg包,如software.deb。它是Debain Linux提供的一種包封裝格式。
安裝:dpkg –i software-1.2.3-1.deb 卸載: dpkg –e software
RedHat 系列
1) 常見的安裝包格式 rpm包,安裝rpm包的命令是“rpm -參數”
2)包管理工具 yum
3) 支持tar包
Debian系列
1) 常見的安裝包格式 deb包,安裝deb包的命令是“dpkg -參數”
2) 包管理工具 apt-get
3) 支持tar包
apt-get update 更新軟件包,在修改/etc/apt/sources.list或者/etc/apt/preferences之后運行該命令 apt-get upgrade 更新已安裝的軟件包 apt-get dist-upgrade 升級系統 apt-get install packagename 安裝軟件包 apt-get remove packagename 卸載軟件包(保留配置文件) apt-get –purge remove packagename 卸載軟件包(刪除配置文件) apt-get clean 刪除包緩存中的所有deb //APT的底層包是dpkg, 而dpkg安裝軟件包時, 會將*.deb放在緩存中/var/cache/apt/archives/ apt-get autoclean 刪除包緩存中的已經過期的deb
6. awk 命令