Juice FS 初探 | 一种为 VPS 提供无限磁盘空间的解决方案

JuiceFS 是一款面向云原生设计的高性能分布式文件系统,在 Apache 2.0 开源协议下发布。提供完备的 POSIX 兼容性,可将几乎所有对象存储接入本地作为海量本地磁盘使用,亦可同时在跨平台、跨地区的不同主机上挂载读写。 ...

November 20, 2022 | 4 分钟 | 1698 字 | Tianlun Song

macOS 使用 arping 扫描 ip 冲突

最近工作网络不稳定,多个常用 IP 出现冲突,就连 DHCP 获取到的 IP 也会立刻冲突,原因等待相关人员去解决,今天简单记录 macOS 下 IP 冲突检测的原因。 一般检查 IP 是否被占用的方法是使用 ping ...

November 7, 2022 | 1 分钟 | 414 字 | Tianlun Song

Linux 使用 diff 分栏对比文本差异

首先看一下帮助文档: $ diff --help 用法:diff [选项]... 文件列表 逐行比较<各文件>。 长选项的必需参数也是相应短选项的必需参数。 --normal 以正常的 diff 方式输出 (默认) -q, --brief 只有在文件不同时报告 -s, --report-identical-files 当两个一样时仍然显示结果 -c, -C NUM, --context[=NUM] 同时输出 NUM 行(默认为 3 行)的复制上下文内容 -u, -U 数量, --unified[=数量] 输出 <数量>(默认为 3)行一致化上下文 -e, --ed 以 ed script 方式输出 -n, --rcs 以 RCS diff 格式输出 -y, --side-by-side 以两栏的格式输出 -W, --width=数量 每行显示最多 <数量>(默认 130)个字符 --left-column 当有两行相同时只显示左边栏的一行 --suppress-common-lines 当有两行相同时不显示 -p, --show-c-function 显示每个变更位于哪个 C 函数中 -F, --show-function-line=正则 显示匹配给定<正则>表达式的最近一行 --label 标签 使用给定<标签>替代文件名和时间戳 (可以重复) -t, --expand-tabs 将输出中的 tab 转换成空格 -T, --initial-tab 每行先加上 tab 字符,使 tab 字符可以对齐 --tabsize=数字 TAB 格的宽度,默认为 8 个打印列宽 --suppress-blank-empty 在空的输出行之前去除空白或制表符 -l, --paginate 将输出送至 “pr” 指令来分页 -r, --recursive 连同所有子目录一起比较 --no-dereference 不要跟随符号链接 -N, --new-file 不存在的文件以空文件方式处理 --unidirectional-new-file 若第一文件不存在,以空文件处理 --ignore-file-name-case 忽略文件名大小写的区别 --no-ignore-file-name-case 不忽略文件名大小写的区别 -x, --exclude=模式 排除匹配 <模式> 的文件 -X, --exclude-from=文件 排除所有匹配在<文件>中列出的模式的文件 -S, --starting-file=文件 当比较目录時,由<文件>开始比较 --from-file=文件1 将<文件1>和操作数中的所有文件/目录作比较; <文件1>可以是目录 --to-file=文件2 将操作数中的所有文件/目录和<文件2>作比较; <文件2>可以是目录 -i, --ignore-case 忽略文件内容大小写的区别 -E, --ignore-tab-expansion 忽略由制表符宽度造成的差异 -Z, --ignore-trailing-space 忽略每行末端的空格 -b, --ignore-space-change 忽略由空格数不同造成的差异 -w, --ignore-all-space 忽略所有空格 -B, --ignore-blank-lines 忽略任何因空行而造成的差异 -I, --ignore-matching-lines=正则 若某行完全匹配 <正则>,则忽略由该行造成的差异 -a, --text 所有文件都以文本方式处理 --strip-trailing-cr 去除输入内容每行末端的回车(CR)字符 -D, --ifdef=名称 输出的内容以 ‘#ifdef <名称>’ 方式标明差异 --GTYPE-group-format=GFMT 以 GFMT 格式处理 GTYPE 输入行组 --line-format=LFMT 以 LFMT 格式处理每一行资料 --LTYPE-line-format=LFMT 以 LFMT 格式处理 LTYPE 输入的行 这些格式化选项提供对 diff 输出的精细控制,从而泛化 -D/--ifdef。 LTYPE 可以是 “old”、“new” 或 “unchanged”。GTYPE 可以是 LTYPE 的选择 或是 “changed”。 (仅)GFMT 可包括: %< 该组中每行属于<文件1>的差异 %> 该组中每行属于<文件2>的差异 %= 该组中同时在<文件1>和<文件2>出现的每一行 %[-][宽度][.[精确度]]{doxX}字符 以 printf 格式表示该<字符>代表的内容 大写<字符>表示属于新的文件,小写表示属于旧的文件。<字符>的意义如下: F 行组中第一行的行号 L 行组中最后一行的行号 N 行数 ( =L-F+1 ) E F-1 M L+1 %(A=B?T:E) 如果 A 等于 B 那么 T 否则 E (仅)LFMT 可包括: %L 该行的内容 %l 该行的内容,但不包括结束的换行符 %[-][宽度][.[精确度]]{doxX}n 以 printf 格式表示的输入行号 GFMT 或 LFMT 都可包括: %% % %c'C' 单个字符 C %c'\OOO' 八进制码 OOO 所代表的字符 C 字符 C(处上述转义外的其他字符代表它们自身) -d, --minimal 尽可能找出最小的差异集 --horizon-lines=数量 保持指定行数的一致前后缀 --speed-large-files 假设文件十分大而且文件中含有许多微小的差异 --color[=何时] 给输出上色;“何时”可以是“never”(从不)、 “always”(总是)或“auto”(自动,默认); 仅指定 --color 与 --color='auto' 效果相同 --palette=调色板 在 --color 选项启用时使用的颜色;<调色板>参数应当是 一个冒号分隔的列表以提供 terminfo capabilities 信息 --help 显示此帮助信息并退出 -v, --version 输出版本信息并退出 <文件列表> 的格式可以是“文件1 文件2”、“目录1 目录2”、“目录 文件”或 “文件 目录”。 如果使用 --from-file 或 --to-file 选项,<文件名> 的格式则不受限制。 如果 FILE 是 “-”,则由标准输入读取内容。 如果输入相同,则退出状态为 0;1 表示输入不同;2 表示有错误产生。 报告程序错误到: bug-diffutils@gnu.org 报告翻译错误到: https://translationproject.org/teams/zh_CN.html GNU diffutils 主页: <https://www.gnu.org/software/diffutils/> 使用 GNU 软件的通用帮助:<https://www.gnu.org/gethelp/> 用的时候可以横排查看不同的地方: ...

November 2, 2022 | 4 分钟 | 1937 字 | Tianlun Song

linux grep 过滤多个单词

有时会需要使用 grep 做多关键词匹配,这里给出集中方法,简单记录: grep 'word1\|word2\|word3' /path/to/file ### Search all text files ### $ grep 'word*' *.txt ### Search all python files for 'wordA' or 'wordB' ### $ grep 'wordA*'\''wordB' *.py $ grep -E 'word1|word2' *.doc $ grep -e string1 -e string2 *.pl $ grep -E "word1|word2" *.c ### Show all the lines that do not match given pattern/words/strings ### $ grep -v 'bar\|foo' /dir1/dir2/file1 $ grep -E -v 'pattern1|pattern2' /path/to/file 参考文献 How To Search Multiple Words / String Pattern Using grep Command on Bash shell

October 31, 2022 | 1 分钟 | 115 字 | Tianlun Song

Linux USB 设备基础理论

通过扫描以下目录获取物理节点所有 USB 设备: /sys/bus/usb/devices/usb* /sys/bus/usb/devices/usb*/$busnum-* 从该文件系统收集某一个设备的主要信息如下: { "busnum": 1, "class": 0, "devnum": 2, "level": 1, "manufacturer": "QEMU", "port": 0, "prodid": "0001", "product": "QEMU USB Tablet", "speed": "12", "usbpath": "1", "vendid": "0627" } 文件含义 目录下部分文件含义如下: busnum: 总线号 devnum: 设备号(该总线的第几台设备) speed: 速率 bDeviceClass: 设备类型 idVendor: 设备的生产商ID,由USB设备生产商向USB-IF官方来统一管理和申请 idProduct: 该生产商生产的产品编号,同一厂商下的不同idProduct代表着该公司不同的产品系列 product: 制造商 manufacturer: 产品 serial: USB 硬件设备序列号 ,例如 0000:00:01.2 定位方法 定位某一个 USB 设备的方法有两种: ...

August 24, 2022 | 2 分钟 | 628 字 | Tianlun Song

INOTIFY - 监听事件

Linux 2.6.13 内核中引入了新的文件系统变化通知机制 inotify ,使用该特性提供的用户态调用 api ,可以方便的完成文件变化监听。 各种语言基本都提供了对该接口的调用方法: C 不必多说, Perl 使用 [Linux::Inotify2](https://metacpan.org/pod/Linux::Inotify2) , Golang 使用 golang.org/x/sys/unix , Python 则使用 [pyinotify](https://github.com/seb-m/pyinotify) 即可完成调用。 ...

January 27, 2022 | 2 分钟 | 537 字 | Tianlun Song

Linux 下的文件锁

本文内容为 Linux 系统通用,各个语言实现可能稍有不同,但原理相同。 当多个进程或多个程序都想要修同一个文件的时候,如果不加控制,多进程或多程序将可能导致文件更新的丢失。 ...

January 13, 2022 | 2 分钟 | 951 字 | Tianlun Song

Linux 下新硬盘分区、格式化、挂载全流程

互联网上搜索到的 Linux 环境新磁盘配置方法资料质量都不尽如人意,因此自己整理了一份,日常 Linux 磁盘分区时查阅足够了,主要是用到了 fdisk 命令。 fdisk 基本使用 新增硬盘后,在linux系统下输入 fdisk -l 命令查看当前磁盘信息: ...

November 9, 2021 | 5 分钟 | 2499 字 | Tianlun Song

Linux 解决远程连接的“Gtk-WARNING **: cannot open display;”

问题重现 在使用 libvirt 管理虚拟机时,有时会用到 virt-manager 提供的图形界面管理虚拟机,查看 vnc 输出等,但是常常会得到如下错误: (virt-manager:25381): Gtk-WARNING **: 08:55:23.876: cannot open display: Linux 解决 如果是在 Linux 桌面环境,解决方法很简单,只需要这样连接远程服务器就可以了: ...

November 8, 2021 | 1 分钟 | 382 字 | Tianlun Song

Tmux 使用笔记

Tmux 是一个终端复用器(terminal multiplexer),用起来就离不开。网上有很多 Tmux 使用指南,但是用下来发现还是自己整理一遍才能真正的记住,于是有了这篇文章,本文意在整理 tmux 最常用操作,详细的操作指南请移步 「tmux(1) manual page」。 ...

October 13, 2021 | 2 分钟 | 830 字 | Tianlun Song