1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。
| 网桥 | 将两个相似的网络连接起来,并对网络数据的流通进行管理。它工作于数据链路层,不但能扩展网络的距离或范围,而且可提高网络的性能、可靠性和安全性。 | 
| 集线器 | 主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上。它工作于OSI(开放系统互联参考模型)参考模型第一层,即“物理层”。 | 
| 二层交换机 | 工作于OSI模型的第2层(数据链路层),故而称为二层交换机。二层交换技术的发展已经比较成熟,二层交换机属数据链路层设备,可以识别数据包中的MAC地址信息,根据MAC地址进行转发,并将这些MAC地址与对应的端口记录在自己内部的一个地址表中。 | 
| 三层交换机 | 具有部分路由器功能的交换机,三层交换机的最重要目的是加快大型局域网内部的数据交换,所具有的路由功能也是为这目的服务的,能够做到一次路由,多次转发。对于数据包转发等规律性的过程由硬件高速实现,而像路由信息更新、路由表维护、路由计算、路由确定等功能,由软件实现。三层交换技术就是二层交换技术+三层转发技术。传统交换技术是在OSI网络标准模型第二层——数据链路层进行操作的,而三层交换技术是在网络模型中的第三层实现了数据包的高速转发,既可实现网络路由功能,又可根据不同网络状况做到最优网络性能。 | 
| 路由器 | 连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号。 路由器是互联网络的枢纽,又称网关设备(Gateway)是用于连接多个逻辑上分开的网络,所谓逻辑网络是代表一个单独的网络或者一个子网。当数据从一个子网传输到另一个子网时,可通过路由器的路由功能来完成。因此,路由器具有判断网络地址和选择IP路径的功能,它能在多网络互联环境中,建立灵活的连接,可用完全不同的数据分组和介质访问方法连接各种子网,路由器只接受源站或其他路由器的信息,属网络层的一种互联设备。路由和交换机之间的主要区别就是交换机发生在OSI参考模型第二层(数据链路层),而路由发生在第三层,即网络层。 | 
2、IP地址的分类有哪些?子网掩码的表示形式及其作用
| IP地址分为: A类: 1.0.0.1-126.255.255.254 网络数:126 每个网络中的主机数:2^24-2 默认子网掩码:255.0.0.0 私网地址:10.0.0.0/8-10.255.255.255/8 B类: 128.0.0.1-191.255.255.254 网络数:2^14 每个网络中的主机数:2^16-2 默认子网掩码:255.255.0.0 私网地址:172.16.0.0/16-172.31.255.255/16 C类: 192.0.0.1-223.255.255.254 网络数:2^21 每个网络中的主机数:2^8-2 默认子网掩码:255.255.255.0 私网地址:192.168.0.0/24-192.168.255.255/24 D类:组播 224.0.0.1-239.255.255.254 E类: 240.0.0.1-255.255.255.254 子网掩码:将IP地址划分为网络地址与主机地址,与IP地址相与可计算出相应主机的网络地址 | 
3、计算机网络的分成模型有哪些(OSI模型和TCP/IP模型),每一层的功能及涉及到的物理设备有哪些。
OSI七层模型从低到高分为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层;
| 物理层 | 主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等; | 
| 数据链路层 | 定义了如何让格式化数据以进行传输,以及如何让控制对物理介质的访问。这一层通常还提供错误检测和纠正,以确保数据的可靠传输; | 
| 网络层 | 在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择; | 
| 传输层 | 定义了一些传输数据的协议和端口号,如www端口为80,ftp端口为20、21等; | 
| 会话层 | 通过传输层建立数据传输的通路; | 
| 表示层 | 可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取; | 
| 应用层 | 为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务。 | 
TCP/IP模型分为四层,从高到低为应用层、传输层、互联网络层、网络接口层;
| 应用层 | 应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等; | 
| 传输层 | 在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收 | 
| 互联网络层 | 负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP); | 
| 网络接口层 | 对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。 | 
4、如何将Linux主机接入到TCP/IP网络,请描述详细的步骤。(手动指定的方式)
| [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE=Ethernet BOOTPROTO=static DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no IPV6INIT=no IPV6_AUTOCONF=no IPV6_DEFROUTE=no IPV6_PEERDNS=no IPV6_PEERROUTES=no IPV6_FAILURE_FATAL=no NAME=eth0 UUID=e440279d-0e7e-4f90-b961-7f97395f9685 DEVICE=eth0 ONBOOT=yes IPADDR=192.168.1.125 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=202.106.0.20 DNS2=8.8.8.8 | 
Centos 6
[root@localhost ~]# system-config-network-tui
[root@localhost ~]# setup
Centos 7
[root@localhost ~]# nmtui-edit
重新读取配置文件:#/etc/init.d/network restart或者# service network restart
5、为Linux主机配置网络信息的方式有哪些,请描述各个过程。
| 1)配置文件 [root@localhost ~]#/etc/sysconfig/network-script/ifcfg-IFACE 重启网络后永久生效 2)命令行 IP [root@localhost ~]#ifconfig eth0 192.168.1.125 netmask 255.255.255.0 [root@localhost ~]#ip addr add 192.168.1.125/24 dev eth0 配置完后立即生效,重启后失效 路由 [root@localhost ~]#route add default gw 192.168.1.1 [root@localhost ~]# ip route add default via 192.168.12.1 dev eth0 配置完后立即生效,重启后失效 3)图形窗口 CentOS 6 [root@localhost ~]#system-config-network-tui [root@localhost ~]#setup CentOS 7 [root@localhost ~]# nmtui-edit 重启网络后永久生效 | 
6、写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态;
     在线的主机使用绿色显示;
     不在线的主使用红色显示;
| root@localhost bin]# vim ping.sh 
#!/bin/bash
#
export ipaddr=172.16.250.
for i in {1..254};do
  if ping -c 1 -W 1 $ipaddr$i &> /dev/null;then
	 echo -e "\033[0;32;1m"$ipaddr$i is up." \033[0m"
	   else
	 echo -e "\033[0;31;1m"$ipaddr$i is down." \033[0m"
  fi
done
[root@localhost bin]# chmod +x ping.sh | 
7、详细描述每个网络接口的配置文件中各个参数的含义和其所对应的值;
| /etc/sysconfig/network-scripts/ifcfg-IFACE DEVICE:此配置文件应用到的设备; HWADDR:对应的设备的MAC地址; BOOTPROTO:激活此设备时使用的地址配置协议,常用的dhcp, static, none, bootp; NM_CONTROLLED:NM是NetworkManager的简写;此网卡是否接受NM控制;CentOS6建议为“no”; ONBOOT:在系统引导时是否激活此设备; TYPE:接口类型;常见有的Ethernet, Bridge; UUID:设备的惟一标识; IPADDR:指明IP地址; NETMASK:子网掩码; GATEWAY: 默认网关; DNS1:第一个DNS服务器指向; DNS2:第二个DNS服务器指向; USERCTL:普通用户是否可控制此设备; PEERDNS:如果BOOTPROTO的值为“dhcp”,是否允许dhcp server分配的dns服务器指向信息直接覆盖至/etc/resolv.conf文件中; | 
8、如何给网络接口配置多个地址,有哪些方式?
| (1)ip命令
     ip addr { add | del } IFADDR dev STRING
[root@localhost ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:34:99:fe brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.125/24 brd 192.168.1.255 scope global eth0
    inet 172.16.250.2/24 brd 172.16.250.255 scope global eth0:0
    inet6 fe80::20c:29ff:fe34:99fe/64 scope link 
       valid_lft forever preferred_lft forever
3: pan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN 
    link/ether ea:cb:53:da:d7:c7 brd ff:ff:ff:ff:ff:ff
[root@localhost ~]# ip addr add 192.168.1.131/24 dev eth0
[root@localhost ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:34:99:fe brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.125/24 brd 192.168.1.255 scope global eth0
    inet 172.16.250.2/24 brd 172.16.250.255 scope global eth0:0
    inet 192.168.1.131/24 scope global secondary eth0
    inet6 fe80::20c:29ff:fe34:99fe/64 scope link 
       valid_lft forever preferred_lft forever
3: pan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN 
    link/ether ea:cb:53:da:d7:c7 brd ff:ff:ff:ff:ff:ff
[root@localhost ~]#
(2)ifconfig
	ifconfig IFACE_ALIAS
[root@localhost ~]# ifconfig eth0:1 192.168.1.132/24 up
[root@localhost ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:34:99:fe brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.125/24 brd 192.168.1.255 scope global eth0
    inet 172.16.250.2/24 brd 172.16.250.255 scope global eth0:0
    inet 192.168.1.131/24 scope global secondary eth0
    inet 192.168.1.132/24 brd 192.168.1.255 scope global secondary eth0:1
    inet6 fe80::20c:29ff:fe34:99fe/64 scope link 
       valid_lft forever preferred_lft forever
3: pan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN 
    link/ether ea:cb:53:da:d7:c7 brd ff:ff:ff:ff:ff:ff
[root@localhost ~]#
(3)修改配置文件
首先将/etc/sysconfig/network-scripts/下的ifcfg-eth0文件复制一份,重命名为ifcfg-eth0:0,修改eth0:0
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0:0
DEVICE=eth0:0
TYPE=Ethernet
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=172.16.250.2
NETMASK=255.255.0.0
DNS=202.106.0.20
DNS1=8.8.8.8
IPV6INIT=no
USERCTL=no | 
9、常用的网络管理类工具有哪些,并用示例形式描述他们的使用方法。
| (1) ifocnfig 接口及地址查看和管理
使用用法:
格式:ifconfig [-v] [-a] [-s] [interface]
选项:
   -a:显示所有网卡信息
   -S 显示接口信息
示例:
查看网卡信息:
[root@localhost ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:34:99:FE  
          inet addr:192.168.1.125  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe34:99fe/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:170335 errors:0 dropped:0 overruns:0 frame:0
          TX packets:44191 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:146923432 (140.1 MiB)  TX bytes:4185346 (3.9 MiB)
eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:34:99:FE  
          inet addr:172.16.250.2  Bcast:172.16.250.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
eth0:1    Link encap:Ethernet  HWaddr 00:0C:29:34:99:FE  
          inet addr:192.168.1.132  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:58 errors:0 dropped:0 overruns:0 frame:0
          TX packets:58 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:5435 (5.3 KiB)  TX bytes:5435 (5.3 KiB)
(2)netstat 显示网路连接 
格式:netstat [--tcp|-t] [--udp|-u] [--raw|-w] [--listening|-l] [--all|-a] [--numeric|-n] [--extend|-e[--extend|-e]] [--program|-p]
选项:
      -t: tcp协议相关连接,连接均有其状态;FSM(Finate state Machine) 
      -u: udp协议相关 -w: raw socket相关 裸套接字 
      -l: 处于监听状态,等待别人连接;不加的l话,正在建立的连接或正在通信的状态
      -a: 所有状态 -n: 以数字显示IP和端口;
      -e:扩展格式 
      -p: 显示相关进程及PID 
      -r: 显示路由信息
      常用选项: -tan -uan -tnl -unl -tunlp
示例:
显示路由:
root@localhost ~]# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
172.16.250.0    0.0.0.0         255.255.255.0   U         0 0          0 eth0
172.26.0.0      192.168.1.1     255.255.0.0     UG        0 0          0 eth0
172.16.0.0      192.168.1.1     255.255.0.0     UG        0 0          0 eth0
0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 eth0
显示当前已建立的端口
[root@localhost ~]# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1605/sshd           
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      1419/cupsd          
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1905/master         
tcp        0      0 0.0.0.0:53629               0.0.0.0:*                   LISTEN      1381/rpc.statd      
tcp        0      0 0.0.0.0:10051               0.0.0.0:*                   LISTEN      1959/zabbix_server  
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      1757/mysqld         
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      1333/rpcbind        
tcp        0      0 :::22                       :::*                        LISTEN      1605/sshd           
tcp        0      0 :::54198                    :::*                        LISTEN      1381/rpc.statd      
tcp        0      0 ::1:631                     :::*                        LISTEN      1419/cupsd          
tcp        0      0 ::1:25                      :::*                        LISTEN      1905/master         
tcp        0      0 :::10051                    :::*                        LISTEN      1959/zabbix_server  
tcp        0      0 :::111                      :::*                        LISTEN      1333/rpcbind        
tcp        0      0 :::80                       :::*                        LISTEN      1943/httpd          
udp        0      0 127.0.0.1:717               0.0.0.0:*                               1381/rpc.statd      
udp        0      0 0.0.0.0:48607               0.0.0.0:*                               1381/rpc.statd      
udp        0      0 0.0.0.0:111                 0.0.0.0:*                               1333/rpcbind        
udp        0      0 0.0.0.0:631                 0.0.0.0:*                               1419/cupsd          
udp        0      0 0.0.0.0:660                 0.0.0.0:*                               1333/rpcbind        
udp        0      0 :::43856                    :::*                                    1381/rpc.statd      
udp        0      0 :::111                      :::*                                    1333/rpcbind        
udp        0      0 :::660                      :::*                                    1333/rpcbind
(3) ip  查看及管理 路由,设备,策略路由,隧道
格式:
    ip [ OPTIONS ] OBJECT { COMMAND | help }
        OBJECT := { link | addr | route }
     
选项:   
 ip link: 
   set
     dev IFACE
     可设置属性:
     up and down:激活或禁用指定接口;
     [root@localhost ~]# ip link set lo down
   show
     [dev IFACE]:指定接口
     [up]:仅显示处于激活状态的接口  
     [root@localhost ~]# ip link show up
 ip addr: 
   ip addr { add | del } IFADDR dev STRING 添加或删除IP
      [label LABEL]:添加地址时指明网卡别名
      [scope {global|link|host}]:指明作用域
            global: 全局可用;
            link: 仅链接可用;
            host: 本机可用;                      
      [broadcast ADDRESS]:指明广播地址
      ip addr show 查看IP
            [root@localhost ~]# ip addr show
                           
                           
     ip addr flush  清空某个网卡的所有地址
           ip addr flush dev IFAC 
           
(4)ss
格式:ss [options] [ FILTER ]
选项:
     -t: tcp协议相关连接,连接均有其状态;FSM(Finate state Machine)
     -u: udp协议相关
     -w: raw socket相关
     -l: 处于监听状态,等待别人连接;不加的l话,正在建立的连接或正在通信的状态
     -a: 所有状态
     -n: 以数字显示IP和端口;
     -e:扩展格式
     -p: 显示相关进程及PID
     -m:内存用量
     -o:计时器信息
     FILTER:=[state TCP-STATE][EXPRESSION] 过滤器
     tcp-STATE:
               LISTEN:监听
               ESTABLISEHD:建立的连接
               FIN_WAIT1:
               FIN_WAIT2:
               SYN-SENT:
               SYN_RECV:
               CLOSED:
     EXPRESSION:
                 dport=
                 sport=
  
[root@localhost ~]# ss -tan
State       Recv-Q Send-Q                                 Local Address:Port                                   Peer Address:Port 
LISTEN      0      128                                               :::22                                               :::*     
LISTEN      0      128                                                *:22                                                *:*     
LISTEN      0      128                                               :::54198                                            :::*     
LISTEN      0      128                                        127.0.0.1:631                                               *:*     
LISTEN      0      128                                              ::1:631                                              :::*     
LISTEN      0      100                                              ::1:25                                               :::*     
LISTEN      0      100                                        127.0.0.1:25                                                *:*     
LISTEN      0      128                                                *:53629                                             *:*     
LISTEN      0      128                                               :::10051                                            :::*     
LISTEN      0      128                                                *:10051                                             *:*     
LISTEN      0      50                                                 *:3306                                              *:*     
LISTEN      0      128                                               :::111                                              :::*     
LISTEN      0      128                                                *:111                                               *:*     
LISTEN      0      128                                               :::80                                               :::*     
ESTAB       0      0                                      192.168.1.125:22                                    192.168.1.105:3660  
[root@localhost ~]# ss -tan ‘( dport = :22 or sport = :22 )‘
State       Recv-Q Send-Q                                                   Local Address:Port                                                     Peer Address:Port 
LISTEN      0      128                                                                 :::22                                                                 :::*     
LISTEN      0      128                                                                  *:22                                                                  *:*     
ESTAB       0      64                                                       192.168.1.125:22                                                      192.168.1.105:3660 | 
10、Linux系统软件包管理方法(安装、升级、卸载等操作)有哪些,以及如何管理的。
| (1)rpm
安装
格式:rpm -i[option] PACKAGE_FILE
选项:
     -i:表示install安装
     -v -vv:表示显示安装过程,后者显示更加详细;
     -h:以#号显示进度条格式;
     -nodeps:忽略依赖关系
     -force:强制动作,注意安装成功后可能不能运行;
     -test:测试安装,作为测试检查
     -nosignature:不检查签名就是来源合法性;
     -nodigest:不检查包完整性;MD5头;
     -noscipts:不执行程序包脚本片断
     注意:rpm自带四类脚本
     %pre:安装前脚本;   -nopre
     %post:安装后脚本;  -nopost
       %preun:卸载前脚本; -nopreun
     %postun:卸载后脚本;-nopostun
 使用:
       rpm -ivh  PACKAGE_FILE
 
升级
格式: rpm -U|F[optIon] PACAGE_FILE  
选项:
     -U:表示不管软件事先是否存在都要升级,存在就升级,不存在就安装;
     -F:表示软件软件存在就升级,如何不存在,就放弃升级;
     -oldpackage:降级,如果升级之后发现有Bug或者兼容性问题,可以使用此选项回滚到升级前的版本;
     -force:强制动作,注意安装成功后可能不能运行;
     -replacepkgs:注意不能替换配置文件;
     注意:
        (1)不要对kernel做升级操作;支持多kernel并存;可以直接安装;
        (2)修改过的配置升级不会覆盖,升级同新文件,会重命名为file.rpmnew
 
查询:
格式:rpm -q[option] [PACKAGE-NAME|PACKAGE_FILE]
选项:
     -qa:查询系统所有已安装的程序包;
     -qf /path/to/file:查询文件是由那个程序包生成;
     -ql:查询程序生成的文件:
     -qi:查询程序属性信息;
     -qc:查询程序配置文件;
     -qd:查询程序提供的文档
     -q -whatprovides CAPABILITY(功能):查询这种CAPABILITY由那个程序提供;
     -q -whatrequires CAPABILITY:查询这种CAPABILITY被哪些程序包依赖;
     -q -scripts:查询程序包生成的脚本;
     -q -changelog:查询软件历史
     查询未安装的软件包信息,需要加-p选项跟上面的选项结合使用,后面的参数必须是PACKAGE_FILE;
     列如:
         -qpi:查询指定PACKAGE_FILE的程序属性信息;
 
卸载
格式:rpm -e[option] PACKAGE-NAME
选项:
     -vh:显示过程
     -nodeps:忽略依赖
     -noscripts:忽略脚本
     -allmatches:卸载所有匹配指定名称的程序包,也就是说卸载软件名称中包含此名称的所有包;
     -test:测试检查卸载,不是真卸载
 注意:
     卸载会检查依赖关系,如果卸载的软件被其他程序依赖,请谨慎卸载,否则导致其依赖程序无法运行;
      
使用:
       rpm -e  PACKAGE_FILE
  
校验
工作原理:校验检查的是软件包来源的合法性和完整性,要想对它们校验检查,必须要有校验机制,这种机制是根据签名和加密实现的,通常发行版的光盘中会有一个包含所有软件特征码的文件,特征码是根据软件包特征提取的,通过单项加密实现的用来校验软件包的完整性,如果软件包在获取途中被修改,在系统中再次提取软件包特征码,跟系统已有的特征码文件比对,不同则判断被攥该,修改过的软件包,根据相同的加密算法提取的特征肯定不同;来源合法性是根据签名实现的;特征码文件被称为公钥;校验是由校验程序完成的,默认rpm命令安装时会调用;
公钥获取:
      官方网站
      系统光盘
      系统配置文件中,这是系统在安装时从安装光盘复制进去的
        系统公钥位置:/etc/pik/rpm-gpg/RPM-GPG-KEY-CentOS-7
导入公钥:
         rpm -import /path/to/pub.key
校验软件:
         rpm -V PACKAGE-NAME:校验安装文件自安装后是否被修改过,根据PMS记录信息判断;
         rpm -K PACKAGE_FILE:对指定未安装的软件包进行手工校验;
 
数据库重建
默认数据库目录位置:/var/lib/rpm
语法格式:
       rpm -initdb     :初始化数据库
       rpm -rebuilddb  :重新构建
       -dbpath=/path/  :指定数据库创建位置;
       
(2)yum管理程序包,在使用前需配置yum仓库文件
repolist [all|enabled|disabled] 列出所有可用仓库
显示程序包:
# yum list [all | glob_exp1] [glob_exp2] [...]
# yum list {available|installed|updates} [glob_exp1] [...]
安装程序包:
install package1 [package2] [...]
升级程序包:
update package1 [package2] [...]
downgrade package1 [package2] [...](降级安装)
检查可用升级包:
check-update
卸载程序包:
remove | erase package1 [package2] [...]  有依赖关系的也会一同卸载
查看程序包信息:
yum info [...]
查看指定的特性(可以是某个文件)是有哪个程序包提供的:相当于rmp -qf
provides | whatprovides feature1 [feature2] [...]
清理本地缓存:
clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
生成本地缓存:
makecache
搜索:
search string1 [string2] [...]以指定关键字搜索程序包名及summary信息
重新安装:
reinstall package1 [package2] [...]
显示指定包所依赖关系包名:
deplist package1 [package2] [...]
(3)源码编译程序包管理
    	./configure:
        a.通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成makefile
         b. 检查依赖到的外部环境
    	make:
    	根据makefile文件,构建应用程序
    make install | 
11、如何使用发行版光盘作为yum repository,请描述该过程。
| [root@localhost~]# mkdir /mnt/cdrom ##新建文件夹作为挂载点使用 [root@localhost~]# mount /dev/cdrom /mnt/cdrom ##将光盘挂载至文件夹 [root@localhost~]# cd /etc/yum.repos.d/ ##进入yum仓库配置文件夹 [root@localhost yum.repos.d]# vim CentOS-cdrom.repo ##配置新的yum仓库文件 [cdrom] name=CentOS 7.1 Release cdrom # 名称 baseurl=file:///mnt/cdrom # 路径 enable=1 # 是否开启此yum仓库,默认开启。 gpgcheck=0 # 使用前是否检验包 | 
12、写一个脚本,完成以下功能
   (1) 假设某目录(/etc/rc.d/rc3.d/)下分别有K开头的文件和S开头的文件若干;
   (2) 显示所有以K开头的文件的文件名,并且给其附加一个stop字符串;
   (3) 显示所有以S开头的文件的文件名,并且给其附加一个start字符串;
   (4) 分别统计S开头和K开头的文件各有多少;
| [root@localhost bin]# vim SstopKstart.sh #!/bin/bash # export K=0 export S=0 for i in $(ls /etc/rc.d/rc3.d/K* | cut -d‘/‘ -f5);do echo "$i stop" let K=$K+1 done for l in $(ls /etc/rc.d/rc3.d/S* | cut -d‘/‘ -f5);do echo "$l start" let S=$S+1 done echo "K开头的文件有$K 个;S开头的文件有$S 个。" [root@localhost bin]# chmod +x SstopKstart.sh [root@localhost bin]# SstopKstart.sh K50netconsole stop KEQE stop S10network start K开头的文件有2 个;S开头的文件有1 个。 [root@localhost bin]# | 
13、写一个脚本,完成以下功能
   (1) 脚本能接受用户名作为参数;
   (2) 计算此些用户的ID之和;
| root@localhost bin]# cat UserID.sh #!/bin/bash # export IDsum=0 for i in $*;do if id $i &> /dev/null ;then userid=$(id -u $i) echo "$i=$userid" else echo "user $i not found." fi let IDsum=$IDsum+$userid done echo "$* id sum $IDsum." [root@localhost bin]# chmod +x UserID.sh [root@localhost bin]# UserID.sh centos mysql centos=1000 mysql=3004 centos mysql id sum 4004. | 
14、写一个脚本
   (1) 传递一些目录给此脚本;
   (2) 逐个显示每个目录的所有一级文件或子目录的内容类型;
   (3) 统计一共有多少个目录;且一共显示了多少个文件的内容类型;
| [root@localhost bin]# vim dirfile.sh #!/bin/bash # export dirsum=0 export filesum=0 if [ $# -le 1 ];then echo "please provide least one dir" exit 1 fi for i in $*;do if [ -d $i -a -x $i ];then let dirsum+=$(ls -l $i | grep ^d |wc -l) let filesum+=$(ls -l $i | grep -v ^d |wc -l) else echo "The $i is not exist or Permission denied,please check it!" exit 2 fi done echo "the directories sum:$dirsum" echo "the file sum:$filesum" [root@localhost bin]# bash +x dirfile.sh /etc/ /var/ the directories sum:103 the file sum:119 | 
15、写一个脚本
  通过命令行传递一个参数给脚本,参数为用户名
  如果用户的id号大于等于500,则显示此用户为普通用户;
| [root@localhost bin]# vim username.sh #!/bin/bash # read -p "请给出用户:" username if [ -z $username ]; then echo "用户名不能为空。" exit 1 fi id $username &> /dev/null if [ $? -eq 0 ];then let ID=$(id -u $username) if [ $ID -ge 500 ];then echo "$username 为普通用户。" fi else echo "用户名不存在,请给出有效用户名!" fi [root@localhost bin]# bash +x username.sh 请给出用户:centos centos 为普通用户。 [root@localhost bin]# bash +x username.sh 请给出用户:mysql mysql 为普通用户。 [root@localhost bin]# bash +x username.sh 请给出用户:root [root@localhost bin]# | 
16、写一个脚本
   (1) 添加10用户user1-user10;密码同用户名;
   (2) 用户不存在时才添加;存在时则跳过;
   (3) 最后显示本次共添加了多少用户;
| [root@localhost bin]# vim adduser.sh 
#!/bin/bash
#
export useraddsum=0
if [ ! $UID -eq 0 ]; then
	echo "Only root."
	exit 1
fi
for i in {1..10};do
	if id user$i &> /dev/null; then
		echo "user$i 用户已存在."
	else
		useradd user$i
		if [ $? -eq 0 ]; then
			echo "user$i" | passwd --sduin user$i &> /dev/null
			echo "Add user$i finished."
			let useraddsum+=1
		fi
	fi
done
         echo "共添加$useraddsum个用户。"
[root@localhost bin]# bash +x adduser.sh 
Add user1 finished.
Add user2 finished.
user3 用户已存在.
Add user4 finished.
Add user5 finished.
Add user6 finished.
Add user7 finished.
Add user8 finished.
Add user9 finished.
Add user10 finished.
共添加9个用户。 | 
17、写一脚本,用ping命令测试172.16.250.20-172.16.250.100以内有哪些主机在线,将在线的显示出来;
| [root@localhost bin]# vim ping1.sh 
#!/bin/bash
#
for i in {20..100};do
	ping -c 1 -w 1 172.16.250.$i &> /dev/null
		if [ $? -eq 0 ];then
			echo "172.16.250.$i"
		fi
done
[root@localhost bin]# bash +x ping1.sh 
172.16.250.20
172.16.250.22
172.16.250.88
172.16.250.99 | 
18、打印九九乘法表;
| [root@localhost bin]# vim list.sh
#!/bin/bash
#
for i in {1..9};do
	for l in $(seq 1 $i);do
		let sum=$i*$l
		echo -e "${i}X${l}=$sum \c"
	done
	echo
done
[root@localhost bin]# bash +x list.sh 
1X1=1 
2X1=2 2X2=4 
3X1=3 3X2=6 3X3=9 
4X1=4 4X2=8 4X3=12 4X4=16 
5X1=5 5X2=10 5X3=15 5X4=20 5X5=25 
6X1=6 6X2=12 6X3=18 6X4=24 6X5=30 6X6=36 
7X1=7 7X2=14 7X3=21 7X4=28 7X5=35 7X6=42 7X7=49 
8X1=8 8X2=16 8X3=24 8X4=32 8X5=40 8X6=48 8X7=56 8X8=64 
9X1=9 9X2=18 9X3=27 9X4=36 9X5=45 9X6=54 9X7=63 9X8=72 9X9=81 | 
原文:http://5276007.blog.51cto.com/5266007/1862375