iptraf:一个实用的TCP/UDP网络监控工具

iptraf是一个基于ncurses的IP局域网监控器,用来生成包括TCP信息、UDP计数、ICMP和OSPF信息、以太网负载信息、节点状态信息、IP校验和错误等等统计数据。

它基于ncurses的用户界面可以使用户免于记忆繁琐的命令行开关。

特征

  • IP流量监控器,用来显示你的网络中的IP流量变化信息。包括TCP标识信息、包以及字节计数,ICMP细节,OSPF包类型。

  • 简单的和详细的接口统计数据,包括IP、TCP、UDP、ICMP、非IP以及其他的IP包计数、IP校验和错误,接口活动、包大小计数。

  • TCP和UDP服务监控器,能够显示常见的TCP和UDP应用端口上发送的和接收的包的数量。

  • 局域网数据统计模块,能够发现在线的主机,并显示其上的数据活动统计信息。

  • TCP、UDP、及其他协议的显示过滤器,允许你只查看感兴趣的流量。

  • 日志功能。

  • 支持以太网、FDDI、ISDN、SLIP、PPP以及本地回环接口类型。

  • 利用Linux内核内置的原始套接字接口,允许它(指iptraf)能够用于各种支持的网卡上

  • 全屏,菜单式驱动的操作。

安装方法

Ubuntu以及其衍生版本

sudo apt-get install iptraf

Arch Linux以及其衍生版本

sudo pacman -S iptra

Fedora以及其衍生版本

sudo yum install iptraf

用法

如果不加任何命令行选项地运行iptraf命令,程序将进入一种交互模式,通过主菜单可以访问多种功能。

简易的上手导航菜单。

选择要监控的接口。

接口ppp0处的流量。

http://os.51cto.com/art/201505/476216.htm

CentOS 7.0,启用iptables防火墙

今天在测试的时候安装了apache但是外部访问不到

我关闭了防火墙外部就可以访问到了

CentOS 7.0默认使用的是firewall作为防火墙

我在这里改为iptables防火墙

1、关闭firewall:

systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动

2、安装iptables防火墙

yum install iptables-services #安装
vi /etc/sysconfig/iptables #编辑防火墙配置文件
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INP

UT -p tcp -m state –state NEW -m tcp –dport 22 -j ACCEPT

-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT

-A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT

-A INPUT -j REJECT –reject-with icmp-host-prohibited

-A FORWARD -j REJECT –reject-with icmp-host-prohibited

COMMIT

:wq! #保存退出

systemctl restart iptables.service #最后重启防火墙使配置生效
systemctl enable iptables.service #设置防火墙开机启动

linux中的at命令,启动atd服务

查看了多个资料,并没有在 /etc/init.d/ 这个目录下发现 atd 文件,所以命令

[root@localhost ~]# /etc/init.d/atd status11
 /etc/init.d/atd start 11

并不起作用。 
使用命令:

[root@localhost ~]# systemctl start atd11
[root@localhost ~]# ps -ef |grep atdroot      4717     1  0 14:36 ?        00:00:00 /usr/sbin/atd -f
root      4733  4429  0 14:36 pts/1    00:00:00 grep --color=auto atd123123

这样就可以看到atd的进程了,然后重新启动任务

[root@tev137 ~]# at 14:40at> date > /root/datetest.logat> <EOT>
job 6 at Wed Feb  8 14:40:00 201712341234

搞定!

linux复习笔记 – SHELL

变量内容的删除,替代与替换

1. 完整呈现 vbird 这个变量的内容;
[root@linux ~]# vbird="/home/vbird/testing/testing.x.sh"
[root@linux ~]# echo ${vbird} 

/home/vbird/testing/testing.x.sh
2. 在 vbird 变量中,从最前面开始比对,若开头为 / ,则删除两个 /
 之间的所有数据,亦即 /*/
[root@linux ~]# echo ${vbird##/*/}
testing.x.sh <==删除了 /home/vbird/testing/
[root@linux ~]# echo ${vbird#/*/}
vbird/testing/testing.x.sh <==仅删除 /home/ 而已
# 这两个小例子有趣了~变量名称后面如果接了两个 ## ,表示在 ##
# 后面的字符串取『最长的』那一段;如果仅有一个 # ,表示取『最小的那一段』喔!
3. 承上题,如果是从后面开始,删除 /* 呢?
[root@linux ~]# echo ${vbird%%/*/}
/home/vbird/testing/testing.x.sh <==都没被删除
[root@linux ~]# echo ${vbird%%/*}
 <==被删除光了!
[root@linux ~]# echo ${vbird%/*}
/home/vbird/testing <==只删除 /testing.x.sh 部分
# 这个例子当中需要特别注意,那个 % 比对的是『最后面那个字符』的意思,
# 所以啰,第一个方式当然不对~因为 vbird 这个变量的内容最后面是 h 而不是 / 啊!
# 至于 %%/* 则是删除『最长的那个 /* 』,当然就是全部喔!而 %/* 则是最短的那个!
4. 将 vbird 变数中的 testing 取代为 TEST
[root@linux ~]# echo ${vbird/testing/TEST}
/home/vbird/TEST/testing.x.sh
[root@linux ~]# echo ${vbird//testing/TEST}
/home/vbird/TEST/TEST.x.sh
# 如果变量后面接的是 / 时,那么表示后面是进行『取代』的工作~而且仅取代『第一个』
# 但如果是 // ,则表示全部的字符串都取代啊!

blob.png

微信图片_20170401104747.png

linux 复习笔记 – VIM 使用

blob.png

多窗口功能

想象两个情况: 

• 当我有一个档案非常的大,我查阅到后面的数据时,想要『对照』前面的数据, 是否需要使用 [ctrl]
+f 与 [ctrl]+b 来跑前跑后查阅? 

• 我有两个需要对照着看的档案,不想使用前一小节提到的多档案编辑功能;
这样的情况下,开一个 vim 里头有两个窗口的环境,就有需要啦!那么如何开启新窗口呢? 很简单啊!
在指令列模式输入:『:sp {filename}』,那个 filename 可有可无, 如果想要在新窗口启动另一个档案,
就加入档名,否则仅输入 :sp 时, 出现的则是同一个档案在两个窗口间!例如鸟哥使用 vim hosts 后,
再以 :sp /etc/hosts , 

结果出现如下图示:

blob.png

怎样?帅吧!两个档案同时在一个屏幕上面显示,您还可以利用『[ctrl]+w+j』及『[ctrl]+w+k』 在两个
窗口之间移动呢!这样的话,复制啊、查阅啊等等的,就变的很简单啰~ 指令的功能有很多,不过,您只
要记得这几个就好了:

blob.png

vim 环境设定
有没有发现,

如果我们以 vim 软件来搜寻一个档案内部的某个字符串时,

这个字符串会被反白, 

而下次
我们再次以 vim 编辑这个档案时,

该搜寻的字符串还是存在呢!

甚至于, 编辑其它档案时,如果其它档
案也存在这个字符串,哇!!

竟然还是主动反白耶! 

另外,当我们重复编辑同一个档案时,当第二次进入
该档案时, 光标竟然就在上次离开的那一行上头呢!

真是好方便啊~但是,怎么会这样呢? 

这是因为我们的 vim 会主动的将您曾经做过的行为登录下来,好让您下次可以轻松的作业啊! 

那个记录
动作的档案就是: ~/.viminfo 这个档案啦!

每个人的家目录都应该会存在这个档案才对~这个档案是自
动产生的, 您不必自行建立。

而你在 vim 里头所做过的动作,就可以在这个档案内部查询到啰~ ^_^
此外,某些 distributions 的 vim 当中,利用搜寻时,他并不会显示反白, 有些 distributions 则会
主动的帮您进行缩排的行为 (所谓的缩排, 就是当您按下 Enter 编辑新的一行时,光标不会在行首,而
是在与上一行的第一个非空格符处对齐!)。 

这些其实都可以进行设定的,那就是 vim 的环境设定啰~ vim
的环境设定参数有很多,如果您想要知道目前的设定值,可以在一般模式时输入:『 :set all 』 来查阅,
不过…..设定项目实在太多了~所以,鸟哥在这里仅列出一些平时比较常用的一些简单的设定值, 提供
给您参考啊:

blob.png

blob.png

blob.png

linux 复习笔记 – zip&unzip

ZIP


选项

-A:调整可执行的自动解压缩文件;
-b<工作目录>:指定暂时存放文件的目录;
-c:替每个被压缩的文件加上注释;-d:从压缩文件内删除指定的文件;
-D:压缩文件内不建立目录名称;-f:此参数的效果和指定“-u”参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中;
-F:尝试修复已损坏的压缩文件;
-g:将文件压缩后附加在已有的压缩文件之后,而非另行建立新的压缩文件;
-h:在线帮助;
-i<范本样式>:只压缩符合条件的文件;
-j:只保存文件名称及其内容,而不存放任何目录名称;
-J:删除压缩文件前面不必要的数据;
-k:使用MS-DOS兼容格式的文件名称;-l:压缩文件时,把LF字符置换成LF+CR字符;
-ll:压缩文件时,把LF+cp字符置换成LF字符;
-L:显示版权信息;
-m:将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中;
-n<字尾字符串>:不压缩具有特定字尾字符串的文件;
-o:以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同;
-q:不显示指令执行过程;
-r:递归处理,将指定目录下的所有文件和子目录一并处理;
-S:包含系统和隐藏文件;
-t<日期时间>:把压缩文件的日期设成指定的日期;
-T:检查备份文件内的每个文件是否正确无误;
-u:更换较新的文件到压缩文件内;
-v:显示指令执行过程或显示版本信息;
-V:保存VMS操作系统的文件属性;
-w:在文件名称里假如版本编号,本参数仅在VMS操作系统下有效;
-x<范本样式>:压缩时排除符合条件的文件;
-X:不保存额外的文件属性;
-y:直接保存符号连接,而非该链接所指向的文件,本参数仅在UNIX之类的系统下有效;
-z:替压缩文件加上注释;
-$:保存第一个被压缩文件所在磁盘的卷册名称;
-<压缩效率>:压缩效率是一个介于1~9的数值。

参数

  • zip压缩包:指定要创建的zip压缩包;

  • 文件列表:指定要压缩的文件列表。

实例

/home/Blinux/html/这个目录下所有文件和文件夹打包为当前目录下的html.zip:

zip -q -r html.zip /home/Blinux/html

上面的命令操作是将绝对地址的文件及文件夹进行压缩,以下给出压缩相对路径目录,比如目前在Bliux这个目录下,执行以下操作可以达到以上同样的效果:

zip -q -r html.zip html

比如现在我的html目录下,我操作的zip压缩命令是:

zip -q -r html.zip *

UNZIP


-c:将解压缩的结果显示到屏幕上,并对字符做适当的转换;-f:更新现有的文件;-l:显示压缩文件内所包含的文件;
-p:与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换;
-t:检查压缩文件是否正确;
-u:与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中;
-v:执行时显示详细的信息;
-z:仅显示压缩文件的备注文字;-a:对文本文件进行必要的字符转换;
-b:不要对文本文件进行字符转换;
-C:压缩文件中的文件名称区分大小写;
-j:不处理压缩文件中原有的目录路径;
-L:将压缩文件中的全部文件名改为小写;
-M:将输出结果送到more程序处理;
-n:解压缩时不要覆盖原有的文件;
-o:不必先询问用户,unzip执行后覆盖原有的文件;
-P<密码>:使用zip的密码选项;
-q:执行时不显示任何信息;-s:将文件名中的空白字符转换为底线字符;
-V:保留VMS的文件版本信息;
-X:解压缩时同时回存文件原来的UID/GID;-d<目录>:指定文件解压缩后所要存储的目录;
-x<文件>:指定不要处理.zip压缩文件中的哪些文件;
-Z:unzip-Z等于执行zipinfo指令。

参数

压缩包:指定要解压的“.zip”压缩包。

实例

将压缩文件text.zip在当前目录下解压缩。

unzip test.zip

将压缩文件text.zip在指定目录/tmp下解压缩,如果已有相同的文件存在,要求unzip命令不覆盖原先的文件。

unzip -n test.zip -d /tmp

查看压缩文件目录,但不解压。

unzip -v test.zip

将压缩文件test.zip在指定目录/tmp下解压缩,如果已有相同的文件存在,要求unzip命令覆盖原先的文件。

unzip -o test.zip -d tmp/

linux 复习笔记 – 用户与用户组

blob.png

blob.png

第一个属性代表这个档案是『目录、档案或连结文件等等』: 

当为[ d ]则是目录,例如上表的第 11 行; 

当为[ – ]则是档案,例如上表的第 5 行;

若是[ l ]则表示为连结档(link file);

若是[ b ]则表示为装置文件里面的可供储存的接口设备;

若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标。

需要特别留意的是 x 这个标号! 若文件名为一个目录的时候,例如上表中的 .ssh 这
个目录

blob.png

可以看到这是一个目录,而且只有 root 可以读写与执行。但是若为底下的样式时,请问非 root 的其它人是否可以进入该目录呢?

blob.png

咦!似乎好像是可以喔!因为有可读[ r ]存在嘛!『错!』答案是非 root 这个账号的其它使用者均不可进入 .ssh 这个目录,为什么呢? 

因为 x 与 目录 的关系相当的重要, 如果在该目录底下不能执行任何指令的话,那么自然也就无法进入了。

如何改变档案权限

chgrp :改变档案所属群组

chown :改变档案所属人

blob.png

chmod :改变档案的属性、 SUID、等等的特性

r:4
w:2
x:1

blob.png

blob.png

blob.png

blob.png

blob.pngblob.png

blob.png

blob.png

php 获取月份最后一天

<?php
    echo date("t",strtotime('2016-02'));
?>

常用方法

<?php
echo strtotime("now"), "\n";
echo strtotime("10 September 2000"), "\n";
echo strtotime("+1 day"), "\n";
echo strtotime("+1 week"), "\n";
echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
echo strtotime("next Thursday"), "\n";
echo strtotime("last Monday"), "\n";
?>

php生成的csv, 无法完整显示带前导0的数字

PHP生成csv文件时,如果数字的第一位为0的话,显示时则不会显示第一个0

可以在php中做特殊处理,使得生成的csv在显示时能显示出第一个0

有两种方法可以实现:

1、给数字加上引号,并且在引号前面再加上个等号,如数字0555,,则生成时为="0555"

2、在数字前面加上制表符,如是数字0555,则生成时为\t0555

代码如下:

$arr    = array (  
    array ('111', 2222, '0555'),  
    array ('222', 3333, '0666')  
);  
$fp    = fopen('t.csv', 'w');  
foreach ($arr as $row) {  
    fputcsv($fp, array_map('h', $row));  
}  
fclose($fp);  
  
function h($v) {  
    if (($v{0} == '0') && is_numeric($v)) {  
        $v    = '="' . $v . '"';    //第一种方式  
        //$v   = "\t{$v}";  //第二种方式  
    }  
    return $v;  
}