美文网首页
Linux基础命令学习

Linux基础命令学习

作者: 小白小白啦 | 来源:发表于2019-12-27 14:16 被阅读0次

    再次记录学习到的命令,以防后面使用忘记又去百度。

    防火墙相关操作

    防火墙(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


    pv、vg、lv
    operate

    正则表达式学习

    将/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的秘密

    相关文章

      网友评论

          本文标题:Linux基础命令学习

          本文链接:https://www.haomeiwen.com/subject/mlgroctx.html