首页 > 代码库 > Linux基础知识八
Linux基础知识八
1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。
网桥也叫桥接器,是连接两个局域网的一种存储/转发设备,用来连接不同网段,使其透明通信,它们工作在链路层。处理的是链路层数据,一般来说就是以太网帧格式的数据,缺点是无法避免“广播风暴”。
集线器的基本功能是信息分发,它把一个端口接收的所有信号向所有端口分发出去。一些集线器在分发之前将弱信号重新生成,一些集线器整理信号的时序以提供所有端口间的同步数据通信,工作在物理层,集线器只是把各个终端互相连接起来而已,处理的是信号。
二层交换机是从网桥发展而来,属于OSI第二层即数据链路层设备。它根据MAC地址寻址,通过自己生成的地址表来选择路由,地址表的建立和维护由交换机自动进行。
三层交换机就是具有部分路由器功能的交换机,三层交换机的最重要目的是加快大型局域网内部的数据交换,所具有的路由功能也是为这目的服务的,能够做到一次路由,多次转发。对于数据包转发等规律性的过程由硬件高速实现,而像路由信息更新、路由表维护、路由计算、路由确定等功能,由软件实现。三层交换技术就是二层交换技术加上三层转发技术,三层交换技术是在网络模型中的第三层实现了数据包的高速转发,既可实现网络路由功能,又可根据不同网络状况做到最优网络性能。
路由器属于OSI模型中第三层网络层设备,它根据IP地址进行寻址,通过路由表路由协议产生,处理网络层数据,也就是IP报文格式的数据,目前网络层的报文格式主要是IP为主,也会处理TCP、UDP等四层数据以及PPP等三层数据。但它的主要作用在于IP转发,所以我们一般称它是网络层设备。
2、IP地址的分类有哪些?子网掩码的表示形式及其作用。
IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。IP地址通常用“点分十进制”表示成(A.B.C.D)的形式,其中,A,B,C,D都是0~255之间的十进制整数。例:点分十进IP地址(100.4.5.6),实际上是32位二进制数(01100100.00000100.00000101.00000110)。
IP地址编址方案:将IP地址空间划分为A、B、C、D、E五类,其中A、B、C是基本类,D、E类作为多播和保留使用。
A类IP地址前面第一段属于网络位,后面三段属于主机位,IP地址范围1.0.0.0到127.255.255.255,默认掩码255.0.0.0,最后一个是广播地址。其中10.0.0.0到10.255.255.255是私有IP地址,127.0.0.0到127.255.255.255是保留地址,用于循环测试使用。
B类IP地址前面两段属于网络位,后两段属于主机位,IP地址范围128.0.0.0-191.255.255.255,默认掩码255.255.0.0,最后是一个是广播地址。其中172.16.0.0 –172.31.255.255是私有IP地址。
C类IP地址前面三段属于网络位,后面一段属于主机位,IP地址范围192.0.0.0-223.255.255.255,默认掩码255.255.255.0,最后一个地址是广播地址。其中192.168.0.0-192.168.255.255是私有IP地址。
D类IP地址用于组播,并不指向特定的网络,目前这一类地址被用在多点广播中,其IP地址范围从224.0.0.0到239.255.255.255。
E类IP地址用于Internet实验和开发,其IP地址范围240.0.0.0到255.255.255.254,255.255.255.255作为广播地址使用。
子网掩码的表示形式:
点分十进制,如255.255.255.0
IP地址后加‘/‘以及[1-32]的数字
子网掩码的作用:
别网络标识和主机标识
将一个大的IP网络划分为若干小的子网段
3、计算机网络的分成模型有哪些(OSI模型和TCP/IP模型),每一层的功能及涉及到的物理设备有哪些。
OSI模型:
物理层:比特流传输,将数据转换为可通过物理介质传送的电子信号。涉及物理设备:双绞线、同轴电缆,集线器
数据链路层:提供介质访问,链路管理,将数据分帧并处理数据流控制。涉及物理设备:网卡,网桥,交换机
网络层:控制分组传输、路由选择、拥塞控制、网络互联等功能。涉及物理设备:路由器
传输层:建立主机端到端连接。涉及物理设备:四层交换机
会话层:建立,维护,管理会话连接涉及操作系统和网络接口和各种数据;
表示层:处理数据格式、数据加密等;
应用层:提供应用程序之间通信;
TCP/IP模型
网络接口层:对应OSI模型的数据链路层和物理层,负责监视数据在主机和网络之间的交换。
网络互联层:对应OSI模型的网络层,主要解决主机到主机的通信问题。
传输层:对应OSI模型的传输层,为应用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性。该层定义了两个主要的协议:TCP与UDP。
应用层:对应OSI模型的应用层,会话层,表示层,提供通信以及数据处理,例如:FTP、Telnet、DNS、SMTP等.
4、如何将Linux主机接入到TCP/IP网络,请描述详细的步骤。(手动指定的方式)
使用VIM编辑/etc/sysconfig/network-scripts/ifcfg-eno###这个文件,如下:
[root@linuxnode02 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno16777736 TYPE=Ethernet BOOTPROTO=static #指定启动时IP地址的获取方式 DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no NAME=eno16777736 UUID=e0b2afc2-119f-4422-99fa-93513fd8dba1 #网卡UUID值 DEVICE=eno16777736 ONBOOT=yes #设置开机时网卡是否随机启动 IPADDR=192.168.108.129 #指定网卡的IP地址 NETMASK=255.255.255.0 #指定IP地址的子网掩码 GATEWAY=192.168.108.1 #指定IP地址的网关
5、为Linux主机配置网络信息的方式有哪些,请描述各个过程。
ifconfig eth0 IP/netmask
ip addr add IP device eth0
使用setup图形界面进行配置
Linux网络属性配置的tui(text user interface):system-config-network-tui
6、写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态;
在线的主机使用绿色显示;
不在线的主使用红色显示;
#!/bin/bash ipaddr=192.168.108. for i in {1..254};do if ping $ipaddr$i -c 1 -w 1 &>/dev/null;then echo -e "\033[32m $ipaddr$i" else echo -e "\033[31m $ipaddr$i" fi done
7、详细描述每个网络接口的配置文件中各个参数的含义和其所对应的值;
DEVICE:配置文件应用到的设备
HWADDR:对应网络设备的MAC地址
BOOTPROTO:应用此设备时使用的地址配置协议,常用的有dhcp、static、none、bootp
NM_CONTROLLED:NM是NetworkManager的简写,此选项有yes和no两个值(CentOS建议为"no")
ONBOOT:在系统启用时,是否激活此设备
TYPE:网卡接口类型,常见的有Ethernet、Bridge
UUID:设备的唯一标识符
IPADDR:指明网卡的IP地址
NETMASK:子网掩码
GATEWAY:默认网关
DNS1:第一个DNS服务器指向,此处的DNS配置优先于/etc/resolv.conf文件中的DNS配置
DNS2:第二个DNS服务器指向
USERCTL:普通用户是否可以控制此设备
PEERDNS:若BOOTPROTO的值为"dhcp",是否允许dhcp server分配的DNS服务器指向信息直接覆盖到/etc/resolv.con文件中
8、如何给网络接口配置多个地址,有哪些方式?
ifocnfig:
ifconfig IFACE_ALIAS IPADDR
ip:
ip addr add ip_addr/mask dev IFACE label alias_label
配置文件:
ifcfg-IFACE_ALIAS
DEVICE=IFACE_ALIAS
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 NETMASK] [gw GATEWAY] [dev INTERFACE]
删除路由:route del
route del [-net|-host] target [netmask NETMASK] [gw GATEWAY] [dev INTERFACE]
netstat命令
显示网络链接:
netstat [--tcp|-t] [--udp|-u] [--raw|-w] [--listening|-l] [--all|-a] [--extend|-e] [--program|-p]
-t:TCP相关协议
-u:UDP相关协议
-w:raw socket相关
-l:处于监听状态的端口
-a:所有状态
-n:以数字形式显示IP和端口
-e:扩展格式
-p:显示相关进程及PID
常用组合:
-tan、-una、-tnl、-unl
显示路由表:
netstat -{--interface|-i|-I} [iface] [--all|-a] [-extend|-e] [--program|-p] [--numeric|-n]
netstat -i
netstat -I IFACE
ip命令
ip [OPTIONS] OBJECT {COMMAND| help}
OBJECT:={link|addr|route}
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 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 GATEWAY 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 socket相关
-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
-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 PACKAGE_FILE, -qpl PACKAGE_FILE, ...
卸载:
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:重建
无论当前存在与否,直接重新创建数据库;
11、如何使用发行版光盘作为yum repository,请描述该过程。
(1)挂在光盘至某目录,例如/media/cdrom
mount -r -t iso9660 /dev/cdrom /media/cdrom
(2)在/etc/yum.repos.d创建以.repo结尾的配置文件
name=
baseurl=file:/// (或http://或ftp://)
enabled=0或1
gpgcheck=0或1
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 -l‘ s_lines=‘ls /etc/rc.d/rc3.d/S*|awk ‘print NR‘|tail -l‘ echo "k start lines is $k_lines" echo "s start liens is $s_lines"
13、写一个脚本,完成以下功能
(1) 脚本能接受用户名作为参数;
(2) 计算此些用户的ID之和;
#!/bin/bash sum=0 for i in $*;do if id $i &> /dev/null ;then userid=`id -u $i` let sum=$sum+$userid else echo "user $i not found" fi done echo "User id sum is $sum"
14、写一个脚本
(1) 传递一些目录给此脚本;
(2) 逐个显示每个目录的所有一级文件或子目录的内容类型;
(3) 统计一共有多少个目录;且一共显示了多少个文件的内容类型;
#/bin/bash for m in $*;do typed=0 typef=0 filenume=0 for n in `ls $m`;do let filenume=$filenume+1 if [ -d $m/$n ];then let typed=$typed+1 elif [ -f $m/$n ]; then let typef=$typef+1 fi done echo "$m" echo "$m director $typed, file $typef" done
15、写一个脚本
(1)通过命令行传递一个参数给脚本,参数为用户名
(2)如果用户的id号大于等于500,则显示此用户为普通用户;
#!/bin/bash for i in $*;do if ! id $i > /dev/null ; then echo "There is no for user $i" else userid=`id -u $i` if [ $userid -ge 500 ];then echo "user $i is average user " else echo "user $i is system user" fi fi done
16、写一个脚本
(1) 添加10用户user1-user10;密码同用户名;
(2) 用户不存在时才添加;存在时则跳过;
(3) 最后显示本次共添加了多少用户;
#!/bin/bash for i in {1..10}; do if id user$i &> /dev/null ;then echo "user$i exists." continue 3 else useradd user$i if [ $? -eq 0 ]; then echo "user$i" | passwd --stdin user$i &> /dev/null echo "useradd user$i finished." let sum++ fi fi done echo " useradd $sum user "
17、写一脚本,用ping命令测试172.16.250.20-172.16.250.100以内有哪些主机在线,将在线的显示出来;
#!/bin/bash ip_address=‘172.16.250‘ for i in {20..100};do ping -c 5 -w 5 ${ip_address}.${i} &> /dev/null if [ $? -eq 0 ]; then echo -e "\033[32m ${ip_address}.${i} \033[0m" fi done
18、打印九九乘法表;
方法一
#!/bin/bash declare -i i=1 declare -i j=1 while [ $i -le 9 ]; do while [ $j -le $i ]; do echo -e -n "${i}X${j}=$[$i*$j]\t" let j++ done echo let i++ let j=1 done
方法二
#!/bin/bash for i in {1..9}; do for j in $(seq 1 $i); do echo -e -n "${i}X${j}=$[$i*$j]\t" done echo done
方法三
#!/bin/bash declare -i i=1 declare -i j=1 until [ $i -gt 9 ]; do until [ $j -gt $i ]; do echo -n -e "${i}X${j}=$[$i*$j]\t" let j++ done echo let i++ let j=1 done
本文出自 “水中的波仔” 博客,谢绝转载!
Linux基础知识八