CentOS 7上的主机名设置和基本网络管理
主机名
CentOS 6
查看。
# hostname
设置。
# hostname NEW_NAME
设置完成后,xshell的会话中不会显示NEW_NAME,可通过重新登录会话来显示。不过实际上我们在设置完成后立即再次查看的话,是已经设置为NEW_NAME了。
这样子设置,是临时有效,系统重启之后,就恢复为之前的主机名了。想要永久有效的话,应该将NEW_NAME写入配置文件中。
# vim /etc/sysconfig/network
HOSTNAME=NEW_NAME
# vim /etc/hosts
127.0.0.1 NEW_NAME
CentOS 7
查看。
# hostnamectl [status]
设置。
CentOS 7可直接使用该命令实现主机名的永久设置,不需要修改配置文件。
不同于CentOS 6,它的主机名保存在/etc/hostname文件中。
# hostnamectl set-hostname NEW_NAME
CentOS 7上的网卡命名方式
参考资料:一致网络设备命名-红帽官方文档
CentOS 6上的网卡名称是通过枚举(enumerate)的方式命名为eth0、eth1和eth2等等,以此类推。优点是对于用户来说,它容易记忆。但是缺点是它并不一定准确地对应于主板上的设备,它的命名和内核发现网卡设备的顺序有关系,因此它是不可预测(predictable)的。对于现在的多网卡的服务器来说,这样接口的命名方案存在许多不确定性和违反直觉的。
因此在CentOS 7上提供了新的命名方案,官网称之为【一致网络设备命名】(consistent network device naming)。新的命名通过udev提供了一系列的命名方案(scheme)。新命名方案基于固件、拓扑和位置信息,网卡名称会完全自动化且可预测,甚至当硬件添加或者删除的时候也可以保持不变,也就是说可以做到无缝替换坏掉的硬件。
如何关闭【一致网络设备命名】?如何在不关闭【一致网络设备命名】的情况下启用传统的ethX命名方式?以及新的命名方案具体是如何命名的?这些可以见上文的参考资料。
传统工具
传统的Linux上的网络管理命令主要有三个。
- ifcfg:管理网卡、IP地址相关。
- route:管理路由相关。
- netstat:管理网络连接相关。
这三个命令均来自net-tools程序包。在命令对应的man手册当中,已经明确说明这三个命令是废弃(obsolete)的了,并且提供了替换方案:iproute程序包中的ip和ss命令。
由于这次的实验是针对网络进行调整,并且我是通过xshell连接虚拟机进行操作,如果对原本存在的那块网卡进行操作,会导致我连接失败,因此这里新增了一块网卡,网络连接为NAT模式。
注意,进入系统后,使用ip命令查看发现网卡的名称叫ens37,但是它不会自动生成对应的配置文件,类似原本存在的网卡ens33的/etc/sysconfig/network-scripts/ifcfg-ens33。
命令:ip
语法。
ip [ OPTIONS ] OBJECT { COMMAND | help }
OPTIONS:实际使用中,基本不会用到,有需要的参考man ip。
OBJECT:ip命令具体所执行的操作,是由OBJECT来定义的。本文只描述常用的3个OEJECT:link、addr和route。
COMMAND:OBJECT中的子命令,不同的OBJECT的子命令是不一样的,不过一般可能会有show/list、add、delete等。
help:可用于查看对应OBJECT的简要用法。
# ip link help
# ip addr help
# ip route help
OBJECT和COMMAND都是可以缩写的。
# ip link show
# ip lin sho
# ip li sh
缩写的好处是简洁,但是缺点是较难让人理解。并且如果缩写过多的话,会让程序无法理解,从而导致报错。
ip link
用于管理网络设备。
查看。可查看到网卡的MAC地址。不过ip link无法查看到ip地址。
[root@C7 ~]# ip link show
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN mode DEFAULT group default qlen
link/loopback ::::: brd :::::
: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP mode DEFAULT group default qlen
link/ether 00:0c:29:bb:3c:26 brd ff:ff:ff:ff:ff:ff
: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP mode DEFAULT group default qlen
link/ether 00:0c:29:bb:3c:30 brd ff:ff:ff:ff:ff:ff
: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu qdisc noqueue state DOWN mode DEFAULT group default qlen
link/ether ::::af: brd ff:ff:ff:ff:ff:ff
: virbr0-nic: <BROADCAST,MULTICAST> mtu qdisc pfifo_fast master virbr0 state DOWN mode DEFAULT group default qlen
link/ether ::::af: brd ff:ff:ff:ff:ff:ff
[root@C7 ~]# ip link show ens37
: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP mode DEFAULT group default qlen
link/ether :0c::bb:3c: brd ff:ff:ff:ff:ff:ff
查看的话,也可以直接执行ip link命令,不跟上任何的COMMAND,因为show是ip link的默认COMMAND。在man手册当中,有说明。其他的OBJECT,也有默认的COMMAND,具体看man手册,一般是show。
网卡的启用和禁用。
[root@C7 ~]# ip link set ens37 down
[root@C7 ~]# ip link show ens37
: ens37: <BROADCAST,MULTICAST> mtu qdisc pfifo_fast state DOWN mode DEFAULT group default qlen
link/ether :0c::bb:3c: brd ff:ff:ff:ff:ff:ff
[root@C7 ~]# ip link set ens37 up
[root@C7 ~]# ip link show ens37
: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP mode DEFAULT group default qlen
link/ether :0c::bb:3c: brd ff:ff:ff:ff:ff:ff
显示相关的统计信息,可以看到数据包的往来信息。
[root@C7 ~]# ip -s link show ens37
: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP mode DEFAULT group default qlen
link/ether :0c::bb:3c: brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast TX: bytes packets errors dropped carrier collsns
只查看启用的网卡信息。
# ip link show up
ip addr
用于管理协议地址。
ip addr是ip address的缩写,而不是ip addrlabel的缩写。可能是因为按照字母顺序的话,address排在addrlabel的前面。
查看所有网卡地址信息。
# ip addr show
查看指定网卡地址信息。
[root@C7 ~]# ip addr show dev ens37
: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP group default qlen
link/ether :0c::bb:3c: brd ff:ff:ff:ff:ff:ff
inet 192.168.17.137/24 brd 192.168.17.255 scope global noprefixroute dynamic ens37
valid_lft 1529sec preferred_lft 1529sec
inet6 fe80::e5ed:f759:25e8:b2fd/ scope link noprefixroute
valid_lft forever preferred_lft forever
ip addr和ip link的一个重大区别在于它可以看到网卡的IP地址。广播地址(brd)会根据IP和子网掩码自动计算。
只看已启用的网卡地址信息。
# ip addr show up
为网卡添加一个IP地址。
[root@C7 ~]# ip addr add 192.168.0.100/ dev ens37
[root@C7 ~]# ip addr show ens37
: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP group default qlen
link/ether :0c::bb:3c: brd ff:ff:ff:ff:ff:ff
inet 192.168.17.137/ brd 192.168.17.255 scope global noprefixroute dynamic ens37
valid_lft 1178sec preferred_lft 1178sec
inet 192.168.0.100/24 scope global ens37
valid_lft forever preferred_lft forever
inet6 fe80::e5ed:f759:25e8:b2fd/ scope link noprefixroute
valid_lft forever preferred_lft forever
为网卡删除一个IP地址。
[root@C7 ~]# ip addr delete 192.168.0.100/ dev ens37
[root@C7 ~]# ip addr show ens37
: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP group default qlen
link/ether :0c::bb:3c: brd ff:ff:ff:ff:ff:ff
inet 192.168.17.137/ brd 192.168.17.255 scope global noprefixroute dynamic ens37
valid_lft 1690sec preferred_lft 1690sec
inet6 fe80::e5ed:f759:25e8:b2fd/ scope link noprefixroute
valid_lft forever preferred_lft forever
清空某个网卡的IP地址。
[root@C7 ~]# ip addr show ens37
: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP group default qlen
link/ether :0c::bb:3c: brd ff:ff:ff:ff:ff:ff
inet 192.168.17.137/ brd 192.168.17.255 scope global noprefixroute dynamic ens37
valid_lft 1662sec preferred_lft 1662sec
inet 192.168.0.100/ scope global ens37
valid_lft forever preferred_lft forever
inet 10.0.0.100/ scope global ens37
valid_lft forever preferred_lft forever
inet 172.16.0.1/ scope global ens37
valid_lft forever preferred_lft forever
inet6 fe80::e5ed:f759:25e8:b2fd/ scope link noprefixroute
valid_lft forever preferred_lft forever
[root@C7 ~]# ip addr flush ens37
[root@C7 ~]# ip addr show ens37
: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP group default qlen
link/ether :0c::bb:3c: brd ff:ff:ff:ff:ff:ff
在我的环境中,是通过网卡的IP地址是通过DHCP自动获取的,我尝试重启了网络服务,依然无法获取IP地址。
# systemctl restart network.service
可通过nmtui文本工具禁用(deactive)并激活(active)网卡。注意不要禁用错了。
ip route
用于管理路由表。
查看路由表。
[root@C7 ~]# ip route show
default via 192.168.17.2 dev ens33 proto static metric
default via 192.168.17.2 dev ens37 proto dhcp metric
192.168.17.0/ dev ens33 proto kernel scope link src 192.168.17.7 metric
192.168.17.0/ dev ens37 proto kernel scope link src 192.168.17.137 metric
192.168.122.0/ dev virbr0 proto kernel scope link src 192.168.122.1
default:表示默认路由。
via:下一跳地址。上面的192.168.17.2,其实是我的VMware中对应虚拟机的网络的网关IP。
虚拟机被DHCP所分配到的IP地址,是在虚拟网络中的【DHCP设置】中设置的。可设置分配的网络地址段,网络地址范围和租约期等信息。
dev:数据包从本地哪张网卡设备出去。在本示例中就是ens33或者ens37。
src:当某张网卡有多个IP地址的时候,选择其中的一个地址作为源地址。
添加一条路由。
[root@C7 ~]# ip route add 192.168.0.0/ via 192.168.17.2 dev ens37 src 192.168.17.137
[root@C7 ~]# ip route show
default via 192.168.17.2 dev ens33 proto static metric
default via 192.168.17.2 dev ens37 proto dhcp metric
192.168.0.0/24 via 192.168.17.2 dev ens37 src 192.168.17.137
192.168.17.0/ dev ens33 proto kernel scope link src 192.168.17.7 metric
192.168.17.0/ dev ens37 proto kernel scope link src 192.168.17.137 metric
192.168.122.0/ dev virbr0 proto kernel scope link src 192.168.122.1
像这种单独设置的一条路由,也叫做静态路由。
如果是网络设备(路由器)基于路由协议(诸如RIP或者OSPF协议)自动学习的路由,则被称之为动态路由。
添加默认路由。
[root@C7 ~]# ip route add default via 192.168.17.2
[root@C7 ~]# ip route show
default via 192.168.17.2 dev ens33
default via 192.168.17.2 dev ens33 proto static metric
default via 192.168.17.2 dev ens37 proto dhcp metric
192.168.0.0/ via 192.168.17.2 dev ens37 src 192.168.17.137
192.168.17.0/ dev ens33 proto kernel scope link src 192.168.17.7 metric
192.168.17.0/ dev ens37 proto kernel scope link src 192.168.17.137 metric
192.168.122.0/ dev virbr0 proto kernel scope link src 192.168.122.1
默认路由,一般来说只有一条就够了,多余的条目应该是不会生效的。
原本只有1条,当我添加了一块新网卡后,多了一条。因此,默认路由应该是每个网卡一条。
我们添加的路由条目中,必须要确保下一跳地址(via)是可达的,如果不可达,就会报错。可以通过先添加其他路由条目或者调整网络拓扑结构来使其可达。
RTNETLINK answers: Network is unreachable
路由条目还可以修改和替换,用法和添加类似。
# ip route add ...
# ip route change ...
# ip route replace ...
删除路由。删除路由的语法,和添加路由的语法,基本类似。
一般情况下,它可以比添加路由更简洁,只要给出的条件能定位到我们所要删除的路由条目即可。
[root@C7 ~]# ip route delete 192.168.0.0/
[root@C7 ~]# ip route delete default via 192.168.17.2
[root@C7 ~]# ip route show
default via 192.168.17.2 dev ens33 proto static metric
default via 192.168.17.2 dev ens37 proto dhcp metric
192.168.17.0/ dev ens33 proto kernel scope link src 192.168.17.7 metric
192.168.17.0/ dev ens37 proto kernel scope link src 192.168.17.137 metric
192.168.122.0/ dev virbr0 proto kernel scope link src 192.168.122.1
批量删除路由条目。之前的delete是一条条删除,而flush是可以根据给出的条件删除条件所符合的所有路由条目。
flush可能会被认为是清空的意思,因此可能大家就不加参数直接使用了,但是这样其实是错误的,它需要条件来删除。
[root@C7 ~]# ip route flush
"ip route flush" requires arguments.
[root@C7 ~]# ip route flush dev ens37
[root@C7 ~]# ip route show
default via 192.168.17.2 dev ens33 proto static metric
192.168.17.0/ dev ens33 proto kernel scope link src 192.168.17.7 metric
192.168.122.0/ dev virbr0 proto kernel scope link src 192.168.122.1
命令:ss
ss命令可实现类似netstat命令的功能,用于显示网络连接的状态。在网络连接数十分巨大的情况下,它的性能表现要优于netstat,并且在netstat的man手册中也说明了ss可用来取代netstat。
语法。
ss [options] [ FILTER ]
当没有选项的时候,ss会显示一些已建立连接的打开的非监听的套接字。
[root@C7 ~]# ss
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
u_str ESTAB * *
u_str ESTAB @/tmp/dbus-tHtcTzd0Uc *
u_str ESTAB @/tmp/dbus-tHtcTzd0Uc *
u_str ESTAB /run/dbus/system_bus_socket *
...
tcp ESTAB 192.168.17.7:ssh 192.168.17.1:
tcp ESTAB 192.168.17.7:ssh 192.168.17.1:
tcp ESTAB 192.168.17.7:ssh 192.168.17.1:
v_str ESTAB : :
...
ss显示的内容有许多,因为它还包含了TCP和UDP以外的连接。
-t, --tcp:显示TCP相关的连接。默认是显示非监听的,对于TCP来说,非监听就是已建立的连接。
[root@C7 ~]# ss -t
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 192.168.17.7:ssh 192.168.17.1:
ESTAB 192.168.17.7:ssh 192.168.17.1:
ESTAB 192.168.17.7:ssh 192.168.17.1:
-u, --udp:显示UDP相关的连接。我的实验虚拟机并没有UDP相关的连接。
[root@C7 ~]# ss -u
Recv-Q Send-Q Local Address:Port Peer Address:Port
显示TCP和UDP相关的连接。
[root@C7 ~]# ss -tu
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 192.168.17.7:ssh 192.168.17.1:
tcp ESTAB 192.168.17.7:ssh 192.168.17.1:
tcp ESTAB 192.168.17.7:ssh 192.168.17.1:
会多出Netid字段用于表示协议类型。
-a, --all:显示所有监听和非监听的连接。
[root@C7 ~]# ss -tua
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN *:mdns *:*
udp UNCONN *: *:*
udp UNCONN 192.168.122.1:domain *:*
udp UNCONN *%virbr0:bootps *:*
udp UNCONN *:bootpc *:*
udp UNCONN *:sunrpc *:*
udp UNCONN *: *:*
udp UNCONN ::: :::*
udp UNCONN :::sunrpc :::*
tcp LISTEN *:sunrpc *:*
tcp LISTEN 192.168.122.1:domain *:*
tcp LISTEN *:ssh *:*
tcp LISTEN 127.0.0.1:ipp *:*
tcp LISTEN 127.0.0.1:smtp *:*
tcp ESTAB 192.168.17.7:ssh 192.168.17.1:
tcp ESTAB 192.168.17.7:ssh 192.168.17.1:
tcp ESTAB 192.168.17.7:ssh 192.168.17.1:
tcp LISTEN :::sunrpc :::*
tcp LISTEN :::ssh :::*
tcp LISTEN :::ipp :::*
tcp LISTEN :::smtp :::*
-l, --listening:显示监听状态下的连接。
[root@C7 ~]# ss -tul
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN *:mdns *:*
udp UNCONN *: *:*
udp UNCONN 192.168.122.1:domain *:*
udp UNCONN *%virbr0:bootps *:*
udp UNCONN *:bootpc *:*
udp UNCONN *:sunrpc *:*
udp UNCONN *: *:*
udp UNCONN ::: :::*
udp UNCONN :::sunrpc :::*
tcp LISTEN *:sunrpc *:*
tcp LISTEN 192.168.122.1:domain *:*
tcp LISTEN *:ssh *:*
tcp LISTEN 127.0.0.1:ipp *:*
tcp LISTEN 127.0.0.1:smtp *:*
tcp LISTEN :::sunrpc :::*
tcp LISTEN :::ssh :::*
tcp LISTEN :::ipp :::*
tcp LISTEN :::smtp :::*
-n, --numeric:不解析服务名称。例如ssh协议名称会显示为对应的端口号22。
[root@C7 ~]# ss -tn
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 192.168.17.7: 192.168.17.1:
ESTAB 192.168.17.7: 192.168.17.1:
ESTAB 192.168.17.7: 192.168.17.1:
-p, --processes:显示连接所对应的进程信息。
[root@C7 ~]# ss -tnp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 192.168.17.7: 192.168.17.1: users:(("sshd",pid=,fd=))
ESTAB 192.168.17.7: 192.168.17.1: users:(("sshd",pid=,fd=))
ESTAB 192.168.17.7: 192.168.17.1: users:(("sshd",pid=,fd=))
-s, --summary:显示汇总的统计信息。
[root@C7 ~]# ss -s
Total: (kernel )
TCP: (estab , closed , orphaned , synrecv , timewait /), ports Transport Total IP IPv6
* - -
RAW
UDP
TCP
INET
FRAG
-o, --options:显示计时器(timer)信息。
[root@C7 ~]# ss -to
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 192.168.17.7:ssh 192.168.17.1: timer:(on,229ms,0)
ESTAB 192.168.17.7:ssh 192.168.17.1: timer:(keepalive,93min,0)
FILTER表示过滤器,由状态过滤器(STATE-FILTER)和表达式(EXPRESSION)构成。
FILTER := [ state STATE-FILTER ] [ EXPRESSION ]
STATE-FILTER的值可以是established、syn-sent、syn-recv、fin-wait-1、fin-wait-2、time-wait、closed、close-wait、last-ack、listen和closing。
不同的值组合可以用以下关键词表示:
- all:表示所有状态。
- connected:除了listen和closed以外的所有状态。
- synchronized:除了syn-sent以外的所有connected状态。
- bucket:作为minisockets来维护的状态,即time-wait和syn-recv。
- big:bucket的取反结果。
EXPRESSION:可用于指定一些条件,类似iptables防火墙,例如指定源端口、目标端口、目标地址等。
显示所有与SSH协议相关的连接。
ss -o state established '( dport = :ssh or sport = :ssh )'
显示所有的本机的web服务至193.223.7.0/24网络的TCP状态为fin-wait-1的连接。
ss -o state fin-wait- '( sport = :http or sport = :https )' dst 193.233./
更多的关于FILTER的用法,man手册中建议参考iproute-doc程序包中的内容。在里头我找到一个文件。
/usr/share/doc/iproute-doc-4.11./ss.ps
这个文件的格式是postscript,需要找到对应的工具打开,或者到网上进行转换,可转换成PDF格式。
CentOS 7上的主机名设置和基本网络管理的更多相关文章
- 如何在CentOS 7上修改主机名
如何在CentOS 7上修改主机名 在CentOS中,有三种定义的主机名:静态的(static),瞬态的(transient),和灵活的(pretty).“静态”主机名也称为内核主机名,是系统在启动时 ...
- CentOS 7上修改主机名
如何在CentOS 7上修改主机名 在Cent ...
- 在CentOS 7上修改主机名的方法
这次我们来讲解一下如何在CentOS 7环境上修改主机名 1.从VMware上登录CentOS 7的虚拟机,并以root用户登录. 2.查看未修改前的主机名 1>.我们可以通过文件hostnam ...
- 034-openstack中虚拟机启动后主机名设置问题
openstack中虚拟机启动后主机名设置问题,在centos7中设置hostname后怎么都是原来的hostname,根本无效. 方法一: 在centos7中除了修改hosts文件和network文 ...
- Ubuntu14.04上修改主机名
Ubuntu14.04上修改主机名 author:headsen chen 2017-10-12 15:41:31 个人原创,转载请注明作者,出处,否则依法追击法律责任 查看主机名:hostname ...
- centos7上修改主机名
centos7上修改主机名 2017-10-09 13:45:17 个人原创,转载请注明,否则追究法律责任 1,临时修改: 和centos5,centos6 一样,重启失效 2,永久修改: 命令: ...
- CentOS 6.2修改主机名
写在前面的话:因为服务器要统一主机名,但是在安装的时候忘记设置了,所以需要修改主机名 需要修改两处:一处是/etc/sysconfig/network,另一处是/etc/hosts,只修改任一处会 ...
- CentOS与Ubuntu修改主机名
CentOS 1.执行hostname查看主机名 2.hostname + 主机名 使需要修改的主机名立即生效,但是下次重启会失效,故需要执行第三步 3.vim /etc/sysconfig/net ...
- centos 6 7更改主机名 命令添加ip
6:vi /etc/sysconfig/network 中hostname =主机名 vi /etc/hosts 添加127.0.0.1相应的主机名 7: hostnamectl set-hostn ...
随机推荐
- SQL语句总结基础篇
创建数据库 CREATE DATABASE 数据库名称; 删除数据库 DROP DATABASE 数据库名称; 创建新表 create table 表名(列 类型 ,列 类型 ,..); 根据已有的表 ...
- sql语句查询结果合并union all用法_数据库技巧
--合并重复行 select * from A union select * from B --不合并重复行 select * from A union all select * from B 按某个 ...
- 腾讯iphone面试题(转)
1Objective-C内部的实现 2CALayer和View的关系 3 http协议,tcp/ip 4 UITableView的那些元素是可以自定义的? 5 c语言的,定义变量,比如int,在什么情 ...
- Netty学习——Apache Thrift 简介和下载安装
Netty学习——Apache Thrift 简介和下载安装 Apache Thrift 简介 本来由Facebook开发,捐献给了Apache,成了Apache的一个重要项目 可伸缩的,跨语言的服务 ...
- 浅谈css样式之list-type
在我们的工作学习中,大多数人使用列表标签的时候总一般的选择是把list-type设置成none.不过可能很多人对于这个属性的细节并没有很深的了解.甚至会把list-type和list-type-sty ...
- Vue组件应用
Vue的组件是可复用的 Vue 实例,且带有一个名字 .我们可以在一个通过 new Vue 创建的 Vue 根实例中,把这个组件作为自定义元素来使用.因为组件是可复用的 Vue 实例,所以它们与 ne ...
- luogu P1566 加等式
题目描述 对于一个整数集合,我们定义"加等式"如下:集合中的某一个元素可以表示成集合内其他元素之和.如集合{1,2,3}中就有一个加等式:3=1+2,而且3=1+2 和3=2+1是 ...
- kali linux中文乱码解决
命令中输入 LANG=en_US.UTF-8 apt-get install ttf-wqy-microhei xfonts-wqy gnome-tweak-tool
- 深度学习DeepLearning核心技术理论与实践
深度学习DeepLearning核心技术开发与应用时间地点:2019年11月01日-04日(北京) 联系人杨老师 电话(同微信)17777853361
- VBA/Excel-实例系列-04-求两个数组的交集
原创: Z Excel高效办公之VBA 2017-03-10 Part 1:逻辑过程 已有两个数组,要求单个数组中信息无重复 以最短的数组作为循环,分别判断该数组中的元素是否在另一个数组中 如果某一元 ...