运维汪

运维汪 查看完整档案

深圳编辑吉首大学  |  计算机科学与技术 编辑  |  填写所在公司/组织 lile.com 编辑
编辑

在平凡中坚持前行,总有一天会遇见不一样的自己。

小小的运维工程师一枚;在这拥有自己的一块小土地,开荒、播种、施肥、打造一个美丽的花园;

公众号:运维汪

个人动态

运维汪 发布了文章 · 2月7日

Linux下inotify + rsync实现文件实时同步

一、什么是rsync

rsync:“remote sync”是一个本地远程同步文件的工具。在第一次连通完成时,会把整份文件传输一次,下一次就只传送两个文件之间不同的部分。

二、rsync同步的两种方式

1)直接使用rsync命令,使用SSH协议,默认为22端口
2)rsync daemon形式,使用rsync协议,默认为873端口

三、同步命令

三种方法的同步命令之间的区别就是“:”的个数,本地同步无“:”,命令行同步一个“:”,daemon形式的同步两个”:“。

1)本地文件同步

rsync [OPTION...] SRC... [DEST]

2)本地与远程同步

pull方法:

rsync [OPTION...] [USER@]HOST:SRC... [DEST]

push方法
 
rsync [OPTION...] SRC... [USER@]HOST:DEST

3)使用rsync进程方式
pull方法
 
rsync [OPTION...] [USER@]HOST::SRC... [DEST]rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]

push方法: 

rsync [OPTION...] SRC... [USER@]HOST::DESTrsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST)

四、详细描述

remote sync 是一个数据镜像备份工具,采用rsync算法,可以将一个客户机和远程文件服务器之间的文件进行同步,也可以在本地系统中将数据从一个分区备份到另一个分区。如果rsync在备份过程中出现了数据传输中断,恢复后可以继续传输不一致的部分。rsync可以执行完整备份与增量备份。

特点:
1):可以镜像保存整个目录树和文件系统2):很容易做到保持原来文件的权限、时间、软硬连接
3):无需特殊权限即可安装
4):可以增量同步数据,文件传输效率高
5):可以使用rcp、ssh等方式来传输文件,当然也可以直接通过socket连接
6):支持匿名传输

五、参数详解
1)常用参数

-t :将源文件的modify time也同步到目标机器。它会在同步前先对比两边文件的时间戳和文件大小,如果一致,则认为两边文件一样,对次文件就不进行采取更新动作。如果目标端的文件的时间戳,大小和源端完全一致,但恰巧内容不一样时,rsync时发现不了的。解决这个的办法是使用I参数
-I:(大写i)挨个文件发起数据同步-v:获取日志信息
-z:先压缩再传输
-r:递归,级联的进行同步
-a:除了递归同步外,还可以同步元信息(权限、修改时间等)-n:模拟命令执行的结果,并不是真正的执行命令-l(小写L):同步链接文件时
-p:保持源文件的权限 perserve permissions
-H:同步硬链接
-g -o:保持所属组和属主
-delete:删除只存在与目标目录,不存在于源目录的文件
-exclude:排除某个文件
-exclude-from:排除写在某个文件里的所有文件名
-progress:显示出传输进度信息
-partial:断点续传

2、所有参数

PDF版本可下载:
 

链接: https://pan.baidu.com/s/1Gd2HUbC_ZIL8C4N0ntpAZw  
密码: 5dsb
五、常用命令
1)将源目录复制到目的端

rsync -av source_path  destination_pathrsync -av zhongjiang.sh apt@10.0.0.128:/home/apt/

-a:表示要进行归档
-v:表示在stdout上打印出细节信息或进度

2)压缩传输

通过网络进行传输时,压缩数据能够明显改善传输效率。用rsync -z指定在网络传输时压缩数据
 
rsync -avz source destination

3)将目录下的内容同步到另一个目录

 
rsync -av /shell/ apt@10.0.0.128:/home/apt/lop

4)将目录本身同步到另一个目录

 

rsync -av /shell/lll apt@10.0.0.128:/home/apt/lop

5)归档的过程中排除部分文件

--exclude PATTERN
 
rsync -avz /shell/lll apt@10.0.0.128:/home/apt/lllop --exclude "*.txt"

6)排除文件名在文件里的文件

使用rsync进行归档的过程中排除部分文件,把不需要的文件名写在file里面--exclude-from FILEPATH

rsync -avz /shell/lll apt@10.0.0.128:/home/apt/lllop --exclude-from /shell/file
 

7)在更新rsync备份时,删除不存在的文件

 
rsync -avz /shell/lll apt@10.0.0.128:/home/apt/lllop --delete

六、daemon模式
1:daemon模式配置文件

rsync以daemon方式运行的时候使用配置文件为rsyncd.conf

2:服务端与客户端

使用daemon模式的时候,一定要分清楚服务端和客户端,与平时理解的服务端与客户端不太一样,被同步的一端为服务端,要把文件同步到另一端的源端为客户端。
     
image

3:文件格式

1) rsyncd.conf配置文件由模块和参数组成,一个模块以写在方括号里的模块名称开始,直到下一个模块,模块里包含由“name = value”格式的参数。
2)文件是基于行的,每一行代表一个模块名或者参数

4:启动方式

daemon模式运行必须启动的时候加参数 --daemon 

rsync --daemon

5:模块配置

1)服务端(目标端,被同步的一端)的配置文件

# /etc/rsyncd: configuration file for rsync daemon mode

# See rsyncd.conf man page for more options.

# configuration example:

# 全局配置
uid = root
gid = root
use chroot = no
max connections = 2
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
lock file = /var/run/rsyncd.lock

# 模块配置
[test]
comment = "同步nginx的配置文件"
path = /captain/shell
read only = no
auth users = rsync
secrets file = /etc/rsyncd.secrets
list = no

全局配置
1)uid、gid:当使用非root账号时,那么一定要确保服务的的文件夹是否有该非root账号写入的权限
2)use chroot = no :是否可以切换到root目录,当chroot为yes的时候,客户端连接模块的时候,先chroot到模块参数指定的目录下,必须使用root权限,端口号必须是1024以内,且不能备份path路径外的链接文件
3)max connections = 2 :表示同时最大的连接数,也就是同时只能有两个客户端对自己进行连接

并且此选项必须与lock file = /var/run/rsyncd.lock 共同使用,若不指定,默认为/var/run/rsyncd.lock

模块部分

每一个模块部分都是一个文件夹或者文件的rsync同步

1)[modulname]:模块的名称

2)path = /captain/shell:表示的是当客户端把数据同步过来将保存的路径

3)read only = no :如果为只读,那么将不能进行写同步,所以必须关闭

4)auth users = rsync :用来进行同步的用户,不需要系统用户中有,虚拟的就行

5)secrets file = /etc/rsyncd.secrets :表示的是账号密码文件,此文件可随意指定,文件里必须以username:password的格式
 
rsync:123456此文件权限必须为600,否则会报错

6)list = no :表示的是当服务端拒绝客户端的请求时,是否是直接显示权限拒绝,还是现实模块不存在,一般与hosts allow 和hosts deny一起使用,当一个被服务端拒绝的请求进来时,如果设置为 list = no,那么直接返回模块不存在

2、服务端账号密码文件

vim /etc/rsyncd.secrets

rsync:123456
3、客户端配置文件

客户端(源端,需将此台机器上的文件同步出去)的配置文件只需做简单的修改,设置日志文件和pid文件路径,然后启动rsync即可

pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
4、客户端密码文件

vim /etc/rsyncd.passwd

123456
5、启动dameon

分别在服务端和客户端启动rsync

rsync --daemon
6、同步命令 
rsync -avz --password-file=/etc/rsyncd.passwd /data/shell/ rsync@192.168.1.103::test

-avz:表示同步过程中输出信息显示的格式

--password-file=/etc/rsyncd.passwd :表示客户端将拿此密码去服务端进行认证,所以这个文件里的秘密为上面服务的所设置的密码,只需passwd

/data/shell/ :表示源目录,将要把此目录下的所有文件同步到远端。注:这里有无/的区别:有/的时候表示的是/data/shell/目录下的东西同步过去,而无/的时候表示的是把shell目录同步过去

七、监控目录变化
1、查看内核是否支持inotify机制 

cat /boot/config-$(uname -r)|grep CONFIG_INOTIFY_USER=y

2、安装

 
yum install inotify-tools

3、监控某个目录的变化

 
inotifywait -rme modify,attrib,move,close_write,create,delete,delete_self /software/mminotifywait -mqr --format '%Xe %w%f' -e modify,create,delete,attrib /data/

4、监控除了某个目录

 
inotifywait --exclude '^/software/mm/ll' -rme modify,move,close_write,create,delete,delete_self /software/mm

5:统计文件目录下的变化次数

inotifywatch -v -e access -e modify -t 120  -r /software/mm/

6、监控脚本
#!/bin/bash

#目标IP
ip1=10.0.0.75
rsync_passwd_file=/etc/rsync.secrets

/usr/local/bin/inotifywait -mrq --format '%Xe %w%f' -e create,move,attrib,open,close,modify /test | while read files
do
   echo $files 
   EVENT=`echo $files|awk -F" " '{print $1}'`
   echo $EVENT
   File=`echo $files|awk -F" " '{print $2}'`
   echo $File
   if [[ $EVENT = "CREATE" ]] || [[ $EVENT = "MODIFY" ]] || [[  $EVENT = "MOVED_TO" ]]  ;then
        echo "Create or Modify or Moved_to"
        rsync -avzcr --password-file=$rsync_passwd_file $(dirname $File) root@$ip1::mydata
   fi

   if [[ $EVENT = "DELETE" ]] || [[ $EVENT = "MOVED_FROM" ]] ;then
        echo "Delete or Moved_From"
        rsync -avzcr --delete --password-file=$rsync_passwd_file $(dirname $File) root@$ip1::mydata
   fi

   if [[ $EVENT = "ATTRIB" ]] ;then
        echo "Attribe"

        if [[ ! -d $File ]] ;then
            rsync -avzcr --password-file=$rsync_passwd_file $(dirname $File) root@$ip1::mydata
        fi
   fi
done
八、作者简介
李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷。喜欢钻研底层技术,认为底层基础才是王道。一切新技术都离不开操作系统(CPU、内存、磁盘)、网络等。坚持输入输出,记录自己学习的点滴,在平凡中坚持前行,总有一天会遇见不一样的自己。公众号:运维汪(ID:Leeeee_Li)。
查看原文

赞 0 收藏 0 评论 0

运维汪 发布了文章 · 1月28日

抓包一张tcpdump小抄就够了

一、tcpdump Cheat Sheet介绍

tcpdump是一款数据包分析工具,我们抓包的时候经常会用到,但是他的可选项众多,光凭我们的记忆是很难的,况且我们不应该去记工具型的东西。大脑是用来思考的,不应该用来存储。CPU不应该用来做存储。因此,有了这样一张tcpdump Cheat Sheet(tcpdump小抄)的出现,当然这张图不是出自我,在网上找到的好东西,必须得分享出来,原文可点击这里,此文是我自己根据他的文章总结出来的。

image

二、包含的内容
  1. 安装命令
  2. 数据包捕获选项
  3. 逻辑操作符
  4. 显示/输出选项
  5. 使用的协议
  6. 用于过滤捕获协议的常用命令
三、资源下载

文中的图片以及PDF都可下载,无需关注,无需密码。

链接: https://pan.baidu.com/s/1Gd2H... 密码: 5dsb
四、常用命令

1、安装tcpdump

yum install tcpdump

2、列出本机所有的网卡接口

tcpdump -D

3、捕获特定网口的数据包

tcpdump -i eth0

4、捕获具体数量的数据包

tcpdump -c 5 -i eth0

5、捕获的数据包保存到指定的文件

tcpdump -w 0001.pcap -i eth0

6、捕获的数据包显示IP而不是域名

tcpdump -n -i eth0

7、捕获指定协议的数据包

tcpdump -i eth0 tcp

8、捕获特定端口的数据包

tcpdump -i eth0 port 22

9、捕获从指定IP过来的数据包

tcpdump -i eth0 src 192.168.0.2

10、捕获去往目的IP数据包

tcpdump -i eth0 dst 50.116.66.139

10、捕获HTTP请求的URL

tcpdump -s 0 -v -n -l | egrep -i "POST /|GET /|Host:"

11、捕获HTTP的POST请求的密码

`tcpdump -s 0 -A -n -l | egrep -i "POST /|pwd=|passwd=|password=|Host:"
`

12、以ASCII码的格式打印

tcpdump -A -i eth0

13、以ASCII码和十六进制打印

tcpdump -XX -i eth0

14、读取捕获的数据包文件

tcpdump -r 0001.pcap

五、作者简介
李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷。喜欢钻研底层技术,认为底层基础才是王道。一切新技术都离不开操作系统(CPU、内存、磁盘)、网络等。坚持输入输出,记录自己学习的点滴,在平凡中坚持前行,总有一天会遇见不一样的自己。公众号:运维汪(ID:Leeeee_Li)。
查看原文

赞 0 收藏 0 评论 0

运维汪 发布了文章 · 1月12日

Linux下最常用的10个文件压缩工具

作者简介

李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷。喜欢钻研底层技术,认为底层基础才是王道。一切新技术都离不开操作系统(CPU、内存、磁盘)、网络等。坚持输入输出,记录自己学习的点滴,在平凡中坚持前行,总有一天会遇见不一样的自己。公众号:运维汪(ID:Leeeee_Li)。

一、前言

作为运维人员,经常会遇到“小李啊,帮我取一下今天的日志”,因此在Linux服务器上压缩包、解压包是经常的事情,但是就我个人而言,经常会遇到很多不一样的压缩解压工具,最常用的是tar。虽然经常用,但是还是很多参数记不住,当然不用去记住每一个参数,--help就行。在十万火急的情况下,一个解压还要去google一下,好像也不合理,因此记住常用的几个还是有必要的,再同样的技术水平情况下,那就只能比速度了。

二、Linux下最常用的压缩工具

1、tar

1)压缩

tar -zcvf too.tar.gz too

2)解压

#.tar.gz tar -zxvf  too.tar.gz
 
#.tar.gz2 tar -jxvf   too.tar.gz2

3)排除某个目录打包

把too目录打包成too.tar.gz,除logs目录;注这里的too/logs后面不能加/,如果加的话还是会打包进去。

tar -czvf too.tar.gz --exclude=too/logs too

4)只打包某个目录,而不是全部打包进去

加-C参数, 这样的话可以只打包api3.0 ,而不会从/usr开始一个一个目录都打包进去

tar -zcf api3.0_`date +%Y%m%d%H%M%S`.tar.gz -C /usr/local/tomcat/webapps api3.0

2、gzip

gzip工具是Linux中最流行、最快的文件压缩工具,Gzip工具保留原始文件名称压缩文件的扩展名.gz和时间戳。

1)打包

gzip filename

2)解压

gzip -d filename # 打包的文件会被删除

3、bzip2

Bzip2实用程序执行更快的gzip,它压缩文件和文件夹更紧凑。压缩文件时需要更多的内存,为了减少内存消耗,在选项中通过-s标志。

1)压缩

bzip2 examplefile or bzip2 -s examplefile

2)解压

bzip2 -d examplefile.bz2 or bunzip2 examplefile.bz2

3)详细说明

bzip2 -v examplefile

4、lzma

Lzma是一种压缩工具,与zip或tar类似,但与bzip相比,它的执行速度更快,虽然lzma是一个强大的工具,但它在Linux用户中并不流行。

1)压缩

lzma -c --stdout examplefile> examplefile.lzma

2)解压

lzma -d --stdout examplefile.lzma >examplefile

5、xz

XZ是lzma实用程序的继承者,它只能压缩单个文件,但不能在一个命令中压缩多个文件,它将自动为压缩文件添加.xz扩展名。

1)压缩

xz examplefile

2)解压

xz -d examplefile

6、pax

Pax它的执行速度很快,而且它不仅仅是一个压缩器,它可以真正的归档它可以远程复制文件,在Ubuntu/Mint Linux中,默认情况下Pax没有安装。

1)压缩

pax -wf examplefile.tar examplefile
pax -wf examplefile.tar.gz examplefile 

2)解压

pax -r <examplefile.tar

3)查看压缩包文件清单

pax -f examplefile.tar

7、7zip

7Zip文件压缩器是一个开源工具,它最初是为微软Windows开发的,它支持多种文件压缩格式和高文件压缩,它可以用一个命令压缩多个文件。

1)安装7zip

wget https://www.mirrorservice.org/sites/dl.fedoraproject.org/pub/epel/7/x86\_64/Packages/p/p7zip-16.02-10.el7.x86\_64.rpm
wget https://www.mirrorservice.org/sites/dl.fedoraproject.org/pub/epel/7/x86\_64/Packages/p/p7zip-plugins-16.02-10.el7.x86\_64.rpm
 
sudo rpm -U --quiet p7zip-16.02-10.el7.x86_64.rpm 
sudo rpm -U --quiet p7zip-plugins-16.02-10.el7.x86_64.rpm 

2)压缩

7z  a examplefile.7z examplefile

3)解压

7z  a examplefile.7z examplefile

8、shar

Shar是一个命令行工具,可以用来压缩测试文件,Shar可以定义为“shell archive”。一个简单而快速的文件存档实用程序对于获取shell脚本的存档非常有用。

1)安装shar工具

yum -y install sharutils

2)压缩

shar examplefile > examplefile.shar

3)解压

unshar examplefile.shar

9、cpio

可以定义为复制输入和输出,它在输入中逐行读取文件名列表,在输出中读取归档文件。这是一个内置的经典命令。

1)压缩

ls | cpio -ov >/home/username/backup.cpio

2)解压

cpio -idv <backup.cpio

10、ar

rar的前身,仍然在Debian及其衍生物中使用,它是一个简单的归档工具,但并不是很流行。

1)压缩

ar cvsr examplefile.a examplefile

2)解压

ar -xv examplefile.a

11、iso

ISO制作iso镜像

dd if=/media/dvd of=/home/username/filename.iso
查看原文

赞 0 收藏 0 评论 0

运维汪 发布了文章 · 1月11日

Linux常用命令 | grep

作者简介

李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷。喜欢钻研底层技术,认为底层基础才是王道。一切新技术都离不开操作系统(CPU、内存、磁盘)、网络等。坚持输入输出,记录自己学习的点滴,在平凡中坚持前行,总有一天会遇见不一样的自己。公众号:运维汪(ID:Leeeee_Li)。

一、前言

自己平时比较喜欢记笔记,工作四五年,笔记上千篇。最近离职了,加上职场瓶颈,准备好好复盘和整理一下相关的笔记、梳理一下知识点,可能后面有一系列的博文输出,从基础到进阶。

二、什么是Grep

Global Regular Expression Print 全局正则表达式

Grep是一个Linux / Unix命令行工具,用于在指定的文件中搜索字符串。文本搜索模式被称为正则表达式。当它找到匹配项时,它将输出带有结果的行。在搜索大型日志文件时,grep命令非常方便。

语法:

grep [options] pattern [files]

三、常用参数

-c: 只输出匹配行的数目

-h: 打印出匹配的行,但是不显示其文件名

-i: 不区分大小写

-l: 查询多文件的时候只输出包含匹配字符的文件名

-n: 打印匹配行以及行号

-v: 反向匹配,即显示不匹配的行

-w: 匹配整个单词,而不是整个字符串

-b: 显示匹配的位置

-o: 只显示匹配的字串

-s: 不显示错误信息

-e exp:匹配多个

-E:使用正则匹配

四、实例

1:匹配项标记颜色

echo “This is a word \n heihei” |grep word --color=auto

2:把/etc/passwd包含root的取出来

grep root /etc/passwd or cat /etc/passwd |grep root

3:把/etc/passwd不包含root的取出来

grep -v root /etc/passwd or cat /etc/passwd |grep -v root

4:demsg输出的信息中找出含eth的行,并且输出行号,有颜色

dmesg | grep eth -n --color=auto

5:demsg输出的信息找出eth的行,并且找出含eth的前两行和后三行

dmesg |grep eth -n -A3 -B2 --color=auto

grep退出的状态

echo $?

# 0:表示成功 
# 1:表示没有匹配到 
# 2:表示参数中的文件不存在

六、应用场景

1:匹配行的上下文

ifconfig | grep -C 3 "Link encap"

-A n  后n行,A记忆为(After)

-B n  前n行,B记忆为(Before)

-C n  前n行,后n行,C记忆为(Center)

2:用-c统计数目

grep -c "baidu.com" file.txt

3:根据文件内容查找目录

grep "declare"    #当前目录下查找 
grep -r "declare" #当前目录以及子目录下查找 
grep -r -l "declare"  #查找只显示文件名称,不具体显示的行 
grep -R --exclude-dir="filename" baidu.com #除开某一个目录不匹配

4、过滤掉注释行

grep ^[^#] filename

5、过滤掉有空格的注释行

grep "^\s*[^# \t].*$" filename

6、在file2中找出包含file1字符串的字符串f

file1:
ddf
ddc

file2: 
shinjldin 
adcddf 
ddf

grep -f file1 file2


#得到的结果:
#adcddf
#ddf

7、ps aux | grep init 与ps aux |grep [i]nit的区别

ps aux | grep init:

ps aux |grep [i]nit:

第一个init的时候她会把grep init也弄到进程里,所有可以匹配到init

第二个[i]nit的时候会把grep [i]nit 弄到进程里,但是[i]nit只能匹配init和nit,所有就只有一个

echo grep init |grep init 
echo grep init |grep [i]nit 
echo grep [i]nit |grep init 
echo grep [i]nit |grep [i]nit

七、grep -E 与 grep 的区别

1、使用方法

grep -E “^[a-zA-Z0-9]” filename 
grep "^[a-zA-Z0-9]" filename  #如果不加E的话,会匹配出错

2、实例

下面两个写法都能达到同一个目的,使用-E与不使用-E的写法

cat a.txt |grep -oE 'id=[0-9]{9,10}' 
cat a.txt |grep -o 'id=[0-9]\{9,10\}'
查看原文

赞 0 收藏 0 评论 0

运维汪 发布了文章 · 1月8日

Linux常用命令 | find

作者简介

李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷。喜欢钻研底层技术,认为底层基础才是王道。一切新技术都离不开操作系统(CPU、内存、磁盘)、网络等。坚持输入输出,记录自己学习的点滴,在平凡中坚持前行,总有一天会遇见不一样的自己。公众号:运维汪(ID:Leeeee_Li)。

一、前言

自己平时比较喜欢记笔记,工作四五年,笔记上千篇。最近离职了,加上职场瓶颈,准备好好复盘和整理一下相关的笔记、梳理一下知识点,可能后面有一系列的博文输出,从基础到进阶。

二、find命令

find命令是Linux系统管理员工具库中最强大的工具之一,可以使用find命令根据权限、类型、日期、所有权、大小等搜索文件和目录,它还可以与grep或sed等其他工具结合使用。

语法:

find [options] [path...] [expression]

三、实践

1、按文件名查找

find / -name access.log

2、通过扩展名查找文件

find . -name “*.txt” #在当前目录下查找所有txt后缀文件

3、按权限查找文件

find . -perm 755 -print  #查找当前目录下755权限的文件 
find . -perm -007 -print #查找所有用户都可以读、写、执行的文件

4、按所有者查找文件

find ~ -group lile -print    #查找~目录下所属者为lile的文件
find /home -group -print     #查找属主账户已经被删除的文件,查找在/etc/passwd里已经没有了的账户
find ~ -user lile -print     #查找~目录下所属者为lile的文件
find /home -nouser -print    #查找属主账户已经被删除的文件,查找在/etc/passwd里已经没有了的账户

5、按修改日期查找文件

find . -mtime -3 -print  #查找更改时间在3天之内的文件
find . -mtime -2 -print  #查找更改时间在2天之前的文件

6、按类型查找文件

find . -type d -print   #查找当前目录下的所有目录
find . ! -type d -print #查找当前目录下除了目录的其他所有类型文件

7、按大小查找文件

find . -size 100c -print 查找当前目录下文件长度为100字节的文件
find . -size +1000000c -print 查找当前目录下文件大于1M字节的文件
find . -size +10 -print 查找当前目录下超过10块的文件(1块=512字节)

8、排除某个目录

find /shell -path "/shell/tt" -prune -o -print                 #查找在/shell目录下除了tt目录的其他
find /shell -path "/shell/tt" -prune -o -name "*.txt" -print   #查找在/shell目录下除了tt目录的txt文件 

9、目录与文件查找顺序

find /shell -depth -print

#有dept:先处理目录下的子内容,再处理目录本身
#无dept:先处理目录本身,然后处理目录下的子内容

10、正则查找

find . -name "[A-Z]*" -print    #查找当前目录及子目录中查找文件名以大写字母开头的文件
find . |xargs grep "YZS"        #查找某个文件夹下面的哪些具体文件包含某一个字段
find . -regextype "posix-egrep"  -regex ".*\.(cc|h)" |xargs cat |grep -v ^$ |wc -l

11、查找并对结果做相关操作

find . -type l -exec ls -l {} \;                                            #找到为文件类型为软连接的文件
find . -type f -print | xargs file                                          #文件分类
find / -name "core*" -print | xargs echo "">/tmp/core.log                   #找到内存信息转储文件coredump,然后保存到/tmp/core.log下
find . -name "*.txt" -print0 | xargs -0 rm -rf                              #找到后删除,慎用
find / -path '/etc/ssl/certs' -prune -o -name *.pem | xargs -i cp {} ./pem  #找到后并拷贝
cat file.txt | xargs                                                        #将多行转换成单行
cat file.txt | xargs -n 3                                                   #指定每行的参数数量  每次执行需要x个参数
echo "splitXsplitXsplitXsplit" |xargs -d X                                  #用自己指定的分隔符进行分割
echo "splitXsplitXsplitXsplit" |xargs -d X -n 2                             #用自己指定的分隔符进行分割,并且指定每行输出的数量
cat args |xargs -I {} bash cecho.sh p {} 1                                  #从cat里读取数据,每读到一个就替换一次

12、匹配多个文件

find . \(  -name "*.txt" -o -name "*.pdf" \)

13、find排除某个目录

find / -path '/etc/ssl/certs' -prune -o -name *.pem #find 查找路径  -path '排除目录路径' -prune -o ....

四、find时间点问题

find与时间有关的选项有-atime(访问时间)、-ctime(创建时间)、-mtime(属性修改时间),参数为后面跟的时间n;

find . -atime n     这里的n表示n天之前的“一天之内”被访问过的文件

find . -atime +n   列出在n天之前(不包含n天本身)被访问过的文件

find . -atime -n    列出在n天之内(包含n天本身)被访问过的文件

实例:

假如现在的时间点为20171209的15:00整,那么下面几个查询表示的具体时间范围

1:创建文件

touch -a -d "2021-01-01 15:00" a.txt
touch -a -d "2021-01-02 15:00" b.txt
touch -a -d "2021-01-03 15:00" c.txt
touch -a -d "2021-01-04 15:00" d.txt
touch -a -d "2021-01-05 15:00" e.txt
touch -a -d "2021-01-06 15:00" f.txt
touch -a -d "2021-01-07 15:00" g.txt
touch -a -d "2021-01-08 15:00" h.txt

2:以下三条命令得到的结果分别为:

find . -atime 2**找出两天之前的一天内被访问文件(距离现在的-72小时 ~~ -48小时之间)


find . -atime -2  找出距离此时两天之内的被访问的文件(距离现在的前48小时之内)



find . -atime +2    找出两天之前,不包括两天之前的一天(也就是不包括-2和2的)之前的被访问的文件(离此时72小时之前)

3、图形分析

查看原文

赞 0 收藏 0 评论 1

运维汪 发布了文章 · 1月7日

回顾2020,展望202,确定三个关键字:自我成长、打地基、过男人关

image

男人难过美人关,李先生难过男人关。只要过了男人关,我觉得我可以起飞。近期在换工作,因此2020年的总结来得稍晚了点。大概的分3个方向总结一下2020,展望一下2021。

自我介绍

李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷。喜欢钻研底层技术,认为底层基础才是王道。一切新技术都离不开操作系统(CPU、内存、磁盘)、网络等。坚持输入输出,记录自己学习的点滴,在平凡中坚持前行,总有一天会遇见不一样的自己。公众号:运维汪(ID:Leeeee_Li)。


一、事业的两大绊脚石

这里写的事业而不是工作,是因为我把运维这个方向当做自己的事业(这个与被公司洗脑了不一样,以公司为家),我的理念是“以自我成长”为主来工作和学习。

1、功利心

也是自己不断的摸索才确定下来的方向(除了会做运维其他岗位也不会),19年到20年这期间反反复复无数次的想做自媒体,拍短视频,搞直播,但是搞这方面的初衷也就导致了是韭菜。我就是想赚快钱,轻松的钱,认为拍个视频,剪辑视频不简单吗,随随便便一搞就能赚钱,我还做什么运维。于是买了单反(既然要干就干一把大的,买好的),各种剪辑软件的会员,幻想着剪辑一个视频就能一夜暴富。事实是坚持了3天,浏览量不过百,然后就放弃了。然后想着还是好好工作,干好自己的专业,搞什么副业。再过一段时间,在职场上遇到一点困难,又想着干起自媒体,反反复复的浪费了两年时间。浪费了两年时间,也焦虑了两年时间,欲望大于行动就是焦虑。回归到本专业方向,突破瓶颈,才是最佳选择。

2、感情

只要男人不让我心烦意乱,我就能全身心投入到事业上。由于种种原因导致了现在在感情上的种种病态心理,这个是长期的心理问题,只能自己不断的去修复。一旦陷入那种痛苦中,就无法自拔,什么事业完全是不管不顾了。

二、2021两大主题

1、自我成长(揉碎、解剖、重组)
在为人处世、工作学习方法、思维模式方面需要不断的打磨,目前我能想到的办法就是有意识的去学习、实践,突破。而这一切学习只能通过读书。计划是每个月读3本自我成长类的(地铁、午休、如厕时间等),并且输出。

2、专业打地基

工作5年,到了一个瓶颈,最终发现要突破,只能打地基。

1)精读加实践读完下面6本书,并输出
《HTTP权威指南》
《HTTPS权威指南》
《TCP/IP详解 卷一》
《自顶向下计算机网络》
《现代操作系统》
《深入理解计算机系统》

2)CCIE(3年目标)
网络基础实在太差了,2021达到CCNP水平。

本文参与了 SegmentFault 思否征文「2020 总结」,欢迎正在阅读的你也加入。

查看原文

赞 2 收藏 1 评论 1

运维汪 关注了用户 · 1月7日

SegmentFault @segmentfault

SegmentFault 社区管理媛 - 思否小姐姐

纯粹的技术社区离不开所有开发者的支持和努力 biubiu

更多技术内容与动态欢迎关注 @SegmentFault 官方微博与微信公众号!

点击添加思否小姐姐个人微信号

关注 84104

运维汪 发布了文章 · 1月7日

图解HTTP权威指南(五) | HTTP缓存

作者简介
李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷。喜欢钻研底层技术,认为底层基础才是王道。一切新技术都离不开操作系统(CPU、内存、磁盘)、网络等。坚持输入输出,记录自己学习的点滴,在平凡中坚持前行,总有一天会遇见不一样的自己。公众号:运维汪(ID:Leeeee_Li)。

                                                                                   

一、缓存的优点

1、减少冗余数据传输

当很多客户端访问一个服务器时,服务器会多次传输一份文档每次传送给一个客户端。一些相同的字节会在网络中一遍遍的传输,这些冗余的数据传输会耗尽网络带宽,降低传输速度,加种Web服务器的负载。有了缓存,就可以保留第一条服务器响应的副本,后续请求就可以由缓存的副本来响应。

2、缓解网络瓶颈

缓存可以缓解网络的瓶颈。很多网络为本地网络客户端提供的带宽比远程服务器提供的带宽要宽。客户端会以路径上最慢的网速访问服务器。如果客户端从一个快速局域网的缓存中得到了一个副本,那么缓存就可以提高性能,尤其在传输的文件比较大时。

3、瞬间拥塞

缓存在破坏瞬间拥塞时起到重要的作用。

4、距离时延

当带宽不成问题的情况下,每台路由器会增加因特网流量的时延。

二、缓存命中

1、缓存命中

已有的副本为某些到达缓存的请求提供服务,称为缓存命中(cache hit)

2、缓存未命中

一些到达缓存的请求可能会由于没有副本可用,而被转发到原始服务器,称为缓存未命中(cache miss)

3、HTTP再验证

原始服务器的内容可能会发生变化,缓存要对其进行检测,看他们保存的副本是否仍然是服务器上最新的副本,这种新鲜度检测被称为HTTP再验证。

3.1、再验证命中

缓存对缓存的副本进行再验证时,会向原始服务器发送一个小的再认证请求。如果内容没有变化,服务器返回304 Not Modified。这种认证称为再验证命中(revalidate hit)或缓慢命中(slow hit)

3.2、再验证未命中

如果服务器对象已与缓存副本不同,服务器返回200 OK

3.3 对象被删除

如果服务器对象已经被删除了,服务器就返回404 Not Found响应,缓存也会将其副本删除。

4、缓存命中率

缓存提供服务的请求所占的比例称为缓存命中率(cache hit rate),也称文档命中率(document hit rate)。

5、字节命中率

字节命中率表示的是缓存提供的字节在传输的所有字节中所占的比例。

三、缓存的处理步骤

1、接收--缓存从网络中接收抵达的请求报文。

2、解析--缓存对报文进行解析,提取出URL和各种首部。

3、查询--缓存查看是否有本地副本可用,如果没有,就去服务器获取一份并保存在本地。

4、新鲜度检查--缓存查看已缓存的副本是否新鲜,如果不是,就询问服务器是否有任何更新。

5、创建响应--缓存用新的首部和已缓存的主体来构建一条响应报文。

6、发送--缓存通过网络将响应发回给客户端。

7、日志--缓存可选的创建一个日志文件条目来描述这个事务。

四、标记

1、过期响应首部

Cache-Control: max-stale 缓存可以随意提供过期的文件
Cache-Control: max-stale=<s> 在<s>秒时间内,文档就不能过期
Cache-Control: min-fresh=<s> 至少在为了<s>秒内文档要保持新鲜
Cache-Control: max-age 资源能够被缓存(保持新鲜)的最大时间,max-age是距离请求发起的时间的秒数
Cache-Control:no-cache 每次由请求发出时,缓存会将此请求发送到服务器进行再认证,如果没有过期,缓存才使用本地的缓存副本返回
Cache-Control:no-store 缓存中不得存储任何关于客户端和服务端响应的内容,每次由客户端发起的请求都会下载完整的响应内容
Expires 指定一个绝对的过期日期,如果过期日期已经过了,就说明文档不再新鲜了。如Wed, 06 Jan 2021 09:35:39 GMT

在缓存文档过期前,缓存可以任意频率使用这些副本,无需与服务器联系(特殊情况除外)。一旦已缓存文档过期,缓存就必须与服务器进行核对,询问文档是否被修改过,如果被修改过,就要获取一份新的(带有新的过期日期)的副本。

2、条件方法再验证

If-Modified-Since: <date> 如果从指定日期之后文档被修改过了,就执行请求的方法。可以与Last-Modifed服务器响应首部配合使用,只有在内容被修改后与已缓存版本有所不同的时候采取获取内容。

If-None-Match:<tags> 服务器可以为文档提供特殊的标签(ETag),而不是将其与最近修改的日期相匹配。这些标签就像序列号一样。如果已缓存标签与服务器文档中的标签不一样。If-None-Match首部就会执行所请求的方法。

查看原文

赞 0 收藏 0 评论 0

运维汪 发布了文章 · 1月6日

图解HTTP权威指南(四)| 代理

                                                                           

一、什么是Web代理

Web代理(proxy)服务器是网络的中间实体。代理位于客户端和服务端之间,扮演“中间人”的角色,在各端点之间来回传送HTTP报文。某个客户端专用的代理为私有代理,众多客户端共享的代理称为公共代理

 

二、Web代理和网关的区别

代理:连接的是两个或多个使用相同协议的应用程序。

网关:连接的是两个或多个使用不同协议的端点。

三、为什么使用代理
1、儿童过滤器

假如在一个学校,既要对教育站点访问无障碍,又要使用代理来组织对成人内容的访问。

2、文档访问控制

使用代理服务器在大量Web服务器和Web资源之间实现统一的访问控制策略。如

a)允许客户端1无限制地访问服务器A的新闻页面

b)客户端2可以无限制地访问互联网

c)在允许客户端3访问服务器B之前,需要输入账号密码

3、安全防火墙

防火墙代理提高安全性,代理服务器会在网络中的单一安全节点上限制哪些应用层协议的数据可以流入另一组织。还可以提供用来消除病毒的Web和E-mail代理使用的那种挂钩程序,对流量进行详细的检查。

4、Web缓存

代理缓存维护了常用的文档的本地副本,并将他们按需提供,以减少缓慢且昂贵的网络通信。

5、反向代理

代理可以假扮Web服务器,这些反向代理的代理接收发给Web服务器的真实请求,与Web服务器不同的是它们可以发起与其他服务器的通信,以便按需定位所请求的内容。

6、内容服务器

代理服务器可以作为“内容服务器”使用,根据因特网流量状况以及内容类型将请求导向特定的Web服务器。也可实现各种服务级别的请求,比如用户付费需要提高性能,内容路由器可以将请求转发到附近的复制缓存。

7、转码器

代理服务器在将内容发送给客户端之前,可以修改内容的主体格式。在这些数据表示法之间进行的透明转换被称为转码。如在传输GIF图片时,将其转换为JPEG图片;也可以对图片进行压缩。或者在传输文档的过程中将其转换成另一种语言(将英文文档转换为中文文档)。

8、匿名者

匿名者代理会主动从HTTP报文中删除身份特性(比如客户端IP地址、From首部、Referer首部、cookie、URI的session ID等),提高高度的私密性和匿名性。

四、代理服务器的位置
1、出口代理

将代理固定在本地网络的出口点,以便控制本地网络与互联网之间的流量。

2、访问入口代理

代理常被放在ISP(Internet Server Provider)互联网服务提供商访问点上,用以处理来自客户的聚合请求。ISP使用缓存代理来存储常用的文档副本,以提高用户的下载速度,降低因特网带宽耗费。

3、反向代理

代理通常会被部署在网络边缘,在Web服务器之前,作为替代物(反向代理)使用,它们可以处理所有传送给Web服务器的请求,并只在必要时向Web服务器请求资源。

4、网络交换代理

可以将具有足够处理能力的代理放在网络之间的因特网对等交换点上,通过缓存来减轻因特网节点的拥塞,并对流量进行监视。

五、代理的层级结构

可以通过代理层次结构将代理连接起来,代理层次结构的应用场景有:

1)负载均衡

子代理可能会根据当前父代理上的工作负载来决定如何选择一个负载均衡,达到负载均衡的作用

2)地理位置附近的路由

子代理可能会选择负责原始服务器所在物理区域的代理

3)协议/类型路由

子代理可能会根据URI将报文转发到不同的父代理和原始服务器上去

4)基于订购的路由

如果发布者为高性能额外付费了,他们的URI就会被转发到大型缓存或压缩引擎上去,以提高性能。

六、如何使客户端走向代理

客户端通常会直接与Web服务器进行通信,如何使得客户端的流量流向代理

1)修改客户端

将客户端配置为代理服务器,客户端就会将HTTP请求有意地直接发送给代理,而不是原始服务器。

2)修改网络

网络基础层设施通过若干技术手段,在客户端不知道或没有参与的情况下,拦截网络流量并将其导入代理。

3)修改DNS的命名空间

放在Web服务器的代理服务器(反向代理),会直接假扮Web服务器的名字和IP地址,这样所有的请求就会发送给这些反向代理服务器,而不得Web服务器。

4)修改Web服务器

将某些Web服务器配置为向客户端发送一条HTTP重定向命令(响应码305),将客户端请求重定向到一个代理上去,收到重定向命令后,客户端会与代理服务器进行通信。

七、追踪报文
1、Via首部

Via首部字段列出了与报文途径的每个中间节点有关的信息,报文每经过一个节点,都必须将这个中间节点添加到Via列表的末尾。

Via:1.1 proxy-62.irenes-isp.net, 1.0 cache.joes-hardware.com

Via首部字段用于记录报文的转发,诊断报文循环,标识请求、响应链上所有发送者的协议能力。

 

2、Via的语法

Via首部字段包含一个由逗号分隔的路标,每个路标都表示一个独立的代理服务器或网关。Via包括四个组件,一个可选的协议名(默认为HTTP),一个必选的协议版本,一个必选的节点名和一个可选的描述性注释。

Via:1.1 proxy-62.irenes-isp.net, 1.0 cache.joes-hardware.com
3、Via的请求和响应路径

请求和响应报文都会经过代理进行传输,因此请求和响应报文中都要有Via首部。请求和响应通常都是通过同一条TCP连接传送的,所以响应报文沿着与请求报文相同的路径回传。

4、Via与网关

有些代理会为非使用HTTP协议的服务器提供网关的功能,Via首部记录了这些协议的转换。

5、Trace方法

代理服务器可以在转发报文时对其进行修改。可以添加、修改或删除首部,也可以将主体部分转换成不同的格式。通过HTTP/1.1的TRACE方法,用户可以跟踪代理链传输的请求报文,观察报文经过了哪些代理,以及每个代理是如何对请求报文进行修改的。

查看原文

赞 0 收藏 0 评论 0

运维汪 发布了文章 · 1月4日

图解HTTP权威指南(三)| Web服务器对HTTP请求的处理和响应

作者简介

李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷。喜欢钻研底层技术,认为底层基础才是王道。一切新技术都离不开操作系统(CPU、内存、磁盘)、网络等。坚持输入输出,记录自己学习的点滴,在平凡中坚持前行,总有一天会遇见不一样的自己。公众号:运维汪(ID:Leeeee_Li)。

                                                                                        

一、问题

解释Web服务器是如何处理HTTP事务的

二、Web服务器

Web服务器会对HTTP请求进行处理并提供响应。Web服务器请求的七大步骤:

1)接受客户端连接

2)接收请求报文

3)处理请求

4)资源映射及访问

5)构建响应

6)发送响应

7)记录日志

1、接受客户端连接

1)处理新连接

客户端请求一条到Web服务器的TCP连接时,Web服务器会建立连接,判断连接的另一端是哪个客户端,从TCP连接中将IP地址解析出来。一旦新连接建立起来并接受,服务器就会将新连接添加到其现存Web服务器连接列表中,做好监视连接上数据传输的准备。Web服务器可以随意拒绝或立即关闭任意一条连接。有些Web服务器会因为客户端IP地址或主机名是未认证的,或者因为它是已知的恶意客户端而关闭连接。Web服务器也可以使用其他技术识别。

2)客户端主机名识别

可以用”反向DNS“对大部分Web服务器进行配置,以便将客户端IP地址转换成客户端主机名。Web服务器可以将客户端主机名用于详细的访问控制和日志记录。需要注意的是,主机名查找可能会花费很长的时间,这样会降低Web事务处理的速度。很多大容量的Web服务器会禁止主机名解析,或者只允许对特定内容进行解析。

可以用配置指令Hostnamelookups启用Apache的主机查找功能。如只打开HTML和CGI资源的主机名解析功能。

HostnameLookups off
<Files ~ "\.(html|htm|cgi)$">
   HostnameLookups on 
</Files>

3)通过ident确定客户端用户

服务器可以通过ident协议找到发起HTTP连接的用户名。这些信息对Web服务器的日志记录特别有用,流行的通用日志格式的第二个字段就包含了每条HTTP请求的ident用户名。

1)客户端打开一条HTTP连接

2)服务器打开自己到客户端ident服务113端口的连接

3)服务器发送一条简单的请求,询问与新连接相对应的用户名,把那个从客户端解析出包含用户名的响应

Apache的IdentityCheck on指令告知Apache Web服务器使用ident查找功能,如果没有ident信息可用,Apache会用连字符(-)来填充ident日志字段。如果没有ident信息可用,在使用通用日志格式的日志文件中,第二个字段通常都是连字符。

2、接收请求报文

当连接上有数据到达时,Web服务器会从网络连接中读取数据,并将请求报文中的内容解析出来。

1)解析请求报文时,Web服务器的工作

1、解析请求行,查找请求方法、指定的资源标识符(URI)以及版本号,各项之间有一个空格隔开,并以一个回车换行(CRLF)序列作为行的结束;

2、读取以CRLF结尾的报文首部;

3、检测到以CRLF结尾的、标识首部结束的空行;

4、读取请求主体

2)报文的内部表示法

3、连接的输入/输出处理结构

高性能的Web服务器能够同时支持数千条连接,每个客户端都向服务器打开了一条或多条连接。不同的Web服务器会以不同的方式为请求服务。

单线程Web服务器:单线程的Web服务器一次只处理一个请求,直到其完成为止。一个事务处理结束之后,才去处理下一条连接。

多进程及多线程Web服务器:多进程和多线程Web服务器用多个进程,或更高效的线程同时对请求进行处理。

复用I/O的服务器:在复用结构中,要同时监视所有连接上的活动。当连接的状态发生变化时,就对那条连接进行处理,处理结束后,将连接返回到开放的连接列表中,等待下一次的状态变化。只有在有事情可以做时才会对连接进行处理,在空闲连接上等待的时候并不会绑定线程和进程。

复用的多线程Web服务器:将多线程和复用功能结合在一起,利用计算机的多个CPU。多个线程中(通常是一个物理处理器)的每一个都在观察打开的连接,并对每条连接(或打开连接中的一个子集)执行任务。

3、处理请求

当Web服务器接收到请求后,根据方法、资源、首部和可选的主体部分来对请求进行处理。

4、对资源的映射及访问

1)docroot(文档的根目录)

Web服务器的文件系统中有一个专门存放Web内容的目录,称为文档的根目录(document root,或docroot)。当一个Web服务器的根目录为/usr/local/httpd/files,并且有一条/special/s.gif的请求到达时,他的访问如图

在Apache中,对配置文件httpd.conf添加一行DocumentRoot行就可设置文档的根目录

DocumentRoot /usr/local/httpd/files

2)虚拟托管的docroot

虚拟托管的Web服务器会在同一台Web服务器上提供多个Web站点,每个站点在服务器上都有自己都有的文档根目录。虚拟托管Web服务器会根据URI或Host首部的IP或主机名来识别要使用的正确的文档根目录。通过这种方式,及时请求的URI相同,托管在同一Web服务器上的两个Web站点也可以拥有完全不同的内存。

A请求进来时,获取服务器的/doc/aaa/index.html

B请求进来时,获取服务器的/doc/bbb/index.html

3)用户的主目录docroot

Docroot提供私有的Web站点时,通常会以斜杠和波浪号(/~)开始,如

A请求进来时,获取服务器的/home/mary/index.html

B请求进来时,获取服务器的/home/ken/index.html

在Apache的配置如下:

<VirtualHost www.aaa.com> 
    ServerName www.aaa.com 
    DocumentRoot /doc/aaa
    TransferLog /logs/aaa.access_log 
    ErrorLog /1ogs/aaa.error_log
</VirtualHost>

<VirtualHost www.bbb.com> 
    ServerName www.bbb.com 
    DocumentRoot /doc/bbb
    TransferLog /logs/bbb.access_log 
    ErrorLog /1ogs/bbb.error_log
</VirtualHost>

5、构建响应

一旦Web服务器识别出了资源、就执行请求方法中的描述的动作,并返回响应报文。响应报文中包含有状态码、响应首部、如果生成了响应主体的话,还包括响应主体。

1)响应主体

如果事务处理产生了响应主体,就将内容放在响应报文中回送过去。如果有响应主体的话,响应报文中通常包括:

a)描述了响应主体MIME类型的Content-Type首部;

b)描述了响应主体长度的Content-Length首部;

c)实际报文的主题内容

2)MIME类型

Web服务器要负责确定响应主体的MIME类型。

a)根据扩展名确定MIME类型

Web服务器可以用文件的扩展名来说明MIME类型。Web服务器会为每个资源扫描一个包含了所有扩展名的MIME类型的文件,以确定MIME类型。Web服务器用MIME类型文件来设置资源输出的Content-type首部。

b)魔法分类

Apache Web服务器扫描每个资源的内容,并与一个已知模式表(魔法文件)进行匹配,决定每个文件的MIME类型。

c)显示分类

对Web服务器进行配置,使其不考虑文件的扩展名和内容,强制特定文件或目录内容拥有某个MIME类型。

d)类型协商

通过配置Web服务器,使其可以通过与用户的协商来决定使用哪种格式以及相关的MIME类型。

3)重定向

Web服务器有时会返回重定向响应而不是成功的报文。Web服务器可以将浏览器重定向到其他地方来执行请求。重定向响应码为3XX系列。Location响应首部包含了内容的新地址或优选地址的URL。

a)永久删除的资源

资源可能已经被移动到了新的位置,或者被重新命名,有了一个新的URL。Web服务器可以告诉客户端资源已经被重新命名了,这样客户端就可以在从新地址获取资源之前,更新书签之类的信息了。状态码301 Moved Permanently用于此类重定向。

b)临时删除的资源

资源被临时移走了或重命名了。服务器可能希望将客户端重定向到新的位置上去。但由于重命名是临时的,所以服务器希望客户端将来还可以回头使用老的URL,不要对书签进行更新。状态吗303 See Other以及状态码307 Temporary Redirect用于此类重定向。

c)URL增强

服务器通常用重定向来重写URL,往往用于嵌入上下文。当请求到达时,服务器会生成一个新的包含了嵌入式状态信息的URL,并将用户重定向到这个新的URL上。客户端会跟随这个重定向信息,重新发起请求,但这次的请求会包含完整的、经过状态增强的URL。状态吗303 See Other以及状态码307 Temporary Redirect用于此类重定向。

d)负载均衡

一个超载的服务器收到一条请求,服务器可以将客户端重定向到一个负载不太重的服务器上去。状态吗303 See Other以及状态码307 Temporary Redirect用于此类重定向。

e)服务器关联

Web服务器上可能会有某些用户的本地信息,服务器可以将客户端重定向到包含了那个客户端信息的服务器上去。状态吗303 See Other以及状态码307 Temporary Redirect用于此类重定向。

f)规范目录名称

客户端请求的URL是一个不带尾部斜线的目录名时,大多数Web服务器都会将客户端重定向到一个加了斜线的URL上,这样相对链接就可以正常工作了。

6、发送响应

Web服务器通过连接发送数据,发送数据与接收数据一样可能有多条到客户端的连接,有些是空闲的,有些在向服务器发送数据,还有一些在向客户端回送响应数据。服务器要记录连接的状态,还需要特别注意持久连接的处理。对于非持久连接,服务器应该在发送了整条报文之后,关闭自己这一端的连接。

7、记录日志

当事务结束时,Web服务器会在日志文件中添加一个条目,来描述已执行的事务。

查看原文

赞 0 收藏 0 评论 0

认证与成就

  • 获得 3 次点赞
  • 获得 2 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 2 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2017-02-07
个人主页被 1.1k 人浏览