在 Linux 上运行 ZFS

本演示使用了 ZFS-FUSE。FUSE 是一种机制,允许您在没有内核代码(除 FUSE 内核模块和现有的文件系统代码以外)情况下在用户空间中实现文件系统。该模块为用户和文件系统实现提供从内核文件系统接口到用户空间的桥梁。首先,安装 ZFS-FUSE 包(下面的演示针对 Ubuntu)。

安装 ZFS-FUSE

安装 ZFS-FUSE 很简单,尤其是在使用 apt 的 Ubuntu 上。下面的命令行安装了您开始使用 ZFS-FUSE 所需的一切:

$ sudo apt-get install zfs-fuse

此命令行安装 ZFS-FUSE 和所有其他依赖包( 我的也需要 libaiol),为新的程序包执行必要的设置并启动 zfs-fuse 守护进程。

继续阅读

清理 linux 系统垃圾

检查空间大小

du -hm --max-depth=1 /var/ | sort -h
# 或者
du -sh * | sort -h

/var/log/journal

journalctl --vacuum-size=10M

docker

用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。
-a 命令清理得更加彻底,可以将没有容器使用Docker镜像都删掉。注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉了

docker system prune
# 或
docker system prune -a

mysql 5.7 无法使用 group by 的解决办法

出错的提示可能是这样的

[Err] 1055 – Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column ‘information_schema.PROFILING.SEQ’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

解决办法

1、查看 sql_mode

select @@global.sql_mode;

2、查出来的值

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

3、去掉 ONLY_FULL_GROUP_BY ,重新设置值

set @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

4、修改 my.cnf ,添加以下行

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION;

设置的值和第3步的值一样,该操作要重启 mysql 服务。

BigDecimal 加减乘除计算

BigDecimal有多种构造函数,常用的有2种。建议使用String构造方式,不建议使用double构造方式。

// 强制使用String的构造函数,double也有可能计算不太准确
// 原则是使用BigDecimal并且一定要用String来构造。
public BigDecimal(String val);
public BigDecimal(double val);

方法

  • add() 加法
  • subtract() 减法
  • multiply() 乘法
  • divide() 除法
  • abs() 绝对值

舍入

new BigDecimal("12.34").setScale(0, BigDecimal.ROUND_HALF_UP);
  • ROUND_UP 始终对非零舍弃部分前面的数字加1
  • ROUND_DOWN 从不对舍弃部分前面的数字加1,即截短
  • ROUND_CEILING 如果 BigDecimal 为正,则舍入行为与 ROUND_UP 相同;如果为负,则舍入行为与 ROUND_DOWN 相同
  • ROUND_FLOOR 如果 BigDecimal 为正,则舍入行为与 ROUND_DOWN 相同;如果为负,则舍入行为与 ROUND_UP 相同
  • ROUND_HALF_UP 四舍五入
  • ROUND_HALF_DOWN 五舍六入
  • ROUND_HALF_EVEN “银行家舍入法”,主要在美国使用。四舍六入,五分两种情况。如果前一位为奇数,则入位,否则舍去

更多来源:https://www.jianshu.com/p/683b2406342f

ubuntu 安装 wireshark 抓包工具

安装方法:

sudo apt-add-repository ppa:wireshark-dev/stable
sudo apt-get update
sudo apt-get install wireshark

安装过程中需要设置,选择“是”。如果错过了或选错了,就安装好之后,运行下面命令行,出现上述页面选择“是”即可。

sudo dpkg-reconfigure wireshark-common

出于安全方面的考虑,普通用户不能够打开网卡设备进行抓包,Wireshark不建议用户通过sudo在root权限下运行,应当设置当前用户权限:

sudo usermod -aG wireshark $(whoami)

注销登录。

linux 下用 socat 模拟串口调试

$ socat -d -d pty,raw,echo=0 pty,raw,echo=0
2020/05/01 12:08:12 socat[8341] N PTY is /dev/pts/2
2020/05/01 12:08:12 socat[8341] N PTY is /dev/pts/3
2020/05/01 12:08:12 socat[8341] N starting data transfer loop with FDs [5,5] and [7,7]

-d -d 前面两个连续的 -d -d 代表调试信息的输出级别

启一个终端,运行:

echo "test string" > /dev/pts/3

再启一个终端 ,运行:

cat < /dev/pts/2

可以看到向 pts3 发送的数据,由 pts2 接收到了。开发调试的程序连接到 pts2 就可以实现数据接收了。