Quick Note

quick note

命令行的艺术

编码

  • 所有参数都应该在接收处就需要处理好默认值(针对每个模块而言,因为单个模块可能随时被拆开来用)
  • 所有 golang 中的结构体只要有可能处理成 json 都需要 注意 json:"page" 避免首字母大写

Docker Command

docker rm $(docker ps -q -f status=exited) # 移除所有退出的容器
docker rmi -f $(docker images | grep "^<none>" | awk '{print $3}') # 移除所有 <none> 的镜像
docker rmi -f $(docker images | grep 'search_term_here' | awk '{print $1}') # 比如 `2 days ago`
docker volume rm $(docker volume ls -qf dangling=true)
docker network rm $(docker network ls -q)

docker save -o nginx.tar nginx:latest # 导出镜像 会保存该镜像的所有历史记录(commit)
docker save > nginx.tar nginx:latest # 导出镜像 会保存该镜像的所有历史记录(commit)
docker load -i nginx.tar # 导入镜像,包含元数据,tag等
docker load < nginx.tar # 导入镜像,包含元数据,tag等
docker export -o nginx-test.tar nginx-test # 导出容器,不会包含历史记录(commit)
docker import nginx-test.tar nginx:imp # 导入为镜像, 可以指定新镜像名
cat nginx-test.tar | docker import - nginx:imp # 导入为镜像,可以指定新镜像名

lzc-docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}" | (read -r; printf "%s\n" "$REPLY"; sort -k 2 ) # 根据容器name排序,用于检查所有容器存在,所有容器状态

根目录磁盘空间太满了,清理磁盘空间

sudo journalctl --vacuum-time=3d # 清理3天前的日志(您可以根据实际情况调整时间)
sudo pacman -Sc # 清理已安装包的冗余包文件
sudo ncdu / --exclude /home # 交互式查找并删除大体积文件

Discuz 打印出 mysql 查询语句

discuz_database 类中的 public static function query 方法 self::checkquery($sql); 在这后面加上 writelog("sqllog",$sql); 即可看到所有 SQL

Docker 的 alpine 快速安装 sqlite

sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories && apk update && apk add sqlite

快速 sqlite 查询

sqlite3 /usr/src/app/config/database.db
.databases // 查询出所有数据库
.show      // 列出所有数据库信息
.tables    // 列出所有表
select * from user;
.exit
# 导入导出
# 获取脚本所在目录
script_dir=$(dirname "$0")
now_time=$(date +%Y%m%d%H%M%S)
# SQLite数据库文件路径
database_file="$script_dir/gorm.db"
# 导出的SQL文件路径
sql_file="$script_dir/export.$now_time.sql"
# 导出SQLite数据库为SQL文件
sqlite3 "$database_file" ".dump" > "$sql_file"
# 还原SQL文件为SQLite数据库
sqlite3 "$database_file" < "$sql_file"

下载在线文档到本地

wget -r -p -k -nc -o www.shouce.ren.log www.shouce.ren

递归查找包含指定字符(忽略大小写)的所有 markdown 文件并显示行号

grep -in "searchWord" *.md
grep -rin "searchWord" --include "*.md" .
grep --color -rni XGetWindowAttributes

pdf 体积太大裁剪

pdftk ./linux内核编程.pdf cat 1-70 output linux内核编程.上.pdf

指定目录下的字符串批量替换

sed -i "s/oldstring/newstring/g" grep oldstring -rl path
sed -i "s/要查找的文本/替换后的文本/g" `grep -rl "要查找的文本" /任意目录`

显示当前目录下所有文件夹大小,从小到大排序

du -sh * | sort -n

新增用户及快速配置

sudo useradd -s /bin/bash -m lianghong -G sudo,docker,netdev,users
 -u 1500
 -s /bin/bash /usr/bin/zsh
sudo password lianghong
# sudo usermod -aG sudo,docker,netdev,users lianghong
sudo userdel -r lianghong

临时 x11vnc 服务

https://wiki.archlinux.org/title/X11vnc_(简体中文)

x11vnc -display :0
x11vnc -auth /var/lib/lightdm/.Xauthority -display :0 -forever
x11vnc -display :0 -autho /home/USER/.Xauthority
x11vnc -display :0 -auth /var/lib/gdm/:0.Xauth
x11vnc -wait 50 -noxdamage -passwd PASSWORD -display :0 -forever -o /var/log/x11vnc.log -bg
x11vnc -usepw # 设置密码
x11vnc -find

❯ ps -aux | grep auth # 留意 Xvfb
root      251969  0.0  0.4 843784 68392 tty7     Ssl+ 3月14   3:49 /usr/lib/xorg/Xorg -nolisten tcp -auth /var/run/sddm/{7f719f8e-fea0-4375-9e08-f62c4f00b5d9} -background none -noreset -displayfd 18 -seat seat0 vt7
root      251984  0.0  0.0  61868 15236 ?        S    3月14   0:00 /usr/lib/x86_64-linux-gnu/sddm/sddm-helper --socket /tmp/sddm-auth94af223c-bed9-4d33-bf86-4da3b2e94382 --id 8 --start /usr/bin/sddm-greeter --socket /tmp/sddm-:0-hQxQPR --theme /usr/share/sddm/themes/debian-theme --user sddm --greeter
chenlia+  337277  0.8  1.6 1380336 266304 ?      Sl   14:46   0:28 Xvfb :20 -auth /home/chenlianghong/.Xauthority -nolisten tcp -noreset -screen 0 3840x2560x24
chenlia+  337306  0.0  0.4 17231584 77216 ?      Sl   14:46   0:00 /opt/google/chrome-remote-desktop/chrome-remote-desktop-host --host-config=- --audio-pipe-name=/home/chenlianghong/.config/chrome-remote-desktop/pulseaudio#b60643d23f/fifo_output --server-supports-exact-resize --ssh-auth-sockname=/tmp/chromoting.chenlianghong.ssh_auth_sock --signal-parent
chenlia+  337693  0.0  0.1 192556 16944 ?        Sl   14:54   0:00 /usr/lib/x86_64-linux-gnu/polkit-mate/polkit-mate-authentication-agent-1
chenlia+  339403  0.8  0.2  56452 34264 pts/5    S+   15:08   0:16 x11vnc -auth /home/chenlianghong/.Xauthority -display :20 -forever
chenlia+  340041  0.0  0.0   9392   728 pts/0    S+   15:41   0:00 grep --color=auto auth

日志输出

./test.sh > log.txt 2>&1 # 将 ./test.sh 的输出重定向到 log.txt 中,同事将标准错误也重定向到 log.txt 文件中
# 类型	                   文件描述符	默认情况	            对应文件句柄位置
# 标准输入(standard input)	0	      从键盘获得输入	       /proc/self/fd/0
# 标准输出(standard output)	1	      输出到屏幕(即控制台)	/proc/self/fd/1
# 错误输出(error output)	  2	      输出到屏幕(即控制台)	/proc/self/fd/2

# 命令	                   介绍
# command <filename	  以filename文件作为标准输入
# command 0<filename	同上
# command <<delimiter	从标准输入中读入,直到遇到delimiter分隔符

nohup java -jar xxxx.jar >/dev/null 2>&1 & # >/dev/null 2>&1命令来丢弃所有的输出

./test.sh &> log.txt
# &> file 和 >& file 意思是把标准输出和标准错误输出都重定向到文件file中

ssh临时跳转使用

scp -J user@host.com:2222 1.js user@192.168.1.68:~ # 临时拷贝文件
ssh -J user@host.com:2222 -X user@192.168.1.68 # 临时连接(withX11)

ssh临时授权

# 解决部分网络下需要对虚拟机(无桌面)进行网络扫码授权的问题
ssh -D 1080 user@192.168.1.68
# 然后在浏览器中使用插件连接上本地 socks5 的 1080 端口,即可进行网络访问扫码授权的操作了。

How to push all?

case 1:

git remote add gitee git@gitee.com:clh21/vim.git
git remote remove gitee
git remote add all git@gitee.com:clh21/vim.git
git remote set-url --add all git@github.com:clh021/vim.git
git push all --all
git fetch --all

# Tip: To no need typing all whenever you send a commit, just use "origin" instead of "all":
git remote set-url --add origin nodester-host:path/proj.git

case 2:

# To push all branches to all remotes:
git remote | xargs -L1 git push --all
# To push a specific branch to all remotes
git remote | xargs -L1 -I R git push R master
# To make a git alias for the command
git config --global alias.pushall '!git remote | xargs -L1 git push --all'

Md5sum

$ md5sum file1 file2 file3 > mysum
$ md5sum --check mysum
file1: OK
file2: OK
file3: OK

study

pkg-config --cflags --libs gtk+-3.0
pkg-config --cflags --libs wayland-protocols
cmake --build build
cd /usr/include/aarch64-linux-gnu/
cd /usr/lib/aarch64-linux-gnu/pkgconfig/
ls |grep wayland
dpkg -L wayland-protocols
cd /usr/share/pkgconfig/
cd /usr
find -name wayland-protocols.pc
vim ./local/share/pkgconfig/wayland-protocols.pc
cd local/share
ls
cd pkgconfig/
ls
sudo rm wayland-protocols.pc
dpkg -l |grep gtk
dpkg -L libgtk-3-dev
vim /usr/lib/aarch64-linux-gnu/pkgconfig/gtk+-3.0.pc
pkg-config --cflags --libs gtk+-3.0
dpkg -l |grep
aptitude search wayland-protocols
dpkg -l |grep wayland-protocols
apt-cache search wayland-protocols
apt-cache policy wayland-protocols
pkg-config --cflags --libs wayland-protocols
pkg-config --cflags --libs wayland-client
cmake -B build .
ls
cmake -G Ninja -B build
ls build
ninja -C build
cmake -G Ninja -B build
ls
cd build
ls
cmake --build .

查看一个正在运行的命令细节

pgrep -fa lithium

查看文件名或路径中包含了 download 的

fdfind download | grep idl

命令行界面如何获取二次开发浏览器(qax)的内核版本号

echo -e "HTTP/1.0 200 OK\r\n\r\n" | nc -l 8080 -q 1 | grep User-Agent # 得到一次请求时就输出 200状态 并截取 User-Agent 内容
DISPLAY=:0 qaxbrowser-safe http://127.0.0.1:8080

npm resolve alias @

import { resolve } from 'node:path'
export default defineConfig({
  plugins: [
  ],
  resolve: {
    alias: {
      "@": resolve(__dirname, 'src'), // 路径别名
    }
  },

})

操作系统语言统一(针对中英文混合)

# 当前系统 locale 支持的语言
# 如果不具备你需要的语言,可以通过 `sudo vim /etc/locale.gen` 开启 对应语言
# 今天因此解决了微信发送文件时,识别中文文件文件名的问题。
$ sudo locale-gen
Generating locales...
  en_US.UTF-8... done
  zh_CN.UTF-8... done
Generation complete.

WPS365 在英文系统下使用中文语言

# 每次升级该软件时都会被覆盖
sudo nvim /usr/bin/wps
sudo nvim /usr/bin/wpp
sudo nvim /usr/bin/et
sudo nvim /usr/bin/wpspdf

export LANG=zh_CN.UTF-8

包管理常用命令

参考 Arch Linux 软件包的查询及清理

#查询 lib 被谁依赖
pacman -Qi libname | grep "Required By"
#查询包依赖谁
pacman -Qi packagename | grep "Depends On"
#列出孤立的包(-t不再被依赖的"作为依赖项安装的包")
pacman -Qqdt #通常这些是可以妥妥的删除的
sudo pacman -Qqdt | sudo pacman -Rs -
#列出包所拥有的文件
sudo pacman -Ql packagename

音频和蓝牙

sudo pacman -S easyeffects pipewire-pulse
sudo pacman -S pavucontrol
sudo pacman -S bluez bluez-utils bluedevil
pactl load-module module-bluetooth-discover
sudo vim /etc/bluetooth/main.conf

FastConnectable=true
AutoEnable=true

录屏没声音

录屏软件内录没有声音(pulseaudio)

#(注意:录屏过程中插拔耳机会导致录屏无声)
pactl list | grep "Monitor Source" | awk '{print $3}' | xargs -I {} pacmd set-source-mute {} 0
#快捷键开启/关闭麦克风(pulseaudio):
pactl list sources | grep Name | grep input | awk '{print $2}' | xargs -I {} pactl set-source-mute {} toggle
#音频捕获还是不动弹的话重启下obs就可以了
#麦克风降噪(pulseaudio换pipewire):
sudo pacman -S pipewire pipewire-pulse pipewire-jack pipewire-alsa
sudo pacman -S easyeffects calf
sudo pacman -S lsp-plugins zam-plugins # 慎重, 会生成很多图标
#https://blog.ryey.icu/zhs/replace-pulseaudio-with-pipewire.html
#https://zhuanlan.zhihu.com/p/439611615
#https://wiki.archlinuxcn.org/wiki/PipeWire

修复引导

启动 live cd, 打开终端

# passwd # sudo 要密码时执行
# 列出磁盘和分区, 我的系统所在硬盘是 `nvme0n1`,
# 根分区是 `nvme0n1p2`, efi(esp) 分区是 `nvme0n1p1`
sudo lsblk
sudo mount /dev/nvme0n1p2 /mnt          # 挂载根分区
sudo mount /dev/nvme0n1p1 /mnt/boot/efi # 挂载 efi 分区
sudo arch-chroot /mnt # 切换根目录
sudo grub-install --recheck /dev/nvme0n1 # 安装 grub
sudo grub-mkconfig -o /boot/grub/grub.cfg # 生成配置
exit # 退出 chroot 环境并关机
shutdown now

u盘权限

sudo groupadd usbfs
sudo usermod -a -G usbfs $USER
#sudo reboot now

远程UOS时总是显示Your system is not activated. Please activate as soon as possible for normal use提示

//查询license.service是否启动
lsystemctl lgrep license
//关闭license.service
lsystemctl stop license.service
//关闭开机启动license.service
1systemctl disable license.service
最后更新于 2022-03-23 12:47:18