常用软件和工具
Useful Tools
软件 | 平台 | 功能 |
---|---|---|
Logseq | 全平台 | 1. 笔记软件: Markdown & Excalidraw & 双链 & 卡片 2. 插件:Markmap / Drawio / Lucksheet / … |
Typora | 全平台 | 所见即所得的 Markdown 编辑器。单文档超 4k 词后,编辑会比较卡@2023 |
freefilesync | 全平台 | 文件同步工具 |
VeraCrypt | 全平台 | 开源文件加密工具 |
Snipaste | 全平台 | 经典截屏与贴图工具 |
FastCopy | Win | 快速文件拷贝 |
Terminal&SSH
Tabby
- Tabby Terminal: https://github.com/Eugeny/tabby
- Tabby rzsz: https://github.com/trzsz/trzsz-go
tszrz
Ubuntu 安装:
sudo apt update && sudo apt install software-properties-common
sudo add-apt-repository ppa:trzsz/ppa && sudo apt update
sudo apt install trzsz
Centos:
curl -fsSL "https://sh.wlnmp.com/wlnmp.sh" | bash
sudo yum install trzsz
SSH Tunnel
SSH 除了登录服务器,还有一大用途,就是作为加密通信的中介,充当两台服务器之间的通信加密跳板,使得原本不加密的通信变成加密通信。这个功能称为端口转发(port forwarding),又称 SSH 隧道(tunnel)
以下面命令为例,发送到本地端口 5909 的数据将被 SSH 通道(xxx@yearn.xyz -p1234
)转发到 192.1x8.111.xx0:5901
ssh -L 5909:192.1x8.111.xx0:5901 xxx@yearn.xyz -p1234 -N
mac 下有个免费的 tunnel mgr:brew install –cask ssh-tunnel-manager,官网文档参考
X11 forwarding
Mac 可以利用 xquartz 实现 X11 frd,细节可以参考这里
Tmux
终端复用工具,mac 下 ctrl 对应 control 快捷键,按下并松开 ctrl+b 将激活 tmux 的命令模式,然后点击其他键实现快捷操作,细节可参考这里。嵌套 tmux 场景,按着 ctrl,点击两次 b 键,这样发出的 tmux 指令就是发送到内层窗口会话。常用命令与快捷键:
# 使用 256 色,默认情况下的色彩不够丰富
# 可以在 ~/.bashrc 中添加如下内容 alias tmux='tmux -u -2'
tmux -u -2
tmux new -s xxx # 创建新会话
tmux ls # 显示存在的会话
tmux a -t xxx # attach 指定会话
tmux list-keys
tmux kill-session -t verilog
Ctrl+b & # kill window
Ctrl+b x # kill pane
Ctrl+b d # 分离当前会话
Ctrl+b s # 列出所有会话
Ctrl+b num # 快速切换到对应 tag num 的窗口
Ctrl+b c # 创建一个新窗口
Ctrl+b % # 划分左右两个窗格
Ctrl+b " # 划分上下两个窗格
Ctrl+b ; # 光标切换到上一个窗格
Ctrl+b w # 从列表中选择窗口
Ctrl+b , # 修改当前 win 名称
.tmux.conf
在 tmux 内使配置生效可以执行可使用快捷键 ctrl-b :
进入 tmux 的命令行,然后执行:source-file ~/.tmux.conf
# 避免过长的 tmux 窗口名
set -g status-left-length 20
set-option -g allow-rename off
set-option -g history-limit 70000
set -g default-terminal "xterm"
# tmux 使用 vi 模式
setw -g mode-keys vi
setw -g status-keys vi
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
pproxy
pip3 install pproxy
pproxy -l http://127.0.0.1:61004 -r socks5://192.xxx.xxx.xxx:xxx1 -v
export HTTPS_PROXY=http://127.0.0.1:61004
export HTTP_PROXY=http://127.0.0.1:61004
MacOS
brew/port
参考这里:https://zhuanlan.zhihu.com/p/341831809
/bin/bash -c "$(curl -fsSL \
https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)"
brew 访问太慢可以参考这里:https://gitee.com/cunkai/HomebrewCN
安装 macport 后可以将 source 修改为国内源以提升下载速度
sudo vi /opt/local/etc/macports/sources.conf
# 修改内容如下
rsync://mirrors.tuna.tsinghua.edu.cn/macports/release/ports/ [default]
sudo vi /opt/local/etc/macports/macports.conf
rsync_server mirrors.tuna.tsinghua.edu.cn
常用命令如下
sudo port -v sync # 重新加载macports文件信息
sudo port -v selfupdate # 更新
port search name
sudo port install name
sudo port uninstall name
Java/Python
JDK:为了方便,这里直接安装 Eclipse Temurin,细节可以参考这里:brew install --cask temurin
brew install --cask anaconda
// 注意安装过程中的终端显示的:PREFIX=/opt/homebrew/anaconda3
Envs
proxy:https://apple.stackexchange.com/questions/228865/how-to-install-an-homebrew-package-behind-a-proxy
export ALL_PROXY=http://127.0.0.1:7890
export http_proxy=socks5://localhost:1080
http_proxy=http://localhost:7890/
https_proxy=http://localhost:7890/
brew install tmux
Efficiency
- iBar,刘海屏下的图标管理
- MacOCR,https://github.com/schappim/macOCR,mac 桌面截图转文字。控制台命令:
ocr -l zh-Hans
- RCMD,https://lowtechguys.com/rcmd/,Instant app switching with a rarely used key
- APP Timer,Mac GUI 版本 cpulimit
- TripMode,流量监控软件,可以用于监控远程连接的网络流量
Self host
VMWare
sudo vmware-modconfig --console --install-all
# https://github.com/mkubecek/vmware-host-modules, branch workstation-17.5.0
Docker
常用命令如下:
docker-compose up -d
docker-compose down # 停止并移除 docker-compose up 命令启动的所有容器,慎用
docker-compose start
docker-compose stop
docker 添加 proxy 可以参考这里
sudo vi /etc/systemd/system/docker.service.d/proxy.conf
# Add content below
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890/"
Environment="HTTPS_PROXY=http://127.0.0.1:7890/"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"
# Take effect
sudo systemctl daemon-reload
docker-compose 文件可以通过配置限制容器对资源的使用,docker-compose.yml version >= 3.8 可以直接使用如下形式:
version: '3.9'
services:
app:
image: nginx
cpus: "0.5"
mem_reservation: "10M"
mem_limit: "250M"
Monitorix
开源的类 Linux 系统监控工具,使用与安装都非常方便,使用细节可参考官网
apt-get install monitorix
service monitorix restart
/etc/monitorix/monitorix.conf # 配置文件位置
# 如果想以 / 作为 URL 访问目录,需要修改配置文件如下内容
base_url = /
base_cgi = /
# 如果使用了 https 则需要在 httpd_builtin 中设置如下内容
https_url = y
VS Code Server
code-server 需要 node 16: curl -sL https://deb.nodesource.com/setup_16.x | sudo bash -
sudo npm install code-server
gogs
gogs 是使用 golang 编写的 git server,相比于 gitlab 而言简洁了很多。安装之后配置文件位置:...\gogs\gogs\conf
。修改 gogs 目录下的 .gitconfig 可以设置 socks5 代理。再次访问前先删除 cookie
docker run --name=gogs -p 9322:22 -p 9380:3000 \
-v /root/gogs/data:/data --restart=always gogs/gogs
Kiwix
可以使用 Kiwix 搭建离线 Wiki,可以下载打包好的 ZIM 文件作为 Kiwix 数据源。Kiwix server 界面输入时要等自动出现下拉框时再选择对应的词条
Jupyter
参考:https://jupyter-docker-stacks.readthedocs.io/en/latest/
docker run --name=jupyter --restart=always --user root -e GRANT_SUDO=yes \
-v /home/hjiahu/codes:/home/jovyan/work/ \
-p 37080:8888 quay.io/jupyter/datascience-notebook
Ubuntu VNC
Ubuntu 22 自带 RDP 和 VNC,不过系统重启后就无法再次连接,此时需要手动登陆机器。如果机器环境可靠,可以考虑当前账户开机自动进入桌面,如此 VNC 在机器重启后可以直接连接
开机账户直接登陆会造成另一个问题,就是 VNC 密码是随机的,这个问题的解决办法可以参考这里。为方便使用,将解决办法粘贴如下。因为这个方法会造成密码泄漏,所以要保证机器的使用环境安全:
So, if you auto boot up with your user login, during the auto boot up, Ubuntu 22.04 doesn’t automatically unlock the keyring. So to fix this, go to Utilities, Password and Keys, right click on Default Keyring, select change password. It will ask for your username password. Enter that. Then for the new password, do not enter one. Leave it blank. It will warn you that all passwords stored on your keyring will become and remain unencrypted. If you can wear that risk, accept that.
Then go back to remote desktop, ensure the password you want is set, and each time you reboot, that password will then remain the same.
使用小主机作为 Ubuntu 宿主机器时常不配显示器,Ubuntu 启动一些软件会有问题。网络上有现成的解决办法,推荐使用显卡欺骗器。根据主机上显卡接口(HDMI 或 DP)买个十几块钱比优盘稍大的的插头插上去就可以解决部分软件的问题
如果不使用系统自带的 VNC,可以使用下面介绍的 TigerVNC。TigerVNC 可以解决开机无法登陆的问题,但显示器造成的软件问题无法解决,且解决方法和 Ubuntu VNC 不太一样。因为没有解决过同类问题,故这里不记录
TigerVNC
sudo apt install tigervnc-standalone-server tigervnc-common \
tigervnc-xorg-extension tigervnc-viewer
sudo apt install xfce4 xfce4-goodies xubuntu-desktop # choose gdm3
sudo apt install ubuntu-gnome-desktop
sudo apt install nautilus
sudo systemctl enable gdm
sudo systemctl start gdm
# 下面的命令不要使用 root 权限执行
vncpasswd
# 如果打不开 terminal:sudo update-alternatives --config x-terminal-emulator
# 选择 xfce4 terminal
新增 xstartup 文件 vim ~/.vnc/xstartup
,添加如下内容,并修改执行权限 chmod u+x ~/.vnc/xstartup
#!/bin/sh
xrdb $HOME/.Xresources
gnome-session # startxfce4
启动 vnc server
# depth 过大过小都会造成一部分软件无法启动
vncserver :1 -geometry 1920x1080 -depth 24 -localhost no
# 节约带宽,可以使用不同参数
# vncserver :1 -geometry 1366x768 -depth 24/16 -localhost no
# vncserver :1 -geometry 860x1366 -depth 16 -localhost no # 10:16
# vncserver :1 -geometry 1500x1600 -depth 32 -localhost no # 局域网高质量
# vncserver :1 -geometry 3840x2160 -depth 32 -localhost no
# vncserver :1 -geometry 3840x2160 -depth 32
# vncserver :1 -geometry 2560x1440 -depth 32 # service iptables stop
如何启动 vnc 的过程报如下错误:A X11 server is already running for display :1 on machine,可以考虑先关闭 x11:sudo service gdm stop,删除 x 相关文件:sudo rm -rf /tmp/.X*
,然后重新启动 vnc
为避免 vnc 锁屏造成登陆困难,可以考虑使用如下命令。参考:https://zhuanlan.zhihu.com/p/507878402
sudo apt install gnome-screensaver
gnome-screensaver-command -a # 显示屏保但不锁定,移动鼠标或敲击键盘后自动消失
gnome-screensaver-command -l # 显示并锁定,移动鼠标或敲击键盘弹出密码框
sudo loginctl list-sessions # 列出当前所有的会话
loginctl lock-session [ID…] # 锁定/解锁指定的会话
loginctl unlock-session [ID…]
loginctl lock-sessions # 锁定/解锁所有支持屏幕锁的会话
loginctl unlock-session
其他相关命令与日志目录
sudo journalctl -u frpc.service # show log
# 一些软件需要环境变量 DISPLAY,使用下面的命令可以设置相关变量
xhost +1
export DISPLAY=:1
vncserver -list # 列出所有 session
vncserver -kill :1 # 关闭 session
~/.vnc/<host>.log # 日志位置
Filebrowser
docker run \
-v /data/filebrow:/srv \
-v /data/docker_files/filebrowser/filebrowser.db:/database/filebrowser.db \
-v /path/to/settings.json:/config/settings.json \
-e PUID=$(id -u) \
-e PGID=$(id -g) \
-p 8080:80 \
--restart=always \
filebrowser/filebrowser
Recoll
recoll 是免费的全文索引与检索工具,安装方式可以参考官网 ,支持 Win/Linux/Mac。Recoll 有 GUI(基于 QT),可以直接可视化配置。Recoll 默认使用 N-gram 算法对中文进行分词,不过 recoll 1.37 后可以使用 JieBa 插件,细节请参考官网。安装 Recoll-WebUI 后可以从网页端访问 Recoll,启动和使用 Recoll-WebUI 的命令示例如下:
# 依赖安装
pip3 install waitress
# 启动程序
python3 webui-standalone.py -a 127.0.0.1 -p 39300
Recoll 基于的搜索语言是 xesam,不过这个规范已经失效了,具体使用方法需要参考 Recoll 官方英文 PDF 文档
recoll 支持多种类型的文档,例如 jpge、png、pdf 等,不过需要安装一些系统工具(poppler、exiftool)和 Python 包(lxml、mutagen)。安装了 pdftotext 后(poppler 的子命令),Recoll 也有可能找不到,此时可以修改 recoll.conf 文件告诉 Recoll 在哪些文件夹下寻找命令:recollhelperpath = /opt/homebrew/bin
Yacy
yacy 是开箱即用的搜索引擎,包括 web 界面、爬虫和 solr
docker run -d --name yacy_search_server -p 39096:8090 \
-v /root/docker_files/yacy:/opt/yacy_search_server/DATA \
--restart=always --log-opt max-size=100m --log-opt max-file=2 \
yacy/yacy_search_server:latest
docker run -d --name yacy_intranet_server \
--cpus=4 -p 39096:8090 --restart=always \
--log-opt max-size=100m --log-opt max-file=2 \
yacy/yacy_search_server:latest
The default login for YaCy on Docker is admin:yacy
Seafile
Seafile 是国产的云盘工具,3 个用户以内专业版也可以免费使用,下面介绍使用 docker-compose 安装 seafile。可以参考这里在 VPS 中安装 GUI 版本的 seafile client 随后使用 x11 在终端打开客户端界面进行配置,最后执行 seaf-cli start
开启服务
使用 docker-coimpose 安装 seafile 需要先创建 ES 需要的目录并设置合适的目录权限:
mkdir -p /root/seafile/seafile-elasticsearch/data
chmod 777 -R /root/seafile/seafile-elasticsearch/data
修改 seafile-data/seafile/conf/seahub_settings.py 开启 office 在线编辑
OMPRESS_CACHE_BACKEND = 'locmem'
TIME_ZONE = 'Asia/Shanghai'
FILE_SERVER_ROOT = "http://seafile.yearn.xyz/seafhttp"
OFFICE_CONVERTOR_ROOT = 'http://127.0.0.1:6000/'
# Enable Only Office
ENABLE_ONLYOFFICE = True
VERIFY_ONLYOFFICE_CERTIFICATE = False
ONLYOFFICE_APIJS_URL = 'https://xx.xx.xx/web-apps/apps/api/documents/api.js'
ONLYOFFICE_FILE_EXTENSION = ('doc', 'docx', 'ppt', 'pptx', 'xls', \
'xlsx', 'odt', 'fodt', 'odp', 'fodp', 'ods', 'fods')
ONLYOFFICE_EDIT_FILE_EXTENSION = ('docx', 'pptx', 'xlsx')
OnlyOffice
sudo docker run -i -t -d -p 39080:80 -e JWT_SECRET=tfxxxVkjlPeK \
-v /home/hjiahu/tools/docker/onlyoffice/logs:/var/log/onlyoffice \
-v /home/hjiahu/tools/docker/onlyoffice/data:/var/www/onlyoffice/Data \
-v /home/hjiahu/tools/docker/onlyoffice/lib:/var/lib/onlyoffice \
-v /home/hjiahu/tools/docker/onlyoffice/rabbitmq:/var/lib/rabbitmq \
-v /home/hjiahu/tools/docker/onlyoffice/redis:/var/lib/redis \
-v /home/hjiahu/tools/docker/onlyoffice/db:/var/lib/postgresql \
--restart=always onlyoffice/documentserver
可以使用 onlyoffice 预览 PDF 文件,进入安装目录seafile-server-latest/seahub/seahub/utils,打开 __init__.py
,找PDF,删除PDF,DOCUMENT中加入PDF,修改如下:
PREVIEW_FILEEXT = {
IMAGE: ('gif', 'jpeg', 'jpg', 'png', 'ico', 'bmp', 'tif', 'tiff', 'psd'),
DOCUMENT: ('pdf', 'doc', 'docx', 'docxf', 'oform', 'ppt', \
'pptx', 'odt', 'fodt', 'odp', 'fodp'),
SPREADSHEET: ('xls', 'xlsx', 'ods', 'fods'),
SVG: ('svg',),
#PDF: ('pdf', 'ai'),
EDMS
电子文档管理系统(Electronic Document Management System,EDMS)可以用来管理自己的文档,比较常用的有:Paperless-ngx、docspell、teedy 和 Mayan EDMS 等
Paperless-ngx
paperless 支持搜索组合,示例如下,更详细的搜索语法可参考 Whoosh Query Lan
# 短语搜索
"all was well"
# 短语搜索,其中单词 library 与 whoosh 距离不大于 5 个单词
"whoosh library"~5
# 逻辑关系
shopname AND (product1 OR product2)
alpha NOT (beta OR gamma)
# 模糊匹配
produ*name
# 匹配字段中的内容
type:invoice tag:unpaid
created:[2005 to 2009]
added:yesterday
modified:today
新增 tesseract ocr 语言支持,Debain 操作可以参考这里
docker exec -it paperless_webserver bash
sed -i 's@deb.debian.org@mirrors.ustc.edu.cn@g' \
/etc/apt/sources.list.d/debian.sources
apt search tesseract-ocr-chi*
apt install tesseract-ocr-chi*
更换 ocr 工具(不推荐使用):
docker exec -it paperless_webserver bash
pip config set global.index-url https://pypi.mirrors.ustc.edu.cn/simple/
python -m pip install easyocr imagecodecs
python -m pip install --upgrade ocrmypdf
python -m pip install https://github.com/netinvent/OCRmyPDF-EasyOCR\
/archive/refs/heads/recursive-daemon-allowed.zip
DigitalJS_online
利用开源工具 Yosys 等实现的网页版综合工具,细节可以参考 github 和 在线示例
# 安装 nodejs 18.x
sudo apt remove nodejs
sudo apt autoremove
curl -sL https://deb.nodesource.com/setup_18.x -o nodesource_setup.sh
sudo bash nodesource_setup.sh
sudo apt install nodejs
# 安装依赖
npm config set registry https://registry.npm.taobao.org # 提升安装速度
npm set strict-ssl false # 避免证书验证
npm install
# 启动程序
npm run dev # 方便调试
npm run --prefix /path/to/digitaljs_online dev &
npm start
VCDRom
vcdrom 是使用 node 实现的 vcd 波形显示工具
Coding
GDB
命令细节可以参考 GDB manual。shell 型的程序可以用 perf 分析不同命令的函数调用关系,例如
perf record -g -F1000 --call-graph dwarf -p 54892
其他命令备忘
info signal SIGUSR1
handle SIGUSR1 noprint nostop
# 给所有函数打断点
set logging on # collect trace in gdb.txt
set confirm off # you wouldn't want to confirm every one of them
rbreak . # set a breakpoint on each function
# gdb attach pid 后需要执行 continue 命令
# 不然原始进程会卡住,ctr-c 可以再次进入 gdb 环境
gdb -p pid
gdb pragma # ctrl-c 退回到 gdb 环境,continue 继续
Git
git rm --cache path/to/file # 删除 stash 但没有 commit 的文件
git config --global credential.helper store # 保存账号
git config --global http.sslverify false # 放弃签名验证
git clean -xdf # 旧文件清理
# git submodule
git submodule deinit --force .
git submodule init
git submodule update --recursive
# 代理,设置代理时最好指定本机 IP 而不是使用 localhost,否则部分代理服务无法使用
git config --global http.proxy http://127.0.0.1:8080
git config --global --unset http.proxy
# 创建别名
alias git_clean='git clean -xdf && git submodule deinit --force .'
alias git_update='git submodule init && git submodule update'
alias git_reinit='git_clean && git_update'
# 查看仓库信息。示例 https://api.github.com/repos/The-OpenROAD-Project/asap7
# 文件大小用 size 记录
https://api.github.com/repos/organization/repository
修改文件 ~/.gitconfig 实现代理持续生效
[http]
proxy = socks5://192.168.x.xxx:1080
[https]
proxy = socks5://192.168.x.xxx:1080
GH
gh
is GitHub on the command line. It brings pull requests, issues, and other GitHub concepts to the terminal next to where you are already working withgit
and your code.
示例使用方法如下:
gh release list -R <username>/<repo>
gh release download <tag> -D <dest> -R <username>/<repo>
# for eg.
gh release list -R cli/cli
gh release download v2.21.2 -D gh_v2.21.2 -R cli/cli
# download all assets from latest release to gh_latest directory
gh release download -p "*" -D gh_latest -R cli/cli
Others
Let’s Encrypt
为了使用通配符域名,需要在 VPS 中安装 snap 等工具。Let’s Encrypt 官网有非常详细的安装与配置过程,这里不再重复,具体请参考其官网 ,其中一些其他细节可以参考其他博客 。如果你使用的是阿里云的域名,请参考certbot-dns-aliyun。下面以阿里云域名&Nginx 为例给出大致操作过程
-
安装相关软件:
pip install certbot-dns-aliyun
-
创建一个新的账号并赋予 AliyunDNSFullAccess 权限,这一步主要是为了避免账号泄露造成的风险
-
创建文件(xx.ini)保存新账号的 access 信息(key&secret)
certbot_dns_aliyun:dns_aliyun_access_key = 12345678 certbot_dns_aliyun:dns_aliyun_access_key_secret = \ 1234567890abcdef1234567890abcdef
-
执行命令生成 SSL 证书
certbot certonly -a certbot-dns-aliyun:dns-aliyun \ --certbot-dns-aliyun:dns-aliyun-credentials /root/xxx/xxx/xxx_dns.ini \ -d xx.xyz -d "*.xx.xyz"
-
按提示执行,记录生成的证书位置
/etc/letsencrypt/live/xx.xyz/fullchain.pem /etc/letsencrypt/live/xx.xyz/privkey.pem
-
免费证书有效期 90 天。证书默认会自动更新(可手动执行
certbot renew
命令更新证书)。执行 certbot 命令时,当前目录需要包含 ini 配置文件(/root/http_ssl
)
OpenWrt
GL-iNet GL-MT3000: https://openwrt.org/toh/gl.inet/gl-mt3000
# 系统信息,AArch64
cat /proc/cpuinfo
# 安装卸载
opkg remote frpc
opkg install frpc_0.47.0-1_aarch64_cortex-a53.ipk