linux知識點總結


一、Linux樹狀目錄結構:

 

二、linux查詢某個程序的某個進程的id?

  PID 代表進程標識號process identification,它在大多數操作系統內核(如 Linux、Unix、macOS 和 Windows)中使用。它是在操作系統中創建時自動分配給每個進程的唯一標識號。一個進程是一個正在運行的程序實例。

  除了 init 進程外,其他所有的進程 ID 每次都會改變,因為 init 始終是系統上的第一個進程,並且是所有其他進程的父進程。它的 PID 是 1。PID 默認的最大值是 32768(2^15)。可以在你的系統上運行 cat /proc/sys/kernel/pid_max 來驗證。在 32 位系統上,32768 是最大值,但是我們可以在 64 位系統上將其設置為最大 2^22(約 4 百萬)內的任何值。

  為什么需要這么多的 PID?因為我們不能立即重用 PID。另外為了防止可能的錯誤。

  系統正在運行的進程的 PID 可以通過使用 pidof、pgrep、ps 和 pstree 命令找到。

  方法 1:使用 pidof 命令

  pidof 用於查找正在運行的程序的進程 ID。它在標准輸出上打印這些 id。為了演示,我們將在 Debian 9(stretch)系統中找出 Apache2 的進程 ID。

# pidof apache2
3754 2594 2365 2364 2363 2362 2361

  從上面的輸出中,你可能會遇到難以識別進程 ID 的問題,因為它通過進程名稱顯示了所有的 PID(包括父進程和子進程)。因此,我們需要找出父 PID(PPID),這是我們要查找的。它可能是第一個數字。在本例中,它是 3754,並按降序排列。

  方法 2:使用 pgrep 命令

  pgrep 遍歷當前正在運行的進程,並將符合選擇條件的進程 ID 列到標准輸出中。

# pgrep apache2
2361
2362
2363
2364
2365
2594
3754

  這也與上面的輸出類似,但是它將結果從小到大排序,這清楚地說明父 PID 是最后一個。在本例中,它是 3754

  注意: 如果你有多個進程的進程 ID,那么在使用 pidof 和 pgrep 識別父進程 ID 時就可能不會很順利。

  方法 3:使用 pstree 命令

  pstree 將運行的進程顯示為一棵樹。樹的根是某個 pid,如果省略了 pid 參數,那么就是 init。如果在 pstree命令中指定了用戶名,則顯示相應用戶擁有的所有進程。

  pstree 會將相同的分支放在方括號中,並添加重復計數的前綴來可視化地合並到一起。

# pstree -p | grep "apache2"
 |- apache2(3754) -|-apache2(2361)
 | |-apache2(2362)
 | |-apache2(2363)
 | |-apache2(2364)
 | |-apache2(2365)
 | |-apache2(2594)

  要單獨獲取父進程,請使用以下格式。

# pstree -p | grep "apache2" | head -1
 |- apache2(3754) -|-apache2(2361)

  pstree 命令非常簡單,因為它分別隔離了父進程和子進程,但這在使用 pidof 和 pgrep 時命令不容易做到。

  方法 4:使用 ps 命令

  ps 顯示活動進程的選擇信息。它顯示進程 ID(pid=PID)、與進程關聯的終端(tname=TTY)、以 [DD-]hh:mm:ss 格式(time=TIME)顯示的累計 CPU 時間、以及執行名(ucmd = CMD)。輸出默認是未排序的。

# ps aux | grep "apache2"
www-data 2361 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start
www-data 2362 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start
www-data 2363 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start
www-data 2364 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start
www-data 2365 0.0 0.4 302652 8400 ? S 06:25 0:00 /usr/sbin/apache2 -k start
www-data 2594 0.0 0.4 302652 8400 ? S 06:55 0:00 /usr/sbin/apache2 -k start
root 3754 0.0 1.4 302580 29324 ? Ss Dec11 0:23 /usr/sbin/apache2 -k start
root 5648 0.0 0.0 12784 940 pts/0 S+ 21:32 0:00 grep apache2

  從上面的輸出中,我們可以根據進程的啟動日期輕松地識別父進程 ID(PPID)。在此例中,apache2 啟動於 Dec 11,它是父進程,其他的是子進程。apache2 的 PID 是 3754

三、生產上線常用Linux命令:

1、ls -rlt :

  ls命令用來顯示目標列表,在Linux中是使用率較高的命令。ls命令的輸出信息可以進行彩色加亮顯示,以分區不同類型的文件。

  -r:以文件名反序排列並輸出目錄內容列表;

  -l:以長格式顯示目錄下的內容列表。輸出的信息從左到右依次包括文件名,文件類型、權限模式、硬連接數、所有者、組、文件大小和文件的最后修改時間等;

  -s:顯示文件和目錄的大小,以區塊為單位;

2、tar :

  語法:tar(選項)(參數)

  選項:

    -x或--extract或--get:從備份文件中還原文件;

    -c或--create:建立新的備份文件;

    -v:顯示操作過程;

    -f<備份文件>或--file=<備份文件>:指定備份文件;

    -t或--list:列出備份文件的內容;

 

  參數:文件或目錄:指定要打包的文件或目錄列表。

  實例:

    tar -cvf 打包文件名 原文件名 : 打包文件

    tar -xvf 打包文件名 : 解壓文件

3、cp :

  語法:cp(選項)(參數)

  選項:-R/r:遞歸處理,將指定目錄下的所有文件與子目錄一並處理;

  實例:

    cp ../mary/homework/assign .  將指定文件復制到當前目錄下;

    cp file /usr/men/tmp/file1  將文件file復制到目錄/usr/men/tmp下,並改名為file1;

    cp -r /usr/men /usr/zh  將目錄/usr/men下的所有文件及其子目錄復制到目錄/usr/zh中;

4、mv :

  mv命令可以用來將源文件移至一個目標文件中,或將一組文件移至一個目標目錄中。源文件被移至目標文件有兩種不同的結果:

  1. 如果目標文件是到某一目錄文件的路徑,源文件會被移到此目錄下,且文件名不變。
  2. 如果目標文件不是目錄文件,則源文件名(只能有一個)會變為此目標文件名,並覆蓋己存在的同名文件。如果源文件和目標文件在同一個目錄下,mv的作用就是改文件名。當目標文件是目錄文件時,源文件或目錄參數可以有多個,則所有的源文件都會被移至目標文件中。所有移到該目錄下的文件都將保留以前的文件名。

  注意事項:mv與cp的結果不同,mv好像文件“搬家”,文件個數並未增加。而cp對文件進行復制,文件個數增加了。

  語法:mv(選項)(參數)

  實例:

    mv /usr/men/* .  將目錄/usr/men中的所有文件移到當前目錄(用.表示)中;

    mv ex3 new1  將文件ex3改名為new1;

5、cat :

  cat命令連接文件並打印到標准輸出設備上,cat經常用來顯示文件的內容,類似於下的type命令。

  注意:當文件較大時,文本在屏幕上迅速閃過(滾屏),用戶往往看不清所顯示的內容。因此,一般用more等命令分屏顯示。為了控制滾屏,可以按Ctrl+S鍵,停止滾屏;按Ctrl+Q鍵可以恢復滾屏。按Ctrl+C(中斷)鍵可以終止該命令的執行,並且返回Shell提示符狀態。

  語法:cat(選項)(參數)

  選項:

    -n或-number:有1開始對所有輸出的行數編號;

    -b或--number-nonblank:和-n相似,只不過對於空白行不編號;

    -s或--squeeze-blank:當遇到有連續兩行以上的空白行,就代換為一行的空白行;

    -A:顯示不可打印字符,行尾顯示“$”;

  實例:

    cat m1 (在屏幕上顯示文件ml的內容)

    cat m1 m2 (同時顯示文件ml和m2的內容)

    cat m1 m2 > file (將文件ml和m2合並后放入文件file中)

6、pwd :

  以絕對路徑的方式顯示用戶當前工作目錄。命令將當前目錄的全路徑名稱(從根目錄)寫入標准輸出。全部目錄使用/分隔。第一個/表示根目錄,最后一個目錄是當前目錄。執行pwd命令可立刻得知您目前所在的工作目錄的絕對路徑名稱。

  語法:pwd(選項)

7、lsblk :

   查看所有設備掛載情況   (諧音:樓上暴力狂)

8、df :

  磁盤情況查詢
    df -h                查詢系統整體磁盤使用情況
    df -h /目錄       查詢指定目錄的磁盤占用情況,默認為當前。

9、ps :

  用於報告當前系統的進程狀態。可以搭配kill指令隨時中斷、刪除不必要的程序。

  ps命令是最基本同時也是非常強大的進程查看命令,使用該命令可以確定有哪些進程正在運行和運行的狀態、進程是否結束、進程有沒有僵死、哪些進程占用了過多的資源等等,總之大部分信息都是可以通過執行該命令得到的。

  顯示的信息選項:
    pid        進程識別號
    TTY        終端機號
    TIME      此進程所消CPU時間
    CMD      正在執行的命令或進程名
  -A:顯示所有程序。
  -e:此選項的效果和指定"A"選項相同。
  -f:顯示UID,PPIP,C與STIME欄位。
  ps -a        顯示當前終端的所有進程信息
  ps -u        以用戶的格式顯示進程信息
  ps -x        顯示后台進程運行的參數
  ps -aux|grep xxx  用於查看tomcat占用資源情況
    %CPU:進程占用CPU的百分比
    %NEM:進程占用物理內存的百分比
    VSZ:    進程占用的虛擬內存大小(單位:KB)
    RSS:    進程占用的物理內存大小(單位:KB)
  ps -ef|grep xxx  用於kill對應的進程
    PID:    進程ID
    PPID:父進程ID
10、vmstat :

  vmstat命令的含義為顯示虛擬內存狀態(“Viryual Memor Statics”),但是它可以報告關於進程、內存、I/O等系統整體運行狀態。

  語法:vmstat(選項)(參數)

  選項:

  -a:顯示活動內頁;
  -f:顯示啟動后創建的進程總數;
  -m:顯示slab信息;
  -n:頭信息僅顯示一次;
  -s:以表格方式顯示事件計數器和內存狀態;
  -d:報告磁盤狀態;
  -p:顯示指定的硬盤分區狀態;
  -S:輸出信息的單位。

參數

  • 事件間隔:狀態信息刷新的時間間隔;
  • 次數:顯示報告的次數。

實例

vmstat 3
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st 0 0 320 42188 167332 1534368 0 0 4 7 1 0 0 0 99 0 0 0 0 320 42188 167332 1534392 0 0 0 0 1002 39 0 0 100 0 0 0 0 320 42188 167336 1534392 0 0 0 19 1002 44 0 0 100 0 0 0 0 320 42188 167336 1534392 0 0 0 0 1002 41 0 0 100 0 0 0 0 320 42188 167336 1534392 0 0 0 0 1002 41 0 0 100 0 0 

字段說明:

Procs(進程)

  • r: 運行隊列中進程數量,這個值也可以判斷是否需要增加CPU。(長期大於1)
  • b: 等待IO的進程數量。

Memory(內存)

  • swpd: 使用虛擬內存大小,如果swpd的值不為0,但是SI,SO的值長期為0,這種情況不會影響系統性能。
  • free: 空閑物理內存大小。
  • buff: 用作緩沖的內存大小。
  • cache: 用作緩存的內存大小,如果cache的值大的時候,說明cache處的文件數多,如果頻繁訪問到的文件都能被cache處,那么磁盤的讀IO bi會非常小。

Swap

  • si: 每秒從交換區寫到內存的大小,由磁盤調入內存。
  • so: 每秒寫入交換區的內存大小,由內存調入磁盤。

注意:內存夠用的時候,這2個值都是0,如果這2個值長期大於0時,系統性能會受到影響,磁盤IO和CPU資源都會被消耗。有些朋友看到空閑內存(free)很少的或接近於0時,就認為內存不夠用了,不能光看這一點,還要結合si和so,如果free很少,但是si和so也很少(大多時候是0),那么不用擔心,系統性能這時不會受到影響的。

IO(現在的Linux版本塊的大小為1kb)

  • bi: 每秒讀取的塊數
  • bo: 每秒寫入的塊數

注意:隨機磁盤讀寫的時候,這2個值越大(如超出1024k),能看到CPU在IO等待的值也會越大。

system(系統)

  • in: 每秒中斷數,包括時鍾中斷。
  • cs: 每秒上下文切換數。

注意:上面2個值越大,會看到由內核消耗的CPU時間會越大。

CPU(以百分比表示)

  • us: 用戶進程執行時間百分比(user time)

us的值比較高時,說明用戶進程消耗的CPU時間多,但是如果長期超50%的使用,那么我們就該考慮優化程序算法或者進行加速。

  • sy: 內核系統進程執行時間百分比(system time)

sy的值高時,說明系統內核消耗的CPU資源多,這並不是良性表現,我們應該檢查原因。

  • wa: IO等待時間百分比

wa的值高時,說明IO等待比較嚴重,這可能由於磁盤大量作隨機訪問造成,也有可能磁盤出現瓶頸(塊操作)。

  • id: 空閑時間百分比

11、free :

  free命令可以顯示當前系統未使用的和已使用的內存數目,還可以顯示被內核使用的內存緩沖區。

  語法:free(選項)

  選項:

  -b:以Byte為單位顯示內存使用情況;
  -k:以KB為單位顯示內存使用情況;
  -m:以MB為單位顯示內存使用情況;
  -o:不顯示緩沖區調節列;
  -s<間隔秒數>:持續觀察內存使用狀況;
  -t:顯示內存總和列;
  -V:顯示版本信息。

  實例:free -m

             total       used       free     shared    buffers     cached
Mem:          2016       1973         42          0        163       1497
-/+ buffers/cache:        312       1703
Swap:         4094          0       4094

第一部分Mem行解釋:

total:內存總數;
used:已經使用的內存數;
free:空閑的內存數;
shared:當前已經廢棄不用;
buffers Buffer:緩存內存數;
cached Page:緩存內存數。

關系:total = used + free

第二部分(-/+ buffers/cache)解釋:

(-buffers/cache) used內存數:第一部分Mem行中的 used – buffers – cached
(+buffers/cache) free內存數: 第一部分Mem行中的 free + buffers + cached

可見-buffers/cache反映的是被程序實實在在吃掉的內存,而+buffers/cache反映的是可以挪用的內存總數。

第三部分是指交換分區。

12、top :

  top命令可以實時動態地查看系統的整體運行情況,是一個綜合了多方信息監測系統性能和運行信息的實用工具。通過top命令所提供的互動式界面,用熱鍵可以管理。

  語法:top(選項)

  選項:

  -b:以批處理模式操作;
  -c:顯示完整的治命令;
  -d:屏幕刷新間隔時間;
  -I:忽略失效過程;
  -s:保密模式;
  -S:累積模式;
  -i<時間>:設置間隔時間;
  -u<用戶名>:指定用戶名;
  -p<進程號>:指定進程;
  -n<次數>:循環顯示的次數。

  top交互命令

  在top命令執行過程中可以使用的一些交互命令。這些命令都是單字母的,如果在命令行中使用了-s選項, 其中一些命令可能會被屏蔽。

  h:顯示幫助畫面,給出一些簡短的命令總結說明;
  k:終止一個進程;
  i:忽略閑置和僵死進程,這是一個開關式命令;
  q:退出程序;
  r:重新安排一個進程的優先級別;
  S:切換到累計模式;
  s:改變兩次刷新之間的延遲時間(單位為s),如果有小數,就換算成ms。輸入0值則系統將不斷刷新,默認值是5s;
  f或者F:從當前顯示中添加或者刪除項目;
  o或者O:改變顯示項目的順序;
  l:切換顯示平均負載和啟動時間信息;
  m:切換顯示內存信息;
  t:切換顯示進程和CPU狀態信息;
  c:切換顯示命令名稱和完整命令行;
  M:根據駐留內存大小進行排序;
  P:根據CPU使用百分比大小進行排序;
  T:根據時間/累計時間進行排序;
  w:將當前設置寫入~/.toprc文件中。

  實例:

  top - 09:44:56 up 16 days, 21:23,  1 user,  load average: 9.59, 4.75, 1.92
  Tasks: 145 total,   2 running, 143 sleeping,   0 stopped,   0 zombie
  Cpu(s): 99.8%us,  0.1%sy,  0.0%ni,  0.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
  Mem:   4147888k total,  2493092k used,  1654796k free, 158188k buffers   Swap: 5144568k total, 56k used, 5144512k free, 2013180k cached

  解釋:

  • top - 09:44:56[當前系統時間],
  • 16 days[系統已經運行了16天],
  • 1 user[個用戶當前登錄],
  • load average: 9.59, 4.75, 1.92[系統負載,即任務隊列的平均長度]
  • Tasks: 145 total[總進程數],
  • 2 running[正在運行的進程數],
  • 143 sleeping[睡眠的進程數],
  • 0 stopped[停止的進程數],
  • 0 zombie[凍結進程數],
  • Cpu(s): 99.8%us[用戶空間占用CPU百分比],
  • 0.1%sy[內核空間占用CPU百分比],
  • 0.0%ni[用戶進程空間內改變過優先級的進程占用CPU百分比],
  • 0.2%id[空閑CPU百分比], 0.0%wa[等待輸入輸出的CPU時間百分比],
  • 0.0%hi[],
  • 0.0%st[],
  • Mem: 4147888k total[物理內存總量],
  • 2493092k used[使用的物理內存總量],
  • 1654796k free[空閑內存總量],
  • 158188k buffers[用作內核緩存的內存量]
  • Swap:  5144568k total[交換區總量],
  • 56k used[使用的交換區總量],
  • 5144512k free[空閑交換區總量],
  • 2013180k cached[緩沖的交換區總量],

13、sudo :

  sudo命令用來以其他身份來執行命令,預設的身份為root。在/etc/sudoers中設置了可執行sudo指令的用戶。若其未經授權的用戶企圖使用sudo,則會發出警告的郵件給管理員。用戶使用sudo時,必須先輸入密碼,之后有5分鍾的有效期限,超過期限則必須重新輸入密碼。

  語法:sudo(選項)(參數)

  選項:

  -b:在后台執行指令;
  -h:顯示幫助;
  -H:將HOME環境變量設為新身份的HOME環境變量;
  -k:結束密碼的有效期限,也就是下次再執行sudo時便需要輸入密碼;。
  -l:列出目前用戶可執行與無法執行的指令;
  -p:改變詢問密碼的提示符號;
  -s<shell>:執行指定的shell;
  -u<用戶>:以指定的用戶作為新的身份。若不加上此參數,則預設以root作為新的身份;
  -v:延長密碼有效期限5分鍾;
  -V :顯示版本信息。

14、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"
  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
  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

15、wc :

  wc命令用來計算數字。利用wc指令我們可以計算文件的Byte數、字數或是列數,若不指定文件名稱,或是所給予的文件名為“-”,則wc指令會從標准輸入設備讀取數據。

  語法:wc(選項)(參數)

  選項:

  -c或--bytes或——chars:只顯示Bytes數;
  -l或——lines:只顯示列數;
  -w或——words:只顯示字數。

  參數:

    文件:需要統計的文件列表。

  實例:

    cat mytest.sql | grep ba_0001 | wc -l

其他:

  sudo su:切換到超級管理員
  cd /:回到當前系統的根目錄
  cd ~:回到當前用戶家目錄
  cd -:回到上一次所在目錄
  pwd:打印當前的工作目錄
  ls -l:查看當前目錄下所有文件
  ls -R:遞歸查看目錄里面的內容
  ls -F:選項會在顯示目錄條目時,在目錄后加一個/
  ls -ltr:逆序羅列最新修改過的文件
  VI : 進入編譯模式
  head -n 10 文件名:查看文件頭10行
  tail -n 10 文件名:查看文件后10行
  head -n 20 /etc/man.config | tail -n 10:顯示/etc/man.config的第11到20行
  tar -zcvf  XXX.tar.gz   n1.txt    n2.txt:壓縮文件
  tar -zxvf  XXX.tar.gz : 解壓文件
  rmdir:刪除空目錄
  mkdir:創建目錄
  touch:新建文件
  ps -aux:查看進程,然后再利用一個管道符號導向到grep去查找特定的進程 ,然后再對特定的進程進行操作。
  ps -ef:是以全格式顯示當前所有的進程
  ifconfig :查看IP地址信息(網絡配置類)
  fdisk -l | df -h:磁盤分區類
  top:系統整體性能評估
  vmstat:檢測是否存在CPU瓶頸
  free:檢測是否存在內存瓶頸
  iostat :檢測是否存在磁盤I/O瓶頸
  netstat :檢測是否存在網絡I/O瓶頸
  ps:可以查看進程以及進程中cpu的使用情況

面試題:

1、查詢Zookeeper服務是否啟動的三種方法?
         答: ① ps -ef | grep zookeeper
                    ps命令用於報告當前系統的進程狀態。
                    其中 -e:顯示所有程序。
                            -f:顯示UID,PPIP,C與STIME欄位。     
                            
                ② netstat -anp | grep 2181
                 netstat命令用來打印Linux中網絡系統的狀態信息,可讓你得知整個Linux系統的網絡情況。
                    其中 -a或--all:顯示所有連線中的Socket;
                            -n或--numeric:直接使用 ip地址,而不通過域名服務器;
                            -p或--programs:顯示正在使用Socket的程序識別碼和程序名稱;
                ③ lsof -i:2181
                    lsof命令用於查看你進程開打的文件,打開文件的進程,進程打開的端口(TCP、UDP)。找回/恢復刪除的文件。因為lsof命令需要訪問核心內存和各種文件,所以需要root用戶執行。
                    其中:-i<條件>:列出符合條件的進程。(4、6、協議、:端口、 @ ip
   
2、說出你日常常用的5個Linux命令?
        答:① ps -ef | grep -n zookeeper | grep -v grep | sort -nk2 | awk '{print $2}' 
grep -n zookeeper -n 在顯示符合范本樣式的那一列之前,標示出該列的編號。即該進程在進程列表中出現的行號。
grep -v grep -v反轉查找。即在列出的進程中去除含有關鍵字(第二個grep)之外的所有進程;
sort -nk2 -n:依照數值的大小排序;
           -k:依照第幾列數值進行操作;
sort -nrk2 -r:以相反的順序來排序;
awk '{print $2}' awk:一種處理文本文件的語言,是一個強大的文本分析工具。
                  print:格式化並輸出結果到標准輸出;
                  $:第幾列;
                ② ps -ef | grep -n zookeeper | grep -v grep | wc -l
其中:wc -l wc:即word count用來計算數字,關鍵字統計計數
                 -c或-bytes或-chars:只顯示Bytes數;
                 -l或-lines:只顯示列數;
                 -w或-words:只顯示字數;
                ③ ps -ef | grep -n zookeeper | grep -v grep | sort -nk2 | awk '{print $2}'  |  xargs kill -9
其中:xargs kill -9 xargs:給其它命令傳遞參數的一個過濾器,是組合多個命令的一個工具,即讀取左邊結果並將其作為參數傳入右邊命令中。
                   kill -9:第9種信號(sigkill)無條件終止進程。
                        HUP 1 終端斷線
                        INT 2 中斷(同 Ctrl + C)
                        QUIT 3 退出(同 Ctrl + \)
                        TERM 15 終止
                        KILL 9 強制終止
                        CONT 18 繼續(與STOP相反, fg/ bg命令)
                        STOP 19 暫停(同 Ctrl + Z)
3、日常工作常用技術的默認端口號?       
 答:① Tomcat:8080
        ② zookeeper:2181
        ③ MySQL
驅動:org.gjt.mm.mysql.Driver
URL:jdbc:mysql://<machine_name><:port>/dbname
注:machine_name:數據庫所在的機器的名稱,如果是本機則是127.0.0.1或者是localhost,如果是遠程連接,則是遠程的IP地址;
port:端口號,默認3306
4、Linux查看磁盤IO的幾種方法:
第一種:用 top 命令 中的cpu 信息觀察:

  top可以看到的cpu信息有:

  Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie

  Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si

  具體的解釋如下:

  Tasks: 29 total 進程總數

  1 running 正在運行的進程數

  28 sleeping 睡眠的進程數

  0 stopped 停止的進程數

  0 zombie 僵屍進程數

  Cpu(s):

  0.3% us 用戶空間占用CPU百分比

  1.0% sy 內核空間占用CPU百分比

  0.0% ni 用戶進程空間內改變過優先級的進程占用CPU百分比

  98.7% id 空閑CPU百分比

  0.0% wa 等待輸入輸出的CPU時間百分比

  0.0% hi

  0.0% si

  0.0% wa 的百分比可以大致的體現出當前的磁盤io請求是否頻繁。如果 wa的數量比較大,說明等待輸入輸出的的io比較多。

第二種:用vmstat:

  vmstat 命令報告關於線程、虛擬內存、磁盤、陷阱和 CPU 活動的統計信息。由 vmstat 命令生成的報告可以用於平衡系統負載活動。系統范圍內的這些統計信息(所有的處理器中)都計算出以百分比表示的平均值,或者計算其總和。

  輸入命令:

  vmstat 2 5

  如果發現等待的進程和處在非中斷睡眠狀態的進程數非常多,並且發送到塊設備的塊數和從塊設備接收到的塊數非常大,那就說明磁盤io比較多。

  vmstat參數解釋:

  Procs

  r: 等待運行的進程數 b: 處在非中斷睡眠狀態的進程數 w: 被交換出去的可運行的進程數。此數由 linux 計算得出,但 linux 並不耗盡交換空間

  Memory

  swpd: 虛擬內存使用情況,單位:KB

  free: 空閑的內存,單位KB

  buff: 被用來做為緩存的內存數,單位:KB

  Swap

  si: 從磁盤交換到內存的交換頁數量,單位:KB/秒

  so: 從內存交換到磁盤的交換頁數量,單位:KB/秒

  IO

  bi: 發送到塊設備的塊數,單位:塊/秒

  bo: 從塊設備接收到的塊數,單位:塊/秒

  System

  in: 每秒的中斷數,包括時鍾中斷

  cs: 每秒的環境(上下文)切換次數

  CPU

  按 CPU 的總使用百分比來顯示

  us: CPU 使用時間

  sy: CPU 系統使用時間

  id: 閑置時間

  准測

  更多vmstat使用信息

  第二種:用iostat

  安裝:

  Iostat 是 sysstat 工具集的一個工具,需要安裝。

  Centos的安裝方式是:

  yum install sysstat

  Ubuntu的安裝方式是:

  aptitude install sysstat

  使用:

  iostat -dx 顯示磁盤擴展信息

  root@fileapp:~# iostat -dx

  r/s 和 w/s 分別是每秒的讀操作和寫操作,而rKB/s 和wKB/s 列以每秒千字節為單位顯示了讀和寫的數據量

  如果這兩對數據值都很高的話說明磁盤io操作是很頻繁。

 

5、查看整機性能:
總-分-總
1 查看整機性能
    1.1    top    
    load average: 0.05, 0.05, 0.05
    負載均衡值
    3個值
    分別是1/5/15分鍾系統的平均負載
    三值相加/3 高於60%,系統 緊張資源
    
    1.2    能做不能說
    1.3    其它??
        zombie 高 越大系統越差
    1.4    id不是主鍵
        id = idle (空閑率)此值越高越好
    1.5    還有嗎?
    1.6    簡單版???-----》
    1.7    ctrl+c不用,用q = quit
2     整機性能的簡單命令
    uptime
3    cpu(包含但是不限於)
    vmstat -n 2 3
4    內存
    free -m
5    硬盤
    df -h
6    硬盤IO
    
*  tps    每秒鍾事務提交數
   qps    每秒鍾查詢數
   pv    pageView 頁面瀏覽數
others  文件權限        chmod 777
    網絡端口        
top+ uptime+vmstat+free+df+iostat+chmod
新知識
cat nginxerr.log |awk '{print$7}'|sort|uniq -dc|head -n 1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM