0%

安装过程

安装composer

1
2
# php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
# php composer-setup.php

移动到$PATH下的路径

1
# mv composer.phar /usr/local/bin/composer

切换国内镜像

1
2
# composer config -g repo.packagist composer https://packagist.phpcomposer.com
# composer config -g repo.packagist composer https://packagist.laravel-china.org(稳定可用)

安装thinkphp到tp5目录下

1
# composer create-project topthink/think tp5

安装migration,应该在tp5目录下执行

tp5只支持2.x的migration

1
# composer require topthink/think-migration "2.x"

下载bootstrap layui wangeditor这些开源实现

键盘示例程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <reg51.c>

#define uint unsigned int
#define uchar unsigned char

sbit MDzhengzhuan_control=P0^0;
sbit MDfanzhuan_control=P0^1;
sbit MDstop_control=P0^2;
sbit light_on_control=P0^3;
sbit light_off_control=P0^4;
sbit fmq_on_control=P0^5;

sbit JDQ_in=P1^0;
sbit MDfu=P1^3;
sbit MDzheng=P1^4;
sbit FMQ=P1^5;


void delay(uint ms);
void key_input();
void MDzhengzhuan();
void MDfanzhuan();
void MDstop();
void light_on();
void light_off();
void fmq_on();


void main(){
P0=0xff;
while(1){
key_input();
}
}

void delay(uint ms){
uint i,j;
for(i=0;i<ms;i++){
for(j=0;j<110;j++);
}
}

void key_input(){
P0=0xff;
if((P0&0x3f)!=0x3f){
delay(10);
if(MDzhengzhuan_control==0){
MDzhengzhuan();
delay(100);
}
if(MDfanzhuan_control==0){
MDfanzhuan();
delay(100);
}
if(MDstop_control==0){
MDstop();
delay(100);
}
if(light_on_control==0){
light_on();
delay(100);
}
if(light_off_control==0){
light_off();
delay(100);
}
if(fmq_on_control==0){
fmq_on();
delay(100);
}
}
}

void MDzhengzhuan(){
MDzheng=1;
MDfu=0;
}

void MDfanzhuan(){
MDzheng=0;
MDfu=1;
}

void MDstop(){
MDzheng=0;
MDfu=0;
}

void light_on(){
JDQ_in=1;
}

void light_off(){
JDQ_in=0;
}

void fmq_on(){
FMQ=0;
delay(1000);
FMQ=1;
delay(1000);
FMQ=0;
delay(1000);
FMQ=1;
delay(1000);
FMQ=0;
delay(1000);
FMQ=1;
}

1
([0-9]{1,3}[\.]){3}[0-9]{1,3}
1
2
(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){3}\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>

可攻击

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
211.71.232.42
211.71.232.43
211.71.232.54
211.71.232.55
211.71.232.132
211.71.232.133
211.71.232.134
211.71.232.135
211.71.232.136
211.71.232.137
211.71.232.138
211.71.232.139
211.71.232.140
211.71.232.141
211.71.232.142
211.71.232.143
211.71.232.144
211.71.232.147
211.71.232.148
211.71.232.156
211.71.232.157
检测结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[-] 211.71.232.42:445     - Host does NOT appear vulnerable.
[-] 211.71.232.54:445 - Host does NOT appear vulnerable.
[*] Scanned 3 of 21 hosts (14% complete)
[+] 211.71.232.132:445 - Host is likely VULNERABLE to MS17-010! - Windows 7 Ultimate 7601 Service Pack 1 x86 (32-bit)
[*] Scanned 5 of 21 hosts (23% complete)
[-] 211.71.232.133:445 - Host does NOT appear vulnerable.
[*] Scanned 7 of 21 hosts (33% complete)
[+] 211.71.232.135:445 - Host is likely VULNERABLE to MS17-010! - Windows Server 2003 3790 Service Pack 2 x86 (32-bit)
[*] Scanned 9 of 21 hosts (42% complete)
[-] 211.71.232.137:445 - Host does NOT appear vulnerable.
[-] 211.71.232.138:445 - Host does NOT appear vulnerable.
[*] Scanned 11 of 21 hosts (52% complete)
[+] 211.71.232.139:445 - Host is likely VULNERABLE to MS17-010! - Windows Server 2003 3790 Service Pack 2 x86 (32-bit)
[*] Scanned 13 of 21 hosts (61% complete)
[+] 211.71.232.141:445 - Host is likely VULNERABLE to MS17-010! - Windows Server 2008 R2 Enterprise 7601 Service Pack 1 x64 (64-bit)
[+] 211.71.232.142:445 - Host is likely VULNERABLE to MS17-010! - Windows Server 2008 R2 Enterprise 7601 Service Pack 1 x64 (64-bit)
[*] Scanned 15 of 21 hosts (71% complete)
[+] 211.71.232.143:445 - Host is likely VULNERABLE to MS17-010! - Windows Server 2008 R2 Enterprise 7601 Service Pack 1 x64 (64-bit)
[*] Scanned 17 of 21 hosts (80% complete)
[+] 211.71.232.147:445 - Host is likely VULNERABLE to MS17-010! - Windows 7 Ultimate 7601 Service Pack 1 x64 (64-bit)
[*] Scanned 19 of 21 hosts (90% complete)
[+] 211.71.232.156:445 - Host is likely VULNERABLE to MS17-010! - Windows Server 2008 R2 Enterprise 7601 Service Pack 1 x64 (64-bit)
[*] Scanned 21 of 21 hosts (100% complete)
[*] Auxiliary module execution completed

1
2
3
4
5
6
7
8
9
divint3@Divint3:~$ cat 123.txt | grep "MS17-010" | egrep -o  "(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){3}\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>" | uniq >> 123.txt

211.71.232.135
211.71.232.139
211.71.232.141
211.71.232.142
211.71.232.143
211.71.232.147
211.71.232.156
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
for i in $(seq 5)
do
useradd user$i -m
echo "创建用户成功"
echo "user$i" | passwd --stdin &> /dev/null
echo "更新密码成功"

userdel -r user$i
echo "删除成功"

done
1
2
3
4
条件表达式
使用[ ]


1
2
3
4
5
6
7
useradd user1 -m &> /dev/null
if($? -ne 0 )
do
echo "user1" | passwd --stdin user1
done


1
2
! id user && useradd -m user || echo "user exists"

1
2
3
4
5
6
7
8
9
10
11
12
逻辑与
&&
逻辑或
||
或与运算
[逻辑式] 逻辑与 [ 逻辑式 ] 逻辑或 [式子]


1 && echo "user exisit" || useradd
id user1 && useradd user1 || echo "user1 exisit"


1
2
3
4
5
6
7
8
9
10
11
if 判断条件; then 
else



else


fi


1
2
3
#!/bin/bash
COUNT=`cat /etc/passwd | grep "/bin/bash" | wc -l`
echo "$COUNT"
1
2
3
4
#!/bin/bash

cat /etc/inittab | grep ^$ | wc -l
echo $?
1
2
3
#!/bin/bash
UID1=`cat /etc/passwd | grep $USER | cut -d: -f3`
echo $UID1

显示设备

LCD1602:

引脚定义:

引脚号符号引脚说明引脚号符号引脚说明
1VSS电源地9D2数据端口
2VDD电源正极10D3数据端口
3VO偏压信号11D4数据端口
4RS命令/数据12D5数据端口
5RW读/写13D6数据端口
6E使能14D7数据端口
7D0数据端口15A背光正极
8D1数据端口16K背光负极

基本操作:

  1. 读状态:输入RS=0,RW=1,E=1。输出:D0—D7为状态字。
  2. 读数据:输入RS=1,RW=1,E=1。输出:D0—D7为数据。用于读取busy标志。
  3. 写命令:输入RS=0,RW=0,E=正脉冲。输出:无。
  4. 写数据:输入RS=1,RW=0,E=正脉冲。输出:无。

E高脉冲的意思是你先向E写入低电平,然后写入RS,RW,然后向E写入高电平。

控制命令:

  1. 01H:清屏。
  2. 02H:光标返回。
  3. 输入方式设置(EnterModeSet),这些指令规定了两个方面:一是写入一个DDRAM单元后,地址指针如何改变(加一还是减一);二是屏幕上的内容是否滚动。 04H:写入DDRAM后,地址指针减一(光标左移一位),比如第一个字符写入8FH,则下一个字符会写入8EH;屏幕上的内容不滚动。 05H:写入DDRAM后,地址指针减一,同上一种情况;每一个字符写入以后,屏幕上的内容向右滚动一个字符位,光标显示的位置不动。 06H:写入DDRAM后,地址指针加一(光标右移一位),比如第一个字符写入80H,则下一个字符会写入81H;屏幕上的内容也是不滚动。这应该是最常用的一种显示方式。 07H:写入DDRAM后,地址指针加一,同上一种情况;每一个字符写入以后,屏幕上的内容向左滚动一个字符位,光标显示的位置不移动。
  4. 屏幕开关、光标开关、闪烁开关。 08H、09H、0AH、0BH:关闭显示屏,实质上是不把DDRAM中的内容对应显示在屏幕上,对DDRAM的操作还是在进行的,执行这条指令,接着对 DDRAM进行写入,屏幕上没有任何内容,但是接着执行下面的某条指令,就能看到刚才屏幕关闭期间,对DDRAM操作的效果了。 0cH:打开显示屏,不显示光标,光标所在位置的字符不闪烁。 0dH:打开显示屏,不显示光标,光标所在位置的字符闪烁。 0eH:打开显示屏,显示光标,光标所在位置的字符不闪烁。 0fH:打开显示屏,显示光标,光标所在位置的字符闪烁。 关于光标的位置:光标所在的位置指示了下一个被写入的字符所处的位置,假如在写入下一个字符前没有通过指令设置DDRAM的地址,那么这个字符就应该显示在光标指定的地方。
  5. 设置光标移动(本质就是AC的增加还是减少)、整体画面是否滚动。 10H:每输入一次该指令,AC就减一,对应了光标向左移动一格。整体的画面不滚动。 14H:每输入一次该指令,AC就加一,对应了光标向右移动一格。整体的画面不滚动。 18H:每输入一次该指令,整体的画面就向左滚动一个字符位。 1CH:每输入一次该指令,整体的画面就向右滚动一个字符位。画面在滚动的时候,每行的首尾是连在一起的,也就是每行的第一个字符,若左移25次,就会显示在该行的最后一格。在画面滚动的过程中,AC的值也是变化的。
  6. 显示模式设定指令,设定了显示几行,显示什么样的点阵字符,数据总线占用几位。 20H:4位总线,单行显示,显示5×7的点阵字符。 24H:4位总线,单行显示,显示5×10的点阵字符。 28H:4位总线,双行显示,显示5×7的点阵字符。 2CH:4位总线,双行显示,显示5×10的点阵字符。 30H:8位总线,单行显示,显示5×7的点阵字符。 34H:8位总线,单行显示,显示5×10的点阵字符。 38H:8位总线,双行显示,显示5×7的点阵字符。这是最常用的一种模式。 3CH:8位总线,双行显示,显示5×10的点阵字符。

代码实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <reg51.h>

#define uint unsigned int
#define uchar unsigned char
#define out P0

sbit LCD_RS=P2^1;
sbit LCD_RW=P2^2;
sbit LCD_E=P2^3;

void delayms(uint);
void check_busy();
void write_cmd(uchar);
void write_dat(uchar);
void string(uchar,uchar);
void lcd_initial();

void main(){
lcd_initial();
while(1){
string(0x85,"Hello");
string(0xc2,"The World");
delayms(100);
write_cmd(0x01);
delayms(100);
}
}

void delayms(uint n){
uint i;
while(n--){
for(i=0;i<113;i++);
}
}

void check_busy(){
uchar dt;
do{
dt=0xff;
LCD_E=0;
LCD_RS=0;
LCD_RW=1;
LCD_E=1;
dt=out;
}while(dt&0x80);
LCD_E=0;
}

void write_cmd(uchar com){
check_busy();
LCD_E=0;
LCD_RS=0;
LCD_RW=0;
out=com;
LCD_E=1;
_nop_();
LCD_E=0;
delayms(1);
}

void write_dat(uchar dat){
check_busy();
LCD_E=0;
LCD_RS=1;
LCD_RW=0;
out=dat;
LCD_E=1;
_nop_();
LCD_E=0;
delayms(1);
}

void string(uchar ad,uchar *s){
write_cmd(ad);
while(*s>0){
write_dat(*s++);
delayms(100);
}
}

void lcd_initial(){
write_cmd(0x38);
write_cmd(0x0c);
write_cmd(0x05);
write_cmd(0x01);
delayms(1);
}

八段数码管

段码表

1
2
3
4
5
//共阳不带点:
uchar code noDot[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
//共阴不带点:
uchar code noDot[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

配置文件

profile * 所有用户登录时所执行的脚本,他会调用用户目录下的.profile .bashrc .bash_login

bash.bashrc * 用户新建一个bash shell时所会执行的脚本文件

rc.local * 系统完全启动后会执行其中的命令

passwd * 用户名:密码:UID:GID:comment:家目录:shell

shadow

  • 用户名:加密后的密码:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

gshadow * 用户组:用户组密码:用户组管理者:组成员

group * 组名:密码:GID:组内用户列表

login.defs * 使用useradd新建用户会从冲读取新用户权限的默认设定

skel * 新创立用户家目录的骨架,内含隐藏配置文件

nsswitch.conf * 记录了程序配置信息使用什么记录,类型有file,dns,等.表示了各种程序使用配置的优先级如果记录了项目使用file记录,会在/etc目录生成软件的同名配置文件,软件首先查询nss进程,获取配置文件信息后再使用数据

logrotate.conf * 记录了日志切割计划

rc.d/ * 各种启动级别以及脚本文件,包括rc.sysinit,init.d目录,init.d目录下是可执行程序,用于在各级别启动级别下创建软链接

Bash

shell是一种弱类型的编程语言

配置文件

profile:定义环境变量,运行程序或者脚本,只在用户登录时才会运行该配置文件

bashrc:设置本地变量,定义命令别名

阅读全文 »

mysql

密码与访问

配置远程访问

授权法

GRANT priv_type ON database.table TO user [IDENTIFIED BY [PASSWORD]]

  • priv_type 参数表示新用户的权限;
  • database.table 参数表示新用户的权限范围,即只能在指定的数据库和表上使用自己的权限;
  • user 参数指定新用户的账号,由用户名和主机名构成;
  • IDENTIFIED BY 关键字用来设置密码;
  • password 参数表示新用户的密码。

1
2
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION; -- 允许授予他人同等权限
FLUSH PRIVILEGES;

改表法(不常用)
1
2
UPDATE user SET Password = password ( 'password' ) WHERE User = 'root';
FLUSH PRIVILEGES;

mysql8.0及以上修改加密方式,使navicat可以登录

1
2
3
-- 默认为caching_sha2_password加密方式
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
FLUSH PRIVILEGES;

字符集及时区信息

character_set_server 服务器字符集,默认的字符集

character_set_client 客户端数据使用的字符集

character_set_connection 连接层字符集

character_set_database 数据库字符集

character_set_results 查询结果字符集

character_set_system 系统元数据字符集

使用cli

1
2
3
SHOW VARIABLES LIKE 'character%'; -- 查看字符集
SET @@global.character_set_server = utf8; -- 永久设定字符集
SET character_set_server = utf8; -- 临时设定字符集

修改配置文件

/etc/mysql/my.conf

1
2
3
default-character-set=utf8 #utf8mb4
default-collation=utf8_general_ci #utf8mb4
-- ci代表不区分大小写,cs代表区分大小写

docker使用mysql

使用mysql并配置相关环境变量

1
2
3
4
5
6
7
8
docker run --name mysql \
-p 3306:3306 \
-v /opt/server_data/mysql_data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-e TZ=Asia/Shanghai \
-d mysql:5.6 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci

sql指令

limit

limit是用来限制查询结果的

1
SELECT * FROM TABLE LIMIT m,n

其中m是指记录开始的index,从0开始,表示第一条记录 n是指从第m+1条开始,取n条。 select * from tablename limit 2,4 即取出第3条至第6条,4条记录

order

order子句用来排序表,order by 后加列名 如果要逆序 在列名后加 desc 正序ASC

1
SELECT * FROM `table` ORDER BY `column` ASC;

引用:

MySQL字符集与排序规则总结 - 潇湘隐者 - 博客园 (cnblogs.com)

MySQL -- 创建用户 CREATE USER 、GRANT语句

ansible

概念

  1. 自动化运维服务端
  2. 不需要安装客户端
  3. yum install epel-relese -y
  4. yum install ansible -y
  5. 首先,要先配置ssh免密登录
  6. ssh-keygen
  7. 一路回车
  8. ssh-copy-id [-i [identity_file]] [user@]machine
    阅读全文 »