1. 程式人生 > >Linux_第三關練習題_1,3

Linux_第三關練習題_1,3

clas link 優點 冒號 device style 多個 log 內容

1.如何取得/etc/hosts 文件的權限對應的數字內容,如-rw-r--r-- 為 644,要求使用命令取得 644 這樣的數字。

  解法a:使用sed+awk命令:

[[email protected] data]# stat /etc/hosts  #查看hosts詳細信息,權限信息在第四行。
  File: `/etc/hosts‘   Size: 158 Blocks: 8 IO Block: 4096 regular file   Device: 803h/2051d Inode: 44 Links: 2   Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)   Access: 2017-05-16 00:00:39.304004258 +0800

  Modify: 2017-04-26 20:16:54.891279979 +0800   Change: 2017-04-26 20:16:54.892279979 +0800
[[email protected] data]# stat /etc/hosts|sed -n ‘4p‘  #使用sed取出第四行   Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
[[email protected] data]# stat /etc/hosts|sed -n ‘4p‘|awk -F"[(0/]" ‘{print $3}‘

  644  #使用awk指定分隔符為‘( 0 /‘;再打印分割後的第三列,完成需求。


  解法b:使用awk命令:

[[email protected] data]# stat /etc/hosts                          
  File: `/etc/hosts‘
  Size: 158           Blocks: 8          IO Block: 4096   regular file
  Device: 803h/2051d    Inode: 44          Links: 2
  Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
  Access: 2017-05-16 00:00:39.304004258 +0800
  Modify: 2017-04-26 20:16:54.891279979 +0800
  Change: 2017-04-26 20:16:54.892279979 +0800
[[email protected]
/* */ data]# stat /etc/hosts|awk -F"[(0/]" ‘NR==4{print $3}‘     644  #使用awk指定分割符為‘( 0 /’;再打印出分割後的第四行的第三列內容,完成需求。

  解法c:使用sed+正則表達式:

[[email protected] data]# stat /etc/hosts|sed -n ‘4p‘
  Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
[[email protected] data]# stat /etc/hosts|sed -n ‘4p‘|sed -r ‘s#.*s: \(0|/-.*##g‘
  644  #使用正則表達式 .*s: \(0|/.* 匹配目標前後的字段,並把匹配的結果替換為空。

3.請執行命令取出 linux 中 eth0 的 IP 地址。

  解法a:使用sed+cut命令

[[email protected] data]# ifconfig eth0|sed -n ‘2p‘
          inet addr:10.0.0.200  Bcast:10.0.0.255  Mask:255.255.255.0
[[email protected] data]# ifconfig eth0|sed -n ‘2p‘|cut -d " " -f12    #指定空格為分隔符
addr:10.0.0.200
[[email protected] data]# ifconfig eth0|sed -n ‘2p‘|cut -d " " -f12|cut -d ":" -f2  #指定冒號為分隔符
10.0.0.200

缺點:使用多條管道,性能低下。

  解法b:使用awk+正則表達式

[[email protected] data]# ifconfig eth0|awk -F"[ :]+" ‘{print $4}‘  #指定分隔符為1個或多個空格或者一個或多個冒號;並打印出目標列。
Ethernet
10.0.0.200
fe80
RUNNING
77689
51859
txqueuelen
8943514

[[email protected] data]# ifconfig eth0|awk -F"[ :]+" ‘NR==2{print $4}‘  #定位到目標行。
10.0.0.200

優點:簡潔、優雅。

  解法c:使用sed+正則表達式

[[email protected] data]# ifconfig eth0|sed -n 2p
          inet addr:10.0.0.200  Bcast:10.0.0.255  Mask:255.255.255.0
[[email protected] data]# ifconfig eth0|sed -n 2p|sed -r s#.*r:|B.*##g
10.0.0.200 

----------------------------------------分割線---------------------------------

參考:

  1. 李泳宜-預習視頻
  2. https://deerchao.net/tutorials/regex/regex.htm

Linux_第三關練習題_1,3