一.文件的压缩

  • 什么是打包

    • 将多个文件归为一个文件,这个文件通常称为"archive",即归档
  • 什么是压缩

    • 将大文件通过特定算法变成小文件
  • tar 命令:归档文件与解除归档

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    tar -cvf sorting.tar sorting/
    tar -cvf file.tar file1.txt file2.txt file3.txt

    -c(creating)创建tar
    -v(verbose)显示操作细节
    -f(file)指定归档文件

    #显示归档里的内容 -tf
    tar -tf sorting.tar

    #追加文件到归档 -rvf
    tar -rvf sorting.tar file_extra.txt

    #解开归档 -xvf
    tar -xvf sorting.tar
  • gzip 与 bzip2 命令:压缩归档

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #常用gzip,压缩后文件后缀为.gz
    gzip sorting.tar

    #解压gzip文件
    gunzip sorting.tar.gz

    #不常用bzip2,压缩更彻底但也耗时间,压缩后文件后缀名为.bz2
    bzip2 sorting.tar

    #解压bzip2文件(解压后压缩文件自动删除)-bunzip2
    bunzip2 sorting.tar.bz2

    #一气呵成,直接归档并压缩为gzip文件
    tar -zcvf sorting.tar.gz sorting

    #一气呵成,直接将gzip解压到普通文件
    tar -zxvf sorting.tar.gz

    #一气呵成,直接归档并压缩为bzip2文件
    tar -jcvf sorting.tar.bz2 sorting

    #一气呵成,直接将bunzip2解压到普通文件
    tar -jxvf sorting.tar.bz2
  • 用zcat / zmore / zless 显示gzip压缩文件内容

  • 用bzcat / bzmore / bzless 显示bzip2压缩文件的内容

  • zip / unzip 与 rar / unrar 命令:压缩/解压 zip与rar文件(不用归档)

    1
    2
    3
    4
    5
    #使用-l直接查看zip压缩文件内容
    unzip -l test.zip

    #压缩示例,文件夹压缩一定要加-r
    zip -r sorting.zip sorting
  • 下面一张图解释归档与压缩(gzip和bzip2)的关系

    Linux-归档与压缩的关系

二.远程连接终端与对称加密

  • 协议

    • 两台机器在互联网上通信时,要遵循相同的协议(例如Https等)
  • Telnet

    • 上世纪80年代创立的协议,功能为在机器间传输简单信息
    • 其传输方式为明文传输,不安全
  • 使用SSH(Secure SHell)进行信息交换

  • 对称加密

    • 发送端使用密钥加密信息,接收端使用相同的密钥解密
    • 缺陷:必须谨慎传递密钥,若密钥泄露其他人也能解密

三.非对称加密与使用SSH建立安全连接

  • 非对称加密

    • 使用“公钥”(Public Key),用于加密
    • 使用“私钥”(Private Key),用于解密
  • SSH:用非对称加密方式来加密对称加密密钥(目的:安全传递对称加密密钥)

  • 第一步:服务器将非对称加密的公钥以明文方式传送给客户机

  • 第二步:客户机用这个公钥加密自己的对称加密密钥

  • 第三步:发送给服务器,服务器使用私钥解密

  • 这样客户机与服务器就可以用对称加密来相互传输信息(效率比非对称加密高很多)

  • 将电脑配置为 SSH服务器

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #安装OpenSSH
    #客户端:openssh-client
    #服务端:openssh-server

    #安装服务端openssh
    sudo apt install openssh-server

    #Ubuntu启动ssh服务
    sudo service ssh start

    #Ubuntu更新ssh配置
    sudo service ssh reload

    #Ubuntu停止ssh服务
    sudo service ssh stop

    #Debian下启动ssh服务
    sudo /etc/init.d/ssh start

    #Debian下更新ssh配置
    sudo /etc/init.d/ssh reload

    #Debian下停止ssh服务
    sudo /etc/init.d/ssh stop
  • 从客户机上用SSH协议登录远程服务器

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #假设用户user登录主机名为host的服务器
    ssh user@host

    #主机名可用IP地址替换,例如:
    ssh root@192.168.1.105

    #若本地用户名与远程用户名一致,登录时可忽略用户名
    ssh host

    #SSH默认端口为22,若要修改登录请求端口(-p)为80:
    ssh -p 80 user@host

    #注意:登录后公钥会保存在客户机 $HOME/.ssh/known_hosts中
    #Windows端登录可以使用PuTTY这个软件
  • 什么是公钥登录?

    • 用户将自己的公钥存储在服务器上,登录时服务器用公钥加密随机数据给客户机,客户机解密后信息返回给服务器,服务器验证正确后可建立安全连接。
  • 生成公钥并上传到服务器

    1
    2
    3
    4
    5
    ssh-keygen
    ssh-copy-id user@host

    #随后重启远程服务器的ssh服务即可
    sudo service ssh restart

四.文件传输

  • wget 命令:未连接服务器时下载文件

    1
    2
    3
    4
    wget [参数] [地址]

    #继续一个中断的下载 -c(continue)
    wget -c ...
  • scp 命令:安全拷贝(Secure CoPy)

    1
    2
    3
    4
    5
    6
    7
    8
    #从自己电脑拷贝一份文件到领一台电脑举例
    scp file.txt ming@192.168.1.105:/home/ming/

    #从领一台电脑拷贝一份文件到我的电脑举例
    scp ming@192.168.1.105:/home/ming/file.txt file_changed_name.txt

    #指定默认端口 (Port),"."表示当前目录
    scp -P 80 ming@192.168.1.105:/home/ming/file.txt .
  • FTP (File Transfer Protocol)与 sftp 命令:传输文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #FTP连接示例(参数-p为passive模式)
    ftp -p ftp.fr.debian.org

    #下载文件(以README文件为例)
    get README

    #若要在自己电脑上运行命令,在命令前加"!"即可,例如:
    !ls -lh

    #退出服务器(Ctrl+D / bye / exit / quit)

    #SFTP连接示例(-oPort指定端口),例如:
    sftp -oPort 80 ming@192.168.1.105
  • rsync 命令:同步备份(增量备份)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #-a:保留文件所有信息(archive)
    #-r:递归备份(recursive)
    #-v:冗余模式,输出详细操作信息(verbose)

    #将Files文件夹下所有东西备份到backups文件夹中(同一台电脑)
    rsync -arv Files/ backups/

    #同时同步删除操作(--delete)
    rsync -arv --delete Files/ backups/

    #备份到服务器或其他电脑
    rsync -arv --delete Files/ ming@192.168.1.105:backups/

    #提示:可以配置rsync,简化备份操作

五.IP地址与网络分析

  • host 与 whois 命令:告诉我这个用户是谁

    1
    2
    3
    4
    host baidu.com

    #若没有whois命令需要先安装
    whois baidu.com
  • 自定义解析

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #以root身份打开/etc/hosts 文件
    sudo nano /etc/hosts

    #此时可以看到IP与主机名对应关系,可以自己添加或修改:
    39.156.69.79 baidu.com

    #这时候就算百度的dns解析服务器故障(几率为0.01),输入baidu.com照样可以访问

    #还可以配置本地主机
    192.168.1.105 zhang-laptop
    #配置完后这样访问,不用输入IP地址(方便)
    ssh ming@zhang-laptop
  • ifconfig 与 netstat 命令:控制和分析网络流量

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #ifconfig(Network Interface Configuration)安装
    sudo apt install net-tools

    #查询信息
    #eth0:对应有线连接(网卡),还有eth1...
    #lo:本地回环(Local Loopback),对应虚拟网卡
    #wlan0:对应无线局域网,还有wlan1...
    #RX packets:接收包的数目(Receive)
    #TX packets:发送包的数目(transmit)

    #新版Ubuntu中,enp0s3是什么呢?
    #en:代表以太网卡
    #p0s3:PCI接口物理位置为(0,3),横坐标代表bus(总线),纵坐标代表slot(槽,接口)

    #关闭enp0s3这个有线接口
    sudo ifconfig enp0s3 down

    #开启enp0s3这个有线接口
    sudo ifconfig enp0s3 up

    #简单配置IP(ip地址/子网掩码/广播地址)
    ifconfig enp0s3 192.168.1.105 netmask 255.255.255.0 broadcast 192.168.120.255

六.统计网络、安全防火墙

  • netstat 命令:网络统计(network statistics)

    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
    #网络接口的统计信息 -i
    netstat -i

    #RX-OK:在此接口接收包正确的包数
    #RX-ERR:在此接口接收包错误的包数
    #RX-DRP:在此接口接收包丢弃的包数
    #RX-OVR:在此接口接收包无法接收的包数

    #列出所有开启的连接 -uta
    netstat -uta

    #-u:显示UDP连接
    #-t:显示TCP连接
    #-a:无论连接状态如何,都显示

    #state一列参数如下
    #ESTABLISHED:与远程电脑建立了连接
    #TIME_WAIT:连接正在等待网络上封包的处理
    #CLOSE_WAIT:远程服务器终止连接
    #CLOSED:连接没有被使用,已关闭
    #CLOSING:连接正在关闭,发送最后数据
    #LISTEN:监听可能进入的连接

    #让端口信息以数字显示 -n,只显示LISTEN状态 -lt
    netstat -ltn

    #列出总结信息
    netstat -s
  • iptables / nftables :防火墙(需要root权限)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #CentOS下安装
    sudo yum install iptables
    #Debian/Ubuntu下安装
    sudo apt install iptables

    #显示所有规则 -L
    iptables -L

    #Chain INPUT:对应控制“进入”的网络传输规则
    #Chain FORWARD:对应控制“转发”的网络传输规则
    #Chain OUTPUT:对应控制“输出”的网络传输规则

    清除所有iptables规则

    1
    2
    3
    iptables -F
    iptables -X
    iptables -Z

    开放指定端口

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #允许本地回环
    iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

    #允许已建立的或相关连接的通行
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    #允许所有本机向外的访问
    iptables -A OUTPUT -j ACCEPT

    #允许访问某个端口(80为例)
    iptables -A INPUT -p tcp --dport 80 -j ACCEPT

    #禁止其他未添加规则的访问
    iptables -A INPUT -p tcp -j DROP
    iptables -A INPUT -j REJECT
    iptables -A FORWARD -j REJECT

    屏蔽IP

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #单个IP
    iptables -I INPUT -s 192.168.1.105 -j DROP

    #整个段(假设192.0.0.1到192.255.255.254)
    iptables -I INPUT -s 192.0.0.0/8 -j DROP

    #整个段(假设192.168.0.1到192.168.255.254)
    iptables -I INPUT -s 192.168.0.0/16 -j DROP

    #整个段(假设192.168.1.1到192.168.1.254)
    iptables -I INPUT -s 192.168.1.0/24 -j DROP

    删除某个iptables规则

    1
    2
    3
    4
    5
    #将所有规则按序号标记
    iptables -L -n --line-numbers

    #删除INPUT里序号为5的规则
    iptables -D INPUT 5

    开机启动及规则保存

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #CentOS下开机启动
    chkconfig --level 345 iptables on

    #CentOS下保存规则
    service iptables save

    #Ubuntu下要配置文件
    sudo nano /etc/network/if-pre-up.d/iptables
    #添加执行权限
    chmod +x /etc/network/if-pre-up.d/iptables
  • 图形界面的UFW

    1
    2
    3
    4
    #安装
    sudo apt install gufw
    #运行
    sudo gufw

    GUFW界面


下篇文章推荐:Linux学习之旅6——Vim编辑器与Shell脚本编程基础