问题小记
WxylkxyZz 菜鸡
本文距离上次更新已过去 0 天,部分内容可能已经过时,请注意甄别。

开此篇用于记录平时的一些小技巧小错误


Linux系列

个性化

1
2
PS1="\[\033[1;35m\][\u@\h \W]\$\[\033[1;34m\]"
export PS1

vim安装

vim编辑器需要安装三个包:

1
2
3
4
5
vim-X11-7.4.629-6.el7.x86_64
vim-common-7.4.629-6.el7.x86_64
vim-enhanced-7.4.629-6.el7.x86_64
vim-minimal-7.4.629-6.el7.x86_64
vim-filesystem-7.4.629-6.el7.x86_64
  1. 查看一下你本机已经存在的包,确认一下你的VIM是否已经安装:输入 rpm -qa|grep vim,如果vim已经正确安装,则会显示上面四个包的名称
  2. 如果缺少了其中某个,比如说:vim-enhanced这个包少了,执行:yum -y install vim-enhanced
  3. 如果上面包一个都没有显示,则直接输入命令:yum -y install vim*即可

Docker系列

Docker安装

1
2
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh --mirror Aliyun

自启动systemctl enable docker

Docker使用代理

在执行docker pull时,是由守护进程dockerd来执行。因此,代理需要配在dockerd的环境中。而这个环境,则是受systemd所管控,因此实际是systemd的配置.

1
2
mkdir -p /etc/systemd/system/docker.service.d
vim /etc/systemd/system/docker.service.d/proxy.conf

在这个proxy.conf文件(可以是任意*.conf的形式)中,添加以下内容:

1
2
3
4
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080/"
Environment="HTTPS_PROXY=http://proxy.example.com:8080/"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"

其中,proxy.example.com:8080要换成可用的免密代理。

重启生效

代理配置完成后,reboot 重启当然可以生效,但不重启也行.

docker build代理是在执行前设置的,所以修改后,下次执行立即生效。Container代理的修改也是立即生效的,但是只针对以后启动的Container,对 已经启动Container无效。

docker代理的修改比较特殊,它实际上是改systemd的配置,因此需要重载systemd并重启docker才能生效。

1
2
systemctl daemon-reload
systemctl restart docker

代理系列

linux使用代理

一般情况下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 只作用于当前终端中, 不影响环境

# http/https
export http_proxy="http://user:pwd@ip:port"
export https_proxy="http://user:pwd@ip:port"
# socks5
export http_proxy="socks5://user:pwd@ip:port"
export https_proxy="socks5://user:pwd@ip:port"
# all_proxy
export ALL_PROXY="socks5://user:pwd@ip:port"

# 永久生效
把代理写入shell配置文件.bashrc或者.zshrc
然后source即可
#PS: 使用sudo时注意:通sudo常用来以超级用户(root)的权限执行命令。默认情况下,sudo 会使用一个较为干净的环境,只有一小部分安全相关的环境变量会被保留,其余的用户环境变量(如 PATH、HTTP_PROXY 等)不会被继承
sudo -E : 执行命令时保留调用用户的环境变量

特殊情况

有的应用即使设置了代理也不会走代理 需要用到proxychains4 下面介绍

linux命令行代理神器-proxychains-ng

ProxyChains是Linux和其他Unix下的代理工具。 它可以使任何程序通过代理上网, 允许TCP和DNS通过代理隧道, 支持HTTP、 SOCKS4和SOCKS5类型的代理服务器, 并且可配置多个代理。 ProxyChains通过一个用户定义的代理列表强制连接指定的应用程序, 直接断开接收方和发送方的连接。
ProxyChains 是一个强制应用的 TCP 连接通过代理的工具,支持 Tor、HTTP、与 Socks 代理。与 sshuttle 不同的是,ProxyChains 只会将当前应用的 TCP 连接转发至代理,而非全局代理。

官方文档 Wiki

安装

1
2
3
4
5
6
7
8
# 需要一个可用的 C 编译器,最好是 gcc
./configure --prefix=/usr --sysconfdir=/etc
make
[可选] sudo make install
[可选] sudo make install-config(安装 proxychains.conf)

如果你不安装,你可以使用构建目录中的代理链
像这样:./proxychains4 -f src/proxychains.conf telnet google.com 80

Ubuntu、Deepin 直接apt install proxychains4即可

配置

安装完毕之后需要设置代理配置:
ProxyChains 的配置文件位于 /etc/proxychains4.conf ,打开后你需要在末尾添加你使用的代理。

1
2
3
4
5
6
7
[ProxyList]
# add proxy here ...
# meanwile
# defaults set to "tor"
#socks4 127.0.0.1 9050
# example
socks5 127.0.0.1 7890

eg

1
2
3
4
5
6
7
proxychains4 curl myip.ipip.net
--------
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/aarch64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.14
[proxychains] Strict chain ... 127.0.0.1:7890 ... 127.0.0.1:7890 ... myip.ipip.net:80 ... OK
当前 IP:95.174.71.19 来自于:美国 加利福尼亚州 洛杉矶 edis.at

测试带宽

speedtest

比较简单 安装使用即可

  • 安装
    apt install speedtest-cli
  • 使用
    speedtest
  • 测试科学上网速度
    proxychains4 speedtest
iperf

测试内网路由器的速度的极限

iperf 官网

代挂系列

懒得折腾可以私我上车 q2501375882 Telegram

qinglong安装

安装

Dockerhub

1
2
3
4
5
6
7
docker run -dit \
-v $PWD/ql:/ql/data \
-p 5700:5700 \
--name qinglong \
--hostname qinglong \
--restart unless-stopped \
whyour/qinglong:latest

第一个5700端口是指本机端口可以修改,第二个不可修改。

依赖

nodejs依赖

png-js
date-fns
axios
dotenv
got
crypto-js
md5
ts-md5
tslib
@types/node
requests
tough-cookie
jsdom
download
tunnel
ws
js-base64
qrcode-terminal
moment
form-data
fs
ds
silly-datetime

python依赖

PyExecJS
bs4
redis
requests
Tomli
python-dotenv

安装python依赖一直失败解决方法:

容器内执行以下命令后重新安装
curl -sS https://bootstrap.pypa.io/get-pip.py | python3
如果没反应就多等一会, 或者设置系统代理,再或者下载下py到本地上传到容器中 设置代理执行这个脚本

安装nodejs依赖一直失败解决方法:
两种方法

  1. 容器内给npm设置代理
  2. 更换淘宝源

使用以下命令来为Node设置代理:

1
2
npm config set proxy http://proxy.server.com:port
npm config set https-proxy http://proxy.server.com:port

http://proxy.server.com:port替换为您实际的代理服务器地址和端口号。

如果您需要身份验证才能连接代理服务器,可以使用以下命令设置用户名和密码:

1
2
npm config set proxy http://username:password@proxy.server.com:port
npm config set https-proxy http://username:password@proxy.server.com:port

查看Node使用的代理:

1
2
npm config get proxy
npm config get https-proxy

如果这些命令返回空,那么Node没有配置任何代理。如果代理已配置,则命令将返回代理的URL。

Pro安装

  1. 先执行 mkdir /root/pro && cd /root/pro
  2. 创建容器
    1
    2
    3
    4
    5
    6
    7
    8
    9
    docker run -id \
    --name pro -p 5701:5016 \
    -v "$(pwd)":/app/Data \
    -e Prolic=授权码 \
    -e User=用户名 \
    -e Pwd=密码 \
    --restart unless-stopped \
    --privileged=true \
    nolanhzy/pro:latest
    授权许可自行解决

更新:
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower -c --run-once pro

科学上网系列

Clash安装使用

1
2
3
4
5
6
mkdir Clash && cd Clash && mkdir UI
docker run -d --name Clash --restart always \
-p 7890:7890 -p 9090:9090 \
-v "/root/Clash/config.yaml:/root/.config/clash/config.yaml" \
-v "/root/Clash/UI:/root/.config/clash/ui" \
dreamacro/clash

创建Clash文件夹后需要放入配置文件
可以使用clash作者自带的面板 看个人, 我使用的是yacd的面板
下载后解压放入UI,然后docker restart Clash即可
clash端口相关配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Port of HTTP(S) proxy server on the local end
port: 7890

# Port of SOCKS5 proxy server on the local end
socks-port: 7891

# Transparent proxy server port for Linux and macOS (Redirect TCP and TProxy UDP)
redir-port: 7892

# Transparent proxy server port for Linux (TProxy TCP and TProxy UDP)
# tproxy-port: 7893

# HTTP(S) and SOCKS5 server on the same port,混合端口
mixed-port: 7893

挂载硬盘

dev目录

/dev 是 Linux 系统中的一个特殊目录,用于存储设备文件。在 Linux 中,一切设备都被视为文件,包括硬盘、分区、磁盘、终端、打印机、输入设备等等。这些设备文件位于 /dev 目录下,以方便系统和应用程序与设备进行交互。

当你插入一个新的硬件设备(如硬盘、USB 设备、光驱等)时,系统会自动在 /dev 目录下创建相应的设备文件,以便系统能够识别和使用这些设备。这些设备文件通常以 sdhd 开头,后面跟上字母和数字的组合,用来标识不同的设备和分区。

例如:

  • /dev/sda 表示第一个 SATA 硬盘设备。
  • /dev/sdb 表示第二个 SATA 硬盘设备。
  • /dev/sda1 表示第一个 SATA 硬盘设备的第一个分区。
  • /dev/sda2 表示第一个 SATA 硬盘设备的第二个分区。
  • /dev/sdb1 表示第二个 SATA 硬盘设备的第一个分区。

类似的,其他类型的设备也有相应的设备文件,例如:

  • /dev/tty 表示终端设备。
  • /dev/lp0 表示打印机设备。

通过读写这些设备文件,应用程序和系统可以与硬件设备进行交互,读取和写入数据,实现硬件设备的控制和管理。

总之,/dev 目录是 Linux 系统中用于存储设备文件的特殊目录,为系统提供了一种统一的方式来访问和管理各种硬件设备。

挂载

在 Linux 中挂载硬盘需要以下几个步骤:

  1. 插入硬盘:如果你要挂载的是外部硬盘或 USB 存储设备,首先要将硬盘插入到计算机的 USB 接口或其他硬盘接口上。

  2. 查看硬盘信息:插入硬盘后,使用以下命令查看硬盘的信息,包括硬盘设备名称和分区信息:

1
sudo fdisk -l
  1. 创建挂载点:在 Linux 中,你需要选择一个目录作为挂载点,这将成为你访问硬盘内容的入口。可以在 /mnt/media 目录下创建一个新的子目录作为挂载点,例如:
1
sudo mkdir /mnt/my_hard_drive
  1. 挂载硬盘:使用 mount 命令将硬盘挂载到刚刚创建的挂载点上。假设硬盘设备名称是 /dev/sdb1,可以执行以下命令:
1
sudo mount /dev/sdb1 /mnt/my_hard_drive

请注意,如果硬盘已经被挂载到其他目录,或者正在使用中,将无法成功挂载到新的挂载点。在这种情况下,需要先卸载之前的挂载点,然后再进行挂载。

  1. 验证挂载:使用以下命令可以验证硬盘是否成功挂载到指定的挂载点:
1
df -h

这个命令会显示已挂载的文件系统列表,你应该能够在列表中看到刚刚挂载的硬盘。

  1. 自动挂载:如果你希望系统在每次启动时自动挂载硬盘,可以将挂载信息添加到 /etc/fstab 文件中。编辑这个文件,添加类似以下的一行内容:
1
/dev/sdb1  /mnt/my_hard_drive  ext4  defaults  0  0

保存并退出 /etc/fstab 文件后,重启系统,硬盘应该会自动挂载到指定的挂载点。

以上就是在 Linux 中挂载硬盘的基本步骤。请注意,在挂载和卸载硬盘时,务必小心操作,确保没有数据丢失或损坏。如果你对硬盘的分区和文件系统不熟悉,建议提前备份任何重要数据并谨慎操作。

卸载

在 Linux 中,要卸载(取消挂载)已经挂载的硬盘或分区,可以使用 umount 命令。请按照以下步骤进行:

  1. 确定挂载点:首先,你需要知道硬盘或分区挂载的目录,也就是挂载点。你可以使用 mount 命令或 df 命令查看已挂载的文件系统和挂载点:

    1
    mount

    或者

    1
    df -h

    上述命令会显示已挂载的文件系统列表,包括挂载点信息。

  2. 卸载硬盘或分区:使用 umount 命令卸载硬盘或分区。假设你的硬盘挂载在 /mnt/my_hard_drive 目录下,可以执行以下命令:

    1
    sudo umount /mnt/my_hard_drive

    注意,需要使用 sudo 或以 root 权限运行该命令,以确保具有卸载的权限。

  3. 验证卸载:执行 mount 命令或 df 命令来验证硬盘是否成功卸载:

    1
    mount

    或者

    1
    df -h

    如果硬盘已成功卸载,将不再显示在已挂载的文件系统列表中。

请注意,在执行 umount 命令前,确保没有进程在使用挂载点下的文件,否则卸载会失败。如果系统提示挂载点正在被使用,你可以通过 lsof 命令来查看哪些进程正在使用该挂载点:

1
sudo lsof /mnt/my_hard_drive

然后可以选择关闭相关进程或等待它们完成后再尝试卸载。

总结:卸载硬盘或分区使用 umount 命令,确保没有进程在使用挂载点,使用 mountdf 命令验证卸载结果。如果有进程在使用挂载点,需要先关闭相关进程或等待它们完成。

lsblk

lsblk 是一个 Linux 命令,用于列出块设备信息,包括硬盘、分区和其他存储设备。它提供了一个简洁的方式来查看系统中所有块设备的层次结构和相关信息。

使用 lsblk 命令可以查看以下信息:

  • NAME:块设备的名称,例如 /dev/sda 表示第一个 SATA 硬盘设备。

  • MAJ:MIN:设备的主设备号和次设备号,这些数字用于内核识别和管理设备。

  • RM:设备的类型,RM = 0 表示是一个可移动设备,RM = 1 表示是一个固定设备。

  • SIZE:设备的大小,显示设备的容量大小。

  • RO:设备的只读状态,RO = 1 表示设备为只读状态,RO = 0 表示设备可读可写。

  • MOUNTPOINT:设备的挂载点,如果设备已经挂载,将显示挂载点的路径;否则显示为空。

以下是一个 lsblk 命令的示例输出:

1
2
3
4
5
6
7
8
9
10
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda 8:0 0 465.8G 0 disk
├─sda1 8:1 0 100M 0 part /boot/efi
├─sda2 8:2 0 16M 0 part
├─sda3 8:3 0 48.8G 0 part /
├─sda4 8:4 0 100G 0 part /home
├─sda5 8:5 0 50.5G 0 part
└─sda6 8:6 0 266.4G 0 part /mnt/data
sdb 8:16 0 931.5G 0 disk
└─sdb1 8:17 0 931.5G 0 part /mnt/backup

在上述示例中,lsblk 命令列出了两个块设备:sdasdb。其中,sda 是第一个 SATA 硬盘设备,sdb 是第二个 SATA 硬盘设备。sda 硬盘包含多个分区,每个分区都有一个唯一的名称,例如 sda1sda2 等。每个分区都可以挂载到不同的挂载点,如 /boot/efi//home 等。

通过 lsblk 命令,你可以快速了解系统中的硬盘和分区情况,以及它们的挂载状态和容量大小等信息,有助于进行硬件设备的管理和配置。

Markdown系列

基本使用

菜鸟教程

小问题

  1. 代码块可以用```包裹,但是结尾的```不要加两空格用来换行,会乱,直接回车!

    • ![替代文字](图片地址 "可选标题")
  • []内文本只有在图片无法正常显示时候才会显示出来,正常情况下是看不到的。如果插入的图片较多,利用图片说明文字可以在图片显示出错时快速定位出问题的是哪张图片。
  • 可选标题是在鼠标悬停在图片上时显示的文字

Windows系列

W10 LSTC 2021版本 安装应用商店

管理员身份打开Powershell输入命令行wsreset -i 等待一分钟
点击左下角win,应该显示新安装store

待续….

Python

代码打包

使用PyInstaller 库打包

1
2
cd 目录
pyinstaller --onefile --icon=your_icon.ico your_script.py
  • 执行完上述命令后, PyInstaller库会将你的 Python 代码、所依赖的库和资源文件打包成一个独立的可执行文件。打包生成的可执行文件将会出现在一个名为dist的子目录中。其中 your_icon.ico 是你希望添加到 exe 文件中的图标文件,在dist目录下你会发现一个名为 your_script.exe 的可执行文件,它就是你的Python代码的独立可执行文件。

你可以使用以下方法来给打包的 exe 文件添加自己的图标并去除黑窗口。

  1. 添加自己的图标

    添加自己的图标可以通过在 PyInstaller 打包命令中添加 --icon 选项来实现。例如:

    1
    pyinstaller --onefile --icon=your_icon.ico your_script.py

    其中 your_icon.ico 是你希望添加到 exe 文件中的图标文件。

  2. 去除黑窗口

    在 Windows 平台下,Exe 文件一运行就会弹出一个命令行窗口,如果你不希望出现这个窗口,可以添加 -w--windowed 参数,这将启用 pyinstaller 库的 GUI 窗口模式。例如:

    1
    pyinstaller --onefile --icon=your_icon.ico --windowed your_script.py

    注意:在使用了 -w 参数启用 GUI 模式后,你的 Python 代码必须是全局作用域下的窗口应用程序。如果你的代码没有窗口界面,那么这个选项对其没有影响。

    另外,你也可以尝试在你的代码中添加下面这行。它可以帮助 Python 隐藏命令行窗口。

    1
    2
    import os
    os.environ['PYGAME_HIDE_SUPPORT_PROMPT'] = '1'

    PS: 这种方式可能会与您的代码中使用的库发生冲突,因此不是每个人都能成功。