再次记录学习到的命令,以防后面使用忘记又去百度。
防火墙相关操作
防火墙(iptables)是对主机的网络进行过滤也可以实现NAT(Network Address Translation)功能,也就是局域网中共用一个IP上网。有时间的可以读读大神的文章http://www.zsythink.net/archives/tag/iptables/在此记录常用命令
如果记不住命令可以使用
iptables --help | grep -w '\\-v'
进行查询,其中\表示转义也就是查询iptables命令中-v的含义
查看filter表INPUT链规则,
-t 表示操作的表table
-L --list
省略-t选项默认为filter表
v verbose查看更丰富信息
n 显示ip地址 --numeric numeric output of addresses and ports
--line-number 显示编号也可以写成--line
x为exact显示精确的数值
iptables -t filter --line-number -nvxL INPUT
实验准备
对于防火墙实验可以利用docker进行,docker pull ubuntu
拉取ubuntu镜像,然后run起来两个容器iptables-1和iptables-2,在这两个容器里面进行实验。
docker run --privileged -itd --name iptables-1 --hostname iptables-1 ubuntu:latest /bin/bash
docker run --privileged -itd --name iptables-2 --hostname iptables-2 ubuntu:latest /bin/bash
--privileged
表示以root权限进入容器,不然无法执行iptables命令,--hostname为容器命名,不然是一串字符串,不好分辨。在两个容器里面安装ping、iptables、ifconfig命令。
apt update
apt install iptables && net-tools && iputils-ping
然后通过ifconfig查看本机ip,docker默认的网络模式是bridge,这些容器处在一个局域网中,非常适合做实验。
实验
清空filter表INPUT链规则
-F --flush Delete all rules in chain or all chains
iptables -F INPUT
增加规则,对来自172.17.0.4的请求拒绝
-I --insert插入规则, -s --source,-j --jump target
iptables -t filter -I INPUT -s 172.17.0.4 -j DROP
-A --append追加规则
iptables -t filter -A INPUT -s 172.17.0.4 -j ACCEPT
指定新增规则编号
iptables -t filter -I INPUT 2 -s 172.2.0.4 -j ACCEPT
删除规则
iptables --line -nvL INPUT
#查看规则
iptables -t filter -D INPUT 2
# 删除第二条规则
iptables -D INPUT -s 172.17.0.4 -j ACCEPT
# 根据规则删除,删除来自172.17.0.4,动作为ACCEPT的规则
修改规则
将filter表 INPUT链编号为1的规则修改为-s 172.17.0.4 -j ACCEPT
iptables -t filter -R INPUT 1 -s 172.17.0.4 -j ACCEPT
将filter表FORWARD链默认规则修改为DROP
iptables -t filter -P FORARD DROP
NAT进行宿主机和docker端口映射
为了能实现对docker中的运行的容器增加端口映射,网上搜索说是通过iptables方法,看了方法感觉好长的命令,就想着把iptables好好看看,我感觉学习什么就得从基础来看,这样就能理解记忆,现在这个长命令理解了,记录一下。
iptables -t nat -A PREROUTING -d 宿主机IP -p tcp -m tcp --dport 宿主机端口 -j DNAT --to-destination 容器IP:容器端口
# 如果需要将192.168.1.2容器上的443端口映射到宿主机(192.168.2.140)的443端口
iptables -t nat -A PREROUTING -d 192.168.2.140 -p tcp -m tcp --dport 443 -j DNAT --to-destination 192.168.1.2:443
现在就好理解了,-t nat表示使用nat表,-A PREROUTING表示在PREROUTING上面APPEND一条规则,-d表示destination,对宿主机192.168.2.140的请求进行转发,-p tcp表示匹配tcp协议,-m tcp表示匹配(match)tcp扩展模块,--dport表示destination port对443端口进行转发,-j DNAT表示动作为DNAT,--to-destination字面上就看出来了。
安装ping、ifconfig基础包
apt install net-tools //ifconfig
apt install iputils-ping //ping
tar打包
有时候需要将多个文件或者文件夹打包然后更好地进行传输,需要使用到tar命令。
tar czvf archivename.tar.gz *.txt
将当前目录下的以txt结尾的文件打包压缩为archivename.tar.gz。其中c为create、z为zip一种压缩算法,如果不加z则打包过程不进行压缩、v为verbose列出压缩的文件、f为file即压缩文件的名字。
tar tvf archivename.tar.gz
t为list列出压缩包中文件的信息。
如果文件太大了,可以将文件进行分割
split -b 1G archivename.tar.gz *archivename.tar.gz.part*
将分割的文件链接起立,重新变成一个
cat archivename.tar.gz.part* > archivename.tasr.gz
将打包的文件解压
tar xzvf archivename.tar.gz
x为extract,如果打包的时候使用了z,解压的时候也要加上。
U盘挂载
fdisk -l # 查看插入的U盘设置标志符
# 进入文件夹创建挂载目录
mkdir /mnt
cd /mnt && mkdir usb
mount /dev/device /mnt/usb
# 使用完成后再U盘拔除之前需要卸载
umount /mnt/usb
或者
umount /dev/device
# 列出所有的挂载
mount
逻辑卷
我的理解就是逻辑卷把多块硬盘设备变成一个整体来使用。
逻辑卷就是使用逻辑卷组管理(Logic Volume Manager)创建出来的设备,也是Linux操作系统可以认识的设备。事实上,LVM是介于硬盘祼设备和文件系统的中间层
。
lsblk # 列出系统的块设备信息
└─[$] <> lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 956K 1 loop /snap/gnome-logs/81
sda 8:0 0 477G 0 disk
└─sda1 8:1 0 477G 0 part
├─ubuntu--vg-root 253:0 0 1.4T 0 lvm /
└─ubuntu--vg-swap_1 253:1 0 976M 0 lvm [SWAP]
sdb 8:16 0 931.5G 0 disk
└─ubuntu--vg-root 253:0 0 1.4T 0 lvm /
sdc 8:32 1 29.5G 0 disk
- NAME :这是块设备名。
- MAJ:MIN :本栏显示主要和次要设备号。
- RM :本栏显示设备是否可移动设备。注意,在本例中设备sdb和sr0的RM值等于1,这说明他们是可移动设备。
- SIZE :本栏列出设备的容量大小信息。
- RO :该项表明设备是否为只读。RO值为0,表明他们不是只读的。
- TYPE :本栏显示块设备是否是磁盘或磁盘上的一个分区。在本例中,sda和sdb是磁盘,而sr0是只读存储(rom)。
- MOUNTPOINT :本栏指出设备挂载的挂载点。
物理卷(Physical Volume, PV),也就是物理磁盘分区,比如说/dev/sdb1。如果要想使用LVM来管理这个物理卷,可使用fdisk工具将其ID改为LVM可以识别的值(也就是8e)。
卷组(Volume Group, VG),也就是PV的集合。
逻辑卷(Logic Volume, LV),也就是PV中划出来的一块逻辑磁盘。
物理卷创建以及查看 pvcreate、pvdisplay;卷组创建以及查看vgcreate、vgdisplay;逻辑卷创建以及查看lvcreate、lvdisplay
正则表达式学习
将/etc/passwd文件拷贝到用户目录进行练习
cp /etc/passwd ~/
正则表达式单个字符
特定字符
grep "1" passwd
范围内字符
[0-9]、[a-z] 、[A-Z] grep [0-9] passwd
取反 [^0-9]就是不包含数字0-9的字符串, grep [^0-9] passwd
任意字符
使用.
表示任意一个字符,注意[.]
和\.
区别
grep . passwd
查找出所有的字符 grep [.] passwd
仅仅查找出点号这个字符,grep '\.' passed
也是仅仅查找出点号这个字符,\
在正则表达式中表达转义的意思
正则表达式其他符号
边界字符
^ ,表示开始位置匹配,grep '^root' passwd
只匹配以root开始的行
$,表示结尾位置匹配,grep 'bash$' passwd
只匹配以bash结尾的行,在vim中$也表示结尾的意思
空行表示^$
元字符
\w:匹配任何字类字符,包括下划线([A-Za-z0-9_])
\W:匹配任何非字类字符,([^A-Za-z0-9_])
\b:代表单词的分割 grep '\bx\b' passwd
仅仅查找出单词x
重复字符表示
grep '[A-Z][a-z]' passwd
表示一个大写字符一个小写字符
grep 'm..c' passwd
匹配四个字符,开始是m结尾是c
grep '[0-9][0-9]' passwd
这个并不是仅仅匹配两个字符,因为正则表达式是贪婪模式,所以要加一些限定grep '\b[0-9][0-9]\b' passwd
重复
*:零次或多次匹配前面的字符或子表达式
+:一次或多次匹配前面的字符或子表达式grep 'se\+' passed
,这个+号使用的时候记得加上\
?:零次或一次匹配前面的字符或子表达式grep 'se\?' passed
,这个?号使用的时候记得加上\
如果只是搜索字符se需要加上()
,记得加上转义字符grep '\(se\)\+' passwd
重复特定次数{n,m}
*:{0,}
+:{1,}
?:{0,1}
grep '[0-9]\{2,3\}' passwd
正则表达式字符组合
任意字符串的表示:.*
逻辑的表示|
grep 'bin/\(false\|ture\)' passwd
匹配bin/false或者bin/ture记得加上转义字符
awk 命令
统计docker镜像大小,将docker images最后一列取出来,然后将以GB结尾的提取出来,再提取出数字,然后求和。
docker images | awk '{print $NF}' | grep -P '[0-9.]+GB$' -o | grep -P '[0-9.]+' -o | awk 'BEGIN{sum=0}{sum+=$1}END{print sum}'
vim命令
vim中有三个模式,分别是按下Eas键的一般模式
、按下i或者A之后的编辑模式
、以及按下:或者?后的末行指令模式
。编辑模式不能直接转到末行指令模式,必须要通过Eas进入一般模型再转换。下面记录一下常用指令,供以后查阅。
模式 | 指令 | 作用 |
---|---|---|
一般 | i | 在光标前插入insert |
A | 在光标后追加append | |
h | 向左移动光标,h在键盘左边 | |
l | 向右移动光标,l在键盘右边 | |
j | 向下移动光标,j的形状像向下的箭头 | |
k | 向上移动光标 | |
x | 剪切一个字母 | |
:q | 退出不保存 | |
:wq | 保存退出 | |
0 | 移动光标到当前行首 | |
$ | 移动光标到当前行尾 | |
dw | 删除一个word直到下一个单词 delete word | |
d$ | 从当前光标删除到行尾 | |
de | 从当前光标删除到当前单词末尾 | |
d是operator,w、$、e是motion | 如果直接操作motion,w就是移动单词、$移动到末尾、e移动到单词末尾,w,e前面可以加数字,2w就是移动两个word,dw、de中间也可以加数字,就是删除几个word | |
dd | 删除当前行,2dd就是删除下面两行 | |
u | 撤销操作 | |
U | 撤销当前行的所有操作,回到原始状态 | |
Ctrl + R | 将撤销给撤销了 | |
p | 粘贴前面删除的东西 | |
rx | 字符替换,先移动光标到需要喜欢的字符上面,按r,然后输入想要换成的字符即可 | |
ce | 修改word到末尾 change | |
c$ | 和d$类似,修改到末尾 | |
Ctrl+f | 向后翻一页,forward, Ctrl+b前翻一页back | |
Ctrl+G | 显示光标所在文档的位置,以及文件的名称 | |
gg | 回到文档起始位置 | |
G | 回到文档末尾 | |
20G或者20gg | 回到文档地20行 | |
/error | 查找error,从光标处向下查找,n查找下一个,N查找上一个。如果想从当前光标向上查找?error | |
%,)、]、} | 跳转到匹配光标 | |
s/old/new/g | 全局继续查找替换,substitute,s/old/new当前行第一次出现替换 | |
0,$s/old/new | 全局替换,0表示第一个,$表示最后一行 | |
s/old/new/gc | 进行交互替换 | |
:!ls -la | 执行外部的命令 | |
v | 进入选择模式 | |
:r !ls | 读取外部输入 | |
o | 在光标当前行下面插入新的一行 open a line | |
O | 在光标当前行上面插入新的一行 | |
R | 替换模式,直接在要替换的word上面输入R然后输入其他词 | |
y | 复制 | |
p | 粘贴 |
参考资料
Linux中创建及管理LVM逻辑卷
Linux系统命令及Shell脚本实践指南
LVM逻辑卷管理器
实例妙解Sed和Awk的秘密