Linux下使用rsync同步文件

遇到的问题是几台游戏服务器,有一台新的服务器之前已经copy(Linux的scp命令)过文件上去,但在测试的过程中发现还是图片无法正常不显示出来,然后用httpwatch去分析请求的资源,发现有一个图片请求的地址是404(文件不存在),然后ssh登录上去,找到指定目录,发现确实是没有这个文件。。。

为了不至于再copy一次,就需要使用文件同步的管理软件了,同事推荐了linux下的rsync,小试了一下,还是很不错的。

假设有服务器A 和 服务器B,现在登录了服务器B,需要将服务器A上的文件同步到服务器B中,将A中有的B中没有的,或是A中文件比B中的文件要新就全部copy过来。

shell命令如下:

rsync -zvrtopg -progress -e 'ssh -p 端口号' [email protected]:/文件目录/  本机的目录地址

语法rsync -参数 ‘源文件访问路径’目标路径

第一次用的时候,我在源服务器(即上面所指的服务器A)中的文件目录没有加/导致后来直接把那个目录copy过来了,而不是它目录下的所有文件

关于rsync 这个命令的一些参数,英文好点就自己直接使用rsync –help去查看了,这里从其它人写的博客中转载过来的。

参考了:

rsync参数详解 http://hi.baidu.com/webv/blog/item/7c787a06581dab7e0208819a.html

rsync 使用说明 http://wandering.blog.51cto.com/467932/105113

使用之前需要先安装rsync,这个直接自行搜索吧..

关于参数的说明:

-v, --verbose 详细模式输出   
-q, --quiet 精简输出模式    
-c, --checksum 打开校验开关,强制对文件传输进行校验    
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD    
-r, --recursive 对子目录以递归模式处理    
-R, --relative 使用相对路径信息    
rsync foo/bar/foo.c remote:/tmp/    

则在/tmp目录下创建foo.c文件,而如果使用-R参数:

rsync -R foo/bar/foo.c remote:/tmp/    

则会创建文件/tmp/foo/bar/foo.c,也就是会保持完全路径信息。

-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。    
--backup-dir 将备份文件(如~filename)存放在在目录下。    
-suffix=SUFFIX 定义备份文件前缀    
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)    
-l, --links 保留软链结    
-L, --copy-links 想对待常规文件一样处理软链结    
--copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结    
--safe-links 忽略指向SRC路径目录树以外的链结    
-H, --hard-links 保留硬链结    
-p, --perms 保持文件权限    
-o, --owner 保持文件属性信息    
-g, --group 保持文件属组信息    
-D, --devices 保持设备文件信息    
-t, --times 保持文件时间信息    
-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间    
-n, --dry-run现实哪些文件将被传输    
-W, --whole-file 拷贝文件,不进行增量检测    
-x, --one-file-system 不要跨越文件系统边界    
-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节    
-e, --rsh=COMMAND 指定替代rsh的shell程序    
--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息    
-C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件    
--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件    
--delete 删除那些DST中SRC没有的文件    
--delete-excluded 同样删除接收端那些被该选项指定排除的文件    
--delete-after 传输结束以后再删除    
--ignore-errors 及时出现IO错误也进行删除    
--max-delete=NUM 最多删除NUM个文件    
--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输    
--force 强制删除目录,即使不为空    
--numeric-ids 不将数字的用户和组ID匹配为用户名和组名    
--timeout=TIME IP超时时间,单位为秒    
-I, --ignore-times 不跳过那些有同样的时间和长度的文件    
--size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间    
--modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0    
-T --temp-dir=DIR 在DIR中创建临时文件    
--compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份    
-P 等同于 --partial    
--progress 显示备份过程    
-z, --compress 对备份的文件在传输时进行压缩处理    
--exclude=PATTERN 指定排除不需要传输的文件模式    
--include=PATTERN 指定不排除而需要传输的文件模式    
--exclude-from=FILE 排除FILE中指定模式的文件    
--include-from=FILE 不排除FILE指定模式匹配的文件    
--version 打印版本信息    
--address 绑定到特定的地址    
--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件    
--port=PORT 指定其他的rsync服务端口    
--blocking-io 对远程shell使用阻塞IO    
-stats 给出某些文件的传输状态    
--progress 在传输时现实传输过程    
--log-format=FORMAT 指定日志文件格式    
--password-file=FILE 从FILE中得到密码    
--bwlimit=KBPS 限制I/O带宽,KBytes per second    
-h, --help 显示帮助信息

一般常用的:

-v 详细模式输出

-r 对子目录以递归模式处理

-t 保持文件的时间信息

-o 保持文件的属性信息

-g 保持文件属组的信息(不清楚这样翻译是否有问题)

-p 保持文件权限不变

-e, --rsh=COMMAND 指定替代rsh的shell程序

-z, --compress 对备份的文件在传输时进行压缩处理

--progress 显示备份过程

也就是:递归、保证文件一些基本属性不变(创建/修改时间 权限等)、传输文件时压缩以减少带宽消耗,当然还有一个就看需要了:是否删除源中没有,而目标中又有的文件

记录下在linux配置mongodb+nginx+node的过程

mongodb:

1、下载mongodb3.4版本,地址: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.4.5.tgz

2、通过Xftp把文件放到已经创建好的目录里面。

3、使用tar xxx 命令,将压缩解压到当前的工作路径。顺便cd到解压后的文件夹,把所有文件的移到上一层,并删掉这个文件夹。现在目录如下

未分类

4、在bin的外层级新建一个文件夹树:data/db,以后这个db就是放数据的地方了。

5、进入到bin,使用mongod –dbpath ../data/db,就可以启动mongodb,默认端口是27017。

6、访问curl localhost:27017,看是否有这段信息,有则代表已成功启动。

未分类

7 如果bin文件夹没有index.html,可以自己建一个,开启成功后会打开这个index。

nginx:

1、先使用命令 rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm 安装nginx的安装yum源。

2、安装成功后/etc/yum.repos.d会有nginx.repo文件。

3、使用yum install nginx -y,安装nginx,默认地址为/etc/nginx。我安装完后是没有html文件夹的,可以自己添加一个html文件夹,里面放一个index.html。

4、使用cd进nginx文件夹。使用nginx即可开启nginx服务。

5、如果想修改nginx.conf,修改完后使用nginx -s -reload即可重启nginx服务。

此时可以在window界面使用浏览器直接访问地址了。如,我的centos的ip是123.456.7.89,并在nginx上监听了80端口,如下:

listen       80;
server_name  localhost;
location / {
        proxy_pass  http://localhost:27017;  #被代理的服务器的域名
    proxy_redirect     off;
    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }

6、打开浏览器,地址栏输入123.456.7.89,成功后提示

未分类

如果提示拒绝访问,可能是centos并没有开启80端口。

使用如下命令:

## 开放指定端口(永久)
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
## 查看已开放的端口
firewall-cmd --list-ports

未分类

则是再重复步骤6即可。

nodejs:

1、使用命令安装源

V8.x: 

#curl --silent --location https://rpm.nodesource.com/setup_8.x | bash -
V7.x:

#curl --silent --location https://rpm.nodesource.com/setup_7.x | bash -
V6.x:

#curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -
V5.x:

#curl --silent --location https://rpm.nodesource.com/setup_5.x | bash -

2、 yum install -y nodejs

Linux Nginx LVS HAproxy 负载均衡功能对比

Nginx:

  1. 工作在网络7层,可以针对http应用做一些分流的策略,比如针对域名,目录结构
  2. Nginx对网络的依赖较小,理论上能ping通就能进行敷在功能
  3. Nginx安装配置比较简单,测试起来很方便
  4. 也可以承担较高的负载压力且稳定,Nginx是为了解决c10k问题而诞生的
  5. 对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测
  6. Nginx对请求的异步处理可以帮助节点服务器减轻负载压力
  7. Nginx仅能支持http、https和Email协议,这样就在适用范围较小
  8. 不支持Session的直接保持,但能通过ip_hash来解决,对Bigrequestheader的支持不是很好
  9. Nginx还能做Web服务器即Cache功能。

LVS:

  1. 抗负载能力强,性能高,能达到F5的60%,对内存和cpu资源消耗比较低
  2. 工作在网络4层,通过VRRP协议(仅做代理使用),具体的流量是由liunx内核来处理,因此没有流量的产生。
  3. 稳定,可靠性强,自身有完美的热备方案(Keepalived+LVS)
  4. 不支持正则处理,不能做动静分离
  5. 支持多种负载均衡算法:rr(轮询),wrr(带权轮询)、lc(最小连接)、wlc(带权最小连接)
  6. 配置相对复杂,对网络依赖比较大,稳定性很高。

LVS工作模式有4种:

  • nat地址转换
  • dr直接路由
  • tun隧道
  • full-nat

HAproxy:

  1. 支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机
  2. 能够补充Nginx的一些缺点比如Session的保持,Cookie引导等工作
  3. 支持url检测后端的服务器出问题的检测会有很好的帮助。
  4. 更多负载均衡策略比如:动态加权轮循,加权源地址哈希,加权URL哈希加权等参数哈希已经实现。
  5. 单纯从效率上来讲HAproxy更会比Nginx有更出色的负载均衡
  6. HAproxy可以对MYsql进行负载均衡,对后端的DB节点进行检测和负载均衡
  7. 支持负载均衡算法:轮循、带权轮循、源地址保持、请求URL、根据Cookie
  8. 不能做Web服务器即Cache。

三大主流软件负载均衡器适用的生产场景:

  1. 网站建设初期,可以选用Nginx、HAproxy作为反向代理负载均衡(流量不大时可以选择不用负载均衡)因为其配置简单,性能也能满足一般业务场景。如果考虑到负载均衡器是有单点失败问题,可以采用Nginx+Keepalived避免负载均衡器自身单点问题。
  2. 网站并发达到一定程度后,为了提高稳定性和转发效率,可以使用LVS,毕竟LVS比Nginx/HAproxy要更稳定,转发效率也高。

Linux LVM2 磁盘管理及 LUKS 加密

LVM 是 Logical Volume Manager (逻辑卷管理)的简写,它由 Heinz Mauelshagen 在 Linux 2.4 内核上实现。 LVM 将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘 来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可 以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性。

1、LVM 磁盘管理

1.1 术语

  • 物理卷
    Physical Volume(PV), 即物理的磁盘分区

  • 卷组
    Volume Group(VG), LVM中的物理的磁盘分区,也就是PV,必须加入VG,可以将VG理解 为一个仓库或者是几个大的硬盘。

  • 逻辑卷
    Logical Volume(LV), 也就是从VG中划分的逻辑分区

1.2 磁盘管理

1.2.1 物理卷(PV)操作

创建PV:

pvcreate /dev/sda /dev/sdb1

查看PV:

pvscan

1.2.2 卷组(VG)操作

VG是由各个PV组成的,创建VG:

vgcreate VolGroup /dev/sda /dev/sdb1

VolGroup 是VG名,后面两个设备是加入到 VolGroup 卷组的设备。

查看VG:

vgdisplay

增加VG的设备成员:

vgextend VolGroup /dev/sda3

1.2.3 逻辑卷(LV)操作

LV是在VG上面划分出来的。创建LV:

lvcreate -n osd -L 200G VolGroup

或:

lvcreate -n test -l 50 vg0

从卷组 VolGroup 中创建逻辑卷 osd, 用 -L 指定大小为200G,或用 -l 指 定大小为50个PE(Physical Extents,默认是4MB)

查看LV:

lvdisplay

改变LV大小:

lvresize -L +200G /dev/VolGroup/osd

该命令把 osd 逻辑卷增大了200G,类似的,如果要减小大小200G,用 -200G 即 可。逻辑卷的是从卷组划分来的,其大小当然不能比所在卷组的空间大。

1.2.4 改变 Ext2/3/4 文件系统大小

resize2fs /dev/dnfs/osd

这样会改变 osd 逻辑卷上的Ext3文件系统的大小到 osd 逻辑卷的总大小, resize2fs 也可以指定大小,更多用法,请 man resize2fs. resize2fs 支 持在线改变Ext3文件系统大小,不需卸载即可调整大小。

1.2.5 删除操作

如果不想用逻辑卷管理器了,可以从LV,VG到PV逐层删除:

lvremove /dev/dnfs/osd

把 dnfs 转为休眠状态:

vgchange -an dnfs
lvremove dnfs
pvremove /dev/sda

1.2.6 缩小分区大小

第一步, 先卸载分区

第二步, 强制检查文件系统的正确性:

e2fsck -f /dev/VolGroup/osd

第三步, 缩小文件系统的大小:

resize2fs /dev/VolGroup/osd 1G

即缩小文件系统大小到 1G.

第四步, 缩小逻辑卷的大小:

lvresize -L 1G /dev/VolGroup/osd

即缩小逻辑卷大小到 1G, 这里使用了绝对容量单位.

2、LUKS 磁盘加密

2.1 概念

LUKS(Linux Unified Key Setup) 为 Linux 硬盘加密提供了一种标准,它不仅能通用于不 同的 Linux 发行版本,还支持多用户/口令。因为它的加密密钥独立于口令,所以如果口 令失密,我们可以迅速改变口令而无需重新加密真个硬盘。通过提供一个标准的磁盘上的 格式,它不仅方便之间分布的兼容性,而且还提供了多个用户密码的安全管理。必须首先 对加密的卷进行解密,才能挂载其中的文件系统。

工具: cryptsetup (默认已经安装)

常用参数: luksFormat, luksOpen, luksClose, luksAddKey

使用 cryptsetup 对分区进行了加密后,这个分区就不再允许直接挂载。 LUKS 也是一种 基于device mapper 机制的加密方案。如果要使用这个分区,必须对这个分区做一个映射 ,映射到 /dev/mapper 这个目录里去,我们只能挂载这个映射才能使用。然而做映射 的时候是需要输入解密密码的。

Crypsetup 工具加密的特点:

  • 加密后不能直接挂载
  • 加密后硬盘丢失也不用担心数据被盗
  • 加密后必须做映射才能挂载

步骤:

  1. 创建分区并加密分区
  2. 映射分区
  3. 格式化分区并挂载使用
  4. 关闭映射分区

2.2 基本操作

Centos 6.x 上默认的卷组名称是 VolGroup.

创建一个LV:

lvcreate -n jiami -L 1G VolGroup

对LV进行加密:

cryptsetup luksFormat /dev/mapper/VolGroup-jiami

格式化时需要输入密码, 这个密码输入之后是不可更改的.

格式化之后, 我们需要先打开它, 然后才可以执行相关的操作(比如格式化, 挂载):

cryptsetup luksOpen /dev/mapper/VolGroup-jiami jiami

jiami 是解锁之后映射的设备名称, 比如 /dev/mapper/jiami.

下面执行格式化:

mkfs.ext4 /dev/mapper/jiami

之后就可以像正常分区一样操作

2.3 自动挂载

第1步:创建随机密钥文件

sudo dd if=/dev/urandom of=/root/keyfile bs=1024 count=4

第2步:将密钥文件设为只读为root

sudo chmod 0400 /root/keyfile

第3步:将密钥文件添加到LUKS

sudo cryptsetup luksAddKey /dev/mapper/VolGroup-jiami /root/keyfile

第4步:创建一个映射器

sudo nano /etc/crypttab

并添加一个新的条目

jiami      /dev/mapper/VolGroup-jiami  /root/keyfile  luks

或者您可以使用设备的UUID。

步骤5:将设备安装在fstab中

sudo nano /etc/fstab

并添加一个新的条目

/dev/mapper/jiami  /media/jiami     ext4    defaults        0       2

0表示不自检; 1或2表示需要自检, 根分区设为1, 其他分区只能是2.

第6步:重新启动或重新安装

sudo mount -a

2.4 更改分区大小

2.4.1 调整LUKS加密LVM分区的大小

我最近不得不调整我们在安全的FTP服务器上使用的分区。幸运的是,我们在所有机器上使用LVM,因此这是一项简单的任务。我唯一担心的是它是一个LUKS加密分区,我担心由于加密算法和密钥根据新的大小而改变,我会丢失数据。在搜索之后,以下是我提出的调整LUKS分区大小而不丢失任何数据的步骤:

假设和开始信息:

  • 我们有一个名为encrypted的LUKS文件系统,它位于名为encrypted_LV的逻辑卷上
  • 该encypted_LV属于一个名为卷组root_VG
  • 我们将此文件系统安装在/ secret
  • 我们使用ext3作为底层文件系统
  • 我们希望通过从root_VG卷组添加20 Gig来扩展卷(它已作为可用空间提供)。

步骤1.卸载文件系统

umount /secret

步骤2.运行文件系统检查以清理inode表,然后再使用它

fsck.ext3 -C 0 -f /dev/mapper/encrypted

步骤3.关闭LUKS文件系统

cryptsetup luksClose encrypted

步骤4.像扩展任何其他LVM一样扩展逻辑卷(我们正在添加额外的20G空间)

lvextend -L +20G /dev/root_VG/encrypted_LV

步骤5.重新打开加密文件系统并调整其大小

cryptsetup luksOpen /dev/root_VG/encrypted_LV encrypted
cryptsetup --verbose resize myfs

步骤6.再次FSCK(为了测量好)然后调整底层文件系统的大小(本例中为ext3)

fsck.ext3 -f /dev/mapper/encrypted
resize2fs /dev/mapper/encrypted

步骤7.安装新大小的LUKS文件系统并确保一切正常

mount /dev/mapper/encrypted /secret

2.4.2在LVM上调整LUKS上的ext4大小

下一个比较棘手,因为LVM不会自动支持调整大小。

步骤1.调整逻辑卷的大小

lvextend -L +50G /dev/VG-0/LV-1

步骤2.打开LUKS卷

cryptsetup luksOpen /dev/VG-0/LV-1 crypt_LV-1

步骤3.调整内部文件系统的大小(扩展到适合空间)

e2fsck -f /dev/mapper/crypt_LV-1
resize2fs /dev/mapper/crypt_LV-1

(e2fsck是一个很好的做法,无论如何都是由resize2fs强制实施的。)

linux系统lvm中lv使用空间的调整

前言:最近部署一个项目,甲方使用虚拟化平台,给的服务器都是虚拟化克隆的机器,操作系统安装时默认的分区,现状是根分区只有50G,部署的时候使用软连接创建的部署目录,但是后续升级的同事没有注意,就把部署直接放在根分区,导致近期数据同步时log文件大,使用的log日志删除脚本任务计划未到执行执行时间服务日志文件就把磁盘占满了,处理如下。

一、系统环境

  • 操作系统:Centos_x64 6.5
  • 内核版本:2.6.32-431.el6.X86_64
  • 磁盘格式:EXT4

二、现有分区情况与说明

df -h    #查看当前分区
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root   50G   17G   31G  36% /
tmpfs                         7.8G     0  7.8G   0% /dev/shm
/dev/sda1                     485M   33M  427M   8% /boot
/dev/mapper/VolGroup-lv_home  435G  9.7G  404G   3% /home

说明:可以清楚的看到两个lv卷的分区VolGroup-lv_root挂载为了根分区50G,VolGroup-lv_home挂载为了/home分区,home分区比较大,却没有被使用。

三、释放/home分区的占用并卸载/home分区

1、以为使用fuser -m /home就可以完成但是执行后卸载仍提示/home有占用。情况如下:

# fuser -m /home
/home:               24033ce
# umount /home
umount: /home: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

2、检查占用的文件,发现甲方提供的系统里有金山的防护软件,将软件进程杀掉后卸载/home分区正常:

# lsof | grep /home          --检查发现占用的是金山的防护软件直接运行了kiil -9 24033
KANLinuxC 24033          root  cwd       DIR              253,2      4096    5636103 /home/kingsoft/kavnet
KANLinuxC 24033          root  txt       REG              253,2   1645332    5636130 /home/kingsoft/kavnet/KANMainModule
KANLinuxC 24033          root  mem       REG              253,2   1369600    5636263 /home/kingsoft/kavnet/libcrypto.so.6
KANLinuxC 24033          root  mem       REG              253,2    323320    5636276 /home/kingsoft/kavnet/libssl.so.6
KANLinuxC 24033          root  mem       REG              253,2     34487    5636129 /home/kingsoft/kavnet/KANLocalComm.so
KANLinuxC 24033          root  mem       REG              253,2    626402    5636131 /home/kingsoft/kavnet/KANNetComm.so
KANLinuxC 24033          root  mem       REG              253,2    163342    5636265 /home/kingsoft/kavnet/libjson.so
KANLinuxC 24033          root    3w      REG              253,2    789537    5636280 /home/kingsoft/kavnet/neterror.log
KANLinuxC 24033          root   10w      REG              253,2    789537    5636280 /home/kingsoft/kavnet/neterror.log
KANLinuxC 24033          root   11w      REG              253,2    789537    5636280 /home/kingsoft/kavnet/neterror.log
KANLinuxC 24033          root   13w      REG              253,2    789537    5636280 /home/kingsoft/kavnet/neterror.log
KANLinuxC 24033          root   20w      REG              253,2    789537    5636280 /home/kingsoft/kavnet/neterror.log
# umount /home          --重新卸载未在报错
未在报错。

三、缩减VolGroup-lv_home这个LV的空间

1、检查这个LV分区的信息是否正常;

# e2fsck -f /dev/mapper/VolGroup-lv_home
e2fsck 1.41.12 (17-May-2010)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/mapper/VolGroup-lv_home: 5779/28950528 files (2.2% non-contiguous), 4334183/115775488 blocks

2、调整VolGroup-lv_home分区大小;

#resize2fs -p /dev/mapper/VolGroup-lv_home 80G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/mapper/VolGroup-lv_home to 20971520 (4k) blocks.
Begin pass 2 (max = 50904)
正在重定位块            XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Begin pass 3 (max = 3534)
正在扫描inode表          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Begin pass 4 (max = 838)
正在更新inode引用       XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The filesystem on /dev/mapper/VolGroup-lv_home is now 20971520 blocks long.

3、重新挂载home分区并检查空间大小,可以发现/home的空间已经变小;

# mount /home
# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root   50G   17G   31G  36% /
tmpfs                         7.8G     0  7.8G   0% /dev/shm
/dev/sda1                     485M   33M  427M   8% /boot
/dev/mapper/VolGroup-lv_home   79G  9.6G   66G  13% /home

4、将VolGroup-lv_home缩减出来的分区设置为空闲分区;

# lvreduce -L 80G /dev/mapper/VolGroup-lv_home
  WARNING: Reducing active and open logical volume to 80.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv_home? [y/n]: y
  Reducing logical volume lv_home to 80.00 GiB
  Logical volume lv_home successfully resized

5、检查空闲出的空间Free PE已经空出了361G;

# vgdisplay 
  --- Volume group ---
  VG Name               VolGroup
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               3
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               499.51 GiB
  PE Size               4.00 MiB
  Total PE              127874
  Alloc PE / Size       35292 / 137.86 GiB
  Free  PE / Size       92582 / 361.65 GiB
  VG UUID               Ur7bJ4-hQKi-xx4R-f9Qt-INvG-fjBf-zcvJ4n

四、将缩减出的空间增加给VolGroup-lv_root这个LV

1、给VolGroup-lv_root增加空间;

# lvresize --size +361G /dev/VolGroup/lv_root 
  Extending logical volume lv_root to 410.71 GiB
  Logical volume lv_root successfully resized

2、让系统重新识别VolGroup-lv_root增加的空间;

# resize2fs -p /dev/mapper/VolGroup-lv_root
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/VolGroup-lv_root is mounted on /; on-line resizing required
old desc_blocks = 4, new_desc_blocks = 26
Performing an on-line resize of /dev/mapper/VolGroup-lv_root to 107665408 (4k) blocks.
The filesystem on /dev/mapper/VolGroup-lv_root is now 107665408 blocks long.

3、检查最终结果,确认操作成功;

# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root  405G   23G  362G   6% /
tmpfs                         7.8G     0  7.8G   0% /dev/shm
/dev/sda1                     485M   33M  427M   8% /boot
/dev/mapper/VolGroup-lv_home   79G  3.5G   72G   5% /home

Linux 配置防火墙详细步骤 (iptables 命令使用方法)

如果您使用的是 ssh 远程,而又不能直接操作本机,那么建议您慎重,慎重,再慎重!
无论如何,iptables 是一个需要特别谨慎设置的东西,万一服务器不在你身边,而你贸然设置导致无法 SSH,那就等着被老板骂吧!!!

通过 iptables 我们可以为我们的 Linux 服务器配置有动态的防火墙,能够指定并记住为发送或接收信息包所建立的连接的状态,是一套用来设置、维护和检查 Linux 内核的 IP 包过滤规则的命令包。iptables 定义规则的方式比较复杂,本文对 Linux 防火墙 Iptables 规则写法进行详细介绍。

概览

未分类

未分类

未分类

未分类

未分类

未分类

[root@ppl ~]# iptables -h
iptables v1.4.21

Usage: iptables -[ACD] chain rule-specification [options]
       iptables -I chain [rulenum] rule-specification [options]
       iptables -R chain rulenum rule-specification [options]
       iptables -D chain rulenum [options]
       iptables -[LS] [chain [rulenum]] [options]
       iptables -[FZ] [chain] [options]
       iptables -[NX] chain
       iptables -E old-chain-name new-chain-name
       iptables -P chain target [options]
       iptables -h (print this help information)

介绍

1.Iptables 规则写法的基本格式是:
  

iptables [-t table] COMMAND chain CRETIRIA -j ACTION   

2.Iptables 规则相关参数说明:

  • -t table:3 个:filter nat mangle ;定义如何对规则进行管理

  • chain:指定你接下来的规则到底是在哪个链上操作的,当定义策略的时候,是可以省略的;

  • CRETIRIA: 指定匹配标准;

  • -j ACTION: 指定如何进行处理;   

3.Iptables 规则其他写法及说明:
 
iptables -L -n -v #查看定义规则的详细信息

 [root@ppl ~]# iptables -L -n
 Chain INPUT (policy ACCEPT)
 target     prot opt source               destination         
 ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
 ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
 INPUT_direct  all  --  0.0.0.0/0            0.0.0.0/0           
 INPUT_ZONES_SOURCE  all  --  0.0.0.0/0            0.0.0.0/0           
 INPUT_ZONES  all  --  0.0.0.0/0            0.0.0.0/0           
 DROP       all  --  0.0.0.0/0            0.0.0.0/0            ctstate INVALID
 REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

 Chain FORWARD (policy ACCEPT)
 target     prot opt source               destination         
 ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
 ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
 FORWARD_direct  all  --  0.0.0.0/0            0.0.0.0/0           
 FORWARD_IN_ZONES_SOURCE  all  --  0.0.0.0/0            0.0.0.0/0           
 FORWARD_IN_ZONES  all  --  0.0.0.0/0            0.0.0.0/0           
 FORWARD_OUT_ZONES_SOURCE  all  --  0.0.0.0/0            0.0.0.0/0           
 FORWARD_OUT_ZONES  all  --  0.0.0.0/0            0.0.0.0/0           
 DROP       all  --  0.0.0.0/0            0.0.0.0/0            ctstate INVALID
 REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

 Chain OUTPUT (policy ACCEPT)
 target     prot opt source               destination         
 OUTPUT_direct  all  --  0.0.0.0/0            0.0.0.0/0 

iptables 是 Linux 服务器上防火墙配置必备的设置工具,是我们在做好服务器安全及部署大型网络时,常会用到的重要工具,很好的掌握 iptables,可以让我们对 Linux 服务器整个网络的结构有一个比较透彻的了解,更能够很好的掌握 Linux 服务器的安全配置技巧。

配置

我们来配置一个 filter 表的防火墙.

1.首先介绍一下指令和相关配置文件

  • 启动指令:service iptables start
  • 重启指令:service iptables restart
  • 关闭指令:service iptables stop

2.然后是相关配置

/etc/sysconfig/iptables     
vim /etc/sysconfig/iptables

然后进去修改即可,修改完了怎么办?这里很多人会想到 /etc/rc.d/init.d/iptables save 指令,但是一旦你这么干了你刚才的修改内容就白做了。。。

具体方法是:
只修改 /etc/sysconfig/iptables, 使其生效的办法是修改好后先 service iptables restart,然后才调用 /etc/rc.d/init.d/iptables save
因为 /etc/rc.d/init.d/iptables save 会在 iptables 服务启动时重新加载,要是在重启之前直接先调用了 /etc/rc.d/init.d/iptables save 那么你 的 /etc/sysconfig/iptables 配置就回滚到上次启动服务的配置了,这点必须注意!!!

3.下面介绍一些指令用法(主要还是 man iptables 看下相关资料才行)

   -A:指定链名   
   -p:指定协议类型   
   -d:指定目标地址
   -s:IP地址
   --dport:指定目标端口(destination port 目的端口)   
   --sport:指定源端口(source port 源端口)   
   -j:指定动作类型 

4.如果我不像修改文件直接打命令可以吗,当然没问题,步骤如下:

例如我给 SSH 加放行的语句:
添加 input 记录: iptables -A INPUT -p tcp --dport 22 -j ACCEPT
添加 output 记录: iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
最后注意需要再执行一下 /etc/init.d/iptables save,这样这两条语句就保存到刚才那个 /etc/sysconfig/iptables 文件中了。

5.接下来说明一下步骤,如果机器不在我身边,我只能 SSH 进去做 iptables 规则,那么我必须注意每一步,千万别搞错了,否则就 SSH 链接不上都有可能!

首先要做的是给咱的 SSH 进行 ACCEPT 配置,以免直接无法连接的情况发生:
如果 SSH 端口是 22(这里不建议用默认端口最好改掉 SSH 端口)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
注意要 /etc/rc.d/init.d/iptables save,以下每一步都最好执行一遍此语句,以下不再累述。

6.cat /etc/sysconfig/iptables 确定是否已经加入配置,可以的话执行 service iptables restart 重启后生效.

示例

拒绝某 IPSSH 链接我的 Linux

iptables -t filter -A INPUT -s 192.168.12.12 -p tcp --dport 22 -j DROP

Linux的铜墙铁壁:防火墙之iptables

未分类

来源

所谓防火墙,实质上是指由软硬件组合成的一个在内外网之间构造的一种保护屏障,它是一种隔离技术。因此从物理上区分,可以分为软件和硬件防火墙,从逻辑上区分,可以分为主机和网络防火墙,而我们现在要讲到的iptables,是属于防火墙中的软件防火墙的范畴,但它只是一个命令行工具或者说是一种客户端代理,并不是真正的防火墙,用户通过这个代理,把安全设定执行到真正的防火墙框架中,这个框架叫做Netfilter

原理

Netfilter是Linux中的一个子项目,它的主要功能是进行数据包过滤、连接跟踪、地址转换等,而iptables则是netfilter提供的对用户数据包进行过滤、修改等操作的一种命令行工具,当数据包通过网卡进入进入内核时,它得先经过iptables的五条链,这些链都有相应的处理数据包的规则,而我们正是通过在这些链上设置规则来控制管理数据包,从而达到防火墙的功能。每当数据包到达一个链时,iptables就会从链中的所有规则逐一开始校验该数据包是否符合规则中限定的条件。若满足,系统就会根据每个规则定义的方法来处理该数据包;若不满足,iptables则继续检查下一条规则,如果该数据包不符合链中的任意规则,iptables则会该链的默认策略去处理该数据包。

四个表

iptables的结构是由tables组成,而tables是由链组成,链又是由具体的规则组成。因此我们在编写iptables的规则时,通过要先指定表,再指定链。tables的作用是区分不同功能的规则,并且存储这些规则。

tables的类型分别有:

未分类

五条链

链,也称为钩子函数,它是一系列规则的一个组合,当数据包经过这些狗子函数时,她必须完全匹配每一个钩子函数中的所有规则,方能进入下一个钩子函数。

钩子函数的类型分别有:

未分类

语法规则

语法:iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]

1)常用的命令选项:

  • -t:指定要操纵的表(四个表);

  • -A:向规则链中添加条目;

  • -D:从规则链中删除条目;

  • -i:向规则链中插入条目;

  • -R:替换规则链中的条目;

  • -L:显示规则链中已有的条目;

  • -F:清楚规则链中已有的条目;

  • -Z:清空规则链中的数据包计算器和字节计数器;

  • -N:创建新的用户自定义规则链;

  • -P:定义规则链中的默认目标;

  • -h:显示帮助信息;

  • -p:指定要匹配的数据包协议类型;

  • -s:指定要匹配的数据包源

2)常用的处理动作:

  • ACCEPT:允许数据包通过

  • DROP:直接丢弃数据包,不给任何回应信息

  • REJECT: 拒绝数据包通过,必要时会给数据发送端一个响应的信息

  • LOG:在/var/log/messages文件中记录日志然后将数据包传递给下一条规则

  • REDIRECT: 端口映射

  • SNAT :源地址转换,修改包来源IP为某IP或IP范围,做内网和公网之间的转换

  • DNAT::目标地址转换。 修改数据包目的地IP为某 Ip 或 IP 范围

3)常用的条件匹配:

1、状态匹配:-m state –state 连接状态

  • NEW:与任何连接无关的

  • ESTABLISHED:响应请求或已建立连接的

  • RELATED:与已有连接有相关性的,如FTP数据连接

2、MAC地址匹配:-m mac –mac-source MAC地址

eg:iptables -A INPUT -m mac --mac-source f0:1b:12:12:22:4f -j DROP

3、IP范围匹配:-m iprange –src-range IP范围

eg:iptables -A FORWARD -p tcp -m iprange --src-range 192.168.0.1-192.168.0.10 -j ACCEPT

4、多端口匹配:-m multiport –sports 源端口列表 和 -m multiport –sports 目的端口列表

eg:iptables -A INPUT -p tcp -m multiport --dport 11,29,116,121 -j ACCEPT

4)常用的一些iptables策略:

1、拒绝转发来自192.168.2.33主机的数据

iptables -A FORWARD -s 192.168.2.33 -j REJECT 

2、允许转发来自192.168.2.1/99网段的数据

iptables -A FORWARD -s 192.168.2.1/99 -j ACCEPT

3、允许本机开放从TCP端口20-1024提供的应用服务。

iptables -A INPUT -p tcp --dport 20:1024 -j ACCEPT 

iptables -A OUTPUT -p tcp --sport 20:1024 -j ACCEPT

4、只允许管理员从202.13.0.0/16网段使用SSH远程登录防火墙主机。

iptables -A INPUT -p tcp --dport 22 -s 202.13.0.0/16 -j ACCEPT 

iptables -A INPUT -p tcp --dport 22 -j DROP

5、 允许转发来自192.168.0.0/24局域网段的DNS解析请求数据包。

iptables -A FORWARD -s 192.168.0.0/24 -p udp --dport 53 -j ACCEPT 

iptables -A FORWARD -d 192.168.0.0/24 -p udp --sport 53 -j ACCEPT

6、屏蔽ip 110.1.1.1的访问

iptables -I INPUT -s 110.1.1.1 -j DROP

7、屏蔽从123.0.0.1到123.255.255.254iptables -I INPUT -s 123.0.0.0/8 -j DROP

8、屏蔽从从123.45.0.1到123.45.255.254iptables -I INPUT -s 124.45.0.0/16 -j DROP

9、屏蔽从从123.45.6.1到123.45.6.254iptables -I INPUT -s 123.45.6.0/24 -j DROP

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

11、允许访问22端口iptables -A INPUT -p tcp –dport 22 -j ACCEPT

5)常用的iptables命令:

1、查看当前 IPTABLES 规则

service iptables status

2、 将所有iptables以序号标记显示

iptables -L -n --line-numbers

3、 比如要删除INPUT里序号为22的规则

iptables -D INPUT 22

linux 用awk gsub将一行变成多行

原数据

103153926#1180545867#1337681140#1358188028#1445076068#1527059220#1625614569#1890561581#19584762#2214121812#2342720441#2500121842#25326345#2640225664#409811166#461094177#596719064#611522202#741345319#759125996#98001626#997750230
1420151716#184147046#2785699737#344498087

目标结果

103153926   1
1180545867  1
1337681140  1
1358188028  1
1445076068  1
1527059220  1
1625614569  1
1890561581  1
19584762    1
2214121812  1
2342720441  1
2500121842  1
25326345    1
2640225664  1
409811166   1
461094177   1
596719064   1
611522202   1
741345319   1
759125996   1
98001626    1
997750230   1
1420151716  2
184147046   2
2785699737  2
344498087   2

对数据进行修改,在最后加一个#

103153926#1180545867#1337681140#1358188028#1445076068#1527059220#1625614569#1890561581#19584762#2214121812#2342720441#2500121842#25326345#2640225664#409811166#461094177#596719064#611522202#741345319#759125996#98001626#997750230#
1420151716#184147046#2785699737#344498087#
awk 'BEGIN{i=1}{gsub(/#/,"t"i"n");i++;print}' uids|sed '/^$/d' > uids_seg

Linux使用awk文本处理工具实现多行合并的实例

在Linux系统中使用awk文本处理工具,有时需要将多行合并,这就需要用到awknext语句了,下面小编就给大家介绍下Linux中使用awk实现多行合并的方法,需要的朋友可以来了解下。

awknext语句使用:在循环逐行匹配,如果遇到next,就会跳过当前行,直接忽略下面语句。而进行下一行匹配。

代码如下:

text.txt 内容是:

a

b

c

d

e

  

[chengmo@centos5 shell]$ awk ‘NR%2==1{next}{print NR,$0;}’ text.txt

2 b

4 d

当记录行号除以2余 1,就跳过当前行。下面的print NR,$0也不会执行。 下一行开始,程序有开始判断NR%2 值。这个时候记录行号是:2 ,就会执行下面语句块:‘print NR,$0’

awk next使用实例:

代码如下:

要求:

文件:text.txt 格式:

web01[192.168.2.100]

httpd ok

tomcat ok

sendmail ok

web02[192.168.2.101]

httpd ok

postfix ok

web03[192.168.2.102]

mysqld ok

httpd ok

  
需要通过awk将输出格式变成:

web01[192.168.2.100]: httpd ok

web01[192.168.2.100]: tomcat ok

web01[192.168.2.100]: sendmail ok

web02[192.168.2.101]: httpd ok

web02[192.168.2.101]: postfix ok

web03[192.168.2.102]: mysqld ok

web03[192.168.2.102]: httpd ok

分析:

分析发现需要将包含有“web”行进行跳过,然后需要将内容与下面行合并为一行。

[chengmo@centos5 shell]$ awk ‘/^web/{T=$0;next;}{print T“:t”$0;}’ test.txt

web01[192.168.2.100]: httpd ok

web01[192.168.2.100]: tomcat ok

web01[192.168.2.100]: sendmail ok

web02[192.168.2.101]: httpd ok

web02[192.168.2.101]: postfix ok

web03[192.168.2.102]: mysqld ok

web03[192.168.2.102]: httpd ok

  
上面就是Linux使用awk进行多行合并的方法介绍了,在文中使用next语句是十分方便的,在循环匹配中,如果遇到next,就会自动跳过,从而实现多行合并。