我的技术笔记

记录技术历程

从0开始 Rust

配置安装 cargo

配置 cargo 镜像

进入文件夹 : cargo 安装目录

默认(~/.cargo)

创建文件 config

1
2
3
4
5
6
7
[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"
replace-with = 'ustc'

[source.ustc]
registry = "https://mirrors.ustc.edu.cn/crates.io-index"

更多配置 参考文档

1
2
3
4
5
6
7
8
9
[alias]     # command aliases
b = "build"
c = "check"
t = "test"
r = "run"
rr = "run --release"
recursive_example = "rr --example recursions"
space_example = ["run", "--release", "--", "\"command list\""]

启航

Rust 练习引导项目,安装 rustlings

1
2
3
4
# find out the latest version at https://github.com/rust-lang/rustlings/releases/latest (on edit 5.5.1)
git clone -b 5.5.1 --depth 1 https://github.com/rust-lang/rustlings
cd rustlings
cargo install --force --path .

不积跬步,无以至千里

1
rustlings watch

完成练习后,卸载 rustlings

1
cargo uninstall rustlings

在 Windows 11 平台上安装 Docker Desktop
选择 WSL2 安装完成,发现没有出现镜像存储位置的配置。
好吧~我避免系统盘空间不足或后续重装,那就自己动手调整一下。

检查 docker 状态,关闭 docker

启动 Windows Terminal 或 PowerShell,输入 wsl 状态查询命令

1
wsl -l -v --all

执行后可以看到 docker-desktop 和 docker-desktop-data 的状态是 Running ,如下图所示:

Docker 关闭前状态

现在,先退出 docker

在 Windows 任务栏右下角,右键点击 docker-desktop 任务图标,在菜单里选择 “Quit Docker Desktop”

Docker 关闭任务栏

退出后,我们再运行一下状态查询命令,等待查询状态变成 Stopped 就表示 docker 已关闭

Docker 关闭后状态

导出 WSL 中的 docker

准备导出到 D:\wsl-docker\ 目录下

1
wsl --export docker-desktop D:\wsl-docker\docker-desktop.tar
1
wsl --export docker-desktop-data D:\wsl-docker\docker-desktop-data.tar

导出命令执行完成后,在 D:\wsl-docker\ 可以看到 docker-desktop.tar docker-desktop-data.tar

Docker 导出接口

从 WSL 中注销现有的 docker

1
wsl --unregister docker-desktop
1
wsl --unregister docker-desktop-data

注销现有的 docker

重建 WSL 中的 docker

新建的 WSL 的 Docker 存储在 G:\wsl-docker 目录下

1
wsl --import docker-desktop G:\wsl-docker\docker-desktop D:\wsl-docker\docker-desktop.tar --version 2
1
wsl --import docker-desktop-data G:\wsl-docker\docker-desktop-data D:\wsl-docker\docker-desktop-data.tar --version 2

导入完成后,启动 Docker Desktop ,查询状态如下:

重建 docker 状态

因存在 Windows 与 Ubuntu 共享文件的需求,尝试在 Ubuntu 上搭建 Samba

安装

1
sudo apt-get install samba

配置

创建共享文件夹

1
2
3
4
# 新建共享目录
sudo mkdir /opt/android-lan-share
# 设置目录权限
sudo chmod 777 /opt/android-lan-share

Samba

打开配置文件

1
sudo vim /etc/samba/smb.conf  

追加 /opt/android-lan-share 共享文件目录配置

1
2
3
4
5
6
7
8
9
10
11
12
[android.lan.share]
comment = android lan share
browseable = yes
path = /opt/android-lan-share
create mask = 0700
directory mask = 0700
valid users = android
force user = android
force group = android
public = yes
available = yes
writable = yes

Samba - 用户

Linux 账号-新建

1
sudo useradd android

Samba 账号

1
sudo smbpasswd -a android

重启验证配置

1
sudo service smbd restart

扩展

查看 Samba 服务中的用户列表

1
sudo pdbedit -L

删除 Samba 服务中的特定用户

1
sudo smbpasswd -x 用户名

删除 Linux 特定用户

1
sudo userdel 用户名

删除 Linux 中 特定用户 所有信息

1
sudo userdel -r 用户名

Systemd 统一管理所有 Unit 的日志。journalctl 查看所有日志(内核日志和应用日志)。

配置文件是

1
/etc/systemd/journald.conf

查看所有日志

默认情况下 ,只保存本次启动的日志

1
sudo journalctl

查看内核日志

不显示应用日志

1
sudo journalctl -k

查看系统本次启动的日志

1
sudo journalctl -b

1
sudo journalctl -b -0

查看上一次启动的日志

需更改设置

1
sudo journalctl -b -1

查看指定时间的日志

1
sudo journalctl --since="2012-10-30 18:17:16"
1
sudo journalctl --since "20 min ago"
1
sudo journalctl --since yesterday
1
sudo journalctl --since "2015-01-10" --until "2015-01-11 03:00"
1
sudo journalctl --since 09:00 --until "1 hour ago"

显示尾部的最新10行日志

1
sudo journalctl -n

显示尾部指定行数的日志

1
sudo journalctl -n 20

实时滚动显示最新日志

1
sudo journalctl -f

查看指定服务日志

1
sudo journalctl /usr/lib/systemd/systemd

查看指定进程日志

1
sudo journalctl _PID=1

查看某个路径的脚本日志

1
sudo journalctl /usr/bin/bash

查看指定用户日志

1
sudo journalctl _UID=33 --since today

查看某个 Unit 的日志

1
sudo journalctl -u nginx.service

带时间范围控制

1
sudo journalctl -u nginx.service --since today

实时显示某个 Unit 的最新日志

1
sudo journalctl -u nginx.service -f

合并多个 Unit 的日志

1
journalctl -u nginx.service -u php-fpm.service --since today

查看指定优先级日志

1
sudo journalctl -p err -b

共有8级

  1. emerg
  2. alert
  3. crit
  4. err
  5. warning
  6. notice
  7. info
  8. debug

日志默认分页输出,–no-pager 改为正常的标准输出

1
sudo journalctl --no-pager

JSON 输出 (单行)

1
sudo journalctl -b -u nginx.service -o json

JSON 输出 (多行)

1
sudo journalctl -b -u nginx.serviceqq -o json-pretty

日志文件占用硬盘空间

1
sudo journalctl --disk-usage

指定日志文件最大空间

1
sudo journalctl --vacuum-size=1G

指定日志文件保留时长

1
sudo journalctl --vacuum-time=1years

创建服务

运行目录

1
2
sudo mkdir /opt/nfs-mount-239.service
cd /opt/nfs-mount-239.service

启动 Shell

1
sudo vim start.sh
1
2
3
#!/bin/bash
# mount nfs
mount -t nfs 10.0.0.239:/opt/gitlab-runner/android-sdk /mnt/android-sdk-remote-nfs -o nolock
1
sudo chmod +x start.sh

停止 Shell

1
sudo vim stop.sh
1
2
3
#!/bin/bash
# umount nfs
umount /mnt/android-sdk-remote-nfs
1
sudo chmod +x stop.sh

配置文件

1
sudo vim /lib/systemd/system/nfs-mount-239.service

Unit 配置参考文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[Unit]
Description=mount nfs from 10.0.0.239
Wants=network-online.target
BindsTo=nfs-client.target
After=ssh.service

[Service]
WorkingDirectory=/opt/nfs-mount-239.service
ExecStart=/opt/nfs-mount-239.service/start.sh
Restart=on-failure
ExecReload=/opt/nfs-mount-239.service/stop.sh
RestartSec=10

[Install]
WantedBy=multi-user.target
Alias=nfs-mount-239

配置

配置文件修改后,让 SystemD 重新加载配置文件

1
sudo systemctl daemon-reload

检查服务状态

1
sudo systemctl status nfs-mount-239

启动服务

1
sudo systemctl start nfs-mount-239

停止服务

1
sudo systemctl stop nfs-mount-239

设置开机启动

1
sudo systemctl enable nfs-mount-239

禁止开机启动

1
sudo  systemtl disable  nfs-mount-239

检查开机启动配置结果

1
sudo systemctl is-enabled nfs-mount-239

enable、disable或static,这里的 static 它是指对应的 Unit 文件中没有定义[Install]区域,因此无法配置为开机启动服务。

调试 & 分析

日志

启动顺序

1
systemd-analyze plot > boot.svg

启动耗时

1
systemd-analyze blame
0%