馬哥教育網絡班21期第8周課程練習

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

網橋也叫橋接器,是連接兩個局域網的一種存儲/轉發設備,用來連接不同網段。
集線器稱為“Hub”,主要功能是對接收到的信號進行再生整形放大,以擴大網絡的傳輸距離,同時把所有節點集中在以它為中心的節點上。
二層交換機工作于OSI模型的第2層(數據鏈路層),可識別數據包中的MAC地址信息,根據MAC地址進行轉發,并將這些MAC地址與對應的端口記錄在自己內部的一個地址表中。
三層交換機就是具有部分路由器功能的交換機,三層交換機的最重要目的是加快大型局域網內部的數據交換,所具有的路由功能也是為這目的服務的,能夠做到一次路由,多次轉發。對于數據包轉發等規律性的過程由硬件高速實現,而像路由信息更新、路由表維護、路由計算、路由確定等功能,由軟件實現。
路由器(Router),是連接因特網中各局域網、廣域網的設備,它會根據信道的情況自動選擇和設定路由,以最佳路徑,按前后順序發送信號。

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

IPv4 地址分類:
點分十進制:0-255
0000 0000 - 1111 1111

0.0.0.0-255.255.255.255

A類:
0 000 0000 - 0 111 1111: 1-127
網絡數:126, 127
每個網絡中的主機數:2^24-2
默認子網掩碼:255.0.0.0
私網地址:10.0.0.0/8

B類:
10 00 0000 - 10 11 1111:128-191
網絡數:2^14
每個網絡中的主機數:2^16-2
默認子網掩碼:255.255.0.0
私網地址:172.16.0.0/16-172.31.0.0/16

C類:
110 0 0000 - 110 1 1111: 192-223
網絡數:2^21
每個網絡中的主機數:2^8-2
默認子網掩碼:255.255.255.0
私網地址:192.168.0.0/24-192.168.255.0/24

D類:組播
1110 0000 - 1110 1111: 224-239

E類:
240-255

子網掩碼的設定必須遵循一定的規則。與二進制IP地址相同,子網掩碼由1和0組成,且1和0分別連續。子網掩碼的長度也是32位,左邊是網絡位,用二進制數字“1”表示,1的數目等于網絡位的長度;右邊是主機位,用二進制數字“0”表示,0的數目等于主機位的長度。這樣做的目的是為了讓掩碼與ip地址做按位與運算時用0遮住原主機數,而不改變原網絡段數字,而且很容易通過0的位數確定子網的主機數(2的主機位數次方-2,因為主機號全為1時表示該網絡廣播地址,全為0時表示該網絡的網絡號,這是兩個特殊地址)。對于A類地址來說,默認的子網掩碼是255.0.0.0;對于B類地址來說默認的子網掩碼是255.255.0.0;對于C類地址來說默認的子網掩碼是255.255.255.0。
只有通過子網掩碼,才能表明一臺主機所在的子網與其他子網的關系,使網絡正常工作。利用子網掩碼可以把大的網絡劃分成子網,即VLSM(可變長子網掩碼),也可以把小的網絡歸并成大的網絡即超網。

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

blob.png

(1)OSI模型:物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層
①物理層(Physical layer):利用物理傳輸介質為數據鏈路層提供物理連接,
如:集線器、網線、光纖、同軸電纜等; 在這一層,數據的單位稱為比特(bit)。
物理層定義的典型規范代表包括:EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45等

②數據鏈路層(Data link layer):將數據分幀,并處理流控制,屏蔽物理層,
為網絡層提供一個數據鏈路的連接,進行幾乎無差錯的數據傳輸,如:網卡、網橋、二層交換機;
該層的作用包括:物理地址尋址、數據的成幀、流量控制、數據的檢錯、重發等。
在這一層,數據的單位稱為幀(frame)。數據鏈路層協議的代表包括:SDLC、HDLC、PPP、STP、
幀中繼等。

③網絡層(Network layer):負責路由轉發和控制網絡擁塞,如:路由器、三層交換機等; 
在這一層,數據的單位稱為數據包(packet)。網絡層協議的代表包括:IP、IPX、RIP、OSPF等。

④傳輸層(Transport layer):負責將上層數據分段并提供端到端的、可靠(TCP)
或不可靠(UDP)的數據傳輸;在這一層,數據的單位稱為數據段(segment)。
傳輸層協議的代表包括:TCP、UDP、SPX等。

⑤會話層(Session layer):負責兩個節點之間的連接和斷開;管理主機之間的會話進程,
即負責建立、管理、終止進程之間的會話。會話層還利用在數據中插入校驗點來實現數據的同步。

⑥表示層(Presentation layer):負責加密和解密;表示層的數據轉換包括數據的加密、
壓縮、格式轉換等。

⑦應用層(Application layer):用于進程間通信,常用的協議有HTTP、FTP、SMTP、TELNET等 
     
(2)TCP/IP模型:網絡接入層 、網際互聯層、傳輸層、應用層
① 網絡接入層:與OSI參考模型中的物理層和數據鏈路層相對應,負責監視數據在主機和網絡之
間的交換;

②網際互連層:相當于OSI的網絡層,主要處理主機到主機間的通信;該層定義了分組格式和協議,
即IP協議(Internet Protocol)。除了需要完成路由的功能外,也可以完成將不同類型的網絡
(異構網)互連的任務,也需要完成擁塞控制的功能。

③傳輸層:對應于OSI參考模型的傳輸層,為應用層實體提供端到端的通信功能,保證了數據包的
順序傳送及數據的完整性,該層定義了兩種服務質量不同的協議:傳輸控制協議TCP(transmission
 control protocol)和用戶數據報協議UDP(user datagram protocol)。

④應用層:對應于OSI參考模型的會話層、表示層和應用層,面向不同的網絡應用引入了不同的
應用層協議,如:文件傳輸協議(File Transfer Protocol,FTP)、虛擬終端協議(TELNET)、
超文本鏈接協議(Hyper Text Transfer Protocol,HTTP)等。

TCPIP七層.gif

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

(1)vim /etc/sysconfig/network
    添加hostname
(2)vim /etc/sysconfig/network-script/ifcfg-eth0
    指定IPADDR,GETWAY,NATMARSK,DNS,BOOTPROTO=static,ONBOOT=yes
(3)service network restart

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

DHCP
vim /etc/sysconfig/network-script/ifcfg-eth0
ifconfig INTERFACE IP netmask MASK
ip addr { add | del } IFADDR dev STRING

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

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

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

#!/bin/bash
#

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

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

DEVICE                    #網卡名
BOOTPROTO                 #ip地址分配方式, dhcp、static
HWADDR                    #MAC地址
NM_CONTROLLED="yes"       #network mamager參數,
ONBOOT                    #網卡是否開機激活
TYPE                      #網絡類型
IPV6INIT=no               #禁止IPV6
USERCTL=no                #是否允許非root用戶控制該設備,為no,只能root用戶更改
IPADDR=                   #IP ADDR
GATEWAY                   #gatway地址
NETMASK                   #掩碼
DNS1                      #dns1地址
DNS2                      #dns2地址

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

ifconfig eth0:0 192.168.0.22/24 up
ip addr add 192.168.100.124/24 dev eth0:0
復制為/etc/sysconfig/network-scripts/ifcfg-eth0:0,
然后更改配置文件內的網卡名為eth0:0,然后更換新的IP地址,重啟動網卡

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

			ifconfig命令
				ifconfig [interface]
					# ifconfig -a
					# ifconfig INTERFACE [up|down]
       			ifconfig interface [aftype] options | address ...
       				# ifconfig INTERFACE IP/mask [up]
       				# ifconfig INTERFACE IP netmask MASK
       		route命令
       			路由管理命令
       				查看:route -n
       				添加:route add
       					route add  [-net|-host]  target [netmask Nm] [gw Gw] [[dev] If]

       						目標:192.168.1.3  網關:172.16.0.1
       						~]# route add -host 192.168.1.3 gw 172.16.0.1 dev eth0

       						目標:192.168.0.0 網關:172.16.0.1
       						~]# route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1 dev eth0
       						~]# route add -net 192.168.0.0/24 gw 172.16.0.1 dev eth0

       						默認路由,網關:172.16.0.1
       						~]# route add -net 0.0.0.0 netmask 0.0.0.0 gw 172.16.0.1
       						~]# route add default gw 172.16.0.1

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

       						目標:192.168.1.3  網關:172.16.0.1
       						~]# route del -host 192.168.1.3

       						目標:192.168.0.0 網關:172.16.0.1
       						~]# route del -net 192.168.0.0 netmask 255.255.255.0

       			netstat命令:
       				netstat - Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships

       				顯示網絡連接:
       					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

       				顯示路由表:
       					netstat  {--route|-r} [--numeric|-n]
       						-r: 顯示內核路由表
       						-n: 數字格式

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

       						# netstat -i
       						# netstat -I IFACE  

		ip命令:
			ip - show / manipulate routing, devices, policy routing and tunnels

			ip [ OPTIONS ] OBJECT { COMMAND | help }

				OBJECT := { link | addr | route }

			link OBJECT:
				ip link - network device configuration

					set
						dev IFACE
						可設置屬性:
							up and down:激活或禁用指定接口;

					show
						[dev IFACE]:指定接口
						[up]:僅顯示處于激活狀態的接口

				ip address - protocol address management

					ip addr { add | del } IFADDR dev STRING
						[label LABEL]:添加地址時指明網卡別名
						[scope {global|link|host}]:指明作用域
							global: 全局可用;
							link: 僅鏈接可用;
							host: 本機可用;
						[broadcast ADDRESS]:指明廣播地址

						例如:
						ip addr add 192.168.1.111/24 dev eth0 label eth0:0

					ip address show - look at protocol addresses
						[dev DEVICE]
						[label PATTERN]
						[primary and secondary]

					ip address flush - flush protocol addresses
						使用格式同show

				ip route - routing table management

					ip route add
						添加路由: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 delete
						刪除路由:ip route del TARGET 

					ip route show
					ip route flush
						[dev IFACE]
						[via PREFIX]

		ss命令:
			格式:ss [OPTION]... [FILTER]
				選項:
					-t: tcp協議相關
					-u: udp協議相關
					-w: 裸套接字相關
					-x:unix sock相關
					-l: listen狀態的連接
					-a: 所有
					-n: 數字格式
					-p: 相關的程序及PID
					-e: 擴展的信息
					-m:內存用量
					-o:計時器信息

					FILTER := [ state TCP-STATE ] [ EXPRESSION ]

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

CentOS系統上rpm命令管理程序包:
	安裝、卸載、升級、查詢、校驗、數據庫維護

	安裝:
		rpm {-i|--install} [install-options] PACKAGE_FILE ...
			-v: verbose
			-vv: 
			-h: 以#顯示程序包管理執行進度;每個#表示2%的進度

			rpm -ivh PACKAGE_FILE ...

				[install-options]
					--test: 測試安裝,但不真正執行安裝過程;dry run模式;
					--nodeps:忽略依賴關系;
					--replacepkgs: 重新安裝;

					--nosignature: 不檢查來源合法性;
					--nodigest:不檢查包完整性;

					--noscipts:不執行程序包腳本片斷;具體分為以下四類:(可單獨選擇某類)
						%pre: 安裝前腳本; --nopre
						%post: 安裝后腳本; --nopost
						%preun: 卸載前腳本; --nopreun
						%postun: 卸載后腳本;  --nopostun

	升級:
		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: 強行升級;

		注意:
			(1)uname -r 不要對內核做升級操作;Linux支持多內核版本并存,因此,對直接安裝新版本內核
			(2) 如果原程序包的配置文件安裝后曾被修改,升級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留

	查詢:
		rpm {-q|--query} [select-options] [query-options]

		[select-options]
			-a: 所有包
			-f: 查看指定的文件由哪個程序包安裝生成
			
		# rpm -qf /etc/fstab
		setup-2.5.58-9.el5	
		
			-p /PATH/TO/PACKAGE_FILE:針對尚未安裝的程序包文件做查詢操作;
			查詢尚未安裝的程序包
			rpm -qlp /PATH/TO/PACKAGE_FILE

			--whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個包所提供;
			--whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴;

		[query-options]
			--changelog:查詢rpm包的changlog (制作的,非作者發布的)
			-c: 查詢程序的配置文件
			-d: 查詢程序的生成文檔
			-i: information
			-l: 查看指定的程序包安裝后生成的所有文件;
			--scripts:程序包自帶的腳本片斷
			-R: 查詢指定的程序包所依賴的CAPABILITY;
			--provides: 列出指定程序包所提供的CAPABILITY;
			--conflicts:列出創建包與哪些包可能沖突

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

	卸載:
		rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
           [--notriggers] [--test] PACKAGE_NAME ...


    校驗:
    	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

	包來源合法性驗正及完整性驗正:
		完整性驗正:SHA256
		來源合法性驗正:RSA


		公鑰加密:
			對稱加密:加密、解密使用同一密鑰;
			非對稱加密:密鑰是成對兒的,
				public key: 公鑰,公開所有人
				secret key: 私鑰, 不能公開


		導入所需要公鑰:
			rpm --import /PATH/FROM/GPG-PUBKEY-FILE

			CentOS 7發行版光盤提供的密鑰文件:RPM-GPG-KEY-CentOS-7

	數據庫重建:
		rpm {--initdb|--rebuilddb}
			initdb: 初始化
				如果事先不存在數據庫,則新建之;否則,不執行任何操作;

			rebuilddb:重建
				無論當前存在與否,直接重新創建數據庫;

回顧:Linux程序包管理的實現、rpm包管理器

	rpm命令實現程序管理:
		安裝:-ivh, --nodeps, --replacepkgs
		卸載:-e, --nodeps
		升級:-Uvh, -Fvh, --nodeps, --oldpackage
		查詢:-q, -qa, -qf, -qi, -qd, -qc, -q --scripts, -q --changlog, -q --provides, -q --requires
		校驗:-V

		導入GPG密鑰:--import, -K, --nodigest, --nosignature
		數據庫重建:--initdb, --rebuilddb

Linux程序包管理(2)

	CentOS: yum, dnf

	URL: ftp://172.16.0.1/pub/	

	YUM: yellow dog, Yellowdog Update Modifier

	yum repository: yum repo
		存儲了眾多rpm包,以及包的相關的元數據文件(放置于特定目錄下:repodata);

		文件服務器:
			ftp://
			http://
			nfs://
			file:///

	yum客戶端:
		配置文件:
			/etc/yum.conf:為所有倉庫提供公共配置
			/etc/yum.repos.d/*.repo:為倉庫的指向提供配置

		倉庫指向的定義:
		man yum.conf
		[repositoryID]
		name=Some name for this repository
		baseurl=url://path/to/repository/
		enabled={1|0}   是否啟用
		gpgcheck={1|0}  是否檢查源文件合法性和完整性
		gpgkey=URL
		enablegroups={1|0}
		failovermethod={roundrobin|priority}
			默認為:roundrobin,意為隨機挑選;
		cost=
			默認為1000


		教室里的yum源:http://172.16.0.1/cobbler/ks_mirror/CentOS-6.6-x86_64/
		CentOS 6.6 X84_64 epel: http://172.16.0.1/fedora-epel/6/x86_64/

	yum命令的用法:
		yum [options] [command] [package ...]

       command is one of:
        * install package1 [package2] [...]
        * update [package1] [package2] [...]
        * update-to [package1] [package2] [...]
        * check-update 
        * upgrade [package1] [package2] [...]
        * upgrade-to [package1] [package2] [...]
        * distribution-synchronization [package1] [package2] [...]
        * remove | erase package1 [package2] [...]
        * list [...]
        * info [...]
        * provides | whatprovides feature1 [feature2] [...]
        * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
        * makecache
        * groupinstall group1 [group2] [...]
        * groupupdate group1 [group2] [...]
        * grouplist [hidden] [groupwildcard] [...]
        * groupremove group1 [group2] [...]
        * groupinfo group1 [...]
        * search string1 [string2] [...]
        * shell [filename]
        * resolvedep dep1 [dep2] [...]
        * localinstall rpmfile1 [rpmfile2] [...]
           (maintained for legacy reasons only - use install)
        * localupdate rpmfile1 [rpmfile2] [...]
           (maintained for legacy reasons only - use update)
        * reinstall package1 [package2] [...]
        * downgrade package1 [package2] [...]
        * deplist package1 [package2] [...]
        * repolist [all|enabled|disabled]
        * version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]
        * history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
        * check
        * help [command]

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

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

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

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

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

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

    檢查可用升級:
    	check-update

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

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

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

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

    構建緩存:
    	makecache

    搜索:
    	search string1 [string2] [...]

    	以指定的關鍵字搜索程序包名及summary信息;

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

    查看yum事務歷史:
    	history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]

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

    包組管理的相關命令:
        * groupinstall group1 [group2] [...]
        * groupupdate group1 [group2] [...]
        * grouplist [hidden] [groupwildcard] [...]
        * groupremove group1 [group2] [...]
        * groupinfo group1 [...]

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

    yum的repo配置文件中可用的變量:
    	$releasever: 當前OS的發行版的主版本號;
    	$arch: 平臺;
    	$basearch:基礎平臺;
    	$YUM0-$YUM9

    	http://mirrors.magedu.com/centos/$releasever/$basearch/os

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

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

    如何使用光盤當作本地yum倉庫:
    	(1) 掛載光盤至某目錄,例如/media/cdrom
    		# mount -r -t iso9660 /dev/cdrom /media/cdrom
    	(2) 創建配置文件
    	[CentOS7]
    	name=
    	baseurl=file:///
    	gpgcheck=0
    	enabled=

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

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

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

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

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

#!/bin/bash
#
ls /etc/rc.d/rc3.d/K*|awk '{printf "%s Stop \n", $1}'|awk -F'/' '{print $NF}'
ls /etc/rc.d/rc3.d/S*|awk '{printf "%s Start \n", $1}'|awk -F'/' '{print $NF}'
k_lines=`ls /etc/rc.d/rc3.d/K*|awk '{print NR}'|tail -1`
s_lines=`ls /etc/rc.d/rc3.d/S*|awk '{print NR}'|tail -1`
echo "k start lines is $k_lines"
echo "s start lines is $s_lines"

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

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

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

[root@www shell]# cat sumuid.sh 
#!/bin/bash
#

declare -i sum_uid

read -p "Please enter users' name:" u_in

for u_test in $u_in;do
	if id $u_test &> /dev/null;then
		sum_uid+=`id $u_test | awk '{print $1}' | awk -F'=' '{print $2}' | awk -F'(' '{print $1}'`
	else
		echo  "$user does not exist! Quit..."
		exit 1
	fi
done

echo "The uid sum is $sum_uid"

14、寫一個腳本

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

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

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

    #!/bin/bash
    #
    declare -i f_sum=0;b_sum=0;c_sum=0;d_sum=0;l_sum=0;p_sum=0;s_sum=0
    for d_in in $*;do
        if ! [ -d $d_in ];then
        echo -e "\n$d_in is no such dir"
            else
            tree $d_in
            for f_test in $(ls $d_in);do
                if [ -L "$d_in/$f_test" ];then
                    let l_sum++
                elif [ -b "$d_in/$f_test" ];then
                    let b_sum++
                elif [ -c "$d_in/$f_test" ];then
                    let c_sum++
                elif [ -d "$d_in/$f_test" ];then
                    let d_sum++
                elif [ -f "$d_in/$f_test" ];then
                    let f_sum++
                elif [ -p "$d_in/$$f_test" ];then
                   let p_sum++
                elif [ -S "$d_in/$f_test" ];then
                    let s_sum++
                fi
            done
        fi
    done
    echo -e "\ndir is $d_sum\nf file is $f_sum\nb file is $b_sum\nc file is $c_sum\nl file is $l_sum\np file is $p_sum\ns file is $s_sum"

15、寫一個腳本

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

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

#!/bin/bash
#
if [ $# -lt 1 ];then
    echo "At least one username"
    exit 1
fi
if id $1 &> /dev/null;then
    uid=$(grep "^\<$1\>" /etc/passwd | cut -d: -f3)
    if [ $uid -ge 500 ];then
        echo "$1 is regular user"
    else
        echo "$1 is system user"
    fi
else
    echo "$1 is not exists"
fi

16、寫一個腳本

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

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

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

#!/bin/bash
#
declare -i num
for((i=1;i<11;i++)),do
    if ! id user$i &> /dev/null;then
        useradd user$i
        echo user$i:user$i | chpasswd
        let num++
    fi
done
echo "Add $num users!"

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

#!/bin/bash
#

for i in { 20..100 };do
    ping -c 1 -w 1 172.16.250.$i &> /dev/null
    if [ $? -eq 0 ] ; then
        echo -e " 172.16.250.$i is online!"
    fi
done

18、打印九九乘法表;

#!/bin/bash
#

for ((i=1;i<=9;i++)){
    for((j=1;j<=i;j++));do
        echo -e -n "$j*$i=$(($i*$j))\t"
    done
    echo 
}

原創文章,作者:N21-孟然,如若轉載,請注明出處:http://www.www58058.com/41003

(0)
N21-孟然N21-孟然
上一篇 2016-09-19 13:48
下一篇 2016-09-19 13:48

相關推薦

  • 第八周

    1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。 網橋(Bridge)是早期的兩端口二層網絡設備,用來連接不同網段。網橋的兩個端口分別有一條獨立的交換信道,不是共享一條背板總線,可隔離沖突域。網橋比集線器(Hub)性能更好,集線器上各端口都是共享同一條背板總線的。后來,網橋被具有更多端口、同時也可隔離沖突域的交換機(Switch…

    Linux干貨 2016-09-19
  • 優秀程序員的十個習慣

    在這個世界上,有數百萬的人熱衷于軟件開發,他們有很多名字,如:軟件工程師(Software Engineer),程序員(Programmer),編碼人(Coder),開發人員(Developer)。經過一段時間后,這些人也許能夠成為一個優秀的編碼人員,他們會非常熟悉如何用計算機語言來完成自己的工作。但是,如果你要成為一個優秀的程序員,你還可以需要有幾件事你需…

    Linux干貨 2015-04-01
  • Linux下inode理解及軟、硬鏈接初探

    1、Inode是什么? 要理解inode,要從文件儲存說起。 文件由元數據和數據構成。 文件儲存在硬盤上,最小的存儲單位叫做“扇區(Sector)”。每個扇區存儲512字節。操作系統讀取硬盤時,不會一個扇區一個扇區地讀取,這樣非常低效;而是一次性連續讀取多個扇區,即一次性讀取一個“塊(block)”。“塊”由多個扇區組成,常見的大小有1K、2K、4K等,其中…

    Linux干貨 2016-07-29
  • Linux的發展史

    引言: 開源是什么?什么是Unix 、Linux ?這兩種操作系統又有什么關聯? ?   大家當前在用最常見的電腦系統是眼前的Windows ,但為何我們要花學習Linux 的發展史? 通過下面的介紹,我們能大致了解互聯網發展的一些問題,以及Linux和Unix的基本概念、歷史、發展情況。 一、操作系統介紹 內核(kernel)負責控制硬…

    Linux干貨 2016-10-19
  • Linux文本處理工具和正則表達式

    概述:     Linux核心哲學思想中很重硬件要的一條內容就是一切皆文件,在Linux系統上,無論硬件、軟件、配置文件等等一切,都以文件形式呈現出來。一般文件類型有:普通文件、目錄文件、鏈接文件、管道文件、套接字文件、字符設備文件、塊設備文件等。而普通文件里面又有一些文本文件、二進制文件等細分化的文件類型,而我們日常…

    Linux干貨 2016-08-07
  • 馬哥教育網絡版21班第四周作業

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其他用戶均沒有任何訪問權限 [root@localhost ~]# cp -rf /etc/skel/ /home/tuser1 [root@localhost ~]# chmod&n…

    Linux干貨 2016-08-05

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-09-19 18:07

    排版不是很好看啊,圖如果是自己畫的話,那會非常棒

欧美性久久久久