查詢命令
find
* find [指定查找目錄] [查找規則] [查找完后執行的action]
* find ~/.m2 -name “*.lastUpdated” -exec grep -q “Could not transfer” {} \; -print -exec rm {} \;(查找以lastUpdated 為后綴的文件中包含 “Could not…”的文件,打印并刪除他)(`*`表示 通配任意的字符;?表示 通配任意的單個字符)
* -iregex/regex (后面跟正則表達式,i忽略大小寫)
* -user ? ? //根據屬主來查找文件
* -group ? ? //根據屬組來查找文件
* -a and -o and –not ? ? //連接多個條件,-a是與關系,-o是或關系,-not是取反
* -atime;-mtime;-ctime;-amin;-mmin;-cmin ? ? //這里atime,mtime,ctime就是分別對應的“最近一次訪問時間”“最近一次內容修改時間”“最近一次屬性修改時間”,這里的atime的單位指的是“天”,amin的單位是分鐘(find /tmp –atime +5 //表示查找在五天內沒有訪問過的文件;find /tmp -atime -5 //表示查找在五天內訪問過的文件)
-type ? ?//根據文件類型來查找文件(f 普通文件;d目錄文件; l 鏈接文件; b塊設備文件;c 字符設備文件; p 管道文件;s socket文件)
* -size ? ?//根據文件大小來查找文件(“find /tmp -size 2M”查找在/tmp 目錄下等于2M的文件;+2M,大于;-2M,小于)
-perm ? ?//根據文件權限來查找文件(“find /tmp -perm 755 ” 查找在/tmp目錄下權限是755的文件)
[查找完執行的action]
[“-print”默認情況下的動作;”-ls”查找到后用ls 顯示出來;”-ok [commend] “查找后執行命令的時候詢問用戶是否要執行;” -exec [commend]”查找后執行命令的時候不詢問用戶,直接執行]
“find /tmp -atime +30 –exec rm –rf {} \;”//刪除查找到的超過30天沒有訪問過文件
?“find /tmp -iregex “.*.[sh,bat]” -exec cp {} {}.old \;”// 替代查找到的文件,保留源文件(mv不保留)
locate
locate指令和find找尋檔案的功能類似,但locate是透過update程序將硬盤中的所有檔案和目錄資料先建立一個索引數據庫,在 執行loacte時直接找該索引,查詢速度會較快,索引數據庫一般是由操作系統管理,但也可以直接下達update強迫系統立即修改索引數據庫。
locate [option] [pattern]
less
less 工具是對文件或其它輸出進行分頁顯示的工具(建議結合管道針對其他輸出使用,文件vim處理),提供前后翻頁功能,以及搜索功能。
-b [緩沖區大小] 設置緩沖區的大小
-e 當文件顯示結束后,自動離開
-f 強迫打開特殊文件,例如外圍設備代號、目錄和二進制文件
-g 只標志最后搜索的關鍵詞
-i 忽略搜索時的大小寫
-m 顯示類似more命令的百分比
-N 顯示每行的行號
-o [文件名] 將less 輸出的內容在指定文件中保存起來
-Q 不使用警告音
-s 顯示連續空行為一行
-S 行過長時間將超出部分舍棄
-x [數字] 將“tab”鍵顯示為規定的數字空格
/字符串:向下搜索“字符串”的功能
?字符串:向上搜索“字符串”的功能
n:重復前一個搜索(與 / 或 ? 有關)
N:反向重復前一個搜索(與 / 或 ? 有關)
b 向后翻一頁
d 向后翻半頁
h 顯示幫助界面
Q 退出less 命令
u 向前滾動半頁
y 向前滾動一行
空格鍵 滾動一頁
回車鍵 滾動一行
[pagedown]: 向下翻動一頁
[pageup]: 向上翻動一頁
which
which命令的作用是,在PATH變量指定的路徑中,搜索某個系統命令的位置,并且返回第一個搜索結果。也就是說,使用which命令,就可以看到某個系統命令是否存在,以及執行的到底是哪一個位置的命令。
whereis
whereis命令只能用于程序名的搜索,而且只搜索二進制文件(參數-b)、man說明文件(參數-m)和源代碼文件(參數-s)。如果省略參數,則返回所有信息。(eg:whereis -b tomcat)
和find相比,whereis查找的速度非常快,這是因為linux系統會將 系統內的所有文件都記錄在一個數據庫文件中,當使用whereis和locate時,會從數據庫中查找數據,而不是像find命令那樣,通過遍歷硬盤來查找,效率自然會很高。
但是該數據庫文件并不是實時更新,默認情況下是一星期更新一次,因此,我們在用whereis和locate 查找文件時,有時會找到已經被刪除的數據,或者剛剛建立文件,卻無法查找到,原因就是因為數據庫文件沒有被更新。
tail
tail 命令從指定點開始將文件寫到標準輸出.使用tail命令的-f選項可以方便的查閱正在改變的日志文件,tail -f filename會把filename里最尾部的內容顯示在屏幕上,并且不但刷新,使你看到最新的文件內容.
tail[必要參數][選擇參數][文件]
-f 循環讀取
-q 不顯示處理信息
-v 顯示詳細的處理信息
-c[數目] 顯示的字節數
-n[行數] 顯示行數
–pid=PID 與-f合用,表示在進程ID,PID死掉之后結束.
-q, –quiet, –silent 從不輸出給出文件名的首部
-s, –sleep-interval=S 與-f合用,表示在每次反復的間隔休眠S秒
grep
grep(global search regular expression(RE) and print out the line,全面搜索正則表達式并把行打印出來)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,并把匹配的行打印出來
grep [選項]… PATTERN [FILE]…
-n 在顯示符合范本樣式的那一列之前,標示出該列的編號。
-q 不顯示任何信息。
-R/-r 此參數的效果和指定“-d recurse”參數相同。
-e [范本樣式] 指定字符串作為查找文件內容的范本樣式。
-E 將范本樣式為延伸的普通表示法來使用,意味著使用能使用擴展正則表達式。
-f [范本文件] 指定范本文件,其內容有一個或多個范本樣式,讓grep查找符合范本條件的文件內容,格式為每一列的范本樣式。
grep 支持的正則語法
^ 錨定行的開始 如:’^grep’匹配所有以grep開頭的行。
$錨定行的結束 如:’grep$’匹配所有以grep結尾的行。
. 匹配一個非換行符的字符 如:’gr.p’匹配gr后接一個任意字符,然后是p。
* 匹配零個或多個先前字符 如:’*grep’匹配所有一個或多個空格后緊跟grep的行。 .*一起用代表任意字符。
[] 匹配一個指定范圍內的字符,如’[Gg]rep’匹配Grep和grep。
[^] 匹配一個不在指定范圍內的字符,如:’[^A-FH-Z]rep’匹配不包含A-R和T-Z的一個字母開頭,緊跟rep的行。
\(..\) 標記匹配字符,如’\(love\)’,love被標記為1。
\ 錨定單詞的開始,如:’\匹配包含以grep開頭的單詞的行。
\> 錨定單詞的結束,如’grep\>’匹配包含以grep結尾的單詞的行。
x\{m\} 重復字符x,m次,如:’0\{5\}’匹配包含5個o的行。
x\{m,\} 重復字符x,至少m次,如:’o\{5,\}’匹配至少有5個o的行。
x\{m,n\}重復字符x,至少m次,不多于n次,如:’o\{5,10\}’匹配5–10個o的行。
\w 匹配文字和數字字符,也就是[A-Za-z0-9],如:’G\w*p’匹配以G后跟零個或多個文字或數字字符,然后是p。
\b 單詞鎖定符,如: ‘\bgrep\b’只匹配grep。
eg:
ls -R 查找目錄 | grep “文件名所帶字符”(遞歸查找當前文件夾下,指定文件名)
grep -R “word” “dir”(遞歸查文件夾下所有文件中的”word“)
grep -E “[1-9]+” 等于 egrep “[1-9]+”
Other Command
chmod
chmod命令用于改變linux系統文件或目錄的訪問權限。用它控制文件或目錄的訪問權限。該命令有兩種用法:一種是包含字母和操作符表達式的文字設定法;另一種是包含數字的數字設定法。
chmod [-cfvR] [–help] [–version] mode file
權限范圍:
u :目錄或者文件的當前的用戶
g :目錄或者文件的當前的群組
o :除了目錄或者文件的當前用戶或群組之外的用戶或者群組
a :所有的用戶及群組
權限代號:
r :讀權限,用數字4表示
w :寫權限,用數字2表示
x :執行權限,用數字1表示
- :刪除權限,用數字0表示
s :特殊權限 ([特殊權限](http://alan-hjkl.iteye.com/blog/1526858))
tar
Linux中很多壓縮程序只能針對一個文件進行壓縮,這樣當你想要壓縮一大堆文件時,你得先將這一大堆文件先打成一個包(tar命令),然后再用壓縮程序進行壓縮(gzip bzip2命令)。
常見解壓/壓縮命令
tar
解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是壓縮?。?/p>
.gz
解壓1:gunzip FileName.gz
解壓2:gzip -d FileName.gz
壓縮:gzip FileName
.tar.gz 和 .tgz
解壓:tar zxvf FileName.tar.gz
壓縮:tar zcvf FileName.tar.gz DirName
.bz2
解壓1:bzip2 -d FileName.bz2
解壓2:bunzip2 FileName.bz2
壓縮: bzip2 -z FileName
.tar.bz2
解壓:tar jxvf FileName.tar.bz2
壓縮:tar jcvf FileName.tar.bz2 DirName
.bz
解壓1:bzip2 -d FileName.bz
解壓2:bunzip2 FileName.bz
壓縮:未知
.tar.bz
解壓:tar jxvf FileName.tar.bz
壓縮:未知
.Z
解壓:uncompress FileName.Z
壓縮:compress FileName
.tar.Z
解壓:tar Zxvf FileName.tar.Z
壓縮:tar Zcvf FileName.tar.Z DirName
.zip
解壓:unzip FileName.zip
壓縮:zip FileName.zip DirName
.rar
解壓:rar x FileName.rar
壓縮:rar a FileName.rar DirName
netstat
netstat命令用于顯示與IP、TCP、UDP和ICMP協議相關的統計數據,一般用于檢驗本機各端口的網絡連接情況。
netstat [-acCeFghilMnNoprstuvVwx][-A [網絡類型]][–ip]
命令參數:
-a或–all 顯示所有連線中的Socket。
-A[網絡類型]或–[網絡類型] 列出該網絡類型連線中的相關地址。
-c或–continuous 持續列出網絡狀態。
-C或–cache 顯示路由器配置的快取信息。
-e或–extend 顯示網絡其他相關信息。
-F或–fib 顯示FIB。
-g或–groups 顯示多重廣播功能群組組員名單。
-h或–help 在線幫助。
-i或–interfaces 顯示網絡界面信息表單。
-l或–listening 顯示監控中的服務器的Socket。
-M或–masquerade 顯示偽裝的網絡連線。
-n或–numeric 直接使用IP地址,而不通過域名服務器。
-N或–netlink或–symbolic 顯示網絡硬件外圍設備的符號連接名稱。
-o或–timers 顯示計時器。
-p或–programs 顯示正在使用Socket的程序識別碼和程序名稱。
-r或–route 顯示Routing Table。
-s或–statistice 顯示網絡工作信息統計表。
-t或–tcp 顯示TCP傳輸協議的連線狀況。
-u或–udp 顯示UDP傳輸協議的連線狀況。
-v或–verbose 顯示指令執行過程。
-V或–version 顯示版本信息。
-w或–raw 顯示RAW傳輸協議的連線狀況。
-x或–unix 此參數的效果和指定”-A unix”參數相同。
–ip或–inet 此參數的效果和指定”-A inet”參數相同。
狀態說明:
LISTEN:偵聽來自遠方的TCP端口的連接請求
SYN-SENT:再發送連接請求后等待匹配的連接請求(如果有大量這樣的狀態包,檢查是否中招了)
SYN-RECEIVED:再收到和發送一個連接請求后等待對方對連接請求的確認(如有大量此狀態,估計被flood攻擊了)
ESTABLISHED:代表一個打開的連接
FIN-WAIT-1:等待遠程TCP連接中斷請求,或先前的連接中斷請求的確認
FIN-WAIT-2:從遠程TCP等待連接中斷請求
CLOSE-WAIT:等待從本地用戶發來的連接中斷請求
CLOSING:等待遠程TCP對連接中斷的確認
LAST-ACK:等待原來的發向遠程TCP的連接中斷請求的確認(不是什么好東西,此項出現,檢查是否被攻擊)
TIME-WAIT:等待足夠的時間以確保遠程TCP接收到連接中斷請求的確認
CLOSED:沒有任何連接狀態
eg:
netstat -apu顯示UDP端口號的使用情況
netstat -a | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’顯統計機器中網絡連接各個狀態個數
netstat -nat | grep “192.168.120.20:16067” |awk ‘{print$5}’|awk -F: ‘{print$4}’|sort|uniq -c|sort -nr|head -20查看連接某服務端口最多的的IP地址
netstat -anpt | grep ‘:16064’找出運行在指定端口的進程
ps
ps命令列出的是當前那些進程的快照,就是執行ps命令的那個時刻的那些進程,如果想要動態的顯示進程信息,就可以使用top命令。
命令參數:
-a 顯示同一終端下的所有程序
-A 顯示所有進程
c 顯示進程的真實名稱
-N 反向選擇
-e 等于“-A”
e 顯示環境變量
f 顯示程序間的關系
-H 顯示樹狀結構
r 顯示當前終端的進程
T 顯示當前終端的所有程序
u 指定用戶的所有進程
-au 顯示較詳細的資訊
-aux 顯示所有包含其他使用者的行程
-C【命令】 列出指定命令的狀況
–lines[行數]每頁顯示的行數
–width[字符數] 每頁顯示的字符數
–help 顯示幫助信息
–version 顯示版本顯示
linux上進程有5種狀態:
1. 運行(正在運行或在運行隊列中等待)
2. 中斷(休眠中, 受阻, 在等待某個條件的形成或接受到信號)
3. 不可中斷(收到信號不喚醒和不可運行, 進程必須等待直到有中斷發生)
4. 僵死(進程已終止, 但進程描述符存在, 直到父進程調用wait4()系統調用后釋放)
5. 停止(進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號后停止運行運行)
ps工具標識進程的5種狀態碼:
D 不可中斷 uninterruptible sleep (usually IO)
R 運行 runnable (on run queue)
S 中斷 sleeping
T 停止 traced or stopped
Z 僵死 a defunct (”zombie”) process
輸出含義:
F 代表這個程序的旗標 (flag), 4 代表使用者為 super user
S 代表這個程序的狀態 (STAT),關于各 STAT 的意義將在內文介紹
UID 程序被該 UID 所擁有
PID 就是這個程序的 ID !
PPID 則是其上級父程序的ID
C CPU 使用的資源百分比
PRI 這個是 Priority (優先執行序) 的縮寫,詳細后面介紹
NI 這個是 Nice 值,在下一小節我們會持續介紹
ADDR 這個是 kernel function,指出該程序在內存的那個部分。如果是個 running的程序,一般就是 “-“
SZ 使用掉的內存大小
WCHAN 目前這個程序是否正在運作當中,若為 - 表示正在運作
TTY 登入者的終端機位置
TIME 使用掉的 CPU 時間。
CMD 所下達的指令為何
eg:
ps -u root顯示指定用戶信息
ps -ef顯示所有進程信息,連同命令行
ps aux列出目前所有的正在內存當中的程序
watch
可以將命令的輸出結果輸出到標準輸出設備,多用于周期性執行命令/定時執行命令
命令參數:
-n或–interval watch缺省每2秒運行一下程序,可以用-n或-interval來指定間隔的時間。
-d或–differences 用-d或–differences 選項watch 會高亮顯示變化的區域。 而-d=cumulative選項會把變動過的地方(不管最近的那次有沒有變動)都高亮顯示出來。
-t 或-no-title 會關閉watch命令在頂部的時間間隔,命令,當前時間的輸出。
-h, –help 查看幫助文檔
eg:
watch -n 1 -d ‘pstree|grep http’每隔一秒高亮顯示http鏈接數的變化情況
watch -d ‘ls -l|grep scf’監測當前目錄中 scf’ 的文件的變化
watch -n 10 ‘cat /proc/loadavg’10秒一次輸出系統的平均負載
Other Command Reference
vim
模式切換
其它模式==>普通模式
Esc
普通模式==>插入模式
i 在光標前插入 I 在行首插入
a 在光標后插入 A 在行末插入
o 在當前行之下新建行 O 在當前行之上新建行
r 替換當前字符 R 從當前字符開始替換
普通模式==>命令模式
:
普通模式==>可視模式
v ,V ,
插入
i在光標之前插入
I在一行的開頭處插入
a在光標之后追加
A在一行的結尾處追加
o在光標所在位置的下一行打開新行插入
O在光標所在位置的上一行打開新行插入
查找
查詢環境設置
:set hlsearch打開高亮顯示查找的文本
:set nohlsearch關閉高亮顯示查找的文本
:nohlsearch關閉當前高亮顯示的結果
:set incsearch打開顯示查找匹配過程
:set noincsearch關閉顯示查找匹配過程
:set ignorecase忽略大小寫
:set noignorecase精確匹配大小寫
:set nowrapscan禁止循環查找方式
:set wrapscan啟用循環查找方式
Command
/csdn向下查找一個名稱為csdn的字符串
?csdn向上查找一個名稱為csdn的字符串
* 和 #匹配光標當前所在的單詞,移動光標到下一個匹配單詞(*是下一個,#是上一個)
n表示向下繼續查找前一個查找的操作(和上面的操作配合使用)
N表示向上繼續查找前一個查找的操作(和上面的操作配合使用)
/csdn\c忽略大小寫的查找時候,在索要查找的字符串后面加\c
:%s///gn統計當前模式匹配的次數(實際上調用了substitute命令,標志位n會抑制正常的替換操作,替換域無論為什么都是不生效的。)
替換
:[range]s/from/to/[flags]
[range]
不寫默認為光標所在的行。
.光標所在的行。
1第一行。
$最后一行。
33第33行。
‘a標記a所在的行(之前要使用ma做過標記)。
.+1當前光標所在行的下面一行。
$-1倒數第二行。(這里說明我們可以對某一行加減某個數值來取得相對的行)。
22,33第22~33行。
1,$第1行 到 最后一行。
1,.第1行 到 當前行。
.,$當前行 到 最后一行。
‘a,’b標記a所在的行 到 標記b所在的行。
%所有行(與 1,$ 等價)。
?chapter?從當前位置向上搜索,找到的第一個chapter所在的行。(其中chapter可以是任何字符串或者正則表達式。
/chapter/從當前位置向下搜索,找到的第一個chapter所在的行。(其中chapter可以是任何字符串或者正則表達式。
[flags]
無只對指定范圍內的第一個匹配項進行替換。
g對指定范圍內的所有匹配項進行替換。(g 放在命令末尾,表示對搜索字符串的每次出現進行替換;g 放在命令開頭,表示對正文中所有包含搜索字符串的行進行替換操作)
c在替換前請求用戶確認。
e忽略執行過程中的錯誤。
eg:
:s/from/to/將當前行中的第一個from,替換成to。如果當前行含有多個from,則只會替換其中的第一個。
:s/from/to/g將當前行中的所有from都替換成to。
:s/from/to/gc將當前行中的所有from都替換成to,但是每一次替換之前都會詢問請求用戶確認此操作。
:33s/from/to/g在第33行進行替換操作。
:$s/from/to/g在最后一行進行替換操作。
:%s/from/to/g對所有行的內容進行替換。
:g/str1/s//str2/g (等于”:1,$ s/str1/str2/g“)用字符串 str2 替換正文中所有出現的字符串 str1
:g/str1/s/str2/str3/g用字符串 str3 替換正文中所有出現str1所在行的所有字符串 str2
復制粘貼
vim有12個粘貼板(某些版本大于12個),0-9,a,”,+等,其中”為默認粘貼板,+為系統剪貼板(:reg查看有沒有+剪貼板,沒有的話需要安裝gnome)
y復制選定的內容(結合v,V命令)
yy/Y復制當前行
yw復制當前詞
2yy/y2y兩行
y$復制至行尾
y^復制至行首
“+yy復制當前行到系統剪貼板
p小寫p代表貼至游標后(下)。
P大寫P代表貼至游標前(上)。
“+p粘貼系統剪貼板內容
跳轉
NG/:N到第 N 行
gg到第一行。(相當于1G,或 :1)
G到最后一行。
w到下一個單詞的開頭。
e到下一個單詞的結尾。(若單詞是由blank字符分隔,需要使用大寫的E和W)
%匹配括號移動,包括 (, {, [. (需要把光標先移到括號上)
0到行頭
$到本行最后一個字符
^到本行的第一個非blank字符
g_到本行最后一個不是blank字符的位置。
fa到本行下一個為a的字符處,你也可以fs到下一個為s的字符。
t,到本行逗號前的第一個字符。逗號可以變成其它字符。
3fa在當前行查找第三個出現的a。
F 和 T和 f 和 t 一樣,只不過是相反方向。
hjkl(←↓↑→)左下上右
<ctrl+f>下翻一頁
<ctrl+d>下翻半頁
<ctrl+b>上翻一頁
<ctrl+u>上翻半頁
選擇
v選中字符
V選中行
Ctrl+v選中塊
區域選擇
vi”選中當前光標所在”“里的內容
va”選中當前光標所在”“里的內容,同時包含”“
v2a”選中當前光標(#)所在”*”ro#d“***“里的內容,同時包含”“
分屏
split創建分屏 (:vsplit創建垂直分屏,:new 空白文檔)
dir就是方向,可以是 hjkl 或是 ←↓↑→ 中的一個,其用來切換分屏。
+ (或 -)增加尺寸
標簽頁
:tabe /path/to/file.txt在一個新的 tab 頁中打開文件
:tabnew新建一個 tab 頁
:tabs查看 tab 頁列表,通過“>”顯示當前窗口、“+”顯示可修改的緩沖區
:tabc關閉當前的 tab 頁
:tab split在當前緩沖區使用新的 tab 頁打開文件
:tabn切換到下一個 tab 頁
:tabp切換到上一個 tab 頁
:tabr[ewind]轉到第一個 tab 頁
:tabf[irst]與上一命令作用相同