作者: xiaoxing

  • 终端常用快捷键

    删除类
    --------------------------------
    ✔ Ctrl + W
    
    ? 删除光标前一个单词
    
    ✔ Ctrl + U
    
    ? 删除光标到行首
    
    ✔ Ctrl + K
    
    ? 删除光标到行尾
    
    ✔ Ctrl + L
    
    ? 清屏
    
    --------------------------------
    移动类
    
    Home  移动到行首
    
    End   移动到行尾
    
    ✔ Alt + B
    
    ? 向左跳一个单词
    
    ✔ Alt + F
    
    ? 向右跳一个单词
    --------------------------------
    其他类
    
    ✔ Ctrl + C
    
    ? 强制终止当前命令
    
    ✔ Tab
    
    ? 自动补全(最重要)
    
    ✔ 双击 Tab
    
    ? 显示所有可选项

    windows powershell常用快捷键

    Ctrl+Home   删除到行首
    Ctrl+End    删除到行尾
    Home        移动到行首
    End         移动到行尾
    
    ✔ Ctrl + Backspace
    
    ? 删除前一个单词(⭐相当于 Linux Ctrl+W)
    
    ✔ Ctrl + Delete
    
    
    ? 删除后一个单词
    
    ✔ Ctrl + Shift + T
    
    ? 新建标签页
    
    ✔ Ctrl + Shift + W
    
    ? 关闭标签页
    
    ✔ Ctrl + Shift + C
    
    ? 复制
    
    ✔ Ctrl + Shift + V
    
    ? 粘贴
    
    

  • scp传输文件

    一、传到服务器 B(账号+密码登录)

    服务器信息

    • IP:11.22.33.44
    • 用户:root
    • 密码:12345678
    • 端口:1234
    • 本地文件:a.txt
    • 目标路径:/root/test/

    ❗标准 scp 命令

    scp  -P 1234 a.txt root@11.22.33.44:/root/test/

    ⚠️关键点(很重要)

    scp 不能直接在命令里写密码

    ? 服务器返回需要输入密码:

    root@11.22.33.44's password:

    然后手动输入:

    12345678

    二、传到服务器 C(使用密钥 s.key)

    服务器信息

    • IP: 55.66.77.88
    • 用户:root
    • 密钥:s.key
    • 端口:1234
    • 文件:a.txt
    • 目标路径:/root/test/

    ❗标准 scp(指定私钥)

    scp -P 1234 -i s.key a.txt root@55.66.77.88:/root/test

    ?如果 key 需要权限修复(常见问题)

    chmod 600 s.key

    ?更完整写法(推荐)

    scp -P 1234 -i s.key -o StrictHostKeyChecking=no a.txt root@55.66.77.88:/root/test/

    限制速率目标:5 MB/s

    换算:

    5 MB/s
    = 5 × 8 = 40 Mbps
    = 40000 Kbit/s

    普通密码登录版本

    scp -l 40000 a.txt root@11.22.33.44:/root/test

    2️⃣ 指定密钥版本

    scp -i s.key -l 40000 a.txt root@55.66.77.88:/root/test

    ⭐ rsync 限速(推荐)

    限速单位:KB/s(更直观)

    5 MB/s = 5120 KB/s
    rsync -avz --bwlimit=5120 a.txt root@11.22.33.44:/root/test

    ⭐ rsync + key

    rsync -avz -e "ssh -i s.key" --bwlimit=5120 a.txt root@55.66.77.88:/root/test

  • systemctl系统服务

    sudo vim /etc/systemd/system/upload_image.service
    
    编辑一下内容
    ----------------------------------------------
    
    [Unit]
    Description=上传群图片服务
    After=network.target
    
    [Service]
    Type=simple
    User=root
    WorkingDirectory=/home/xxx/qun_code
    
    ExecStart=/home/xxx/venv/bin/python3 /home/xxx/qun_code/upload_qun.py
    
    Restart=always
    RestartSec=10
    
    StandardOutput=append:/var/log/xxx.log
    StandardError=append:/var/log/xxx.log
    
    [Install]
    WantedBy=multi-user.target
    
    
    ----------------------------------------------
    systemctl --version   那个版本就可以使用file   append了  
    
    
    219  老版本只能用
    StandardOutput=journal
    StandardError=journal
    
    236可以用
    StandardOutput=file:/var/log/xxx.log
    StandardError=file:/var/log/xxx.log
    
    240可以用
    StandardOutput=append:/var/log/xxx.log
    StandardError=append:/var/log/xxx.log
    ----------------------------------------------
    
    重启服务
    
    systemctl daemon-reload
    
    systemctl enable upload_image
    
    systemctl restart upload_image
    
    systemctl status upload_image
    
    ----------------------------------------------
    旧版本查看日志
    journalctl -u upload_image.service -f
    
    journalctl -u upload_image.service -n 100
    
    journalctl -u upload_image.service --since today
    
    --------------------------------------------
    查看所有的服务
    
    systemctl list-unit-files --type=service
    
    #更加详细的信息
    systemctl list-units --type=service --all
    
    查看正在运行的
    systemctl list-units --type=service --state=active
    
    -------------------------------
    
    修改服务的名字  将 my_fast_api2 改为  my_fast_api
    
    sudo systemctl stop my_fast_api2.service
    sudo systemctl disable my_fast_api2.service
    sudo mv /etc/systemd/system/my_fast_api2.service /etc/systemd/system/my_fast_api.service
    sudo systemctl daemon-reload
    sudo systemctl enable my_fast_api.service
    sudo systemctl start my_fast_api.service
    
    
    
  • 将脚本添加为系统服务

    1. 创建服务文件

    sudo vim /etc/systemd/system/your_script.service

    内容:

    [Unit]
    Description=你的脚本简介
    After=network.target
    
    [Service]
    Type=simple
    User=root
    WorkingDirectory=/home/xiaoxing
    
    ExecStart=/bin/python3 /home/xiaoxing/your_script.py
    
    Restart=always
    RestartSec=10
    
    StandardOutput=append:/var/log/your_script.log
    StandardError=append:/var/log/your_script_error.log
    
    [Install]
    WantedBy=multi-user.target

    2. 重新加载 systemd

    systemctl daemon-reload

    3. 设置开机启动

    systemctl enable your_script

    4. 启动服务

    systemctl start your_script

    5. 查看状态

    systemctl status your_script

    实时查看日志:

    tail -f /var/log/your_script.log

    错误日志:

    tail -f /var/log/your_script_error.log
  • 解决windows电脑图标不刷新的问题

    执行下面步骤:

    1. 打开 CMD(管理员)
    taskkill /f /im explorer.exe

    del /a /q "%localappdata%\IconCache.db"
    del /a /q "%localappdata%\Microsoft\Windows\Explorer\iconcache*"

    start explorer.exe

    2. 如果是powershell 执行如下命令

    taskkill /f /im explorer.exe
    
    Remove-Item "$env:LOCALAPPDATA\IconCache.db" -Force
    Remove-Item "$env:LOCALAPPDATA\Microsoft\Windows\Explorer\iconcache*" -Force
    
    start explorer.exe
  • Win11 右下角时间显示到秒

    PowerShell 版本:
    
    Set-ItemProperty `
        -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" `
        -Name ShowSecondsInSystemClock `
        -Type DWord `
        -Value 1
    
    然后重启资源管理器生效。
  • 防止终端执行乱码

    终端执行需要加上如下代码
    
    [Console]::OutputEncoding = [System.Text.UTF8Encoding]::new()

  • ubuntu24安装mysql 8.0.46

    1.更新系统软件包
    在安装前,建议先更新系统的软件包列表以确保获取最新的软件信息:

    sudo apt update
    sudo apt upgrade -y


    2. 安装 MySQL 8.0
    执行以下命令安装 MySQL 服务器(Ubuntu 24 默认仓库提供的 MySQL 版本即为 8.0):

    sudo apt install mysql-server -y


    3. 启动服务并设置开机自启
    安装完成后,MySQL 服务通常会自动启动。为确保万无一失,可以手动启动并设置开机自启:

    sudo systemctl start mysql
    sudo systemctl enable mysql
    sudo systemctl restart mysql
    


    4. 检查 MySQL 运行状态
    确认 MySQL 是否成功运行:

    sudo systemctl status mysql


    当看到 Active: active (running) 时,说明服务已正常运行。
    5. 登录并设置 Root 密码
    Ubuntu 默认安装的 MySQL 没有设置 root 密码,且仅允许本地验证登录。直接回车即可登录:

    sudo mysql -u root -p


    登录成功后,执行以下 SQL 语句为 root 用户设置强密码(请将 ‘你的新密码’ 替换为你自己的密码):
    完成后输入 quit; 退出。

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密码';
    FLUSH PRIVILEGES;



    6. 运行安全配置向导(可选但推荐)
    MySQL 提供了安全配置脚本,可以帮助你移除匿名用户、禁止 root 远程登录、删除测试数据库等:

    sudo mysql_secure_installation


    7. 配置远程访问(可选)
    如果你需要从其他机器远程连接该数据库,需要进行以下两步配置:
    修改配置文件: 编辑 MySQL 配置文件 sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf,找到 bind-address 并将其修改为允许所有 IP 访问:

    bind-address = 0.0.0.0


    授权远程用户: 登录 MySQL 后,为 root 用户(或新建用户)开启远程访问权限:

    默认没有密码  设置新密码 兼容老系统
    CREATE USER IF NOT EXISTS 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密码';  #可以不要
    
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密码';
    
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '你的新密码' WITH GRANT OPTION;  #旧版本支持修改密码
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION; #新版本不支持修改密码 
    
    FLUSH PRIVILEGES;  #旧版本需要刷新  新版本不需要
    创建一个用于xiaoxing 授权ip 192.168.1.%  可以访问 my_database 数据库所有信息。
    
    -- 推荐:创建专用用户(不要用 root!)
    CREATE USER 'xiaoxing'@'192.168.1.%' IDENTIFIED BY '你的密码';
    
    -- 授予所需权限(例如所有数据库,或指定库)
    GRANT ALL PRIVILEGES ON my_database.* TO 'xiaoxing'@'192.168.1.%';
    
    -- 刷新权限
    FLUSH PRIVILEGES;
    查看所有的用户
    
    select user,host,plugin from mysql.user;
    
    +---------------+-----------+
    | User          | host      |
    +---------------+-----------+
    | mysql.session | localhost |
    | mysql.sys     | localhost |
    | root          | localhost |
    +---------------+-----------+
    3 rows in set (0.00 sec)
    
    #允许任意ip访问mysql
    UPDATE mysql.user SET host = '%' WHERE user = 'root';
    
    
    创建一个数据库test
    
    CREATE DATABASE test DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
    
    show databases;
    use test;
    show tables;


    重启服务并开放防火墙: 修改配置后需重启 MySQL 服务(sudo systemctl restart mysql)。如果系统开启了防火墙,还需开放 3306 端口:sudo ufw allow 3306/tcp。

    避坑提示:关于表名大小写在 Linux 下默认安装的 MySQL 是严格区分表名和数据库名大小写的。如果你的业务代码没有严格区分大小写,建议在安装完、初始化数据之前,修改配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf,在 [mysqld] 下添加 lower_case_table_names=1 来关闭大小写敏感。注意:此参数必须在数据库初始化前配置,否则可能导致 MySQL 无法启动。

    如何修改mysql 数据库目录

    配置文件里面端口和数据库文件存放位置
    # port		= 3306
    # datadir	= /var/lib/mysql
    
    
    # 先停掉 MySQL
    systemctl stop mysql
    
    # 复制数据(-a 保留权限、所有者等)
    cp -a /var/lib/mysql/. /data1/mysql/
    
    # 或者用 rsync
    # rsync -av /var/lib/mysql/ /data1/mysql/
    
    chown -R mysql:mysql /data1/mysql/
    chmod 750 /data1/mysql          # 目录权限 750 足够,内部文件会自动继承之前的权限

    修改mysql 数据库文件目录后 需要 配置 AppArmor(最容易被忽略的一步)

    Ubuntu/Debian 的 AppArmor 默认只允许 MySQL 访问 /var/lib/mysql,访问新路径 /data1 会被拦截,报 Permission denied。

    # 编辑 MySQL 的 AppArmor 配置

    vim /etc/apparmor.d/usr.sbin.mysqld

    找到类似以下两行(通常在文件靠前位置):

    /var/lib/mysql/ r,
    /var/lib/mysql/** rwk,

    在它们下面添加两行针对新路径的规则:

    /data1/mysql/ r,
    /data1/mysql/** rwk,

    保存退出后,重新加载 AppArmor 规则:

    systemctl restart apparmor


    忘记密码如何操作

    先停止mysqld57 / mysql8 服务
    
    windows启动超级模式
    
    .\mysqld.exe --defaults-file="C:\ProgramData\MySQL\MySQL Server 5.7\my.ini" --skip-grant-tables --console
    
    直接
    mysql -uroot  
    进去操作
    
    查看 root 用户认证方式
    
    SELECT user,host,plugin FROM mysql.user;
    
    
    -------------------------------------------------------------
    
    linux  类似操作
    sudo systemctl stop mysql
    
    sudo mysqld_safe --skip-grant-tables --skip-networking &
    或者
    sudo /usr/bin/mysqld_safe --skip-grant-tables --skip-networking &
    
    如果提示
    Directory '/var/run/mysqld' for UNIX socket file don't exists.
    
    sudo mkdir -p /var/run/mysqld
    sudo chmod 755 /var/run/mysqld
    sudo chown -R mysql:mysql /var/run/mysqld
    在执行   sudo /usr/bin/mysqld_safe --skip-grant-tables --skip-networking &
    
    查看 root 用户认证方式
    
    SELECT user,host,plugin FROM mysql.user;
    
    MySQL 8 在 --skip-grant-tables 下不能直接改密码,需要先执行:  mysql5.7 无视
    FLUSH PRIVILEGES;
    
    
    ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
    FLUSH PRIVILEGES;
    
    ps -ef | grep mysqld
    
    sudo kill -9 PID   停掉刚刚的mysql
    
    或者
    sudo pkill mysqld
    sudo pkill mysqld_safe
    
    sudo systemctl start mysql

    创建用户

    CREATE USER 'root'@'223.93.145.203' IDENTIFIED WITH mysql_native_password BY '你的密码';
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'223.93.145.203';
    FLUSH PRIVILEGES;
    
    #创建指定用户 指定ip访问
    CREATE USER 'scan'@'120.26.168.246' IDENTIFIED WITH mysql_native_password BY '你的密码';
    #授权指定用户 访问 scan_cookies 这个数据库
    GRANT ALL PRIVILEGES ON scan_cookies.* TO 'scan'@'120.26.168.246';
    FLUSH PRIVILEGES;
    
    
    ALTER USER 'root'@'223.93.145.203' IDENTIFIED WITH mysql_native_password BY 'MyPassword@123';
    ALTER USER 'root'@'120.26.168.246' IDENTIFIED WITH mysql_native_password BY 'MyPassword@123';
    FLUSH PRIVILEGES;
    
    
  • VSCode 中即使已设置 Python 虚拟环境,仍出现波浪线解决办法

    在 VSCode 中即使已设置 Python 虚拟环境,仍出现波浪线(通常是 Pylance 语言服务器的“未解析导入”警告),这并非代码错误,而是静态分析工具未能正确识别当前解释器所对应的包路径。以下是系统性的解决方案:


    ✅ 第一步:确认并选择正确的 Python 解释器

    这是最常见的原因。VSCode 可能默认使用了全局 Python 或其他环境,而非你期望的虚拟环境。

    1. 按 Ctrl + Shift + P 打开命令面板。
    2. 输入并选择 Python: Select Interpreter
    3. 在弹出的列表中,找到你的虚拟环境路径(通常包含 .venv、venv 或 env 等字样)。
      • 例如:.venv\Scripts\python.exe (Windows) 或 .venv/bin/python (macOS/Linux)
    4. 选中它,VSCode 右下角状态栏会显示当前选中的解释器路径。

    ? 如果列表中没有你的虚拟环境,说明 VSCode 没有自动扫描到它。你可以点击 “Enter interpreter path…” 手动输入完整路径。


    ✅ 第二步:重启语言服务器以刷新缓存

    有时即使选择了正确的解释器,Pylance 仍会缓存旧的路径信息。

    1. 按 Ctrl + Shift + P
    2. 输入并执行 Developer: Reload Window
    3. 等待几秒,让 VSCode 重新加载并初始化语言服务器。
  • windows多个版本的python如何切换版本

    方法一:

    打开 PowerShell,输入以下命令打开配置文件(如果文件不存在会自动创建):

    notepad $PROFILE
    
    注:如果提示系统找不到指定路径 运行一下就好了
    New-Item -Path $PROFILE -ItemType File -Force

    在打开的记事本中添加以下代码:

    Set-Alias python3.11 "C:\Program Files\Python311\python.exe"
    Set-Alias python3.9 "C:\Program Files\Python39\python.exe"
    Set-Alias pip3.11 "C:\Program Files\Python311\Scripts\pip3.11.exe"
    Set-Alias pip3.9 "C:\Program Files\Python39\Scripts\pip3.9.exe"
    

    方法二:python自带的 官方的启动器 py.exe(位于 C:\Windows\py.exe)

    # 运行脚本
    py -3.11 script.py
    py -3.9 script.py
    
    #安装包
    py -3.11 -m pip install <包名>
    py -3.9 -m pip install <包名>

    更新pip包

    python3.11 -m pip install –upgrade pip

    python3.9 -m pip install –upgrade pip

    PS初始化powershell 设置

    或者直接新建 C:\Users\Administrator\Documents\PowerShell\Microsoft.PowerShell_profile.ps1

    C:\Users\Administrator\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

    notepad $PROFILE
    
    输入一下内容保存
    
    # 设置 UTF-8 控制台
    chcp 65001 > $null
    [Console]::InputEncoding = [System.Text.Encoding]::UTF8
    [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
    $OutputEncoding = [System.Text.Encoding]::UTF8
    
    # 文件默认 UTF-8
    $PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
    $PSDefaultParameterValues['Set-Content:Encoding'] = 'utf8'
    $PSDefaultParameterValues['Add-Content:Encoding'] = 'utf8'
    $PSDefaultParameterValues['*:Encoding']='utf8'
    
    $Host.UI.RawUI.WindowTitle = "PowerShell"
    Write-Host ""
    Write-Host "PowerShell $($PSVersionTable.PSVersion)" -ForegroundColor Green
    Write-Host "CodePage : $(chcp.com | Select-Object -First 1)" -ForegroundColor Cyan
    Write-Host "InputEncoding  : $([Console]::InputEncoding.WebName)" -ForegroundColor Yellow
    Write-Host "OutputEncoding : $([Console]::OutputEncoding.WebName)" -ForegroundColor Yellow
    Write-Host ""
    Set-Alias python3.11 "C:\Program Files\Python311\python.exe"
    Set-Alias python3.9 "C:\Program Files\Python39\python.exe"
    Set-Alias pip3.11 "C:\Program Files\Python311\Scripts\pip3.11.exe"
    Set-Alias pip3.9 "C:\Program Files\Python39\Scripts\pip3.9.exe"
    function prompt {
        $time = Get-Date -Format "MM-dd HH:mm:ss"
        Write-Host "[$time]" -ForegroundColor Cyan -NoNewline
        " PS $($executionContext.SessionState.Path.CurrentLocation)> "
    }

    Python设置国内源

    pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
    pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn
    
    https://mirrors.aliyun.com/pypi/simple/

    创建python 虚拟环境 并为提示符设置颜色

    python3.11 -m venv venv
    
    找到 ./venv/bin/activate
    
    
    if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
        _OLD_VIRTUAL_PS1="${PS1:-}"
        PS1='(venv) '"${PS1:-}"
        export PS1
        VIRTUAL_ENV_PROMPT='(venv) '
        export VIRTUAL_ENV_PROMPT
    fi
    
    修改提示符  venv 为绿色 更为显眼
    
    PS1='\[\033[1;32m\](venv)\[\033[0m\] '"${PS1:-}"
    
    退出虚拟环境
    deactivate
    
    推荐使用命令一键替换   PS1='(venv)   找到这一行直接替换
    
    sed -i -E 's|^([[:space:]]*)PS1='\''(\([^)]*\)) '\''"\$\{PS1:-\}"|\1PS1='\''\\[\\033[1;32m\\]\2\\[\\033[0m\\] '\''"${PS1:-}"|' ./venv/bin/activate