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 ...
随机推荐
- 【Android - 控件】之V - SwipeRefreshLayout的使用
SwipeRefreshLayout是Android V4.V7包中的一个控件,是Google给我们提供的一个下拉刷新的布局控件,可以轻松完成下拉刷新. SwipeRefreshLayout的特点是其 ...
- 行内元素(inline标签)设置了行高为什么不生效,还是表现为父盒子的行高?行内元素行高问题终极解释
最近在看张鑫旭大佬的<css世界>,读到5.2.4 内联元素 line-height 的“大值特性” ,产生了疑惑, 在开发中确实也遇到了同样的问题,深入探究后得出结果,先说结论吧,论证 ...
- Dropzone.js拖拽上传(简单示例)
今天碰到一个需求,页面上有“点击上传”的按钮,点击可以执行上传事件,从桌面拖拽图片拖拽到任何地方,都可以执行上传,且不影响点击按钮事件.下面是简单示例: 简单示例如下: <!DOCTYPE ht ...
- ThreadLocal快速了解一下
欢迎点赞阅读,一同学习交流,有疑问请留言 . GitHub上也有开源 JavaHouse 欢迎star 1 引入 在Java8里面,ThreadLocal 是一个泛型类.这个类可以提供线程变量.每个线 ...
- Android View 的绘制流程之 Layout 和 Draw 过程详解 (二)
View 的绘制系列文章: Android View 的绘制流程之 Measure 过程详解 (一) Android View 绘制流程之 DecorView 与 ViewRootImpl 在上一篇 ...
- DRF Django REST framework APIView(一)
什么是REST? REST是一个标准,一种规范,遵循REST风格可以使开发的接口通用,便于调用者理解接口的作用. 使url更容易理解,让增删改清晰易懂,在前后端分离开发中按照这一规范能加快开发效率,减 ...
- Python一秒搭建ftp服务器,帮助你在局域网共享文件【华为云技术分享】
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...
- Python高级学习笔记
Python高级学习笔记,此笔记中包含Linux操作系统.Html+CSS+JS.网络协议等. 所有思维导图为本人亲手所画,请勿用于商用. 大哥们,求点赞哦. 第一天笔记:链接 第二天笔记:链接 第三 ...
- linux-iptables增、删、改、保存
iptables基础: iptables的5条链分别是: prerouting 路由前 input 发到本机进程的报文 ouput 本机某进程发出的报文 forword 转发 postrouting ...
- Mybatis获取自动增长Id
Mybatis获取自动增长Id MyBatis成功插入后获取自动增长的id 1.向xxMapping.xml配置中加上两个配置. <insert id="insertUser" ...