Monthly Archives: 十一月 2017

十一月 30th, 2017

 在系统安装时候大多情况下有可能因为考虑不周,导致服务器空间不足问题,这时候如果没有lvm逻辑卷管理工具的话,往往就是查找服务器大文件删除之,或者应用迁移。但如果有了lvm逻辑卷管理,只需要新增硬盘,并将新硬盘的空间划分到不足的分区及可,如果空间浪费也可以减少对应分区的空间,这样可大大增加对空间的利用率

 

在安装系统时使用lvm逻辑卷管理,创建方法如下:

  1. 在系统安装到硬盘分区时选择“创建自定义布局”

    wKiom1k1LcGzbb66AAFq4n0rsNo127.png-wh_50

  2. 首先创建一个/boot分区,/boot分区不能在逻辑卷中,所以先需要创建一个分区给/boot,选中空闲的空间,点击创建,然后点击标准分区,点创建

    wKioL1k1LdnSvC7lAAFHxkDAxq8489.png-wh_50

  3. 创建/boot分区,挂载点选择/boot,大小设定为500,单位为MB,然后固定大小,点击创建,至此/boot分区创建完成

    wKioL1k1Liqy5gdmAAEywcRUpTI203.png-wh_50

  4. 创建lvm物理卷点击剩余的空间,创建,创建时选择“lvm物理卷”

    wKioL1k1LoWwJRTPAAFRpMRMbLU566.png-wh_50

  5. 创建lvm物理卷,文件系统类型默认,空间大小使用全部可用空间,点击创建,至此物理卷创建完毕

    wKioL1k1LqmApsDgAAE-Y-Yf0jQ827.png-wh_50

  6. 从lvm物理卷创建lvm逻辑卷组,选中刚创建的lvm物理卷,然后点创建,创建时选择lvm卷组

    wKioL1k1LuqxSpr7AAFN9dbAphc550.png-wh_50

  7. 从lvm逻辑卷组创建lvm逻辑卷,打开创建卷组对话框,输入卷组名称(随意,看懂就行),然后在下面添加卷组中包含的lvm逻辑卷,我这里在当前卷组分配了2048的swap,再把剩余所有空间分配到了根分区

    wKioL1k1L3nzLQLmAAEiGj5Vymo897.png-wh_50

  8. 效果图

    wKiom1k1L_Hwnu6KAADymZ8ofg8082.png-wh_50

  9. 效果图

    wKioL1k1L_7ihR1dAAApmRiK6Bo654.png-wh_50

通过以上步骤我们已经完成了在系统安装时采用lvm逻辑卷管理的方式

 

在已有系统中增加新硬盘并使用逻辑卷管理:

  1. 新增一块新硬盘(我这里使用的是虚拟机,新增硬盘步骤略)
  2. 将新硬盘初始化为物理卷(我这里新添加的新硬盘为/dev/sdb)

    pvcreate /dev/sdb

    结果为“Physical volume “/dev/sdb” successfully created”代表创建成功

  3. 创建逻辑卷组

    vgcreate VolGroup2 /dev/sdb

    VolGroup2为逻辑卷组的名称,/dev/sdb我们前面已经初始化成物理卷,所以这里我们指定的是物理卷。整条命令的意思是创建一个名为VolGroup2的逻辑卷组,并将/dev/sdb物理卷加入到此逻辑卷组中

    结果为“Volume group “VolGroup2” successfully created”代表创建成功

  4. 创建逻辑卷

    lvcreate -L 5G  -n LogVol01 VolGroup2

    此命令的意思是从VolGroup2卷组创建一个名为LogVol01的逻辑卷

    结果为“Logical volume “LogVol01” created”表示逻辑卷创建成功,成功后会在/dev/mapper目录下生成一个名为VolGroup2-LogVol01名称的逻辑卷文件

  5. 格式化刚创建的VolGroup2-LogVol01逻辑卷

    mkfs.ext4 /dev/mapper/VolGroup2-LogVol01

  6. 将格式化后的逻辑卷挂载到我们服务器的/data目录

    mkdir /data

    blkid | grep VolGroup2-LogVol01

    记住UUID

    编辑/etc/fstab文件,在文件最后加入

    UUID=c0d28e46-c8b8-4d39-a355-b155e2852e36 /data ext4 defaults 0 0

    mount -a

  7. 效果如下

    wKiom1k1OIexys5KAAA0Mxlsl8U843.png-wh_50

  8. 刚才新增的硬盘为10G,只分配了5G的空间给VolGroup2-LogVol01,我们现在再把其它剩余的空间用来给根分区扩容,操作步骤如下:
    1. 从VolGroup2创建一个新的逻辑卷,并使用剩余所有空间

      lvcreate -l 100%FREE  -n LogVol02 VolGroup2

    2. 将新创建的逻辑卷格式化,并挂载到/data2

      mkdir /data2

      mkfs.ext4 /dev/mapper/VolGroup2-LogVol02

      blkid | grep VolGroup2-LogVol02

      echo “UUID=7f427618-22bd-4e98-90ff-7f782d067644 /data2 ext4 defaults 0 0” >> /etc/fstab

      mount -a

    3. 效果如下

      wKiom1k1PfOD7q2aAABB1fS3giM657.png-wh_50

 

增加新硬盘为给现有lvm逻辑卷扩容空间:

  1. 新增一块新硬盘(我这里使用的是虚拟机,新增硬盘步骤略)
  2. 把新硬盘初始化成物理卷

    pvcreate /dev/sdc

  3. 查看VolGroup2逻辑卷组信息

    vgdisplay VolGroup2

    wKiom1k1QI-R5jmVAABiwKY4ugU402.png-wh_50

    从以上信息可以看出VolGroup2共有10G,也就是我们添加的第二块硬盘的大小

  4. 扩容VolGroup2的大小,用我们第三块盘去扩容

    vgextend VolGroup2 /dev/sdc

    查看扩容后的大小,为25G

    wKioL1k1QTPxebqKAABnEQnZg3Q329.png-wh_50

  5. 通过上一步我们已经将VolGroup2 扩容到了25G,也就意味着还有剩余空间没有被分配到逻辑卷,这时候我们可以利用这些剩余空间来增加逻辑卷的大小,但只能增加VolGroup2中的逻辑卷,而VolGroup1中的逻辑卷还需要另外的新硬盘来扩展VolGroup1的空间

    lvextend -L+5G /dev/mapper/VolGroup2-LogVol01

    通过上面的命令,我们将VolGroup2-LogVol01逻辑卷增加了5G的空间

    这时候我们实际显示还是原来的空间,我们需要再执行下面的命令

    resize2fs /dev/mapper/VolGroup2-LogVol01

  6. 最后再查看空间,这时候/data增加了5G

    wKiom1k1R5Ci4ng-AABGHFU3FHc677.png-wh_50

  7. 将第三块硬盘的剩余所有空间,扩展到/data2

    lvextend -l+100%FREE /dev/mapper/VolGroup2-LogVol02

    resize2fs /dev/mapper/VolGroup2-LogVol02

  8. 结果如下

    wKioL1k1SIPTVB7WAABIWhjAVAs289.png-wh_50

  9. 这时候如果我们要扩容根分区的容量,同样的道理,只需要再新增一块新硬盘,然后把硬盘初始化成物理卷,再把物理卷加入到VolGroup1的组里面,然后就可以扩容根分区了
    1. 执行以下命令

      pvcreate /dev/sdd

      vgextend VolGroup1 /dev/sdd

      lvextend -l+100%FREE /dev/mapper/VolGroup1-LogVol01

      在执行上面命令之前我已经对/dev/sdd的空间划分了3G给交换分机文件,详情见下面b步骤

      resize2fs /dev/mapper/VolGroup1-LogVol01

      通过上面命令,根分区也扩容了2G,结果如下

      wKioL1k1Sz3TnjAmAABGrivk5JQ672.png-wh_50wKioL1k1S0XTIxiOAABGrivk5JQ513.png-wh_50

    2. 经测试如果要对lvm的交换分机进行扩容,操作如下:

      lvextend -l+3G /dev/mapper/VolGroup1-LogVol00

      swapoff -a

      mkswap /dev/mapper/VolGroup1-LogVol00

      swapon /dev/mapper/VolGroup1-LogVol00

      这时候交换结果如下:

      wKiom1k1TNyC89eTAAAjmqoimCU132.png-wh_50

十一月 30th, 2017

有时候大家可能会忘记自己的root密码,或者错误(命令输入错误,命令位置输入有误等)编辑了一个/etc目录下的核心文件导致系统不能正常启动了!怎么办?重新安装系统那是实在没有办法之举!那我们就进入如下两种方式把错误的配置文件改过来,重启系统不就好了吗!接下来咱们就学习一下两种模式恢复系统Lunix单用户模式+救援模式

单用户模式+救援模式类似windows的安全模式

使用虚拟机在系统里面输入指令重启系统是不能达到我们的要求的,也就是说IDC机房可不是想进就进去的。而且里面有很严格的管理制度,安全性很高。怎么办呢?一般只要你需要使用单用户模式,必须要让当地的驻场工程师帮你重启服务器!所以我们使用Vmware来模拟一下:

 

wKiom1kwAUPQVfk-AAEODqO9j9E334.png

进入此界面后,上下晃动鼠标,输入“e”进入GRUB页面!

wKioL1kwAUOBwnVaAABoeyPCCZk705.png

进入后,找到linux16 开头的一行!按向右的方向键,定位到ro 然后修改ro为rw,并添加如下红框内的命令行!

wKioL1kwAUWjIsPLAAD8MuxtS_k246.png

使用下面的提示使用“Ctrl-x”start!!!

进入系统后,其实只是进入了一个安全模式下的内存系统,并不是真正的咱们正常使用的linux系统,

当我们输入命令

1
#ls /sysroot/ 下才是我们正常的系统里面的文件!

wKiom1kwAUaD9QjKAAEPgne0p7Q399.png

使用命令

1
#chroot /sysroot/ 切换到正常系统中去!

现在我们就可以更改root的密码了!

1
#passwd root

就可以修改密码了(如果linux系统是中文的会出现乱码,使用  “#LANG=en”  即可)。

wKiom1kwAUbzAHzOAABjYEHTpTQ036.png

注意一定要在修改完密码后,输入

#touch /.autorelabel

不然会导致系统无法正常登陆!

这样就完成了,

wKioL1kwAUeC3fx8AAE26yK51QQ787.png

重新启动即可!!!

下面我要分享一下因为个人的粗心大意,导致系统不可以正常启动,这要是真正的IDC机房,可就不好整了!所以建议大家,一定要仔细!三思而后行!!!

其实我是想永久关闭selinux防火墙,如下图:

wKioL1kwAUewCwxFAAA_jDsIUZc927.png

我直接修改SELINUXTYPE=disabled了,所以导致开机不可以正常启动了!

修改方法就是如上所讲的单用户模式进入修改即可!!!

 

救援模式

 

CentOS 7 与6不同之处就是 2 3 4的运行级别全部都是多用户模式

使用如下命令查看:

#ls -l /usr/lib/systemd/system/runlevel*target

 

wKiom1kwAuWy599YAAQanpWi9Gw921.png

首先我们关闭系统(init 0 OR poweroff),点击虚拟机标签,启动时进入BIOS:

wKioL1kwAubQwvw3AAHP7s4ZCaE264.png

然后通过上下箭头调节CD-ROM至第一启动项,按F10保存:

wKioL1kwAuegLlJKAAJKZrDCS3s960.png

然后咱们的虚拟机就会开机进入光盘(是不是很熟悉的界面,首次安装linux时的界面),移动到第三项 Troubleshooting

wKiom1kwAuiRGmN9AADjZCQ-WdY849.png

选择救援模式–Rescue a CentOS Linux system:

wKioL1kwAunylcbJAAFM1Rlmoe0343.png

出现如下界面再次输入 1 回车

wKiom1kwAurS3TXyAAG3w0nRzvU920.png

继续回车

wKioL1kwAu6gHysbAAIZsikeMLY333.png

然后就真正到了救援模式的系统,但是和单用户模式一样的是,这不是我们真正的linux运行系统,查看文件之类的首先我们需要输入:

#chroot /mnt/sysimage

wKiom1kwAu_BTdcQAAIZDXkCYHU076.png

然后下面我们就可以查看系统内的文件或者直接修改密码或者重新修改/etc目录下的配置文件即可!

wKiom1kwAu_AjJCiAABMOSzl748768.png

然后我们再次点击编辑咱们的虚拟机,把DVD设备状态断开如下所示,或者进入BIOS恢复启动即可!

wKioL1kwAvLQ9LpVAAK7L-oS5SI817.png

 

至此两种修复系统的方法就结束了!

TAGS:
十一月 30th, 2017

有个Linux的服务器,2G内存的,今天登上去一看,内存竟然被占得满满的。
ssh上去执行了free.

free -m
total        used        free      shared  buff/cache   available
Mem:           2000         182         191           3        1625        1614
Swap:             0           0           0

发现内存全在一个[buff/cache]里.
查询资料得知可以通过proc下的一个文件释放,
以下原文:

/proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段.也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整.那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存.操作如下:
[root@server test]# cat /proc/sys/vm/drop_caches
0
首先,/proc/sys/vm/drop_caches的值,默认为0
[root@server test]# sync
手动执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行 sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件)
[root@server test]# echo 3 > /proc/sys/vm/drop_caches
[root@server test]# cat /proc/sys/vm/drop_caches
3
将/proc/sys/vm/drop_caches值设为3
[root@server test]# free -m
total used free shared buffers cached
Mem: 249 66 182 0 0 11
-/+ buffers/cache: 55 194
Swap: 511 0 511
再来运行free命令,发现现在的used为66MB,free为182MB,buffers为0MB,cached为11MB.那么有效的释放了buffer和cache.

根据资料,只需要执行下面2个命令,即可释放:

sync
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches
TAGS: ,
十一月 30th, 2017

第1章 数据实时同步介绍

1.1 什么是实时同步:如何实现实时同步

A. 要利用监控服务(inotify),监控同步数据服务器目录中信息的变化

B. 发现目录中数据产生变化,就利用rsync服务推送到备份服务器上

1.2 实现实时同步的方法

inotify+rsync 方式实现数据同步

sersync 方式实现实时数据同步

1.2.1 实时同步原理介绍

1.3 inotify+rsync 方式实现数据同步

1.3.1 Inotify简介

Inotify是一种强大的,细粒度的。异步的文件系统事件监控机制,linux内核从2.6.13起,加入了 Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而 inotify-tools 正是实施这样监控的软件。国人周洋在金山公司也开发了类似的实时同步软件sersync。

提示信息:

sersync软件实际上就是在 inotify软件基础上进行开发的,功能要更加强大些 ,多了定时重传机制,过滤机制了提供接口做 CDN,支持多线程橾作。

Inotify实际是一种事件驱动机制,它为应用程序监控文件系统事件提供了实时响应事件的机制,而无须通过诸如cron等的轮询机制来获取事件。cron等机制不仅无法做到实时性,而且消耗大量系统资源。相比之下,inotify基于事件驱动,可以做到对事件处理的实时响应,也没有轮询造成的系统资源消耗,是非常自然的事件通知接口,也与自然世界事件机制相符合。

inotify的实现有几款软件:

inotify-tools,sersync,lrsyncd

1.3.2 inotify+rsync使用方式

inotify 对同步数据目录信息的监控

rsync  完成对数据信息的实时同步

利用脚本进行结合

1.4 部署inotify软件的前提

需要2.6.13以后内核版本才能支持inotify软件。2.6.13内核之后版本,在没有安装inotify软件之前,应该有这三个文件。

[root@backup ~]# ll /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Oct 17 10:12 max_queued_events
-rw-r--r-- 1 root root 0 Oct 17 10:12 max_user_instances
-rw-r--r-- 1 root root 0 Oct 17 10:12 max_user_watches

1.4.1 三个重要文件的说明

文件

默认值

作用说明

max_user_watches 8192 设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)
max_user_instances 128 设置每个用户可以运行的inotifywait或inotifywatch命令的进程数
max_queued_events 16384 设置inotify实例事件(event)队列可容纳的事件数量

1.4.2 【服务优化】可以将三个文件的数值调大,监听更大的范围

1.4.3 【官方说明】三个重要文件

[root@nfs01 ~]# man proc
/proc/sys/fs/inotify (since Linux 2.6.13)
       This   directory   contains    files    max_queued_events,
       max_user_instances, and max_user_watches, that can be used
       to limit the amount of kernel memory consumed by the  inotify interface. 
for further details, see inotify(7).

通过man手册的第7级别中查到 inotify的默认文件的详细说明。

[root@nfs01 ~]# man 7 inotify
/proc/sys/fs/inotify/max_queued_events
       The  value  in this file is used when an application calls
       inotify_init(2) to set an upper limit  on  the  number  of
       events  that  can  be  queued to the corresponding inotify
       instance.  Events in excess of this limit are dropped, but
       an IN_Q_OVERFLOW event is always generated.
 
/proc/sys/fs/inotify/max_user_instances
       This  specifies  an  upper  limit on the number of inotify
       instances that can be created per real user ID.
 
/proc/sys/fs/inotify/max_user_watches
       This specifies an upper limit on  the  number  of  watches
       that can be created per real user ID.

1.5 inotify软件介绍及参数说明

1.5.1 两种安装方式

1) yum install -y inotify-tools

2) 手工编译安装

注:

YUM 安装需要有epel源

http://mirrors.aliyun.com

手工编译安装方式需要到github上进行下载软件包

inotify软件的参考资料链接:

https://github.com/rvoicilas/inotify-tools/wiki

1.5.2 inotify主要安装的两个软件

inotifywait(主要)

在被监控的文件或目录上等待特定文件系统事件(open close delete等)发生,执行后处于阻塞状态,适合在shell脚本中使用

inotifywatch:

收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计。

说明:在实时实时同步的时候,主要是利用inotifywait对目录进行监控

1.5.3 inotifywait命令参数说明

参数

含义

-m, –monitor

(重要参数)

Keep listening for events forever.  Without this option, inotifywait will exit after one event is received.

始终保持事件监听。

-d, –daemon 111
-r, –recursive

(重要参数)

Watch all subdirectories of any directories passed as arguments.

递归监控目录数据信息变化

-o, –outfile <file> Print events to <file> rather than stdout.

打印事件到文件中,相当于标准正确输出

-s, –syslog Output errors to syslog(3) system log module rather than stderr.

发送错误到syslog相当于标准错误输出

-q, –quiet

(重要参数)

If specified once, the program will be less verbose.  Specifically, it will not state  when  it  has  completed establishing all inotify watches.

输出信息少(只打印事件信息)

–exclude <pattern> Exclude all events on files matching the extended regular expression <pattern>.

排除文件或目录

–excludei <pattern> Like –exclude but case insensitive.

排除文件或目录时,不区分大小写

–timefmt <fmt>

(重要参数)

Print using a specified printf-like format string; read the man page for more details.

指定时间输出格式

–format <fmt>

(重要参数)

Print using a specified printf-like formatstring; read the man page for more details.

打印使用指定的输出类似格式字符串;即实际监控输出内容

-e

(重要参数)

Listen for specific event(s).  If omitted, all events are listened for.

指定监听指定的事件,如果省略,表示所有事件都进行监听

以上的信息可以通过 inotifywait –help  获得

1.5.4 -e[参数]  可以指定的事件类型

事件名称

事件说明

access file or directory contents were read

文件或目录内容被读取

modify file or directory contents were writterv

文件或目录内容被写入

attrib file or directory attributes changed

文件或目录属性改变

close_write

(重要参数)

file or directory closed, after being opened in writeable mode.

文件或目录关闭,在写入模式打开之后关闭的。

close_nowrite file or directory closed, after being opened in read-only mode.

文件或目录关闭,在只读模式打开之后关闭的

close file or directory closed, regardless of read/write mode

文件或目录关闭,不管读或是写模式

open file or directory opened

文件或目录被打开

moved_to

file or directory moved to watched directory

文件或目录被移动到监控的目录中

moved_from

file or directory moved from watched directory

文件或目录被移动从监控的目录中

move

(重要参数)

file or directory moved to or from watched directory

文件或目录不管移动到或是移出监控目录都触发事件

create

(重要参数)

file or directory created within watched directory

文件或目录创建在监控目录中

delete

(重要参数)

file or directory deleted within watched directory

文件或目录被删除在监控目录中

delete_self file or directory was deleted

文件或目录被删除,目录本身被删除

unmount file system containing file or directory unmounted
以上的信息可以通过 inotifywait –help  获得

1.5.4.1 【实例】inotifywait监控中的事件测试

1、创建事件

[root@nfs01 data]# touch test2.txt
[root@nfs01 ~]# inotifywait -mrq  /data --timefmt "%d-%m-%y %H:%M" --format "%T %w%f 事件信息: %e" -e create
17-10-17 11:19 /data/test2.txt 事件信息: CREATE

2、删除事件

[root@nfs01 data]# \rm -f test1.txt
[root@nfs01 ~]# inotifywait -mrq  /data --timefmt "%d-%m-%y %H:%M" --format "%T %w%f 事件信息: %e" -e delete
17-10-17 11:28 /data/test1.txt 事件信息: DELETE

3、修改事件

[root@nfs01 data]# echo "132" > test.txt
[root@nfs01 ~]# inotifywait -mrq  /data --timefmt "%d-%m-%y %H:%M" --format "%T %w%f 事件信息: %e" -e close_write
17-10-17 11:30 /data/test.txt 事件信息: CLOSE_WRITE,CLOSE

4、移动事件 moved_to

[root@nfs01 data]# mv /etc/hosts .
[root@nfs01 ~]# inotifywait -mrq  /data --timefmt "%d-%m-%y %H:%M" --format "%T %w%f 事件信息: %e" -e moved_to
17-10-17 11:33 /data/hosts 事件信息: MOVED_TO

移动事件 moved_from

[root@nfs01 data]# mv ./hosts  /tmp/
[root@nfs01 ~]# inotifywait -mrq  /data --timefmt "%d-%m-%y %H:%M" --format "%T %w%f 事件信息: %e" -e moved_from
17-10-17 11:34 /data/hosts 事件信息: MOVED_FROM

1.5.5 inotifywait 参数 –format <fmt>格式定义参数

命令参数

参数说明

%w(重要参数) 事件出现时,监控文件或目录的名称信息
%f(重要参数) 事件出现时,将显示监控目录下触发事件的文件或目录信息,否则为空
%e(重要参数) 显示发生的事件信息,不同的事件信息用逗号进行分隔
%Xe 显示发生的事件信息,不同的事件信息有x进行分隔,可以修改X为指定分隔符
%T(重要参数) 输出时间格式中定义的时间格式信息,通过 –timefmt option 语法格式指定时间信息

这个格式是通过strftime函数进行匹配时间格式信息的

以上的信息可以通过 inotifywait –help  获得

1.5.6 inotifywait 参数–timefmt <fmt>时间格式参数

命令参数

参数说明

%d(重要参数) The day of the month as a decimal number(range 01 to 31)

每月的第几天,显示倍息为十进制数(范围是 01-31 )

%m(重要参数) The month as a decimal number (range 01 to 12).

显示月份,显示信息为十进制(范围 01-12 )

%M The minute as a decimal number (range 00 to 59).

显示分钟,显示信息为十进制(范围 00-59 )

%y(重要参数) The year as a decimal number without a century (range 00 to 99).

年份信息,显示信息为十进制,并且没有世纪信息

%Y The year as a decimal number including the century.

年份信息,显示信息为十进制,并且包含世纪信息

%H The hour as a decimal number using a 24-hour clock (range 00 to 23).

小时信息,显示信息为十进制,使用 24小时制(范围 00-23 )

说明:以上信息可以通过 man strftime信息获取

1.5.6.1 修改输出的日期格式

[root@nfs01 ~]# inotifywait -mrq  /data --timefmt "%d/%m/%y %H:%M" --format "%T %w%f"
17/10/17 11:12 /data/test1.txt

1.5.7 -e[参数] 重要监控事件参数汇总表:

重要事件 包含事件 备注说明
close close_write

close_nowrite

文件或目录关闭,不管读或是写模式

即包含写关闭与读关闭

close_write create 包含文件创建事件,但不包含目录创建事件
move moved_to

moved_from

文件或目录不管移动到或是移动出监控目录都触发事件

即包含信息移入或移出监控目录事件

重要参数汇总:根据以上说明,在实际使用时,只要监控以下事件即可

create 创建、 delete 删除、 movedjto 移入、 close_write 修 改

inotifywait -mrq /data –format “%w%f”  -e create,delete,moved_to,close_write

1.6 对inotifywait命令的测试

对inotifywait命令测试的说明:

需要打开两个连接窗口

1窗口运行inotifywait

2窗口对文件夹进行操作,可在一窗口中查看出inotifywait的监控记录

1.6.1 、创建文件的逻辑↓

[root@nfs01 ~]# inotifywait /data
Setting up watches.
Watches established.
/data/ CREATE test1.txt
/data/ OPEN test1.txt
/data/ ATTRIB test1.txt
/data/ CLOSE_WRITE,CLOSE test1.txt
创建文件,inotifywait显示创建文件的过程↑
[root@nfs01 data]# touch test1.txt

1.6.2 创建目录逻辑↓

[root@nfs01 data]# mkdir testdir
[root@nfs01 ~]#
/data/ CREATE,ISDIR testdir

1.6.3 监控子目录下的文件↓

[root@nfs01 data]# touch  testdir/test01.txt
[root@nfs01 ~]# inotifywait -mrq  /data
/data/testdir/ OPEN test01.txt
/data/testdir/ ATTRIB test01.txt
/data/testdir/ CLOSE_WRITE,CLOSE test01.txt

1.6.4 sed命令修改逻辑

[root@nfs01 data]# sed 's#132#123#g' test.txt -i
 
[root@nfs01 ~]# inotifywait -mrq  /data --timefmt "%d-%m-%y %H:%M" --format "%T %w%f 事件信息: %e" -e moved_from
 /data/test.txt 事件信息: OPEN
 /data/sedDh5R8v 事件信息: CREATE
 /data/sedDh5R8v 事件信息: OPEN
 /data/test.txt 事件信息: ACCESS
 /data/sedDh5R8v 事件信息: MODIFY
 /data/sedDh5R8v 事件信息: ATTRIB
 /data/sedDh5R8v 事件信息: ATTRIB
 /data/test.txt 事件信息: CLOSE_NOWRITE,CLOSE
 /data/sedDh5R8v 事件信息: CLOSE_WRITE,CLOSE
 /data/sedDh5R8v 事件信息: MOVED_FROM
 /data/test.txt 事件信息: MOVED_TO

sed命令替换逻辑

01. 创建临时文件

02. 将原文件内容放置到临时文件中,修改替换临时文件中的内容,原有文件不做改动

03. 重命名临时文件,覆盖原文件

1.6.5 inotifywait监控中 -e 的参数使用

inotifywait -mrq /data --timefmt "%d/%m/%y %H:%M" --format "%T %w%f 事件信息: %e" -e create

说明:表示只监听create事件

inotifywait -mrq /data --timefmt "%d/%m/%y %H:%M" --format "%T %w%f 事件信息: %e"

说明:不指定-e参数,表示监听所有事件

02. 删除事件delete

    # inotifywait -mrq /data --timefmt "%F %H:%M" --format "%T %w%f 事件信息: %@e" -e delete
    2017-10-17 11:28 /data/02.txt 事件信息: DELETE
    2017-10-17 11:28 /data/03.txt 事件信息: DELETE
    2017-10-17 11:28 /data/04.txt 事件信息: DELETE

03. 修改事件close_write

  # inotifywait -mrq /data --timefmt "%F %H:%M" --format "%T %w%f 事件信息: %@e" -e delete,close_write
    2017-10-17 11:30 /data/oldgirl.txt 事件信息: CLOSE_WRITE@CLOSE
    2017-10-17 11:30 /data/.oldgirl.txt.swx 事件信息: CLOSE_WRITE@CLOSE
    2017-10-17 11:30 /data/.oldgirl.txt.swx 事件信息: DELETE
    2017-10-17 11:30 /data/.oldgirl.txt.swp 事件信息: CLOSE_WRITE@CLOSE
    2017-10-17 11:30 /data/.oldgirl.txt.swp 事件信息: DELETE
    2017-10-17 11:30 /data/.oldgirl.txt.swp 事件信息: CLOSE_WRITE@CLOSE
    2017-10-17 11:30 /data/.oldgirl.txt.swp 事件信息: DELETE

04. 移动事件moved_to

    inotifywait -mrq /data --timefmt "%F %H:%M" --format "%T %w%f 事件信息: %@e" -e delete,close_write,moved_to
    2017-10-17 11:34 /data/hosts 事件信息: MOVED_TO

1.7 实时同步命令参数示意图

第2章 inotify+rsync实时同步服务部署

2.1 第一个里程碑:部署rsync服务

2.1.1 rsync服务端部署

1)软件是否存在

[root@backup ~]# rpm -qa |grep rsync
rsync-3.0.6-12.el6.x86_64

需求:查询到某个命令非常有用。但是不知道属于哪个软件包

yum provides rysnc

provides  Find what package provides the given value

2)进行软件服务配置

[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
auth users = rsync_backup
secrets file = /etc/rsync.password

[backup]
comment = "backup dir by oldboy"
path = /backup

[nfsbackup]
comment = "nfsbackup dir by hzs"
path = /nfsbackup

3)创建rsync管理用户

[root@backup ~]# useradd -s /sbin/nologin -M rsync

4)创建数据备份储存目录,目录修改属主

[root@backup ~]# mkdir /nfsbackup/
[root@backup ~]# chown -R rsync.rsync /nfsbackup/

5)创建认证用户密码文件并进行授权600

echo "rsync_backup:oldboy123" >>/etc/rsync.password
chmod 600 /etc/rsync.password

6)启动rsync服务

rsync --daemon

至此服务端配置完成

[root@backup ~]# ps -ef |grep rsync
root       2076      1  0 17:05 ?        00:00:00 rsync --daemon
root       2163   1817  0 17:38 pts/1    00:00:00 grep --color=auto rsync

2.1.2 rsync客户端配置

1)软件是否存在

[root@backup ~]# rpm -qa |grep rsync
rsync-3.0.6-12.el6.x86_64

2)创建安全认证文件,并进行修改权限600

echo "oldboy123" >>/etc/rsync.password
chmod 600 /etc/rsync.password

3) 测试数据传输

[root@nfs01 sersync]# rsync -avz /data  rsync_backup@172.16.1.41::nfsbackup  --password-file=/etc/rsync.password
sending incremental file list
data/
data/.hzs
data/.tar.gz
data/.txt

2.2 第二个里程碑:部署inotify服务

首先先确认是否有epel用来安装inotify-tools软件

[root@nfs01 ~]# yum repolist
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * epel: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
repo id  repo name                                       status
base     CentOS-6 - Base - mirrors.aliyun.com             6,706
epel     Extra Packages for Enterprise Linux 6 - x86_64  12,401
extras   CentOS-6 - Extras - mirrors.aliyun.com              46
updates  CentOS-6 - Updates - mirrors.aliyun.com            722
repolist: 19,875

2.2.1 安装inotify软件

两种安装方式

1) yum install -y inotify-tools

2) 手工编译安装

注:

手工编译安装方式需要到github上进行下载软件包

inotify软件的参考资料链接:

https://github.com/rvoicilas/inotify-tools/wiki

2.2.2 查看inotify安装上的两个命令(inotifywait,inotifywatch)

[root@nfs01 ~]# rpm -ql inotify-tools
/usr/bin/inotifywait      #主要
/usr/bin/inotifywatch

2.2.2.1 inotifywait和inotifywatch的作用:

一共安装了2个工具(命令),即inotifywait和inotifywatch
inotifywait : 在被监控的文件或目录上等待特定文件系统事件(open close delete等)发生,
执行后处于阻塞状态,适合在shell脚本中使用
inotifywatch :收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计。
说明:yum安装后可以直接使用,如果编译安装需要进入到相应软件目录的bin目录下使用
 
#命令 man手册说明
# man inotifywait
inotifywait - wait for changes to files using inotify

使用inotify进行监控,等待产生变化的文件信息
# man inotifywatch
inotifywatch - gather filesystem access statistics using inotify
使用inotify进行监控,收集文件系统访问统计佶息

2.3 第三个里程碑:编写脚本,实现rsync+inotify软件功能结合

2.3.1 rsync服务命令:

rsync -avz --delete /data/ rsync_backup@172.16.1.41::nfsbackup --password-file=/etc/rsync.password

2.3.2 inotify服务命令:

inotifywait -mrq /data -format "%w%f"  -e create,delete,move_to,close_write

2.3.3 编写脚本:

[root@nfs01 sersync]# vim /server/scripts/inotify.sh
#!/bin/bash
inotifywait -mrq /data --format "%w%f" -e create,delete,moved_to,close_write|\
while read line
do
        rsync -az --delete /data/ rsync_backup@172.16.1.41::nfsbackup --password-
file=/etc/rsync.password
done

脚本说明:

for循环会定义一个条件,当条件不满足时停止循环

while循环:只要条件满足就一直循环下去

2.3.4 对脚本进行优化

#!/bin/bash
Path=/data
backup_Server=172.16.1.41
/usr/bin/inotifywait -mrq --format '%w%f' -e create,close_write,delete /data  | while read line  
do
    if [ -f $line ];then
        rsync -az $line --delete rsync_backup@$backup_Server::nfsbackup --password-file=/etc/rsync.password
    else
        cd $Path &&\
        rsync -az ./ --delete rsync_backup@$backup_Server::nfsbackup --password-file=/etc/rsync.password
    fi
done

2.4 第四个里程碑:测试编写的脚本

2.4.1 让脚本在后台运行

在/data 目录先创建6个文件

[root@nfs01 data]# sh  /server/scripts/inotify.sh &
[root@nfs01 data]# touch {1..6}.txt

在backup服务器上,已经时候同步过去了6个文件。

[root@backup ~]# ll /nfsbackup/
total 8
-rw-r--r-- 1 rsync rsync 0 Oct 17 12:06 1.txt
-rw-r--r-- 1 rsync rsync 0 Oct 17 12:06 2.txt
-rw-r--r-- 1 rsync rsync 0 Oct 17 12:06 3.txt
-rw-r--r-- 1 rsync rsync 0 Oct 17 12:06 4.txt
-rw-r--r-- 1 rsync rsync 0 Oct 17 12:06 5.txt
-rw-r--r-- 1 rsync rsync 0 Oct 17 12:06 6.txt

2.5 利用while循环语句编写的脚本停止方法(kill)

01. ctrl+z暂停程序运行,kill -9杀死
02. 不要暂停程序,直接利用杀手三剑客进行杀进程

 说明:kill三个杀手不是万能的,在进程暂停时,无法杀死;kill -9 (危险)

2.5.1 查看后台都要哪些程序在运行

[root@nfs01 data]# jobs
[1]+  Running                 sh /server/scripts/inotify.sh &

2.5.2 fg将后台的程序调到前台来

[root@nfs01 data]# fg 1
sh /server/scripts/inotify.sh

2.6 进程的前台和后台运行方法:

    fg    — 前台

bg    — 后台

2.6.1 脚本后台运行方法

    01. sh inotify.sh &
    02. nohup sh inotify.sh &
    03. screen实现脚本程序后台运行

sh /server/scripts/inotify.sh &

nohup

nohup sh inotify.sh &

2.7 screen实现脚本程序后台运行

2.7.1 经过yum查找发现screen命令属于screen包

[root@test ~]# yum provides screen
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * epel: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
base                                                      | 3.7 kB     00:00    
epel                                                      | 4.3 kB     00:00    
extras                                                    | 3.4 kB     00:00    
updates                                                   | 3.4 kB     00:00    
screen-4.0.3-19.el6.x86_64 : A screen manager that supports multiple logins on
                           : one terminal
Repo        : base
Matched from:

2.7.2 安装screen软件

[root@test ~]# yum install -y  screen

2.7.3 screen命令的参数

在shell中输入 screen即可进入screen 视图

[root@test ~]# screen

Screen实现后台运行程序的简单步骤:

  screen -ls :可看screen会话

screen -r ID :指定进入哪个screen会话

Screen命令中用到的快捷键

  Ctrl+a c :创建窗口

Ctrl+a w :窗口列表

Ctrl+a n :下一个窗口

Ctrl+a p :上一个窗口

Ctrl+a 0-9 :在第0个窗口和第9个窗口之间切换

Ctrl+a K(大写) :关闭当前窗口,并且切换到下一个窗口 ,

(当退出最后一个窗口时,该终端自动终止,并且退回到原始shell状态)

exit :关闭当前窗口,并且切换到下一个窗口

(当退出最后一个窗口时,该终端自动终止,并且退回到原始shell状态)

Ctrl+a d :退出当前终端,返回加载screen前的shell命令状态

Ctrl+a ” : 窗口列表不同于w

TAGS: ,
十一月 30th, 2017

了解运行级别是如何配置的,如何改变系统运行级别以及修改对应状态下运行的服务。

在 Linux 系统中,运行级别run level是指运维的级别,用于描述一种表明什么服务是可用的系统运行状态。

运行级别 1 是严格限制的,仅仅用于系统维护;该级别下,网络连接将不可操作,但是管理员可以通过控制台连接登录系统。

其他运行级别的系统允许任何人登录和使用,但是不同级别中可使用的服务不同。本文将探索如何配置运行级别,如何交互式改变系统运行级别以及修改该状态下可用的服务。

Linux 系统的默认运行状态是一个在系统开机时使用的运行级别(除非有其他的指示),它通常是在 /etc/inittab 文件中进行配置的,该文件内容通常如下:

  1. id:3:initdefault

包括 Debian 系统在内的一些系统,默认运行级别为 2,而不是上述文件中的 3,甚至都没有 /etc/inittab 文件。

运行级别在默认情况下是如何被配置,其配置依赖于你所运行的 Linux 操作系统的具体发行版本。 例如,在某些系统中, 运行级别 2 是多用户模式,运行级别 3 是多用户模式并支持 NFS (网络文件系统)。 在另外一些系统,运行级别 2 – 5 基本相同,运行级别 1 是单用户模式。例如,Debian 系统的所用运行级别如下:

  1. 0 = 停机
  2. 1 = 单用户(维护模式)
  3. 2 = 多用户模式
  4. 3-5 = 2 一样
  5. 6 = 重启

在 Linux 系统上,运行级别 3 用于共享文件系统给其它系统,可以方便地只通过改变系统的运行级别来启动和停止文件系统共享。系统从运行级别 2 改变到 3 系统将允许文件系统共享,反之从运行级别 3 改变到 2 则系统不支持文件系统共享。

在某个运行级别中,系统运行哪些进程依赖于目录 /etc/rc?.d 目录的内容,其中 ? 可以是 2、 3、 4 或 5 (对应于相应的运行级别)。

在以下示例中(Ubuntu 系统),由于这些目录的配置是相同的,我们将看见上述 4 个级别对应的目录中的内容是一致的。

  1. /etc/rc2.d$ ls
  2. README S20smartmontools S50saned S99grub-common
  3. S20kerneloops S20speech-dispatcher S70dns-clean S99ondemand
  4. S20rsync S20sysstat S70pppd-dns S99rc.local
  5. /etc/rc2.d$ cd ../rc3.d
  6. /etc/rc3.d$ ls
  7. README S20smartmontools S50saned S99grub-common
  8. S20kerneloops S20speech-dispatcher S70dns-clean S99ondemand
  9. S20rsync S20sysstat S70pppd-dns S99rc.local
  10. /etc/rc3.d$ cd ../rc4.d
  11. /etc/rc4.d$ ls
  12. README S20smartmontools S50saned S99grub-common
  13. S20kerneloops S20speech-dispatcher S70dns-clean S99ondemand
  14. S20rsync S20sysstat S70pppd-dns S99rc.local
  15. /etc/rc4.d$ cd ../rc5.d
  16. /etc/rc5.d$ ls
  17. README S20smartmontools S50saned S99grub-common
  18. S20kerneloops S20speech-dispatcher S70dns-clean S99ondemand
  19. S20rsync S20sysstat S70pppd-dns S99rc.local

这些都是什么文件?它们都是指向 /etc/init.d 目录下用于启动服务的脚本符号连接。 这些文件的文件名是至关重要的, 因为它们决定了这些脚本文件的执行顺序,例如, S20 脚本是在 S50 脚本前面运行的。

  1. $ ls -l
  2. total 4
  3. -rw-r--r-- 1 root root 677 Feb 16 2016 README
  4. lrwxrwxrwx 1 root root 20 Aug 30 14:40 S20kerneloops -> ../init.d/kerneloops
  5. lrwxrwxrwx 1 root root 15 Aug 30 14:40 S20rsync -> ../init.d/rsync
  6. lrwxrwxrwx 1 root root 23 Aug 30 16:10 S20smartmontools -> ../init.d/smartmontools
  7. lrwxrwxrwx 1 root root 27 Aug 30 14:40 S20speech-dispatcher -> ../init.d/speech-dispatcher
  8. lrwxrwxrwx 1 root root 17 Aug 31 14:12 S20sysstat -> ../init.d/sysstat
  9. lrwxrwxrwx 1 root root 15 Aug 30 14:40 S50saned -> ../init.d/saned
  10. lrwxrwxrwx 1 root root 19 Aug 30 14:40 S70dns-clean -> ../init.d/dns-clean
  11. lrwxrwxrwx 1 root root 18 Aug 30 14:40 S70pppd-dns -> ../init.d/pppd-dns
  12. lrwxrwxrwx 1 root root 21 Aug 30 14:40 S99grub-common -> ../init.d/grub-common
  13. lrwxrwxrwx 1 root root 18 Aug 30 14:40 S99ondemand -> ../init.d/ondemand
  14. lrwxrwxrwx 1 root root 18 Aug 30 14:40 S99rc.local -> ../init.d/rc.local

如你所想,目录 /etc/rc1.d 因运行级别 1 的特殊而不同。它包含的符号链接指向非常不同的一套脚本。 同样也要注意到其中一些脚本以 K 开头命名,而另一些与其它运行级别脚本一样以 S 开头命名。这是因为当系统进入单用户模式时, 一些服务需要停止。 然而这些 K 开头的符号链接指向了其它级别 S 开头的符号链接的同一文件时, K(kill)表示这个脚本将以指示其停止的参数执行,而不是以启动的参数执行。

  1. /etc/rc1.d$ ls -l
  2. total 4
  3. lrwxrwxrwx 1 root root 20 Aug 30 14:40 K20kerneloops -> ../init.d/kerneloops
  4. lrwxrwxrwx 1 root root 15 Aug 30 14:40 K20rsync -> ../init.d/rsync
  5. lrwxrwxrwx 1 root root 15 Aug 30 14:40 K20saned -> ../init.d/saned
  6. lrwxrwxrwx 1 root root 23 Aug 30 16:10 K20smartmontools -> ../init.d/smartmontools
  7. lrwxrwxrwx 1 root root 27 Aug 30 14:40 K20speech-dispatcher -> ../init.d/speech-dispatcher
  8. -rw-r--r-- 1 root root 369 Mar 12 2014 README
  9. lrwxrwxrwx 1 root root 19 Aug 30 14:40 S30killprocs -> ../init.d/killprocs
  10. lrwxrwxrwx 1 root root 19 Aug 30 14:40 S70dns-clean -> ../init.d/dns-clean
  11. lrwxrwxrwx 1 root root 18 Aug 30 14:40 S70pppd-dns -> ../init.d/pppd-dns
  12. lrwxrwxrwx 1 root root 16 Aug 30 14:40 S90single -> ../init.d/single

你可以改变系统的默认运行级别,尽管这很少被用到。例如,通过修改前文中提到的 /etc/inittab 文件,你能够配置 Debian 系统的默认运行级别为 3 (而不是 2),以下是该文件示例:

  1. id:3:initdefault:

一旦你修改完成并重启系统, runlevel 命令将显示如下:

  1. $ runlevel
  2. N 3

另外一种可选方式,使用 init 3 命令,你也能改变系统运行级别(且无需重启立即生效), runlevel 命令的输出为:

  1. $ runlevel
  2. 2 3

当然,除非你修改了系统默认级别的 /etc/rc?.d 目录下的符号链接,使得系统默认运行在一个修改的运行级别之下,否则很少需要通过创建或修改 /etc/inittab 文件改变系统的运行级别。

在 Linux 系统中如何使用运行级别?

为了扼要重述在系统中如何使用运行级别,下面有几个关于运行级别的快速问答问题:

如何查询系统当前的运行级别?

使用 runlevel 命令。

如何查看特定运行级别所关联的服务进程?

查看与该运行级别关联的运行级别开始目录(例如, /etc/rc2.d 对应于运行级别 2)。

如何查看系统的默认运行级别?

首先,查看 /etc/inittab 文件是否存在。如果不存在,就执行 runlevel 命令查询,你一般就已经处在该运行级别。

如何改变系统运行级别?

init 命令(例如 init 3)临时改变运行级别,通过修改或创建 /etc/inittab 文件永久改变其运行级别。

能改变特定运行级别下运行的服务么?

当然,通过改变对应的 /etc/rc?.d 目录下的符号连接即可。

还有一些其他的什么需要考虑?

当改变系统运行级别时,你应该特别小心,确保不影响到系统上正在运行的服务或者正在使用的用户。

TAGS:
十一月 30th, 2017

你可以通过这三个 Linux 网络命令,了解有关你网络连接的大量信息。iftop 通过进程号跟踪网络连接,Nethogs 可以快速显示哪个在占用你的带宽,而 vnstat 作为一个很好的轻量级守护进程运行,可以随时随地记录你的使用情况。

iftop

iftop 监听你指定的网络接口,并以 top 的形式展示连接。

这是一个很好的小工具,用于快速识别占用、测量速度,并保持网络流量的总体运行。看到我们使用了多少带宽是非常令人惊讶的,特别是对于我们这些还记得使用电话线、调制解调器、让人尖叫的 Kbit 速度和真实的实时波特率的老年人来说。我们很久以前就放弃了波特率,转而使用比特率。波特率测量信号变化,有时与比特率相同,但大多数情况下不是。

如果你只有一个网络接口,可以不带选项运行 iftopiftop 需要 root 权限:

  1. $ sudo iftop

当你有多个接口时,指定要监控的接口:

  1. $ sudo iftop -i wlan0

就像 top 一样,你可以在运行时更改显示选项。

  • h 切换帮助屏幕。
  • n 切换名称解析。
  • s 切换源主机显示,d 切换目标主机。
  • s 切换端口号。
  • N 切换端口解析。要全看到端口号,请关闭解析。
  • t 切换文本界面。默认显示需要 ncurses。我认为文本显示更易于阅读和更好的组织(图1)。
  • p 暂停显示。
  • q 退出程序。

图 1:文本显示是可读的和可组织的。

图 1:文本显示是可读的和可组织的。

当你切换显示选项时,iftop 会继续测量所有流量。你还可以选择要监控的单个主机。你需要主机的 IP 地址和网络掩码。我很好奇 Pandora 在我那可怜的带宽中占用了多少,所以我先用 dig 找到它们的 IP 地址:

  1. $ dig A pandora.com
  2. [...]
  3. ;; ANSWER SECTION:
  4. pandora.com. 267 IN A 208.85.40.20
  5. pandora.com. 267 IN A 208.85.40.50

网络掩码是什么? ipcalc 告诉我们:

  1. $ ipcalc -b 208.85.40.20
  2. Address: 208.85.40.20
  3. Netmask: 255.255.255.0 = 24
  4. Wildcard: 0.0.0.255
  5. =>
  6. Network: 208.85.40.0/24

现在将地址和网络掩码提供给 iftop:

  1. $ sudo iftop -F 208.85.40.20/24 -i wlan0

这不是真的吗?我很惊讶地发现,我珍贵的带宽对于 Pandora 很宽裕,每小时使用大约使用 500Kb。而且,像大多数流媒体服务一样,Pandora 的流量也有峰值,其依赖于缓存来缓解阻塞。

你可以使用 -G 选项对 IPv6 地址执行相同操作。请参阅手册页了解 iftop 的其他功能,包括使用自定义配置文件定制默认选项,并应用自定义过滤器(请参阅 PCAP-FILTER 作为过滤器参考)。

Nethogs

当你想要快速了解谁占用了你的带宽时,Nethogs 是快速和容易的。以 root 身份运行,并指定要监听的接口。它显示了空闲的应用程序和进程号,以便如果你愿意的话,你可以杀死它:

  1. $ sudo nethogs wlan0
  2. NetHogs version 0.8.1
  3. PID USER PROGRAM DEV SENT RECEIVED
  4. 7690 carla /usr/lib/firefox wlan0 12.494 556.580 KB/sec
  5. 5648 carla .../chromium-browser wlan0 0.052 0.038 KB/sec
  6. TOTAL 12.546 556.618 KB/sec

Nethogs 选项很少:在 kb/s、kb、b 和 mb 之间循环;通过接收或发送的数据包进行排序;并调整刷新之间的延迟。请参阅 man nethogs,或者运行 nethogs -h

vnstat

vnstat 是最容易使用的网络数据收集器。它是轻量级的,不需要 root 权限。它作为守护进程运行,并记录你网络统计信息。vnstat 命令显示累计的数据:

  1. $ vnstat -i wlan0
  2. Database updated: Tue Oct 17 08:36:38 2017
  3. wlan0 since 10/17/2017
  4. rx: 45.27 MiB tx: 3.77 MiB total: 49.04 MiB
  5. monthly
  6. rx | tx | total | avg. rate
  7. ------------------------+-------------+-------------+---------------
  8. Oct '17 45.27 MiB | 3.77 MiB | 49.04 MiB | 0.28 kbit/s
  9. ------------------------+-------------+-------------+---------------
  10. estimated 85 MiB | 5 MiB | 90 MiB |
  11. daily
  12. rx | tx | total | avg. rate
  13. ------------------------+-------------+-------------+---------------
  14. today 45.27 MiB | 3.77 MiB | 49.04 MiB | 12.96 kbit/s
  15. ------------------------+-------------+-------------+---------------
  16. estimated 125 MiB | 8 MiB | 133 MiB |

它默认显示所有的网络接口。使用 -i 选项选择单个接口。以这种方式合并多个接口的数据:

  1. $ vnstat -i wlan0+eth0+eth1

你可以通过以下几种方式过滤显示:

  • -h 以小时显示统计数据。
  • -d 以天数显示统计数据。
  • -w-m 按周和月显示统计数据。
  • 使用 -l 选项查看实时更新。

此命令删除 wlan1 的数据库,并停止监控它:

  1. $ vnstat -i wlan1 --delete

此命令为网络接口创建别名。此例使用 Ubuntu 16.04 中的一个奇怪的接口名称:

  1. $ vnstat -u -i enp0s25 --nick eth0

默认情况下,vnstat 监视 eth0。你可以在 /etc/vnstat.conf 中更改此内容,或在主目录中创建自己的个人配置文件。请参见 man vnstat 以获得完整的参考。

你还可以安装 vnstati 创建简单的彩色图(图2):

  1. $ vnstati -s -i wlx7cdd90a0a1c2 -o vnstat.png

图 2:你可以使用 vnstati 创建简单的彩色图表。

图 2:你可以使用 vnstati 创建简单的彩色图表。

TAGS: ,
十一月 29th, 2017

开启端口

firewall-cmd --zone=public --add-port=80/tcp --permanent

命令含义:

–zone #作用域

–add-port=80/tcp #添加端口,格式为:端口/通讯协议

–permanent #永久生效,没有此参数重启后失效

重启防火墙

systemctl restart firewalld

Centos查看端口占用情况命令,比如查看80端口占用情况使用如下命令:

lsof -i tcp:80

列出所有端口

netstat -ntlp
十一月 29th, 2017
vi命令是编辑器,但是有个可怕的地方。如果文件很大,好几十G,那么vi一下,则会把所有文件都会加载到内存中。导致服务器瘫痪。 
因此查看文件,最好用less,cat,tail命令。

less

less(less) 命令可以对文件或其它输出进行分页显示,与moe命令相似,但是比more命令要强大许多。应该说是linux正统查看文件内容的工具。

用法

less [选项]… [文件]…

选项

-? …….. –help 显示帮助
-n …….. –line-numbers
Don’t use line numbers.
-N …….. –LINE-NUMBERS
Use line numbers. 显示每行的行号
-g …….. –hilite-search
Highlight only last match for searches.不加亮显示搜索到的所有关键词,仅显示当前显示的关键字,以提高显示速度;
-G …….. –HILITE-SEARCH
Don’t highlight any matches for searches.
-i …….. –ignore-case
Ignore case in searches that do not contain uppercase. 忽略搜索时的大小写
-I …….. –IGNORE-CASE
Ignore case in all searches.

常用命令

回车键 向下移动一行;
y 向上移动一行;
空格键 向下滚动一屏;
b 向上滚动一屏;
d 向下滚动半屏;
u 向上洋动半屏;
g 跳到第一行;
G 跳到最后一行;
/pattern 搜索pattern n和N控制向上和向下查找
q 退出less

查看命令历史使用记录并通过less分页显示

history | less

less 版 tail –f 动态查看日志文件

使用 less file-name 打开日志文件,按 F 可以实现类似 tail -f 的效果。按ctrl+c退出。

cat

cat (concatenate,连接)命令将[文件]或标准输入组合输出到标准输出,如果没有指定文件,或者文件为”-“,则从标准输入读取。

tac

cat 反向显示

more

more (more) 该命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今己显示的该文件的百分比,方便逐页阅读(file perusal filter for crt viewing) 。more名单中内置了若干快捷键,按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似),使用中按h可以查看说明文件 。

head (head) 用来显示档案的开头至标准输出中。如果指定了多于一个文件,在每一段输出前会给出文件名作为文件头。如果不指定文件,或者文件为”-“,则从标准输入读取数据。

显示文件的前n行
head -n 5 log.txt

输出文件除了最后n行的全部内容
head -n -5 log.txt

tail

tail (tail) 用来显示档案的结尾(默认为10行)至标准输出中。若指定了多于一个文件,程序会在每段输出的开始添加相应文件名作为头。如果不指定文件或文件为”-” ,则从标准输入读取数据。

tail主要是流式查看文件,或者是从末尾查看文件。
tail -50f 文件名
或者tail -n 50 -f 文件名

显示文件的后n行
tail -n 5 log.txt

从第5行开始输出文件
tail -n +5 log.txt

动态显示文件内容
tail -f log.txt

Reference

http://www.cnblogs.com/xqzt/p/5424866.html
http://www.cnblogs.com/xqzt/p/5425331.html
十一月 29th, 2017

说明:之前在CentOS7下配置过bridge,现在讲bridge模式改为普通模式后,查看网卡的时候还是可以看到很多垃圾信息,想彻底删除自己不想要的网卡配置信息,操作如下:

前言

由于服务器centos6.8安装MySQL一直出现不能连接问题,然后看到一个方法,一不小心就把yum给删除了,都还原不了,很是绝望,很难受。然后没有yum这个centos就感觉废了,然后找方法装上去。

python –version查看python 版本
whereis python 查看python文件
python: /usr/bin/python2.6 /usr/bin/python /usr/lib /python2.7 /usr/lib/python2.6 /usr/lib64/python2.7 /usr/lib64/python2.6 /usr/include/python2.7 /usr/share/man/man1/python.1.gz

centos6.8基本底层Python是python2.6, centos7是2.7,我的是centos6.8
解决办法

方法一:

这个网友解决的方法,记录一下

$ rpm -qa | grep python- | grep 2.6
$ sudo rpm -ivh –force –nodeps ftp://mirror.switch.ch/pool/4/mirror/scientificlinux/6.5/x86_64/updates/fastbugs/python-2.6.6-52.el6.x86_64.rpm

解决问题,yum可以使用,原理估计是python回滚到默认的2.6

方法二 :

这个我的解决方法

http://mirrors.163.com/centos/6/os/x86_64/Packages/

1、 到上面这个网站去下载如下RPM包

python-iniparse-0.3.1-2.1.el6.noarch.rpm
yum-metadata-parser-1.1.2-14.1.el6.x86_64.rpm
yum-3.2.29-69.el6.centos.noarch.rpm
yum-plugin-fastestmirror-1.1.30-30.el6.noarch.rpm

2、 下载完成之后,用rpm命令进行安装,如下:

rpm -ivh –force –nodeps python-iniparse-0.3.1-2.1.el6.noarch.rpm
rpm -ivh –force –nodeps yum-metadata-parser-1.1.2-14.1.el6.x86_64.rpm
rpm -ivh –force –nodeps  yum-3.2.29-69.el6.centos.noarch.rpm
yum-plugin-fastestmirror-1.1.30-30.el6.noarch.rpm

3、到 http://yum.baseurl.org/wiki

下载yum-3.4.3.tar.gz ,放到你指定的目录下解压,解压命令如下:
tar -zxvf yum-3.4.3.tar.gz     #解压后进到yum-3.4.3目录

4、输入./yummain.py update

完成之后,输入yum 解决问题
注意

在下载上面的安装包的时候注意自己的centos的版本和这个安装包的对应性,不然也是没用的。
参考

http://blog.sina.com.cn/s/blog_4cbf97060100u2zb.html

http://blog.csdn.NET/u011531010/article/details/53528054

http://blog.sina.com.cn/s/blog_643754960102w82m.html

http://stackoverflow.com/questions/17490921/no-module-named-rpm-when-i-call-yum-on-shell  http://blog.csdn.net/u011832895/article/details/53735198

TAGS: ,
十一月 29th, 2017

[root@linux-node1 ~]# ip add list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:9b:7d:d6 brd ff:ff:ff:ff:ff:ff
inet 10.10.10.11/24 brd 10.10.10.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe9b:7dd6/64 scope link
valid_lft forever preferred_lft forever
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
link/ether 52:54:00:f4:24:05 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
link/ether 52:54:00:f4:24:05 brd ff:ff:ff:ff:ff:ff
查看网络列表:
[root@linux-node1 ~]# virsh net-list
Name                 State      Autostart     Persistent
———————————————————-
default              active     yes           yes
使用“virsh net-destroy default”删除
[root@linux-node1 ~]# virsh net-destroy default
Network default destroyed
从配置文件中剔除
[root@linux-node1 ~]# virsh net-undefine default
Network default has been undefined
重启libvirtd服务
[root@linux-node1 ~]# systemctl restart libvirtd.service
[root@linux-node1 ~]# virsh net-list
Name                 State      Autostart     Persistent
———————————————————-
[root@linux-node1 ~]# ip add list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:9b:7d:d6 brd ff:ff:ff:ff:ff:ff
inet 10.10.10.11/24 brd 10.10.10.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe9b:7dd6/64 scope link
valid_lft forever preferred_lft forever
再次查看,发现不必要的信息已经清除,清爽多了