一句话的问题
很多问题的解决方案,虽然非常有用,但是概括起来不需要多少字,都汇总在这里。
[toc]
使用Draw.io diagrams.net 给paper画图,Camera Ready提交时提示使用了Type 3字体
2024年9月2日 发现使用了特殊字符时会出现Type 3字体。比如emoji,特殊的图形或者数字字符。使用Adobe Acrobat打开PDF在属性-字体里也可以看到有Type 3字体。
使用Adobe Illustrator 打开PDF的图然后直接另存为,就可以消除这些Type 3字体。
Windows 11 远程桌面无法保存密钥
Windows 11 远程桌面无法保存密钥,报错"Windows Defender Credential Guard does not allow using saved credentials"
1 | cmdkey /generic:TERMSRV/<targetNameOrIp> /user:<username> /pass:<password> |
调试docker构建过程 docker image build debug dockerfile
首先,在docker file里需要调试的地方增加 RUN sleep infinity
然后使用ps -aux | grep sleep
找到sleep的uid,并使用 sudo nsenter -a -t $PID_OF_SLEEP sh
进入构建过程调试。
来自: https://github.com/moby/buildkit/issues/1053#issuecomment-564340155
docker修改现有容器的参数,环境变量等
- 停止docker daemon
- 修改配置文件
- 每个容器的json配置文件在
/var/lib/docker/containers/{{.Id}}/config.v2.json
。
- 每个容器的json配置文件在
- 启动docker daemon
SSH密钥管理
建议SSH密钥按照设备命名和管理。
- 公钥并不是什么秘密,没必要一个设备创建多个公钥
- 泄露风险也是按设备的,单个设备被控制,所有该设备上的私钥都会泄露。
按照这个思路,windows下wsl可以和本机用同一个密钥。
我现在就是这样,每个设备就用单独一个默认的id_ed25519,从来也不需要加选项单独指定私钥。
Github下载单个文件夹
git - Download a single folder or directory from a GitHub repo - Stack Overflow
- 可以使用svn export (不进行版本管理)而不是checkout(同时下载了
.svn
文件夹) --depth=files
可以仅下载这个文件夹下面的文件,不深入下载
1 | svn export --depth=files https://github.com/JordanSamhi/JuCify/trunk/benchApps "$SCRIPTPATH/jucifybench" |
Linux下限制进程CPU和内存使用率
CPUQuota=100%
: 强制限制CPU使用,100%表示单核的100%,即上限不是100%,比如我有256核,则上限是25600%CPUWeight=idle
或CPUWeight=1
仅使用空闲的CPU。MemoryMax=32G
限制最大内存占用
1 | systemd-run --scope --same-dir --collect -p MemoryMax=32G -p CPUQuota=100% bash -c "xxx" # 限制内存和强制单核 |
默认需要root权限,加上--user
则不需要root权限了。但是现在好像有点问题,限制不住CPU和内存。
https://github.com/systemd/systemd/issues/10581
测试是否支持user模式:运行这个
1 | systemd-run --user --scope --same-dir -p CPUQuota=50% bash -c 'python -c "while True: i=1"' |
然后用htop观察CPU占用,看是否生效:看CPU占用是100还是50
进一步调试:https://github.com/systemd/systemd/issues/9502
相关系统配置:(仅使用的话不用管这一部分)
https://unix.stackexchange.com/questions/624428/cgroups-v2-cgroup-controllers-not-delegated-to-non-privileged-users-on-centos-s (里面的EOF应该不用写进文件)
Windows下稳定的挂起执行
https://github.com/winsw/winsw 不得不说比windows自带的task scheduler(任务计划程序)好太多。下面盘点一下task scheduler的坑点
启动失败后多久重新启动任务的选项,对于启动失败的定义完全不是返回值是否不为零,而是他有没有正常启动你的程序。也就是说完全不管你的返回值的。
从某个时间点后周期性重复的触发器,如果你设置无限重复,但是开始时间是过去,即使你选了那个错过了时间立刻启动也不管用。可以看到下次执行时间是几分钟后,但是几分钟后就是不给你执行。必须要把开始时间设置在几分钟后,正常触发一次。
https://superuser.com/questions/1676539/scheduled-task-does-not-run-after-being-re-enabled-again
DDNS
参见上一条,随便自己写个python脚本,然后用winsw
挂起来。python里面直接写死循环即可。比计划任务稳定多了。不得不说Windows计划任务真是垃圾。
1 | def do_once(): |
稳定的给自己的推送接口
通过qq邮箱SMTP,发给自己(同一个邮箱),通过qq的QQ邮箱提醒接收
方便地换硬盘重装系统
2022年9月13日 直接用DiskGenius的系统迁移功能,直接下免费版也能用。体验下来比备份与恢复(win7)
好很多。但是备份与恢复(win7)
用来给电脑做全盘备份还是不错的。
利用win10自带的 备份与恢复(win7)
借来一个大容量移动硬盘先备份,换硬盘之后恢复。
2021年12月19日 这个备份与恢复(win7)
其实还是有很多槽点的。一旦你用usb安装盘进入恢复过程,它给你报个错,你就完全没有任何办法。。。之前成功过两次,但也遇到了几次没办法的情况。今天尝试DiskGenius的系统迁移功能,新硬盘通过硬盘盒,usb连接电脑,然后热迁移过去。
将旧电脑系统连带硬盘迁移到新电脑
首先关bitLocker。其次是WSL导出并unregister。
使用下面命令准备系统:然后直接移动硬盘过去。
1 | %windir%\system32\sysprep\sysprep.exe /generalize /oobe /shutdown |
出现问题:
- 为单个用户安装的appx会造成问题,先卸载。用dism++
- 千万要先把微软账户退出改用本地账号啊!!!不然被微软联网登录卡得进不去账号
- 电脑真的第一次开机要保证不能换任何配件!才能激活。激活之后再换硬盘。
ida出现import site failed
清空自己的PYTHONHOME才行 或者通过bat启动
1 | set PYTHONHOME= |
SD卡作为内部存储
不需要改initrd,或者什么vold.fstab了。现在的安卓系统内置支持了。害的我还折腾,root手机。 sm set-force-adoptable true
大法, sm partition disk:179,64 mixed 60
表示留下60%的空间,将SD卡40%的空间用作内部存储。sm partition disk:179,64 private
表示将整个SD卡用作内部存储。
Magisk的通用安装方法
system as root
可能指没有boot分区,直接将system作为根目录。而不是像通常的boot目录作为initramfs只读启动,再挂载system分区。这种情况要patch recovery分区,开机的时候用进入recovery的方式开机。
找到当前手机rom刷机包,提取boot.img打patch,解锁手机后fastboot刷入。
红米6这样操作后似乎没了基带。注意考虑基带问题。
三星手机似乎非常复杂。
git从commit中提取patch
1 | git format-patch -1 HEAD |
想要把多个commit放到一个patch里,就先check out新branch,然后squash成一个,最后提取patch。
screen让ssh退出还能运行命令
1 | screen |
启动screen然后运行自己的命令,然后Ctrl-a, d就可以detach,安全离开ssh
1 | screen -r |
恢复之前的screen
如果报错Cannot make directory '/run/screen': Permission denied
执行sudo /etc/init.d/screen-cleanup start
。
移动硬盘被占用
- 任务管理器-资源监视器-CPU-句柄-搜索盘符
- 弹出失败时去事件查看器
eventvwr.msc
找Windows日志-系统-来源是Kernel-PnP的事件,会显示哪个进程拒绝了弹出
cmd启动UWP程序
例如Microsoft.WindowsTerminal_8wekyb3d8bbwe!App
用管理员cmd,cd到C:\ProgramData\Microsoft\Windows\AppRepository\Packages
然后dir看目录名字就可以了。或者everything搜。或者先pin到开始菜单再拖到桌面得到快捷方式,在看属性。
1 | explorer shell:appsFolder\Microsoft.WindowsTerminal_8wekyb3d8bbwe!App |
diff导出单个文件的patch
1 | "diff.exe" -Naru --strip-trailing-cr orig-file-path new-file-path > result.patch |
Visual Studio 字符集 Character Set
https://stackoverflow.com/questions/9349342/about-the-character-set-option-in-visual-studio
https://stackoverflow.com/questions/3298569/difference-between-mbcs-and-utf-8-on-windows
听说tchar不太好,Multi byte在GBK环境下可能不是指utf-8. 推荐处理windows API时全用wchar的版本。
输出方面,直接使用wchar版本输出函数,可能导致每个字符带一个空字符。使用 setmode(_fileno(stdout), _O_U16TEXT);
启用UTF-16输出。
system("chcp 65001")
可以配合在不带L的字符串常量,使用不带w的输出函数输出中文正常。(这可能和源代码的编码有关?)
猜测:codepage决定了multibyte的解码。
TODO: locale和chcp 、code page和setmode什么关系。
:涉及 setlocale(LC_ALL, "chinese");
_setmode(_fileno(stdout), _O_U16TEXT);
等操作
https://stackoverflow.com/questions/2492077/output-unicode-strings-in-windows-console-app
gdb如何断点自动执行命令并继续?
在使用hook-stop里使用continue会出现问题。但是使用break command
就可以了。
1 | def hook-stop |
Linux 目录的可执行权限
https://unix.stackexchange.com/questions/21251/execute-vs-read-bit-how-do-directory-permissions-in-linux-work
有点复杂,有机会再总结吧。
Life Tips
- 熬夜后头痛很可能是缺钾,可以通过香蕉和土豆补充。
- 刷牙重在时长,不需要追求刷得特别干净。因为主要是氟元素的化学反应。所以不如刷着牙做点别的。另外晚上睡前刷牙最重要。
- 和近视相关度最大的是自然光时间。多晒晒太阳吧。
- 合理的饮食应当以淀粉为主,淀粉在肚子里慢慢水解,为身体提供持续的能量。
- 剧烈运动能促进肠胃活动。如果肠胃有溃疡,应当尽早除幽门螺杆菌,虽然不会治疗溃疡,但是会没那么难受一些。
- 便秘考虑吃些纤维素补充剂。似乎木耳主要成分都是纤维素?但是木耳含水有90%,吃起来效率太低。
chroot 环境下Debug
主要问题是在chroot的环境下debug,没有proc文件系统。网上下了一个静态编译的gdb放进去。结果启动gdb 的时候出现了unable to disable address ramdonmization和不能跟随fork,set folllow-fork-mode child解决。gdb最开始调的时候还没有符号信息,好像是开了PIE而不能读取到mapping,关闭PIE好像就行了。。。。
最后发现是DNS的问题。。。在chroot的文件夹里新建etc,里面新建resolv.conf,里面写nameserver 8.8.8.8就可以了。
以后考虑看看chroot环境下能不能搞出procfs,这样可能就方便很多。
https://superuser.com/questions/165116/mount-dev-proc-sys-in-a-chroot-environment
影响程序堆布局的因素
- 程序自身的输入,如标准输入,打开的socket等等。
- 程序文件名,参数,环境变量。
如何带库移植ELF文件
ldd copy dependencies脚本复制所有用到的依赖
patchelf修改rpath
1
2
3for f in ./*; do
patchelf --set-rpath /home/wjk/raw/reallib2 $f
done比较坑的一点是,
patchelf $f --set-rpath /home/wjk/raw/reallib2
这样不行,文件一定要放到set-rpath后面。。。有时间去patchelf看看是不是确实有这个问题,提个PR。拿出
libc
,ld
,libpthread
librt.so
,libdl
。不要忘了libdl
。这次就是因为没有使用系统的libdl
而执行dlopen
函数的时候崩了。这些库都用目标系统的。如果还是崩就用下面这条检查检查文件访问,看看缺了什么文件,用gdb debug看看是不是加载什么库的时候崩的。
如何strace脚本的文件访问
1 | strace -f bash ./run.sh 2>&1 | grep bios |
strace 的-f
能够trace fork。一般访问文件的时候是openat
系统调用,或者access
。
Codimd slide放映模式 调整格式
图片:
1 | <img src="https://xxx.png" style="height: 60%; width: 60%"> |
其他: 注意在列表和html标签前后留空行
1 | <span style="font-size: 80%"> |
换行使用<br>
。
快速解决编译的exe的闪退问题
首先按住alt,拖动exe到当前目录,从而创建快捷方式。
然后编辑快捷方式的目标,在前面加上cmd[空格]/k[空格]
执行完exe就会回到cmd了,不会闪退了。
在Ubuntu中找到文件属于什么包
1 | dpkg -S "*/libclangBasic.a" |
手机电脑传文件
MT管理器的远程管理可以选择目录(局域网FTP)。
电脑可以开启一个https://github.com/filebrowser/filebrowser
Linux 进程池,时间内存消耗,超时
时间内存消耗:time:command line - Peak memory usage of a linux/unix process - Stack Overflow
超时:timeout