Linux操作系統(tǒng)--常用命令(十六)

一、kill 命令

Linux kill命令用于刪除執(zhí)行中的程序或工作。

信號編號 信號名 含義
0 EXIT 程序退出時收到該信息。
1 HUP 掛掉電話線或終端連接的掛起信號,這個信號也會造成某些進程在沒有終止的情況下重新初始化。
2 INT 表示結(jié)束進程,但并不是強制性的,常用的 "Ctrl+C" 組合鍵發(fā)出就是一個 kill -2 的信號。
3 QUIT 退出。
4 ILL 非法指令(ANSI)
5 TRAP 跟蹤陷阱(POSIX)
6 IOT IOT 陷阱(4.2 BSD)
7 BUS 總線錯誤 (4.2 BSD)
8 FPE 浮點異常(ANSI)
9 KILL 殺死進程,即強制結(jié)束進程。
10 USR1 用戶定義信號1(POSIX)
11 SEGV 無效的內(nèi)存段訪問(ANSI)。
12 USR2 用戶定義信號2(POSIX)
13 PIPE 寫在沒有讀卡器的管道上,管道破裂(posix)
14 ALRM 鬧鐘(POSIX)
15 TERM 正常結(jié)束進程,是 kill 命令的默認信號。
16 STKFLT Linux堆棧錯誤
17 CHLD 子進程已停止或退出,已更改(POSIX)
18 CONT 如果停止,則繼續(xù)執(zhí)行(posix)
19 STOP 停止執(zhí)行(無法捕獲或忽略)(POSIX)
20 TSTP 終端停止信號(POSIX)
21 TTIN 試圖從tty(posix)讀取的后臺進程
22 TTOU 試圖寫入的后臺進程,到tty(posix)
23 URG Urgent condition on socket (4.2 BSD)
24 XCPU 超過CPU限制(4.2 BSD)
25 XFSZ 超出文件大小限制(4.2 bsd)
26 VTALRM 虛擬鬧鐘(4.2 BSD)
27 VTALRM 仿形鬧鐘(4.2 BSD)
28 WINCH 窗尺寸變化(4.3 BSD,sun)
29 GIO 可以進行I/O操作(4.2 BSD)
30 PWR 電源故障重啟

執(zhí)行kill(不加 -* 默認kill -15)命令,系統(tǒng)會發(fā)送一個SIGTERM信號給對應(yīng)的程序。當(dāng)程序接收到該signal信號后,將會發(fā)生以下事情:

  1. 程序立刻停止
  2. 當(dāng)程序釋放相應(yīng)資源后再停止
  3. 程序可能仍然繼續(xù)運行
    大部分程序接收到SIGTERM信號后,會先釋放自己的資源,然后再停止。但是也有程序可能接收信號后,做一些其他的事情(如果程序正在等待IO,可能就不會立馬做出響應(yīng)),也就是說,SIGTERM多半是會被阻塞的。

kill -9
系統(tǒng)給對應(yīng)程序發(fā)送的信號是SIGKILL,即exit。exit信號不會被系統(tǒng)阻塞,所以kill -9能順利殺掉進程。
在使用 kill -9 前,應(yīng)該先使用 kill -15,給目標進程一個清理善后工作的機會。如果沒有,可能會留下一些不完整的文件或狀態(tài),從而影響服務(wù)的再次啟動。

二、AWK

awk是以文件的一行為處理單位的。awk每接收文件的一行,然后執(zhí)行相應(yīng)的命令,來處理文本。
默認使用空格作為分隔符。

 awk   '{ action }'   {filenames}
 awk   '{ pattern + action }'   {filenames}
 awk  -F  '分隔符' { action } 

變量

$ + 數(shù)字 :表示第幾個字段,$1 ,$2 表示第 1 ,2 個字段,
NF :表示當(dāng)前行有多少個字段,因此$NF就代表最后一個字段,$(NF-1)代表倒數(shù)第二個字段。
NR 表示當(dāng)前處理的是第幾行
FILENAME:當(dāng)前文件名
FS:字段分隔符,默認是空格和制表符。
RS:行分隔符,用于分割每一行,默認是換行符。
OFS:輸出字段的分隔符,用于打印時分隔字段,默認為空格。
ORS:輸出記錄的分隔符,用于打印時分隔記錄,默認為換行符。
OFMT:數(shù)字輸出的格式,默認為%.6g。

函數(shù)

print 和 printf
  awk中同時提供了print和printf兩種打印輸出的函數(shù)。
  print函數(shù),參數(shù)可以是變量、數(shù)值或者字符串。字符串必須用雙引號引用,參數(shù)用逗號分隔。如果沒有逗號,參數(shù)就串聯(lián)在一起而無法區(qū)分。這里,逗號的作用與輸出文件的分隔符的作用是一樣的,只是后者是空格而已。
  printf函數(shù),其用法和c語言中printf基本相似,可以格式化字符串,輸出復(fù)雜時,printf更加好用,代碼更易懂。

其他函數(shù)
tolower():字符轉(zhuǎn)為小寫。
length():返回字符串長度。
substr():返回子字符串。
sin():正弦。
cos():余弦。
sqrt():平方根。
rand():隨機數(shù)。

示例:

顯示最近登錄的5個帳號:
[root@localhost workspace]# last -n 5
root     pts/1        192.168.77.1     Fri Oct 11 10:14   still logged in   
root     pts/0        192.168.77.1     Fri Oct 11 08:30   still logged in   
reboot   system boot  3.10.0-514.el7.x Fri Oct 11 08:21 - 13:24  (05:02)    
root     pts/0        192.168.77.1     Thu Oct 10 09:06 - 14:37  (05:31)    
reboot   system boot  3.10.0-514.el7.x Thu Oct 10 09:05 - 13:24 (1+04:18)   

wtmp begins Wed Sep  4 19:31:26 2019
# 只是顯示最近登錄的5個帳號
[root@localhost workspace]# last -n 5 | awk  '{print $1}'
root
root
reboot
root
reboot

wtmp


awk工作流程是這樣的:讀入有'\n'換行符分割的一條記錄,然后將記錄按指定的域分隔符劃分域,填充域,0則表示所有域,1表示第一個域,n表示第n個域。默認域分隔符是"空白鍵" 或 "[tab]鍵",所以1表示登錄用戶,$3表示登錄用戶ip,以此類推。

NR,表示awk開始執(zhí)行程序后所讀取的數(shù)據(jù)行數(shù)。
FNR,與NR功用類似,不同的是awk每打開一個新文件,FNR便從0重新累計。

$NF表示最后一個列(field),即輸出最后一個字段的內(nèi)容

三、 tail 命令

tail 命令可用于查看文件的內(nèi)容,有一個常用的參數(shù) -f 常用于查閱正在改變的日志文件。
tail -f filename 會把 filename 文件里的最尾部的內(nèi)容顯示在屏幕上,并且不斷刷新,只要 filename 更新就可以看到最新的文件內(nèi)容。
參數(shù):

-f 循環(huán)讀取
-q 不顯示處理信息
-v 顯示詳細的處理信息
-c<數(shù)目> 顯示的字節(jié)數(shù)
-n<行數(shù)> 顯示文件的尾部 n 行內(nèi)容
--pid=PID 與-f合用,表示在進程ID,PID死掉之后結(jié)束
-q, --quiet, --silent 從不輸出給出文件名的首部
-s, --sleep-interval=S 與-f合用,表示在每次反復(fù)的間隔休眠S秒

四、linux shell中0,?,$!等的特殊用法

變量說明:

$$
Shell本身的PID(ProcessID)
$!
Shell最后運行的后臺Process的PID
$?
最后運行的命令的結(jié)束代碼(返回值)
$-
使用Set命令設(shè)定的Flag一覽
$*
所有參數(shù)列表。如"$*"用「"」括起來的情況、以"$1 $2 … $n"的形式輸出所有參數(shù)。
$@
所有參數(shù)列表。如"$@"用「"」括起來的情況、以"$1" "$2" … "$n" 的形式輸出所有參數(shù)。
$#
添加到Shell的參數(shù)個數(shù)
$0
Shell本身的文件名
$1~$n
添加到Shell的各參數(shù)值。$1是第1參數(shù)、$2是第2參數(shù)…。

簡單的腳本測試:

#!是一個特殊符號,/bin/sh是用來解釋該腳本的的shell路徑
#!/bin/sh指該腳本使用/bin/sh來執(zhí)行

創(chuàng)建shell文件:

# touch variable
# vi variable

腳本內(nèi)容如下

#!/bin/sh
echo "number:$#"
echo "scname:$0"
echo "first :$1"
echo "second:$2"
echo "argume:$@"

保存退出
賦予腳本執(zhí)行權(quán)限

# chmod +x variable

執(zhí)行腳本

# ./variable aa bb
number:2
scname:./variable
first: aa
second:bb
argume:aa bb

通過顯示結(jié)果可以看到:

$# 是傳給腳本的參數(shù)個數(shù)
$0 是腳本本身的名字
$1 是傳遞給該shell腳本的第一個參數(shù)
$2 是傳遞給該shell腳本的第二個參數(shù)
$@ 是傳給腳本的所有參數(shù)的列表

五、xargs 命令

xargs 是給命令傳遞參數(shù)的一個過濾器,也是組合多個命令的一個工具。
xargs 可以將管道或標準輸入(stdin)數(shù)據(jù)轉(zhuǎn)換成命令行參數(shù),也能夠從文件的輸出中讀取數(shù)據(jù)。
xargs 也可以將單行或多行文本輸入轉(zhuǎn)換為其他格式,例如多行變單行,單行變多行。
xargs 默認的命令是 echo,這意味著通過管道傳遞給 xargs 的輸入將會包含換行和空白,不過通過 xargs 的處理,換行和空白將被空格取代。
xargs 是一個強有力的命令,它能夠捕獲一個命令的輸出,然后傳遞給另外一個命令。
之所以能用到這個命令,關(guān)鍵是由于很多命令不支持|管道來傳遞參數(shù),而日常工作中有有這個必要,所以就有了 xargs 命令,例如:

find /sbin -perm +700 |ls -l       #這個命令是錯誤的
find /sbin -perm +700 |xargs ls -l   #這樣才是正確的

xargs 一般是和管道一起使用。
命令格式:

somecommand |xargs -item  command
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. 最普通的命令 最普通、簡單的命令,平時肯定用過很多,但是有些非常有用,但平時不多用的,本次列出來,如下: s...
    求索77閱讀 516評論 0 0
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,737評論 0 5
  • 命令行的藝術(shù) 前言 基礎(chǔ) 日常使用 文件及數(shù)據(jù)處理 系統(tǒng)調(diào)試 單行腳本 冷門但有用 僅限 OS X 系統(tǒng) 僅限 W...
    進擊的諾基亞閱讀 3,937評論 0 19
  • 一、背景 ??工作中經(jīng)常會接觸到xargs命令,特別是在別人寫的腳本里面也經(jīng)常會遇到,但是卻很容易與管道搞混淆,本...
    Carl_TSNE閱讀 297評論 0 0
  • 進入帶空格的文件或者文件夾 Linux文件權(quán)限詳解 文件和目錄權(quán)限概述 在linux中的每一個文件或目錄都包含有訪...
    annkee閱讀 2,803評論 0 4

友情鏈接更多精彩內(nèi)容