主机名

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上的主机名设置和基本网络管理的更多相关文章

  1. 如何在CentOS 7上修改主机名

    如何在CentOS 7上修改主机名 在CentOS中,有三种定义的主机名:静态的(static),瞬态的(transient),和灵活的(pretty).“静态”主机名也称为内核主机名,是系统在启动时 ...

  2. CentOS 7上修改主机名

                                       如何在CentOS 7上修改主机名                                           在Cent ...

  3. 在CentOS 7上修改主机名的方法

    这次我们来讲解一下如何在CentOS 7环境上修改主机名 1.从VMware上登录CentOS 7的虚拟机,并以root用户登录. 2.查看未修改前的主机名 1>.我们可以通过文件hostnam ...

  4. 034-openstack中虚拟机启动后主机名设置问题

    openstack中虚拟机启动后主机名设置问题,在centos7中设置hostname后怎么都是原来的hostname,根本无效. 方法一: 在centos7中除了修改hosts文件和network文 ...

  5. Ubuntu14.04上修改主机名

    Ubuntu14.04上修改主机名 author:headsen chen  2017-10-12 15:41:31 个人原创,转载请注明作者,出处,否则依法追击法律责任 查看主机名:hostname ...

  6. centos7上修改主机名

    centos7上修改主机名 2017-10-09   13:45:17 个人原创,转载请注明,否则追究法律责任 1,临时修改: 和centos5,centos6 一样,重启失效 2,永久修改: 命令: ...

  7. CentOS 6.2修改主机名

    写在前面的话:因为服务器要统一主机名,但是在安装的时候忘记设置了,所以需要修改主机名   需要修改两处:一处是/etc/sysconfig/network,另一处是/etc/hosts,只修改任一处会 ...

  8. CentOS与Ubuntu修改主机名

    CentOS 1.执行hostname查看主机名 2.hostname + 主机名  使需要修改的主机名立即生效,但是下次重启会失效,故需要执行第三步 3.vim /etc/sysconfig/net ...

  9. centos 6 7更改主机名 命令添加ip

    6:vi /etc/sysconfig/network 中hostname =主机名 vi /etc/hosts  添加127.0.0.1相应的主机名 7: hostnamectl set-hostn ...

随机推荐

  1. Mybatis拦截器实现原理深度分析

    1.拦截器简介 拦截器可以说使我们平时开发经常用到的技术了,Spring AOP.Mybatis自定义插件原理都是基于拦截器实现的,而拦截器又是以动态代理为基础实现的,每个框架对拦截器的实现不完全相同 ...

  2. SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".错误的解决方法

    1.今天新git下来的项目报错如下: SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".SLF4J: ...

  3. warning: rpmts_HdrFromFdno: Header V4 DSA/SHA1 Signature, key ID XXXXXX: NOKEY

    我在使用Centos时,会出现这种错误: 本人实践有效的办法是: 加上"--nogpgcheck"参数 就是在你要执行的语句后面加上该参数就行了! 我当时是为了安装jenkins时 ...

  4. 线程锁&信号量&gil

    线程锁 线程锁的主要目的是防止多个线程之间出现同时抢同一个数据,这会造成数据的流失.线程锁的作用类似于进程锁,都是为了数据的安全性 下面,我将用代码来体现进程锁的作用: from threading ...

  5. C语言|博客作业11

    问题 回答 这个作业属于哪个课程 C语言程序设计ll 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-2/homework/10127 我在 ...

  6. 网络ASI

    ASIHTTPRequest  基于底层CFNetwork框架,运行效率很高 可惜作者 停止更新,有一些潜在的BUG无人去解决 老项目 ASI + SBJson 只需要用到外面的源文件 ASI还依赖于 ...

  7. SpringBoot整合freemarker模板

    一.目录展示 二.导入依赖 三.application.properties配置文件 四.在src/main/resource/templates文件夹中创建HelloFreeMarker.ftl文件 ...

  8. Windows下创建Python虚拟环境的两种方法:

    在实际的项目开发中,我们会根据自己的需求去下载各种相应的框架库,但是每个项目可能使用的库不一样,或者版本不一样等等等.为了避免这些因素对我们的项目造成一些不必要的影响,我们可能需要来回的切换或者装卸等 ...

  9. C和C++从零开始系列(二)

    今天说一下 C和C++ 的if 条件语句. 在实际编程中,会经常有逻辑判断,比如,输入的数值参数中,如果是奇数,输出This is uneven. 如果是偶数,输出 This is even. 我们在 ...

  10. 蛋疼的 qii 神马警告才是需要注意的警告?(由于警告引起的截然不同的运行结果)解决总结

    接上文!! 蛋疼一天,折腾一天,没找到具体原因,但是找到了具体操作办法! 1.果断删除没用的文件 特别是sdc文件,旧的没用,果断删除,否则系统会默认使用,带来副作用 2.files 添加系统用到的i ...