date命令
date命令是顯示或設置系統時間與日期。
很多shell腳本里面需要打印不同格式的時間或日期,以及要根據時間和日期執行操作。延時通常用於腳本執行過程中提供一段等待的時間。日期可以以多種格式去打印,也可以使用命令設置固定的格式。在類UNIX系統中,日期被存儲為一個整數,其大小為自世界標准時間(UTC)1970年1月1日0時0分0秒起流逝的秒數。
語法:
date(選項)(參數)
選項
-d<字符串>:顯示字符串所指的日期與時間。字符串前后必須加上雙引號;
-s<字符串>:根據字符串來設置日期與時間。字符串前后必須加上雙引號;
-u:顯示GMT;
--help:在線幫助;
--version:顯示版本信息。
參數
<+時間日期格式>:指定顯示時使用的日期時間格式。
日期格式字符串列表
%H 小時,24小時制(00~23)
%I 小時,12小時制(01~12)
%k 小時,24小時制(0~23)
%l 小時,12小時制(1~12)
%M 分鍾(00~59)
%p 顯示出AM或PM
%r 顯示時間,12小時制(hh:mm:ss %p)
%s 從1970年1月1日00:00:00到目前經歷的秒數
%S 顯示秒(00~59)
%T 顯示時間,24小時制(hh:mm:ss)
%X 顯示時間的格式(%H:%M:%S)
%Z 顯示時區,日期域(CST)
%a 星期的簡稱(Sun~Sat)
%A 星期的全稱(Sunday~Saturday)
%h,%b 月的簡稱(Jan~Dec)
%B 月的全稱(January~December)
%c 日期和時間(Tue Nov 20 14:12:58 2012)
%d 一個月的第幾天(01~31)
%x,%D 日期(mm/dd/yy) %j 一年的第幾天(001~366) %m 月份(01~12) %w 一個星期的第幾天(0代表星期天) %W 一年的第幾個星期(00~53,星期一為第一天) %y 年的最后兩個數字(1999則是99)
實例
格式化輸出:
date +"%Y-%m-%d" 2009-12-07
輸出昨天日期:
date -d "1 day ago" +"%Y-%m-%d" 2012-11-19
2秒后輸出:
date -d "2 second" +"%Y-%m-%d %H:%M.%S" 2012-11-20 14:21.31
傳說中的 1234567890 秒:
date -d "1970-01-01 1234567890 seconds" +"%Y-%m-%d %H:%m:%S" 2009-02-13 23:02:30
普通轉格式:
date -d "2009-12-12" +"%Y/%m/%d %H:%M.%S" 2009/12/12 00:00.00
apache格式轉換:
date -d "Dec 5, 2009 12:00:37 AM" +"%Y-%m-%d %H:%M.%S" 2009-12-05 00:00.37
格式轉換后時間游走:
date -d "Dec 5, 2009 12:00:37 AM 2 year ago" +"%Y-%m-%d %H:%M.%S" 2007-12-05 00:00.37
加減操作:
date +%Y%m%d //顯示前天年月日 date -d "+1 day" +%Y%m%d //顯示前一天的日期 date -d "-1 day" +%Y%m%d //顯示后一天的日期 date -d "-1 month" +%Y%m%d //顯示上一月的日期 date -d "+1 month" +%Y%m%d //顯示下一月的日期 date -d "-1 year" +%Y%m%d //顯示前一年的日期 date -d "+1 year" +%Y%m%d //顯示下一年的日期
設定時間:
date -s //設置當前時間,只有root權限才能設置,其他只能查看 date -s 20120523 //設置成20120523,這樣會把具體時間設置成空00:00:00 date -s 01:01:01 //設置具體時間,不會對日期做更改 date -s "01:01:01 2012-05-23" //這樣可以設置全部時間 date -s "01:01:01 20120523" //這樣可以設置全部時間 date -s "2012-05-23 01:01:01" //這樣可以設置全部時間 date -s "20120523 01:01:01" //這樣可以設置全部時間
有時需要檢查一組命令花費的時間,舉例:
#!/bin/bash
start=$(date +%s)
nmap man.linuxde.net &> /dev/null end=$(date +%s) difference=$(( end - start )) echo $difference seconds.
sudo命令
sudo命令用來以其他身份來執行命令,預設的身份為root。在/etc/sudoers
中設置了可執行sudo指令的用戶。若其未經授權的用戶企圖使用sudo,則會發出警告的郵件給管理員。用戶使用sudo時,必須先輸入密碼,之后有5分鍾的有效期限,超過期限則必須重新輸入密碼。
選項
-b:在后台執行指令; -h:顯示幫助; -H:將HOME環境變量設為新身份的HOME環境變量; -k:結束密碼的有效期限,也就是下次再執行sudo時便需要輸入密碼;。 -l:列出目前用戶可執行與無法執行的指令; -p:改變詢問密碼的提示符號; -s<shell>:執行指定的shell; -u<用戶>:以指定的用戶作為新的身份。若不加上此參數,則預設以root作為新的身份; -v:延長密碼有效期限5分鍾; -V :顯示版本信息。
參數
指令:需要運行的指令和對應的參數。
實例
配置sudo必須通過編輯/etc/sudoers
文件,而且只有超級用戶才可以修改它,還必須使用visudo編輯。之所以使用visudo有兩個原因,一是它能夠防止兩個用戶同時修改它;二是它也能進行有限的語法檢查。所以,即使只有你一個超級用戶,你也最好用visudo來檢查一下語法。
visudo默認的是在vi里打開配置文件,用vi來修改文件。我們可以在編譯時修改這個默認項。visudo不會擅自保存帶有語法錯誤的配置文件,它會提示你出現的問題,並詢問該如何處理,就像:
>>> sudoers file: syntax error, line 22 <<
此時我們有三種選擇:鍵入“e”是重新編輯,鍵入“x”是不保存退出,鍵入“Q”是退出並保存。如果真選擇Q,那么sudo將不會再運行,直到錯誤被糾正。
現在,我們一起來看一下神秘的配置文件,學一下如何編寫它。讓我們從一個簡單的例子開始:讓用戶Foobar可以通過sudo執行所有root可執行的命令。以root身份用visudo打開配置文件,可以看到類似下面幾行:
# Runas alias specification
# User privilege specificationroot ALL=(ALL)ALL
我們一看就明白個差不多了,root有所有權限,只要仿照現有root的例子就行,我們在下面加一行(最好用tab作為空白):
foobar ALL=(ALL) ALL
保存退出后,切換到foobar用戶,我們用它的身份執行命令:
[foobar@localhost ~]$ ls /root
ls: /root: 權限不夠
[foobar@localhost ~]$ sudo ls /root
PassWord:
anaconda-ks.cfg Desktop install.log install.log.syslog
好了,我們限制一下foobar的權利,不讓他為所欲為。比如我們只想讓他像root那樣使用ls和ifconfig,把那一行改為:
foobar localhost= /sbin/ifconfig, /bin/ls
再來執行命令:
[foobar@localhost ~]$ sudo head -5 /etc/shadow
Password:
Sorry, user foobar is not allowed to execute '/usr/bin/head -5 /etc/shadow' as root on localhost.localdomain. [foobar@localhost ~]$ sudo /sbin/ifconfigeth0 Linkencap:Ethernet HWaddr 00:14:85:EC:E9:9B...
現在讓我們來看一下那三個ALL到底是什么意思。第一個ALL是指網絡中的主機,我們后面把它改成了主機名,它指明foobar可以在此主機上執行后面的命令。第二個括號里的ALL是指目標用戶,也就是以誰的身份去執行命令。最后一個ALL當然就是指命令名了。例如,我們想讓foobar用戶在linux主機上以jimmy或rene的身份執行kill命令,這樣編寫配置文件:
foobar linux=(jimmy,rene) /bin/kill
但這還有個問題,foobar到底以jimmy還是rene的身份執行?這時我們應該想到了sudo -u
了,它正是用在這種時候。 foobar可以使用sudo -u jimmy kill PID
或者sudo -u rene kill PID
,但這樣挺麻煩,其實我們可以不必每次加-u
,把rene或jimmy設為默認的目標用戶即可。再在上面加一行:
Defaults:foobar runas_default=rene
Defaults后面如果有冒號,是對后面用戶的默認,如果沒有,則是對所有用戶的默認。就像配置文件中自帶的一行:
Defaults env_reset
另一個問題是,很多時候,我們本來就登錄了,每次使用sudo還要輸入密碼就顯得煩瑣了。我們可不可以不再輸入密碼呢?當然可以,我們這樣修改配置文件:
foobar localhost=NOPASSWD: /bin/cat, /bin/ls
再來sudo一下:
[foobar@localhost ~]$ sudo ls /rootanaconda-ks.cfg Desktop install.log install.log.syslog
當然,你也可以說“某些命令用戶foobar不可以運行”,通過使用!操作符,但這不是一個好主意。因為,用!操作符來從ALL中“剔出”一些命令一般是沒什么效果的,一個用戶完全可以把那個命令拷貝到別的地方,換一個名字后再來運行。
日志與安全
sudo為安全考慮得很周到,不僅可以記錄日志,還能在有必要時向系統管理員報告。但是,sudo的日志功能不是自動的,必須由管理員開啟。這樣來做:
touch /var/log/sudo
vi /etc/syslog.conf
在syslog.conf最后面加一行(必須用tab分割開)並保存:
local2.debug /var/log/sudo
重啟日志守候進程,
ps aux grep syslogd
把得到的syslogd進程的PID(輸出的第二列是PID)填入下面:
kill –HUP PID
這樣,sudo就可以寫日志了:
[foobar@localhost ~]$ sudo ls /rootanaconda-ks.cfg
Desktop install.log
install.log.syslog
$cat /var/log/sudoJul 28 22:52:54 localhost sudo: foobar :
TTY=pts/1 ; pwd=/home/foobar ; USER=root ; command=/bin/ls /root
不過,有一個小小的“缺陷”,sudo記錄日志並不是很忠實:
[foobar@localhost ~]$ sudo cat /etc/shadow > /dev/null cat /var/log/sudo...Jul 28 23:10:24 localhost sudo: foobar : TTY=pts/1 ; PWD=/home/foobar ; USER=root ; COMMAND=/bin/cat /etc/shadow
重定向沒有被記錄在案!為什么?因為在命令運行之前,shell把重定向的工作做完了,sudo根本就沒看到重定向。這也有個好處,下面的手段不會得逞:
[foobar@localhost ~]$ sudo ls /root > /etc/shadowbash: /etc/shadow: 權限不夠
sudo 有自己的方式來保護安全。以root的身份執行sudo-V
,查看一下sudo的設置。因為考慮到安全問題,一部分環境變量並沒有傳遞給sudo后面的命令,或者被檢查后再傳遞的,比如:PATH,HOME,SHELL等。當然,你也可以通過sudoers來配置這些環境變量。
tail命令
tail命令用於輸入文件中的尾部內容。tail命令默認在屏幕上顯示指定文件的末尾10行。如果給定的文件不止一個,則在顯示的每個文件前面加一個文件名標題。如果沒有指定文件或者文件名為“-”,則讀取標准輸入。
注意:如果表示字節或行數的N值之前有一個”+”號,則從文件開頭的第N項開始顯示,而不是顯示文件的最后N項。N值后面可以有后綴:b表示512,k表示1024,m表示1 048576(1M)。
語法
tail(選項)(參數)
選項
--retry:即是在tail命令啟動時,文件不可訪問或者文件稍后變得不可訪問,都始終嘗試打開文件。使用此選項時需要與選項“——follow=name”連用;
-c<N>或——bytes=<N>:輸出文件尾部的N(N為整數)個字節內容;
-f<name/descriptor>或;--follow<nameldescript>:顯示文件最新追加的內容。“name”表示以文件名的方式監視文件的變化。“-f”與“-fdescriptor”等效;
-F:與選項“-follow=name”和“--retry"連用時功能相同;
-n<N>或——line=<N>:輸出文件的尾部N(N位數字)行內容。
--pid=<進程號>:與“-f”選項連用,當指定的進程號的進程終止后,自動退出tail命令;
-q或——quiet或——silent:當有多個文件參數時,不輸出各個文件名;
-s<秒數>或——sleep-interal=<秒數>:與“-f”選項連用,指定監視文件變化時間隔的秒數;
-v或——verbose:當有多個文件參數時,總是輸出各個文件名;
--help:顯示指令的幫助信息; --version:顯示指令的版本信息。
參數
文件列表:指定要顯示尾部內容的文件列表。
實例
tail file (顯示文件file的最后10行) tail +20 file (顯示文件file的內容,從第20行至文件末尾) tail -c 10 file (顯示文件file的最后10個字符)
tail -100 atlas_2018_08_17.log (顯示文件log的最后100行)
tail -f atlas_2018_08_17.log |grep "backend 1002"(監視文件log最新加載的內容,並打印其中含有backend 1002的文字)
wc命令
wc命令用來計算數字。利用wc指令我們可以計算文件的Byte數、字數或是列數,若不指定文件名稱,或是所給予的文件名為“-”,則wc指令會從標准輸入設備讀取數據。
語法
wc(選項)(參數)
選項
-c或--bytes或——chars:只顯示Bytes數;
-l或——lines:只顯示列數;
-w或——words:只顯示字數。
實例
grep successfully atlas_2018_08_17.log| wc -l(搜索文件log中含有successfully字符的一共多少行)
ps命令
ps命令用於報告當前系統的進程狀態。可以搭配kill指令隨時中斷、刪除不必要的程序。ps命令是最基本同時也是非常強大的進程查看命令,使用該命令可以確定有哪些進程正在運行和運行的狀態、進程是否結束、進程有沒有僵死、哪些進程占用了過多的資源等等,總之大部分信息都是可以通過執行該命令得到的。
語法
ps(選項)
選項
-a:顯示所有終端機下執行的程序,除了階段作業領導者之外。
a:顯示現行終端機下的所有程序,包括其他用戶的程序。
-A:顯示所有程序。
-c:顯示CLS和PRI欄位。
c:列出程序時,顯示每個程序真正的指令名稱,而不包含路徑,選項或常駐服務的標示。
-C<指令名稱>:指定執行指令的名稱,並列出該指令的程序的狀況。
-d:顯示所有程序,但不包括階段作業領導者的程序。
-e:此選項的效果和指定"A"選項相同。
e:列出程序時,顯示每個程序所使用的環境變量。
-f:顯示UID,PPIP,C與STIME欄位。
f:用ASCII字符顯示樹狀結構,表達程序間的相互關系。
-g<群組名稱>:此選項的效果和指定"-G"選項相同,當亦能使用階段作業領導者的名稱來指定。
g:顯示現行終端機下的所有程序,包括群組領導者的程序。
-G<群組識別碼>:列出屬於該群組的程序的狀況,也可使用群組名稱來指定。
h:不顯示標題列。
-H:顯示樹狀結構,表示程序間的相互關系。
-j或j:采用工作控制的格式顯示程序狀況。
-l或l:采用詳細的格式來顯示程序狀況。
L:列出欄位的相關信息。
-m或m:顯示所有的執行緒。
n:以數字來表示USER和WCHAN欄位。
-N:顯示所有的程序,除了執行ps指令終端機下的程序之外。
-p<程序識別碼>:指定程序識別碼,並列出該程序的狀況。
p<程序識別碼>:此選項的效果和指定"-p"選項相同,只在列表格式方面稍有差異。
r:只列出現行終端機正在執行中的程序。
-s<階段作業>:指定階段作業的程序識別碼,並列出隸屬該階段作業的程序的狀況。
s:采用程序信號的格式顯示程序狀況。
S:列出程序時,包括已中斷的子程序資料。
-t<終端機編號>:指定終端機編號,並列出屬於該終端機的程序的狀況。
t<終端機編號>:此選項的效果和指定"-t"選項相同,只在列表格式方面稍有差異。
-T:顯示現行終端機下的所有程序。
-u<用戶識別碼>:此選項的效果和指定"-U"選項相同。
u:以用戶為主的格式來顯示程序狀況。
-U<用戶識別碼>:列出屬於該用戶的程序的狀況,也可使用用戶名稱來指定。
U<用戶名稱>:列出屬於該用戶的程序的狀況。
v:采用虛擬內存的格式顯示程序狀況。
-V或V:顯示版本信息。
-w或w:采用寬闊的格式來顯示程序狀況。
x:顯示所有程序,不以終端機來區分。
X:采用舊式的Linux i386登陸格式顯示程序狀況。
-y:配合選項"-l"使用時,不顯示F(flag)欄位,並以RSS欄位取代ADDR欄位 。
-<程序識別碼>:此選項的效果和指定"p"選項相同。
--cols<每列字符數>:設置每列的最大字符數。
--columns<每列字符數>:此選項的效果和指定"--cols"選項相同。
--cumulative:此選項的效果和指定"S"選項相同。
--deselect:此選項的效果和指定"-N"選項相同。
--forest:此選項的效果和指定"f"選項相同。
--headers:重復顯示標題列。
--help:在線幫助。 --info:顯示排錯信息。 --lines<顯示列數>:設置顯示畫面的列數。 --no-headers:此選項的效果和指定"h"選項相同,只在列表格式方面稍有差異。 --group<群組名稱>:此選項的效果和指定"-G"選項相同。 --Group<群組識別碼>:此選項的效果和指定"-G"選項相同。 --pid<程序識別碼>:此選項的效果和指定"-p"選項相同。 --rows<顯示列數>:此選項的效果和指定"--lines"選項相同。 --sid<階段作業>:此選項的效果和指定"-s"選項相同。 --tty<終端機編號>:此選項的效果和指定"-t"選項相同。 --user<用戶名稱>:此選項的效果和指定"-U"選項相同。 --User<用戶識別碼>:此選項的效果和指定"-U"選項相同。 --version:此選項的效果和指定"-V"選項相同。 --widty<每列字符數>:此選項的效果和指定"-cols"選項相同。
實例
ps aux | grep backend(搜索后台backend,打印所有運行的后台)
sort命令
sort命令是在Linux里非常有用,它將文件進行排序,並將排序結果標准輸出。sort命令既可以從特定的文件,也可以從stdin中獲取輸入。
語法
sort(選項)(參數)
選項
-b:忽略每行前面開始出的空格字符; -c:檢查文件是否已經按照順序排序; -d:排序時,處理英文字母、數字及空格字符外,忽略其他的字符; -f:排序時,將小寫字母視為大寫字母; -i:排序時,除了040至176之間的ASCII字符外,忽略其他的字符; -m:將幾個排序號的文件進行合並; -M:將前面3個字母依照月份的縮寫進行排序; -n:依照數值的大小排序; -o<輸出文件>:將排序后的結果存入制定的文件; -r:以相反的順序來排序; -t<分隔字符>:指定排序時所用的欄位分隔字符; +<起始欄位>-<結束欄位>:以指定的欄位來排序,范圍由起始欄位到結束欄位的前一欄位。
參數
文件:指定待排序的文件列表。
實例
sort將文件/文本的每一行作為一個單位,相互比較,比較原則是從首字符向后,依次按ASCII碼值進行比較,最后將他們按升序輸出。
[root@mail text]# cat sort.txt aaa:10:1.1 ccc:30:3.3 ddd:40:4.4 bbb:20:2.2 eee:50:5.5 eee:50:5.5 [root@mail text]# sort sort.txt aaa:10:1.1 bbb:20:2.2 ccc:30:3.3 ddd:40:4.4 eee:50:5.5 eee:50:5.5
忽略相同行使用-u選項或者uniq:
[root@mail text]# cat sort.txt aaa:10:1.1 ccc:30:3.3 ddd:40:4.4 bbb:20:2.2 eee:50:5.5 eee:50:5.5 [root@mail text]# sort -u sort.txt aaa:10:1.1 bbb:20:2.2 ccc:30:3.3 ddd:40:4.4 eee:50:5.5 或者 [root@mail text]# uniq sort.txt aaa:10:1.1 ccc:30:3.3 ddd:40:4.4 bbb:20:2.2 eee:50:5.5
sort的-n、-r、-k、-t選項的使用:
[root@mail text]# cat sort.txt AAA:BB:CC aaa:30:1.6 ccc:50:3.3 ddd:20:4.2 bbb:10:2.5 eee:40:5.4 eee:60:5.1 #將BB列按照數字從小到大順序排列: [root@mail text]# sort -nk 2 -t: sort.txt AAA:BB:CC bbb:10:2.5 ddd:20:4.2 aaa:30:1.6 eee:40:5.4 ccc:50:3.3 eee:60:5.1 #將CC列數字從大到小順序排列: [root@mail text]# sort -nrk 3 -t: sort.txt eee:40:5.4 eee:60:5.1 ddd:20:4.2 ccc:50:3.3 bbb:10:2.5 aaa:30:1.6 AAA:BB:CC # -n是按照數字大小排序,-r是以相反順序,-k是指定需要愛排序的欄位,-t指定欄位分隔符為冒號
實例
grep successfully /home/wuhuan/atlas_2018_08_17.log| sort | uniq -c | sort -r(搜索文件log中的successfully,去重反序打印每一行)
-k選項的具體語法格式:
-k選項的語法格式:
FStart.CStart Modifie,FEnd.CEnd Modifier -------Start--------,-------End-------- FStart.CStart 選項 , FEnd.CEnd 選項
這個語法格式可以被其中的逗號,
分為兩大部分,Start部分和End部分。Start部分也由三部分組成,其中的Modifier部分就是我們之前說過的類似n和r的選項部分。我們重點說說Start
部分的FStart
和C.Start
。C.Start
也是可以省略的,省略的話就表示從本域的開頭部分開始。FStart.CStart
,其中FStart
就是表示使用的域,而CStart
則表示在FStart
域中從第幾個字符開始算“排序首字符”。同理,在End部分中,你可以設定FEnd.CEnd
,如果你省略.CEnd
,則表示結尾到“域尾”,即本域的最后一個字符。或者,如果你將CEnd設定為0(零),也是表示結尾到“域尾”。
從公司英文名稱的第二個字母開始進行排序:
$ sort -t ' ' -k 1.2 facebook.txt baidu 100 5000 sohu 100 4500 google 110 5000 guge 50 3000
使用了-k 1.2
,表示對第一個域的第二個字符開始到本域的最后一個字符為止的字符串進行排序。你會發現baidu因為第二個字母是a而名列榜首。sohu和 google第二個字符都是o,但sohu的h在google的o前面,所以兩者分別排在第二和第三。guge只能屈居第四了。
只針對公司英文名稱的第二個字母進行排序,如果相同的按照員工工資進行降序排序:
$ sort -t ' ' -k 1.2,1.2 -nrk 3,3 facebook.txt baidu 100 5000 google 110 5000 sohu 100 4500 guge 50 3000
由於只對第二個字母進行排序,所以我們使用了-k 1.2,1.2
的表示方式,表示我們“只”對第二個字母進行排序。(如果你問“我使用-k 1.2
怎么不行?”,當然不行,因為你省略了End部分,這就意味着你將對從第二個字母起到本域最后一個字符為止的字符串進行排序)。對於員工工資進行排 序,我們也使用了-k 3,3
,這是最准確的表述,表示我們“只”對本域進行排序,因為如果你省略了后面的3,就變成了我們“對第3個域開始到最后一個域位置的內容進行排序” 了。
more命令
more命令是一個基於vi編輯器文本過濾器,它以全屏幕的方式按頁顯示文本文件的內容,支持vi中的關鍵字定位操作。more名單中內置了若干快捷鍵,常用的有H(獲得幫助信息),Enter(向下翻滾一行),空格(向下滾動一屏),Q(退出命令)。
該命令一次顯示一屏文本,滿屏后停下來,並且在屏幕的底部出現一個提示信息,給出至今己顯示的該文件的百分比:--More--(XX%)可以用下列不同的方法對提示做出回答:
- 按Space鍵:顯示文本的下一屏內容。
- 按Enier鍵:只顯示文本的下一行內容。
- 按斜線符
|
:接着輸入一個模式,可以在文本中尋找下一個相匹配的模式。 - 按H鍵:顯示幫助屏,該屏上有相關的幫助信息。
- 按B鍵:顯示上一屏內容。
- 按Q鍵:退出rnore命令。
語法
more(語法)(參數)
選項
-<數字>:指定每屏顯示的行數; -d:顯示“[press space to continue,'q' to quit.]”和“[Press 'h' for instructions]”; -c:不進行滾屏操作。每次刷新這個屏幕; -s:將多個空行壓縮成一行顯示; -u:禁止下划線; +<數字>:從指定數字的行開始顯示。
參數
文件:指定分頁顯示內容的文件。
實例
顯示文件file的內容,但在顯示之前先清屏,並且在屏幕的最下方顯示完核的百分比。
more -dc file
顯示文件file的內容,每10行顯示一次,而且在顯示之前先清屏。
more -c -10 file
less命令
less命令的作用與more十分相似,都可以用來瀏覽文字檔案的內容,不同的是less命令允許用戶向前或向后瀏覽文件,而more命令只能向前瀏覽。用less命令顯示文件時,用PageUp鍵向上翻頁,用PageDown鍵向下翻頁。要退出less程序,應按Q鍵。
語法
less(選項)(參數)
選項
-e:文件內容顯示完畢后,自動退出; -f:強制顯示文件; -g:不加亮顯示搜索到的所有關鍵詞,僅顯示當前顯示的關鍵字,以提高顯示速度; -l:搜索時忽略大小寫的差異; -N:每一行行首顯示行號; -s:將連續多個空行壓縮成一行顯示; -S:在單行顯示較長的內容,而不換行顯示; -x<數字>:將TAB字符顯示為指定個數的空格字符。
參數
文件:指定要分屏顯示內容的文件。
grep命令
grep(global search regular expression(RE) and print out the line,全面搜索正則表達式並把行打印出來)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。
選項
-a 不要忽略二進制數據。
-A<顯示列數> 除了顯示符合范本樣式的那一行之外,並顯示該行之后的內容。
-b 在顯示符合范本樣式的那一行之外,並顯示該行之前的內容。
-c 計算符合范本樣式的列數。
-C<顯示列數>或-<顯示列數> 除了顯示符合范本樣式的那一列之外,並顯示該列之前后的內容。
-d<進行動作> 當指定要查找的是目錄而非文件時,必須使用這項參數,否則grep命令將回報信息並停止動作。
-e<范本樣式> 指定字符串作為查找文件內容的范本樣式。
-E 將范本樣式為延伸的普通表示法來使用,意味着使用能使用擴展正則表達式。
-f<范本文件> 指定范本文件,其內容有一個或多個范本樣式,讓grep查找符合范本條件的文件內容,格式為每一列的范本樣式。
-F 將范本樣式視為固定字符串的列表。
-G 將范本樣式視為普通的表示法來使用。
-h 在顯示符合范本樣式的那一列之前,不標示該列所屬的文件名稱。
-H 在顯示符合范本樣式的那一列之前,標示該列的文件名稱。
-i 忽略字符大小寫的差別。
-l 列出文件內容符合指定的范本樣式的文件名稱。
-L 列出文件內容不符合指定的范本樣式的文件名稱。
-n 在顯示符合范本樣式的那一列之前,標示出該列的編號。
-q 不顯示任何信息。
-R/-r 此參數的效果和指定“-d recurse”參數相同。
-s 不顯示錯誤信息。
-v 反轉查找。
-w 只顯示全字符合的列。
-x 只顯示全列符合的列。
-y 此參數效果跟“-i”相同。
-o 只輸出文件中匹配到的部分。
grep命令常見用法
在文件中搜索一個單詞,命令會返回一個包含“match_pattern”的文本行:
grep match_pattern file_name grep "match_pattern" file_name
在多個文件中查找:
grep "match_pattern" file_1 file_2 file_3 ...
輸出除之外的所有行 -v 選項:
grep -v "match_pattern" file_name
標記匹配顏色 --color=auto 選項:
grep "match_pattern" file_name --color=auto
使用正則表達式 -E 選項:
grep -E "[1-9]+"
或
egrep "[1-9]+"
只輸出文件中匹配到的部分 -o 選項:
echo this is a test line. | grep -o -E "[a-z]+\." line. echo this is a test line. | egrep -o "[a-z]+\." line.
統計文件或者文本中包含匹配字符串的行數 -c 選項:
grep -c "text" file_name
輸出包含匹配字符串的行數 -n 選項:
grep "text" -n file_name
或
cat file_name | grep "text" -n
#多個文件
grep "text" -n file_1 file_2
打印樣式匹配所位於的字符或字節偏移:
echo gun is not unix | grep -b -o "not" 7:not #一行中字符串的字符便宜是從該行的第一個字符開始計算,起始值為0。選項 -b -o 一般總是配合使用。
搜索多個文件並查找匹配文本在哪些文件中:
grep -l "text" file1 file2 file3...
grep遞歸搜索文件
在多級目錄中對文本進行遞歸搜索:
grep "text" . -r -n # .表示當前目錄。
忽略匹配樣式中的字符大小寫:
echo "hello world" | grep -i "HELLO"(echo命令用於在shell中打印shell變量的值,或者直接輸出指定的字符串)
hello
選項 -e 制動多個匹配樣式:
echo this is a text line | grep -e "is" -e "line" -o is line #也可以使用-f選項來匹配多個樣式,在樣式文件中逐行寫出需要匹配的字符。 cat patfile aaa bbb echo aaa bbb ccc ddd eee | grep -f patfile -o
在grep搜索結果中包括或者排除指定文件:
#只在目錄中所有的.php和.html文件中遞歸搜索字符"main()"
grep "main()" . -r --include *.{php,html}
#在搜索結果中排除所有README文件
grep "main()" . -r --exclude "README"
#在搜索結果中排除filelist文件列表里的文件
grep "main()" . -r --exclude-from filelist
使用0值字節后綴的grep與xargs:
#測試文件:
echo "aaa" > file1
echo "bbb" > file2
echo "aaa" > file3
grep "aaa" file* -lZ | xargs -0 rm #執行后會刪除file1和file3,grep輸出用-Z選項來指定以0值字節作為終結符文件名(\0),xargs -0 讀取輸入並用0值字節終結符分隔文件名,然后刪除匹配文件,-Z通常和-l結合使用。
grep靜默輸出:
grep -q "test" filename #不會輸出任何信息,如果命令運行成功返回0,失敗則返回非0值。一般用於條件測試。
打印出匹配文本之前或者之后的行:
#顯示匹配某個結果之后的3行,使用 -A 選項: seq 10 | grep "5" -A 3(seq命令用於產生從某個數到另外一個數之間的所有整數。) 5 6 7 8 #顯示匹配某個結果之前的3行,使用 -B 選項: seq 10 | grep "5" -B 3 2 3 4 5 #顯示匹配某個結果的前三行和后三行,使用 -C 選項: seq 10 | grep "5" -C 3 2 3 4 5 6 7 8 #如果匹配結果有多個,會用“--”作為各匹配結果之間的分隔符: echo -e "a\nb\nc\na\nb\nc" | grep a -A 1 a b -- a b
其他常用命令集錦:
(1)命令ls——列出文件
ls -la 給出當前目錄下所有文件的一個長列表,包括以句點開頭的“隱藏”文件
ls a* 列出當前目錄下以字母a開頭的所有文件
ls -l *.doc 給出當前目錄下以.doc結尾的所有文件
(2)命令cp——復制文件
cp afile afile.bak 把文件復制為新文件afile.bak
cp afile /home/bible/ 把文件afile從當前目錄復制到/home/bible/目錄下
cp * /tmp 把當前目錄下的所有未隱藏文件復制到/tmp/目錄下
cp -a docs docs.bak 遞歸性地把當前目錄下的docs目錄復制為新目錄docs.bak,保持文件屬性,並復制所有的文件,包括以句點開頭的隱藏文件。為了方便起見,-a選項包含-R選項
cp -i 在覆蓋前詢問用戶
cp -v 告訴用戶正在做什么
(3)命令mv——移動和重命名文件
mv aflie bfile 將afile重命名為bfile
mv afile /tmp 把當前目錄下的afile移動到/tmp/目錄下
(4)命令rm——刪除文件和目錄
rm afile 刪除文件afile
rm * 刪除當前目錄下的所有文件(未隱藏文件)。rm命令不刪除目錄,除非也指定了-r(遞歸)參數。
rm -rf domed 刪除domed目錄以及它所包含的所有內容
rm -i a* 刪除當前目錄下所有以字母a開頭的文件,並且在每次刪除時,提示用戶進行確認
(5)命令cd——更改目錄
cd ~ 切換到主目錄
cd /tmp 切換到目錄/tmp
cd dir 切換到當前目錄下的dir目錄
cd / 切換到根目錄
cd .. 切換到到上一級目錄
cd ../.. 切換到上二級目錄
cd ~ 切換到用戶目錄,比如是root用戶,則切換到/root下
(6)命令mkdir——建立目錄
mkdir phots 在當前目錄中建立名為photos的目錄
mkdir -p this/that/theother 在當前目錄下建立指定的嵌套子目錄
(7)命令mkdir——刪除目錄
mkdir 將刪除空目錄
(8)命令more、less——查看文件內容
more /etc/passwd 查看/etc/passwd的內容
功能:分頁顯示命令
more file
more命令也可以通過管道符(|)與其他的命令一起使用,
例如:
ps ux|more
ls|more
less /etc/passwd 查看/etc/passwd的內容
(9)命令grep——搜索文件內容
grep bible /etc/exports 在文件exports中查找包含bible的所有行
tail -100 /var/log/apache/access.log|grep 404 在WEB服務器日志文件access.log的后100行中查找包含“404”的行
tail -100 /var/log/apache/access.log|grep -v googlebot 在WEB服務器日志文件access.log的后100行中,查找沒有被google訪問的行
grep -v ^# /etc/apache2/httpd.conf 在主apache配置文件中,查找所有非注釋行 (10)命令find——查找文件
find .-name *.rpm 在當前目錄中查找rpm包
find .|grep page 在當前目錄及其子目錄中查找文件名包含page的文件 locate traceroute 在系統的任何地方查找文件名包含traceroute的文件
(11)命令vi——編輯文件
vi /etc/bubby.txt 用vi編輯文件/etc/bubby.txt
vim /etc/bubby.txt 用vi編輯文件/etc/bubby.txt
快捷操作:
切換窗口:alt+1,alt+2
全屏:alt+回車
將vim掛起(暫停):ctrl+z,暫停后可進行其他shell操作,完了之后可通過 fg 命令切換回vim界面繼續編輯
:MR:查看歷史文件記錄(注意:MR大寫)
:sp 橫向切換界面窗口
:vsp 縱向切換界面窗口
方便多文件對照編碼(如下圖:)
emacs /etc/bubby.txt 用emacs編輯文件/etc/bubby.txt
(12)命令rz、sz——文件上傳下載
運行命令Sudo rz,即是接收文件,xshell就會彈出文件選擇對話框,選好文件之后關閉對話框,文件就會上傳到linux里的當前目錄 。
運行命令Sudo sz file 就是發文件到windows上(保存的目錄是可以配置)
比ftp命令方便多了,而且服務器不用再開FTP服務了。
(13)命令cat——顯示文件內容
cat file
(14)命令ps——查看進程
ps [options]
DESCRIPTION(描述):ps命令顯示運行程序選項的一些信息。如果你想顯示選項的一些重復信息,請使用top命令替代。 用標准語法查看系統上的每一個進程。
ps -e
ps -ef
ps -eF
ps -ely
(15)命令kill——殺掉進程
[root@linux ~]# kill -signal %jobnumber
[root@linux ~]# kill -l
參數: -l :這個是 L 的小寫,列出目前 kill 能夠使用的訊號 (signal) 有哪些?共有62個
信號。
signal :代表給予后面接的那個工作什么樣的指示啰!用 man 7 signal 可知:
-1 :重新讀取一次參數的設定檔 (類似 reload);
-2 :代表與由鍵盤輸入 [ctrl]-c 同樣的動作;
-9 :立刻強制刪除一個工作;
-15:以正常的程序方式終止一項工作。與 -9 是不一樣的。
范例一:找出目前的 bash 環境下的背景工作,並將該工作刪除。
[root@linux ~]# jobs
[1]+ Stopped vim bashrc [root@linux ~]# kill -9 %1
[1]+ 已砍掉 vim bashrc (16)命令stop、start——重啟tomcat ./catalina.sh stop
./catalina.sh start
(17)命令top——查看cpu、內存
(18)命令pwd——查看當前路徑
(19)命令tar——打包、解包rar
tar -cvf **.tar a.jsp b.java
將a和b打成**.rar tar -xvf **.tar a.jsp b.java
將**.tar 解包 (20)命令tail——查看文件詳細信息
tail -f aaa.txt
看aaa.txt文件的詳細信息 tail -n x aaa.log
x:最后幾行
(21)命令head——查看文件的名字和后綴
head -n x aaa.log
x:開始幾行aaa.log:要查看的文件的名字和后綴
(22)命令diff——比較文件內容
diff dir1 dir2 比較目錄1與目錄2的文件列表是否相同,但不比較文件的實際內容,不同則列出
diff file1 file2 比較文件1與文件2的內容是否相同,如果是文本格式的文件,則將不相同的內容顯示,如果是二進制代碼則只表示兩個文件是不同的
comm file1 file2 比較文件,顯示兩個文件不相同的內容
(23)命令ln——建立連接
ln source_path target_path 硬連接
ln -s source_path target_path 軟連接
(24)命令touch——創建一個空文件
touch aaa.txt 創建一個空文件,文件名為aaa.txt
三、基本系統命令
(25)命令man——查看某個命令的幫助
man ls 顯示ls命令的幫助內容
(26)命令w——顯示登錄用戶的詳細信息
Sarge:~# w
(27)命令who——顯示登錄用戶
Sarge:~# who
(28)命令last——查看最近那些用戶登錄系統
Sarge:~# last
(29)命令date——系統日期設定
date -s “060520 06:00:00″ 設置系統時期為2006年5月20日6點整。
(30)命令
clock——時鍾設置
clock –r 對系統Bios中讀取時間參數
clock –w 將系統時間(如由date設置的時間)寫入Bios
(31)命令uname——查看系統版本
uname -R 顯示操作系統內核的version
(32)命令reboot、shutdown——關閉和重新啟動計算機
reboot 重新啟動計算機
shutdown -r now 重新啟動計算機,停止服務后重新啟動計算機
shutdown -h now 關閉計算機,停止服務后再關閉系統
halt 關閉計算機
一般用shutdown -r now,在重啟系統是,關閉相關服務,shutdown -h now也是如此。
(33) 命令su——切換用戶
su - 切換到root用戶
su – zhoulj 切換到zhoulj用戶,
注意:- ,他很關鍵,使用-,將使用用戶的環境變量
(34)命令free——查看內存和swap分區使用情況
Sarge:~# free -tm
(35)命令uptime——現在的時間 ,系統開機運轉到現在經過的時間,連線的使用者數量,最近一分鍾,五分鍾和十五分鍾的系統負載
Sarge:~# uptime
(36) 命令vmstat——監視虛擬內存使用情況
# vmstat
(37)命令iostat——磁盤吞吐量
-c 只顯示CPU行
-d 顯示磁盤行
-k 以千字節為單位顯示磁盤輸出
-t 在輸出中包括時間戳
-x 在輸出中包括擴展的磁盤指標
(38)命令clear—— 清屏
(39)重啟tomcat
(40)變更使用者chown
變更文件或目錄的擁有者或所屬群組
chown -R -h owner file
- R(recursive)選項意味着對所有子目錄下的文件也都進行同樣的操作。
- h選項意味着在改變符號鏈接文件的屬主時不影響該鏈接所指向的目標文件
chown -R xh test1 (test1目錄及子目錄的所有文件屬主變為xh)
1.查看要重啟進程的進程號 Ps –ef|grep xxxx 2.殺掉該項目的進程
先殺第二列,再殺第一列 Sudo kill -9 x x
(x為進程號,同時殺多個中間以空格分割) 3.重啟tomcat
首先找到tomcat的bin目錄 Cd tomcat/bin;
然后運行 sudo ./run.sh即可啟動tomcat。