赞
踩
目录
ifconfig eth0 up/down与ifup/ifdown eth0的区别
随时更新,最新内容请到原文地址:https://blog.csdn.net/bandaoyu/article/details/116308950
#启动网络管理器
[root@localhost ~]# NetworkManager start
#查看连接
[root@localhost ~]# service network resatrt
[root@localhost ~]# nmcli c show
nmcli d status #nmcli device status 查看那个网口接了线
可以看到网口中接线的是ens2f0
网口名就是ens2f0 UUID 就是 ff888acf-86ae-3132-927c-6b47656c58c3
(有时候service network resatrt 执行后需要等一会,不然nmcli connection show检查出的已连线连接不全)
(上面方法并不保险,最保险的是ethtool ethx 一个一个试,ethtool ethx之前需要NetworkManager start,conn show 并不显示没有对应ifcfg-xxx文件的端口,所有可以用ip addr 显示所有端口)
可以用ethtool 命令确认连线状况:
[root@rdma61 sysconfig]# ethtool ens2f0
Settings for eth18-0:
Supported ports: [ Backplane ]
……
link
Link detected: yes
Link detected: yes 表示连线
如果NetworkManager 是一次启动,从其打印的内容也可以得知哪个网口连接网线:
方法1:
输入命令nmtui 使用UI界面进行配置,参考:https://blog.csdn.net/weixin_46560589/article/details/125309320
方法2:
[root@localhost ~]# nmcli conn add ifname ens2f0 con-name ens2f0 type ethernet
INAME=ens2f0 &&nmcli conn add ifname ${INAME} con-name ${INAME} type ethernet
ifname:接口名 con-name:连接配置名
以上命令添加配置文件的缺点是有时候不生成HWADDR ,这样的话设备重启,端口名称可能会改变。
nmcli命令说明见: https://www.cnblogs.com/libertylife/p/10497512.html
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens2f0
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=ens2f0
UUID=5f1fde10-d2a2-4ea5-8213-7cdb53bb59bf
DEVICE=ens2f0
ONBOOT=yes
HWADDR=00:0c:29:4d:bb:5dIPADDR=192.168.1.101
PREFIX=24 #=mask 255.255.255.0
GATEWAY=192.168.1.254 #根据需要配置
说明:
BOOTPROTO=static 静态地址
修改设备名
DEVICE=ens2f0 自动生成
添加IP、掩码、网关
IPADDR=192.168.1.101
PREFIX=24 #=mask 255.255.255.0
GATEWAY=192.168.1.254
原文链接:https://blog.csdn.net/qq_36783142/article/details/75353944
方法3:
直接创建和编辑文件(建设查到的网口名是ens2f0 )
vim /etc/sysconfig/network-scripts/ifcfg-ens2f0
将下面的内容按网口实际信息修改(注意确认,不要漏改)
改NAME、UUID、DEVICE、IPADDR
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacyNAME=ens2f0
UUID= ff888acf-86ae-3132-927c-6b47656c58c3
DEVICE=ens2f0
ONBOOT=yes
IPADDR=182.200.31.55
PREFIX=24
GATEWAY=192.168.1.254 #根据需要配置
自动化:
- MYIFNAME=ens7f2;
- MYIPADDR=192.168.31.60;
- MYGATEWAY=182.200.31.251;
- MYHWADDR=$(ifconfig|grep ${MYIFNAME} -A 5|grep ether|awk '{print $2}');
-
- #modify line
- sed -i "s/^BOOTPROTO.*\+=.*/BOOTPROTO=static/" /etc/sysconfig/network-scripts/ifcfg-${MYIFNAME};
- sed -i "s/^ONBOOT.*\+=.*/ONBOOT=yes/" /etc/sysconfig/network-scripts/ifcfg-${MYIFNAME};
-
- #delete line
- sed -i '/IPADDR/d' /etc/sysconfig/network-scripts/ifcfg-${MYIFNAME};
- sed -i '/PREFIX/d' /etc/sysconfig/network-scripts/ifcfg-${MYIFNAME};
- sed -i '/GATEWAY/d' /etc/sysconfig/network-scripts/ifcfg-${MYIFNAME};
- sed -i '/HWADDR/d' /etc/sysconfig/network-scripts/ifcfg-${MYIFNAME};
-
- #add line
- sed -i "/ONBOOT/a\IPADDR=${MYIPADDR}" /etc/sysconfig/network-scripts/ifcfg-${MYIFNAME};
- sed -i "/IPADDR/a\PREFIX=24" /etc/sysconfig/network-scripts/ifcfg-${MYIFNAME};
- sed -i "/PREFIX/a\GATEWAY=${MYGATEWAY}" /etc/sysconfig/network-scripts/ifcfg-${MYIFNAME};
- sed -i "/GATEWAY/a\HWADDR=${MYHWADDR}" /etc/sysconfig/network-scripts/ifcfg-${MYIFNAME};
- #show
- cat /etc/sysconfig/network-scripts/ifcfg-${MYIFNAME};
- #end
[root@localhost ~]# systemctl restart network
[root@localhost ~]# ifconfig
或
[root@localhost ~]# ip -a
在Linux系统下面,第一块网卡就叫eth0,第二块网卡就叫eth1,这里我们给第一块网卡设置多个IP,也即添加多个子网卡,如eth0:0、eth1:1这种网络接口,LINUX最多可以支持255个IP子网卡。
1 切换至 /etc/sysconfig/network-scripts/目录下cd /etc/sysconfig/network-scripts
2 拷贝/etc/sysconfig/network-scripts目下的ifcfg-eth0到当前目录下,并且改名为eth0:1
cp ifcfg-eth0 ifcfg-eth0:1
3 修改ifcfg-eth0:1文件DEVICE=eth0:1
IPADDR=192.168.20.9
4 重启网络
systemctl restart network
5 查询ip
ifconfig
原文链接:https://blog.csdn.net/qq_45609914/article/details/124028859
DNS在 /etc/resolv.conf中配置,但由于一旦网卡重启NetworkManager就会重置 /etc/resolv.conf,所以需要配置NetworkManager.conf,让NetworkManager不要重置 /etc/resolv.conf。
修改NetworkManager.conf 配置文件
vi /etc/NetworkManager/NetworkManager.conf
#在[main]中添加
dns=no
修改resolv.conf配置文件
vim /etc/resolv.conf
#添加dns
nameserver 114.114.114.114
重启
systemctl restart NetworkManager
https://blog.csdn.net/weixin_41083358/article/details/124064871
1、查看device的命令:
# ibv_devices
device node GUID
------ ----------------
rdmap175s0f0 40a6b70b6f300000
rdmap175s0f1 40a6b70b6f310000
————————————————
2、查看RDMA device和linux网口的对应关系
Mellanox:
ibdev2netdev
因特尔
ibv_devices|awk '{system("echo "$1"\"-->\"`ls /sys/class/infiniband/"$1"/device/net`")}' |& grep -v '/device/net' 或 ibv_devices|awk '{system("echo "$1"\"-->\"`ls /sys/class/infiniband/"$1"/device/net`")}' |
rocep24s0f3-->ens2f3
rocep24s0f1-->ens2f1
rocep24s0f0-->ens2f0
rocep24s0f2-->ens2f2
3、查看连接线的接口
方法1:
输入ip a,返回的网口的状态含LOWER_UP,就说连线了
<BROADCAST,MULTICAST,UP,LOWER_UP>:
方法2:
#启动网络管理器
[root@localhost ~]# NetworkManager start
#查看连接
[root@localhost ~]# nmcli connection show
找到连线的接口。
使用ethtool 逐个检查上面打出的端口,看到Link detected: yes,就是这个端口是连着网线的,就可以对这个网口配置IP。
ethtool ens2f3
ethtool ens2f1
……
[root@localhost ~]# ethtool ens3f1
Settings for ens3f1:
Supported ports: [ FIBRE ]
……
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes
配置IP
剩下配置IP的过程同上面的:linux网口配置IP
重启网卡
ifdown ens2f0
ifup ens2f0
5、确认RDMA功能
查看官方说明,使用官方的测试工具测试。
方法1:(保险的方法)
1. 查看连接状态:ip link
2.让eth0网口闪烁:ethtool eth0
把所有的都试一遍就知道了
3.如果能拔网线,拔一下再插上,/var/log/messages日志里能看到
方法2:(适合没有配置过IP的机器)
#启动网络管理器
[root@localhost ~]# NetworkManager start
#查看连接
[root@localhost ~]# service network resatrt
[root@localhost ~]# nmcli connection show
扩展知识内容:
eno1:代表由主板bios内置的网卡
ens1:代表有主板bios内置的PCI-E网卡
enp2s0: PCI-E独立网卡
eth0:如果以上都不使用,则回到默认的网卡名
大概可以这样理解:ens37f1np1、ens37f1
ens表示热插拔网卡,37表示槽位,“f1”:可能是指具体的功能或标识,如网口类型或配置。“np1”:可能表示某种特定的网络协议或功能的缩写。(普通以太网网卡插上:ens37f1,mellanox rdma 网卡插上:ens37f1np1 ,(CI环境)intel rdma网卡插上:ens1f1)
(摘自:https://blog.csdn.net/weixin_43937576/article/details/90510170)
区别
Ifconfig 在配置文件/etc/sysconfig/network-scripts/ifcfg-ethx中DEVICE=eth0 时,使用ifconfig eth0 up/down才会有效,如果DEVICE=eth1时,再使用ifconfig eth0 up/down便会出现
fup与ifdown。这两个程序其实是script而已,它会直接到 /etc/ sysconfig/network-scripts 目录下搜索对应的配置文件,例如 ifcfg-eth0,它会找出ifcfg-eth0这个文件的内容,然后加以设置
如果ifcfg-eth0文件中,如果DEVICE=eth1时,使用ifup/ifdown eth0 或 ifup/ifdown eth1 都能启动或关闭eth1网络设备
service network restart 失败
systemctl status network.service 查看
1、ens2f0 和ens5f0 中的device 名字冲突,原因是下面的命令 ifname 和con-name 不一致
nmcli connection add ifname ens2f0 con-name ens5f0 type ethernet
类似错误还有用方法2配置IP时,UUID忘记改,造成冲突
报错:Failed to restart network.service: Unit network.service not found.
1、可以尝试使用以下命令:
service network-manager restart
2、如果是 Kali Linux(Debian),则需要用以下命令:
service networking restart
3、如果是Centos 8,则需要用以下命令:
1.重启网卡之前一定要重新载入一下配置文件,不然不能立即生效
1 |
|
2.重启网卡(下面的三条命令都可以):
1 2 3 |
|
总结:重启centos8的网卡,先载入新的配置文件,然后在执行重启网卡命令即可。
以上其实是下面的缩写:
nmcli connection reload
启动 nmcli connection down ens33
停止 nmcli connection up ens33
CentOS 8系统网卡启动命令_爱辉弟的博客-CSDN博客_centos8重启网络服务命令
配置没有问题,但是死活ping不通
案例:
用ethtool 查看 ens3f0 和ens3f1 都是Link detected: yes,所以配置了 ens3f0 的IP,但是始终无法和其他主机通信。改配置 ens3f1就好了。
原因暂时不明。
网关设置错误可以导致连接不上
ens7f0
DEVICE=ens7f0
IPADDR=172.17.31.55
PREFIX=24
GATEWAY=182.200.31.251
ethA3d-0
DEVICE="ethA3d-0"
IPADDR=182.200.31.55
PREFIX=24
GATEWAY=182.200.31.251
IP是172.17.31.55,我给它设置网关:182.200.31.251。 导致SSH 连接不上ethA3d-0 :182.200.31.55
RTNETLINK answers: File exists
网友:
原因1
检查发现起了 NetworkManager:
#chkconfig --list|grep -i manager
NetworkManager 0:off 1:ff 2:on 3:on 4:on 5:on 6:off
关闭NetworkManager即可:
#chkconfig NetworkManager off
#service NetworkManager stop
#service network restart
关闭NetworkManager:之后我的问题仍然没有解决,我直接重启,重启后正常。
这个可以看出本机网卡驱动是否正常,协议是否安装完全。本机可以ip,也可以127.0.0.1来ping。若通就表示网卡驱动是正常的。可以不用重装网卡驱动。
是否接在了对应的口上。用下面的命令查看ethxx口上是否接上了线
- NetworkManager start
-
- ethtool ethxx
输入 getenforce 查看是否是enforce ,如果是,可能会被限制。
例如:
ifcfg-ens3f1 配置了192.168.31.57 配置全部正确,但是就是不通。
进入cd /etc/sysconfig/network-scripts/,发现ifcfg-ens3f0里面的IP 也是192.168.31.57
输入mii-tool可以查看网线是否连接到网卡
#mii-tool
有时驱动可能不支持会出错下列错误
#mii-tool
- 显示所有网络连接:nmcli con show
- 显示活动网络连接:nmcli con show -active
- 显示指定网络连接的详情:nmcli con show eno16777728
- 显示网络设备连接状态:nmcli dev status
- 显示所有网络设备的详情:nmcli dev show
- 显示指定网络设备的详情:nmcli dev show eno16777728
- 启用网络连接:nmcli con up eno16777728
- 停用网络连接(可被自动激活):nmcli con down eno33554960
- 禁用网卡,防止被自动激活:nmcli dev dis eth0
- 删除网络连接的配置文件:nmcli con del eno33554960
- 重新加载配置网络配置文件:nmcli con reload
- 动态获取IP方式的网络连接配置:nmcli con add con-name eno16777728 type ethernet ifname eno16777728
- 指定静态IP方式的网络连接配置:nmcli con add con-name eno16777728 ifname eno16777728 autoconnect yes type ethernet ip4 10.1.254.254/16 gw4 10.1.0.1
- 启用/关闭所有的网络连接:nmcli net on/off
- 禁用网络设备并防止自动激活:nmcli con dis eno33554960
- 查看添加网络连接配置的帮助:nmcli con add help
-
- 作者:陈超同学
- 链接:https://www.jianshu.com/p/c333e15896f7
- 来源:简书
- 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
脚本配置:
-
- MYIFNAME=ens7f2;
- MYIPADDR=192.168.31.55;
- MYGATEWAY=182.200.31.251;
- MYHWADDR=$(ifconfig|grep ${MYIFNAME} -A 5|grep ether|awk '{print $2}');
-
- #modify line
- sed -i "s/^BOOTPROTO.*\+=.*/BOOTPROTO=static/" /etc/sysconfig/network-scripts/ifcfg-${MYIFNAME};
- sed -i "s/^ONBOOT.*\+=.*/ONBOOT=yes/" /etc/sysconfig/network-scripts/ifcfg-${MYIFNAME};
-
- #delete line
- sed -i '/IPADDR/d' /etc/sysconfig/network-scripts/ifcfg-${MYIFNAME};
- sed -i '/PREFIX/d' /etc/sysconfig/network-scripts/ifcfg-${MYIFNAME};
- sed -i '/GATEWAY/d' /etc/sysconfig/network-scripts/ifcfg-${MYIFNAME};
- sed -i '/HWADDR/d' /etc/sysconfig/network-scripts/ifcfg-${MYIFNAME};
-
- #add line
- sed -i "/ONBOOT/a\IPADDR=${MYIPADDR}" /etc/sysconfig/network-scripts/ifcfg-${MYIFNAME};
- sed -i "/IPADDR/a\PREFIX=24" /etc/sysconfig/network-scripts/ifcfg-${MYIFNAME};
- sed -i "/PREFIX/a\GATEWAY=${MYGATEWAY}" /etc/sysconfig/network-scripts/ifcfg-${MYIFNAME};
- sed -i "/GATEWAY/a\HWADDR=${MYHWADDR}" /etc/sysconfig/network-scripts/ifcfg-${MYIFNAME};
- #show
- cat /etc/sysconfig/network-scripts/ifcfg-${MYIFNAME};
#ip4 to hex ip
- #ip4 to hex ip
- function ip4_to_hex()
- {
-
- tmpifs=${IFS}
-
- IFS="."
- ipf1=`echo $1|awk '{print $1}'`
- ipf2=`echo $1|awk '{print $2}'`
- ipf3=`echo $1|awk '{print $3}'`
- ipf4=`echo $1|awk '{print $4}'`
-
- IFS=${tmpifs}
-
- g_hexip=`printf "%x%x:%x%x" ${ipf1} ${ipf2} ${ipf3} ${ipf4}`
- echo "ip:"$1
- echo "hexip:"$g_hexip
-
- }
从配置文件获取IP并转换成端口名
- ethip=$(line=`cat $CEPH_CONF |grep -E 'public_addr'`&&echo ${line#*=})
- g_nic_name=$(ifconfig | awk -F ":" '/'$ethip'/{print a}{a=$1}')
脚本接收见文章末尾。
- #!/bin/bash
- mask2cdr ()
- {
- # Assumes there's no "255." after a non-255 byte in the mask
- local x=${1##*255.}
- set -- 0^^^128^192^224^240^248^252^254^ $(( (${#1} - ${#x})*2 )) ${x%%.*}
- x=${1%%$3*}
- echo $(( $2 + (${#x}/4) ))
- }
- cdr2mask ()
- {
- # Number of args to shift, 255..255, first non-255 byte, zeroes
- set -- $(( 5 - ($1 / 8) )) 255 255 255 255 $(( (255 << (8 - ($1 % 8))) & 255 )) 0 0 0
- [ $1 -gt 1 ] && shift $1 || shift
- echo ${1-0}.${2-0}.${3-0}.${4-0}
- }
- # examples:
- mask2cdr 255.255.255.0
- cdr2mask 24
centos8 如何重启⽹络服务
1.重启⽹卡之前⼀定要重新载⼊⼀下配置⽂件,不然不能⽴即⽣效
nmcli c reload
2.重启⽹卡(下⾯的三条命令都可以):
- nmcli c up ens160
- nmcli d reapply ens160
- nmcli d connect ens160
总结:重启 centos8 的⽹卡,先载⼊新的配置⽂件,然后在执⾏重启⽹卡命令即可。
***** centos 版本区别*****
CentOS 7中支持 network.service 和 NetworkManager.service 2种方式配置网络,而在 CentOS 8 中已经废弃 network.service
,需要通过NetworkManager.service 配置网络。因此通过 systemctl restart network
已经无法使用了。
- [root@localhost ~]# cat /etc/redhat-release
- CentOS Linux release 8.4.2105
- [root@localhost ~]# systemctl restart network
- Failed to restart network.service: Unit network.service not found.
使用 nmcli
命令,需要两条指令,先加载配置,然后应用
- [root@localhost ~]# nmcli c reload
- [root@localhost ~]# nmcli c up ens33
- Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/9)
使用 ifdown
和 ifup
- [root@localhost ~]# ifdown ens33;ifup ens33
- Connection 'ens33' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/9)
- Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/10)
使用arping去查询IP对应的MAC,如果冲突,可以发现有时候返回不同的MAC地址,这时候就可以根据MAC找到对应的机器。
使用方法:
arping -U -I 网卡名 -s IP地址 网关
例如:arping -U -Ienp3s0 -s 172.16.1.100 172.16.1.1
观察得出只有一个mac地址返回,则说明没有IP冲突
批量查找IP冲突
一个个IP找效率太低了。这时候就可以用arp-scan去发送arp包,获取IP/MAC地址。如果一个IP出现多个MAC,就是IP冲突了。
yum -y install arp-scan
arp-scan -l
网关冲突
如果本网段IP都可以正常访问,但是跨网段就出现异常,那一般是网关冲突,直接使用arping一下网关IP就可以查找到对应的MAC。
(注:资产收集的时候,最好能收集到网卡的MAC,IP冲突的时候,就可以快速地找到对应的机器)
摘自:https://blog.csdn.net/qq_28903377/article/details/88529948
要从像这样的点十进制网络掩码中获取CIDR前缀,请执行以下操作:
255.255.192.0
您首先必须将四个八位位组转换为二进制,然后计算最高有效位(即前导位的数量):
11111111.11111111.11000000.00000000 # 18 ones = /18 in CIDR
此功能相当有创意。首先,我们剥离所有前导255
八位位组(即二进制全为八位的八位位组)并将结果存储在变量中x
:
local x=${1##*255.}
此步骤使用参数扩展,整个脚本非常依赖此参数。如果继续使用示例的网络掩码255.255.192.0
,则现在具有以下值:
- $1: 255.255.192.0
- $x: 192.0
接下来我们设置了三个变量:$1
,$2
,和$3
。这些称为位置参数 ; 它们很像普通的命名变量,但是通常在将参数传递给脚本或函数时进行设置。我们可以直接使用来设置值set --
,例如:
set -- foo bar # $1 = foo, $2 = bar
与位置参数相比,我更喜欢使用命名变量,因为它使脚本更易于阅读和调试,但是最终结果是相同的。我们设置$1
为:
0^^^128^192^224^240^248^252^254^
这实际上只是一个表,用于将某些十进制值转换为二进制并计算1
位数。我们稍后会再讨论。
我们设置$2
为
$(( (${#1} - ${#x})*2 ))
这称为算术扩展。它看起来很复杂,但实际上只是在计算1
我们在第一个命令中剥离的位数。它分解为:
(number of chars in $1 - number of chars in $x) * 2
在我们的情况下可以解决
(13 - 5) * 2 = 16
我们剥离了两个八位位组,得到16。这很有意义。
我们设置$3
为:
${x%%.*}
这是$x
第一个.
剥离后的所有值的值。在我们的情况下,这是192
。
我们需要将此数字转换为二进制并计算其中的1
位数,因此让我们回到“转换表”。我们可以将表格分为相等的块,每个块包含四个字符:
0^^^ 128^ 192^ 224^ 240^ 248^ 252^ 254^
以二进制形式,以上数字为:
- 00000000 10000000 11000000 11100000 11110000 11111000 11111100 11111110
- # 0 ones 1 one 2 ones 3 ones ...
如果我们从左数起,则表中的每个四个字符的块对应1
于二进制的一个附加位。我们正在尝试进行转换192
,因此让我们先从表的最右边192
开始,然后将其存储在x
:
x=${1%%$3*}
$x
现在的值
0^^^128^
其中包含两个四个字符的块或1
二进制的两位。
现在,我们只需要将1
前255
八位字节的位(总共16个,存储在variable中$2
)和1
上一步中的位(总共2个)相加:
echo $(( $2 + (${#x}/4) ))
哪里
${#x}/4
是的字符数$x
除以4,即中的四个字符的块数$x
。
18
让我们继续运行前面的示例,该示例的CIDR前缀为18
。
我们set --
用来设置位置参数$ 1到$ 9:
- $1: $(( 5 - ($1 / 8) )) # 5 - (18 / 8) = 3 [integer math]
- $2: 255
- $3: 255
- $4: 255
- $5: 255
- $6: $(( (255 << (8 - ($1 % 8))) & 255 )) # (255 << (8 - (18 % 8))) & 255 = 192
- $7: 0
- $8: 0
- $9: 0
让我们来看看用来设置公式$1
和$6
一点点接近。$1
设定为:
$(( 5 - ($1 / 8) ))
网络掩码的CIDR前缀的最大和最小值为32
11111111.11111111.11111111.11111111
子网掩码为0
00000000.00000000.00000000.00000000
上面的公式使用整数除法,因此可能的结果为1到5:
- 5 - (32 / 8) = 1
- 5 - ( 0 / 8) = 5
$6
设定为:
$(( (255 << (8 - ($1 % 8))) & 255 ))
让我们针对示例CIDR前缀进行细分18
。首先,我们取模数并做一些减法:
8 - (18 % 8) = 6
接下来,我们按此值将255按位移位:
255 << 6
这与将6 0
位二进制数推入255的末尾相同:
11111111000000
最后,我们将该值与255按位与:
- 11111111000000 &
- 00000011111111 # 255
这使
00000011000000
或简单地
11000000
看起来熟悉?这是二进制格式的网络掩码中的第三个八位位组:
- 11111111.11111111.11000000.00000000
- ^------^
以十进制表示的值是192。
接下来,我们根据的值移动位置参数$1
:
[ $1 -gt 1 ] && shift $1 || shift
在我们的例子中,值$1
是3,因此我们将位置参数3向左移动。的先前值$4
成为的新值$1
,的先前值$5
成为的值$2
,依此类推:
- $1: 255
- $2: 255
- $3: 192
- $4: 0
- $5: 0
- $6: 0
这些值应该看起来很熟悉:它们是我们的网络掩码中的十进制八位字节(最后加上两个额外的零)。要获得网络掩码,我们只需将前四个点之间的点打印出来即可:
echo ${1-0}.${2-0}.${3-0}.${4-0}
在-0
每个参数后表示使用0
作为默认值,如果参数没有设置。
255.255.192.0
2020-06-07
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。