0%

Tricks for Dev

此贴用来记录一些日常使用和开发中的小技巧~

Program

清除macOS垃圾

1
find . -name '. DS_Store' -type f -delete

Git清除commit记录

1
2
3
4
5
6
7
8
9
git reset COMMIT_ID --soft/--hard

git fsck --unreachable

git reflog expire --expire-unreachable=now --all
git gc --prune=now

git reset --hard SHA1
git reset --hard HEAD^ (HEAD后面有几个^,就是撤销到往前第几次)

GitHub Debug

1
2
- name: Setup tmate session
uses: mxschmitt/action-tmate@v3

在Git历史中搜索字符串

Git can search diffs with the -S option (it’s called pickaxe in the docs)

1
git log -S password

This will find any commit that added or removed the string password.

快速搭建文件服务器

例如远程文件下载。

1
python -m http.server PORT

Vim保存时发现没有权限

进入冒号,然后输入:%! sudo tee % > /dev/null

解释:

1
2
3
4
5
6
%       #VI/VIM编辑的文件内容
!      #管道
sudo     #以root权限操作
tee     #将标准输入(即通过管道过来的当前编辑的文件内容)输出到标准输出,同时写入到指定的文件中(即VI/VIM当前编辑的文件)
%      #VI/VIM编辑的文件
\> /dev/null  #将标准输出重定向到/dev/null(不输出显示)

htop的颜色

image-20220705104210106

端口转发

例如将IPv6的流量转发到IPv4:socat

1
socat TCP6-LISTEN:5901,ipv6-v6only=1,reuseaddr,fork TCP4:127.0.0.1:5901

System

为Hyper-V中Ubuntu打开增强会话:

s.i207m.top/HDKAhe

1
2
3
4
5
6
https://github.com/microsoft/linux-vm-tools

/etc/xrdp/xrdp.ini :

port=vsock://-1:3389
use_vsock=false

命名管道

好东西,好东西,文件系统级别的管道,跨语言。

1
2
3
4
# bash: mkfifo <name>

import os
os.mkfifo()

查看进程 & 查看端口占用

1
2
3
4
5
6
7
8
9
10
11
12
# Linux
ps -aux # 查看进程号
netstat -ap # 查看占用端口的程序
lsof -i:8080

# 列出所有
sudo lsof -i -P -n | grep LISTEN
sudo netstat -tulpn | grep LISTEN
sudo ss -tulpn | grep LISTEN

# Windows
netsh interface ipv4 show excludedportrange protocol=tcp # 列出系统保留端口

查看公网IP

curl ip.i207m.top -L

事实上我部署的这一服务会列出所有headers。添加-L的原因是网站只接受HTTPS连接。

其他:curl ip.sb

Linux全局代理

在命令前加上proxychains/proxychains-ng 相关配置看这里

统计文件夹大小

du -h --max-depth=1

压缩文件

1
2
3
4
5
6
zip -r [file_name.zip] [files/folder to zip] -x [file path/name to exclude]
unzip
# 也可以使用 7za
# 也可以使用 tar
tar -zcvf 压缩文件名 .tar.gz 被压缩文件名
tar -zxvf 压缩文件名.tar.gz

Ubuntu安全更新

1
apt list --upgradable | grep -e "-security" | awk -F "/" '{print $1}' | xargs apt install

仅列出

1
sudo apt list --upgradable | grep -e "-security"

Windows任务管理器内存占用

很多时候发现任务管理器里占用的内存加起来远小于系统实际占用的内存,Why?

TL; DR 资源监视器里的内存—工作集才是真正占用的。

扩展阅读

(你要是觉得 Windows 的这个难以看懂,那 Linux 这边会更让人吃惊,因为起码 Windows 还能算准总的内存使用,Linux 干脆连总总量都有多种不同口径)前面说了,主要的问题在于多个进程之间可以有共享内存,这意味着计算的时候,有 3 种可能的思路,分别满足三种特性中的两个,即所谓不可能三角

  1. 不算共享的,这就会导致直接相加后少于实际内存使用
  2. 算共享的,这就会导致直接相加后多于实际内存使用
  3. 算共享的,但是那部分数据除以被共享的次数,可以让加起来的总和等于实际内存使用,但是可能会出现开新进程后,单个进程显示内存使用率反而降低的反常情况

(这 3 种算法就是所谓的 USS RSS PSS )可以看出,并不存在一种完美的算法能准确衡量单个进程的内存使用。而之所以说 Linux 这边更复杂,则是因为 Linux 默认启用了 overcommit 特性,加了个 VSS 指标,申请的内存可以大于实际使用的。这下好了,连找到总内存利用率都变成了不可能的任务。好多人在 Linux 下试图做 fallible allocator,实际根本没用,OOM 基本都是发生在访问内存而不是分配内存的时候。

将stdout同时输出到终端和文件

1
SomeCommand 2>&1 | tee SomeFile.txt

(If you want the output only, drop the 2>&1 above)

Language

‘use strict’

'use strict'指令在 JavaScript 1.8.5 (ECMAScript5) 中新增。

它不是一条语句,但是是一个字面量表达式,在 JavaScript 旧版本中会被忽略。

'use strict'的目的是指定代码在严格条件下执行。严格模式下你不能使用未声明的变量。还有更多。

Philosophy

命名规范

deprecated

较长的变量名用下划线,特别的,Go语言用小驼峰式。常量全大写+下划线。

URI用短横线。