Linux作業8

1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。

  集線器:集線器工作在OSI模型中的物理層,基於廣播方式工作,用於放大和廣播數據比特,現在只在特定網絡中應用,比如需要對網絡抓包的時;

  網橋和二層交換機:二層交換機屬於網橋,網橋和二層交換機工作在OSI模型中的數據鏈路層,基於MAC端口表連接連接多臺主機或二層網絡,能夠對數據幀進行存儲轉發和校驗,並能夠隔離衝突域。

  三層交換機:工作在OSI模型中第三層網絡層,是具有部分路由功能的交換機,應用在大型網絡中實現數據包的快速交換和轉發;

 路由器:三層交換機工作在OSI模型中的網絡層,用於鏈接多個網絡(可以是不同接口,如串口、光纖、電話線、雙絞線等),在互聯網中基於路由協議實現數據包的路由功能。


2、IP地址的分類有哪些?子網掩碼的表示形式及其作用

    IPv4共分爲以下五類:


第一段範圍(二進制和十進制)有效IP範圍默認子網掩碼網絡數每網絡主機數私網地址
A類0 000 0000 – 0 111 1111
0 – 127
1.0.0.1 – 126.255.255.254
0.0.0.0代表任意網絡
127.X.X.X爲本地迴環地址
255.0.0.01262^24-210.0.0.0/8
B類10 00 0000 – 10 11 1111
127 – 191
128.0.0.1 – 191.255.255.254255.255.0.02^142^16-2172.16.0.0/16 – 172.31.0.0/16
C類110 0 0000 – 110 1 1111
192 - 223
192.0.0.1 – 223.255.255.254255.255.255.02^212^8-2192.168.0.0/24 – 192.168.255.0/24
D類1110 0000 – 1110 1111
224 – 239
224.0.0.1 – 239.255.255.254D類地址不分網絡和主機,用作組播
E類1111 0000 – 1111 1111
240 – 255
240.0.0.1 – 255.255.255.254用於科學研究

    子網掩碼:子網掩碼用來區分IPv4地址的網絡和主機段,並進而判斷多個IP是否處與同一網絡。判斷方法:子網掩碼與IP按位進行“與”運算後,如果網絡段相同則說明處於同一網絡中。

    子網掩碼與IP類似,也是由32位二進制組成,其表現形式有兩種,一種是和IP類似以點分十進制的方法表示,如:255.255.0.0;另一種爲在IP地址後緊跟“/NUM”,NUM爲掩碼的十進制表示法,如:172.16.0.1/16。   


3、計算機網絡的分成模型有哪些(OSI模型和TCP/IP模型),每一層的功能及涉及到的物理設備有哪些。

    OSI參考模型:

        應用層(第7層,Application layer):爲計算機與用戶交互的接口,比如Telnet、SMTP、FTP、HTTP等協議;            

        表示層(第6層,Presentation layer):爲應用層提供數據,並負責數據的轉換和格式化等。比如數據是否需要加密,數據的編碼格式(ASCII、JPEG)等;

        會話層(第5層,Session layer):負責保證應用程序間數據的獨立性。

        傳輸層(第4層,Transport layer):將來自會話層的數據分段,並重組爲數據流。主要提供了兩個通信協議TCP(可靠)和UDP(不可靠)。PDU爲Segment;

        網絡層(第3層,Network layer):爲數據包提供路由選擇服務,主要協議有IP、ICMP。PDU爲Packet。涉及的物理設備主要是路由器;

        數據鏈路層(第2層,Data Link layer):負責將來自網絡層的數據包轉換爲比特流,以便於物理層進行傳輸,也提供了錯誤發現的服務,但不糾正。使用MAC地址進行通信。PDU爲Frame,涉及的設備有交換機;

        物理層(第1層,Physical layer):發送和接收比特流。PDU爲bit。涉及的設備有集線器、線纜。

       

    TCP/IP模型:由以下5層組成,其中應用層稱爲資源子網,傳輸層、互聯網層、數據鏈路層和物理層稱爲通信子網,與OSI模型對應。

        應用層(第5層,Application layer):對應OSI模型中的應用層、表示層和會話層

        傳輸層(第4層,Transport layer)

        互聯網層(第3層,Internet layer)

        數據鏈路層(第2層,Data Link layer)

        物理層(第1層,Physical layer)       

        

4、如何將Linux主機接入到TCP/IP網絡,請描述詳細的步驟。(手動指定的方式)

 將Linux主機接入到TCP/IP網絡中需要爲主機配置IP地址、網關和DNS等項目。

 1). 修改/添加IP地址:

  管理網絡接口的命令有兩個分別爲ifconfig和ip,推薦使用ip命令進行配置。注意,使用命令配置的網卡參數立即臨時生效:

  ipconfig命令,立即臨時生效:

   ifconfig [interface]//顯示指定網絡接口的信息,不加[interface]則顯示所有活動狀態的網絡接口信息

    # ifconfig -a//顯示所有網絡接口的信息,包括非活動狀態的接口信息

    # ifconfig IFACE [up|down]//

   ifconfig interface [aftype] options | address ...

    # ifconfig IFACE IP/mask [up]

    # ifconfig IFACE IP netmask MASK [up]

    # ifconfig IFACE IP[/PREFIXLEN] [up]


  使用ifconfig爲網卡配置並查看IP地址的方法:

   wKiom1fo3aeBcunCAAAeRVInO5A880.png

   或

   wKiom1fo3aegRW3cAAAcu-EkM6I865.png

  

  ip命令,立即臨時生效:


   ip address - protocol address management

    ip addr { add | del } IFADDR dev STRING [label LABEL]

    IFADDR=IP/PREFIXLEN

     [label LABEL]:添加地址時指明網卡別名

     [scope {global|link|host}]:指明作用域

      global: 全局可用;

      link: 僅鏈接可用;

      host: 本機可用;

     [broadcast ADDRESS]:指明廣播地址

   ip address show - look at protocol addresses

    [dev DEVICE]//檢查指定設備上的IP地址

    [label PATTERN]//檢查指定標籤設備的IP地址

    [primary and secondary]//檢查指定設備上的主或輔助IP地址

   使用ip命令不能直接替換網卡的IP地址,可以先刪除設備上的IP再添加IP,如下:

    wKiom1fo75vhhznZAAAl9RQ7O2U463.png


 2). 修改網關或路由:

  添加/修改網關或路由可使用route或ip route命令:

   使用route命令添加網關/路由:

    查看:route -n

     Flags:Possible flags include

              U (route is up)

              H (target is a host)

              G (use gateway)

              R (reinstate route for dynamic routing)

              D (dynamically installed by daemon or redirect)

              M (modified from routing daemon or redirect)

              A (installed by addrconf)

              C (cache entry)

              !  (reject route)   

    添加:route add

     route add  [-net|-host]  target [netmask Nm] [gw Gw] [[dev] If]


    刪除:route del

     route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If]


    添加網關爲192.168.1.254:

    wKioL1fqOniwYv5VAABIJv8DT6Q109.png    


   使用ip命令添加網關/路由: 

    查看路由條目:ip route { list | show } 

     添加路由:ip route add TARGET via GW dev IFACE src SOURCE_IP

      TARGET:

       主機路由:IP

       網絡路由:NETWORK/MASK

    添加網關:ip route add defalt via GW dev IFACE     

    刪除路由:ip route del TARGET

      刪除網關:ip route del default

  添加網關爲192.168.1.254:

   wKiom1fqPgqg7liIAABGM6duQWA478.png


 3). 添加/修改DNS:

  DNS的添加/修改需通過配置文件/etc/resolv.conf,Linux最多可以添加3個DNS。

   /etc/resolv.conf格式:

    nameserver DNS_SERVER_IP1

    nameserver DNS_SERVER_IP2

    nameserver DNS_SERVER_IP3

  添加DNS爲:192.168.0.3、202.106.0.20、8.8.8.8

  wKioL1fqQQ3iq_ICAAA7Cg0iVfs752.png


 配置網卡信息永久生效:

  修改網卡的配置文件:

# cat /etc/sysconfig/network-scripts/ifcfg-enp0s3
HWADDR="08:00:27:b4:9f:bf"
TYPE="Ethernet"
BOOTPROTO="static"
NAME="enp0s3"
UUID="1ad1abf6-983f-4727-bc53-ca64a35327f6"
ONBOOT="yes"
IPADDR="192.168.1.92"
NETMASK="255.255.255.0"
GATEWAY="192.168.1.254"
DNS1="192.168.0.3"
DNS2="202.106.0.20"
DNS3="8.8.8.8"
NM_CONTROLLED="no"

 驗證結果:

 wKioL1frhWqAmQI0AACz29PHe-U880.png



5、爲Linux主機配置網絡信息的方式有哪些,請描述各個過程。

 爲Linux主機配置網絡信息的方式有兩種,一種爲靜態指定(立即臨時生效)另一種爲使用DHCP協議自動獲取網絡信息,詳細方法如下:

  靜態指定:  

   使用命令進行配置,立即臨時生效:

   添加、修改IP和子網掩碼:

    ifconfig:    

[root@C3 network-scripts]# ifconfig enp0s3:1 192.168.1.208/24 up  #爲虛擬網卡enp0s3:1指定IP爲:192.168.1.208,子網掩碼爲:255.255.255.0,並激活該網卡
[root@C3 network-scripts]# ifconfig enp0s3:1    #查看虛擬網卡信息
enp0s3:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.208  netmask 255.255.255.0  broadcast 192.168.1.255
        ether 08:00:27:b4:9f:bf  txqueuelen 1000  (Ethernet)

    ip:

[root@C3 network-scripts]# ip addr add 192.168.1.208/24 dev enp0s3 label 'enp0s3:1'        #創建一塊虛擬網卡命名爲enp0s3:1,指定IP爲:192.168.1.208,子網掩碼爲:255.255.255.0
[root@C3 network-scripts]# ip addr show dev enp0s3        #查看虛擬網卡信息
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:b4:9f:bf brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.61/24 brd 192.168.1.255 scope global dynamic enp0s3
       valid_lft 42122sec preferred_lft 42122sec
    inet 192.168.1.209/24 scope global secondary enp0s3:0
       valid_lft forever preferred_lft forever
    inet 192.168.1.208/24 scope global secondary enp0s3:1
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:feb4:9fbf/64 scope link
       valid_lft forever preferred_lft forever

    添加修改路由:    

    route:

[root@C3 network-scripts]# route del default
[root@C3 network-scripts]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.3     192.168.1.254   255.255.255.255 UGH   100    0        0 enp0s3
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 enp0s3
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
[root@C3 network-scripts]# route add default gw 192.168.1.254        #添加默認網關爲192.168.1.254
[root@C3 network-scripts]# route -n        #查看路由信息
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.254   0.0.0.0         UG    0      0        0 enp0s3
192.168.0.3     192.168.1.254   255.255.255.255 UGH   100    0        0 enp0s3
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 enp0s3
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

    ip:

[root@C3 network-scripts]# ip route show
192.168.0.3 via 192.168.1.254 dev enp0s3  proto dhcp  metric 100
192.168.1.0/24 dev enp0s3  proto kernel  scope link  src 192.168.1.61  metric 100
192.168.122.0/24 dev virbr0  proto kernel  scope link  src 192.168.122.1
[root@C3 network-scripts]# ip route add default via 192.168.1.254 dev enp0s3    #添加默認網關爲192.168.1.254
[root@C3 network-scripts]# ip route show        #查看路由信息
default via 192.168.1.254 dev enp0s3
192.168.0.3 via 192.168.1.254 dev enp0s3  proto dhcp  metric 100
192.168.1.0/24 dev enp0s3  proto kernel  scope link  src 192.168.1.61  metric 100
192.168.122.0/24 dev virbr0  proto kernel  scope link  src 192.168.122.1
[root@C3 network-scripts]# route -n        #查看路由信息
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.254   0.0.0.0         UG    0      0        0 enp0s3
192.168.0.3     192.168.1.254   255.255.255.255 UGH   100    0        0 enp0s3
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 enp0s3
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

    修改配置文件:

# cat ifcfg-enp0s3
HWADDR=08:00:27:B4:9F:BF
NAME=enp0s3
UUID=480ace9a-9c89-470f-8b5f-b124bb13607d
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=static
IPADDR=192.168.1.91
NETMASK=255.255.255.0
GATEWAY=192.168.1.254
DNS1=192.168.0.3
DNS2=202.106.0.20


  動態分配:

   修改配置文件(/etc/sysconfig/network-scripts/ifcfg-NIC_NAME)使用DHCP協議自動獲取IP、網關和DNS等信息:

# cat ifcfg-enp0s3
HWADDR=08:00:27:B4:9F:BF
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=enp0s3
UUID=480ace9a-9c89-470f-8b5f-b124bb13607d
ONBOOT=yes


6、寫一個腳本,使用ping命令探測172.16.250.1-172.16.250.254之間的所有主機的在線狀態;

     在線的主機使用綠色顯示;

     不在線的主使用紅色顯示;

#!/bin/bash
#
declare -i i=1
net='192.168.1'
while [ $i -le 254 ]; do
    if $(ping -n -c 1 -w 1  $net.$i &> /dev/null ); then
        echo -e "\033[32m $net.$i is online. \033[0m"
    else
        echo -e "\033[31m $net.$i is offline. \033[0m"
    fi
    let i++
done

 結果:

wKiom1fs5r6jq09BAAAs9xtszuQ860.png

7、詳細描述每個網絡接口的配置文件中各個參數的含義和其所對應的值;

  網卡配置文件 :/etc/sysconfig/network-scripts/ifcfg-IFACE

HWADDR=08:00:27:B4:9F:BF    #網卡的MAC地址;
TYPE=Ethernet                           #網卡類型,常見的有Ethernet、Bridge;
BOOTPROTO=static                    #網卡在激活時IP地址的獲取協議,有dhcp、static、none和bootp;
PEERDNS=no        #當BOOTPROTO爲dhcp時,是否允許DHCP所分配的DNS覆蓋/etc/resolv.conf;
NAME=enp0s3        #網卡名稱
UUID=480ace9a-9c89-470f-8b5f-b124bb13607d        #網卡的唯一標示
ONBOOT=yes            #OS在引導時是否激活此設備;
IPADDR=192.168.1.71        #網卡的主IP地址;
PREFIX=24        #子網掩碼長度,也可寫爲NETMASK=255.255.255.0
GATEWAY=192.168.1.1       #默認網關; 
DNS1=202.106.0.20        #第一個DNS,若與/etc/resolv.conf衝突,則以此處爲主;
DNS2=8.8.8.8        #備用DNS
NM_CONTROLLED        #NM爲NetworkManager的簡寫,指定網卡是否接受NetworkManager的控制;    
USERCTL=no        #是否允許精通用戶控制此網卡


8、如何給網絡接口配置多個地址,有哪些方式?

  使用ifconfig命令(立即臨時生效):    

[root@C1 ~]# ifconfig enp0s3:0 192.168.1.81/24 up    #新虛擬網卡名稱爲enp0s3:0,IP爲192.168.1.81/24
[root@C1 ~]# 
[root@C1 ~]# ifconfig enp0s3:0        #查看新虛擬網IP
enp0s3:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.81  netmask 255.255.255.0  broadcast 192.168.1.255
        ether 08:00:27:a5:19:25  txqueuelen 1000  (Ethernet)

  使用ip命令(立即臨時生效):  

[root@C1 ~]# ip addr add 192.168.1.82/24 dev enp0s3 label 'enp0s3:1'        #新網卡名爲enp0s3:1,IP爲192.168.1.82/24
[root@C1 ~]# 
[root@C1 ~]# ip addr show dev enp0s3        #檢查新虛擬網卡信息
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:a5:19:25 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.71/24 brd 192.168.1.255 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet 192.168.1.81/24 brd 192.168.1.255 scope global secondary enp0s3:0
       valid_lft forever preferred_lft forever
    inet 192.168.1.82/24 scope global secondary enp0s3:1
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fea5:1925/64 scope link 
       valid_lft forever preferred_lft forever

  使用nmcli命令(立即永久生效): 

[root@C1 ~]# nmcli conn modify enp0s3 +ipv4.addresses 192.168.1.83/24        #爲enp0s3網卡添加一個IP地址,該IP爲192.168.1.83/24 
[root@C1 ~]# nmcli conn down enp0s3; nmcli conn up enp0s3        #重啓網卡使配置生效;
Connection 'enp0s3' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
[root@C1 ~]# nmcli dev show enp0s3        #檢查結果
GENERAL.DEVICE:                         enp0s3
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         08:00:27:A5:19:25
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     enp0s3
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/3
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         192.168.1.71/24
IP4.ADDRESS[2]:                         192.168.1.83/24        #此處爲新添加的IP
IP4.GATEWAY:                            192.168.1.1
IP4.DNS[1]:                             202.106.0.20
IP4.DNS[2]:                             8.8.8.8
IP6.ADDRESS[1]:                         fe80::a00:27ff:fea5:1925/64
IP6.GATEWAY:                            
# cat ifcfg-enp0s3        #查看網卡的配置文件
HWADDR=08:00:27:A5:19:25
TYPE="Ethernet"
NAME="enp0s3"
UUID="1ad1abf6-983f-4727-bc53-ca64a35327f6"
ONBOOT="yes"
BOOTPROTO="none"
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
DNS1=202.106.0.20
DNS2=8.8.8.8
IPADDR=192.168.1.71
PREFIX=24
IPADDR1=192.168.1.83        #新IP已寫入配置文件中
PREFIX1=24
GATEWAY=192.168.1.1

  修改網卡配置文件(永久有效):  

[root@C1 network-scripts]# cat ifcfg-enp0s3 
HWADDR=08:00:27:A5:19:25
TYPE="Ethernet"
NAME="enp0s3"
UUID="1ad1abf6-983f-4727-bc53-ca64a35327f6"
ONBOOT="yes"
BOOTPROTO="none"
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
DNS1=202.106.0.20
DNS2=8.8.8.8
IPADDR0=192.168.1.71
IPADDR1=192.168.1.81        #在同一文件中指定多個IP時需要使用IPADDR#來取分,#爲IP標號
PREFIX0=24
PREFIX1=24        #同IPADDR,並與同標號的IP綁定掩碼;
GATEWAY=192.168.1.1
[root@C1 network-scripts]# service network restart        #重啓網絡服務
Restarting network (via systemctl):                        [  確定  ]
[root@C1 network-scripts]# ip addr show dev enp0s3
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:a5:19:25 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.71/24 brd 192.168.1.255 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet 192.168.1.81/24 brd 192.168.1.255 scope global secondary enp0s3        #新IP已生效
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fea5:1925/64 scope link 
       valid_lft forever preferred_lft forever


9、常用的網絡管理類工具有哪些,並用示例形式描述他們的使用方法。

 配置類:

  ifconfig、ip、route、nmcli參見第4題和第8題  

 監控類:

  netstat:顯示網絡會話、路由表和網絡統計等信息。

  顯示網絡連接:

   netstat [--tcp|-t] [--udp|-u] [--raw|-w] [--listening|-l] [--all|-a] [--numeric|-n] [--extend|-e[--extend|-e]]  [--program|-p]

    -t: tcp協議相關

    -u: udp協議相關

    -w: raw socket相關

    -l: 處於監聽狀態

    -a: 所有狀態

    -n: 以數字顯示IP和端口;

    -e:擴展格式

    -p: 顯示相關進程及PID

   常用組合:

    -tan, -uan, -tnl, -unl, -tunlpe

    wKioL1ftx9Pw361PAACth_vp0PU363.png

   顯示路由表:

    netstat  {--route|-r} [--numeric|-n]

     -r: 顯示內核路由表

     -n: 數字格式

    wKioL1ftyO7T1AL7AAAxj3f1tnM949.png

   顯示接口統計數據:

    netstat  {--interfaces|-I|-i} [iface] [--all|-a] [--extend|-e] [--program|-p] [--numeric|-n] 

     -i:顯示所有網卡的統計信息;

     -I=IFACE:顯示指定網卡的系統信息;

    wKioL1ftyeaBxyeoAABNJAxX924933.png


  ss命令:

   格式:ss [OPTION]... [FILTER]

    選項:

     -t: tcp協議相關

     -u: udp協議相關

     -w: 裸套接字相關

     -x:unix sock相關

     -l: listen狀態的連接

     -a: 所有

     -n: 數字格式

     -p: 相關的程序及PID

     -e: 擴展的信息

     -m:內存用量

     -o:計時器信息

   EXPRESSION:

    ['( dport = :TCPPORT [or sport = :ssh] )']

    wKiom1ft7gSihDi1AADtGRrnzrY033.png

    

10、Linux系統軟件包管理方法(安裝、升級、卸載等操作)有哪些,以及如何管理的。

 CentOS/Redhat系Linux操作系統可用的軟件包管理工具有rpm和yum兩種,其中yum是rpm的一個前端工具,是基於rpm的,不可獨立存在。

 rpm工具:

  rpm的通用選項:

    --quiet: 靜默模式;

    -v: verbose;

    -vv: 更爲詳細的verbose;

    -h: 以#顯示程序包管理執行進度;每個#表示2%的進度

  安裝軟件:

   rpm {-i|--install} [install-options] PACKAGE_FILE ...   

   [install-options]

    --test: 測試安裝,但不真正執行安裝過程;dry run模式;

    --nodeps:忽略依賴關係;

    --replacepkgs: 重新安裝;

    --nosignature: 不檢查來源合法性;

    --nodigest:不檢查包完整性;

    --noscipts:不執行程序包腳本片斷;

     %pre: 安裝前腳本; --nopre

     %post: 安裝後腳本; --nopost

     %preun: 卸載前腳本; --nopreun

     %postun: 卸載後腳本;  --nopostun

   wKioL1ft9u3zfYTuAAAl0BZN_bs524.png

  升級軟件:   

   rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...

   rpm {-F|--freshen} [install-options] PACKAGE_FILE ...

    upgrage:如果已安裝了舊版程序包,則“升級”;如果未安裝舊版程序包,則“安裝”;

    freeshen:如果已安裝了舊版程序包,則“升級”;如果未安裝舊版程序包,則不執行升級操作;

    rpm -Uvh PACKAGE_FILE ...

    rpm -Fvh PACKAGE_FILE ...

    --oldpackage:降級;

    --force: 強行升級;

   wKioL1ft-GiRBlrBAAAmu4Z7RvI979.png

  卸載軟件:  

   rpm {-e|--erase} [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...

    -e|--erase:卸載軟件包

    --nodeps:卸載時忽略依賴關係;

    --test:測試卸載,並不真正卸載;

    --noscripts:卸載時不執行程序包腳本片斷;

   wKiom1ft_nSjRsFDAAAjVPESoAM697.png

 yum工具:

  yum命令的用法:

   yum [options] [command] [package ...]

   Options:

    -v, --verbose:verbose operation

    -y, --assumeyes:交互時全部回答'yes'

    --enablerepo=[repo]:臨時啓用一個或多個倉庫,支持統配符;

    --disablerepo=[repo]:臨時禁用一個或多個倉庫,支持統配符;

       

  安裝軟件:

   install package1 [package2] [...]

   reinstall package1 [package2] [...]  (重新安裝)

   wKioL1fuANXhbYjoAADAkGwnGkE996.png

  升級軟件: 

  update [package1] [package2] [...]

  downgrade package1 [package2] [...] (降級)

  wKioL1fuAfbxNf2kAABNLp4MMkg565.png

  卸載軟件:

  remove | erase package1 [package2] [...]

  wKiom1fuA1ziH1LfAACps4k0qsU587.png


11、如何使用發行版光盤作爲yum repository,請描述該過程。

 1).掛載光盤,並使光盤開機自動掛載;

# grep iso9660 /etc/fstab
/dev/sr1        /media/CentOS7          iso9660 defaults,ro,loop        0       0

 2).創建光盤倉庫配置文件;

# cat /etc/yum.repos.d/CentOS-Media.repo
[CentOS7-Media]
name=CentOS-$releasever - Media
baseurl=file:///media/CentOS7
enabled=1
gpgcheck=1
gpgkey=file:///media/CentOS7/RPM-GPG-KEY-CentOS-7

 刷新緩存,檢查是否可用:

  wKioL1fuBWejsQv5AABaCuqdwpg631.png


12、寫一個腳本,完成以下功能

   (1) 假設某目錄(/etc/rc.d/rc3.d/)下分別有K開頭的文件和S開頭的文件若干;

   (2) 顯示所有以K開頭的文件的文件名,並且給其附加一個stop字符串;

   (3) 顯示所有以S開頭的文件的文件名,並且給其附加一個start字符串;

   (4) 分別統計S開頭和K開頭的文件各有多少;

#!/bin/bash
#
declare -i sumS=0
declare -i sumK=0
for file in $(ls /etc/rc.d/rc3.d/ | grep '^[K|S].*'); do
    if echo $file | grep '^S' &> /dev/null; then
        echo "$file start"
        let sumK++
    else
        echo "$file stop"
        let sumS++
    fi
done
echo -e "K files: $sumK\nS file: $sumS"

  結果:

  wKioL1fuDTLBYT8GAAAVhdsdwCo579.png

13、寫一個腳本,完成以下功能

   (1) 腳本能接受用戶名作爲參數;

   (2) 計算此些用戶的ID之和;

#!/bin/bash
#
declare -i countUID=0
if [ $# -eq 0 ]; then
    echo "Usage: $0 <USERNAME1> <USERNAME2>..."
    exit 1
fi

for user in $@; do
    if id $user &> /dev/null ; then
        echo "$user UID: $(id -u $user)"
        let countUID+=$(id -u $user)
    else
        echo "$user not existed."
    fi
done
echo "Sum UID: $countUID"

  結果:

  wKiom1fuFIfA4s44AABFCcDzV3o456.png

14、寫一個腳本

   (1) 傳遞一些目錄給此腳本;

   (2) 逐個顯示每個目錄的所有一級文件或子目錄的內容類型;

   (3) 統計一共有多少個目錄;且一共顯示了多少個文件的內容類型;

#/bin/bash
#
declare -i dirCount=0
declare -i blkCount=0
declare -i chaCount=0
declare -i regCount=0
declare -i symCount=0
declare -i pipCount=0
declare -i socCount=0
declare -i othCount=0
for dir in $@; do
    if [ -d $dir ]; then
        cd $dir
       for file in $(ls .); do
            echo "$(file $file)"
            if [ -d $file ]; then
                let dirCount++
            elif [ -f $file ]; then
                let regCount++
            elif [ -b $file ]; then
                let blkCount++
            elif [ -c $file ]; then
                let chaCount++
            elif [ -L $file ]; then
                let symCount++
            elif [ -p $file ]; then
                let pipCount++
            elif [ -S $file ]; then
                let socCount++
            else
                let othCount++
            fi
       done
    else
       echo "$dir is not directory or not exist."
    fi
done
echo "================================="
echo "Directory: $dirCount"
echo "Block files: $blkCount"
echo "Character files: $chaCount"
echo "Regular files: $regCount"
echo "Symbolic link files: $symCount"
echo "Pipe files: $pipCount"
echo "Socket files: $socCount"
echo "Other files: $othCount"

  結果:

wKiom1fuPaCyG_bSAAB5b49PZgA315.png

15、寫一個腳本

  通過命令行傳遞一個參數給腳本,參數爲用戶名

  如果用戶的id號大於等於500,則顯示此用戶爲普通用戶;

#!/bin/bash
#
if id $1 &> /dev/null; then
    userID=$(id -u $1)
    echo "$1 UID: $userID"
    if [ $userID -gt 500 ]; then
        echo "$1 is regular user."
    else
        echo "$1 is system user."
    fi
else
    echo "user $! not exist."
fi

  結果:

  wKioL1fuimDjwgWWAAAu8aylgqY284.png

16、寫一個腳本

   (1) 添加10用戶user1-user10;密碼同用戶名;

   (2) 用戶不存在時才添加;存在時則跳過;

   (3) 最後顯示本次共添加了多少用戶;

#!/bin/bash
#
declare -i addedUser=0
for ((i=1;i<=10;i++)); do
    if id user$i &> /dev/null; then
        echo "user$i already existed."
    else
        if useradd user$i &> /dev/null; then
            echo "user$i" | passwd --stdin user$i &> /dev/null
            let addedUser++
            echo "user$i add OK."
        else
            echo "user$i add failed."
        fi
    fi
done
echo -e "=========================\nTotal added user: $addedUser."

  結果:

 wKiom1fuj5LRGoQEAAArstFXm88542.png

17、寫一腳本,用ping命令測試172.16.250.20-172.16.250.100以內有哪些主機在線,將在線的顯示出來;

#!/bin/bash
#
net="192.168.1"
echo "Online IPs:"
for ((i=20;i<=100;i++));do
    ping -n -w 1 -c 1 $net.$i &> /dev/null && echo "$net.$i"
done

  結果:

 wKioL1fukXjjtppQAAAWknevGLE377.png

18、打印九九乘法表;

#!/bin/bash
#
printMulTab() {
   for ((i=1;i<=$1;i++));do
        for ((j=1;j<=$i;j++));do
            echo -e -n "${j}X${i}=$[$i*$j]\t"
        done
        echo
    done
}

printMulTab 9

  結果:

  wKioL1fulHDidBDGAABTBcY7Z6I752.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章