Linux操做手冊

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 

相關文章
相關標籤/搜索