常用软件和工具

2024-03-17
10 min read

Useful Tools

软件 平台 功能
Logseq 全平台 1. 笔记软件: Markdown & Excalidraw & 双链 & 卡片
2. 插件:Markmap / Drawio / Lucksheet / …
Typora 全平台 所见即所得的 Markdown 编辑器。单文档超 4k 词后,编辑会比较卡@2023
freefilesync 全平台 文件同步工具
VeraCrypt 全平台 开源文件加密工具
Snipaste 全平台 经典截屏与贴图工具
FastCopy Win 快速文件拷贝

Terminal&SSH

Tabby

  1. Tabby Terminal: https://github.com/Eugeny/tabby
  2. 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

  1. iBar,刘海屏下的图标管理
  2. MacOCR,https://github.com/schappim/macOCR,mac 桌面截图转文字。控制台命令:ocr -l zh-Hans
  3. RCMD,https://lowtechguys.com/rcmd/,Instant app switching with a rarely used key
  4. APP Timer,Mac GUI 版本 cpulimit
  5. 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-ngxdocspellteedyMayan 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 with git 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 为例给出大致操作过程

  1. 安装相关软件:pip install certbot-dns-aliyun

  2. 创建一个新的账号并赋予 AliyunDNSFullAccess 权限,这一步主要是为了避免账号泄露造成的风险

  3. 创建文件(xx.ini)保存新账号的 access 信息(key&secret)

    certbot_dns_aliyun:dns_aliyun_access_key = 12345678
    certbot_dns_aliyun:dns_aliyun_access_key_secret = \
    										1234567890abcdef1234567890abcdef
    
  4. 执行命令生成 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"
    
  5. 按提示执行,记录生成的证书位置

    /etc/letsencrypt/live/xx.xyz/fullchain.pem
    /etc/letsencrypt/live/xx.xyz/privkey.pem
    
  6. 免费证书有效期 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
Previous Linux&DevOps
Next Circuit