马哥教育网络班20期+第8周课程练习

1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。

2、IP地址的分类有哪些?子网掩码的表示形式及其作用

3、计算机网络的分成模型有哪些(OSI模型和TCP/IP模型),每一层的功能及涉及到的物理设备有哪些。

4、如何将Linux主机接入到TCP/IP网络,请描述详细的步骤。(手动指定的方式)

5、为Linux主机配置网络信息的方式有哪些,请描述各个过程。

6、写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态;

在线的主机使用绿色显示;

不在线的主使用红色显示;

7、详细描述每个网络接口的配置文件中各个参数的含义和其所对应的值;

8、如何给网络接口配置多个地址,有哪些方式?

9、常用的网络管理类工具有哪些,并用示例形式描述他们的使用方法。

10、Linux系统软件包管理方法(安装、升级、卸载等操作)有哪些,以及如何管理的。

11、如何使用发行版光盘作为yum repository,请描述该过程。

12、写一个脚本,完成以下功能

(1) 假设某目录(/etc/rc.d/rc3.d/)下分别有K开头的文件和S开头的文件若干;

(2) 显示所有以K开头的文件的文件名,并且给其附加一个stop字符串;

(3) 显示所有以S开头的文件的文件名,并且给其附加一个start字符串;

(4) 分别统计S开头和K开头的文件各有多少;

13、写一个脚本,完成以下功能

(1) 脚本能接受用户名作为参数;

(2) 计算此些用户的ID之和;

14、写一个脚本

(1) 传递一些目录给此脚本;

(2) 逐个显示每个目录的所有一级文件或子目录的内容类型;

(3) 统计一共有多少个目录;且一共显示了多少个文件的内容类型;

15、写一个脚本

通过命令行传递一个参数给脚本,参数为用户名

如果用户的id号大于等于500,则显示此用户为普通用户;

16、写一个脚本

(1) 添加10用户user1-user10;密码同用户名;

(2) 用户不存在时才添加;存在时则跳过;

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

17.  打印九九乘法表;

1.  请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。

(1)网桥(Bridge):
工作于数据链路层,实现多个lan之间数据的转发,隔离冲突域,类似二层交换机。
(2)集线器(HUB)
工作于物理层,实现设备的接入,数据信号放大、中转,共享信道。把一个端口接收的所有信号向所有端口分发出去。
(3)二层交换机(Switch):
工作于数据链路层,可连接多个lan,根据帧的mac来转发数据,隔离冲突域,端口较多。
(4)三层交换机(Switch):
工作于二、三层,可连接多个网段,实现数据包路由和部分路由器功能,加快大型局域网内部的数据交换,能够做到一次路由,多次转发;
(5)路由器(Router)
工作于网络层,实现不同网段数据的转发,通过路由表把数据(IP 报文)传送到正确的网络隔离广播域,多应用于广域网。

2.  IP地址的分类有哪些?子网掩码的表示形式及其作用

(1)A类:(0) 0 000 0000 - 0 111 1111: 1-127
由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”, 范围:从1.0.0.0 到126.0.0.0。可用的B类网络数:126,每个网络中的主机数:2^24-2(全1为广播地址,全0为网络地址)默认子网掩码:255.0.0.0;私网地址:10.0.0.0/8
(2)B类:(10) 10 00 0000 - 10 11 1111:128-191
由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是“10”,范围:从128.0.0.0到191.255.255.255。可用的B类网络数:2^14,每个网络中的主机数:2^16-2;默认子网掩码:255.255.0.0;私网地址:172.16.0.0/16-172.31.0.0/16
(3)C类:(110)110 0 0000 - 110 1 1111: 192-223
由3字节的网地址和1字节的主机地址组成,网络地址的最高位必须是“110”。范围从192.0.0.0到223.255.255.255。可用的C类网络数:2^21,每个网络中的主机数:2^8-2;默认子网掩码:255.255.255.0;私网地址:192.168.0.0/24-192.168.255.0/24
(4)D类:(1110) 1110 0000 - 1110 1111: 224-239  组播地址,用于多点广播(Multicast)。
第一个字节以“1110”开始,它是一个专门保留的地址。它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。
(5) E类:(11110) 保留地址,240~255
以“11110”开始,为将来使用保留。
全零(“0.0.0.0”)地址对应于当前主机。全“1”的IP地址(“255.255.255.255”)是当前子网的广播地址。
子网掩码:
A类地址子网掩码为255.0.0.0,B类为255.255.0.0,C类为255.255.255.0
将某个IP地址划分成网络地址和主机地址两部分,与IP地址相与可计算出的相应IP的网络位。

3、计算机网络的分成模型有哪些(OSI模型和TCP/IP模型),每一层的功能及涉及到的物理设备有哪些。

ip_image001.jpeg

(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)等。

4.  如何将Linux主机接入到TCP/IP网络,请描述详细的步骤。(手动指定的方式)

# vim /etc/sysconfig/network-scripts/ifcfg-eth0:
在文件里面添加修改以下内容:
方法一:(动态分配DHCP)
DEVICE=eth0
HWADDR=00:0C:29:61:27:D6
TYPE=Ethernet
UUID=bbc0c0d2-271c-45ea-b14e-293fe9bcd9c4
NM_CONTROLLED=yes
ONBOOT=yes  //开机自启动 
BOOTPROTO=dhcp # 动态获取IP
方法二:(配置静态IP)
ONBOOT=yes                //开机自启动        
BOOTPROTO=static         //静态配置
IPADDR=192.168.192.132     //IP地址
NETMASK=255.255.255.0    //子网掩码
GATEWAY=192.168.192.1       //网关
DNS1=8.8.8.8                //主DNS服务器(谷歌域名)
DNS2=114.114.114.114      //次DNS服务器(国内域名)

5.  为Linux主机配置网络信息的方式有哪些,请描述各个过程。

(1)编辑配置文件:# vim /etc/sysconfig/network-scripts/ifcfg-IFACE
(修改信息如上题所示)
图形界面配置:
(2)进入tui(text user interface):# system-config-network-tui
或者:#setup选择网络配置
重启网络服务方能生效:#service network restart
(3)直接使用命令配置:
(但这样设置是临时性的,一旦重启网卡或者重启服务器还是会被还原。)
① 使用ipconfig命令:
# ifconfig eth0 192.168.192.132 netmask 255.255.255.0(此法立即生效)
# route add –host 192.168.193.132 gw 192.168.192.1 dev eth0 (修改网关地址)
②使用ip命令
# ip addr add 192.168.192.132/24 dev eth0
# ip link set dev eth0 up(启用eth0接口)

6.  写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态;

在线的主机使用绿色显示;不在线的主使用红色显示;

#!/bin/bash
for i in {1..254};do # ping -w 1 表示1s后结束
    if ping –w 1 172.16.250.$i &> /dev/null;then
        echo -e "\033[32m 172.16.250.$i is OK. \033[0m"
    else
        echo -e "\033[31m 172.16.250.$i can’t connecte. \033[0m"
    fi
done

7.  详细描述每个网络接口的配置文件中各个参数的含义和其所对应的值;

IP、MASK、GW、DNS相关配置文件/etc/sysconfig/network-scripts/ifcfg-IFACE
路由相关的配置文件:/etc/sysconfig/network-scripts/route-IFACE
 
(1)# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0               # 接口名
HWADDR=00:0C:29:61:27:D6 # 对应的设备的MAC地址;
BOOTPROTO=static # 激活此设备时使用的地址配置协议,
常用的dhcp, static, none, bootp;
NM_CONTROLLED=no # NM是NetworkManager的简写;
此网卡是否接受NM控制;CentOS6建议为“no”;
ONBOOT=yes # 在系统引导时是激活此设备;
TYPE=Ethernet # 接口类型;常见有的Ethernet, Bridge;
UUID bbc0c0d2-271c-45ea-b14e-293fe9bcd9c4 # 设备的惟一标识;
IPADDR=192.168.193.132 # IP地址;
NETMASK=255.255.255.0  # 子网掩码;
GATEWAY=192.168.193.1 # 默认网关;
DNS1=8.8.8.8                //主DNS服务器(谷歌域名)
DNS2=114.114.114.114      //次DNS服务器(国内域名)
USERCTL=no # 普通用户是否可控制此设备;
PEERDNS=no # 如果BOOTPROTO的值为“dhcp”,是否允许dhcp server分配的dns服务器指向信息直接覆盖至/etc/resolv.conf文件中;
 
(2)# vim /etc/sysconfig/network-scripts/route-eth0
ADDRESS0=192.168.193.131
NETMASK0=255.255.255.0
GATEWAY0=192.168.193.0
两种风格:
 (1) TARGET via GW
 (2) 每三行定义一条路由(#为0、1、2、3、4)
  ADDRESS#=TARGET # IP地址
  NETMASK#=mask   # 子网掩码
  GATEWAY#=GW     # 网关

8.  如何给网络接口配置多个地址,有哪些方式?

具体方法可参考第5题,将其接口名换成接口别名,即可给网络接口配置多个地址
ifconfig:
# ifconfig IFACE_ALIAS IP netmask MASK
ip
# ip addr add IPADDR dev IFACE_ALIAS
配置文件
# vim /etc/sysconfig/network-scripts/ifcfg-IFACE_ALIAS
注意:网关别名不能使用dhcp协议引导,IFACE_ALIAS是接口别名,如eth0:0。

9.  常用的网络管理类工具有哪些,并用示例形式描述他们的使用方法。

1、ifconfig:配置或查看系统IP情况
[root@localhost ~]# ifconfig  # 显示所有处于活动状态接口的信息
[root@localhost ~]# ifconfig –a # 显示所有接口信息
[root@localhost ~]# ifconfig eth0 # 只显示eth0接口信息
[root@localhost ~]# ifconfig eth0 192.168.192.132/24 # 配置eth0接口的IP和子网掩码
[root@localhost ~]# ifconfig eth0 192.168.192.132 netmask 255.255.255.0 # 配置IP和子网掩码
2、ip:配置网络属性
ip - show / manipulate routing(显示/配置路由), devices(路由), policy routing and tunnels(测试路由和设备)
ip [ OPTIONS ] OBJECT { COMMAND | help }
OBJECT := { link | addr | route }
ip link - network device configuration(网络设备配置)
ip link set dev IFACE up and down:激活或禁用指定接口;
ip link show [dev IFACE] [up]:仅显示处于激活状态的接口
ip address - protocol address management(协议地址管理工具)
ip addr { add | del } IFADDR dev STRING [label LABEL] [scope {global|link|host}] [broadcast ADDRESS]
[label LABEL]:添加地址时指明网卡别名
[scope {global|link|host}]:指明作用域(global: 全局可用;link: 仅链接可用;host: 本机可用;)
[broadcast ADDRESS]:指明广播地址
ip address show - look at protocol addresses(查看地址协议)
ip addr show [dev DEVICE] [label PATTERN] [primary and secondary]
ip address flush - flush protocol addresses(清除地址(使用格式同show))
ip route - routing table management(管理路由表)
添加路由: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 show
清空路由表:ip route flush [dev IFACE] [via PREFIX]
例:
1)ip link (network device configuration)网络设备配置
[root@localhost ~]# ip link show up # 显示处于启动状态的接口
[root@localhost ~]# ip link show dev eth0 # 查看指定接口eth0
[root@localhost ~]# ip link show # 显示接口信息
2)ip addr (protocol address management)协议地址管理工具
[root@localhost ~]# ip addr add 192.168.192.132/24 dev eth0 # 添加eth0地址
[root@localhost ~]# ip addr replace 192.168.192.136/24 dev eth0 # 添加eth0地址
注意:添加新地址时,应先删除原有地址
[root@localhost ~]# ip addr del 192.168.192.132/24 dev eth0 #删除eth0地址
[root@localhost ~]# ip addr del 192.168.192.132/24 dev eth0 label 'eth0:0'
#添加地址时指明网卡别名为eth0:0
ip addr show (look at protocol addresses) # 查看地址协议
[root@localhost ~]# ip addr show dev eth0 # 查看eth0的地址协议
ip addr  flush(flush protocol addresses) 清除地址(使用格式同show)
[root@localhost ~]# ip addr flush dev echo label 'eth0:0’ # 清除地址
3)ip route(routing table management) 管理路由表
添加路由: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 show
清空路由表:ip route flush [dev IFACE] [via PREFIX]
[root@localhost ~]# ip route add 192.168.1.3 via 192.168.192.1 dev eth0 # 添加主机路由
#若添加为主机路由IP,则不能加掩码,若为网络路由IP,则需加掩码
[root@localhost ~]# ip route add 192.168.192.132/24 via 192.168.192.1 dev eth0 # 添加网络路由
[root@localhost ~]# ip route add default via 192.168.192.1 dev eth0 # 添加网关
[root@localhost ~]# ip route del 192.168.1.3 # 删除路由
[root@localhost ~]# ip route show # 显示路由
[root@localhost ~]# ip route flush dev eth0 # 清空路由表
3、 route:路由管理命令
1)查看路由表信息:
# route -n
2)添加路由表
route add  [-net|-host]  target [netmask Nm] [gw Gw] [[dev] If]
-net:网络路由 -host:主机路由 netmask:子网掩码 gw:网关 dev:接口
(a)目标:192.168.1.3  网关:172.16.0.1
# route add -host 192.168.1.3 gw 172.16.0.1 dev eth0
(b)目标: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
(c)默认路由,网关: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
3)删除路由表
#route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If]
(a)目标:192.168.1.3  网关:172.16.0.1
# route del -host 192.168.1.3
(b)目标:192.168.0.0 网关:172.16.0.1
# route del -net 192.168.0.0 netmask 255.255.255.0
4、 netstat:查看当前系统的网络状态
Print network connections(网络连接), routing tables(路由表), interface statistics(网络接口统计数据), masquerade connections(伪装连接), and multicast memberships(组播成员)
1)显示网络连接:
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
[root@localhost ~]# netstat –tan # 所有TCP相关的进度
[root@localhost ~]# netstat –tan # 所有UDP相关的进度
[root@localhost ~]# netstat –tnl # TCP处于监听状态的连接
[root@localhost ~]# netstat –unl # UDP处于监听状态的连接
2)显示路由表:
netstat  {--route|-r} [--numeric|-n]
-r: 显示内核路由表;-n: 数字格式
[root@localhost ~]# netstat –rnv # 以数字格式详细显示内核路由表
3) 显示接口统计数据:
netstat  {--interfaces|-I|-i} [iface] [--all|-a] [--extend|-e] [--program|-p] [--numeric|-n]
[root@localhost ~]# netstat –i # 所有接口信息
# netstat -IIFACE 
[root@localhost ~]# netstat –Ieth0 # 显示指定接口eth0信息
5、ss:网络状态查看工具(可取代netstat,但比netstat快)
格式:ss [OPTION]... [FILTER]
1) OPTION:-t: tcp协议相关;-u: udp协议相关;-w: 裸套接字相关;-x:unix sock相关;-l: listen状态的连接;-a: 所有;-n: 数字格式;-p: 相关的程序及PID;
-e: 扩展的信息;-m:内存用量;-o:计时器信息
2) FILTER := [ state TCP-STATE ] [ EXPRESSION ]
(a)state TCP-STATE (即TCP的常见状态):
tcp finite state machine(tcp的有限状态机):
LISTEN: 监听;ESTABLISHED:已建立的连接;FIN_WAIT_1;FIN_WAIT_2
SYN_SENT(SYN已发送);SYN_RECV(SYN已接收);CLOSED(已关闭);
(b)EXPRESSION(表达式):
源端口dport =  目标端口sport =
例:`(dport = :ssh or sport = :ssh )`
常用组合:-tan, -tanl, -tanlp, -uan
[root@localhost ~]# ss –tan # 所有TCP相关的进度
[root@localhost ~]# ss –tanl # 显示TCP的listen监听状态的连接
[root@localhost ~]# ss –tanlp # TCP listen监听状态连接的相关的程序及PID
[root@localhost ~]# ss –uan #所有UDP相关的进度
6、CentOS 7上的nmcli命令
NetworkManager 可以用于以下类型的连接:Ethernet,VLANS,Bridges,Bonds,Teams,Wi-Fi,mobile boradband(如移动3G)以及 IP-over-InfiniBand。针对与这些网络类型,NetworkManager 可以配置他们的网络别名,IP 地址,静态路由,DNS,VPN连接以及很多其它的特殊参数。
nmcli:网络管理命令行接口:NetworkManager Command-Line Interface
nmcli  [ OPTIONS ] OBJECT { COMMAND | help }
device - show and manage(管理) network interfaces(网络接口)
connection - start, stop, and manage network connections(管理网络连接)
如何修改IP地址等属性:
#nmcli connection modify IFACE [+|-]setting.property value(+为增加,-为删除)
setting.property:ipv4.addresses;ipv4.gateway;ipv4.dns1;ipv4.method;manual。
[root@localhost ~]# nmcli general status
[root@localhost ~]# nmcli device status  # 查看接口状态
[root@localhost ~]# nmcli device show eno16777736  #查看eno16777736接口信息
[root@localhost ~]# nmcli connection show  # 显示当前可用状态连接
[root@localhost ~]# nmcli con modify eno16777736 +ipv4.addresses 192.168.192.132/24 # 修改IP
[root@localhost ~]# nmcli con down eno16777736 # 禁用
[root@localhost ~]# nmcli con up eno16777736   # 启用
[root@localhost ~]# ip addr show #可以查看到修改的IP已生效
[root@localhost ~]# nmcli con modify eno16777736 -ipv4.addresses 192.168.192.132/24  # 删除IP
[root@localhost ~]# nmcli con modify eno16777736 +ipv4.addresses 192.168.192.1
# 增加网关
[root@localhost ~]# nmcli con modify eno16777736 +ipv4.dns 114.114.114.114
#增加DNS
[root@localhost ~]# nmcli con down eno16777736;nmcli con up eno16777736 
 # 禁用并启用
[root@localhost ~]# nmcli dev show eno16777736 #可查看到修改已生效
7、CentOS 7上的nmtui命令
Nmtui:NetworkManager Text-User Interface网络接口配置tui工具
8、CentOS 7的hostnamctl命令(主机名称配置工具)
[root@localhost ~]# hostnamectl  # 查看主机名
[root@localhost ~]# hostnamectl set-hostname CentOS7
# 修改主机名为CentOS7
[root@localhost ~]# hostname # 查看主机名
9、网络客户端工具
1)  lftp(交互式文件传输工具,连入服务器后,可下载文件至本地)
# lftp [-p port] [-u user[,password]] SERVER
[root@localhost ~]# lftp 192.16.0.1
lftp >help # 帮助
lftp >cd /Sourses
lftp >ls # 列出该目录下所有文件
lftp >get 123.txt #下载一个文件至本地
lftp >mget * # 下载多个文件至本地
2)  ftp(较少使用)
3)  lftpget (get a file with ftp)
# lftpget URL (需要下载文件的URL)
4)  wget(通过互联网下载文件,常用,非交互式网络下载器)
wget [option]... [URL]...
    -q: 静默模式(不选会下载进度)
    -c: 断点续传
    -O: 保存位置
    --limit-rates=: 指定传输速率
# wget –r –tries=10 http://... –o log
# 下载失败,重复尝试10次,结果记录至日志中

10.  Linux系统软件包管理方法(安装、升级、卸载等操作)有哪些,以及如何管理的。(rpm和yum的使用)

Linux系统软件包管理方法:安装、升级、查询、卸载、校验、数据库维护
一、安装:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
           -v: verbose
           -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) 不要对内核做升级操作;Linux支持多内核版本并存,因此,对直接安装新版本内核;
(2) 如果原程序包的配置文件安装后曾被修改,长级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留;
三、查询:
rpm {-q|--query} [select-options] [query-options] [select-options]
    -a: 所有包
    -f: 查看指定的文件由哪个程序包安装生成
    -p /PATH/TO/PACKAGE_FILE:针对尚未安装的程序包文件做查询操作;
    --whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供;
    --whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖;
 [query-options]
           --changelog:查询rpm包的changlog
           -c: 查询程序的配置文件
           -d: 查询程序的文档
           -i: information(名称、版本、描述信息、安装日期、包大小、许可证、MIT...)
           -l: 查看指定的程序包安装后生成的所有文件;
           --scripts:程序包自带的脚本片断
           -R: 查询指定的程序包所依赖的CAPABILITY;
           --provides: 列出指定程序包所提供的CAPABILITY;
用法:
# rpm -qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE
# rpm -qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ...
# rpm -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(MD5码不同)
  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(能力不同)
六、数据库重建:
rpm {--initdb|--rebuilddb}
    initdb: 初始化
       如果事先不存在数据库,则新建之;否则,不执行任何操作;
    rebuilddb:重建
       无论当前存在与否,直接重新创建数据库;
七、管理程序包,yum的使用:
yum的命令行选项:
   --nogpgcheck:禁止进行gpg check;
   -y: 自动回答为“yes”;
   -q:静默模式;
    --disablerepo=repoidglob:临时禁用此处指定的repo;
    --enablerepo=repoidglob:临时启用此处指定的repo;
   --noplugins:禁用所有插件;
1、显示仓库列表:
      # yum repolist [all|enabled|disabled] [所有|启用|禁用]
2、显示程序包:
      # yum list [all | glob_exp1] [glob_exp2] [...](glob风格匹配符)
      # yum list {available|installed|updates} [glob_exp1] [...]{仓库中有尚未安装|已安装|可用升级包}
3、安装程序包:
  # yum install package1 [package2] [...]
  # yum reinstall package1 [package2] [...]  (重新安装)
4、 升级程序包:
  # yum update [package1] [package2] [...]
  # yum downgrade package1 [package2] [...] (降级)
5、检查可用升级:
  # yum check-update
6、卸载程序包:
  # yum remove | erase package1 [package2] [...](与之依赖的程序包也会被卸载)
7、查看程序包information:
  # yum info [...]
8、查看指定的特性(可以是某文件)是由哪个程序包所提供:
  # yum provides | whatprovides feature1 [feature2] [...]
9、清理本地缓存:
  # yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
               【程序包 | 元数据 |过期缓存 |rpm库 | 插件 |所有】
10、构建缓存:
  # yum makecache
11、搜索:
  # yum search string1 [string2] [...] 以指定的关键字搜索程序包名及summary信息;
12、查看指定包所依赖的capabilities:
  # yum deplist package1 [package2] [...]
13、查看yum事务历史:
  # yum history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
[list:默认;packages-list:包列表;summary摘要信息;stats统计数据]
14、安装及升级本地程序包:
  # yum localinstall rpmfile1 [rpmfile2] [...]
           (maintained for legacy reasons only - use install)
  # yum localupdate rpmfile1 [rpmfile2] [...]
           (maintained for legacy reasons only - use update)
15、包组管理的相关命令:
  # yum groupinstall group1 [group2] [...] (安装)
  # yum groupupdate group1 [group2] [...](升级)
  # yum grouplist [hidden] [groupwildcard] [...](显示)
  # yum groupremove group1 [group2] [...](移除)
  # yum groupinfo group1 [...](查看包组相关信息)
16、yum的repo配置文件中可用的变量:
             $releasever: 当前OS的发行版的主版本号;
             $arch: 平台;
             $basearch:基础平台;
             $YUM0-$YUM9
17、创建yum仓库:
# yum create repo [options] <directory>

11.  如何使用发行版光盘作为yum repository,请描述该过程。

(1)挂载光盘至某目录
[root@localhost ~]# mount -r -t iso9660 /dev/cdrom /media/cdrom
(2)修改yum源的配置文件/etc/yum.repo.d
[root@localhost ~]# cd /media/cdrom
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# vim local.repo # 建本地仓库
[base]
name=CentOS 7 Release 7.1.1503
baseurl=file://media/cdrom
enabled=1 # 启用此仓库
gpacheck=0 # 不检查
[root@localhost yum.repos.d]# yum clean all # 清除缓存
[root@localhost yum.repos.d]# yum repolist # 显示仓库列表
[root@localhost yum.repos.d]# yum list all #查看所有
[root@localhost yum.repos.d]# yum grouplist # 包组显示
[root@localhost yum.repos.d]# yum groupinstall # 安装包组

12.  写一个脚本,完成以下功能

(1) 假设某目录(/etc/rc.d/rc3.d/)下分别有K开头的文件和S开头的文件若干;

(2) 显示所有以K开头的文件的文件名,并且给其附加一个stop字符串;

(3) 显示所有以S开头的文件的文件名,并且给其附加一个start字符串;

(4) 分别统计S开头和K开头的文件各有多少;

#!/bin/bash
for file in $(ls /etc/rc.d/rc3.d | grep "^K");do
    echo "$file stop"
done
for file in $(ls /etc/rc.d/rc3.d | grep "^S");do
    echo "$file start"
done

13.  写一个脚本,完成以下功能

(1) 脚本能接受用户名作为参数;

(2) 计算这些用户的ID之和;

for user in $@;do
    uid=`grep "^$user" /etc/passwd | cut -d: -f3`
    let uidsum+=$uid
done
echo "users id total:$uidsum"

14.  写一个脚本

(1) 传递一些目录给此脚本;

(2) 逐个显示每个目录的所有一级文件或子目录的内容类型;

(3) 统计一共有多少个目录;且一共显示了多少个文件的内容类型;

#!/bin/bash
for dirname in $@;do
    for filename in `ls $dirname`;do
       if [ -z "$filename" ];then
           echo "Usage:Enter a file path."
           exit 2
       fi
       if [ ! -e $filename ];then
           echo "no such file."
           exit 3
       fi
       if [ -f $filename ];then
           echo "$filename is common file."
       elif [ -d $filename ];then
           echo "$filename is directory"
       elif [ -L $filename ];then
           echo "$filename is symbolic file."
       else
           echo "$filename is Other type."
       fi
       let filetotal++
    done
    let dirtotal++
done
echo "the directory total: $dirtotal"
echo "the file total: $filetotal"

15.  写一个脚本

通过命令行传递一个参数给脚本,参数为用户名

如果用户的id号大于等于500,则显示此用户为普通用户;

#!/bin/bash
if id $1&>/dev/null;then
    uid=`grep "^$1" /etc/passwd | cut -d: -f3`
    if [ $uid -ge 500 ];then
        echo "$1 is common user"
    else
        echo "$1 isn't  common user"
    fi
fi

16.  写一个脚本

(1) 添加10用户user1-user10;密码同用户名;

(2) 用户不存在时才添加;存在时则跳过;

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

#!/bin/bash
declare -i total=0
for i in {1..10};do
    if id user$i &> /dev/null;then
        echo "user$i exits."
    else
        useradd user$i
        if [ $? -eq 0 ];then
            echo "user$i" | passwd --stdin user$i &> /dev/null
            echo "Add user$i finished."
            let total++
        fi
    fi
done
echo "now add users total:$total"

17. 写一脚本,用ping命令测试172.16.250.20-172.16.250.100以内有哪些主机在线,将在线的显示出来;

#!/bin/bash
for i in {20..100};do
    if ping -w 1 172.16.250.$i &> /dev/null;then
        echo "172.16.250.$i is online."
    fi
done

18.  打印九九乘法表;

#!/bin/sh
for((i=1;i<10;i++));do
    for((j=1;j<=i;j++));do
        echo -n "$j*$i=$(($i*$j))   "
        if [ $j -eq $i ];then
            echo -e '\n'
        fi
   done
done

原创文章,作者:二极管,如若转载,请注明出处:http://www.178linux.com/26814

(0)
二极管二极管
上一篇 2016-08-02
下一篇 2016-08-02

相关推荐

  • 磁盘分区磁盘管理及挂载

    磁盘分区 fdisk提供交互式接口管理分区,操作均在内存中完成,没有直接同步到磁盘;直到使用w命令保存至磁盘中。 语法: 1.查看分区使用信息:     fdisk -l [-u] [device…]:列出指定磁盘设备上的分区情况; 2.管理分区    fdisk d…

    Linux干货 2016-08-31
  • Ansible应用介绍

    Ansible 简介 ansible是个什么东西呢?官方的title是“Ansible is Simple IT Automation”——简单的自动化IT工具。这个工具的目标有这么几项:自动化部署APP;自动化管理配置项;自动化的持续交互;自动化的(AWS)云服务管理。所有的这几个目标从本质上来说都是在一个台或者几台服务器上,执行一系列的命令而已。通俗的说…

    Linux干货 2015-07-03
  • 一个简单的负载均衡集群:web服务

    一个简单的负载均衡集群:以web服务为例 实验环境:三台主机(CentOS 7.3)             主机1:IP地址 172.18.0.88(Haproxy代理服务器)             主机2:IP地址 172.…

    Linux干货 2017-05-17
  • 练习

    练习 显示/proc/meminfo文件中以大小s开头的行;     显示/etc/passwd文件中不以/bin/bash结尾的行     找出/etc/passwd中的两位或三位数     显示/etc/grub2.cfg文件中,至少以一个空白字符开头的 且后面存非空白字符的行   &…

    Linux干货 2016-08-12
  • 引导加载程序grub的使用详解

    引导加载程序grub的使用详解 为运行于虚拟机上的CentOS 6添加一个新硬件,提供两个主分区 为硬盘建两个主分区;并为其安装grub 为硬盘的第一个主分区提供内核和ramdisk文件;为第二个分区提供rootfs 为rootfs提供bash、ls、cat程序以及所依赖的库文件 为grub提供配置文件 将新的硬盘设置为第一启动项并能够正常启动目标主机 1.…

    Linux干货 2017-09-04
  • linux中特殊符号用法

    1 #    #  管理员账户    $  普通账户   在脚本中 #也常出现在一行的开头,或者位于完整指令之后,这类情况表示符号后边是注解文字,不会被执行 例如     #!/bin/bash     #th…

    Linux干货 2016-08-15

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-02 11:50

    写的很好,排版还可以在漂亮一点,加油