Linux网络流量查看

      使用不同的机制来制作流量报告。nload等一些工具可以读取"proc/net/dev"文件,以获得流量统计信息;而一些工具使用pcap库来捕获所有数据包,然后计算总数据量,从而估计流量负载。

下面是按功能划分的命令名称。

  • 监控总体带宽使用:nload、bmon、slurm、bwm-ng、cbm、speedometer和netload
  • 监控总体带宽使用(批量式输出):vnstat、ifstat、dstat和collectl
  • 每个套接字连接的带宽使用:iftop、iptraf、tcptrack、pktstat、netwatch和trafshow
  • 每个进程的带宽使用:nethogs

speedometer

监控流量:

speedometer -r eth0 -t eth0 

-c 选项可以以垂直分割的方式显示不同的项目:

speedometer -tx eth0 -c -rx eth0

另外,Speedometer 还可以监测某个文件的下载速率,比如你正在下载 downlod.iso 这个文件,那么只要:

speedometer download.iso

就会显示出文件下载的速率,不过这招有时也不是很灵,因为大多数文件下载工具,会缓存下载的数据,或者在临时文件中保存下载的数据,而 Speedometer 只能通过监测文件大小的变化算出速率。如果你知道下载文件的大小,可以在命令中指定大小,这样 Speedometer 就会帮你显示一个进度条,比如我知道 download.iso 是 80M:speedometer download.iso $((80*1024*1024))

pktstat

pktstat可以实时显示所有活动连接,并显示哪些数据通过这些活动连接传输的速度。它还可以显示连接类型,比如TCP连接或UDP连接;如果涉及HTTP连接,还会显示关于HTTP请求的详细信息。

 pktstat -i eth0 -nt 

dstat

dstat是一款用途广泛的工具(用python语言编写),它可以监控系统的不同统计信息,并使用批处理模式来报告,或者将相关数据记入到CSV或类似的文件。这个例子显示了如何使用dstat来报告网络带宽。

dstat -nt

树莓派3b+_AlphaBot2模块列表

Arduino控制程序:

 Run-Test                       电机测试
 Joystick 程序                  五向摇杆
 IR 程序                        红外遥控器控制
 Infrared-Obstacle-Avoidancec   红外避障
 Ultrasionc-Obstacle-Avoidance  超声波避障
 Ultrasionc-Infrared-Obstacle-Avoidance  超声波红外避障
 Ultrasionc_Ranging             超声波测距
 TRSensors                      寻迹传感器测试
 Infrared-Line-Tracking         红外寻迹
 W2812                          RGB彩灯
 OLED                           绘图操作demo
 Line-Tracking                  综合程序
 MazeSolver                     迷宫程序
 Bluetooth                      蓝牙控制
 Bluetooth-json                 蓝牙控制(json格式)

树莓派控制程序(AlphaBot2.tar.gz):

 wget http://www.waveshare.net/w/upload/e/ee/AlphaBot2-Demo.7z
 wget http://www.waveshare.net/w/upload/c/c3/Rpi_ws281x-master.zip

gpio

 git clone git://git.drogon.net/wiringPi
 cd wiringPi
 ./build
 gpio -v
 gpio readall

红外遥控器控制

 cd ~/AlphaBot2/python
 python IRremote.py

电机测试

 cd ~/AlphaBot2/python
 python AlphaBot2.py

五向摇杆

 cd ~/AlphaBot2/python
 python Joystick.py

红外避障

 cd ~/AlphaBot2/python
 python Infrared_Obstacle_Avoidance.py

超声波测距(树莓派 3B 套餐不包含超声波模块)

 cd ~/AlphaBot2/python
 python Ultrasonic_Rangeing.py

超声波测距(树莓派 3B 套餐不包含超声波模块)

 cd ~/AlphaBot2/python
 python Infrared_Obstacle_Avoidance.py

RGB 彩灯

 rpi_ws281x-master.zip
 unzip rpi_ws281x-master.zip

 apt-get install build-essential python-dev scons swig

 cd rpi_ws281x-master
 scons

 ./test

 cd python
 python setup.py install

 cd examples
 python lowlevel.py

 cd ~/AlphaBot2/python
 python ws2812.py

循迹传感器测试

 cd ~/AlphaBot2/python
 python TRSensors.py

红外循迹程序

 cd ~/AlphaBot2/python
 python LineFollow.py

舵机

 cd ~/AlphaBot2/python
 python PCA9685.py

mjpg-streamer 软件实时监控

 a,raspi-config 开启摄像头
 b,/etc/modules 添加一行:bcm2835-v4l2
 c,重启后,ls -ltr /dev/video0
 (若无,rpi-update)

 cd AlphaBot2/lib/mjpg-streamer
 ./start
 http://ip:8080/

通过 webiopi 实现远程遥控

 cd AlphaBot2/lib/WebIOPi-0.7.1-raspi2
 ./setup.sh
 webiopi -h
 webiopi -d -c /etc/webiopi/config
 http://ip:8000

 mjpg-AlphaBot 目录,修改视频源 IP:
 cd ./AlphaBot2/mjpg-AlphaBot/
 vim index.html
 http://x.x.x.x:8080/?action=stream

 cd ./AlphaBot2/mjpg-AlphaBot
 webiopi -c config
 http://x.x.x.x:8000/

 ./AlphaBot2/mjpg-AlphaBot/mjpg-AlphaBot
 webiopi -c config

 设置开机启动:
 cd ./AlphaBot2/mjpg-AlphaBot
 cp config /etc/webiopi/config
 update-rc.d webiopi defaults
 vim /etc/rc.local:
     cd /home/pi/AlphaBot2/lib/mjpg-streamer
     ./start.sh &

通过 Bottle 实现远程遥控

 a.apt-get install python-bottle
 b.cd ~/AlphaBot2/Web-RGB
   python main
 c. http://ip:8000
   (手机端)
 d.cd ~/AlphaBot2/Web-Control
   vim index.html,修改真实ip:
   <img width="320" height="240" src="http://192.168.10.235:8080/?action=stream">
 e.python main
 f.http://ip:8000
 g.开机启动:
   vim /etc/rc.local:
     cd /home/pi/AlphaBot2/lib/mjpg-streamer
     ./start.sh &
     cd /home/pi/AlphaBot2/Web-Contrl
     python main &
 h.vim /etc/dhcpcd.comf 设置静态 IP
     interface wlan0
     static ip_address = 192.168.1.114/24
     static routers = 192.168.1.1

通过软件远程遥控小车

 a.cd ~/AlphaBot2/App-Control
 b.vim main.py:
   Host = '192.168.10.235'
 c.python main

 d.运行mjpg-streamer

 e.打开 AlphaBot.exe 程序,输入 IP 地址,mjpg-stream 的端口号,小车 Soket 服务端的端口号
 f.开机启动, vim /etc/rc.local:
   cd /home/pi/AlphaBot/lib/mjpg-streamer
   ./start.sh &
   cd /home/pi/AlphaBot/App-Contrl
   python main &
 g.可开启树莓派无线网络适配器的AP功能(不用连接WIFI)

通过树莓派蓝牙遥控小车

 a.升级蓝牙软件包
   apt-get update
   apt-get upgrade -y
   apt-get dist-upgrade -y
   apt-get install pi-bluetooth bluez bluez-firmware blueman
 b.pi用户到蓝牙组 
   usermod –G Bluetooth –a pi
 c.reboot
 d.启动/增加 SPP,开启蓝牙设备:
   vim /etc/systemd/system/dbus-org.bluez.service
     ExecStart=/usr/lib/bluetooth/bluetoothd
     ExecStartPost=/usr/bin/sdptool add SP
   reboot
 e.hciconfig
   (如果/boot/config.txt 文件中有 dtoverlay=pi3-miniuart-bt 这语句需要注释掉)
 f.bluetoothctl
   agent on
   agent on
   default-agent
   pair XX:XX:XX:XX:XX:XX ( XX:XX:XX:XX:XX:XX 替换为你自己设备的地址)
   trust XX:XX:XX:XX:XX:XX (配对之后把设备添加到信任列表)
   connect XX:XX:XX:XX:XX:XX
   (注意:如果命令行下链接不成功可以在图形界面下连接。)
 g.cd /AlphaBot2/Bluetooth-Control
   rfcomm watch hci0 1 python bluetooth.py
 h.下载APP(只有安卓, page 45)
   https://fir.im/hysk
 i.bluetoothctl
   discoverable on
   quit

使用 SCons 轻松建造程序

前言

make 这个工具自上个世纪 70 年代 Stuart Feldman 在贝尔实验室开发出以来,就一直是类 UNIX 程序员的最爱之一。通过检查文件的修改时间,make 工具可以知道编译目标文件所要依赖的其他文件。在复杂的项目中,如果只有少数几个文件修改过,make 工具知道仅仅需要对哪些文件重新编译就可以确保目标程序被正确的编译链接。这样做的好处就是在编译中,不仅可以节省大量的重复输入,还可以确保程序可以被正确的链接,缩短编译的时间。虽然如此,但是为 make 工具编写建造规则却不是一件容易的事。它复杂的配置规则,即使是有经验的开发者也望而生畏。make 工具的许多替代品便因此而诞生,SCons 就是是其中之一。SCons 是一个用 Python 语言编写的类似于 make 工具的程序。与 make 工具相比较,SCons 的配置文件更加简单清晰明了,除此之外,它还有许多的优点。

SCons 简介

SCons 是一个开放源代码、以 Python 语言编写的下一代的程序建造工具。它最初的名字是 ScCons, 基于由 perl 语言编写的 Cons 软件开发而成,它在 2000 年 8 月获得了由 Software Carpentry 举办的 SC 建造比赛的大奖。现在 ScCons 已经被改名为 SCons,目的是为了表示不再与 Software Carpentry 有联系,当然,还有一个目的,就是为了更方便的输入。

作为下一代的软件建造工具,SCons 的设计目标就是让开发人员更容易、更可靠和更快速的建造软件。与传统的 make 工具比较,SCons 具有以下优点:

  • 使用 Python 脚本做为配置文件
  • 对于 C,C++ 和 Fortran, 内建支持可靠自动依赖分析 . 不用像 make 工具那样需要 执行"make depends"和"make clean"就可以获得所有的依赖关系。
  • 内建支持 C, C++, D, Java, Fortran, Yacc, Lex, Qt,SWIG 以及 Tex/Latex。 用户还可以根据自己的需要进行扩展以获得对需要编程语言的支持。
  • 支持 make -j 风格的并行建造。相比 make -j, SCons 可以同时运行 N 个工作,而 不用担心代码的层次结构。
  • 使用 Autoconf 风格查找头文件,函数库,函数和类型定义。
  • 良好的夸平台性。SCons 可以运行在 Linux, AIX, BSD, HP/UX, IRIX, Solaris, Windows, Mac OS X 和 OS/2 上。

安装 SCons

SCons 支持多种操作系统平台,并为各个系统制作了易于安装的文件,因此在各个系统平台上的安装方法不尽相同,在 SCons 的官方网站上可以查每个平台的具体安装方法。 如果 SCons 没有为你的系统制作相应的安装包,你也可以下载 SCons 的源代码,直接进行安装。 首先,从 SCons 的网站上下载最新的 SCons 源代码包(目前 SCons 的最新版本是 2.0.1)。 其次,解压下载的源代码。视下载的源代码包的格式不同而有不同的方法,在 Windows 平台上,可是使用 winzip 或者其他类似的工具解压。在 Linux 平台上,对于 tar 包,使用 tar 命令进行解压,如:

1
$ tar -zxf scons-2.0.1.tar.gz

然后切换进入解压后的目录进行安装,如

1
2
$ cd scons-2.0.1
$ sudo python setup.py install

命令执行如果没有错误,那么 scons 就被安装到系统上了。对于 Linux 来说,scons 会默认安装到 /usr/loca/bin 目录下,而在 Windows 平台上,则会被安装到 C:\Python25\Scripts 下。

使用 SCons

在 SCons 安装完成后,我们就可以使用 SCons 来建造我们的程序或者项目了。像很多编程书籍那样,在这里我们也通过一个简单的 helloscons 例子来说明如何使用 SCons。例子 helloscons 包含两个文件 :

1
2
$ ls helloscons
helloscons.c  SConstruct

其中 helloscons.c 是程序的源文件,SConstruct 是 scons 的配置文件,类似使用 make 工具时的 Makefile 文件,因此,为了编译你的项目,需要手工创建一个 SConstruct 文件(注意:文件名是大小写敏感的)。不过,在编译的时候不需要指定它。 要编译这个例子,切换到 helloscons 的目录下,运行 scons 命令,如下:

1
2
3
4
5
6
7
8
$ cd helloscons/
$ scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
gcc -o helloscons.o -c helloscons.c
gcc -o helloscons helloscons.o
scons: done building targets.

来查看一下运行 scons 命令后得到的结果 :

1
2
$ ls
helloscons  helloscons.c  helloscons.o  SConstruct

建造结束后,得到了二进制文件 helloscons 以及编译的过程中产生的一些以 .o 结尾的目标文件。试运行 helloscons 一下 , 会得到 :

1
2
$ ./helloscons
Hello, SCons!

现在让我们回过头来解析一下 helloscons 这个例子 . helloscons.c 是这个例子里的唯一一个源代码文件,它所做的事就是在控制台上输出一行简单的"Hello,SCons", 它的源代码如下:

清单 1. helloscons.c
1
2
3
4
5
6
7
8
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
       printf("Hello, SCons!\n");
       return 0;
}

作为项目建造规则的配置文件 SConstruct 的内容如下 :

清单 2. SConstruct 文件
1
Program('helloscons.c')

你可能很惊讶 SConstruct 的内容只有一行,然而事实确实如此,它比传统的 Makefile 简单很多。SConstruct 以 Python 脚本的语法编写,你可以像编写 Python 脚本一样来编写它。其中的 Program 是编译的类型,说明你准备想要建造一个可执行的二进制程序,它由 helloscons.c 文件来生成。在这里,没有指定生成的可执行程序的名字。不过不用担心,SCons 会把源代码文件名字的后缀去掉,用来作为可执行文件的名字。在这里,我们甚至不需要像 Makefile 那样指定清理的动作,就可以执行清理任务。在 SCons 中,执行清理任务由参数 -c 指定,如下 :

1
2
3
4
5
6
7
8
9
10
$ scons -c
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Cleaning targets ...
Removed helloscons.o
Removed helloscons
scons: done cleaning targets.
$ ls
helloscons.c  SConstruct

如果你不想直接编译可执行的二进制文件,那也没有关系。SCons 支持多种编译类型,你可以根据自己的需要,任意选用其中的一种。SCons 支持的编译类型有:

  • Program: 编译成可执行程序(在 Windows 平台上即是 exe 文件),这是最常用的一种编译类型。
  • Object: 只编译成目标文件。使用这种类型,编译结束后,只会产生目标文件。在 POSIX 系统中,目标文件以 .o 结尾,在 Windows 平台上以 .OBJ 结尾。
  • Library: 编译成库文件。SCons 默认编译的库是指静态链接库。
  • StaticLibrary: 显示的编译成静态链接库,与上面的 Library 效果一样。
  • SharedLibrary: 在 POSIX 系统上编译动态链接库,在 Windows 平台上编译 DLL。

这个简单的 SConstruct 的配置文件从一个侧面说明了使用 SCons 来建造程序是多么的简单。 在实际的项目开发中,程序的建造规则远比 helloscons 这个例子复杂。不过,这些都不是问题,你可以像扩展你自己的 Python 脚本文件那样去扩展 SConstruct. 如果你不想使用 SConstruct 为你设置的默认可执行文件的名字,而是选择你自己喜欢的名字,如 myscons,可以把 SConstruct 的内容修改为 :

1
Program('myscons, 'helloscons.c')

其中 myscons 就是你想要的可执行文件的名字,你可以把它换成任意你喜欢的名字, 不过有点注意的是,这个名字必须放在第一位。 然后在 helloscons 目录下运行 scons 命令,就会得到 myscons 这个可执行文件,如 下:

1
2
3
$ scons -Q
gcc -o helloscons.o -c helloscons.c
gcc -o myscons helloscons.o

其中的 -Q 参数是减少编译时的由 scons 产生的冗余信息。 如果你的项目由多个源文件组成,而且你想指定一些编译的宏定义,以及显式的指定使用某些库,这些对于 SCons 来说,都是非常简单的事情。我们的另外一个例子 helloscons2 很好的说明这种情况。 helloscons2 由 3 个源文件组成 , 它们是 helloscon2.c, file1.c, file2.c,另外指定了编译的选项,同时还指定了使用哪些具体的库。让我们来看一下 helloscons2 的 SConstruct 文件 :

1
2
3
4
Program('helloscons2', ['helloscons2.c', 'file1.c', 'file2.c'],
       LIBS = 'm',
       LIBPATH = ['/usr/lib', '/usr/local/lib'],
       CCFLAGS = '-DHELLOSCONS')

正如你想像的那样,这样一个配置文件并不复杂 . 该 SConstruct 文件指出,它将生成一个名叫 helloscons2 的可执行程序,该可执行程序由 helloscons2.c, file1.c 和 file2.c 组成。注意,多个源文件需要放在一个 Python 列表中。如果你的源程序代码文件很多,有十几个甚至上百个,那不要一个个的将他们都列出来,你可以使用 glob('*.c') 来代替源代码列表。如下 :

1
Program('helloscons2', Glob('*.c')

配置文件中 LIBS,LIBAPTH 和 CCFLAGS 是 SCons 内置的关键字,它们的作用如下:

  • LIBS: 显示的指明要在链接过程中使用的库,如果有多个库,应该把它们放在一个列表里面。这个例子里,我们使用一个称为 m 的库。
  • LIBPATH: 链接库的搜索路径,多个搜索路径放在一个列表中。这个例子里,库的搜索路径是 /usr/lib 和 /usr/local/lib。
  • CCFLAGS: 编译选项,可以指定需要的任意编译选项,如果有多个选项,应该放在一个列表中。这个例子里,编译选项是通过 -D 这个 gcc 的选项定义了一个宏 HELLOSCONS。

运行 scons 命令的时候,可以看到这些变量如何被使用的,让我们执行一下 scons 命令 :

1
2
3
4
5
$ scons -Q
gcc -o file1.o -c -DHELLOSCONS file1.c
gcc -o file2.o -c -DHELLOSCONS file2.c
gcc -o helloscons2.o -c -DHELLOSCONS helloscons2.c
gcc -o helloscons2 helloscons2.o file1.o file2.o -L/usr/lib -L/usr/local/lib -lm

scons 命令的输出显示了可执行程序 helloscons2 如何由多个源文件而生成,以及在 SConstruct 中定义的 LIBS,LIBPATH 和 CCFLAGS 如何被使用。 可见,即使对于复杂的项目,SCons 的编译配置文件也很简单。除此之外,SCons 也提供了很多功能以适应不同的需要,如果读者想更深入的了解如何使用 SCons,可以参考 SCons 的帮助手册。

总结

本文简单介绍了 SCons 的特点,如何安装 SCons,以及通过例子来说明如何在项目中使用 SCons。 作为下一代的软件建造工具,SCons 使用 Python 语言作为配置文件,不但功能强大,而且简单易用,对于跨平台的项目,非常适合。 如果你厌烦了 make 工具的那种复杂的编写规则,尝试一下新鲜的 SCons 吧。