Linux学习之旅5——网络和数据传输
一.文件的压缩
-
什么是打包
- 将多个文件归为一个文件,这个文件通常称为"archive",即归档
-
什么是压缩
- 将大文件通过特定算法变成小文件
-
tar 命令:归档文件与解除归档
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15tar -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)的关系
二.远程连接终端与对称加密
-
协议
- 两台机器在互联网上通信时,要遵循相同的协议(例如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
5ssh-keygen
ssh-copy-id user@host
#随后重启远程服务器的ssh服务即可
sudo service ssh restart
四.文件传输
-
wget 命令:未连接服务器时下载文件
1
2
3
4wget [参数] [地址]
#继续一个中断的下载 -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
4host 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
3iptables -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
下篇文章推荐:Linux学习之旅6——Vim编辑器与Shell脚本编程基础