标准输入
将标准输入作为文件来读取
diff 命令用于对比两个文件的内容:
|
|
有时我们需要将某个命令的输出,跟一个文件进行对比。这时可以先将命令输出重定向到一个临时文件,再进行对比:
|
|
但创建临时文件非常麻烦,用完还要记得清理,有更好的方式吗?当然有啦!
|
|
diff 命令用于对比两个文件的内容:
|
|
有时我们需要将某个命令的输出,跟一个文件进行对比。这时可以先将命令输出重定向到一个临时文件,再进行对比:
|
|
但创建临时文件非常麻烦,用完还要记得清理,有更好的方式吗?当然有啦!
|
|
Shell 下可以用 base64 命令对数据进行 BASE64 编码,其用法很简单。
|
|
expect 是一个自动对话命令,可以编程实现与交互式命令的对话交互。
想要学习 expect 命令,掌握它的典型应用场景,我们需要先弄清楚:什么是交互式命令?
Linux 系统中,绝大部分命令都是非交互式的常规命令。非交互式的命令一旦提交执行,它便默默地干活,执行完毕后输出结果。举个例子,我们执行 uname 命令,回车按下后不用再做任何输入:
|
|
uname 命令用于查看操作系统信息,例子输出表明这是一个 Linux 系统。
交互式命令,顾名思义在命令执行期间,可能需要跟用户进行交互。举个例子,我们执行 apt 命令安装软件包,该命令询问是否继续,用户要输入 Y 之后它才会继续安装:
公司项目基本都用 gitlab-ci 实现自动集成部署,代码提交后自动触发 代码编译 、 容器构建 和 K8S部署 。
最近将 gitlab-ci 权限开放给开发同学,自主将代码部署上测试环境,以便快速验证新功能。我们约定好通过 标签 ( tag )来触发部署,只要推送了格式形如 cicd-x-nnn-MMddHHmm
的标签,就会触发自动部署。其中, nnn
代表开发者姓名拼音首字母,其后跟着日期时间。
如果我想部署当前的代码 提交点 ( commit ),我只需按照约定打一个部署标签,然后推送到服务器:
|
|
很方便不是?
但可能是我太懒了,还是觉得远远不够。首先,我感受到记忆标签格式的负担,记不住就得查;其次,我得大致看下时间,然后还得手工输入,这绝对不能忍……
dd 命令用于拷贝文件数据,基本用法如下:
|
|
dd 命令打开输入文件读取数据,并写到输出文件。数据块大小由 bs 指定,读写块数由 count 指定,因此读写数据总量为 $bs \times count$ 。以上述命令为例,读写数据总量为 $1m \times 1024 = 1024m = 1g$ ,即 1GB 。
socat( SOcket CAT )是一个多用途双向套接字数据转接工具。
socat 跟 NetCat 类似,但功能更强大,也更安全(支持 chroot )。它兼容多种协议,支持操作 文件 ( file )、 管道 ( pipe )、 设备 ( device )、 TCP 套接字、 Unix 套接字、 SOCKS 客户端、 CONNECT 代理以及 SSL 等等。
在 Linux 系统,使用包管理器进行安装,以 Debian/Ubuntu 为例:
|
|
curl 是一个用来发送网络请求的工具命令, 在 网络服务开发 以及 网络调试 中特别有用。 它支持的协议包括:
本文以 HTTP 协议为例,介绍 curl 命令的操作方式,及其在 Web 开发中的应用。
给定一个 URL , curl 对其发起请求并将响应数据输出到标准输出:
|
|
ifconfig 是一个用于 配置网卡 的工具命令。
ifconfig 是一个古老的工具,现在有些过时了。更推荐使用 ip命令 ,这是网络配置工具的集大成者。
ifconfig 不带任何参数即可查询当前所有已 启用( up )网卡的状态:
|
|
iperf 是一个用来 测量网络吞吐 的工具。它既可以测量 TCP 吞吐,也可以测量 UDP 吞吐。使用 iperf 测量网络吞吐,用户需要一个接收并忽略流量的服务端以及一个生成测试流量的客户端。
下文以 TCP 为例,演示使用 iperf 测量从 BlueServer 到 RedServer 的网络带宽:
在 RedServer 服务器上,运行 iperf 命令启动服务端:
|
|
注意到, iperf 服务端默认监听 5001 端口, TCP 窗口大小为 85.3 KB 。用户可根据需要调整,详情请查看 Man文档 。
nc 是一个简单但功能很强大的工具,在 网络调试 中非常有用。
管理员可以用 nc 干很多事情,包括:
除此之外,还有很多很多。
网络配置变更后,需要测试效果。
举个例子,用 iptables 配置端口转发后,需要确认转发效果。