1.grep的作用
grep(Global search Regular Expression and Print out the line)在文本中查找指定的字符串,在Linux中,grep,sed和awk时常用的文本处理工具。
来源:W3school(CSS参考手册)https://www.w3school.com.cn/cssref/index.asp
1 | .class-name{ ... ;} //命名一个class |
1 | #id-name{ ... ;} //命名一个id |
在一个html网页页面中可以无数次调用相同的class类;
而同样的id在页面里只能出现一次
1 | <!-- comment --> |
1 | <link rel="shortcut icon" sizes="16*16 24*24 48*48 64*64" href="favicon.ico"> |
1.绝对路径
/../xx.png
2.相对路径
xx.png
3.子路径
images/xx.png
4.父路径
../xx.png
1 | <nav>//导航栏 |
display: inline-block
排列在一行
:hover
当鼠标悬浮在某个格式上面的时候,则
cursor: pointer 鼠标变为手指
1、static:
static是所有元素的默认属性,也就是可以理解为正常的文档流
2、relative:
relative是相对于自己文档的位置来定位的,对旁边的元素没有影响
3、absolute:
absolute是相对于父标签来进行定位的,如果没有父标签或者父标签是static,那么sorry,刚烈的absolute会相对于文档定位(不同于fixed相对于浏览器定位)
4、fixed;
牛逼的fixed,是相对于浏览器窗口来定位的。不会因为滚动条滚动,牛了一笔。(但是平常卵用不多,我自己的吐槽)
1 | <head> |
1 | <head> |
1 | <p style="color: sienna; margin-left: 20px"> |
加入某个属性在不同的样式表中被同样的选择器定义,属性值将从范围小的样式表中被继承下来。例如外部样式表和内部样式表中都定义了一个属性,则继承内部样式表。
1 | selector{property: value} |
1 | h1{ |
1 | ul em { |
1 | .black { |
1 | #black { |
什么是最优秀的文本编辑器,当然是vim.
vim操作方便,在熟悉中会发现直接通过键盘进行操作比用鼠标更加的快速,可以享受到双手放在键盘上打字的畅快淋漓。
在打字过程中,不需要中断操作,然后再拿鼠标,减少了鼠标控制的打扰。
而且vim经历了大量大神的调教之后,增加了无数的扩展,更加贴近人的使用习惯。
完全可以用vim作为日常的程序文本编辑器,
当你直接下载之后,vim是非常干净的,里面没有扩展,功能也很单一,在实际使用的情况下,我们需要对vim进行配置,来添加一些有用的插件。
我的vim配置?https://github.com/Emir-Liu/vimrc
配置是fork其他大神的,里面的功能也在探索的过程中,使用它搭配makefile等可以进行项目的实践,贴图:
上面是我之前使用vim和一些工具做的STM32程序模板。
1 | ack.vim: |
内容结构:
1.vim配置方式
2.vim操作指南
3.vim中一些有用的插件
3.1 NERDTree
3.2 ctags
4.FAQ
首先,为了让vim实现更多的功能,我们需要对其进行配置使得使用过程更加流畅方便,当然,如果没有配置同样可以使用,那就直接跳转到下一章。
配置之后,每次使用vim就可以直接为配置的样式。
1 | vim --version |
输入上面的命令之后,可以看到
1 | system vimrc file: "$VIM/vimrc" |
我一般是修改user vimrc file,也就是用户vim配置文件,通过编辑这个文件可以修改vim的外观,快捷键,插件等。
可以直接用我的配置,可以看上面的我的配置。
之后有一篇我的博客是对我的配置进行一些讲解。
我们以自动设置行号为目标对文件做简单的配置。
首先进入用户vim配置文件中
在配置文件.vimrc后面加上:
1 | set number "显示行号 |
vim有三种常用模式,分别为:底线命令模式(Last line mode)、输入模式(Insert mode)、命令模式(Command mode)
但是,实际上还有:视图模式(Visual mode)
用户刚刚启动vim,便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
这种模式主要是输入简单常见的几种命令组合。
当前模式下,切换模式的命令:
1 | i 切换到输入模式,以输入字符。 |
该模式下的常用命令:
1 | yy 复制当前行内容 |
在命令模式下按下i就进入了输入模式,输入文件内容。
当前模式下,切换模式的命令:
1 | ESC,退出输入模式,切换到命令模式 |
在命令模式下按下:(英文冒号)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
当前模式下,切换模式的命令:
1 | ESC,退出输入模式,切换到命令模式 |
该模式下的常用命令:
1 | q 退出程序 |
1 | help v_ |
在命令模式下按下v/V/Ctrl+V就进入了视图模式。
视图模式是为了方便选取文本,然后进行复制粘贴等内容。
1 | ESC,退出视图模式,切换到命令模式 |
该模式中有三种小的模式:
1 | v 进入字符可视化模式,文本选择是以字符为单位 |
该模式下的常用命令:
1 | 光标选择 |
1 | vim filename 打开或者新建文档 |
输入模式(在命令模式下按下i)
1 | ENTER 回车,换行 |
底线命令模式(在命令模式中按下:)
1 | :q 退出模式 |
命令模式(在其他模式下按下ESC)
1 | 移动光标 |
当建立一个工程的时候,我们通常不仅仅只有一个文件,而是一个文件夹下面的多个文件,为了能够方便我们切换编辑工程内的文件,我们使用了这个模块。
命令模式
1 | :NERDTree |
配置(按下F3可以显示或者隐藏NERDTree)
1 | map <F3> :NERDTreeMirror<CR> |
常用命令
1 | 树形界面中 |
当使用上面的NERDTree模块之后,我们可以很方便的管理一个工程,但是,当需要查看函数的定义的时候,我们需要使用ctags模块来快速跳转到函数的定义。
1 | ctags -R |
用上面的两个常用的按键来查看代码简直爽快。
Ans:当编辑后忘记退出或意外关闭时,删除隐藏文件swp,可以删除;或者找到编辑后的文件
vim中存在系统粘贴板,可以通过使用
1 | :reg |
来显示系统粘贴板中的内容,然后记住所要粘贴内容的需要例如下面
1 | "3 |
然后在文档中输入命令
1 | "3p |
就可以了
1 | :xx,yy> |
SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准 配置。
SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文针对的实现是OpenSSH,它是自由软件,应用非常广泛。这里只讨论SSH在Linux Shell中的用法。
原因在于它采用了公钥加密。
整个过程是这样的:
(1)远程主机收到用户的登录请求,把自己的公钥发给用户。
(2)用户使用这个公钥,将登录密码加密后,发送回来。
(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。
这个过程本身是安全的,但是实施的时候存在一个风险:如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪。因为不像http协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。
可以设想,如果攻击者插在用户与远程主机之间(比如在公共的wifi区域),用伪造的公钥,获取用户的登录密码。再用这个密码登录远程主机,那么SSH的安全机制就荡然 无存了。这种风险就是著名的”中间人攻击”(Man-in-the-middle attack)。
好吧,上面的那些我都不清楚,下面的我知道一点
1 | scp [-P 端口号] file-name user-name@ip/host-name:target |
在外网服务器上配置:
1 | vim /etc/sshd_config |
在内网主机上配置:
1 | ssh -gR 11122:localhost:22 Ruser@Rserver |
自动连接到外网,检查端口状态
1 | netstat -tln |
测试:
1 | ssh -p 11122 user@Rserver |
Expect是一个用来处理交互的命令。借助Expect,我们可以将交互过程写在一个脚本上,使之自动化完成。可以应用于ssh登陆,ftp登陆。
1 | send //用于向进程发送字符串 |
expect最常用的语法是来自tcl语言的模式-动作。这种语法极其灵活,下面我们就各种语法分别说明。
1 | expect "hi" {send "You said hi"} |
匹配到hi后,会输出”you said hi”
1 | expect "hi" { send "You said hi\n" } \ |
匹配到hi,hello,bye任意一个字符串时,执行相应的输出。等同于如下写法:
1 | expect { |
文本编辑器
vim
equ电子书阅读器
calibre
音乐作谱
LMMS
数据库
MySQL
仓库
git
下载工具
KTorrent
ural
常用工具
tree
即时聊天工具
skype
视频相关
录屏
obs
视频解码器
ubuntu-restricted-extras
.sh:source/sh/bash
makefile
c/c++
在Ubuntu中有三种方式运行.sh脚本:
1 | sh xxx.sh //通过sh运行 |
当时用最后一种时,有两个条件:
1。需要在文档中有
1 |
|
分别代表用bash和sh运行
如果没有指定用bash或者sh时,Ubuntu会使用bash.
2。权限修改
1 | chmod a+x xxx.sh |
建议使用bash因为会避免一些奇怪的错误
执行shell脚本的执行方式的区别:
./.sh sh ./.sh bash ./*.sh 重新启动一个子进程
source ./.sh ../.sh 执行方式,都是在当前进程中执行脚本。
注意:没有被export导出的变量(非环境变量)是不能够被子shell继承的。
命令 说明
command > file 将输出重定向到 file。
command < file 将输入重定向到 file。
command >> file 将输出以追加的方式重定向到 file。
n > file 将文件描述符为 n 的文件重定向到 file。
n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m 将输出文件 m 和 n 合并。
n <& m 将输入文件 m 和 n 合并。
<< tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入。
“” 里面包含转义字符
‘’里面没有转义字符
区分大小写,表示后面的target不是真实的文件。
#
1 | make args=data |
1 | SHELL=/bin/bash |
1、“=”
make会将整个makefile展开后,再决定变量的值。也就是说,变量的值将会是整个makefile中最后被指定的值。看例子:
1 | x = foo |
在上例中,y的值将会是 xyz bar ,而不是 foo bar 。
2、“:=”
“:=”表示变量的值决定于它在makefile中的位置,而不是整个makefile展开后的最终值。
1 | x := foo |
在上例中,y的值将会是 foo bar ,而不是 xyz bar 了。
预处理 .c -> .i
汇编 .i -> .s
编译 .s -> .o
链接 .0 -> 可执行文件
1 | gcc [选项] [文件名] |
1 | FILE *fopen( const char * filename, const char * mode );//打开文件 |
参数:
模式 描述
r 打开一个已有的文本文件,允许读取文件。
w 打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。
a 打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。
r+ 打开一个文本文件,允许读写文件。
w+ 打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。
a+ 打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。
如果处理的是二进制文件,则需使用下面的访问模式来取代上面的访问模式:
“rb”, “wb”, “ab”, “rb+”, “r+b”, “wb+”, “w+b”, “ab+”, “a+b”
1 | int fclose( FILE *fp );//关闭文件 |
进入官网安装Metasploit,选择开源版本,进入到git找到Metasploit的快速安装方法。
1 | curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && \ |
注意,需要安装curl包。
然后,Metasploit默认使用postgres数据库,安装postgres数据库。
当然,也可以使用其他数据库,不过先不管了。
首先启动数据库
1 | service postgresql start |
查看数据库服务是否开启
1 | netstat -tnpl | grep postgres |
进入msfconsole
1 | msfconsole |
1 | nmap -v 192.168.1.1/24 --script vuln -Pn -O |
关于nmap
-v 增加详细程度
–script 脚本
vuln 检测目标机是否有常见漏洞
-Pn 将所有主机视为在线
-O 启动系统检测
namp脚本:
auth: 负责处理鉴权证书(绕开鉴权)的脚本
broadcast: 在局域网内探查更多服务开启状况,如dhcp/dns/sqlserver等服务
brute: 提供暴力破解方式,针对常见的应用如http/snmp等
default: 使用-sC或-A选项扫描时候默认的脚本,提供基本脚本扫描能力
discovery: 对网络进行更多的信息,如SMB枚举、SNMP查询等
dos: 用于进行拒绝服务攻击
exploit: 利用已知的漏洞入侵系统
external: 利用第三方的数据库或资源,例如进行whois解析
fuzzer: 模糊测试的脚本,发送异常的包到目标机,探测出潜在漏洞 intrusive: 入侵性的脚本,此类脚本可能引发对方的IDS/IPS的记录或屏蔽
malware: 探测目标机是否感染了病毒、开启了后门等信息
safe: 此类与intrusive相反,属于安全性脚本
version: 负责增强服务与版本扫描(Version Detection)功能的脚本
vuln: 负责检查目标机是否有常见的漏洞(Vulnerability),如是否有MS08_067
关于扫描漏洞的结果:
NSE(Nmap Script Engine)是Nmap最强大,最灵活的功能之一。它允许用户编写(和共享)简单脚本,以自动执行各种网络任务。然后,这些脚本将与您期望从Nmap获得的速度和效率并行执行。用户可以依赖分布在Nmap上的不断增长的各种脚本,或者编写自己的脚本来满足自定义需求。
DNS(Domain Name Resolution)域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务。IP地址是网络上标识站点的数字地址,为了方便记忆,采用域名来代替IP地址标识站点地址。域名解析就是域名到IP地址的转换过程。域名的解析工作由DNS服务器完成。把域名解析到一个IP地址,然后在此IP地址的主机上将一个子目录与域名绑定。
互联网中的地址是数字的IP地址,域名解析的作用主要就是为了便于记忆。
SYN扫描:
SYN扫描是恶意黑客不建立完全连接,用来判断通信端口状态的一种手段。这种方法是最老的一种攻击手段,有时用来进行拒绝服务攻击。
SYN扫描也称半开放扫描。在SYN扫描中,恶意客户企图跟服务器在每个可能的端口建立TCP/IP连接。这通过向服务器每个端口发送一个SYN数据包,装作发起一个三方握手来实现。如果服务器从特定端口返回SYN/ACK(同步应答)数据包,则意味着端口是开放的。然后,恶意客户程序发送一个RST数据包。结果,服务器以为存在一个通信错误,以为客户端决定不建立连接。开放的端口因而保持开放,易于受到攻击。如果服务器从特定端口返回一个RST数据包,这表示端口是关闭的,不能攻击。通过向服务器连续发送大量的SYN数据包,黑客能够消耗服务器的资源。由于服务器被恶意客户的请求所淹没,不能或者只能跟很少合法客户建立通信。
SYN Stealth Scan
Ubuntu 中,通常有线网卡端口为enp2s0(eth0),无线网卡端口则为wlp1s0(wlan0),使用wlp3s0这种复杂的名字主要是为了减少网卡的枚举。
1 | ifconfig |
查看无线网卡的端口。wlp1s0
查看MAC地址,在ether后面。a0:c5:89:77:47:78
aircrack-ng:
Aircrack-ng是一个与802.11标准的无线网络分析有关的安全软件,主要功能有:网络侦测,数据包嗅探,WEP和WPA/WPA2-PSK破解。Aircrack-ng可以工作在任何支持监听模式的无线网卡上(设备列表请参阅其官方网站)并嗅探802.11a,802.11b,802.11g的数据。该程序可运行在Linux和Windows上。Linux版本已经被移植到了Zaurus和Maemo系统平台, 并概念验证可移植到iPhone。
1 | sudo airmon-ng start +无线网卡的端口 |
1 | sudo airodump-ng +无线网卡的端口 (注意在将无线网卡变为监听模式后,端口名会改变)wlp1s0mon |
1 | sudo airodump-ng --bssid +路由器MAC -c +信道 -w +文件名 +无线网卡的端口 64:58:AD:44:AF:16 |
1 | sudo aireplay-ng -1 0 -a +路由器MAC -h +本机无线网卡MAC +无线网卡端口 |
1 | sudo aireplay-ng -2 -F -p 0841 -c ff:ff:ff:ff:ff:ff -b +路由器MAC -h +本机无线网卡MAC +无线网卡端口 |
1 | sudo aircrack-ng +文件名*.cap |
1 | sudo airmon-ng stop +无线网卡端口 |
详细教程:http://www.mysqltutorial.org/basic-mysql-tutorial.aspx
1 | sudo apt install mysql-server |
安装是否成功
1 | sudo netstat -tap | grep mysql |
mysql服务是否正常
1 | systemctl status mysql.service |
1 | show databases; //列出数据库 |
1 | show tables; |
查询表内的数据结构
1 | desc table-name; //查询表的字段信息(不包含内容) |
1 | select [distinct] column1[as alias],column2/expression/* |
其中,where column-name = ‘sth’
where与between搭配:where expression between low and high
where与like搭配:where column-name like ‘%sth’
其中,%与零或者多个任意字符串匹配,匹配任何单个字符。
where与in搭配:where value in (value1,value2,…)
where与is null搭配:where value is null
其中,null是一个标记,表示一条信息缺失或者未知。
比较运算符
=
<>或!=
<
>
<=
/>=
其中,0被视为false,非零视为true。
MySQL首先运算AND,然后运算OR。
其中in通常与子查询一起使用。
特别使用日期,Between与日期 cast(‘2001-01-01’ as date)
like:(模式不区分大小写)
expression LIKE pattern ESCAPE escape-character
当需要匹配的模式包含通配符,可以用ESCAPE来指定转义字符,如果没有明确指定转义字符,反斜杠为缺省转义字符
MySQL存储引擎:
1.MyISAM
2.InnoDB
3.MERGE
4.MEMORY/HEAP
5.ARCHIVE
6.CSV
7.FEDERATED
MySQL数据类型
每种数据可以通过以下的特征来确定:
1.值的类型
2.占用的空间,以及值为固定长度还是可变长度
3.数据类型的值是否可以索引
4.如何比较特定数据类型的值
数字:
TINYINT 非常小的整数
SMALLINT 小的整数
MEDIUMINT 中等整数
INT 标准整数
BIGINT 大整数
DECIMAL 定点数
FLOAT 单精度浮点数
DOUBLE 双精度浮点数
BIT 一位
布尔:
没有内置的布尔数据类型,使用最小的整数类型TINYINT
字符串:
可以保存从纯文本到二进制数据例如图像或者文件的任何内容。
CHAR 固定长度的非二进制字符串
VARCHAR 可变长度的非二进制字符串
TINYTEXT 很小的非二进制字符串
TEXT 小的非二进制字符串
MEDIUMTEXT 中等非二进制字符串
LONGTEXT 大型非二进制字符串
BINARY 定长的二进制字符串
VARBINARY 可变长度的二进制字符串
TINYBLOB 很小的BLOB(二进制大对象)
BLOB 小BLOB
MEDIUMBLOB 中等BLOB
LONGBLOB 大型BLOB
ENUM 枚举,每个列可以分配一个枚举成员
SET 一套,每个列可以分配0或者多个SET成员
时间:
DATE CCYY-MM-DD
TIME HH:MM:SS
DATETIME CCYY-MM-DD HH:MM:SS
TIMESTAMP CCYY-MM-DD HH:MM:SS
YEAR CCYY/YY
空间:
没有用到过,待定
JSON数据类型: