其他

tmux 使用笔记

tmux 是一个强大的终端复用工具,可以在一个终端窗口中管理多个会话、窗口和窗格。一个令我相见恨晚的工具,下面记录一下安装和常用命令与快捷键。

安装 #

在 Debian / Ubuntu 使用 apt 安装

apt install tmux

在 MacOS 使用 brew 安装

brew install tmux

使用 #

以下是常用的快捷键和命令

也可以用使用 Ctrl+b ? 查看所有快捷键

1. session 会话管理 #

功能命令
创建新 session 并指定名称tmux new -s <session-name>
列出当前所有 sessiontmux ls

常用的几个 session 管理快捷键如下

功能快捷键
切换多个 sessionCtrl+b s
分离当前 sessionCtrl+b d
重命名当前 sessionCtrl+b $

2. window 窗口管理 #

功能快捷键
切换多个窗口Ctrl+b w
切换到下一个窗口Ctrl+b n
切换到前一个窗口Ctrl+b p
创建一个新窗口Ctrl+b c
给当前窗口命名Ctrl+b ,

3. pane 窗格管理 #

功能快捷键
划分左右两个窗格Ctrl+b %
划分上下两个窗格Ctrl+b "
光标切换到其他窗格Ctrl+b <arrow key>
调整窗格大小Ctrl+b Ctrl+<arrow key>
关闭当前窗格Ctrl+b x
窗格内滚动查看Ctrl+b [

Filebrowser 部署

Filebrowser 介绍 #

Filebrowser 可以通过 web 管理指定文件目录, 并且支持多用户隔离在不同子目录下.

Filebrowser 部署在 k8s 中 #

在 k8s 中部署 filebrowser

装完后默认密码 admin / admin, File Browser Install

配置文件样例: settings.json

关于数据持久化,都是持久化在 ceph 块存储中,使用 sc/ceph-block

  • 数据库存储在 pvc/filebrowser-database-pvc 中,分配 1Gi
  • 文件目录存储在 pvc/filebrowser-data-pvc 中,分配 50Gi
apiVersion: v1
kind: Namespace
metadata:
  name: filebrowser
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: filebrowser-config
  namespace: filebrowser
data:
  settings.json: |
    {
      "port": 80,
      "baseURL": "",
      "address": "",
      "log": "stdout",
      "database": "/database/filebrowser.db",
      "root": "/srv"
    }
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: filebrowser-database-pvc
  namespace: filebrowser
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: ceph-block
  resources:
    requests:
      storage: 1Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: filebrowser-data-pvc
  namespace: filebrowser
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: ceph-block
  resources:
    requests:
      storage: 50Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: filebrowser
  namespace: filebrowser
  labels:
    app: filebrowser
spec:
  replicas: 1
  selector:
    matchLabels:
      app: filebrowser
  template:
    metadata:
      labels:
        app: filebrowser
    spec:
      containers:
      - env:
        - name: PUID
          value: "0"
        - name: PGID
          value: "0"
        name: filebrowser
        image: filebrowser/filebrowser:s6
        ports:
        - containerPort: 80
        volumeMounts:
        - name: filebrowser-config
          mountPath: /config
        - name: filebrowser-database
          mountPath: /database
        - name: filebrowser-data
          mountPath: /srv
      volumes:
      - name: filebrowser-config
        configMap:
          name: filebrowser-config
      - name: filebrowser-database
        persistentVolumeClaim:
          claimName: filebrowser-database-pvc
      - name: filebrowser-data
        persistentVolumeClaim:
          claimName: filebrowser-data-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: filebrowser
  namespace: filebrowser
spec:
  selector:
    app: filebrowser
  ports:
  - port: 80
    targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: filebrowser-ingress
  namespace: filebrowser
  annotations:
    nginx.ingress.kubernetes.io/proxy-body-size: "0"  
spec:
  rules:
  - host: file.lan
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: filebrowser
            port:
              number: 80

Rclone 使用笔记

使用rclonealist提供的webdav接口将阿里云盘mount到Ubuntu 22.04的目录上, 实现像访问本地文件一样访问阿里云盘内的文件

下载安装rclone #

curl https://rclone.org/install.sh | bash

配置rclone config #

# rclone config
No remotes found, make a new one?
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n

Enter name for new remote.
name> alist

Option Storage.
Type of storage to configure.
Choose a number from below, or type in your own value.
 1 / 1Fichier
   \ (fichier)
...
51 / WebDAV
   \ (webdav)
...
Storage> 51

Option url.
URL of http host to connect to.
E.g. https://example.com.
Enter a value.
url> http://alist.home.lan/dav/

Option vendor.
Name of the WebDAV site/service/software you are using.
Choose a number from below, or type in your own value.
Press Enter to leave empty.
 1 / Fastmail Files
   \ (fastmail)
 2 / Nextcloud
   \ (nextcloud)
 3 / Owncloud
   \ (owncloud)
 4 / Sharepoint Online, authenticated by Microsoft account
   \ (sharepoint)
 5 / Sharepoint with NTLM authentication, usually self-hosted or on-premises
   \ (sharepoint-ntlm)
 6 / rclone WebDAV server to serve a remote over HTTP via the WebDAV protocol
   \ (rclone)
 7 / Other site/service or software
   \ (other)
vendor> 7

Option user.
User name.
In case NTLM authentication is used, the username should be in the format 'Domain\User'.
Enter a value. Press Enter to leave empty.
user> admin

Option pass.
Password.
Choose an alternative below. Press Enter for the default (n).
y) Yes, type in my own password
g) Generate random password
n) No, leave this optional password blank (default)
y/g/n> y
Enter the password:
password:
Confirm the password:
password:

Option bearer_token.
Bearer token instead of user/pass (e.g. a Macaroon).
Enter a value. Press Enter to leave empty.
bearer_token>

Edit advanced config?
y) Yes
n) No (default)
y/n> n

Configuration complete.
Options:
- type: webdav
- url: http://alist.home.lan/dav/
- vendor: other
- user: admin
- pass: *** ENCRYPTED ***
Keep this "alist" remote?
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d> y

Current remotes:

Name                 Type
====                 ====
alist                webdav

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q

查看有哪些remote #

# rclone listremotes
alist:

查看某个remote下的目录或文件 #

# rclone lsd alist:/ali/video/诛仙
          -1 2024-04-02 12:27:23        -1 诛仙.第1季.2022-2023.4K.全26集
          -1 2024-04-02 12:27:24        -1 诛仙.第2季.2024
# rclone ls alist:/ali/video/诛仙/诛仙.第2季.2024
959919343 第27集-Zhu.Xian-2024-03-29-4k-HEVC-H265.AAC-WEB-DL.mkv
995844543 第28集-Zhu.Xian-2024-03-29-4K-HEVC-H265.AAC-WEB-DL.mkv
1012470661 第29集-Zhu.Xian-2024-03-29-4K-HEVC-H265.AAC-WEB-DL.mkv

alist mount 到目录 #

sudo mkdir -p /mnt/alist
sudo chmod 777 /mnt/alist
# --header "Referer:https://www.aliyundrive.com/" 是必须要有的
rclone mount --cache-dir=/tmp --vfs-cache-mode=writes --header "Referer:https://www.aliyundrive.com/" alist: /mnt/alist/

配置开机自动挂载

...

Shell Script

最近写的shell脚本比较多,记录一些常用命令, 相当于记录一个索引, 以后用时可以快速回忆起来.

#!/bin/bash #

#!/bin/bash被称为shebang line, 指定执行此脚本文件时使用/bin/bash做为shell解释器程序

很多主流操作系统默认的shell解释器也是bash

# echo $SHELL
/bin/bash

set #

set命令用来修改shell环境的运行参数, 完整的可定制的官方手册

下面是我常用的几个, 可以合并为如下内容写在脚本开头:

#!/bin/bash
set -uxe
set -o pipefail

set -u #

执行脚本时, 如果遇到不存在的变量, Bash默认会忽略, set -u可以让脚本读到不存在变量时报错

set -x #

命令执行前会先打印出来, 行首以+表示, 在调试脚本时非常有帮助

set -e #

执行脚本时, Bash遇到错误默认会继续执行, set -e使得脚本只要发生错误, 就中止执行

set -o pipefail #

set -e有一个例外情况, 就是不适用于管道命令, 比如下面的不会退出

#!/bin/bash
set -e

foo | echo a
echo bar

执行的结果为:

...

Ubuntu Config

以下配置都是在 Ubuntu 22.04 系统配置

配置中文输入法 #

  1. Open Settings, go to Region & Language -> Manage Installed Languages -> Install / Remove languages.
  2. Select Chinese (Simplified). Make sure Keyboard Input method system has Ibus selected. Apply.
  3. Reboot
  4. Log back in, reopen Settings, go to Keyboard.
  5. Click on the “+” sign under Input sources.
  6. Select Chinese (China) and then Chinese (Intelligent Pinyin).

ubuntu-22-04-chinese-simplified-pinyin-input-support

修正简体中文显示为异体(日文)字形 #

ubuntu/linux对中文支持的不太好, 在选择汉字字体时, 优先选择的是日文或者韩文, 需要手动调整优先级后重启操作系统解决

...

About Systemd

记录一下查看和操作 systemd 日志的几个常用命令

常用过滤日志日志的命令 #

根据时间约束过滤日志 #

获取 2023-01-15 00:00:00 之后的日志 #

journalctl --since '2023-01-15 00:00:00'

获取 2023-01-15 00:00:00 之后, 2023-01-15 12:00:00 之前的日志 #

journalctl --since '2023-01-15 00:00:00' --until '2023-01-15 12:00:00'

只查看一个服务(Unit)的日志 #

journalctl -u nginx

自由组合约束条件 #

journalctl -u nginx --since '2023-01-15 00:00:00' --until '2023-01-15 12:00:00'

查看日志占用磁盘量 #

journalctl --disk-usage
Output
Archived and active journals take up 3.9G in the file system.

删除旧的日志 #

只保留最近 一个月 的日志 #

journalctl --vacuum-time=1month

只保留最近 1G 的日志 #

journalctl --vacuum-size=1G

列出所有systemd服务 #

systemctl list-units --type=service --all