【linux】CentOS启动后网络自动配置过程
1、启动后如何调用的网络配置脚本
网络配置脚本路径:/etc/init.d/network
根据不同启动级别对network脚本的调用情况:
进入/etc目录后,执行 $ find -name “*network”,结果如下:
$ find -name "*network"
./rc.d/init.d/network
./rc.d/rc0.d/K90network
./rc.d/rc1.d/K90network
./rc.d/rc2.d/S10network
./rc.d/rc3.d/S10network
./rc.d/rc4.d/S10network
./rc.d/rc5.d/S10network
./rc.d/rc6.d/K90network
可以看出开机时,调用network start,关机时调用network stop
2、/etc/init.d/network脚本分析
#/etc/init.d/functions中是/etc/init.d下脚本的常用函数
. /etc/init.d/functions#如果/etc/sysconfig/network文件不是常规文件,则退出
if [ ! -f /etc/sysconfig/network ]; thenexit 6
fi#我的环境中/etc/sysconfig/network为空,可以忽略
. /etc/sysconfig/network#pcmcia常用在笔记本的网卡中
if [ -f /etc/sysconfig/pcmcia ]; then. /etc/sysconfig/pcmcia
fi# Check that networking is up.
#未找到NETWORKING设置的地方
[ "${NETWORKING}" = "no" ] && exit 6# 如果没有/sbin/ip工具,直接退出
[ -x /sbin/ip ] || exit 1CWD=$(pwd)
cd /etc/sysconfig/network-scripts. ./network-functions# 查找环回之外的所有接口。
# 忽略别名、替代配置和编辑器备份文件
#查找/etc/sysconfig/network-scripts目录下的ifcfg-*文件
interfaces=$(ls ifcfg-* | \LC_ALL=C sed -e "$__sed_discard_ignored_files" \-e '/\(ifcfg-lo$\|:\|ifcfg-.*-range\)/d' \-e '{ s/^ifcfg-//g;s/[0-9]/ &/}' | \LC_ALL=C sort -k 1,1 -k 2n | \LC_ALL=C sed 's/ //')
rc=0# 下面根据不同的参数执行不用分支
# start|stop|status|restart|reload|force-reload
case "$1" in
start)#EUID有效用户ID,root权限的EUID==0,如果不是root权限则退出[ "$EUID" != "0" ] && exit 4rc=0# IPv6 hook (pre IPv4 start)if [ -x /etc/sysconfig/network-scripts/init.ipv6-global ]; then/etc/sysconfig/network-scripts/init.ipv6-global start prefiapply_sysctl#tell NM to reload its configurationif [ "$(LANG=C nmcli -t --fields running general status 2>/dev/null)" = "running" ]; thennmcli connection reloadfi#启动回环action $"Bringing up loopback interface: " ./ifup ifcfg-locase "$VLAN" inyes)if [ ! -d /proc/net/vlan ] && ! modprobe 8021q >/dev/null 2>&1 ; thennet_log $"No 802.1Q VLAN support available in kernel."fi;;esacvlaninterfaces=""vpninterfaces=""xdslinterfaces=""bridgeinterfaces=""# bring up all other interfaces configured to come up at boot timefor i in $interfaces; dounset DEVICE TYPE SLAVE NM_CONTROLLEDeval $(LANG=C grep -F "DEVICE=" ifcfg-$i)eval $(LANG=C grep -F "TYPE=" ifcfg-$i)eval $(LANG=C grep -F "SLAVE=" ifcfg-$i)eval $(LANG=C grep -F "NM_CONTROLLED=" ifcfg-$i)if [ -z "$DEVICE" ] ; then DEVICE="$i"; fiif [ "$SLAVE" = "yes" ] && ( ! is_nm_running || is_false $NM_CONTROLLED ) ; thencontinuefiif [ "${DEVICE##cipcb}" != "$DEVICE" ] ; thenvpninterfaces="$vpninterfaces $i"continuefiif [ "$TYPE" = "xDSL" -o "$TYPE" = "Modem" ]; thenxdslinterfaces="$xdslinterfaces $i"continuefiif [ "$TYPE" = "Bridge" ]; thenbridgeinterfaces="$bridgeinterfaces $i"continuefiif [ "$TYPE" = "IPSEC" ] || [ "$TYPE" = "IPIP" ] || [ "$TYPE" = "GRE" ]; thenvpninterfaces="$vpninterfaces $i"continuefiif [ "${DEVICE%%.*}" != "$DEVICE" -o "${DEVICE##vlan}" != "$DEVICE" ] ; thenvlaninterfaces="$vlaninterfaces $i"continuefiif LANG=C grep -EL "^ONBOOT=['\"]?[Nn][Oo]['\"]?" ifcfg-$i > /dev/null ; then# this loads the module, to preserve orderingis_available $icontinuefiaction $"Bringing up interface $i: " ./ifup $i boot[ $? -ne 0 ] && rc=1done# Bring up xDSL and VPN interfacesfor i in $vlaninterfaces $bridgeinterfaces $xdslinterfaces $vpninterfaces ; doif ! LANG=C grep -EL "^ONBOOT=['\"]?[Nn][Oo]['\"]?" ifcfg-$i >/dev/null 2>&1 ; thenaction $"Bringing up interface $i: " ./ifup $i boot[ $? -ne 0 ] && rc=1fidone# Add non interface-specific static-routes.if [ -f /etc/sysconfig/static-routes ]; thenif [ -x /sbin/route ]; thengrep "^any" /etc/sysconfig/static-routes | while read ignore args ; do/sbin/route add -$argsdoneelsenet_log $"Legacy static-route support not available: /sbin/route not found"fifi# IPv6 hook (post IPv4 start)if [ -x /etc/sysconfig/network-scripts/init.ipv6-global ]; then/etc/sysconfig/network-scripts/init.ipv6-global start postfi# Run this again to catch any interface-specific actionsapply_sysctltouch /var/lock/subsys/network[ -n "${NETWORKDELAY}" ] && /bin/sleep ${NETWORKDELAY};;
stop)[ "$EUID" != "0" ] && exit 4# Don't shut the network down if root or /usr is on NFS or a network# block device.if systemctl show --property=RequiredBy -- -.mount usr.mount | grep -q 'remote-fs.target' ; thennet_log $"rootfs or /usr is on network filesystem, leaving network up"exit 1fivlaninterfaces=""vpninterfaces=""xdslinterfaces=""bridgeinterfaces=""remaining=""rc=0# get list of bonding, vpn, and xdsl interfacesfor i in $interfaces; dounset DEVICE TYPEeval $(LANG=C grep -F "DEVICE=" ifcfg-$i)eval $(LANG=C grep -F "TYPE=" ifcfg-$i)if [ -z "$DEVICE" ] ; then DEVICE="$i"; fiif [ "${DEVICE##cipcb}" != "$DEVICE" ] ; thenvpninterfaces="$vpninterfaces $i"continuefiif [ "$TYPE" = "IPSEC" ] || [ "$TYPE" = "IPIP" ] || [ "$TYPE" = "GRE" ]; thenvpninterfaces="$vpninterfaces $i"continuefiif [ "$TYPE" = "Bridge" ]; thenbridgeinterfaces="$bridgeinterfaces $i"continuefiif [ "$TYPE" = "xDSL" -o "$TYPE" = "Modem" ]; thenxdslinterfaces="$xdslinterfaces $i"continuefiif [ "${DEVICE%%.*}" != "$DEVICE" -o "${DEVICE##vlan}" != "$DEVICE" ] ; thenvlaninterfaces="$vlaninterfaces $i"continuefiremaining="$remaining $i"donefor i in $vpninterfaces $xdslinterfaces $bridgeinterfaces $vlaninterfaces $remaining; dounset DEVICE TYPE(. ./ifcfg-$iif [ -z "$DEVICE" ] ; then DEVICE="$i"; fiif ! check_device_down $DEVICE; thenaction $"Shutting down interface $i: " ./ifdown $i boot[ $? -ne 0 ] && rc=1fi)doneaction $"Shutting down loopback interface: " ./ifdown ifcfg-losysctl -w net.ipv4.ip_forward=0 > /dev/null 2>&1# IPv6 hook (post IPv4 stop)if [ -x /etc/sysconfig/network-scripts/init.ipv6-global ]; then/etc/sysconfig/network-scripts/init.ipv6-global stop postfirm -f /var/lock/subsys/network;;
status)echo $"Configured devices:"echo lo $interfacesecho $"Currently active devices:"echo $(/sbin/ip -o link show up | awk -F ": " '{ print $2 }');;
restart|reload|force-reload)cd "$CWD"$0 stop$0 startrc=$?;;
*)echo $"Usage: $0 {start|stop|status|restart|reload|force-reload}"exit 2
esacexit $rc
总结/etc/init.d/network主要功能:
查找网卡配置文件/etc/sysconfig/network-scripts/ifcfg-*,然后循环调用/etc/sysconfig/network-scripts/ifup或ifdown来处理这些配置文件
3、/etc/sysconfig/network-scripts/ifup
ifup主要功能:根据设备类型调用不同的ifup-*来处理对应的ifcfg-*
脚本待分析?
4、/etc/sysconfig/network-scripts/ifup-eth
ifup-eth中调用/sbin/ip来完成网络设置
脚本待分析?
5、/etc/sysconfig/network-scripts/ifcfg-*详解
Linux网卡配置文件详解:
DEVICE=eth0 #指出设备名称
NM_CONTROLLED=yes #network mamager的参数,实时生效,不需要重启
ONBOOT=yes #设置为yes,开机自动启用网络连接
IPADDR=192.168.21.129 #IP地址
BOOTPROTO=none #设置为none禁止DHCP,设置为static启用静态IP地址,设置为dhcp开启DHCP服务
NETMASK=255.255.255.0 #子网掩码
DNS1=8.8.8.8 #第一个dns服务器
TYPE=Ethernet #网络类型为:Ethernet
GATEWAY=192.168.21.2 #设置网关
DNS2=8.8.4.4 #第二个dns服务器
IPV6INIT=no #禁止IPV6
USERCTL=no #是否允许非root用户控制该设备,设置为no,只能用root用户更改
HWADDR=00:0C:29:2C:E1:0F #网卡的Mac地址
PREFIX=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
NAME=“System eth0” #定义设备名称
以下解释参考博客:https://blog.csdn.net/jmyue/article/details/17288467
配置参数说明
注:这些参数值不区分大小写,不区分单引号和双引号,甚至可以不用引号。
TYPE:配置文件接口类型。在/etc/sysconfig/network-scripts/目录有多种网络配置文件,有Ethernet 、IPsec等类型,网络接口类型为Ethernet。
DEVICE:网络接口名称
BOOTPROTO:系统启动地址协议
none:不使用启动地址协议
bootp:BOOTP协议
dhcp:DHCP动态地址协议
static:静态地址协议
ONBOOT:系统启动时是否激活
yes:系统启动时激活该网络接口
no:系统启动时不激活该网络接口
IPADDR:IP地址
NETMASK:子网掩码
GATEWAY:网关地址
BROADCAST:广播地址
HWADDR/MACADDR:MAC地址。只需设置其中一个,同时设置时不能相互冲突。
PEERDNS:是否指定DNS。如果使用DHCP协议,默认为yes。
yes:如果DNS设置,修改/etc/resolv.conf中的DNS
no:不修改/etc/resolv.conf中的DNS
DNS{1, 2}:DNS地址。当PEERDNS为yes时会被写入/etc/resolv.conf中。
NM_CONTROLLED:是否由Network Manager控制该网络接口。修改保存后立即生效,无需重启。被其坑过几次,建议一般设为no。
yes:由Network Manager控制
no:不由Network Manager控制
USERCTL:用户权限控制
yes:非root用户允许控制该网络接口
no:非root用户不运行控制该网络接口
IPV6INIT:是否执行IPv6
yes:支持IPv6
no:不支持IPv6
IPV6ADDR:IPv6地址/前缀长度
6、NM_CONTROLLED和Network manger
参考博客:https://blog.csdn.net/petrosofts/article/details/80346348
安装操作系统时,自动生成的网卡配置文件,
/etc/sysconfig/network-scripts/ifcfg-eth0
里面有如下的参数:
NM_CONTROLLED=yes
说明 Network manger服务缺省情况下是启动的,
#chkconfig --list | grep NetworkManager
NetworkManager 0:off 1:off 2:on 3:on 4:on 5:on 6:off
#service NetworkManager status
NetworkManager (pid 1634) is running…
当系统管理员按以前的习惯,在远程连接的终端上,修改 ifcfg-eth0文件时,网络可能立即中断,导致远程连接死机,无法进行任何操作。
管理员只能到机房去(如果幸运,离机房比较近的话),到服务器的Console终端进行修改。
这是因为NM_CONTROLLED是network manger的参数,它是实时生效的,修改后无需要重启网络服务(或网卡),
如果NM_CONTROLLED=yes,当你修改ifcfg-ethx的文件内容时,如果内容不完全正确,有很大概率导致网络中断。
对于服务器、工作站、集群、虚拟机来说,一般都要把 NetworkManager 服务关掉:
#service NetworkManager status
NetworkManager (pid 1634) is running...
#service NetworkManager stop
Stopping NetworkManager daemon: [ OK ]
#chkconfig NetworkManager off
#chkconfig --list | grep NetworkManager
NetworkManager 0:off 1:off 2:off 3:off 4:off 5:off 6:off
同时,修改 /etc/sysconfig/network-scripts/ifcfg-eth0 等文件:
NM_CONTROLLED=no
相关文章:

web存储中cookie、session区别
http协议是一种无状态的协议,浏览器对服务器的每一次请求都是独立的。为了使得web能够产生一些动态信息,就需要保存”状态”,而cookie和session机制就是为了解决http协议无状态而产生。cookie是一种在客户端保存状态的方案,sessio…

李沐团队新作Gluon,复现CV经典模型到BERT,简单好用 | 强烈推荐
参加 2019 Python开发者日,请扫码咨询 ↑↑↑责编 | Jane出品 | AI科技大本营(公众号id:rgznai100)【导语】上周,李沐老师公布 GluonNLP0.6 版本,借助 Apache MXNet,大家可以尝试在 Gluon 中复现…

中国科学技术大学 中科大(USTC)UBUNTU源Linux镜像站IPV4/IPV6
Ubuntu下的使用方法:使用如下命令:sudo gedit /etc/apt/sources.list请编辑/etc/apt/sources.list,用下面的内容替换: deb http://mirrors.ustc.edu.cn/ubuntu/ natty main restricted universe multiverse deb http://mirrors.ustc.edu.cn/…

深度分析蔡徐坤的百万流量数据,揭底哪些是假的!
参加 2019 Python开发者日,请扫码咨询 ↑↑↑作者 | Alfred,毕业于暨南大学,数据挖掘算法工程师,主要研究领域为数据挖掘、机器学习来源 | Alfred数据室(公众号id:Alfred_Lab)责编 | Jane前段时…

【Linux】延时函数sleep、usleep、nanosleep、select、pselect的比较
1、简介 sleep()-------以秒为单位 #include<unistd.h> unsigned int sleep(unsigned int seconds); return:若进程暂停到参数seconds 所指定的时间,成功则返回0,若有信号中断则返回剩余秒数。 在linux中,sleep是通过nanos…

特斯拉解锁对汽车电池容量的软件限制,以帮助用户逃离飓风危险
为了对抗飓风,为用户提高逃生的可能性,特斯拉公司在此特殊情况下免费释放了电池容量限制。 据悉,在伊斯玛飓风抵达佛罗里达州之前,特斯拉为佛罗里达特斯拉的电动汽车用户更新解锁了其60kwh型号下电动汽车被封住的电池容量&#x…

nginx安装 问题 1
./configure: error: the HTTP rewrite module requires the PCRE library 有时候,我们需要单独安装nginx,来处理大量的下载请求。单独在Centos5安装nginx遇到的rewrite和HTTP cache错误解决办法:wget http://nginx.org/download/nginx-0.8.3…

【Qt】使用QPalette设置按钮颜色时,不生效
1、问题描述 在练习QStylePlugin示例时,通过插件将按钮颜色设置为红色,但是没有效果,原因是: 使用QPalette设置按钮颜色时,不生效,代码如下 QPalette.setBrush(QPalette::Button, Qt::red)2、问题分析 Q…

Swagger 生成 PHP restful API 接口文档
需求和背景 需求: 为客户端同事写接口文档的各位后端同学,已经在各种场合回忆了使用自动化文档工具前手写文档的血泪史.我的故事却又不同,因为首先来说,我在公司是 Android 组负责人,属于上述血泪史中催死人不偿命的客户端阵营.但血泪史却是相通的,没有自动化文档的日子,对接口…

FPGA技术的未来发展:谁与AI平分秋色
参加 2019 Python开发者日,请扫码咨询 ↑↑↑作者 | 老石来源 | 老石谈芯(公众号id:gh_5ce1d0cb1568)责编 | Jane任何科学技术的发展和进步都离不开两个主要的推动力量,一个是相关领域各大公司的研发,另一个…

一体化设计让容灾变简单
容灾很难实现吗?容灾不仅包括技术方面的问题,而且涉及数据保护策略、投入产出比等方面的问题。从这个角度讲,对于大多数的中小型用户来说,容灾的实施确实比较困难。不过,爱数软件副总裁李基亮认为,容灾的实…

深度研究自然梯度优化,从入门到放弃 | Deep Reading
参加 2019 Python开发者日,请扫码咨询 ↑↑↑作者 | Cold Marie Wild译者 | 刘畅责编 | Jane出品 | AI科技大本营(公众号id:rgznai100)【导语】根据自然梯度的支持者提出一种建议:我们不应该根据参数空间中的距离来定义…

【Qt】QtCreator中关于Style Plugin Example没有效果的修改方法
1、问题描述 在QtCreator练习QStylePlugin的例子时,没有效果,原因是QPalette使用不当造成。 详见:https://blog.csdn.net/u010168781/article/details/88250451 2、解决方法 解决方法很简单,我们只是为了演示QStylePlugin的效果,然而QPushButton不能通过QPalette来改变…

最大公约数和最小公倍数的欧几里得算法
最大公约数的算法竟然如此简单,不说了,见代码 #include <stdio.h> int gcd(int a, int b) { if(b 0) return a; return gcd(b, a%b); } 简化后如下: int gcd(int a, int b) { return (b0 ? a: gcd(b, a%b)); } 而最小公倍数的也就为&a…

如何查看CISCO FWSM上ACL分区的空闲资源
在CISCO防火墙模块上有的时候在做策略NAT的时候会碰到如下的错误信息:输入:nat (inside) 1 access-list XYZ错误提示:ERROR: Unable to add Policy Rulesaccess-list XYZ 可以在配置的ACL中显示尤其在添加一些基于策略的NAT的时候,因为其可能会产生大量的…

强烈推荐一款Python可视化神器!
参加 2019 Python开发者日,请扫码咨询 ↑↑↑翻译 | Lemon来源 | Plotly出品 | Python数据之道 (ID:PyDataRoad)Plotly Express 入门之路Plotly Express 是一个新的高级 Python 可视化库:它是 Plotly.py 的高级封装&am…

【Qt】QIcon::fromTheme:从系统主题中获取图标
1、简介 函数原型 QIcon QIcon::fromTheme(const QString &name) QIcon QIcon::fromTheme(const QString &name, const QIcon &fallback)上述两个函数可以从系统主题中获取图标,后者可以在主题中找不到图标时,再使用自己定义的图标&#x…

检验EIGRP
路由器必须与其邻居建立邻接关系,EIGRP 才能发送或接收更新。EIGRP 路由器通过与相邻路由器交换 EIGRP Hello 数据包来建立邻接关系。 使用 show ip eigrp neighbors 命令来查看邻居表并检验 EIGRP 是否已与其邻居建立邻接关系。对于每台路由器,您应该能…

【Qt】通过QtCreator源码学习Qt(十):多国语言支持
1、获取系统支持的语言 QStringList uiLanguages;uiLanguages = QLocale::system().uiLanguages();2、从设置中获取想要显示的语言,尝试覆盖默认的 QString overrideLanguage = settings->value(QLatin1String("General/OverrideLanguage")).toString();if (!ove…

吴恩达最新斯坦福课程《深度学习》全部视频已送达,请签收!
参加 2019 Python开发者日,请扫码咨询 ↑↑↑责编 | Jane出品 | AI科技大本营(公众号id:rgznai100)【导语】2018 年秋季,吴恩达教授在斯坦福新开了一门 CS230《深度学习》课程,近期,该课程的视频…

mysql 5.7 修改root 密码
前言 MySQL5.7为了加强安全性,yum 安装后为root用户随机生成了一个密码,同时修改root密码上,也增加了一些校验,会报 Your password does not satisfy the current policy requirements 错误。 安装 rpm -ivh http://repo.mysql.co…

2-7-PatchesAdministration
/cdrom/sol_10_305_x86/s2/Solaris_10/Product 下是包含系统自带的补丁包 该目录下的包需要复制到/var/spool/pkg目录下再使用pkgadd才可以被安装cp -r SUNWi15cs /var/spool/pkgpkgadd SUNWi15cs2-7系统补丁管理补丁类型:standard patchesrecommended patchesfirmw…

【Qt】通过QtCreator源码学习Qt(十一):Utils::Icon,根据不同主题、不同状态变换图标
1、简介 在QtCreator中Utils::Icon封装的图标可以根据主题变换,还可以设置不同状态下的图标的颜色。不同状态下的颜色变换,由QIcon::addPixmap函数实现: void QIcon::addPixmap(const QPixmap &pixmap, Mode mode = Normal, State state = Off)2、源码分析 src/libs/…

Python_赋值和深浅copy
Python中赋值和深浅copy存储变化 在刚学python的过程中,新手会对python中赋值、深浅copy的结果感到丈二和尚。经过多次在网上查找这几个过程的解释说明以及实现操作观察,初步对这几个过程有了浅显的认识。以下内容仅是我在学习过程中遇到的问题&…

萌新养成 | AI科技大本营实习生招募计划
金三银四跳槽季这个时候需要做好准备的可不仅仅只有在职或者离职的萝卜尚未毕业的萌新也需要提早做准备了毕竟把自己修炼成一个优秀的萝卜也不是一件容易的事所以,放下你找对象、刷副本、世界游的想法加入我们为你量身定制的人才培养计划加入营长的团队,…

踏上云旅程 存储准备好了吗
在云计算的概念刚出现时,人们习惯将原始数据存在本地,而将备份数据放到云中。随着云计算技术和应用逐渐走向成熟,人们可能会把原始数据存在云中,而把备份数据放在本地。全球存储网络工业协会(SNIA)主席Wayn…

UCloud与NTT达成合作,提供可靠跨地域混合云服务
近日,UCloud宣布与NTT Communications东亚地区总部NTT Com Asia (以下简称“NTT Com Asia”) 达成合作伙伴协议。双方将发挥各自优势,通过UCloud云服务与NTT Communications企业级 Enterprise Cloud 服务互联互通,为国内企业以及进入中国的跨…

ICCV 2019论文投稿数破纪录,中科院、清华名列前茅,苹果垫底
参加 2019 Python开发者日,请扫码咨询 ↑↑↑整理 | 琥珀出品 | AI科技大本营(ID:rgznai100)昨日,作为计算机视觉领域里顶级会议这一的 International Conference on Computer Vision (ICCV)公布了 2019 年…

【linux】在CentOS7上更改端口号时报错:Job for sshd.service failed because the control process exited with error
1、问题描述 在在CentOS7上更改端口号时报错: Job for sshd.service failed because the control process exited with error code.See “systemctl status sshd.service” and “journalctl -xe” for details. 2、修改ssh端口号的方法 修改:$ sudo …

硅谷风投押注计算机网络安全市场
今天,新浪转载了一篇外媒报道,称随着一系列安全事件的集中爆发,风险投资家们业从计算机安全领域看到了机会,希望加大对这一市场的投资。 文章最后指未来几年可能上市的公司包括:梭子鱼、Proofpoint、Palo Alto Network…