准备工具

最后更新于:2022年8月9日 早上

Windows 工具软件

  • Typora(用于一些复杂的 markdown 内容,例如表格)
  • VSCode(登录 Github 账号同步)
  • Go (为了使用 cf-tool)
  • MSYS2 (为了提供 C++17,gdb 和 python)
  • Git(将 cnblog 源码存到 github)
  • WSL(无法访问音视频设备,能力有限,但是依然很有意义),双系统还是必须的

不再推荐 MSYS2,推荐下载带 mingw 的 codeblocks 然后将 mingw 下的 bin 目录添加到环境变量

terminal 设置代理

一般 vpn 默认只是网页版本的,然后免费的 vpn 都不提供端口,所以做不了 terminal 的代理设置

Mac/Unix 设置

1
2
export https_proxy=127.0.0.1:xxx
export http_proxy=127.0.0.1:xxx

其中 xxx 是看自己 vpn 软件的设置中 提供的 http(s) 端口号,例如我的 41091

Win

1
2
set https_proxy=127.0.0.1:xxx
set http_proxy=127.0.0.1:xxx

WSL 设置

首先在 windows cmd/powershell 中输入 ipconfig 查看 WSL 的 ipv4 值,例如我的 127.17.176.1,然后在 WSL 中

1
2
export https_proxy=127.17.176.1:41091
export http_proxy=127.17.176.1:41091

对应的换成自己 WSL 的 ip 和 vpn 的端口号,注意 WSL 中的 ip 每次 windows 重启后可能就不一样了,需要再搞一次

WSL

根据官方教程 开启 wsl 功能再去 MS store 下载 ubuntu,然后配置阿里镜像源(在前面 + sudo),最后 sudo apt updatesudo apt upgrade 更新 apt 缓存

  • 安装 pip(自带 python3 却不带 pip)并配置 pip 清华镜像:pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
  • 安装 gcc
  • 安装 SageMath:Ubuntu 的快乐就是 apt install sagemath
  • 安装 jupyter notebook

Docker 使用

  • docker search ubuntu
  • docker pull ubuntu
  • docker run -it --name izlyforever ubuntu bash
  • 然后用 GUI 点击 terminal 开启,然后 换成 bash 打开
  • exit 或 ctrl + d 关闭。或者 ctrl + p 后 ctrl + q 暂时退出不关闭

编译器的一些参数

很多可以设置的,然后越严格越能检测出不少的错误,当然了版本越高的编译器,默认要求越严格,这也是为什么很多工程不能升级编译器的版本,不然会很麻烦。

正则表达式

在 VScode 中

  • 把单行 { 风格去掉的正则表达式 \n[ ]+\{(但是有注释就有点尴尬了)
  • 强制让 if 的内容包起来: [ ]+if .*[\)|;]$ (但是分成多行就尴尬了)

不要企图全局替换,format 全部代码是大忌!

Git 常见命令

添加 SSH 并复制到剪切板

1
2
3
ssh-keygen -t rsa -C "your_email@example.com"

clip < ~/.ssh/id_rsa.pub

然后把它粘贴到自己的 setting 的 SSH 中

SSH 验证

1
2
3
ssh-agent bash
ssh-add ~/.ssh/id_rsa
ssh -T git@github.com

unset

取消 config,例如

1
2
git config --global --unset user.name
git config --global --unset user.email

多账号 git

可参考:腾讯云社区

但是更好的方式就是一个 ssh 多用,然后用 ssh-add ~/.ssh/id_rsa 后提交,然后后来提交失败,再 add 一次即可

配置全局用户

1
2
git config --global user.name "yourName"
git config --global user.email "yourName@example.com"

这是不提倡的,应该每一个 git 仓库设置各自的 user.name 和 user.email

根据需要配置 .gitignore 文件

第一次提交

1
2
3
4
5
git init
git add .
git commit -m "first commit"
git remote add origin https://github.com/izlyforever/blog.git
git push -u origin master

利用 Python 一键更新(弃用,这个习惯并不好)

1
2
3
4
5
6
7
8
#os.system('git init')
#os.system('git remote rm origin')
#os.system('git remote add origin git@github.com:chachabai/blogSource.git')
if len(sys.argv) < 2:
os.system('git commit -a -m "update"')
else:
os.system('git commit -a -m "' + ' '.join(sys.argv[1:]) + '"')
os.system('git push origin master')

强制提交

1
git push -f -u origin master

使本地文件和远程一致

1
2
git fetch --all
git reset --hard origin/master

删除已经被跟踪但要放在 .gitignore 的文件

1
git rm --cached FileName

删除 untracked files

1
2
3
git clean -f
git clean -fd
git clean -nfd

回档

三种方式:

  • 去 github 网站,查看版本号,然后执行 git reset --hard <版本号>
  • git reflog 查看回档编号,然后 git reset --hard HEAD@{编号}
  • git reset –-hard HEAD ^ ( ^ 表示回到上一个版本,^^ 表示回到上上个版本)

最后记得强制提交

找回 git reset --hard 后的代码

新建分支

  • 创建新分支:git branch [branch name]
  • 切换到新分支:git checkout [branch name]
  • 创建+切换分支:git checkout -b [branch name]
  • 删除本地分支:git branch -d [branch name]
  • 删除远程分支:git push origin :[branch name]
  • 分支提交:git push origin [branch name]

扩大传输限制

fatal: 过早的文件结束符(EOF)

1
git config --global http.postBuffer 524288000

cherry-pick

merge 进了某个版本 A,要在另一个版本 B cherry-pick 的做法

  • 进入 B 版本目录创建一个分支,然后在这个分支上 执行 git cherry-pick [commit id]
  • 然后把冲突修改一下,然后 git add .,再 git cherry-pick --continue 即可

如果 cherry-pick 报 bad object 可能是因为代码还没更新 git pull 一下即可,如果还不行可能是因为 repo 弄错了

patch

类似与 cherry-pick,我们把自己的修改丢给别人,可以建分支让他人 cherry-pick 也可以生成一个 change.patch 文件,让别人直接应用。

生成实例:

1
2
3
git diff > change.patch
git diff fileName > change.patch
git format-patch HEAD^

git format-patch --help 可以看更详细的操作。git format-patch 的方式附带了 author 信息,git diff 自然没有,因为它还没有 commit 也就不可能有作者的信息

应用实例(方式一):

  • 检查 patch 文件是否合规:git apply --stat xxx.patch
  • 检查是否有冲突:git apply --check xxx.patch
  • 应用:git apply xxx.patch

结束后需要自己手动去 add, commit

应用实例(方式二):

对于 git format-patch 获取的 patch 文件,可以使用 git am xxx.patch 一步到位(此时的 author 和 commitMessage 的作者一致)

杂类

Unix-like man 命令后面的数字含义及作用

序号 意义 详解
1 commands 普通的命令
2 system calls 系统调用,如open, write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件)
3 library calls 库函数,如 printf, fread
4 special files 特殊文件,也就是 /dev 下的各种设备文件
5 file formats and convertions 文件的格式,比如 passwd,就会说明这个文件中各个字段的含义
6 games for linux 给游戏留的,由各个游戏自己定义
7 macro packages and conventions 附件还有一些变量,比如向 environ 这种全局变量在这里就有说明
8 system management commands 系统管理用的命令,这些命令只能由 root 使用,如 ifconfig
9 others

参考 https://blog.csdn.net/qq_21792169/article/details/50412417

Python 开服务器共享文件

  • python3: python -m http.server 8000
  • python2: python -m SimpleHTTPServer 8000

文件查找非 ASCII 字符

利用正则表达式搜索:[^\x00-\x7f]

Windows 命令行复制到剪切板

  • [命令] | clip
  • [命令] > a.txt 到文本后复制
  • 开启快速编辑,选中后+右键复制,直接右键是粘贴(所有系统均适用)

Linux 删除指定类型文件

find -name '文件名或目录名' | xargs rm -rf

Windows 批处理将 A 文件夹下所有文件全部复制(移动对应修改 copy 为 move 即可)到 B 文件夹中

1
2
3
4
5
6
7
8
9
10
11
@echo off
set target_path=D:\BaiduNetdiskDownload\1
set copy_target_path=D:\BaiduNetdiskDownload\2
set vcffile=*.vcf %这里对应修改成别的后缀或者删除就是没有后缀了%
C:
cd %target_path%
for /f "delims=" %%s in ('dir /b/a-d/s "%target_path%"\"%vcffile%"') do (
echo %%s
copy /y "%%s" %copy_target_path%
)
pause

Windows 批处理添加 zip 后缀

1
2
3
4
5
6
@echo off
setlocal enabledelayedexpansion
for /f %%i in ('dir /b *') do (
ren "%%i""%%i".zip
echo 批量重命名完成!
pause

网站二维码(欢迎扫码)

网站二维码

制作方法:

1
2
# 运行下面命令(提前 pip install myqr)得到以 avatar为背景的二维码
myqr "https://www.cnblogs.com/izlyforever/" -c -p avatar.png