《Linux运维总结:firewalld防火墙使用教程》

2023-05-16

文章目录

  • 一、firewalld基础知识
    • 1.1、firewalld基本介绍
    • 1.2、firewalld与iptables关系与区别
    • 1.3、firewalld默认策略
    • 1.4、firewalld配置模式
    • 1.5、firewalld配置方法
    • 1.6、firewalld区域概念
    • 1.7、firewalld基本指令参数
  • 二、firewalld区域配置策略
  • 三、firewalld服务配置策略
  • 四、firewalld端口配置策略
  • 五、firewalld富规则配置策略
  • 六、firewalld实现路由器功能
    • 6.1、firewalld实现SNAT
    • 6.2、firewalld实现DNAT
  • 总结:整理不易,如果对你有帮助,可否点赞关注一下?


一、firewalld基础知识

1.1、firewalld基本介绍

firewalld即Dynamic Firewall Manager of Linux systems,Linux系统的动态防火墙管理器,是iptables的前端控制器,用于实现持久的网络流量规则。


1.2、firewalld与iptables关系与区别

1、firewalld与ipables都不是真正的防火墙,只是用来定义防火墙规则功能的管理工具,将定义好的规则交由内核中的netfilter来实现真正的防火墙功能。
2、在RHEL7里有几种防火墙共存:firewalld、iptables、ebtables,默认是使用firewalld来管理netfilter子系统,不过底层调用的命令仍然是iptables等。

在这里插入图片描述
与直接控制iptables相比,使用firewalld有两个主要区别:
1、firewalld使用区域和服务而不是链式规则。
2、firewalld默认是拒绝的,需要设置以后才能放行。而iptables默认是允许的,需要拒绝的才去限制。
3、firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效。
4、iptables service在/etc/sysconfig/iptables中存储配置,而firewalld将配置存储在/usr/lib/firewalld/和/etc/firewalld/中的各种XML文件里。


1.3、firewalld默认策略


1.4、firewalld配置模式

firewall-cmd 命令工具有两种配置模式:

运行时规则(Runtime mode):表示当前内存中运行的防火墙配置,在系统或firewalld服务重启、停止时配置将失效。
永久规则(Permanent mode:表示重启防火墙或重新加载防火墙时的规则配置,是永久存储在配置文件中的。

firewall-cmd命令工具与配置模式相关的选项有三个。

--reload: 重新加载防火墙规则并保持状态信息,即将永久配置应用为运行时配置。
--permanent:带有此选项的命令用于设置永久性规则,这些规则只有在重新启动firewalld或重新加载防火墙规则时才会生效,若不带有此选项,表示用于设置运行时规则。
--runtime-to-permanent:将当前的运行时配置写入规则配置文件中,使之成为永久性配置。

1.5、firewalld配置方法

firewallD的配置方法主要有三种:

1、firewall-config
2、firewall-cmd
3、直接编辑xml文件

说明:其中firewall-config是图形化工具,firewall-cmd是命令行工具。


1.6、firewalld区域概念

通过将网络划分成不同的区域,制定出不同区域之间的访问控制策略来控制不同程序区域间传送的数据流。例如,互联网是不可信任的区域,而内部网络是高度信任的区域。网络安全模型可以在安装,初次启动和首次建立网络连接时选择初始化。该模型描述了主机所连接的整个网络环境的可信级别,并定义了新连接的处理方式。

查看所有的域
在这里插入图片描述
说明:firewalld的默认区域是public,firewalld默认提供了九个zone配置文件:block.xml、dmz.xml、drop.xml、external.xml、 home.xml、internal.xml、public.xml、trusted.xml、work.xml,如下图所示:
在这里插入图片描述


1、block

block(限制):拒绝所有网络连接

如下图所示:
在这里插入图片描述


2、dmz

dmz(非军事区):仅接受ssh服务连接

如下图所示:
在这里插入图片描述


3、drop

drop(丢弃):任何接收的网络数据包都被丢弃,没有任何回复。

如下图所示:
在这里插入图片描述


4、external

external(外部):出去的ipv4网络连接通过此区域伪装和转发,仅接受ssh服务连接。

如下图所示:
在这里插入图片描述


5、home

home(家庭):用于家庭网络,仅接受ssh、mdns、ipp-client、samba-client、dhcpv6-client服务连接。

如下图所示:
在这里插入图片描述


6、internal

internal(内部):用于内部网络,仅接受ssh、mdns、ipp-client、samba-client、dhcpv6-client服务连接。

如下图所示:
在这里插入图片描述


7、public

public(公共):在公共区域内使用,仅接受ssh或dhcpv6-client服务连接,为firewalld的默认区域。

如下图所示:
在这里插入图片描述


8、trusted

trusted(信任):可接受所有的网络连接

如下图所示:
在这里插入图片描述


9、work

work(工作):用于工作区,仅接受ssh或dhcpv6-client服务连接。

如下图所示:
在这里插入图片描述


1.7、firewalld基本指令参数

1、zone区域相关指令

firewall-cmd --get-default-zone        #查询默认的区域名称
firewall-cmd --set-default-zone=<zone> #设置默认的区域,使其永久生效
firewall-cmd --get-active-zones   #显示当前正在使用的区域与网卡名称
firewall-cmd --get-zones          #显示总共可用的区域
firewall-cmd --delete-zone=<zone> #删除指定域
firewall-cmd --new-zone=<zone> --permanent #创建指定域
firewall-cmd --zone=<zone> --list-all #查看指定域的详细信息
firewall-cmd --info-zone=<zone> #查看指定域的详细信息
firewall-cmd --list-all-zones   #查看所有域的详细信息

2、services服务相关指令

firewall-cmd --new-service=<service> --permanent #创建service   
firewall-cmd --delete-service=<service> --permanent #删除service
firewall-cmd --info-service=<service> #查看指定服务的详细信息
firewall-cmd --service=<service> --set-description=<description> --permanent #设置指定服务的描述信息
firewall-cmd --service=<service> --get-description --permanent #查看指定服务的描述信息
firewall-cmd --service=<service> --set-short=<description> --permanent  #设置指定服务的描述信息
firewall-cmd --service=<service> --get-short --permanent #查看指定服务的描述信息
firewall-cmd --service=<service> --add-port=<portid>[-<portid>]/<protocol> --permanent #服务添加端口
firewall-cmd --service=<service> --remove-port=<portid>[-<portid>]/<protocol> --permanent #服务移除端口
firewall-cmd --service=<service> --query-port=<portid>[-<portid>]/<protocol> --permanent #查看服务指定端口
firewall-cmd --service=<service> --get-ports #查看服务所有端口
firewall-cmd --service=<service> --add-protocol=<protocol> --permanent #服务添加协议
firewall-cmd --service=<service> --remove-protocol=<protocol> --permanent #服务移除协议
firewall-cmd --service=<service> --query-protocol=<protocol> --permanent #查看服务指定协议
firewall-cmd --service=<service> --get-protocols --permanent #查看服务所有协议 
firewall-cmd --service=<service> --add-source-port=<portid>[-<portid>]/<protocol> --permanent #服务添加源端口
firewall-cmd --service=<service> --remove-source-port=<portid>[-<portid>]/<protocol> --permanent #服务移除源端口
firewall-cmd --service=<service> --query-source-port=<portid>[-<portid>]/<protocol> --permanent #服务查看指定源端口
firewall-cmd --service=<service> --get-source-ports --permanent #服务查看所有源端口
firewall-cmd --service=<service> --set-destination=<ipv>:<address>[/<mask>] --permanent #服务添加访问的目标ip
firewall-cmd --service=<service> --remove-destination=<ipv> --permanent #服务移除访问的目标ip
firewall-cmd --service=<service> --query-destination=<ipv>:<address>[/<mask>] --permanent #服务查看指定的目标ip
firewall-cmd --service=<service> --get-destinations --permanent #服务查看所有目标ip

3、Port端口相关指令

firewall-cmd --list-ports        #查看默认区域所有端口 
firewall-cmd --add-port=<portid>[-<portid>]/<protocol>  --permanent     #设置默认区域允许该端口          
firewall-cmd --remove-port=<portid>[-<portid>]/<protocol>  --permanent  #移除默认区域允许该端口        
firewall-cmd --query-port=<portid>[-<portid>]/<protocol> --permanent    #查看默认区域指定端口

4、Interface网卡相关指令

firewall-cmd --list-interfaces #查看默认区域网卡接口   
firewall-cmd --add-interface=<interface> --permanent #将某个网卡绑定到某个指定区域
firewall-cmd --change-interface=<interface> #将某个网卡与区域进行关联
firewall-cmd --query-interface=<interface>
firewall-cmd --remove-interface=<interface>

5、其他相关指令

firewall-cmd --list-all	#显示当前区域的网卡配置参数、资源、端口以及服务等信息
firewall-cmd --reload	#让“永久生效”的配置规则立即生效,并覆盖当前的配置规则

二、firewalld区域配置策略

使用firewalld各个区域规则结合配置,调整默认public区域拒绝所有流量,但如果来源IP是192.168.1.0/24网段则允许。

1、查看默认使用区域及配置规则

1、通过--get-default-zone获取当前默认使用的区域
[root@snat zones]# firewall-cmd --get-default-zone
public

2、.通过--list-all查看当前默认区域public配置了哪些规则
[root@snat zones]# firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33 ens38
  sources: 
  services: ssh dhcpv6-client
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

2、使用firewalld各个区域规则结合配置,调整默认public区域拒绝所有流量,但如果来源IP是192.168.1.0/24网段则允许

1、临时移除默认区域的规则策略
[root@snat zones]# firewall-cmd --remove-service=ssh --remove-service=dhcpv6-client
success

2、添加来源是192.168.1.0/24网段,临时将其加入白名单(更精细化控制使用富规则)
[root@snat zones]# firewall-cmd --add-source=192.168.1.0/24 --zone=trusted
success

3、检查当前活动的区域
[root@snat zones]# firewall-cmd --get-active-zone
public
  interfaces: ens33 ens38
trusted
  sources: 192.168.1.0/24

3、查询public区域是否允许请求ssh、dhcpv6-client服务的流量

[root@snat zones]# firewall-cmd --zone=public --query-service=ssh
no
[root@snat zones]# firewall-cmd --zone=public --query-service=dhcpv6-client
no

4、上述配置均为临时配置,使用firewall-cmd --reload临时配置会被清空

[root@snat zones]# firewall-cmd --reload
success
[root@snat zones]# firewall-cmd --get-active-zone
public
  interfaces: ens33 ens38

三、firewalld服务配置策略

为了方便管理,firewalld预先定义了很多服务,存放在/usr/lib/firewalld/services/目录中,服务通过单个的XML配置文件来指定。这些配置文件则按以下格式命名:service-name.xml,每个文件对应一项具体的网络服务,如ssh服务等。与之对应的配置文件中记录了各项服务所使用的tcp/udp端口,在最新版本的firewalld中默认已经定义了126多种服务供我们使用,对于每个网络区域,均可以配置允许访问的服务。

当默认提供的服务不适用或者需要自定义某项服务的端口时,我们需要将service配置文件放置在/etc/firewalld/services/目录中。

service配置具有以下优点:

1、通过服务名字来管理规则更加人性化
2、通过服务来组织端口分组的模式更加高效,如果一个服务使用了若干个网络端口,则服务的配置文件就相当于提供了到这些端口的规则管理的批量操作快捷方式。

service文件中的标签解释:

1、version:version是service节点的一个可选属性,用于表示service的版本。
2、short:short在zone、icmptype等配置文件中也存在,其作用是简介,主要是让我们对所配置的内容有所了解,类似于注释的作用。
3、description:作用跟short相同,不过描述信息更加详细。
4、port:服务所对应的端口,这项是service中非常重要的一个配置项,大部分service主要就是对port进行绑定的,当一个service绑定了指定端口之后,该端口接收到的连接就会当成这个service,然后到所对应的zone中去查询规则,从而判断是否可以放行。port节点有两可个配置的属性:port和protocol
5、port属性:port用来配置所使用的端口号,可以是单个端口也可以是一个端口段,比如port=100-105表示100到105之间的端口号,另外,port属性是个可选属性,可以不进行设置。
6、protocol属性:protocol属性用于指定所对应的协议,如果port属性不为空,那么protocol应该设置为tcp或者udp,如果port属性为空(没设置),那么protocol可以设置为/etc/protocols中所包含的任意协议。
7、destination:destination非常简单,它就表示目标地址,也就是根据目标地址来绑定服务,他有两个属性:ipv4和ipv6,分别用于绑定ipv4和ipv6的地址,可以使用单个地址也可以使用掩码。另外,在一个service中destination最多只能出现一次。

这里就以Mysql服务为例,如下所示我这边使用docker部署了mysql服务,因为firewalld的防火墙规则默认是拒绝的,启动firewalld防火墙使用客户端工具无法连接,现在对mysql服务进行配置防火墙规则,允许客户端用户可以连接Mysql服务。
在这里插入图片描述
操作步骤如下:

1、编辑配置mysql服务

[root@snat firewalld]# cp /usr/lib/firewalld/services/mysql.xml /etc/firewalld/services/
[root@snat services]# vim /etc/firewalld/services/mysql.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>MySQL</short>
  <description>MySQL Database Server</description>
  <port protocol="tcp" port="53000"/> #修改端口
</service>

2、配置前查看public区域内允许访问的服务

[root@snat services]# firewall-cmd --zone=public --list-services
ssh dhcpv6-client

3、为public区域设置允许访问的mysql服务

[root@snat services]# firewall-cmd --zone=public --add-service=mysql --permanent

4、重新加载配置

[root@snat services]# firewall-cmd --reload
success

5、配置后查看public区域内允许访问的服务

[root@snat zones]# firewall-cmd --zone=public --list-services
ssh mysql dhcpv6-client

6、移除mysql服务防火墙规则

[root@snat services]# firewall-cmd --zone=public --remove-service=mysql --permanent
success
[root@snat services]# firewall-cmd --reload
success
[root@snat zones]# firewall-cmd --zone=public --list-services
ssh dhcpv6-client

四、firewalld端口配置策略

在进行服务配置时,预定义的网络服务可以使用服务名配置,服务所涉及的端口就会自动打开。但是,对于非预定义的服务只能手动为指定的区域添加端口。

使用firewalld允许客户请求的服务器的80/tcp端口,仅临时生效,如添加–permanent重启后则永久生效

1、临时添加允许放行单个端口

[root@snat zones]# firewall-cmd --add-port=80/tcp
success
[root@snat zones]# firewall-cmd --list-ports
80/tcp

2、临时添加放行多个端口

[root@snat zones]# firewall-cmd --add-port={80/tcp,8080/tcp}
success
[root@snat zones]# firewall-cmd --list-ports
80/tcp 8080/tcp

3、.永久添加多个端口,需要添加–permanent,并且需要重载firewalld

[root@snat zones]# firewall-cmd --add-port={80/tcp,8080/tcp} --permanent
success
[root@snat zones]# firewall-cmd --reload
success
[root@snat zones]# firewall-cmd --list-ports
80/tcp 8080/tcp

4、移除临时添加的端口规则

[root@snat zones]# firewall-cmd --remove-port={80/tcp,8080/tcp}
success
[root@snat zones]# firewall-cmd --list-ports

5、移除永久添加的端口规则

[root@snat zones]# firewall-cmd --remove-port={80/tcp,8080/tcp} --permanent
success
[root@snat zones]# firewall-cmd --reload
success
[root@snat zones]# firewall-cmd --list-ports

五、firewalld富规则配置策略

firewalld中的富规则可以配置更细致、更详细的防火墙策略,它可以针对系统服务、端口号、源地址和目标地址等诸多信息进行更有针对性的策略配置, 优先级在所有的防火墙策略中也是最高的。

富规则相关命令

man firewall-cmd                #帮助手册
man firewalld.richlanguage      #获取富规则手册
    rule
        [source]
        [destination]
        service|port|protocol|icmp-block|masquerade|forward-port
        [log]
        [audit]
        [accept|reject|drop]

rule [family="ipv4|ipv6"]
source address="address[/mask]" [invert="True"]
service name="service name"
port port="port value" protocol="tcp|udp"
forward-port port="port value" protocol="tcp|udp" to-port="port value" to-addr="address"
accept | reject [type="reject type"] | drop

富规则相关命令
--add-rich-rule='<RULE>'        #在指定的区添加一条富规则
--remove-rich-rule='<RULE>'     #在指定的区删除一条富规则
--query-rich-rule='<RULE>'      #找到规则返回0 ,找不到返回1
--list-rich-rules               #列出指定区里的所有富规则

这里就以consul服务为例,因为firewalld的防火墙规则默认是拒绝的,启动firewalld防火墙使用客户端用户无法连接,现在对consul服务进行配置防火墙规则,允许客户端用户可以连接consul服务。
在这里插入图片描述
操作步骤如下:

1、添加防火墙规则前在192.168.1.48主机上访问consul服务端口
在这里插入图片描述
2、在192.168.1.34主机上添加防火墙规则(对指定ip开放指定端口)

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="tcp" port="8300" accept" 
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="tcp" port="8301" accept" 
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="tcp" port="8302" accept" 
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="tcp" port="8500" accept" 
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="tcp" port="8600" accept" 
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="udp" port="8301" accept" 
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="udp" port="8302" accept" 
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="udp" port="8600" accept" 
firewall-cmd --reload

进入/etc/firewalld/zones/public.xml文件查看配置的规则,如下图所示:
在这里插入图片描述
总结:也可以手动编辑public.xml文件进行规则添加。

3、查看配置结果,如下图所示:
在这里插入图片描述
4、添加防火墙规则后在192.168.1.48主机上访问consul服务端口
在这里插入图片描述
5、删除防火墙规则

firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="tcp" port="8300" accept" 
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="tcp" port="8301" accept" 
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="tcp" port="8302" accept" 
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="tcp" port="8500" accept" 
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="tcp" port="8600" accept" 
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="udp" port="8301" accept" 
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="udp" port="8302" accept" 
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="udp" port="8600" accept" 
firewall-cmd --reload

总结:也可以在public.xml文件中将之前添加的规则进行手动删除。


六、firewalld实现路由器功能

6.1、firewalld实现SNAT

实例:实现内部主机访问外部服务
在这里插入图片描述
步骤如下:

1、开启路由转发

#临时开启
[root@snat zones]# echo 1 > /proc/sys/net/ipv4/ip_forward

#永久开启
[root@snat zones]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
[root@snat zones]# sysctl -p

2、firewalld防火墙开启masquerade, 实现地址转换

设置默认区域的SNAT的IP伪装
[root@snat zones]# firewall-cmd --add-masquerade --permanent
[root@snat zones]# firewall-cmd --reload
#################################下面部分不用执行#################################
查看默认区域的SNAT是否允许
[root@snat zones]# firewall-cmd --query-masquerade --permanent

删除默认区域的SNAT功能
[root@snat zones]# firewall-cmd --remove-masquerade --permanent

3、客户端将网关指向firewalld服务器,将所有网络请求交给firewalld

[root@web ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
GATEWAY=192.168.149.100

4、客户端主机192.168.149.101上测试访问http://192.168.1.48:80

[root@host-48 ~]# tail -1000f /var/log/nginx/access.log
192.168.1.34 - - [19/Nov/2021:15:14:41 +0800] "GET / HTTP/1.1" 200 6 "-" "curl/7.29.0" "-"
192.168.1.34 - - [19/Nov/2021:15:14:42 +0800] "GET / HTTP/1.1" 200 6 "-" "curl/7.29.0" "-"
192.168.1.34 - - [19/Nov/2021:15:14:42 +0800] "GET / HTTP/1.1" 200 6 "-" "curl/7.29.0" "-"

通过日志会发现,客户端是先伪装成了192.168.1.34这个ip后再访问的web服务器!


6.2、firewalld实现DNAT

端口转发:将发往本机的特定端口的流量转发到本机或不同机器的另一个端口,通常要配合地址伪装才能实现.

实例:实现外部主机访问内部服务
在这里插入图片描述
步骤如下:

1、开启路由转发

#临时开启
[root@snat zones]# echo 1 > /proc/sys/net/ipv4/ip_forward

#永久开启
[root@snat zones]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
[root@snat zones]# sysctl -p

2、添加提供访问的端口

[root@snat zones]# firewall-cmd --add-port=8091/tcp --permanent
success

3、添加转发的端口和ip地址

格式:firewall-cmd --permanet --zone=<区域> --add-forward-port=port=源端口号:proto=<协议>:toport=<目标端口>:toaddr=<目标IP地址>

[root@snat zones]# firewall-cmd --permanent --add-forward-port=port=8091:proto=tcp:toport=80:toaddr=192.168.1.48
success

4、开启FirewallD的ip地址伪装

[root@snat zones]# firewall-cmd --add-masquerade --permanent

5、配置生效

[root@snat zones]# firewall-cmd --reload
success
[root@snat zones]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33 ens38
  sources: 
  services: ssh dhcpv6-client
  ports: 8091/tcp
  protocols: 
  masquerade: yes
  forward-ports: port=8091:proto=tcp:toport=80:toaddr=192.168.1.48
  source-ports: 
  icmp-blocks: 
  rich rules: 

6、中转服务器上的8091端口实际是没有打开的

[root@snat zones]# ss -tnulp | grep 8091

7、客户端主机测试访问http://192.168.1.34:8091,实际访问的是192.168.1.48主机上的nginx 80端口服务,但是nginx日志记录的源ip地址为中转服务器的ip地址,这样就实现了地址伪装
在这里插入图片描述


总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:Linux运维实战总结

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《Linux运维总结:firewalld防火墙使用教程》 的相关文章

  • 在我的 index.php 中加载 CSS 和 JS 等资源时出现错误 403

    我使用的是 Linux Elementary OS 并在 opt 中安装了 lampp My CSS and JS won t load When I inspect my page through browser The console
  • docker容器大小远大于实际大小

    我正在尝试从中构建图像debian latest 构建后 报告的图像虚拟大小来自docker images命令为 1 917 GB 我登录查看尺寸 du sh 大小为 573 MB 我很确定这么大的尺寸通常是不可能的 这里发生了什么 如何获
  • 多处理:仅使用物理核心?

    我有一个函数foo它消耗大量内存 我想并行运行多个实例 假设我有一个有 4 个物理核心的 CPU 每个核心有两个逻辑核心 我的系统有足够的内存来容纳 4 个实例foo并行但不是 8 个 此外 由于这 8 个核心中的 4 个是逻辑核心 我也不
  • 如何在 Bash 中给定超时后终止子进程?

    我有一个 bash 脚本 它启动一个子进程 该进程时不时地崩溃 实际上是挂起 而且没有明显的原因 闭源 所以我对此无能为力 因此 我希望能够在给定的时间内启动此进程 如果在给定的时间内没有成功返回 则将其终止 有没有simple and r
  • 我不明白 execlp() 在 Linux 中如何工作

    过去两天我一直在试图理解execlp 系统调用 但我还在这里 让我直奔主题 The man pageexeclp 将系统调用声明为int execlp const char file const char arg 与描述 execl exe
  • 按进程名称过滤并记录 CPU 使用情况

    Linux 下有选项吗顶部命令 https www man7 org linux man pages man1 top 1 html我可以在哪里按名称过滤进程并将每秒该进程的 CPU 使用情况写入日志文件 top pgrep 过滤输出top
  • 如何在基于 Linux 的系统上的 C 程序中使用 mqueue?

    如何在基于 Linux 的系统上的 C 程序中使用 mqueue 消息队列 我正在寻找一些好的代码示例 可以展示如何以正确且正确的方式完成此操作 也许是一个操作指南 下面是一个服务器的简单示例 该服务器接收来自客户端的消息 直到收到告诉其停
  • php exec 返回的结果比直接进入命令行要少

    我有一个 exec 命令 它的行为与通过 Penguinet 给 linux 的相同命令不同 res exec cd mnt mydirectory zcat log file gz echo res 当将命令直接放入命令行时 我在日志文件
  • 使用 Grep 查找两个短语之间的文本块(包括短语)

    是否可以使用 grep 来高亮所有以以下内容开头的文本 mutablePath CGPathCreateMutable 并以以下内容结尾 CGPathAddPath skinMutablePath NULL mutablePath 这两个短
  • 快速像素绘图库

    我的应用程序以每像素的方式生成 动画 因此我需要有效地绘制它们 我尝试过不同的策略 库 但结果并不令人满意 尤其是在更高分辨率的情况下 这是我尝试过的 SDL 好的 但是慢 OpenGL 像素操作效率低下 xlib 更好 但仍然太慢 svg
  • 如何在c linux中收听特定接口上的广播?

    我目前可以通过执行以下操作来收听我编写的简单广播服务器 仅广播 hello int fd socket PF INET SOCK DGRAM 0 struct sockaddr in addr memset addr 0 sizeof ad
  • C++ Boost ASIO 简单的周期性定时器?

    我想要一个非常简单的周期性计时器每 50 毫秒调用我的代码 我可以创建一个始终休眠 50 毫秒的线程 但这很痛苦 我可以开始研究用于制作计时器的 Linux API 但它不可移植 I d like使用升压 我只是不确定这是否可能 boost
  • 高效的内存屏障

    我有一个多线程应用程序 其中每个线程都有一个整数类型的变量 这些变量在程序执行期间递增 在代码中的某些点 线程将其计数变量与其他线程的计数变量进行比较 现在 我们知道在多核上运行的线程可能会无序执行 一个线程可能无法读取其他线程的预期计数器
  • 使用 plistBuddy 获取值数组

    var keychain access groups declare a val usr libexec PlistBuddy c Print var sample plist echo val echo val 0 Ouput Array
  • Awk - 计算两个文件之间的每个唯一值和匹配值

    我有两个文件 首先 我尝试获取第 4 列中每个唯一字段的计数 然后匹配第二个文件的第二列中的唯一字段值 File1 第 4 列的每个唯一值和 File2 第 2 列包含我需要在两个文件之间匹配的值 所以本质上 我试图 gt 如果 file2
  • Fedora dnf 更新不起作用?

    当我尝试使用 update 命令更新 Fedora 22 时 sudo dnf update 我收到以下错误 错误 无法同步存储库 更新 的缓存 无法准备内部镜像列表 Curl 错误 6 无法解析主机名 无法解析主机 mirrors fed
  • linux命令中括号的用途是什么[重复]

    这个问题在这里已经有答案了 我在 Linux 终端中运行以下命令 谁能告诉我 Linux 终端中括号和以下命令的用途是什么 echo GET HTTP 1 0 echo 主机 www google com echo 数控 www googl
  • Raspberry 交叉编译 - 执行程序以“分段错误”结束

    我有一个自己编写的程序 我想从我的 x86 机器上为 Raspberry Pi 构建它 我正在使用 eclipse 生成的 makefile 并且无法更改此内容 我已经阅读了 CC for raspi 的教程 Hackaday 链接 htt
  • 捕获数据包后会发生什么?

    我一直在阅读关于网卡捕获数据包后会发生什么的内容 我读得越多 我就越困惑 首先 我读过传统上 在网卡捕获数据包后 它会被复制到内核空间中的一个内存块 然后复制到用户空间 供随后处理数据包数据的任何应用程序使用 然后我读到了 DMA 其中 N
  • linux下写入后崩溃

    如果我使用 write 将一些数据写入磁盘上的文件会发生什么 但我的应用程序在刷新之前崩溃了 如果没有系统故障 是否可以保证我的数据最终会刷新到磁盘 如果您正在使用write 并不是fwrite or std ostream write 那

随机推荐

  • Android实战SDK对接机智云平台(基础篇) > 2、下载并导入Android的SDK到工程中 学习笔记

    物联网平台机智云Android开源框架入门之旅 gt 搭建Andriod的开发环境 机智云SDK下载地址 把如下文件复制到lib文件中 选中后点击Add As Library 主界面 xff1a 480853 加号 xff1a 150150
  • Android实战SDK对接机智云平台(基础篇) > 3、SDK初始化的实现+快捷键 学习笔记+字体颜色模板

    1 把以下代码复制到AndroidManifest xml中 package 61 34 com myapplication 34 gt 添加 lt uses permission android name 61 34 android pe
  • csdn如何修改文字体及颜色

    csdn如何修改文字体及颜色
  • Android实战SDK对接机智云平台(基础篇) > 6、配网界面的UI搭建 学习笔记

  • 如何保证APP与服务端通信安全

    如何保证APP与服务端通信安全
  • 奎享雕刻使用教程

    软件下载地址 提取码 xff1a g3zk 将类似于u盘似的加密狗插在电脑上 机器和软件连接 xff1a 参数配置 xff1a 实心图 xff1a 1 打开要绘制的图片 2 选择绘制方式 xff1a 笔记 页面宽 xff1a 纸张的宽 左边
  • 万用表的使用方法,焊接

    万用表的使用方法 测量电容时 xff0c 现将电容 短接放电 测量电流时 xff0c 先将电路断开 通断挡在70欧姆以下认为导通 吸锡带 引脚密集的贴片元件在焊接的过程中 xff0c 很容易造成焊锡过多导致引脚短路的现象 xff0c 使用吸
  • STM32学习教程

    STM32学习教程 硬石电子 资料下载库的区分启动模式选择NVICDMAstm32 hal库 pb3做普通ioUSART 串口通讯DMA 直接存储寄存器读取DMA USART1接发RS 485通信 洋桃电子 STM32入门100步第33步U
  • 写字机器人使用教程

    一次制作写字机器人的过程 xff08 含制作教程 xff09 arduino 写字机器人制作教程 写字机器人制作教程2 0 购买链接 资料下载地址 xff1a 智宇科技 写字机器人 光盘资料 xff08 A盘资料 xff09 解压密码 xf
  • Inter RealSenseT265测试总结

    1 光线对定位有影响 xff0c 在一定范围内 xff0c 光线越充足 xff0c 定位精度越高 xff0c 但是当光线达到一定条件之后 xff0c 光照强度就不再跟定位精度成正比了 xff1b 2 周围环境对定位有影响 xff0c 周围的
  • 论文小技巧

    文件 选项 LM3405AXMKE NOPB與LM3405AXMK NOPB LM3405AXMKX NOPB對比 激光二极管 期刊查询 在word里面插入图片时怎样才成是100 比例的 文献 封装与功率 高手支招 xff1a 教你利用裸露
  • 激光啄木鸟使用教程

    软件下载地址 1 红色方框内的按钮长按开机 2 红色方框内的按钮轻触自动对焦 3 打开手机APP选择要雕刻的素材 4 设置要雕刻区域的大小 xff0c 开始预览可以查看雕刻的位置 5 打开蓝牙 xff0c 点击连接设备 6 选择被雕刻物件的
  • STM32 HAL库

    STM32 HAL库 第三章 MDK5 软件入门bug解决关键文件介绍程序仿真User Keywords语法提示代码编辑 查看技巧 第四章 STM32F1 基础知识入门MDK 下 C 语言基础复习STM32F103 时钟系统STM32F10
  • LWIP网络-基于STM32平台

    LWIP P1无操作系统移植RAW UDP实验RAW TCP实验Webserver实验 P1无操作系统移植 MAC 43 PHY 通过符合 IEEE802 3的MII和RMII接口与外接快速以太网PHY进行通信 MII和RMII实现数据交换
  • 树莓派学习

    树莓派学习教程 系统安装数据源的更新与配置命令设定固定IP网络地址 xff1a 法一法二 给树莓派安装中文环境和中文输入法远程控制树莓派SSH方式 xff1a 通过putty软件实现 xff08 不需要屏幕 xff09 VNC方式 xff0
  • C++学习教程

    C 43 43 学习教程 C 43 43 内存分区模型数据类型循环语句for循环语句 跳转语句指针指针 数组 函数 结构体指针 内存分区模型 工具vs codeDEV C 43 43 C 43 43 内存分区模型 程序运行前 全局区和代码区
  • core dumped ?完了?

    微信公众号 xff1a linux码头 core dumped xff1a 当程序在运行过程中发生异常 xff0c 这时linux系统可以把程序出错的内存 内容存储在一个core文件中 xff0c 又叫核心转存 应用程序在运行过程汇总经常会
  • Ubuntu18.04安装网络调试助手 NetAssist

    下载地址 链接 xff1a https pan baidu com s 1DUqZBtxFh pGTsRR2kXaPA 提取码 xff1a fp32 安装步骤 1 xff09 建立依赖关系 sudo apt get install f 2
  • C语言中左移(<<)和右移(>>)的理解

    lt lt 左移 xff1a 相当于乘法 a lt lt b 61 a 2 b 举例 xff1a 1 lt lt 5 xff0c 相当于1 2 5 61 32 1 lt lt 0 xff0c 相当于1 2 0 61 1 gt gt 右移 x
  • 《Linux运维总结:firewalld防火墙使用教程》

    文章目录 一 firewalld基础知识1 1 firewalld基本介绍1 2 firewalld与iptables关系与区别1 3 firewalld默认策略1 4 firewalld配置模式1 5 firewalld配置方法1 6 f