天天看點

Linux 指令筆記網絡檔案系統運維

文章目錄

  • 網絡
    • 檢視端口
    • 資訊
      • traceroute ip/域名
  • 檔案系統
    • 檔案夾
      • tree
  • 運維
    • 資訊查詢
      • whereis
      • type
      • which
      • locate
      • find
    • 程序
      • kill

網絡

檢視端口

netstat   -anp   |   grep  portno
// 顯示tcp,udp的端口和程序等相關情況
netstat -tunlp

ps -aux | grep tomcat

lsof -i
lsof -i:端口号
           

資訊

traceroute ip/域名

追蹤本機到目标位址需要經過哪些網絡裝置,并列印裝置 ip 位址。這個指令基于 icmp 協定。

不保證所有裝置都會傳回自己的 ip 位址

檔案系統

檔案夾

tree

以樹型顯示檔案夾結構

運維

資訊查詢

whereis

隻能用于搜尋程式名,而且隻搜尋二進制檔案(參數

-b

)、man 說明檔案(參數

-m

)和源代碼檔案(參數

-s

)。如果省略參數,則傳回所有資訊。

$ whereis vim
/usr/bin/vim
           

type

用來區分某個指令到底是由 shell 自帶的,還是由 shell 外部的獨立二進制檔案提供的。如果一個指令是外部指令,那麼使用

-p

參數,會顯示該指令的路徑,相當于

which

指令。

$ type tree
-bash: type: tree: not found
$ type vim
vim is /usr/bin/vim
           

which

查找指令是否存在,以及指令的存放位置在哪兒

locate

locate 指令不是實時查找,是以查找的結果不精确,但查找速度很快。因為它查找的不是目錄,而是一個資料庫(/var/lib/locatedb),這個資料庫中含有本地所有檔案資訊。Linux 系統自動建立這個資料庫,并且每天自動更新一次,是以使用locate 指令查不到最新變動過的檔案。為了避免這種情況,可以在使用 locate 之前,先使用

updatedb

指令,手動更新資料庫。

# 查找所有包含passwd的檔案,并且隻顯示前十個
$ locate -n 10 passwd
           

find

最常用和最強大的查找指令。它能做到實時查找,精确查找,但速度慢

程序

kill

  • 指令格式:
kill [參數] [程序号]
           
  • 指令功能:

發送指定的信号到相應程序。不指定型号将發送

SIGTERM

(15)終止指定程序。如果仍無法終止該程式可用

-KILL

參數,其發送的信号為

SIGKILL

(9) ,将強制結束程序,使用

ps

指令或者

jobs

指令可以檢視程序号。root使用者将影響使用者的程序,非 root 使用者隻能影響自己的程序。

  • 指令參數:
參數 含義
-l 信号,若果不加信号的編号參數,則使用

-l

參數會列出全部的信号名稱
-a 當處理目前程序時,不限制指令名和程序号的對應關系
-p 指定 kill 指令隻列印相關程序的程序号,而不發送任何信号
-s 指定發送信号
-u 指定使用者

注意:

1、

kill

指令可以帶信号号碼選項,也可以不帶。如果沒有信号号碼,kill 指令就會發出終止信号(15),這個信号可以被程序捕獲,使得程序在退出之前可以清理并釋放資源。也可以用 kill 向程序發送特定的信号。例如:

kill -2 123

。它的效果等同于在前台運作 PID 為 123 的程序時按下 Ctrl+C 鍵。但是,普通使用者隻能使用不帶 signal 參數的 kill 指令或最多使用 -9 信号。

2、kill 可以帶有程序 ID 号作為參數。當用 kill 向這些程序發送信号時,必須是這些程序的主人。如果試圖撤銷一個沒有權限撤銷的程序或撤銷一個不存在的程序,就會得到一個錯誤資訊。

3、可以向多個程序發信号或終止它們。

4、當 kill 成功地發送了信号後,shell 會在螢幕上顯示出程序的終止資訊。有時這個資訊不會馬上顯示,隻有當按下 Enter 鍵使 shell 的指令提示符再次出現時,才會顯示出來。

5、應注意,信号使程序強行終止,這常會帶來一些副作用,如資料丢失或者終端無法恢複到正常狀态。發送信号時必須小心,隻有在萬不得已時,才用 kill 信号(9),因為程序不能首先捕獲它。要撤銷所有的背景作業,可以輸入

kill 0

。因為有些在背景運作的指令會啟動多個程序,跟蹤并找到所有要殺掉的程序的 PID 是件很麻煩的事。這時,使用

kill 0

來終止所有由目前 shell 啟動的程序,是個有效的方法。

  • 使用執行個體:

執行個體1:列出所有信号名稱

$ kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
 5) SIGTRAP      6) SIGABRT      7) SIGBUS       8) SIGFPE
 9) SIGKILL     10) SIGUSR1     11) SIGSEGV     12) SIGUSR2
13) SIGPIPE     14) SIGALRM     15) SIGTERM     16) SIGSTKFLT
17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU
25) SIGXFSZ     26) SIGVTALRM   27) SIGPROF     28) SIGWINCH
29) SIGIO       30) SIGPWR      31) SIGSYS      34) SIGRTMIN
35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3  38) SIGRTMIN+4
39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7  58) SIGRTMAX-6
59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX
           
說明:隻有第9種信号(SIGKILL)才可以無條件終止程序,其他信号程序都有權利忽略。
編号為 1 ~ 31 的信号為傳統 UNIX 支援的信号,是不可靠信号(非實時的),編号為 32 ~ 63 的信号是後來擴充的,稱做可靠信号(實時信号)。不可靠信号和可靠信号的差別在于前者不支援排隊,可能會造成信号丢失,而後者不會。

下面是常用的信号:

信号名稱 信号值 含義
HUP 1 在使用者終端連接配接(正常或非正常)結束時發出
USR1 10 具體作用自定義
USR2 12 具體作用自定義
WINCH 28 視窗大小改變時發出
INT 2 中斷(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + \)
TERM 15 終止
KILL 9 強制終止
CONT 18 繼續(與STOP相反, fg/bg指令)
STOP 19 暫停(同 Ctrl + Z)

執行個體2:得到指定信号的數值

$ kill -l KILL
9
$ kill -l SIGKILL
9
$ kill -l TERM
15
$ kill -l SIGTERM
15
           

執行個體3:先用 ps 查找程序,然後用 kill 殺掉

$ ps -ef | grep vim 
root      3268  2884  0 16:21 pts/1    00:00:00 vim install.log
root      3370  2822  0 16:21 pts/0    00:00:00 grep vim
$ kill 3268 
$ kill 3268 
-bash: kill: (3268) - 沒有那個程序
           

執行個體4:徹底殺死程序

指令:

$ ps -ef | grep vim 
root      3268  2884  0 16:21 pts/1    00:00:00 vim install.log
root      3370  2822  0 16:21 pts/0    00:00:00 grep vim
$ kill –9 3268 
$ kill 3268 
-bash: kill: (3268) - 沒有那個程序
           

執行個體5:殺死指定使用者所有程序

// 方法一
$ kill -9 $(ps -ef | grep hnlinux) 
// 方法二
$ kill -u hnlinux
           

執行個體6:init程序是不可殺的

$ ps -ef | grep init
root         1     0  0 Nov02 ?        00:00:00 init [3]                  
root     17563 17534  0 17:37 pts/1    00:00:00 grep init
$ kill -9 1
$ kill -HUP 1
$ ps -ef | grep init
root         1     0  0 Nov02 ?        00:00:00 init [3]                  
root     17565 17534  0 17:38 pts/1    00:00:00 grep init
$ kill -KILL 1
$ ps -ef | grep init
root         1     0  0 Nov02 ?        00:00:00 init [3]                  
root     17567 17534  0 17:38 pts/1    00:00:00 grep init
           
說明:init 是 Linux 系統操作中不可缺少的程式之一。所謂的 init 程序,它是一個由核心啟動的使用者級程序。核心自行啟動(已經被載入記憶體,開始運作,并已初始化所有的裝置驅動程式和資料結構等)之後,就通過啟動一個使用者級程式 init 的方式,完成引導程序。是以,init 始終是第一個程序(其程序編号始終為 1)。其它所有程序都是 init 程序的子孫。init 程序是不可殺的!