分类 linux 下的文章

常规我们多数使用 ping 命令来检查网络延时, ping 命令是基于ICMP的请求应答报文来测量网络延时情况。ICMP处在网络层协议层, 某些场景下, ICMP 容易被防火墙阻止, 这样场景下 ping 工具就无法使用了。这种场景下, 需要使用TCP/UDP协议来测试三层网络的延时状态。

我们可以使用 tcpping 来进行网络延迟的测量, tcpping 是使用TCP协议的三次握手利用半开连接技术实现.比如想远端的80端口建立连接, 会先发送一个 TCP SYN 包, 如果远端的80端口正常, 将回复 TCP ACK 包, 否则将响应 TCP RST 包。因此 tcpping 可以定时通过 发送 SYN 包, 接收 ACKRST包来计算到远程主机的访问延时(RTT)。

tcptraceroute 软件已经实现了半开连接技术,tcpping依赖该软件来实现网络延迟的测量。

- 阅读剩余部分 -

Ubuntu 17/18 版本默认已经预装 Python 3.6, 系统安装完成之后将直接可用, 而旧版的 Ubuntu, 比如 14/16 默认预装的均不是最新的 Python 3.6 版本, 如果希望通过 apt 包管理器在旧版系统上安装 Python 3.6, 需要添加特殊的软件源才可以. 当然你也可以通过 3.6 版本的 Python 源码来安装, 后续我们抽空再介绍一次, 如何通过源码安装 Python 3.6.

默认情况下, Ubuntu 14.04Ubuntu 16.04 默认安装的是 Python 2.7Python 3.5 版本,要安装最新的 Python 3.6 版本, 需要添加 deadsnakes PPA 软件源.

# add-apt-repository ppa:deadsnakes/ppa
# apt update
# apt install python3.6

而在 Ubuntu 16.10Ubuntu 17.04 版本上直接从仓库源安装即可

# apt update
# apt install python3.6

- 阅读剩余部分 -

RedHat Enterprise Linux 8 上 Python 环境默认是不预装的, 因此, 用户需要根据自己需要选择安装 Python 3 还是 Python 2.官方源中默认对 Python 3.6 有全面的支持. 接下来我们看看如何安装需要的 Python 版本.

注: 大多情况下, yum 包管理器是需要依赖 Python 和 一些基础包, 早期的发行版是将系统依赖的 Python 和 用户应用软件 公用 Python 环境, 这样就容易造成系统和用户环境对 Python 环境的冲突. 从 RedHat Enterprise Linux 8 将系统 Python 环境独立出来作为 Platform-Python, 即系统平台 Python 环境, 用户将不能使用该 Python 环境, 仅有系统功能使用, 有官方统一维护. 当然, 用户可以编写一些系统使用的 Python 程序有 Platform-Python 使用.

## 安装 Python 3

RedHat Enterprise Linux 8 开始启用新的包管理工具 dnf, 我们使用 dnf 来安装 python3

dnf install python3

因为官方支持的 3.6 版本, 因此随同 python3 的安装, 也将同时将 pipsetuptools 等依赖将一并安装好.

- 阅读剩余部分 -

httpd 是 Apache HTTP 服务器, 运行于常见操作系统(包括UNIX和Windows)HTTP服务器, httpd 安全,高效且可扩展,该服务器提供与当前HTTP标准同步的HTTP服务。

安装

安装 httpd 比较简单, 各个发行版本的默认仓库中均包含该程序, 少量发行版需要手动编译安装, 依据项目描述的 README.md 文档, 可快速安装到目标系统.

  • Debian/Ubuntu
apt -y install apache2
  • REHL/CentOS
yum -y install httpd
  • Gentoo
emerge www-servers/apache

- 阅读剩余部分 -

Python MySQLdb 库, 查询结果返回的是tuple, 输出的时候不是很方便, 因为只能通过索引读取内容, 查找了下, 可以通过指定 MySQLdb.cursors.DictCursor 返回 dict 内容数据.

默认情况下, 调用过程和返回结果:

import MySQLdb
db  = MySQLdb.connect(host='localhost', user='root', passwd='admin', db='test')
cur = db.cursor()
cur.execute('select * from user')
rs = cur.fetchall()
print rs
# 返回类似如下
# ((1000L, 0L), (2000L, 0L), (3000L, 0L))

- 阅读剩余部分 -

MySQL 5.0.37 以上开始支持 MySQL Query Profiler, 可以查询到此 SQL 会执行多少时间, 并看出 CPU/Memory 使用量, 执行过程中 System lock, Table lock 花多少时间等等.

启用 MySQL Query Profile

mysql> set profiling=1;
Query OK, 0 rows affected (0.00 sec)

测试查询语句

mysql> select count(*) from user;
+----------+
| count(*) |
+----------+
|      200 |
+----------+
1 row in set (0.00 sec)

查看 Profiles

mysql> show profiles;
+----------+------------+-----------------------------------------------+
| Query_ID | Duration   | Query                                         |
+----------+------------+-----------------------------------------------+
|        0 | 0.00007300 | set profiling=1                               |
|        1 | 0.00048366 | select count(*) from user |
+----------+------------+-----------------------------------------------+
2 rows in set (0.00 sec)

- 阅读剩余部分 -

flv 是flash video的简称,flv流媒体格式是随着flash mx的推出发展而来的视频格式。相对来说在各个设备上, 支持mp3的更普遍,将 flv 格式转换为 mp3 格式就有了需求.

ffmpeg 是一个速度极快的视频/音频转换器, 甚至能捕获一个实时的音视频流,功能非常强大,我们这里先仅仅介绍下,如何将 flv 转换为 mp3.

ffmpeg 基本使用格式为:

ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url}

flv 转换为 mp3 也相对较简单:

ffmpeg -i example.flv example.mp3

有空我们详细展开下 ffmpeg 的使用教程.

- 阅读剩余部分 -

有些时候, 我们在 Shell 脚本中, 添加 Yes or No 选项, 便于用户决策某些流程, 可以使用下面的示例逻辑.

while true
do
    echo -n "请确认您的选择是或否。 (Y(y)表示是,N(n)表示否): "
    echo ' '
    read CONFIRM
    case $CONFIRM in
        y|Y) break ;;
        n|N)
        echo "你选择了 : " $CONFIRM
    exit
;;
*) echo "请只输入 Y(y)/N(n)"
esac
done

- 阅读剩余部分 -