bash 数字大小比较
对于整数,可以用 [[]]
和 (())
来比较。
对于浮点数,可以用 bc,但是 bc 不是每个环境都有。
还有一种方法是 perl(如果装了 perl 但是没有装 bc):perl -e "exit(1) if not $a > $b"
,这样可以用返回值标志是否成功。
对于整数,可以用 [[]]
和 (())
来比较。
对于浮点数,可以用 bc,但是 bc 不是每个环境都有。
还有一种方法是 perl(如果装了 perl 但是没有装 bc):perl -e "exit(1) if not $a > $b"
,这样可以用返回值标志是否成功。
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-tidy
和 build/
下的 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 等)匹配不了,那么就只能通过密码登陆。
dockerfile 中合并两个目录:
COPY folderA folderB
不要在文件夹后面加 /
。
功能 | 子项目 | 命令 | 其他 |
---|---|---|---|
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/ 磁盘 / 网络统计日志,防患于未然。
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。
有时候恢复终端就会出现这种情况(比如显示屏分辨率变化)。暂且尝试的方法是显式设置终端字体(而不是把终端字体留空,让其隐式使用编辑器字体)。感觉还是没有用!
https://github.com/microsoft/vscode/issues/120004
将 terminal.integrated.letterSpacing
改成别的值再改回 0(默认值)就能恢复。
“终端字体间距过宽”的复现: