馬哥教育網絡班22期+第八周課程練習

1. 請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。 
網橋:工作在OSI模型的數據鏈路層,將兩個局域網連起來,根據MAC地址來轉發幀。它可以有效地連接兩個LAN,使本地通信限制在本網段內,并轉發相應的信號至另一網段,網橋通常用于連接數量不多的、同一類型的網段,它可以擴展網絡的距離或范圍,而且可提高網絡的性能、可靠性和安全性。

集線器:主要功能是對接收到的信號進行再生整形放大,以擴大網絡的傳輸距離,同時把所有節點集中在以它為中心的節點上,它工作于OSI模型中的“物理層”,因為采用“廣播”模式,所以很容易產生“廣播風暴”,大部份集線器已被交換機取代。

二層交換機: 工作于OSI模型的第2層(數據鏈路層),故而稱為二層交換機。二層交換技術的發展已經比較成熟,二層交換機屬數據鏈路層設備,可以識別數據包中的MAC地址信息,根據MAC地址進行轉發,并將這些MAC地址與對應的端口記錄在自己內部的一個地址表中,能夠隔離沖突域和有效抑制“廣播風暴”的產生。

三層交換機:具有部分路由器功能的交換機,三層交換機的最重要目的是加快大型局域網內部的數據交換,所具有的路由功能也是為這目的服務的,能夠做到一次路由,多次轉發。對于數據包轉發等規律性的過程由硬件高速實現,而像路由信息更新、路由表維護、路由計算、路由確定等功能,由軟件實現。三層交換技術就是二層交換技術+三層轉發技術。傳統交換技術是在OSI網絡標準模型第二層——數據鏈路層進行操作的,而三層交換技術是在網絡模型中的第三層實現了數據包的高速轉發,既可實現網絡路由功能,又可根據不同網絡狀況做到最優網絡性能。

路由器:其功能是決定最優路由和轉發數據包。路由表中寫入各種信息,由路由算法計算出到達目的地址的最佳路徑,然后由相對簡單直接的轉發機制發送數據包。接受數據的下一臺路由器依照相同的工作方式繼續轉發,依次類推,直到數據包到達目的路由器。其工作模式與二層交換機相似,但路由器工作在OSI模型的第三層——網絡層,這個區別決定了路由和交換機在傳遞包時使用不同的控制信息,實現功能的方式就不同。適用于局域網間互聯,局域網與城域網互聯互通。


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

blob.png


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

blob.png


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

1.編輯/etc/sysconfig/network-scripts/ifcfg-eno16777728,此為centos7系統,名稱可能有所不同,centos6系統為ifcfg-eth0

~]# cat ifcfg-eno16777728
TYPE=Ethernet #指明接口類型,常見的有Ethernet,Bridge,可忽略不寫;
BOOTPROTO=static #激活此接口時使用什么協議來配置接口屬性,這里為靜態
IPV6INIT=yes #是否初始化IPV6
NAME=eno16777728
DEVICE=eno16777728
ONBOOT=yes  #在系統的引導過程中,是否激活此接口
IPADDR=192.168.137.70 #IP地址
NETMASK=255.255.255.0 #掩碼
GATEWAY=192.168.137.1 #網關
DNS1=210.21.196.6 #主DNS
DNS2=119.233.255.229 #備DNS

2.重啟網絡
~]# systemctl restart network.service

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

1.臨時修改,只在此shell中和子shell中運行,下次登錄失效
]# ifconfig eno16777728 192.168.137.71/24

2.編輯配置文件
~]# cat ifcfg-eno16777728
DEVICE=eno16777728
BOOTPROTO=static
ONBOOT=yes  
IPADDR=192.168.137.70
NETMASK=255.255.255.0
GATEWAY=192.168.137.1
DNS1=210.21.196.6
DNS2=119.233.255.229

6. 寫一個腳本,使用ping命令探測172.16.250.1-172.16.250.254之間的所有主機的在線狀態; 
在線的主機使用綠色顯示; 
不在線的主使用紅色顯示;

#!/bin/bash
#
IP=172.16.250

for i in {1..254};do
   if ping -c 1 -w 1 $IP.$i &>/dev/null;then
       echo -e "\033[32m $IP.$i is online. \033[0m"
   else
       echo -e "\033[31m $IP.$i is off. \033[0m"
   fi
done

7. 詳細描述每個網絡接口的配置文件中各個參數的含義和其所對應的值; 
ifcfg-接口名配置文件 
DEVICE:此配置文件對應的設備的名稱; 
ONBOOT:在系統的引導過程中,是否激活此接口; 
UUID:此設備的唯一標識; 
IPV6INIT:是否初始化IPV6 
BOOTPROTO:激活此接口時使用什么協議來配置接口屬性,常用的有dhcp、bootp、static、none; 
TYPE:指明接口類型,常見的有Ethernet,Bridge; 
DNS1:第一dns服務器指向; 
DNS2:備用dns服務器指向; 
DOMAIN:DNS搜索域; 
IPADDR:配置ip地址; 
NETMASK:子網掩碼;centos7支持使用PREFIX以長度方式指明子網掩碼; 
GATEWAY:默認網關; 
USERCTL:是否允許普通用戶控制此設備; 
PEERDNS:如果BOOTPROTO的值為“dhcp”,是否允許dhcp server分配的dns服務器指向覆蓋本地手動指定的dns服務器指向;默認為允許:yes 
NM_CONTROLLED:是否使用NetworkManager服務來控制接口; 
HWADDR:設備的mac地址;


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

1.臨時生效
# ifconfig eno16777728:0 192.168.137.71/24 up

2.修改配置文件生效
~]# cat ifcfg-eno16777728:0
DEVICE=eno16777728:0
BOOTPROTO=static
ONBOOT=yes  
IPADDR=192.168.137.71
NETMASK=255.255.255.0
GATEWAY=192.168.137.1
DNS1=210.21.196.6
DNS2=119.233.255.229

9. 常用的網絡管理類工具有哪些,并用示例形式描述他們的使用方法。 
ifconfig命令:接口及地址查看和管理 
ifconfig [INTERFACE] 
ifconfig interface [aftype] options |address 
ifconfig IFACE IP/MASK [up] 
ifconfig IFACE IP netmask NETMASK

route命令:路由查看及管理 
查看路由: 
route -n 
添加: 
route -add [-net|-host] target [netmask NM] [gw GW] [[dev]if]

刪除: 
route del [-net|-host] target [gw GW] [netmask Nm] [[dev]if]

netstat命令: 
顯示路由: 
netstat -rn 
-r:顯示內核路由表 
-n:數字格式

顯示網絡連接: 
netstat [--tcp|-t] [--udp|-u] [--listening|-l] [--raw|-w] [--all|-a] [--numeric|-n] [--extend|-e] [--program|-p] 
-t:TCP協議的相關連接,連接均有其狀態;FSM(finate state macheine); 
-u:udp相關的連接 
-w:raw socket相關的連接 
-l:處于監聽狀態的連接 
-a:所有狀態 
-n:以數字格式顯示IP和port 
-e:擴展格式 
-p:顯示相關的進程及PID

常用組合: 
-tan -uan -tnl ,unl,tunlp

顯示接口的統計數據: 
netstat {--interfaces|-I|-i} [iface] [--all|-a] [--extend|-e] [--verbose|-v] [--program|-p] [--numeric|-n]

所有接口: 
netstat -i 
指定接口: 
netstat -I<iface>

ifup/ifdown命令: 
注意:通過配置文件來識別接口并完成配置;

iproute2家族: 
ip命令: 
show / manipulate routing, devices, policy routing and tunnels

ip [ OPTIONS ] OBJECT { COMMAND | help } 
OBJECT={link|addr|route|netns}

ip OBJECT: 
ip link:network device configuration 
ip link set – change device attributes 
dev NAME (default):指明要管理的設備,dev關鍵字可省略; 
up and down 
multicast onmulticast off啟用或關閉多播功能; 
ip link show - display device attributes 
ip link help顯示簡要使用幫助

ip netns list 列出所有的netns 
ip netns add NAME創建指定的netns 
ip netns del NAME 刪除指定的netns 
ip netns exec NAME COMMAND 在指定的netns中運行命令

ip address add -add new protocol address 
ip addr add IFADDR dev IFACE 
[label NAME]:為額外的地址指明接口別名

ip address delete 刪除指定接口地址; 
ip address flush 清空地址別名;

ip route { add | del | change | append | replace |monitor } ROUTE 
ip route add TYPE PREFIX via GW [dev IFACE] [src SOURCE_IP]

ss命令: 
ss [options] [ FILTER ] [EXPRESSION] 
選項: 
-t:tcp協議的相關連接 
-u:UDP相關的連接; 
-w:raw socket相關連接 
-l:監聽狀態的連接 
-a:所有狀態連接; 
-n:數字格式 
-p:相關的程序及PID 
-e:擴展格式信息; 
-m:內存用量 
-o:計時器信息


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

rpm安裝:

rpm {-i|--install} [install-options] PACKAGE_FILE ... 
rpm -ivh package_file 
GENERAL OPTIONS: 
-v:詳細信息 
-vv:更加詳細信息

[install-options]: 
-hhash marks輸出進度條,每個#表示2%的進度; 
--test:測試安裝,檢查并報告依賴關系及沖突消息等; 
--nodeps:忽略依賴關系;不建議; 
--replacepkgs:重新安裝

注意:rpm可以自帶腳本 
四類:--noscripts 
preinstall:安裝過程開始之前運行的腳本,%pre,--nopre 
postinstall:安裝過程完成之后運行的腳本,%post,--nopost 
preuninstall:卸載過程真正開始執行之前運行的腳本,%postun,--nopreun 
postuninstall:卸載過程完成之后運行的腳本,%postun,--nopostun

--nosignature:不檢查包簽名信息,不檢查來源合法性; 
--nodigest:不檢查包完整性信息;

rpm升級

rpm {-U|--upgrade} [install-options] PACKAGE_FILE ... 
rpm {-F|--freshen} [install-options] PACKAGE_FILE ... 
-U:升級或安裝 
-F:升級 
rpm -Uvh package_file... 
rpm -Fvh package_file...

--oldpackage:降級; 
--force:強制升級或降級;

注意:

  1. 不要對內核做升級操作;Linux支持多內核并存,因此,直接安裝新版內核;

  2. 如果某原程序包的配置文件安裝后曾被修改過,升級時,新版本的程序提供的同一配置文件不會覆蓋原有版本的配置文件,而是把新版本的配置文件重命名(filename.rpmnew)后提供;

rpm卸載

rpm {-e|--erase} [--allmatches] [--nodeps][--noscripts][--test] PACKAGE_NAME ... 
--allmatches:卸載所有匹配指定名稱的程序包的各版本; 
--nodeps:忽略依賴關系; 
-test:測試卸載,dry run 模式

rpm查詢

rpm {-q|--query} [select-options] [query-options] 
[select-options] 
PACKAGE_NAME:查詢指定的程序包是否已經安裝,及其版本; 
-a,--all:查詢所有已經安裝過的包; 
-f,FILE:查詢指定的文件由哪個程序包安裝生成; 
-p,--package PACKAGE_FILE:用于實現對未安裝的程序包執行查詢操作; 
--whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個程序包提供; 
--whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴;

[query-options] 
--changelog:查詢rpm包的changelog; 
-l,--list:程序包安裝生成的所有列表; 
-i,--info:程序包相關的信息,版本號、大小、所屬的包組,等; 
-c,--configfiles:查詢指定的程序提供的配置文件; 
-d,--docfiles:查詢指定的程序提供的文檔; 
--provides:列出指定的程序包提供的所有的CAPABILITY; 
-E,--requires:查詢指定的程序包的依賴關系; 
--scripts:查看程序包自帶的腳本片段;

用法: 
-qi PACKAGE,-qf FILE,-qc PACKAGE,-ql PACKAGE,-qd PACKAGE,-qpi PACKAGE_FILE,-qpl PACKAGE_FILE,-qpc PACKAGE_FILE...

rpm校驗

rpm {-V|--verify} [select-options] [verify-options]

S file Size differs 
M Mode differs (includes permissions and file type) 
5 digest (formerly MD5 sum) differs 
D Device major/minor number mismatch 
L readLink(2) path mismatch 
U User ownership differs 
G Group ownership differs 
T mTime differs 
P caPabilities differ

包來源合法性驗證和完整性驗證: 
來源合法性驗證: 
完整性驗證:

獲取并導入信任的包制作者密鑰: 
對于centos發行版來說:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-xxx

驗證: 
1. 安裝此組織簽名的程序時,會自動執行驗證; 
2. 手動驗證:rpm -K package_file

數據庫重建

rpm管理器數據庫路徑:/var/lib/rpm/ 
查詢操作:通過此處的數據庫進行;

獲取幫助: 
centos:man rpm 
centos:man rpmdb

rpm {--initdb|--rebuilddb} 
--initdb:初始化數據庫,當前無任何數據庫可初始化創建一個新的;當前有時不執行任何操作; 
--rebuilddb:重新構建,通過讀取當前系統上所有已經安裝過的程序包進行重新創建;

yum命令的用法:

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

顯示倉庫列表 
repolist [all|enabled|disabled]

顯示程序包 
yum list [all | glob_exp1] [glob_exp2] [...] 
yum list {available|insitalled|updates} [glob_exp1] [...]

安裝程序包: 
install package1 [package2] [...] 
reinstall package1 [package2] [...] 重新安裝

升級程序包: 
update [package1] [package2] [...] 
downgrade package1 [package2] [...]降級

檢查可用升級: 
check-update

卸載程序包: 
remove | erase package1 [package2] [...]

查看程序包information 
info [...]

查看指定的特性(可以是某文件哪個程序包所提供)是由:rpm -qf 
provides | whatprovides feature1 [feature2] [...]

清理本地緩存: 
clean [ packages | metadata | expire-cache | rpmdb| plugins | all ]

構建緩存: 
makecache

搜索: 
search string1 [string2] [...] 
以指定的關鍵字搜索程序包名已summary(摘要)信息;

查看指定包所依賴的capabilities: 
deplist package1 [package2] [...]

安裝及升級本地程序包: 
localinstall rpmfile1 [rpmfile2] [...] 
(maintained for legacy reasons only - use install) centos6以后可忽略 
localupdate rpmfile1 [rpmfile2] [...] 
(maintained for legacy reasons only - use update)

yum命令行選項: 
--nogpgcheck:禁止運行gpg check; 
-y:自動回答為“yes”; 
-q:靜默模式; 
--disablerepo=repoidglob:臨時禁用此處指定的repo; 
--enablerepo=repoidglob:臨時啟用此處指定的repo; 
--noplugins:禁用所有的插件;

yumrepo配置文件中可用的變量: 
$releasever:當前OS的發行版的主版本號; 
$arch:平臺類型; 
$basearch:基礎平臺; 
$YUM0-YUM9 
例如:http://mirrors.magedu.com/centos/$releaserver/$basearch/os

創建YUM倉庫: 
createrepo [options] <directory>


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

1.掛載光盤
mount -r /dev/cdrom /mnt/
2.創建本地yum倉庫
~]# cat isodata.repo
[isodata]
name=isodata
baseurl=file:///mnt/
enable=1
gpgcheck=0

12. 寫一個腳本,完成以下功能 
(1) 假設某目錄(/etc/rc.d/rc3.d/)下分別有K開頭的文件和S開頭的文件若干; 
(2) 顯示所有以K開頭的文件的文件名,并且給其附加一個stop字符串; 
(3) 顯示所有以S開頭的文件的文件名,并且給其附加一個start字符串; 
(4) 分別統計S開頭和K開頭的文件各有多少;

#!/bin/bash
#
declare -i k_file=0
declare -i s_file=0

for i in $(ls /etc/rc.d/rc3.d/ |grep ^K);do
   echo "$i stop"
   let k_file++
done

for i in $(ls /etc/rc.d/rc3.d/ |grep ^S);do
   echo "$i start"
   let s_file++
done

echo "There are $k_file at the beginning of K"
echo "There are $s_file at the beginning of S"

13、寫一個腳本,完成以下功能 
(1) 腳本能接受用戶名作為參數 
(2) 計算此些用戶的ID之和

#!/bin/bash
#
declare -i sum=0

if [ $# -lt 1 ];then
   echo "Usage:$basename $0 username1 username2 ..."
   exit 3
fi

for i in $*;do
   if id $i &> /dev/null;then
       let sum=$sum+$(id -u $i)
   else
       echo "user $i is not existed!"
       exit 5
   fi
done

echo "The sum of the uid for these users is $sum"

14. 寫一個腳本 
(1) 傳遞一些目錄給此腳本; 
(2) 逐個顯示每個目錄的所有一級文件或子目錄的內容類型; 
(3) 統計一共有多少個目錄;且一共顯示了多少個文件的內容類型;

#!/bin/bash
#
declare -i sum=0

for i in $*;do
   echo $i
       for file in $i/*;do
           [ -f $file ] && echo "$file is a common file."
           [ -d $file ] && echo "$file is a directory." && let sum++
           [ -c $file ] && echo "$file is a Character device file."
           [ -L $file ] && echo "$file is a symbolic link file"
       done
done
   echo "The $* directory have $sum."                                        

15. 寫一個腳本 
通過命令行傳遞一個參數給腳本,參數為用戶名 
如果用戶的id號大于等于500,則顯示此用戶為普通用戶;

#!/bin/bash
#
if [ $# -ge 2 -o $# -lt 1 ];then
   echo "Usage:basename $0 USER"
   exit 3
fi

if id $1 &>/dev/null;then
   if [[ $(id -u $1) -ge 500 ]];then
       echo "$1 is common user"
   fi
else
       echo "$1 user is not exists"
fi

16. 寫一個腳本 
(1) 添加10用戶user1-user10;密碼同用戶名; 
(2) 用戶不存在時才添加;存在時則跳過; 
(3) 最后顯示本次共添加了多少用戶;

#!/bin/bash
#
declare -i sum=0

for i in user{1..10};do
   if id $i &>/dev/null;then
       echo "$i is exists."
   else
       useradd $i &>/dev/null
       echo "$i" |passwd --stdin $i &>/dev/null
       let sum++
   fi
done
   echo "Add user $sum."                      

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

#!/bin/bash
#
IP=172.16.250

for ((i=20;i<=100;i++));do
   if ping -c 1 -w 1 $IP.$i &>/dev/null;then
       echo "The $IP.$i is online."
   fi
done

18. 打印九九乘法表;

#!/bin/bash
#
for ((i=1;i<=9;i++));do
   for ((j=1;j<=$i;j++));do
       let sum=$i*$j
       echo -en ""$i"X"$j"=$sum "
   done
   echo ""
done

原創文章,作者:N22-白蟻,如若轉載,請注明出處:http://www.www58058.com/64115

(0)
N22-白蟻N22-白蟻
上一篇 2016-12-19
下一篇 2016-12-19

相關推薦

  • 腳本編程部分_第十周練習

    Q1:寫一個腳本: (1) 能接受四個參數:start, stop, restart, status;start: 輸出“starting 腳本名 finished.”其余參數類似; (2) 其它任意參數,均報錯退出; #!/bin/bash # read -p "The following choices&…

    Linux干貨 2017-01-01
  • 如何用SHELL寫好網絡爬蟲

    原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://nolinux.blog.51cto.com/4824967/1550976        上周,老大壓下來任務,讓寫一個網絡爬蟲,負責爬某一個行業網站的數據信息。由于本人只會 sh…

    Linux干貨 2016-08-15
  • awk基本用法

    一、awk介紹     awk、sed&grep都可以匹配文本,但sed和awk可以對文本進行編輯,grep則不具有此功能;sed是非交互式的流編輯器,而awk則是一門模式匹配的編程語言。awk主要用于處理匹配的文本,同時awk還支持編程語言的一些特性,如變量、函數、循環語句等。  &nbs…

    Linux干貨 2016-09-21
  • DNS and BIND 介紹及安裝

    DNS DNS是什么 為什么要用DNS 域名 BIND DNS是什么 DNS:Domain Name System,域名系統DNS作為域名和IP地址相互映射的一個分布式數據庫,能夠讓用戶更方便的訪問互聯網。它的正向映射是吧一個主機和IP地址關聯起來,它的反向映射則是IP地址到主機名。DNS協議運行在UDP協議上,使用53端口。 為什么要用DNS 連接到互聯網…

    Linux干貨 2016-05-28
  • Linux基礎學習總結(六)

    一、創建一個10G分區,并格式為ext4文件系統; 1、要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl; [root@blog ~]# fdisk /dev/sdfCommand (m for help): nCommand action e extended p primary partition (1…

    2016-11-06
  • 構建企業日志實時查看系統

    前言:          由于項目剛剛上線,出現了許多bug,開發人員需要經常跑過來查看日記,嚴重影響了我們運維人員的工作效率,時而久之,感覺那個煩啊。。各位仁兄有 沒有體 會到呢?。。?之前找了一些處理日記的工具都不具有實時性,所以都未采納,剛剛發現了log.io這個工具推薦個…

    Linux干貨 2015-02-13

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-12-23 00:25

    贊,寫的不錯~IP地址分類可以補充一下私有地址段。

欧美性久久久久