一句话的问题

一句话的问题

很多问题的解决方案,虽然非常有用,但是概括起来不需要多少字,都汇总在这里。

[toc]

docker修改现有容器的参数,环境变量等

  • 停止docker daemon
  • 修改配置文件
    • 每个容器的json配置文件在/var/lib/docker/containers/{{.Id}}/config.v2.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=idleCPUWeight=1 仅使用空闲的CPU。
  • MemoryMax=32G 限制最大内存占用
1
2
systemd-run --scope --same-dir --collect -p MemoryMax=32G -p CPUQuota=100% bash -c "xxx" # 限制内存和强制单核
systemd-run --scope --same-dir -p CPUWeight=idle 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的坑点

  1. 启动失败后多久重新启动任务的选项,对于启动失败的定义完全不是返回值是否不为零,而是他有没有正常启动你的程序。也就是说完全不管你的返回值的。

  2. 从某个时间点后周期性重复的触发器,如果你设置无限重复,但是开始时间是过去,即使你选了那个错过了时间立刻启动也不管用。可以看到下次执行时间是几分钟后,但是几分钟后就是不给你执行。必须要把开始时间设置在几分钟后,正常触发一次。

    https://superuser.com/questions/1676539/scheduled-task-does-not-run-after-being-re-enabled-again

DDNS

参见上一条,随便自己写个python脚本,然后用winsw挂起来。python里面直接写死循环即可。比计划任务稳定多了。不得不说Windows计划任务真是垃圾。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def do_once():
# ... do real thing
pass

# 负责失败后短时间内重试
def do_retry():
ret = -1
while ret != 0:
ret = do_once()
sys.stdout.flush()
time.sleep(60)

if __name__ == '__main__':
while True:
do_retry()
time.sleep(7200)

稳定的给自己的推送接口

通过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

出现问题:

  1. 为单个用户安装的appx会造成问题,先卸载。用dism++
  2. 千万要先把微软账户退出改用本地账号啊!!!不然被微软联网登录卡得进不去账号
  3. 电脑真的第一次开机要保证不能换任何配件!才能激活。激活之后再换硬盘。

ida出现import site failed

清空自己的PYTHONHOME才行 或者通过bat启动

1
2
3
set PYTHONHOME=
set PYTHONPATH=
start C:\Users\warren\my_programs\IDA_Pro_v7.0_Portable\ida.exe

SD卡作为内部存储

stackoverflow

不需要改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

移动硬盘被占用

  1. 任务管理器-资源监视器-CPU-句柄-搜索盘符
  2. 弹出失败时去事件查看器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
2
3
4
5
6
7
def hook-stop
end
b usb_packet_copy
commands
print $rdx
continue
end

Linux 目录的可执行权限

https://unix.stackexchange.com/questions/21251/execute-vs-read-bit-how-do-directory-permissions-in-linux-work

有点复杂,有机会再总结吧。

Life Tips

  1. 熬夜后头痛很可能是缺钾,可以通过香蕉和土豆补充。
  2. 刷牙重在时长,不需要追求刷得特别干净。因为主要是氟元素的化学反应。所以不如刷着牙做点别的。另外晚上睡前刷牙最重要。
  3. 和近视相关度最大的是自然光时间。多晒晒太阳吧。
  4. 合理的饮食应当以淀粉为主,淀粉在肚子里慢慢水解,为身体提供持续的能量。
  5. 剧烈运动能促进肠胃活动。如果肠胃有溃疡,应当尽早除幽门螺杆菌,虽然不会治疗溃疡,但是会没那么难受一些。
  6. 便秘考虑吃些纤维素补充剂。似乎木耳主要成分都是纤维素?但是木耳含水有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

影响程序堆布局的因素

  1. 程序自身的输入,如标准输入,打开的socket等等。
  2. 程序文件名,参数,环境变量

如何带库移植ELF文件

  1. ldd copy dependencies脚本复制所有用到的依赖

  2. patchelf修改rpath

    1
    2
    3
    for f in ./*; do
    patchelf --set-rpath /home/wjk/raw/reallib2 $f
    done

    比较坑的一点是,patchelf $f --set-rpath /home/wjk/raw/reallib2这样不行,文件一定要放到set-rpath后面。。。有时间去patchelf看看是不是确实有这个问题,提个PR。

  3. 拿出libcldlibpthread librt.solibdl。不要忘了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
2
3
4
5
6
<span style="font-size: 80%"> 

- A
- B

</span>

换行使用<br>

快速解决编译的exe的闪退问题

首先按住alt,拖动exe到当前目录,从而创建快捷方式。

然后编辑快捷方式的目标,在前面加上cmd[空格]/k[空格] 执行完exe就会回到cmd了,不会闪退了。

在Ubuntu中找到文件属于什么包

1
dpkg -S "*/libclangBasic.a"

手机电脑传文件

MT管理器的远程管理可以选择目录(局域网FTP)。

电脑可以开启一个https://github.com/filebrowser/filebrowser

Linux 进程池,时间内存消耗,超时

进程池:xargs:Easy parallelization with Bash in Linux - A Foo walks into a Bar... - blog by Paul Shved - coldattic.info

时间内存消耗:time:command line - Peak memory usage of a linux/unix process - Stack Overflow

超时:timeout