堡垒机连接

  • 堡垒机连接 #快捷命令
ssh username@目标机器IP -p 22 -J username@跳板机IP:22
  • 多个堡垒机,使用空格分割

文件夹大小排序

  • 文件夹大小排序 #快捷命令
du -sh ./* | sort -rn

使用默认应用打开

see index.html

查看文件MIME类型

file --mime-type (file-name)

修改文件默认打开方式

alias open='xdg-open'
  1. mimetype filename
  2. 加到~/.config/mimeapps.list
[Default Applications]
inode/directory=nautilus.desktop
video/x-matroska=mpv.desktop

mdbook

#!/usr/bin/env python3
# coding=utf-8
#!/usr/bin/python3
# coding=utf-8
import os
import sys

result = "#Summary\n\n"
is_sort = True


def createBook(file, tab, path):
    global result
    if is_sort:
        file.sort()
    for name in file:
        temp = os.path.splitext(os.path.basename(name))[0]
        dirname = path+name
        if os.path.isdir(dirname):
            base = path+name+"/README.md"
            if os.path.isfile(base) == False:
                base = ""
            if os.path.isfile(dirname+".md"):
                base = dirname+".md"
            result = result+tab+"- ["+temp+"]("+base+")\n"
            createBook(os.listdir(dirname), tab+"\t", path+name+"/")
        else:
            if name == "README.md" or name == "SUMMARY.md":
                continue

            # 获取文件的非后缀部分
            file_path = os.path.splitext(dirname)[0]
            if os.path.isdir(file_path):
                continue
            # 获取文件的后缀
            file_ext = os.path.splitext(dirname)[1]
            if file_ext != ".md":
                print("Warning:", dirname, "is not md file,ignore")
                continue

            base = path+name
            result = result+tab+"- ["+temp+"]("+base+")\n"


def main():
    global result
    if len(sys.argv) == 1:
        print("Usage: python3 update.py {dir_path}")
        return
    dir_path = sys.argv[1]
    if os.path.isdir(dir_path) == False:
        print("dir is not exist")
        return
    os.chdir(dir_path)

    if os.path.isfile("./SUMMARY.md"):
        os.remove("./SUMMARY.md")
    if os.path.isfile("./README.md"):
        result = result+"- [README](./README.md)\n"
    createBook(os.listdir("."), "", "./")
    f = open("./SUMMARY.md", "w+")
    f.write(result)
    f.close()
    os.chdir("..")
    print(" create ok")


if __name__ == "__main__":
    main()

磁盘挂载

垃圾ibus

  • ibus-daemon -r -d -x## fcitx词库
  • https://zhuanlan.zhihu.com/p/508797663

fcitx ctrl-;

  • https://zhuanlan.zhihu.com/p/113980639

fcitx候选词调整

  • 配置 -> 双击 ->候选词顺序全部调整为快速

fcitx全角半角

  • sudo apt-get install fcitx-ui* 然后重启打开输入法就可以看到选项了
  • 傻逼fcitx如果需要设置的话需要在输入法中设置 拼音 这个输入法进行设置,右键点击,需要出现大一点的画面才能进行设计,太愚蠢了,其他的输入法无法进行设置,推荐默认半角,全角都是傻逼

bashrc和profile

  • ~/.bash_profile 是交互式、login 方式进入 bash 运行的
  • ~/.bashrc 是交互式 non-login 方式进入 bash 运行的

如果只需要执行一次,推荐放入profile,否则通通放入bashrc login方式使用的是登录系统获得的顶层shell no-login使用套娃的shell

mint开机错误

  1. vim /etc/default/grub
  2. 修改GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"GRUB_CMDLINE_LINUX_DEFAULT="quiet splash loglevel=3"
  3. sudo update-grub

mint非显卡驱动问题

  • sudo apt dist-upgrade
  • sudo apt upgrade >upgrade:系统将现有的 Package 升级,如果有相依性的问题,而此相依性需要安装其它新的 Package 戒影响到其它 Package 的相依性时,此 Package 就丌会被升级,会保留下来. dist-upgrade:可以聪明的解决相依性的问题,如果有相依性问题,需要安装/移除新的 Package,就会试着去安装/移除它. (所以通常 dist-upgrade 会被认为是有点风险的升级)

key证书生成pem证书

  • openssl rsa -in (key name).key -out (new name).pem

自签名证书 openssl 生成

openssl req -x509 -newkey rsa:4096 -sha256 -nodes -keyout privkey.pem -out cacert.pem -days 3650

[!tip] 参考 openssl生成pem数字证书_openssl使用tls1.2生成pem-CSDN博客 Openssl生成自签名证书,简单步骤 - 凝雨 - Yun

stderr和stdout区别

  • stderr不缓存,直接输出到屏幕
  • stdout行缓冲,等一行再输出

禁用密码登录

  1. 修改SSH的配置文件/etc/ssh/sshd_config
  2. PasswordAuthentication yes修改为PasswordAuthentication no

查询进程的完整路径

  1. 获取进程的pid,可以使用lsof,ps aux|grep {name}等方式
  2. 运行ls -l /proc/{pid}/exe

将docker容器日志保存

  • docker logs 容器id &> $(date '+%Y%m%d%H%M%S').log
1> 或 > :把STDOUT重定向到文件
2> :把STDERR重定向到文件
&> :把标准输出和错误都重定向
>& :和上面功能一样,建议使用上面方式

source和直接运行区别

  • 直接执行脚本文件:当直接执行脚本文件时,操作系统会新建一个子进程来运行脚本文件,这个子进程将作为父进程的一个子进程存在。因此,父进程无法访问子进程中定义的变量和函数。而且,子进程中对环境变量、当前目录等的修改也不会影响到父进程。
  • 使用source命令调用脚本文件:当使用source命令调用脚本文件时,脚本文件中定义的变量和函数将在当前shell环境中生效,而不是在一个新的子进程中被执行。因此,通过source命令调用脚本文件可以实现在当前shell环境中定义变量、函数等操作,同时也可以访问在其他地方定义的变量和函数。

xmodmap使用

按键重新映射

1. 获取键码

  • xev

2. 获取按键名字

  • xmodmap -pke | grep 键码 (所有键码)
  • xmodmap -p 获取修饰按键信息

3. 设置按键映射

remove lock = Caps_Lock # 将产生lock的按键列表中除去caplock按键
add control = Caps_Lock # 将ctrl按键列表中添加Caps_Lock按键
keycode 66 = Control_L # 将66(原来是caplock)映射按键名字为Control_L

firefox阅读模式

  • 我平等的鄙视csdn和已经所有现在还在csdn上发文的人
  • about:configreader.parse-on-load.enabled则只为true
  • 网页url前加上
about:reader?url=

firefox阻止不安全混合

  • https网页中相互先有http请求的内容自动拦截,解决办法

将caplock映射为中英文切换

  1. 将caplock设置为menu按键(使用系统设置或者xmodmap)
  2. 将menu按键设置为中英文切换按键(使用输入法设置)

触控板设置mac类似手势

#cmd
# libinput-gestures-setup start|stop|restart|autostart|autostop|status|remove

#install
# sudo gpasswd -a $USER input(remember to boot)
# git clone https://github.com/bulletmark/libinput-gestures.git
# cd libinput-gestures
# sudo ./libinput-gestures-setup install

#uninstall
# libinput-gestures-setup stop autostop
# sudo libinput-gestures-setup uninstall

#update config
# libinput-gesture-setup restart

#doc
# https://github.com/bulletmark/libinput-gestures

gesture swipe up 3 xdotool key Ctrl+Alt+Down(这部分快捷键根据键盘设置的快捷键进行)
gesture swipe left 3 xdotool key Ctrl+Alt+Tab
gesture swipe right 3 xdotool key Shift+Ctrl+Alt+Tab

ssh长时间无操作自动断开

以下操作只需要执行一个

客户端

  1. vim ~/.ssh/config
Host *
	ServerAliveInterval 30
	ServerAliveCountMax 2
  1. 重新启动终端ssh

服务器

  1. sudo vim /etc/ssh/sshd_config
  2. 查找以下注释字段取消注释或直接添加至文件
ClientAliveInterval 60
ClientAliveCountMax 3

zotero黑暗模式设置

  • 插件链接,步骤参考
  • 如果找不到pdf的按钮可以通过alt+shift+c去快速切换模式(zoter-dark-7插件有):7.0.0-beta.65+b047f3d90 (64-bit) 0.1.0-2

zotero同步设置

批量替换文件内容

mac 需要 brew install gnu-sed 然后用gsed

  • sed+grep
sed -i "s/{查找内容}/{替换内容}/g" \`grep "{查找内容}" -rl ./ --exclude-dir=".git"\`
  • sed+find
#!/bin/bash

# 检查参数数量
if [ "$#" -ne 2 ]; then
  echo "Usage: $0 <old_string> <new_string>"
  exit 1
fi

# 在当前目录及其所有子目录中查找并替换目标字符串
# 根据操作系统设置sed命令参数
if [[ "$OSTYPE" == "darwin"* ]]; then
  # 如果是Mac,使用空字符串作为备份后缀
  find . -path './.git' -prune -o -type f -exec sed -i '' "s|$1|$2|g" {} +
else
  # 如果是Linux,省略备份参数
  find . -path './.git' -prune -o -type f -exec sed -i "s|$1|$2|g" {} +
fi


echo "String replacement completed."

为clash默哀

clash linux设置

  1. 解压后运行,将链接放到clash ->profiles中并点击download
  2. 默认绑定顶端口为7890,这个可以自己设置,在clash->general第一个设置就是,用lsof -i:8889看一下是否更改成功
  3. 网络设置-> 网络代理 -> 设置为手动设置并且全部更改为127.0.0.1:8089
  4. 退出clash的时候记得关闭网络代理

html格式化

#!/bin/bash
clear
echo $1
cat $1 > HTML
echo -n "cat HTML " > CMD
#eval $(cat CMD)
TAGS=$(cat HTML |sed 's/</\n</g' |awk -F " " '{print $1}' |grep -v "</\|?\|&&\|!" |awk -F "<|>" '{print $2}' | sort -u |xargs);
echo $TAGS;
for tag in ${TAGS[@]};  do cmd="|sed 's/<$tag/\n<$tag/g'"; echo -n $cmd >> CMD; done;
#cat CMD;
eval $(cat CMD) | tee -a HTML

rm CMD
rm HTML

打包下载gitlab库

  • token需要去setting生成
#!/usr/bin/env python3
# coding=utf-8
import requests
import os
from urllib.parse import urlparse


base_url=input("Enter Gitlab Group Url: ")
parsed_url = urlparse(base_url)
domain = parsed_url.netloc
group = parsed_url.path.strip('/').split('/')[-1]
base_url = f"https://{domain}/api/v4/"

token=input("Enter Gitlab Access Token: ")

param=input("Enter Git Clone Param (optional): ")


def gitlab_api_request(endpoint, params=None):
    # base_url = "https://gitlab.demo.cn/api/v4/"  # 请替换为你的 GitLab 实例 URL
    # token = "demo"  # 请替换为你的 GitLab 私有访问令牌

    headers = {"PRIVATE-TOKEN": token}
    response = requests.get(base_url + endpoint, headers=headers, params=params)

    if response.status_code == 200:
        return response.json()
    else:
        raise Exception(f"GitLab API request failed with status code {response.status_code}: {response.text}")

def clone_project(project, path='.'):
    project_path = os.path.join(path, project['path_with_namespace'])
    project_url = project['ssh_url_to_repo']  # 使用 SSH 克隆链接

    # Clone the project
    os.system(f"git clone {param} {project_url} {project_path}")

def clone_group_recursive(group_id, path='.'):
    group_info = gitlab_api_request(f"groups/{group_id}")
    group_name = group_info['name']
    group_path = os.path.join(path, group_name)

    os.makedirs(group_path, exist_ok=True)

    # Clone projects in the group
    projects = gitlab_api_request(f"groups/{group_id}/projects")
    for project in projects:
        clone_project(project, group_path)

    # Recursively clone subgroups
    subgroups = gitlab_api_request(f"groups/{group_id}/subgroups")
    for subgroup in subgroups:
        subgroup_id = subgroup['id']
        clone_group_recursive(subgroup_id, group_path)

if __name__ == "__main__":
    # group_id = input("Enter GitLab Group ID: ")
    destination_path = input("Enter Destination Path (default is current directory): ") or '.'

    clone_group_recursive(group, destination_path)

    print(f"Cloning of GitLab Group {group} and its subgroups completed.")

agent refused operation

  • 出现这个问题看一下私钥是不是600的权限,大部分是.ssh权限的设置出问题了

termux

  • ubuntu系统搭建参考
  • root用户termux-chroot命令
  • 电脑远程连接手机termux参考
    1. pkg install openssh
    2. sshd # 开启ssh连接
    3. 复制ssh密钥
    4. ssh -p 8022 <user>@<IP地址>
  • termux访问手机文件夹,参考文章
    1. pkg install termux-api
    2. termux-setup-storage
    3. cd ~/storage

linux文件目录

系统目录作用

.
├── bin -> usr/bin  # 可执行文件的文件夹
├── boot # 这个目录用来存放系统启动所需文件、内核, 开机菜单以及所需配置的文件等
├── dev # 存放外设,例如串口等
├── etc # 配置目录,例如nginx
├── home # 家目录
├── lib -> usr/lib # 存放着系统最基本的动态连接共享库
├── lib32 -> usr/lib32 # 32位动态库
├── lib64 -> usr/lib64 # 64位动态库
├── libx32 -> usr/libx32
├── lost+found # 一般情况下是空的,当系统非法关机后,这里就存放了一些文件
├── media # 自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下
├── mnt # 挂载目录
├── opt # 给主机额外安装软件所摆放的目录
├── proc # 存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射
├── root # root用户默认目录
├── run # 临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。
├── sbin -> usr/sbin # root使用的bin
├── srv # 存放一些服务启动之后需要提取的数据。
├── swapfile # 交换文件
├── sys
├── tmp
├── usr # usr 是 unix shared resources(共享资源) 的缩写
└── var # var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
  • 用户自定义desktop地址~/.local/share/applications/

ssh github无法连接

  1. 首先检查ssh时能能通,参考常用命令 > DNS
  2. 尝试使用443端口进行push
    1. 编辑~/.ssh/config
    2. 插入代码
    3. 再次尝试是否能push
Host github.com
	Hostname ssh.github.com
	Port 443
	User git
  1. 如果还有问题开梯子之后设置git代理,这部分参考gitothers > git 设置代理

有时,防火墙会完全拒绝允许 SSH 连接。 如果无法选择使用具有凭据缓存的 HTTPS 克隆,可以尝试使用通过 HTTPS 端口建立的 SSH 连接克隆。 大多数防火墙规则应允许此操作,但代理服务器可能会干扰。

ssh免密登录失败

Clash 终端代理

  • 一次性设置,关闭终端自动取消
export https_proxy=http://127.0.0.1:8889;
export http_proxy=http://127.0.0.1:8889;
export all_proxy=socks5://127.0.0.1:8889;
  • 删除变量用unset
unset https_proxy
unset http_proxy
unset ftp_proxy
unset all_proxy

[!tip] 参考 https://docs.github.com/zh/authentication/troubleshooting-ssh/using-ssh-over-the-https-port

npm

查看包的所有历史版本

  • 运行npm view <包名> versions

yarn/npm install 下载不了

OCR

  • 安装:sudo apt install tesseract-ocr,安装语言包sudo apt-get install tesseract-ocr-chi-sim
  • 使用tesseract <需要ocr的图片> stdout -l chi_sim

jsDelivr失效问题

博客跨域图片问题

  • html中加上 <meta name="referrer" content="never">

[!tip] 参考 隐藏来源 禁用Referrer 的方法 - 枫若 - 博客园

kill

  • #快捷命令 kill快速杀死某个进程
kill -9 `ps aux |grep  mirrormaker|awk '{print $2}'`

软件收集

查看程序占用哪几个端口

  • #快捷命令 查看程序占用哪几个端口
lsof -i -P | grep ssh

/lib64/libstdc++.so.6: version 'CXXABI_1.3.8‘ not found

  • libstdc++库的问题,找到正确的so文件
  1. mkdir -p ~/.local/lib64;cp <right so file> ~/.local/lib64创建文件夹
  2. export LD_LIBRARY_PATH=$HOME/lib64:$LD_LIBRARY_PATH 设置环境变量,推荐加入~/.bashrc之后source立刻生效

/libc.so.6: version GLIBC_2.34' not found

  1. sudo vi /etc/apt/sources.list
  2. 添加 deb http://th.archive.ubuntu.com/ubuntu jammy main #添加该行到文件
  3. 运行升级
sudo apt update
sudo apt install libc6

[!tip] 参考 version `GLIBC_2.34‘ not found简单有效解决方法_glibc 2.34 not found-CSDN博客

ras密钥生成

  • #快捷命令 ssh-keygen -t rsa 生成ras公私钥

Bad owner or permissions on .ssh/config

  • chmod 600 ~/.ssh/config

ssh远程执行命令

  • 使用ssh <name>@<ip> "要执行的bash命令"

gitbook下载

docker部署

推荐使用这种

本地部署

一大堆问题,不推荐

正则表达式

前瞻,后顾,负前瞻,负后顾

// 前瞻:
exp1(?=exp2) exp1后边是exp2就匹配
// 后顾:
(?<=exp2)exp1 exp1前边是exp2就匹配
// 负前瞻:
exp1(?!exp2) exp1后边不是exp2就匹配
// 负后顾:
(?<!exp2)exp1 exp1前边不是exp2就匹配

查找上次内存吃太多的命令

  • sudo cat /var/log/syslog | grep -i "out of memory"

rust

cargo加速

  1. 编辑$HOME/.cargo/config
  2. 修改为
[source.crates-io]
replace-with = 'mirror'

[source.mirror]
registry = "sparse+https://mirrors.tuna.tsinghua.edu.cn/crates.io-index/"

rust-analyzer Fetching metadata

  • 运行rm -rf ~/.cargo/.package-cache

bing Access Denied

  • windows 下参考 https://answers.microsoft.com/zh-hans/microsoftedge/forum/all/bing%E4%B8%BB%E9%A1%B5%E6%89%80%E6%9C%89%E6%90%9C/5a7036e7-e5e8-433c-8363-38c42e12d8e7

Snap卸载

apt出现restart选项

  1. 编辑 /etc/needrestart/needrestart.conf 文件
  2. 找到下面这行, i 代表交互式重启 a 代表自动重启, l 代表列出,直接改成 l
#$nrconf{restart} = 'i';

日志清理

journalctl --vacuum-time=2d
journalctl --vacuum-size=500M

快速配置nginx的https证书

certbot

使用的是let's encrypt 和 certbot,目前只支持nginx和apache

  1. 安装
apt install certbot python3-certbot-nginx
  1. 使用certbot --nginx按照提示进行填写
  2. 运行 crontab -e然后添加 0 0 1 * * /usr/bin/certbot renew --quiet,这样每个月第一天都会尝试进行更新

acme.sh

使用的是let's encrypt 和 acme.sh

  1. 下载 curl https://get.acme.sh | sh ,不推荐,因为服务器难连github,推荐方式 git clone https://gitee.com/neilpang/acme.sh.git;cd acme.sh;./acme.sh --install -m <自己的邮箱>
  2. 参考创建阿里云AccessKey_访问控制(RAM)-阿里云帮助中心获取阿里云的secret id和key,如果没有用户首先创建用户,然后对用户进行授权,搜索权限dns全部选择
  3. export Ali_Key="xxx" && export Ali_Secret="xxx"设置环境变量,然后设置 ./acme.sh --issue --dns dns_ali -d example.com -d *.example.com 获取证书
  4. 安装证书(证书的默认位置在 /root/.acme.sh/<域名> ),更新证书用 --renew,pem文件本质是通用的
./acme.sh  --installcert  -d  <domain>.com --key-file   /etc/nginx/ssl/<domain>.key --fullchain-file /etc/nginx/ssl/fullchain.cer --reloadcmd  "service nginx force-reload"
  • 参考run.sh
export Ali_Key=""
export Ali_Secret=""

domain=""
mkdir ~/cert

./acme.sh --issue --dns dns_ali -d $domain -d *.$domain
./acme.sh --installcert  -d $domain --key-file ~/cert/$domain.key  --fullchain-file ~/cert/$domain.cert

[!tip] 参考 acme.sh使用阿里云DNS申请Let’s Encrypt的https证书_acme.sh 阿里云-CSDN博客

证书管理

  • 非交互式
certbot \
--non-interactive \
--standalone \
--email mymail@provider.com \
--agree-tos \
--no-eff-email \
--domains mydomain.com \
--installer nginx
  • 展示证书certbot certificates
  • 更新证书 certbot renew
  • 撤销证书 certbot revoke --cert-name <证书名字>

[!tip] 参考 如何使用 Let's Encrypt 和 Certbot 获取免费的 SSL/TLS 证书 在 Ubuntu 22.04 上使用 Let‘s Encrypt 配置 Nginx SSL 证书_ubuntu let's encrypt-CSDN博客

clash server服务器配置

  1. Release 1.18 · Kuingsmile/clash-core · GitHub 下载最新的 clash-core(gitee上有这两个文件的压缩包)
  2. Country.mmdb 下载文件,放到 ~/.config/clash/ (没有就创建这个文件夹)
  3. 创建 ~/.config/clash/config.yml ,将自己的clash的配置文件(某个长长profile粘贴进入)
  4. 运行二进制文件,配置终端代理如下,参考Clash 终端代理
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
export all_proxy=socks5://127.0.0.1:7890

PhantomJS部署

无头浏览器截图神器, 用于直接保存网络快照

  1. 下载二进制文件下载 | PhantomJS或者 gitee
  2. 注意以下,运行二进制之前需要添加 export OPENSSL_CONF=/dev/null
  3. 网页截图参考下面js,将js文件作为参数传入二进制就可以了
var page = require('webpage').create();
page.open('https://www.gov.cn/', function() {
  page.render('result.png');
  phantom.exit();
});
  • 总结shell脚本
#!/bin/bash
export OPENSSL_CONF=/dev/null

# read url from first argument,if not set ,exit and print usage
# read result name from second argument,if not set,use result.png
if [ -z $1 ]; then
    echo -e "Usage: $0 <url> <result_name>\n\turl: the url to capture\n\tresult_name: the name of the result file\n 
Snapshot the website from url and save it as a png file\n"
    exit 1
fi
if [ -z $2 ]; then
    result_name="result.png"
else
    result_name=$2
fi

url=$1
tmp_file=`mktemp`
echo -e "var page = require('webpage').create();page.open('$url', function() { page.render('$result_name'); phantom.exit(); });" > $tmp_file
~/file/app/others/phantomjs-2.1.1-linux-x86_64/bin/phantomjs $tmp_file

Obs

扩展屏录制

  • 来源那里双击屏幕捕捉,设置就可以了

画质设置

  • 文件 -> 设置 -> 视频 -> 输出分辨率

KeeWeb

手机端推荐使用keepass2android

webdev同步指南

  1. 坚果云获取帐号密码, more -> webdev
  2. 设置 -> 存储 -> 点击始终重新加载文件,保存方式为 以PUT方式覆盖文件
  3. 主界面输入信息
  4. 然后回到主界面是让你输密码的,而不知报错返回的
  5. 调整为中文(通过插件那里下载plugin)

markdown

  1. github 插入视频的方法为 <video src="" controls="controls" width="500" height="300"></video> 记得前面后面空一行,参考 使用Markdown语言在博客的文章中添加视频 · GitHub

输入法

  • linux 下 sunpinyin是最好用的,以及需要使用fictx框架进行安装

chrome

安装

  • sudo apt install chromium-browser 直接安装

黑暗模式

存储限制

  • 需要将“关闭所有窗口时清除 Cookie 及网站数据”开关关闭

[!tip] 参考 chrome浏览器存储空间只有300MB左右的解决方法

服务器问题

no route to host 无法连接

  • 防火墙的问题 sudo systemctl stop firewalld.service 关闭就可以了

github

github 真的是太好用了. 真的是赛博活佛, 不得不说这玩意比gitee那种纯垃圾好用多了

在线编辑器

  • 在 仓库 界面 按下 . 自动打开类似vscode的界面, 在线编辑更改小细节更加简单

codespace

  • 更加炸裂的功能, 基本上就是云上开发机器, 对某个仓库 Code -> CodeSpace 打开, 直接一分钟初始化一个环境出来, 可以直接运行并下载文件, 可以绑定端口进行转发
    • 意味着未提供可执行文件的仓库完全可以在codespace直接编译, 完全不需要在本地仓库进行编译(特别是前端的项目)
    • 以后如果要改造github项目直接fork然后创建space的了,不需要弄麻烦的本地编译环境了
  • 免费额度是15 GB/月存储 120 每月核心小时数

[!tip] 参考 GitHub Codespaces 快速入门 - GitHub 文档 关于 GitHub Codespaces 的计费 - GitHub 文档

CICD

最新的 release链接

  • 类似 https://github.com/<username>/<reponame>/releases/latest/download/<assetname>

excalidraw

支持latex 和中文 搭建

[!tip] 相关网站 Excalidraw | Hand-drawn look & feel • Collaborative • Secure Remix Icon - Open source icon library

卸载 deb包

  • apt list --installed | grep -i chrome 查询, 然后 apt remove 卸载掉

[!tip] 参考 zhuanlan.zhihu.com/p/548692652

ping: Temporary failure in name resolution

  • dns 解析的问题, 在 /etc/resolv.conf 最后加上 nameserver 8.8.8.8 即可

查询进程的父进程

通常用于某个傻逼进程开了守护进程, 杀了自动重启的问题

  • ps -ef 第三列就是父进程pid, 第二列是本身的pid