55. gcc44/g++44c++
若CentOS系統版本太低(如CentOS 5.4),則可能不支持「-std=c++0x」選項。解決辦法是安裝gcc44/g++44正則表達式
① 安裝:shell
yum install gcc44express
yum install gcc44-c++vim
② 設置
緩存
export CXX=g++44安全
說明:對於C++項目,cmake使用的編輯器由環境變量「CXX」指定,默認爲「/usr/bin/c++」;對於C項目,cmake使用的編輯器由環境變量「CC」指定,默認爲「/usr/bin/gcc」bash
③ 編譯服務器
cmake ../project_dir && make網絡
說明:運行cmake以前,須要先刪除build目錄當前全部文件
54. bash_history
文件:~/.bash_history
名稱:歷史命令記錄文件
功能:記錄特定用戶在命令行上執行過的命令
說明:
① bash_history跨會話和鏈接共享,即用戶A以「some_user」帳號登陸到系統,用戶B一樣以「some_user」帳號登陸到系統,則A和B執行過的命令都將記錄到同一個bash_history文件,即/home/some_user/.bash_history;
② 歷史命令寫入bash_history文件的時機是,當前會話關閉時;③ 此文件的訪問權限爲600;
安全問題:
bash_history文件可能形成密碼泄露,請妥善處理
53. strings命令
語法:strings「options」file...
功能:打印文件中的可打印字符串。對於給定的每一個文件,GNU strings會打印至少4個(或選項中指定的個數)字符長的可打印字符序列,後跟一個不可打印字符。strings主要用於肯定非文本文件的內容
選項及參數:
-n min-len:打印長度至少爲「min-len」個字符的字符序列,而不是默認值4
52. DNS
修改
vim /etc/resolv.conf
當即生效
51. 主機名
查看
hostname
echo $HOSTNAME
設置
◇ 臨時設置
hostname 「name」
當即生效,系統重啓後失效
◇ 永久設置
分別設置「/etc/hostname」「/etc/sysconfig/network」「/etc/hosts」
說明:
① 系統啓動時,啓動腳本中的一個(未知),會檢查當前「主機名」是否爲「localhost」或「localhost.localdomain」,如果,那麼該腳本就會使用「接口IP」對應的「主機名」對其進行重置
②「接口IP」與「主機名」的映射,存在於「/etc/hosts」文件,若「/etc/hosts」中不存在此映射,則默認爲該接口的「IP地址」
③「ip addr show to 0/0 scope global | awk '/[[:space:]]inet/{ print gensub("/.*","","g",$2) }'」命令能夠獲取「接口IP」
50. nslookup
命令:nslookup {hostname|ip}
說明:向DNS(域名服務器,domain name server)發送請求,進行域名解析:
① nslookup hostname,正向解析,經過主機名,獲取ip地址
② nslookup ip,反向解析,經過ip地址,獲取主機名
功能:
① 查看DNS服務器地址
② 驗證DNS功能正常
示例:
正向解析
反向解析
前面兩行「Server」「Address」爲DNS服務器地址
49. 自啓動
49.3 設置
① 編寫自啓動腳本
說明:
a. 系統啓動或手動執行service「Name」start命令時,系統運行該腳本,並傳入「start」參數
b. 系統關機或手動執行service「Name」stop命令時,系統運行該腳本,並傳入「stop」參數
c. 腳本程序的主體,menu $1,決定了運行該腳本即執行menu()函數,並傳入對應參數,分別調用start()或stop()
d. start()和stop()函數體內,包含了你想執行的操做
注意:
腳本開頭必須包含以下兩行註釋:
#chkconfig:「RunLevel...」「StartPL」「StopPL」
#description: 「UrDescription」
「RunLevel...」爲該程序指定默認運行級
「StartPL」即Start Priority Level,指定程序的啓動優先級
「StopPL」即Stop Priority Level,指定程序的中止優先級
先啓動的應該後關閉,後啓動的應該先關閉,所以,通常狀況下「StartPL」+「StopPL」應該等於100
② 在/etc/init.d/目錄中,爲該腳本添加符號連接
③ chkconfig
chkconfig --add「name」
49.2 目錄
/etc/init.d
做用:存放啓動腳本
說明:實爲目錄/etc/rc.d/init.d的符號連接
用法:一般是在該目錄下建立一個指向實際啓動腳本的符號連接,而不是直接將腳本文件放於該目錄中
/etc/rcN.d
做用:開機啓動目錄
說明:
◇ N從「0」到「6」,共七個目錄
◇ 實爲目錄/etc/rc.d/rcN.d的符號連接
內容:目錄中的文件實爲指向/etc/init.d目錄中對應腳本的符號連接
符號連接的命名規則爲{S|K}+{nn}+{Name}
{nn}表示兩位整數,表明程序啓動或中止的優先級,{00}-{99},數值越大,優先級越低,即:
△ 系統啓動時,會先啓動排在前面的程序,後啓動排在後面的程序
△ 系統關機時,會先中止排在前面的程序,後中止排在後面的程序
{Name}表示程序的名稱,務必與/etc/init.d目錄下的腳本文件名對應
描述:系統啓動時,會根據當前所處運行級別,分別進入對應的rcN.d目錄,並按照文件名中包含的優先級,順序處理目錄下的連接文件:
◇ 對於以S開頭的文件,系統啓動對應的程序,即系統執行/etc/init.d目錄下的對應腳本,並傳入start參數
◇ 對於以K開頭的文件,系統中止對應的程序,即系統執行/etc/init.d目錄下對應的腳本,並傳入stop參數
49.1 運行級
Linux下共有7個運行級,分別是:
等級0表示:關機,默認運行級別不能設爲0,不然系統不能正常啓動
等級1表示:單用戶模式
等級2表示:無網絡鏈接的多用戶命令行模式
等級3表示:有網絡鏈接的多用戶命令行模式
等級4表示:不可用
等級5表示:帶圖形界面的多用戶模式
等級6表示:重啓,默認運行級別不能設爲6,不然系統不能正常啓動
查看系統當前運行級:runlevel
48. chkconfig
chkconfig是管理程序自啓動的命令行工具,它能夠幫助系統管理員在/etc/rcN.d目錄下建立對應程序的符號連接,從而使得咱們無需手動地逐個添加
添加
命令:chkconfig --add「name」
功能:按照/etc/init.d目錄對應程序腳本中指定的運行級和優先級,爲該程序添加自啓動
設置
命令:chkconfig --level「n...」「name」{on|off|reset|resetpriorities}
功能:將「name」程序在運行級「n...」下的自啓動{開啓|關閉|重置|重置優先級}
說明:
重置,即將該程序在對應運行級下的自啓動開關,重置爲目錄/etc/init.d對應腳本中指定的配置
重置優先級,即將該程序在對應運行級下的優先級,重置爲目錄/etc/init.d對應腳本中指定的優先級
查看
◇ chkconfig --list :列出全部自啓動程序的配置
「0-6」對應Linux系統下的7個運行級別,「on」表示該程序在對應運行級下開啓自啓動,「off」表示該程序在對應運行級下禁用自啓動
◇ chkconfig --list「name」:列出名爲「name」的程序的配置
◇ chkconfig「name」:查看服務「name」在當前運行級下是否自啓。如果則返回true,echo $? 結果爲0;不然返回false,echo $? 結果爲1
◇ chkconfig --level「n」「name」:查看服務「name」在運行級「n」下是否自啓
刪除
命令:chkconfig --del「name」
功能:刪除「name」程序的自啓動
說明:僅刪除/etc/rcN.d目錄下的符號連接,/etc/init.d中的腳本文件不受影響
47. 系統服務
查看
查看全部服務:ls /etc/init.d
添加
編寫服務腳本,參考49.3,若不須要自啓動,則沒必要添加
#chkconfig:「RunLevel...」「StartPL」「StopPL」
#description: 「UrDescription」
運行
命令:service「name」{start|stop}
說明:運行該命令後,系統會運行/etc/init.d中對應的腳本程序,並傳入對應的參數{start|stop},最終調用腳本中的start()或stop()函數。所以,只須要將你想執行的操做放入start()或stop()函數體便可
46. at命令
命令:at 「Options」「Cmds」「Time」
功能:指定命令什麼時候執行
輸出:命令的STDOUT和STDERR,發往提交做業的用戶的郵箱
選項:
-M:禁止向用戶發送郵件
-l:顯示全部做業
-f「FileName」:從文件讀取命令
-d「JobNo」:刪除做業,「JobNo」爲做業號
命令:從STDIN,或經過-f「FileName」從指定的文件中,讀入所要執行的命令
時間:精確到分,格式包括
△ 日期時間 YYYY-MM-DD hh:mm
△ 時間 hh:mm
默認爲今日hh:mm,若今日當前時間已超過hh:mm,則爲明日hh:mm
△ now 表明當前時間
now + 1min 一分鐘後
now + 2hour 兩小時後
now + 3day 三天後
示例:
45. 查看CentOS版本
② 查看/etc/redhat-release文件
命令:cat /etc/redhat-release
示例:
① 運行lsb_release命令
命令:lsb_release -a
安裝:yum install lsb
說明:不是全部系統都支持lsb_release命令,且lsb依賴關係龐大,安裝過程可能間接升級系統依賴庫,對現有程序的運行形成未知影響,不利於系統穩定性,故不推薦在線上服務器執行yum install lsb
44. 時間
44.1 世界標準時
說明:
世界標準時(UTC),又稱爲協調世界時,世界統一時間,世界標準時間。它是世界上最主要的時間標準,同時也是世界上調節時鐘和時間的主要標準。經過原子鐘報時,精確度極高。不遵照夏令時
平常使用:
中華人民共和國的時間比UTC快8小時,就會寫做UTC+8,俗稱東八區。相反,若是本地時間比UTC時間慢,例如夏威夷的時間比UTC時間慢10小時,就會寫做UTC-10,俗稱西十區
44.2 格里尼治標準時間
GMT,是指位於英國倫敦郊區的皇家格林尼治天文臺的當地時間
由於英國施行夏令時,因此格里尼治標準時間遵照夏令時間,一年中隨季節變化而變化
44.3 夏令時間
又稱日光節約時間,是一種爲節約能源而人爲調整地方時間的制度,在這一制度實行期間所採用的統一時間稱爲「夏令時間」
方法:各個採納夏時制的國家的規定不一樣。但通常是在天亮較早的夏季人爲將時間調快一小時,可使人早起早睡,減小照明量,以充分利用光照資源,從而節約照明用電
意義:
若是一我的的做息習慣是早上10點起牀,晚上12點睡覺,在夏季天亮較早的狀況下,就會浪費大好的時光,同時浪費用電
此時,實行夏令時,人爲將時間調快1小時,那麼做息時間不變的狀況下,實際上就等同於調整前的早上9點起牀,晚上11點睡覺,充分利用了白天的時間,減小了能源消耗
國家和地區:
歐盟國家、瑞士和英國都是從3月最後一個星期日到10月最後一個星期日實行夏時制。歐盟國家和英國在三月最後一個星期日協調世界時01:00同時撥快一小 時,在十月的最後一個星期日協調世界時01:00進行相反的調整
此時,英國由理論上的0時區變爲實際上的東1區(由於比UTC快1小時),羅馬由理論上的東1區變爲實際上的東2區(由於比UTC快2小時)
中華人民共和國在1986-1991年試行過夏時制,現已廢棄
44.4 設置時間
date -s "YYYY-MM-DD hh:mm:ss"
44.5 時區
「東N區」即「當地時間」比「UTC時間」快「N」個小時;「西M區」即「當地時間」比「UTC時間」慢「M」個小時
故位於「東8區」的中國比位於「東9區」的日本,時間慢「1」個小時,中國的當地時間「2017-04-29 07:34:09」,則日本當地時間爲「2017-04-29 08:34:09」
44.6 顯示時區
date -R
示例:
「+」表明東區,「-」表明西區,所以「+0100」即東1區
44.7 更改時區
① 運行「tzselect」,獲取目標國家的時區名
② 運行「TZ='TzName'; export TZ」,設置當前鏈接的時區;鏈接關閉,設置失效
③ 「TZ='TzName'; export TZ」寫入~/.bashrc,使時區設置對用戶永久生效
44.8 UNIX時間
又稱POSIX時間,是UNIX系統使用的時間表示方式:從協調世界時1970年1月1日0時0分0秒起至如今的總秒數
爲絕對時間,與時區無關,跨時區做業的時間存儲格式應該使用UNIX時間,而不是國際標準格式
查看方式 date +%s
◇ UNIX時間,與UTC時間同,爲絕對時間,與時區無關。不一樣時區的UNIX時間相同
意大利
羅馬當地時間「2017-04-29 04:43:00」,UNIX時間爲「1493433780」
中國
同一時刻,北京當地時間爲「2017-04-29 10:43:00」,UNIX時間爲「1493433780」
◇ 國際標準日期/時間格式,「YYYY-MM-DD hh:mm:ss」,爲相對時間,依賴於時區。
同一個「YYYY-MM-DD hh:mm:ss」,在不一樣的時區,其對應的UTC時間和UNIX時間不一樣
2038年問題
32位UNIX系統中,time_t類型爲32位整數,能夠表示的時間區間爲:協調世界時,「1990」至「2038」年
超過「2038」年,軟件可能發生問題,致使系統癱瘓,解決辦法:把32位系統升級爲64位系統
43. su命令
格式:su 「Options」「User」 -c「Cmds」
功能:使用指定的用戶和組ID運行命令
示例:
42. screen命令
42.1 背景
關閉窗口/斷開ssh鏈接時,系統會向會話首進程發送「SIGHUP」信號(默認終止進程);會話首進程終止時,會向前臺進程組中的全部進程發送「SIGHUP」信號。因此關閉窗口/斷開ssh鏈接時,會致使當前窗口或鏈接中正在運行的前臺進程終止
42.2 描述
screen爲終端窗口管理器,可使得進程脫離當前窗口和當前鏈接,獨立運行
格式:screen 「-options」 「cmd args」
限制:選項「-options」必須放在命令「cmd args」以前,不然無效
42. 3 命令行
☆ 運行進程
①screen -d -m 「cmd」
②screen -dmS 「SessionName」 「cmd」
說明:
選項「-d -m」,建立一個新會話以運行「cmd」,但不進行關聯,即以分離模式運行screen;選項「-S」指定新會話名稱;
命令「cmd」執行完,自動關閉會話
☆ 查看會話
screen -ls
☆ 恢復會話
①screen -r 「SessionName」
②screen -r 「pid」
☆ 終止會話
關閉特定會話
①screen -S 「SessionName」 -X quit
②screen -S 「pid」 -X quit
③killall 「exe」
說明:選項「-X」向運行中的會話發送命令;選項「-S」指定會話
關閉所有會話
killall screen
42.4 控制終端
從當前會話分離:「Ctrl」+「a」,「d」
42.5 說明
nohup命令可以使得進程忽略「SIGHUP」信號,因此能夠達到相同的效果,但還須要使用標記&把進程放在後臺運行
nohup 「cmd」 &>/dev/null &
可是,nohup雖然很容易使用,但仍是比較「簡陋」的,對於簡單的命令可以應付過來,對於複雜的須要人機交互的任務就麻煩了。
41. /etc/security/limits.conf
功能:進程的資源限制
設置:<domain> <type> <item> <value>
生效:su - user -c /path/exe
說明:一般狀況下,進程的資源限制從父進程繼承而來。但存在兩個例外:
①su 「Options」「User」 -c「Cmds」 ②crond
以上述兩種方式,啓動的進程的資源限制,直接讀自/etc/security/limits.conf。
示例:
* soft core unlimited
* hard core unlimited
* soft nofile 644000
* hard nofile 644000
40. top命令
按「1」顯示CPU詳細信息
按「shift+p」以CPU排序
按「shift+m」之內存排序
按「d」修改輪詢間隔,默認3.0s
按「f」選擇排序字段,「s」選中,「Esc」退出
CPU詳細信息
能夠看到CPU主要消耗在內核態「sy」,仍是用戶態「us」
39. strace
功能:跟蹤系統調用
使用:strace -p pid
示例:
38. lsof
列出打開的文件
37. 32/64位
在64位系統上,能夠執行64位和32位應用程序。在32位系統上,只能執行32位應用程序,不能執行64位應用程序。
問題: 32/64位應用程序是否能夠調用64/32位共享庫?
回答: 64位應用程序只能調用64位共享庫,32位應用程序只能調用32位共享庫。
36. 動態庫
36.1 編譯時指定動態庫路徑:
① gcc -L/path -lname,例如:gcc -L./lib -levent
② gcc /path/libname.so,例如:gcc lib/libevent.so
36.2 運行時搜索順序:
gcc /path/libname.so方式編譯生成的可執行文件,運行時,直接到指定的目錄/path/下找庫文件,不然按照以下默認順序進行搜索:
①編譯目標代碼時添加的搜索路徑
②LD_LIBRARY_PATH
③/etc/ld.so.cache
④默認路徑/lib和/usr/lib,/lib64和/usr/lib64
編譯時添加運行期動態庫搜索路徑的方法:gcc -Wl,-rpath=.:..:lib,路徑之間以":"分隔
/etc/ld.so.cache修改緩存的路徑的方法:
①直接寫入/etc/ld.so.conf
②在/etc/ld.so.conf.d目錄添加.conf配置文件,文件內容爲新路徑 (標準方法)
例如:建立配置文件:fetion.conf,內容:/usr/local/src/fetion/lib
不管哪一種方法,修改完成後,需執行命令ldconfig,從而使得新路徑寫入cache
36.3 排錯步驟:運行時加載動態庫失敗
①庫文件是否存在
②若存在,目錄是否被包含於搜索路徑
③如果,應用程序和庫文件是否匹配,同爲32位或同爲64位
即
①find / -name libxxx.so.2
②目錄是否被包含
③file obj; file libxxx.so.2
36.4 查看
查看依賴:查看應用程序的動態庫依賴
ldd obj
查看文件屬性
file name
ELF 32-bit,爲32位;ELF 64-bit,爲64位;version 1,主版本號爲1
35. 命令
35.1 查找順序
alias——hash——PATH
別名
查看:alias -p
添加:alias curl='/usr/bin/curl'
刪除:unalias curl
hash
查看:hash
添加:hash -p /usr/bin/curl curl
刪除:hash -d curl //刪除一條 hash -r //所有清空
35.2 定位
命令:whereis exe
功能:全部版本的路徑
命令:which exe
功能:當前使用版本的路徑
示例
35.3 查看版本
rpm -qf /path/exe
示例
34. 用戶管理
◇ 添加用戶
命令:useradd 「Options」「UserName」
選項:
-m 建立用戶的HOME目錄
-M 不建立用戶的HOME目錄
-g {GroupName|GroupID} 爲新用戶指定默認組
◇ 刪除用戶
命令:userdel name
選項:
-r 刪除用戶的HOME目錄以及郵件目錄,然而, 系統上仍可能存在已刪除用戶的其餘文件
◇ 修改密碼
passwd name
◇ 爲普通用戶賦予「root」權限
vim /etc/sudoers
33. ssh/scp免驗證
[user@DQ5420-763 path] ssh peer@host -p port
受權本地用戶user,以用戶peer身份遠程登陸host主機時,免密碼驗證
方法:將user的公鑰,添加到遠程主機peer的~/.ssh/authorized_keys,最後chmod 600 authorized_keys便可
步驟:
a. 爲user生成密鑰對:user運行ssh-keygen -t rsa
b. 獲取公鑰:cat ~/.ssh/id_rsa.pub
c. 將user公鑰添加到peer:peer運行vim ~/.ssh/authorized_keys,寫入公鑰
若~/.ssh目錄不存在,執行ssh-keygen -t rsa -C "youremail@example.com"
d. 修改authorized_keys權限:chmod 600 ~/.ssh/authorized_keys
34. scp文件傳輸
命令:scp -P port [-r] src dst
選項:
-P port 指定ssh端口
-r 目錄傳輸
src 源文件
dst 目的地,若爲/path/,以原文件名傳到/path/目錄下;若爲/path/file,則重命名爲file
說明:src/dst遠程格式user@host:/path/file
33. ssh遠程命令
命令:ssh user@host -p port "cmd"
參數:
user 以用戶user身份登陸遠程主機
host 遠程主機ip
port ssh端口
cmd 命令序列,命令之間以分號;分隔
32. ENOMEM錯誤
錯誤類型:errno = 12,有說swap不夠用的
修改配置:echo "1000000" > /proc/sys/vm/max_map_count
說明:一經修改,全部已打開的會話和後續新打開的會話均有效。系統重啓後失效,需從新配置
31. Linux端口限制
配置文件:/proc/sys/net/ipv4/ip_local_port_range
查看:cat /proc/sys/net/ipv4/ip_local_port_range
保留端口爲[0, 32768],實際可以使用端口爲[32768, 61000]
設置:echo "1024 65535" > /proc/sys/net/ipv4/ip_local_port_range
端口最大值65535,超過此值,設置將會失敗
說明:系統重啓後仍有效,沒必要重配
30. 查看系統啓動時間
last reboot
最近重啓時間:3月19;再上次重啓時間:3月17;首次重啓時間:1月26
who -b
29. 進程控制
將幾個進程放到一個進程組:processA>/dev/null 2>&1 | processB>/dev/null 2>&1 | processC >/dev/null 2>&1 &
參數說明:
/dev/null 表明空設備文件
> 表明重定向到哪裏,例如:echo "123" > /home/123.txt
1 表示stdout標準輸出,系統默認值是1,因此">/dev/null"等同於"1>/dev/null"
2 表示stderr標準錯誤
& 表示等同於的意思,2>&1,表示2的輸出重定向等同於1
故參數涵義爲:
1>/dev/null 首先表示標準輸出重定向到空設備文件,也就是不輸出任何信息到終端,說白了就是不顯示任何信息
2>&1 接着,標準錯誤輸出重定向等同於 標準輸出,由於以前標準輸出已經重定向到了空設備文件,因此標準錯誤輸出也重定向到空設備文件
28. 文件差別
比較文件
diff f1 f2
<表示左側文件,>表示右側文件
比較目錄
diff -rqN d1 d2
參數講解:r遞歸比較目錄下所有文件;q只顯示有差別的文件名,不顯示差別內容;N當一個文件在一個目錄下有,一個目錄下沒有,按差別文件顯示
27. 信號
27.1 向進程發送信號
格式:kill -s SIG pid
sig可經過man手冊查詢,man 7 signal
例如,向13914進程發送SIGUSR1信號:kill -s SIGUSR1 13914
27.2 向進程組發送信號
格式:kill -s SIG -- -pgid
例如,向進程組24990發送SIGUSR1信號:kill -USR1 -- -24990
27.3 向一組進程發送信號
格式:kill -s SIG $(ps -ef | grep pattern | grep -v grep | awk '{printf "%s ", $2}')
例如,向全部PnsAndroid發送SIGUSR1信號:kill -USR1 $(ps -ef | grep PnsAndroid | grep -v grep | awk '{printf "%s ", $2}' )
26. 更新系統時間
ntpdate asia.pool.ntp.org
25. sort
格式:sort [-n] [-r] [-k num] [-t "c"] file1 file2...
功能:以行爲單位,對文件排序
參數:
-n表示按數值排序,不然默認按字符排序,字符排序中"10"排在"9"以前,因第一個字符"1"小於字符"9"
-r表示反向排列
-k表示按第num個域排列,默認按第一域進行排序
-t表示域分隔符爲"c"
示例
說明:
參數-(減號)表示從標準輸入讀取內容,例如
grep "pattern" txt2 | sort txt1 -
將命令grep的結果與文件txt1的內容合併排序。
若無結尾處-,則sort忽略標準輸入僅對文件txt1內容排序。
24. 輸出重定向
>和>>均爲輸出重定向,將結果輸出到文件
區別:>先清空原有內容,再寫入;>>以追加方式添加到文件末尾,原有內容不變。
23. core文件
23.3 路徑
命令:ll /proc/pid/cwd
說明:默認路徑爲進程的啓動路徑,即進程的工做目錄
23.2 設置格式和路徑
/proc/sys/kernel/core_pattern
做用:全部進程core文件格式和路徑
生效:當即生效,無需任何操做
重啓:系統重啓後失效
設置:echo "/path/core.%e.%p" > /proc/sys/kernel/core_pattern
參數:%e表示生成core的可執行文件名;%p表示生成core的進程id
23.1 打開
/etc/security/limits.conf
設置:
* soft core unlimited
* hard core unlimited
生效:①su 「Options」「User」 -c「Cmds」 ②重啓會話
重啓:系統重啓後仍舊有效
21. awk
普通模式
格式:awk '/pattern/{action}' files
參數:
pattern是一個正則表達式,如不指定pattern,則對全部文件的每一行,都執行action
action是一系列命令,由分號;隔開,對知足匹配的文本執行一些動做
files表示待操做文件,如不指定,則讀標準輸入
示例:
輸出全部1打頭的IP,並在後面註釋"TakeCare"
表達式模式
格式:awk '(expression){action}' files
參數:expression能夠是一個比較表達式
示例:
輸出價格大於1的水果
分割符
awk的-F參數能夠指定分隔符,好比下面的代碼將打印D
awk自動將讀入的行分割成域(field)。域是由分隔符分割開的字符集,缺省的分隔符是tab和空格,訪問域能夠用$1,$2, ... $n的形式,域都是從1開始的,而$0表示整個行。
NF爲當前行中字段的個數;$NF爲當前行中的最後一個字段。
比較操做
awk中能夠執行的比較操做有:> < == != ~ !~
波浪號~使用方式爲value ~ /pattern/,表匹配正則表達式pattern;反之!~表不匹配
找出全部價格在0.7-0.8左右的水果,並附加Affordable信息
格式化輸出
輸出整數:awk '{print int(expr)}'
功能:將expr的計算結果取整輸出
限制行數
格式:awk '(NR<=2){print $0}'
功能:輸出前兩行
說明:NR表示行號,從1開始;$0表示整行
20. 命令替換
格式:cmd1 $(cmd2)
功能:用$()括起來的命令cmd2先執行,而後結果做爲命令cmd1對應位置的文本
顯示PnsAndroid進程信息
top $(ps -ef | grep PnsAndroid | awk '{printf("-p %s ", $2);}') -d 1
刪除指定文件
rm -rf $(find ./ -name "file*")
與管道的區別:
管道操做符爲|,功能是將左側命令的輸出做爲右側命令的標準輸入,而不能用做後一個命令的參數。
因此要求右側命令可以接受標準輸入,而top和rm等不少命令並不使用標準輸入,故對其只能使用命令替換。
19. 防火牆
CentOS 6
查看:service iptables status
中止:service iptables stop
CentOS 7
查看:service firewalld status
中止:service firewalld stop
禁用:systemctl disable firewalld
18. 查看CPU核數
查看物理CPU個數:cat /proc/cpuinfo| grep "physical id" | uniq | wc -l
查看邏輯CPU個數:cat /proc/cpuinfo |grep "processor"|sort -u|wc -l
查看每一個物理CPU中的內核core個數:cat /proc/cpuinfo| grep "cpu cores" | uniq
17. 定時任務
Linux中,週期執行的任務通常由cron這個守護進程來處理。cron讀取一個或多個配置文件,這些配置文件中包含了要執行的命令和調用時間。
查看
全部用戶的定時任務配置文件,位於/var/spool/cron目錄下,以各自的用戶名命名
直接查看用戶配置文件,便可查看定時任務
或者直接輸入crontab -l命令,便可查看當前用戶的定時任務
設置
直接編輯/var/spool/cron目錄下的配置文件,便可添加定時任務
或者直接輸入crontab -e命令,便可編輯當前用戶的定時任務
格式
特殊符號
星號*:所有值
除號/:每
減號-:從某個值到某個值,區間內全部值
逗號,:離散值
示例
0 0 */2 * *:每兩天執行一次,且於當天0時0分開始執行,即每48小時執行一次
* * * 12 *:12月份天天每小時每分鐘都執行
*/20 * * * *:每隔20分鐘執行一次
19 17-22/2 * * *:天天17-22時,每隔2小時執行一次,且於第19分開始執行。即天天17:19分開始,每兩小時執行一次,直到21:19分
* 10,12 * * *:天天10點和12點,每分鐘執行一次
命令序列
能夠同時執行多條命令,命令之間以分號;隔開
典型示例:
* * * * * cd dir;sh name.sh;
進入dir目錄,而後以此目錄爲工做目錄執行name.sh
命令不能位於/sbin/目錄
例如
*/30 * * * * service jas-devol restart
/var/spool/mail/root顯示錯誤:/bin/sh: service: command not found
須要使用命令全路徑:/sbin/service
說明
除非在命令序列中更改了目錄,不然定時任務的工做目錄是帳號的起始目錄。
/var/spool/cron/root中定義的定時任務,以/root目錄爲進程的工做目錄;var/spool/cron/deviceSys中的定時任務,其工做目錄爲/home/deviceSys
例如,/var/spool/root中定義有
*/3 * * * * ./main
則每隔3分鐘,自動運行/root/main
日誌
定時任務日誌文件:/var/log/cron
查看:tail -f /var/log/cron
應用實例
每分鐘,執行一次/home/alarmSys/sh/process_monitor.sh腳本;每小時的第10分鐘,執行一次/home/alarmSys/sh/delouttime_file.sh腳本
16. ssh鏈接
命令:ssh username@ip
應用場景:轉鏈接
詳述:host1和host2在同一內網,host在外網。某時刻host2外網流量巨大,網絡繁忙,host連不上或很卡。此時host能夠先連host1,而後ssh到host2。host1和host2處於同一局域網,故速度很快。
15. 遞歸刪除
遞歸刪除目錄下特定文件
find dir -name "pattern" | xargs rm -f
例如,刪除本目錄下全部.log日誌
find ./ -name "*.log" | xargs rm -f
14. find命令
14.4 文件類型
格式:find -type c
功能:查找指定類型的文件
參數:c的可能取值爲
f 普通文件
d 目錄
l 符號連接
說明:爲去除目錄對結果的干擾,-perm一般結合-type選項對結果進行篩選,例如
find ./ -perm /111 -type f
查找具備具備可執行權限的普通文件
14.3 權限
文件權限值:讀4,寫2,執行1
例如,764即文件全部者可讀寫執行,組全部者可讀寫,其它人可讀
14.3.1
find -perm nnn
功能:查找文件權限剛好等於nnn的文件
示例:查找以下文件,文件全部者權限爲讀寫執行、組全部者爲讀寫、其它人只讀
find -perm 764 或者 find -perm u=rwx,g=rw,o=r
14.3.2
find -perm -abc
功能:查找以下文件,文件全部者權限知足a,且組全部者權限知足b,且其它人權限知足c
示例:查找以下文件,文件全部者和組全部者可讀寫,其它人可讀
find -perm -664 或者 find -perm -u=rw,g=rw,o=r
對於文件的可執行權限不做任何要求
14.3.3
find -perm /abc
功能:查找以下文件,或者文件全部者權限知足a,或者組全部者權限知足b,或者其它人權限知足c
示例:查找以下文件,文件全部者、組全部者、其它人,三者任何一個有執行權限
find -perm /111 或者 find -perm /u=x,g=x,o=x
說明:
- 和 / 的區別
- 對文件全部者/組全部者/其它人,三者權限均知足對自身的權限要求,纔可採納
/ 對文件全部者/組全部者/其它人,只要有一個知足對應的權限要求,便可採納
14.2 時間
格式:find dir -[a|m|c]time [+-]n
說明:根據文件的訪問時間、內容修改時間、狀態修改時間,查找文件,每24小時爲一個單位
參數:
-atime, -mtime, -ctime分別表示訪問時間、內容修改時間、狀態修改時間
n爲逝去的天數,一天即一個24小時,從當前時間點算起
詳述:
根據文件時間計算天數,向下取整。即不足24小時部分,自動忽略。
天數計算公式:天數 = (當前時間 - 文件時間)/ 24小時
例如:
當前時間爲2015-10-14 11:21:22,文件txt時間
則txt對應天數n等於
訪問時間 n = 1;內容修改時間 n = 2;狀態修改時間 n = 0
格式:find dir -[a|m|c]min [+-]n
說明:根據文件的訪問時間、內容修改時間、狀態修改時間,查找文件,每分鐘爲一個單位
示例:find ./ -cmin +15 在當前文件夾下查找15分鐘以前改變過狀態的全部文件
14.1 文件名
格式:find dir -name "fname"
說明:根據文件名查找文件
匹配模式:
星號*匹配任意字符
find ./ -name "*.log"
方括號[]匹配其中的字符
注意:文件名必須用雙引號引發來
13. 查看系統流量
iptraf -g
本地迴環測試流量:17M;內網流量:1M;外網流量:5M
內網流量,即局域網內主機通訊流量,例如同一公司內兩臺主機通訊流量。
ifconfig
12. tail命令
tail多個文件
tail不會自動遞歸查找目錄,因此必須可使用文件名的正則匹配,同時指定多個文件。
11. 顯示目錄信息
ls -ld dir
10. grep命令
10.6 行數
格式:grep -c
功能:輸出匹配的總行數
示例:
10.5 反選
格式:grep -v "pattern"
功能:選取全部不知足匹配模式的行
示例:
選取全部不是以S打頭的行、去除全部S打頭的行
10.4 目標字串
被搜索的字符串必須使用雙引號引發來
10.3 高亮
grep --color=auto
grep | less 高亮
grep --color=always | less -R
10.2 上下文
顯示下num行: grep -A num
顯示上num行: grep -B num
顯示上下num行: grep -C num
10.1 字符
△ 特殊字符
特殊字符 轉 文本字符:加反斜線「\」
如下字符在grep中做爲特殊字符:
方括號 「[]」
雙引號 「""」
點號 「.」
感嘆號 「!」
△ 文本字符
文本字符 轉 特殊字符:加選項「-E」
如下字符在grep中爲普通文本字符
管道符號 「|」
小括號 「()」
大括號 「{}」
示例:
欲匹配IP以17.188開始,端口爲443的地址,標準格式爲
8. PATH 環境變量
查看:echo $PATH
做用:決定了系統將到哪些目錄尋找可執行程序
示例:將本身編譯生成的,輸出「hello world」的可執行程序main,放到/usr/local/bin目錄下。則在任何目錄下執行"main"命令,便可獲得"hello world"。
7. 更改文件全部權
chown uid:gid file
6. 查看符號連接的指向
readlink -f name
5. du命令
格式:du「options」「files」
功能:查看文件大小
選項及參數:
◇ -0:以字節0分隔輸出,而不是換行符;
◇ -B「SIZE」:指定輸出單位,例如:'-BM' 以MB輸出結果;
-b:指定單位爲byte,等價於 '-B 1',結果無單位;
-k:指定單位爲KB,等價於 '-B K',結果帶單位K;
-m:指定單位爲MB,等價於 '-B M',結果帶單位M;
示例:
以MB爲單位顯示文件:
du -sBM file
◇ -h:以可視化格式顯示大小,即根據文件實際大小智能選擇單位B,K,M,結果帶單位;
◇ -s:顯示每一個參數的總大小;
示例:
顯示當前目錄的總大小:
du -sh .
顯示當前目錄下各文件及目錄的大小:
du -sh *
◇ -t「SIZE」:SIZE > 0,顯示大於「SIZE」的全部文件;SIZE < 0,顯示小於「SIZE」的全部文件。「SIZE」必須帶單位
示例:
顯示當前目錄下大於100M的全部文件:
du -sBM -t 100M *
顯示當前目錄下大於100M且小於300M的全部文件:
du -sBM -t 100M * | awk '{print $2}' | xargs du -sBM -t -300M
◇ --time:顯示每一個參數文件的最後內容修改時間,若參數爲目錄,則爲目錄中文件及子目錄的最後內容修改時間;
◇ --time=WORD:顯示每一個參數文件的最後時間,WORD取值爲{atime | ctime},分別對應{最後訪問時間 | 最後狀態修改時間};
示例:
顯示當前目錄下的文件大小及最後內容修改時間:
du -sBM --time * | head -3
◇ --exclude=PATTERN:排除匹配PATTERN的文件
說明:
PATTERN是shell模式,不是正則表達式。
在shell模式中,「?」匹配任意一個字符;「*」匹配任意字符串,包括空字符串。
所以,「*.o」能夠匹配任意以「.o」結尾的文件,以及文件「.o」
示例:
顯示當前目錄下文件大小,排除「.o」結尾的文件:
du -sBM --exclude=*.o * | head -3
4. 查看軟件版本
rpm -qf /path/name
示例
rpm -aq | grep name
示例
3. 正則表達式
.
用來匹配除換行符以外的任意單個字符,不能沒有
例如:l.h,要求l和h之間至少存在一個字符,且不能爲換行符
*
修飾前導字符,代表前導字符能夠出現0次或任意屢次
例如:a*,匹配0個或多個字符a,即從空字符到aaa....
.*
匹配任意字符
+
修飾前導字符,表示前導字符出現0次或任意屢次
例如:a+,匹配1個或多個字符a,即從a到aaa....
^
表明行首
例如:^love,匹配以love開頭的行
$
表明行尾
例如:love$,匹配以love結尾的行
{}
修飾前導字符,表示前導字符出現指定次數
例如:
a{3},匹配三個a,即aaa
a{2,},匹配至少兩個a,即從aa到aaa....
a{4, 6},匹配四到六個a,即從aaaa到aaaaaa
高級:
[0-9]{4},匹配任意四個數字
[a-z]{2, 3},匹配2到3個小寫字母
[]
匹配方括號中的字符的任意一個
例如:
[st],匹配s或t
[13],匹配1或3
[0-9a-zA-z],匹配任意數字或字母,不管大小寫
()
將部份內容組成一個單位
例如:f(oo | ee | rien)d,匹配或food或feed或friend
可使用grep命令驗證正則表達式,例如
cat txt | grep -E 「a{2, 3}」
cat txt | grep -E 「f(oo|ee|rien)d」
參數-E表示使用擴展正則表達式,不然{}()|在grep中均爲文本字符,不會做爲特殊字符進行區別對待。
2. 查看文件修改時間
stat filename
1. 進程
1.12 實際用戶ID和有效用戶ID
查看進程的實際用戶ID和有效用戶ID:
ps -e -o ruid,euid
ps -e -o ruser,euser
示例:
1.11 終端
查看進程所屬終端
ps -o tty -p 「Pid」
示例:
說明:
①終端「pts/N」對應的設備文件爲「/dev/pts/N」
②特定終端下的進程,標準輸入讀自終端設備文件,標準輸出和標準錯誤寫出至終端設備文件,即
進程「server」從文件描述符「0」(即STDIN_FILENO)讀,即從文件「/dev/pts/2」讀
進程「server」寫到文件描述符「1」(即STDOUT_FILENO)和文件描述符「2」(即STDERR_FILENO),即寫到文件「/dev/pts/2」
1.10 查看線程數
命令:ll /proc/pid/task | wc -l
說明:進程信息存放在/proc/pid,pid即爲進程號;task目錄存放全部線程,目錄中的每個文件對應一個線程
示例:
1.9 查看打開句柄數
命令:ll /proc/pid/fd | wc -l
說明:進程信息存放在/proc/pid,pid即爲進程號;fd目錄存放已打開的全部文件句柄,目錄中的每個文件對應一個句柄
示例:
1.8 當前工做目錄
進程的啓動目錄即進程的當前工做目錄,與程序文件所在目錄無關。
即在哪一個目錄下運行的程序,進程的當前工做目錄就是哪一個目錄。
查看進程的當前工做目錄
ll /proc/pid/cwd
示例:
sh腳本內容是,打印當前目錄信息
在/home/rongxj目錄下執行sh,結果爲
進到/home/rongxj/shell目錄下執行sh,結果爲
1.7 查看進程內存
ps -e -o pid,cmd,sz,rsz,vsz
sz, rsz, vsz單位爲KB。awk中除以1024,轉化爲M。
rsz爲實際內存大小,反映進程實際內存使用量,參考價值較高。
1.6 查看進程組ID
標準格式:ps -e -o pid,ppid,pgid,cmd | grep pattern
ps -efj
ps -e -o pgid,cmd
查看main1 main2 main3的進程組ID:ps -efj | grep main* 或者 ps -e -o pgid,cmd | grep main*
1.5 查看進程使用的動態連接庫
ldd 可執行文件名
1.4 查看進程啓動時間
pgrep xxx | xargs ps -o lstart,cmd -p
ps -p PID -o lstart
1.3 查看進程的啓動路徑
命令:ll /proc/pid/cwd
示例:
1.2 查看進程的可執行文件路徑
命令:ll /proc/pid/exe
示例:
1.1 查看進程的CPU、內存
top -p 進程號 -d n
-p:只顯示指定進程的信息
-d:每n秒刷新一次
例如:
執行top -p 5287 -d 1,結果以下
設置core文件的名稱:
echo "core.%e.%p" > /proc/sys/kernel/core_pattern
即時生效,直至下次系統重啓失效
%e:生成core的可執行文件名;%p:生成core的進程id