0%

对于整数,可以用 [[]](()) 来比较。

对于浮点数,可以用 bc,但是 bc 不是每个环境都有。

还有一种方法是 perl(如果装了 perl 但是没有装 bc):perl -e "exit(1) if not $a > $b",这样可以用返回值标志是否成功。

重新加载 PATH 中的可执行文件

hash -r:用于解决在 PATH 中加入可执行文件后找不到的情况。

** 匹配多级目录(find 不能匹配双星号)

shopt -s globstar
set +o pipefail
clang-tidy -p build/ ./{src,include}/**/*.{h,hpp,cc,cpp,cu}

第一句是打开 ** 选项,第二句是忽略 pipefail(-o+o 相反)不然第三句的 pipe 可能出错,第三句 2>/dev/null 是忽略错误信息。

*** 都不能直接匹配 *nix 上的隐藏文件,即用 . 开头的文件。

上述命令的功能:clang-tidy 会找到 .clang-tidybuild/ 下的 compile_commands.json 配置并对代码进行分析。

SYNOPSIS

    cp [OPTION]... [-T] SOURCE DEST
    cp [OPTION]... SOURCE... DIRECTORY
    cp [OPTION]... -t DIRECTORY SOURCE...

其实 cp 的选项比我想象中的要多很多。

其他选项:

  • 创建硬链接(-l)而不是拷贝。
  • -L 则会先解引用符号链接。
  • -n 不会覆盖旧文件
  • -a 先归档再拷贝,也就是保留所有属性。
  • -r 递归拷贝(文件夹)。
  • -u 只拷贝时间上更新的文件

样例

Windows 下是 %userprofile%\.ssh\config。Linux 下自己对应一下。

  • 含有 ForwardAgent 选项表示启用代理转发,相当于在连接它时自动添加了参数 -A
  • 含有 ProxyJump 表示先通过跳板机再连接到此主机,相当于在连接它时自动添加了参数 -J

样例:

Host github
  HostName github.com
  IdentityFile ~/.ssh/id_rsa

Host jump
  HostName <能访问的 IP>
  User <用户>
  Port <能访问的端口>
  IdentityFile ~/.ssh/id_rsa

Host jump_docker
  ProxyJump jump
  HostName localhost
  User root
  Port 22275

其中 jump_docker 在局域网中,我们必须通过跳板 jump 来访问。这里 jump_docker 没有写 IdentityFile,如果默认的密钥文件(比如 ~/.ssh/id_rsa 等)匹配不了,那么就只能通过密码登陆。

常用

功能子项目命令其他
CPU-htop
GPU-nvidia-smi还可以用 gpustat/ nvitop
磁盘-iostat新版本的 htop 同样可以监控磁盘 I/O(在 3.2.2 版本上测试可以,老版本 2.2.0 上实测不行)
网络-
端口sudo netstat -pnltu还可以用 sudo ss -nltup,快得多(不加 sudo 可能会少显示一些程序的端口号、名字等)
不同连接的网速sudo iftop
具体接口的不同连接的网速sudo tcptrack -i eno1
具体端口的网络活动tcpdump -i any port 53210

注意 docker 容器内的端口号和容器外的端口号是不同的。

2025/4/14 推荐 btop,不需要 root 权限就能查看当前网速btop 也还有其他的功能,看起来想和 htop 争。

2025/4/18 推荐 安装 sysstat 获取 CPU/ 磁盘 / 网络统计日志,防患于未然。

GPU

nvidia-smi 就不说了,N 家自己的工具。默认的会读很多信息,如果只需要显存信息,可以用 nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv,这样输出的速度也更快,差不多 87 ms。

由于是自己的电脑充当代理,所以需要用 -R 选项。

ssh -N -n -R 0.0.0.0:11625:127.0.0.1:12341 服务器

这是将远程的一个端口连到本地的端口。-N 表示不要执行命令,仅仅转发端口。-n 表示将 stdin 重定向到 /dev/null。

但是如果想要把这个代理用到 docker 构建中,又会有一点问题。因为 docker 容器本身有不同的网段,不能写 localhost,而是要写 host 的 ip。

sshd_config 里要打开 AllowTcpForwarding 选项,否则 -R 远程端口转发会失败。

默认转发到远程主机上的端口绑定的是 127.0.0.1,如要绑定 0.0.0.0 需要打开 sshd_config 里的 GatewayPorts 选项。这个选项如果由于权限没法打开也有办法,可配合 ssh -L 将端口绑定到 0.0.0.0。

消除烦人的错误提示

如果是自动保存,则会有烦人的错误提示。即便是打开勿扰模式也会提示错误消息。

需要在设置中关闭 LaTeX 相关的消息。

无法编译中文

"latex-workshop.latex.tools" 中改一个参数。

每次保存之后不自动使用中文:在 VS Code 的设置中加入这一行并重启。

ctrl + e 不能传进 shell

在自定义的快捷键配置中给 ctrl+e 删掉默认的 command。

// 将键绑定放在此文件中以覆盖默认值
[
    { "key": "ctrl+e", "command": "-workbench.action.quickOpen" },
]

终端字体间距过宽

有时候恢复终端就会出现这种情况(比如显示屏分辨率变化)。暂且尝试的方法是显式设置终端字体(而不是把终端字体留空,让其隐式使用编辑器字体)。感觉还是没有用!

https://github.com/microsoft/vscode/issues/120004

terminal.integrated.letterSpacing 改成别的值再改回 0(默认值)就能恢复。

“终端字体间距过宽”的复现: