4、saltstack的使用
官方文档地址:http://repo.saltstack.com/#rhel
4.1、saltstatck介绍:
用户要一致,这里使用的是root用户;
用于批量管理成百上千的服务器;
并行的分发,使用python开发,提供丰富的api接口;
Saltstack的master端监听4505与4506端口,4505为master和minion认证通信端口,4506为master用来发送命令或者接收minion的命令执行返回信息;
当客户端启动后,会主动连接master端注册,然后一直保持该TCP连接,而master通过这条TCP连接对客户端进行控制。如果连接断开,master对客户端
将不能进行控制,但是当客户端检查到连接断开后,会定期向master端请求注册连接;
1、saltstack运行方式:
①Local②Master/Minion③master④Salt SSH
2、saltstack三大功能:
①远程执行②配置管理③云管理
3、saltstack数据系统:
①Grains (静态数据)②pillar (动态数据)
4、saltstack配置管理:
①SLS(YAML、Jinja)②Highstate③States Mod
5、Saltstack几个重要的组件:
(1)grains:
grains 是在 minion(客户端)启动时收集到的一些信息,比如操作系统类型、网卡ip等静态信息。grains的信息是静态的,并不会时时变更,
它只是在 minion 启动时收集到的;
(2)pillar:
pillar 和 grains 不一样,是在 master 上定义的,并且是针对 minion 定义的一些信息。像一些比较重要的数据(密码)可以存在 pillar 里,
还可以定义变量等;
(3)state:
它是saltstack的最核心功能,通过预先指定好的sls文件对被控主机进行管理:包/文件/网络配置/系统服务/系统用户等;
6、服务器分配:
本实验用的是saltstack的Master/Minion模式;
服务器名称 |
ip地址 |
controller-node1(主) |
172.16.1.90 |
slave-node1(从) |
172.16.1.91 |
4.2、软件安装:
1、安装saltstack yum源,主从一致:
[root@controller-node1 ~]# yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm
2、主节点安装salt-master:
[root@controller-node1 ~]# yum install salt-master
3、从节点安装slat-minion:
[root@slave-node1 ~]# yum install salt-minion
4.3、saltstack配置文件配置:
1、主节点:
[root@controller-node1 ~]# grep -Ev "^#|^$" /etc/salt/master
interface: 172.16.1.90
publish_port: 4505
#默认值;
user: root
#默认值;
ret_port: 4506
#默认值;
timeout: 15
#saltstack执行命令的超时时间,默认是5秒;
state_top: top.sls
#默认值;
file_roots:
base:
- /srv/salt/base
dev:
- /srv/salt/dev
test:
- /srv/salt/test
prod:
- /srv/salt/prod
pillar_roots:
base:
- /srv/pillar/base
dev:
- /srv/pillar/dev
test:
- /srv/pillar/test
prod:
- /srv/pillar/prod
[root@controller-node1 ~]# mkdir -p /srv/salt/{base,dev,test,prod}
[root@controller-node1 ~]# tree /srv/salt/
/srv/salt/
├── base
├── dev
├── prod
└── test
4 directories, 0 files
[root@controller-node1 ~]# mkdir -p /srv/pillar/{base,dev,test,prod}
[root@controller-node1 ~]# tree /srv/pillar/
/srv/pillar/
├── base
├── dev
├── prod
└── test
4 directories, 0 files
2、从节点:
[root@slave-node1 ~]# grep -Ev "^#|^$" /etc/salt/minion
master: 172.16.1.90
master_port: 4506
#默认值;
user: root
#默认值;
id: 172.16.1.91
4.4、启动saltstack服务并加入到开机自启动:
1、主节点:
[root@controller-node1 ~]# systemctl start salt-master
[root@controller-node1 ~]# systemctl enable salt-master
[root@controller-node1 ~]# netstat -tunlp | grep "45"
tcp 0 0 172.16.1.90:4505 0.0.0.0:* LISTEN 1962/python
tcp 0 0 172.16.1.90:4506 0.0.0.0:* LISTEN 1968/python
[root@controller-node1 ~]# lsof -ni:4505
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
salt-mast 12990 root 16u IPv4 64670 0t0 TCP 172.16.1.90:4505 (LISTEN)
salt-mast 12990 root 18u IPv4 68274 0t0 TCP 172.16.1.90:4505->172.16.1.91:60502 (ESTABLISHED)
2、从节点:
[root@slave-node1 ~]# systemctl start salt-minion.service
[root@slave-node1 ~]# systemctl enable salt-minion.service
[root@slave-node1 ~]# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1052/sshd
tcp6 0 0 :::22 :::* LISTEN 1052/sshd
[root@slave-node1 ~]# lsof -ni:4505
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
salt-mini 1888 root 21u IPv4 29671 0t0 TCP 172.16.1.91:60502->172.16.1.90:4505 (ESTABLISHED)
4.5、将从节点加入到主节点:
1、列出saltstack当前节点状况:
[root@controller-node1 ~]# salt-key -l all
Accepted Keys:
Denied Keys:
Unaccepted Keys:
172.16.1.91
Rejected Keys:
2、将从节点加入:
[root@controller-node1 ~]# salt-key -a 172.16.1.91 #支持通配符,比如 salt-key -a 172.*
The following keys are going to be accepted:
Unaccepted Keys:
172.16.1.91
Proceed? [n/Y] y
Key for minion 172.16.1.91 accepted.
[root@controller-node1 ~]# salt-key -l all
Accepted Keys:
172.16.1.91
Denied Keys:
Unaccepted Keys:
Rejected Keys:
3、补充:
1、saltstack salt-key动作命令(支持通配符):
[root@controller-node1 ~]# salt-key --help
-l ARG:列出公钥;
pre、un和unaccepted将列出未接受公钥的minion;
acc或accepted将列出已接受公钥的minion;
rej或rejected将列出被拒绝接收公钥的minion;
den或denied将列出被拒绝接收公钥的minion;
all将列出所有键;
-L: --list-all列出所有公钥;
-a ACCEPT:接受指定minion的公钥,默认范围是Unaccepted Keys;
--include-rejected
--include-denied
-A:接受所有minion为未接受的公钥,默认范围是Unaccepted Keys;
--include-all #包括rejected和denied、unaccepted;
--include-rejected
--include-denied
-r REJECT:拒绝接受指定minion的公钥,默认范围是Unaccepted Keys;
--include-accepted
--include-denied
-R:拒绝所有minion的公钥,默认范围是Unaccepted Keys;
--include-all #包括accepted和denied、unaccepted;
--include-accepted
--include-denied
-p PRINT: 打印指定的minion的公钥,默认范围是所有区域;
-P:打印所有minion的公钥,默认范围是所有区域;
-d:DELETE:删除指定的minion的公钥,默认范围是所有区域;
-D:删除所有minion的公钥,默认范围是所有区域;
#删除的minion公钥会被放到Unaccepted Keys区域下;
2、saltstack master和minion的认证过程:
(1)master在第一次启动时会在/etc/salt/pki/(空目录)目录下生成master、minion两个目录,在master目录下会生成
master.pem(私钥)和master.pub(公钥)秘钥对和其它的目录;
(2)minion在第一次启动时会在/etc/salt/pki/(空目录)目录下生成master、minion两个目录,在minion目录下会生成
minion.pem(私钥)和minion.pub(公钥)秘钥对和其它的目录,并将自己的公钥发送给master;
(3)在未将minion注册到master时,minion的公钥会被放在master端的/etc/salt/pki/minions_pre/目录下并以
在minion配置文件中配置的id为名称,当minion加入到master后,minion的公钥会被放在master端的
/etc/salt/pki/minions/目录下,并将自己的公钥发送给minion,存放在minion的/etc/salt/pki/minion/目录下,这样便完
成了master和minion的认证,master和minion使用公钥和私钥进行加密,使用的是aes(高级加密标准)的加密算法,非常的
安全;
(4)如果minion配置文件中的id需要改变的解决办法:
1)停止minion服务;
2)在master端使用'salt-key -d <name>'删除公钥在master上;
提示:如果没有执行上面一步,即使删除了minion的公钥,那么minion也会将公钥发送给master
这样就会导致删不掉minion的公钥;
3)删除minion /etc/salt/pki/目录下的所有内容;
4)修改minion配置文件中的id;
5)启动minion服务;
(5)master和minion认证目录:
1)master:
[root@controller-node1 ~]# tree /etc/salt/pki/
/etc/salt/pki/
├── master
│ ├── master.pem
│ ├── master.pub
│ ├── minions
│ │ └── 172.16.1.91
│ ├── minions_autosign
│ ├── minions_denied
│ ├── minions_pre
│ └── minions_rejected
└── minion
2)minion:
[root@slave-node1 ~]# tree /etc/salt/pki/
/etc/salt/pki/
├── master
└── minion
├── minion_master.pub
├── minion.pem
└── minion.pub
(6)根据master和minion的认证原理,可以对master的/etc/salt/目录和/srv/目录进行备份,如果
出现master服务器损坏的情况下可以进行还原,还原步骤如下:
1)关闭salt-master服务:
[root@controller-node1 ~]# systemctl stop salt-master.service
2)还原备份的目录,在还原之前需要对现有的目录进行备份;
3)启动salt-master服务:
[root@controller-node1 ~]# systemctl start salt-master.service
3)忽略salt-master监听总线;
[root@controller-node1 ~]# salt '*' cmd.run 'uptime' --async
4)还原成功,可以正常使用;
4.6、常用远程执行命令;
1、远程命令格式:
命令 目标 模块 参数
2、常用命令:
(1)远程测试:
[root@controller-node1 ~]# salt '*' test.ping
#单引号表示转义,也可以使用\*或"*"
(2)cmd密令:
[root@controller-node1 ~]# salt '*' cmd.run 'uptime'
#cmd命令可以执行linux中一切的命令;
(3)软件安装命令:
[root@controller-node1 ~]# salt '*' pkg.install 'httpd'
(4)网络命令:
[root@controller-node1 ~]# salt '*' network.active_tcp
[root@controller-node1 ~]# salt '*' network.arp
[root@controller-node1 ~]# salt '*' network.connect 172.16.1.91 80
[root@controller-node1 ~]# salt '*' network.get_hostname
[root@controller-node1 ~]# salt '*' network.default_route
(4)服务命令:
[root@controller-node1 ~]# salt '*' service.get_enabled
[root@controller-node1 ~]# salt '*' service.get_disabled
[root@controller-node1 ~]# salt '*' service.start 'httpd'
[root@controller-node1 ~]# salt '*' service.reload 'httpd'
[root@controller-node1 ~]# salt '*' service.stop 'httpd'
[root@controller-node1 ~]# salt '*' service.status 'httpd'
(2)查看top.sls中使用的sls,只能查看/srv/salt/base/目录下的sls;
[root@controller-node1 ~]# salt '*' state.show_top
(3)远程拷贝命令:
[root@controller-node1 ~]# salt-cp '*' /etc/passwd /tmp/
4.7、配置管理:
1、yaml语法说明:
(1)yaml类似于xml文件;
(2)缩进:除第一层不用缩进外,每层之间是两个空格的缩进,不能使用tab键;
(3)冒号:除以冒号结尾或路径外,后面必须要有一个空格;
(4)短横线:表示列表,短横线后面必须要有一个空格;
(5)井号:表示注释;
2、编写安装apache服务的描述文件:
缺点:不自动化,执行时还需要通知哪台机器执行;
[root@controller-node1 ~]# mkdir /srv/salt/base/web/ -p
[root@controller-node1 ~]# vim /srv/salt/base/web/apache.sls
apache-install:
#id,随便写,但是必须要唯一;
pkg.installed:
#远程执行软件安装命令;
- name: httpd
#安装的软件名称;
apache-service:
service.running:
#远程执行软件服务命令;
- name: httpd
#启动httpd;
- enable: True
#将软件加入到开机自启动
#说明,以上配置从上到下依次执行,如果服务已完成则行;
[root@controller-node1 ~]# salt '172.16.1.91' state.sls web.apache
#默认环境是base,换环境需要加saltenv=prod;
3、编写自动化配置:
说明:使用top.sls自动化文件进行配置,该配置文件必须在/srv/salt/base/下面;
[root@controller-node1 ~]# vim /srv/salt/base/top.sls
base:
#调用base环境下的sls;
'172.16.1.91':
#允许哪些机器执行操作,支持通配符;
- web.apache
#sls的名称;
[root@controller-node1 ~]# salt '*' state.highstate
#虽然说是让所有的节点执行工作,但是如果top.sls中没有定义一些节点的执行内容,那么该节就不会执行命令,最小化原则;
4、配置文件执行测试(test=True):
它会告诉你它会干什么,但是不会具体实施,颜色会不同;
[root@controller-node1 ~]# salt '172.16.1.91' state.sls web.apache test=True
[root@controller-node1 ~]# salt '*' state.highstate test=True
4.8、saltstack的数据存储系统Grains和pillar:
1、Grains和pillar的区别:
数据存储类型 |
存储位置 |
类型 |
采集方式 |
场景 |
Grains |
minion |
静态 |
minion启动时,可以手动刷新生效 |
1、获取信息 2、匹配 |
pillar |
master |
动态 |
指定,实时生效 |
1、敏感数据配置 2、匹配 |
2、Grains(谷粒):
Grains存放着salt-minion启动时收集的信息,是静态的信息,在minion上设置,以key-value的形式保存且为明
文,用来保存隐秘的数据是不安全的,设置后需要同步minion上的grains才能生效,Grains应用场景为信息查询;
(1)获取所有的grains信息:
[root@controller-node1 ~]# salt '172.16.1.91' grains.items
(2)获取指定grains信息:
[root@controller-node1 ~]# salt '172.16.1.91' grains.get 'ip4_interfaces:eth1'
172.16.1.91:
- 172.16.1.91
[root@controller-node1 ~]# salt '*' grains.get 'serialnumber'
172.16.1.91:
VMware-56 4d df f4 02 29 4e 45-6f c7 af 78 9d ef a2 44
[root@controller-node1 ~]# salt '*' grains.get 'osrelease'
172.16.1.91:
7.5.1804
(3)远程执行中匹配目标,使用grains匹配minion(缺点:不能指定多个条件且不可控):
[root@controller-node1 ~]# salt -G 'os:CentOS' cmd.run 'uptime'
172.16.1.91:
13:54:02 up 3:50, 1 user, load average: 0.00, 0.01, 0.05
#在所有的minion中grains值为'os:CentOS'的minion执行uptime命令;
(4)在top.sls中匹配使用:
[root@controller-node1 ~]# cat /srv/salt/base/top.sls
base:
'os:CentOS':
- match: grain
- web.apache
(5)grains的自定义需求:
1)在minion上创建grains文件:
[root@controller-node1 ~]# salt '172.16.1.91' cmd.run 'touch /etc/salt/grains'
2)在minion的grains文件中定义item项:
[root@controller-node1 ~]# salt '172.16.1.91' cmd.run 'echo "ip_eth1: 172.16.1.91" >/etc/salt/grains'
3)同步minion的grains:
[root@controller-node1 ~]# salt '172.16.1.91' saltutil.sync_grains
4)获取minion中自定义的item项:
[root@controller-node1 ~]# salt '172.16.1.91' grains.get 'ip_eth1'
172.16.1.91:
172.16.1.91
3、Pillar(柱):
pillar和grains一样是saltstack一个重要的数据存储系统,以key-value形式保存数据,对数据进行了加密,很安全,
主要放一些敏感的数据,比如密码、变量,且只能在top.sls中使用,pillar是在master上设置的,且是针对minion定
义的一些信息,设置后立即生效;
(1)获取minion所有的pillar:
[root@controller-node1 ~]# salt '172.16.1.91' pillar.items
172.16.1.91:
----------
#默认没有是因为master的配置文件中'#pillar_opts: False'选项是没有开启的,不推荐打开;
(2)如何设置pillar:
1)编写pillar安装文件(minion分类):
[root@controller-node1 ~]# cat /srv/pillar/base/apache.sls
{% if grains['os'] == 'CentOS' %}
#在pillar中引入grains进行参数判断;
apache: httpd
#key:apache,value:httpd(要安装的软件名称);
{% elif grains['os'] =='Debian' %}
apache: apache2
{% endif %}
2)编写top.sls文件(minion范围):
[root@controller-node1 ~]# cat /srv/pillar/base/top.sls
base:
'172.16.1.91':
- apache
3)获取设置的pillar:
[root@controller-node1 ~]# salt '*' pillar.items
172.16.1.91:
----------
apache:
httpd
4)在状态文件中引用pillar(安装):
[root@controller-node1 ~]# cat /srv/salt/base/web/apache.sls
apache-install:
pkg.installed:
- name: {{ pillar['apache'] }}
apache-service:
service.running:
- name: {{ pillar['apache'] }}
- enable: True
5)修改/srv/salt/base/top.sls(自动化):
[root@controller-node1 ~]# cat /srv/salt/base/top.sls
base:
'*':
- web.apache
6)执行
[root@controller-node1 ~]# salt '*' state.highstate
7)说明:
test=True和top.sls中的grains匹配在pillar中正常使用;
4.9、将saltstack的返回值写到数据库:
1、在master上安装数据库:
[root@controller-node1 ~]# yum install -y mariadb-server
[root@controller-node1 ~]# systemctl start mariadb
[root@controller-node1 ~]# systemctl enable mariadb
2、配置slatstack库:
(1)创建库和表:
参考文档:https://docs.saltstack.com/en/latest/ref/returners/all/salt.returners.mysql.html
[root@controller-node1 ~]# mysql -uroot -p123456
MariaDB [(none)]>
CREATE DATABASE salt DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
USE salt;
CREATE TABLE `jids` (
`jid` varchar(255) NOT NULL,
`load` mediumtext NOT NULL,
UNIQUE KEY `jid` (`jid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `salt_returns` (
`fun` varchar(50) NOT NULL,
`jid` varchar(255) NOT NULL,
`return` mediumtext NOT NULL,
`id` varchar(255) NOT NULL,
`success` varchar(10) NOT NULL,
`full_ret` mediumtext NOT NULL,
`alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
KEY `id` (`id`),
KEY `jid` (`jid`),
KEY `fun` (`fun`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `salt_events` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`tag` varchar(255) NOT NULL,
`data` mediumtext NOT NULL,
`alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`master_id` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `tag` (`tag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
MariaDB [salt]> show tables;
+----------------+
| Tables_in_salt |
+----------------+
| jids |
| salt_events |
| salt_returns |
+----------------+
3 rows in set (0.00 sec)
3、给库进行授权:
MariaDB [salt]> grant all on salt.* to salt@'172.16.1.%' identified by '123456';
MariaDB [salt]> flush privileges;
4、安装mysql的python模块:
[root@controller-node1 ~]# yum install -y MySQL-python
5、在master的配置文件中添加连接数据库的配置:
[root@controller-node1 ~]# vim /etc/salt/minion #部分配置修改;
cachedir: /var/cache/salt/master
#cache存储路径;
keep_jobs: 12
#mysql返回cache保存的时间,默认是24小时,建议改小,不然saltstack会占用磁盘;
#return: mysql
master_job_cache: mysql
mysql.host: '172.16.1.90'
mysql.user: 'salt'
mysql.pass: '123456'
mysql.db: 'salt'
mysql.port: 3306
6、重启salt-master:
[root@controller-node1 ~]# systemctl restart salt-master.service
7、测试:
[root@controller-node1 ~]# salt '172.16.1.91' cmd.run 'uptime' -v
Executing job with jid 20190729112956524977
-------------------------------------------
172.16.1.91:
11:29:56 up 1:09, 1 user, load average: 0.00, 0.01, 0.05
[root@controller-node1 ~]# salt-run jobs.lookup_jid 20190729112956524977
172.16.1.91:
11:29:56 up 1:09, 1 user, load average: 0.00, 0.01, 0.05
[root@controller-node1 ~]# mysql -uroot -p123456
MariaDB [salt]> select * from salt_returns\G;
*************************** 1. row ***************************
fun: cmd.run
jid: 20190729112956524977
return: " 11:29:56 up 1:09, 1 user, load average: 0.00, 0.01, 0.05"
id: 172.16.1.91
success: 1
full_ret: {"fun_args": ["uptime"], "jid": "20190729112956524977", "return": " 11:29:56 up 1:09, 1 user,
load average: 0.00, 0.01, 0.05", "retcode": 0, "success": true, "cmd": "_return", "_stamp": "2019-07-29T03:29:56.836808",
"fun": "cmd.run", "id": "172.16.1.91"}alter_time: 2019-07-29 11:29:56
8、补充:
(1)以上的mysql返回方法是master的返回,常用;
(2)在minion配置mysql返回,不常用:
1)在minion上安装MySQL-python:
[root@controller-node1 ~]# salt '*' pkg.install 'MySQL-python'
2)在minino的配置文件中添加如下参数:
[root@slave-node1 ~]# vim /etc/salt/minion
#return: mysql
mysql.host: '172.16.1.90'
mysql.user: 'salt'
mysql.pass: '123456'
mysql.db: 'salt'
mysql.port: 3306
2)在命令行使用'--return mysql参数指定返回':
[root@controller-node1 ~]# salt '172.16.1.91' cmd.run 'uptime' --return mysql
4.10、
4、saltstack的使用的更多相关文章
- saltstack初探
salt-key -y -d linux-node1 #删除linux-node1节点的认证 salt -G 'cpuarch:x86_64' grains.item num_cpus >> ...
- saltstack命令执行过程
saltstack命令执行过程 具体步骤如下 Salt stack的Master与Minion之间通过ZeroMq进行消息传递,使用了ZeroMq的发布-订阅模式,连接方式包括tcp,ipc salt ...
- Saltstack之salt-master的打开文件数问题
一.引言: 单个salt-master下的minion数已经达到2101个了,所以在master日志有如下的提示: 2016-09-09 11:36:22,221 [salt.utils.verify ...
- Saltstack
一.Satlstack的概述 Saltstack是什么? Salt是一种和以往不同的基础设施管理方法,它是建立在大规模系统高速通讯能力可以大幅提升的想法上.这种方法使得Salt成为一个强大的能够解决基 ...
- python virtualenv 安装运行saltstack
需求产生场景: 1.python的virtualenv虚拟环境非常的好用. 2.saltstack作为运维自动化的一个重要组件也挺好用的. 但是: 1.saltsatck ...
- 自动化运维:网站svn代码上线更新(flask+saltstack)
阶段性总结: 跌跌撞撞的用了一周左右的时间做完了网站自动升级功能,中间遇到了很多的问题,也学到了很多,在此做一个总结. 1.整体架构: 后台:nginx+uwsgi #nginx提供w ...
- saltstack安装配置(halite)
saltstack官方提供了一个简单的web UI--halite.但是给出的安装配置方法实在没法实现,在网上找了几篇博客,见文章末尾的参考链接,可以用起来了.但是功能有点简单.这篇文章记录安装配置h ...
- Saltstack异步执行命令(十三)
Saltstack异步执行命令 salt执行命令有时候会有超时的问题,就是命令下发下去了,部分主机没有返回信息,这时候就很难判断命令或任务是否执行成功.因此,salt提供异步执行的功能,发出命令后立即 ...
- Saltstack之SSH(十一)
Saltstack之SSH 安装 yum install -y salt-ssh 官方文档 https://docs.saltstack.com/en/latest/topics/ssh/index ...
- Saltstack之Syndic(十)
Saltstack之Syndic 使用条件: 1.salt syndic必须运行在一台master上 2.salt syndic必须依赖更高级的master 安装 yum install -y sal ...
随机推荐
- deep
deepinv20已经解决 sudo apt update && sudo apt upgrade
- Linux_搭建NFS服务(基础)
[RHEL8]-NFSserver :[Centos7]-NFSclient !!!测试环境我们首关闭防火墙和selinux(NFSserver和NFSclient都需要) [root@localho ...
- TCP/IP协议三次握手_四次挥手
TCP/IP协议 TCP是一种面向连接的端到端的可靠传输协议. TCP报头格式 三次握手的过程 一.客户端发送一个连接请求,发送一个随机数X,这时客户端的端口状态变为SYN_SENT状态. 二.服务端 ...
- 搜狗拼音输入法v9.6a (9.6.0.3568) 去广告精简优化版本
https://yxnet.net/283.html 搜狗拼音输入法v9.6a (9.6.0.3568) 去广告精简优化版本 软件大小:29.2 MB 软件语言:简体中文 软件版本:去广告版 软件授权 ...
- Linux 文件隐藏属性-创建文件默认权限
Linux特殊权限介绍 # password原本只有root可以访问但是为什么普通用户在修改密码的时候也可以改里面的内容. [root@gong ~]# ll /usr/bin/passwd -rws ...
- shell初学之nginx(域名)
创建两个以域名区分的虚拟网站: 1 #!/bin/bash 2 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/ ...
- shell基础之shell相关概念
一.脚本介绍 1.脚本简单地说就是一条条的文字命令(一些指令的堆积),这些文字命令是可以看到的(如可以用记事本打开查看.编辑). 常见的脚本: JavaScript(JS,前端),VBScript, ...
- Centos7.3 进入救援模式,解决虚拟机开机引导只能看到一个横杠
问题描述:搭建在CAS服务器中的虚拟机开机后只能看到一个横杠,因为开发同事的一些操作使glibc库/lib64/libc.so.6软链接失效 1.libc.so.6 是c运行时库 glibc的软链接, ...
- 2. Servlet3.0注解方式 @WebServlet
web.xml配置还是比较麻烦,这次使用注解方式 编写servlet import javax.servlet.ServletException; import javax.servlet.annot ...
- Django(45)drf序列化类的使用(Serializer)
前言 上一篇文章我们讲述了序列化,这篇就带大家一起来实现以下序列化 Serializer 我们使用序列化类Serializer,我们来看下源码结构,这里推荐使用pycharm左边导航栏的Structu ...