跳到主要内容

解决使用 Tabby 时 Screen 和 Xterm 终端无法使用鼠标滚动页面

· 阅读需 1 分钟
素明诚
Full stack development

起因

使用 screen 和基于 xterm 的终端时,滚动鼠标会出现下面这些字符

^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[B

解决方案

screen 的配置进行修改,具体方法是在用户的 .screenrc 文件中添加一行配置

echo "termcapinfo xterm* ti@:te@" > ~/.screenrc

"termcapinfo xterm* ti@:te@" 是针对所有以 xterm 开头的终端类型进行配置。其中,ti@te@ 分别禁用了终端的初始化和退出模式。这些模式通常在进入和退出全屏应用时调用,禁用它们可以防止 screen 改变终端的显示状态,这是导致显示错误的常见原因。

解决远程开发时 Git 的安全策略和权限问题

· 阅读需 3 分钟
素明诚
Full stack development

JetBrains IDE 报错

detected dubious ownership in repository at '/home/smc/vchatbi' To add an exception for this directory, call: git config --global --add http://safe.directory /home/smc/vchatbi

这个错误是由于 Git 的安全策略导致的,Git 认为你尝试更新的目录的所有权存在问题,因此阻止了操作。这是为了防止潜在的安全问题。在这种情况下,你可以通过以下方法来解决这个问题

将目录添加为安全目录

终端中运行以下命令,将该目录标记为安全

git config --global --add safe.directory /home/smc/vchatbi

这样做的目的是告诉 Git 该目录是可信的,你可以正常进行更改和提交。

检查用户和组的权限

确保你当前用户对 /home/smc/vchatbi 目录拥有正确的权限。如果你有权限问题,可以使用 chown 更改该目录的所有者。例如,如果你当前的用户名是 smc,可以运行

sudo chown -R smc:smc /home/smc/vchatb

解决 Git 管理的文件都出现在缓存区问题

配置 sudo chown -R smc:smc /home/smc/vchatbi之后,所有的文件都出现在了缓冲区,虽然一个文件也没改变。

这是因为

执行 sudo chown -R smc:smc /home/smc/vchatbi 之后,所有的文件在 Git 的视角中变成了“修改过的”状态,这通常是因为修改了文件的元数据(例如所有权、权限等),而这些变更也会被 Git 记录下来。尽管文件的内容本身没有发生变化,但元数据的变更使得 Git 认为文件发生了改动。以下是一些可能的解决方案来处理这个问题

忽略权限变化

你可以让 Git 忽略文件权限的变化,通过以下命令来完成:

git config core.fileMode false

这样做会让 Git 忽略文件权限的变化,而只关注文件内容的变动。

检查看看是否真的有内容变化

你可以运行以下命令查看具体有哪些文件被标记为“修改过的”

git status

然后可以用以下命令查看特定文件的更改:

git diff <file_path>

如果你发现没有任何内容上的变化,只是因为权限或者元数据的变化,可以使用以下命令撤销这些变动:

git checkout -- .

这样可以把所有变动的文件恢复为 HEAD 版本的状态。也可以解决问题

解决远程开发时 JetBrains IDE 版本已过期的问题

· 阅读需 1 分钟
素明诚
Full stack development

报错如下

14385dd420e20adebabe19445d71edbf## 解决步骤

更新 IDE 版本

根据提示选择“JetBrains Installer”,从安装选项中选择最新版本来安装。

打开你的 IDE,选择“Help” -> “Check for Updates”来获取最新版本并进行安装。

更新 IDE 版本依旧报错

779db56e220a22ce978b3e08d64de502

重新填写远程主机的地址和密码,就可以恢复远程开发了

Linux pip 配置国内源

· 阅读需 1 分钟
素明诚
Full stack development

国内镜像源

清华大学https://pypi.tuna.tsinghua.edu.cn/simple

阿里云https://mirrors.aliyun.com/pypi/simple/

中国科技大学https://pypi.mirrors.ustc.edu.cn/simple/

豆瓣https://pypi.douban.com/simple/

你可以通过修改 pip 的配置文件或在命令行中指定使用这些镜像。例如,要使用清华大学的镜像,可以在 pip 命令中这样指定

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

配置 pip 的默认源

对于 Unix/Linux/macOS (pip.conf):

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple

对于 Windows (pip.ini):

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple

检查是否配置成功

使用 pip config list 命令来查看当前的配置是否已经更新。这个命令会显示所有 pip 的配置,包括你设置的源。

c627f8b57741e662cac6f375b8185068

Linux 上检查

Windows pip 配置国内源

· 阅读需 2 分钟
素明诚
Full stack development

查看当前 pip 位置

pip config -v list

9d4a61ae89ba84e0048c931888668c08## 配置文件说明

全局配置

C:\ProgramData\pip\pip.ini
这是系统级别的配置,对所有用户有效。

用户配置

C:\Users\SMC\pip\pip.ini
C:\Users\SMC\AppData\Roaming\pip\pip.ini
这些是当前用户的配置文件,只对当前用户有效。

虚拟环境配置

C:\Users\SMC\.conda\envs\vchatbi\pip.ini
这是特定于 `vchatbi` 虚拟环境的配置,只在这个虚拟环境中有效。

编辑配置文件

你可以选择编辑上述任一配置文件来设置 pip 源。根据你的需要,选择合适的文件进行编辑

如果你希望改变的设置对所有用户都有效,编辑全局配置文件。

如果只希望影响当前用户,编辑用户配置文件。

如果只想影响特定虚拟环境中的 pip 行为,编辑虚拟环境的配置文件。

假设你想要修改用户级别的配置文件 C:\Users\SMC\AppData\Roaming\pip\pip.ini,添加或修改内容如下

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple

常用源

清华大学 Tuna 镜像源

https://pypi.tuna.tsinghua.edu.cn/simple

阿里云 PyPI 镜像

https://mirrors.aliyun.com/pypi/simple/

中国科技大学

https://pypi.mirrors.ustc.edu.cn/simple/

华为云

https://mirrors.huaweicloud.com/repository/pypi/simple

腾讯云

http://mirrors.cloud.tencent.com/pypi/simple

网易开源镜像站

http://mirrors.163.com/pypi/simple/

豆瓣源

http://pypi.douban.com/simple/

Ubuntu 解决 fc-cache 命令缺失导致的 initramfs-tools 更新失败 的问题

· 阅读需 4 分钟
素明诚
Full stack development

错误内容

E: /usr/share/initramfs-tools/hooks/plymouth failed with return 127.
update-initramfs: failed for /boot/initrd.img-... with 127.
dpkg: error processing package initramfs-tools (--configure):
installed initramfs-tools package post-installation script subprocess returned error exit status 127

错误代码 127 表示命令未找到(command not found)。

initramfs-toolsplymouth 钩子脚本在更新 initramfs 镜像时,需要调用 fc-cache 命令。

尽管 fontconfig 软件包已安装,但 fc-cache 命令缺失,可能是由于软件包损坏、文件系统问题或磁盘空间不足导致的。

排查步骤

步骤 1:更新软件包列表

首先,更新您的软件包列表以确保获取最新的软件包信息。

sudo apt-get update

步骤 2:强制重新安装 fontconfig 及其相关软件包

强制重新安装 fontconfig 及其相关的软件包,包括 libfontconfig1fontconfig-config

sudo apt-get install --reinstall fontconfig fontconfig-config libfontconfig1

注意: 请仔细观察重新安装过程中的任何错误信息。如果出现错误,请记录下来。

步骤 3:验证 fc-cache 是否存在

重新安装后,检查 fc-cache 是否已安装。

which fc-cache

预期结果: 应该输出 /usr/bin/fc-cache。如果没有输出,表示 fc-cache 仍然缺失。

步骤 4:检查 fc-cache 的可执行权限

查看 fc-cache 的文件权限是否正确。

ls -l /usr/bin/fc-cache

预期结果: 您应该看到文件存在,并且具有可执行权限(-rwxr-xr-x)。

步骤 5:测试 fc-cache 命令

尝试运行 fc-cache,以确保它可以正常工作。

/usr/bin/fc-cache --version

预期结果: 显示 fontconfig 的版本信息。

步骤 6:完成未完成的软件包配置

由于之前的错误涉及到 initramfs-tools 未完全安装或配置,运行以下命令:

sudo dpkg --configure -a

这将尝试完成任何未完成的软件包配置。

步骤 7:更新 initramfs

尝试重新生成 initramfs,看看错误是否仍然存在。

sudo update-initramfs -u

步骤 8:如果问题仍然存在,检查软件包完整性

如果 fc-cache 仍然缺失,可能是软件包数据库或 fontconfig 软件包本身已损坏。我们可以尝试清理软件包缓存并重新下载软件包。

sudo apt-get clean
sudo apt-get update
sudo apt-get install --reinstall fontconfig fontconfig-config libfontconfig1

步骤 9:检查磁盘空间

确保系统磁盘有足够的可用空间,特别是 /usr 所在的分区。

df -h

如果空间不足,可能导致软件包无法正确安装。

步骤 10:检查文件系统是否存在损坏

如果怀疑文件系统可能损坏,可以尝试在下次重启时运行文件系统检查。

sudo touch /forcefsck

然后重启系统,系统会在启动时自动检查文件系统。

步骤 11:查看 fontconfig 软件包的文件列表

检查 fontconfig 软件包应包含哪些文件,并验证它们是否存在。

dpkg -L fontconfig

查看输出,确认 /usr/bin/fc-cache 是否在列表中。

步骤 12:尝试从 DEB 文件手动安装 fontconfig

如果问题仍未解决,可以尝试手动下载并安装 fontconfig 软件包。

sudo apt-get download fontconfig
sudo dpkg -i --force-all fontconfig_*.deb

注意: 请确保替换 fontconfig_*.deb 为实际下载的文件名。

步骤 13:检查 fontconfig 依赖的库

查看 fc-cache 依赖的库,确保它们都存在。

ldd /usr/bin/fc-cache

如果有任何库显示为 not found,则需要重新安装相应的库。

步骤 14:重新安装相关的依赖库

如果发现缺少某些库,例如 libfontconfig.so.1,请重新安装相关的库。

sudo apt-get install --reinstall libfontconfig1

步骤 15:尝试移除并重新安装 fontconfig

警告: 这可能会移除依赖于 fontconfig 的其他软件包,请务必谨慎。

sudo apt-get remove --purge fontconfig
sudo apt-get install fontconfig

在执行此操作前,您可以检查哪些软件包依赖于 fontconfig

apt-cache rdepends fontconfig

步骤 16:再次验证 fc-cache

重复 步骤 3步骤 5,确认 fc-cache 已正确安装并可执行。

步骤 17:重新配置并更新 initramfs

sudo dpkg --configure -a
sudo update-initramfs -u

如果在上述所有步骤后问题仍未解决,我们可以考虑以下临时解决方案:

临时解决方案:禁用 plymouth 钩子

注意: 这只是一个临时的解决方案,可能会影响系统的启动画面。

步骤 1:重命名 plymouth 钩子脚本

sudo mv /usr/share/initramfs-tools/hooks/plymouth /usr/share/initramfs-tools/hooks/plymouth.bak

步骤 2:重新配置软件包并更新 initramfs

sudo dpkg --configure -a
sudo update-initramfs -u

步骤 3:继续软件包安装或更新

apt install git

什么是数据定义语言DDL

· 阅读需 3 分钟
素明诚
Full stack development

数据定义语言(Data Definition Language,简称DDL)是一组用于定义和管理数据库结构和对象的 SQL 语句。这些语句用于创建、修改和删除数据库中的各种对象,如数据库本身、表、索引、视图、存储过程和触发器等。DDL 主要用于描述数据库的模式(schema),即数据库的逻辑结构。

DDL 的主要操作

创建(CREATE)用于创建新的数据库对象。

创建数据库

CREATE DATABASE 数据库名;

创建表

CREATE TABLE 表名 (
列名1 数据类型 [约束],
列名2 数据类型 [约束],
...
);

修改(ALTER)用于修改现有的数据库对象。

修改表结构添加、修改或删除列。

-- 添加列
ALTER TABLE 表名 ADD COLUMN 列名 数据类型;

-- 修改列
ALTER TABLE 表名 MODIFY COLUMN 列名 新数据类型;

-- 删除列
ALTER TABLE 表名 DROP COLUMN 列名;

删除(DROP)用于删除数据库对象。

删除数据库

DROP DATABASE 数据库名;

删除表

DROP TABLE 表名;

重命名(RENAME)用于重命名数据库对象。

重命名表

RENAME TABLE 旧表名 TO 新表名;

**截断(TRUNCATE)**用于快速删除表中的所有数据,但保留表结构。

TRUNCATE TABLE 表名;

DDL 的特点

**自动提交,**DDL 语句在执行后会自动提交(Auto-Commit),无法通过事务回滚。因此,在执行 DDL 操作时需要格外谨慎。

影响数据库结构,DDL 直接影响数据库的结构和定义,而不仅仅是数据内容。

权限控制,执行 DDL 操作通常需要更高的数据库权限,普通用户可能无法执行某些 DDL 语句。

使用 DDL 的注意事项

备份数据,在执行可能影响数据的 DDL 操作(如 DROP、ALTER)之前,务必备份数据。

影响范围,了解 DDL 操作的影响范围,避免对生产环境造成不必要的影响。

事务管理,由于 DDL 语句会自动提交,需要在事务处理中慎重使用。

实际应用示例

创建一个名为employees的表

CREATE TABLE employees (
employee_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
email VARCHAR(100),
hire_date DATE
);

employees表中添加一个新的列salary

ALTER TABLE employees ADD COLUMN salary DECIMAL(10, 2);

删除employees

DROP TABLE employees;

DDL 是数据库管理中的基础部分,负责定义和管理数据库的结构

Git 批量仓库提交者信息

· 阅读需 2 分钟
素明诚
Full stack development

使用 git filter-branch 来修改提交者信息

打开终端在你的 Git 项目的根目录中打开命令行工具。

执行git filter-branch命令确保你的命令结构正确无误。下面是命令的完整形式,注意确保在你的 shell 中正确处理引号

git filter-branch --env-filter '
GIT_AUTHOR_NAME="sumingcheng"
GIT_AUTHOR_EMAIL="cjwdyzdyplxjg@gmail.com"
GIT_COMMITTER_NAME="sumingcheng"
GIT_COMMITTER_EMAIL="cjwdyzdyplxjg@gmail.com"
' --tag-name-filter cat -- --branches --tags

这个命令的部分,--env-filter 是用来设置新的环境变量,改变作者和提交者的姓名和邮箱。

查看输出在执行过程中,git filter-branch会输出处理的信息,包括每个被重写的提交。注意观察是否有任何错误信息或警告。

确认变更

在使用了git filter-branch命令之后,你可以使用以下命令来检查历史是否已经改变

git log --pretty=format:"%H %an %ae"

这个命令会列出所有提交的哈希值、作者名称和电子邮件地址,你可以通过这个输出确认信息是否已经更新。

常见问题

命令语法错误在某些 shell 环境下,命令的引号和空格可能需要特别注意。确保命令中的空格和引号都正确无误。

缓存问题有时候,Git 的一些客户端或者 GUI 工具会缓存旧的提交信息。尝试在命令行工具中直接查看提交历史,或者重启你的 Git 客户端。

分支保护如果你在使用某些托管服务(如 GitHub),请检查是否有分支保护规则阻止了历史的改变。

推送更改

如果本地的更改是正确的,而你想要将这些更改推送到远程仓库,你需要使用强制推送来覆盖远程的提交历史

git push origin --force --all
git push origin --force --tags

这将更新所有分支和标签的远程副本。

备份

在执行这类破坏性操作之前,总是好的做法备份你的仓库。如果事情出现意外,你可以使用备份来恢复原状。你可以简单地克隆整个仓库到另一个位置作为备份。

Linux 全方面配置 Bash 提升体验

· 阅读需 3 分钟
素明诚
Full stack development

配置 Bash 提示符(PS1)

编辑你的 .bashrc 文件来自定义命令行提示符,添加颜色和信息使其更有用

nano ~/.bashrc

在 Bash 中,PS1 是环境变量之一,用来定义主命令提示符,即你在命令行界面看到的每条命令前的文本。PS1 可以定制化显示用户的名字、当前工作目录、主机名等信息,还可以添加颜色,使得命令行界面更加直观和易用。

PS1 变量的组成

PS1 的设置可以包括纯文本和一些特殊的转义字符,这些转义字符用于插入动态信息,如下所示:

  • \u:显示当前用户的用户名。
  • \h:显示机器的主机名,但不包括域名。
  • \w:显示当前工作目录的完整路径。
  • \W:只显示当前工作目录的基础名称。
  • \d:显示日期。
  • \t:显示当前时间(24 小时格式)。
  • \n:新行。
  • \e:转义字符(用于添加颜色或其他控制代码)。

颜色代码

PS1 中添加颜色,通常使用 ANSI 转义序列来定义。

  • \[\033[01;32m\]:绿色
  • \[\033[01;34m\]:蓝色
  • \[\033[00m\]:重置颜色(结束颜色代码)

安装和配置 bash-completion

安装 bash-completion 增强命令补全

sudo apt-get install bash-completion

确保 .bashrc.bash_profile 包含以下行以启用它

if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
. /etc/bash_completion
fi

别名和函数

.bashrc 中定义常用命令的别名和函数,这些简短的别名可以提高日常工作的效率。

alias ll='ls -lah'
alias gs='git status'
alias df='df -h'

安装 Bash 框架

安装像 Bash-it 或 Oh My Bash 这样的框架,通常你只需要选择并安装其中一个。这是因为这两个框架的功能相似。

https://github.com/Bash-it/bash-it

git clone --depth=1 https://github.com/Bash-it/bash-it.git ~/.bash_it
~/.bash_it/install.sh

https://github.com/ohmybash/oh-my-bash 推荐

注意, Oh My Bash 所要求的最低版本(Bash 3.2)

bash -c "$(curl -fsSL https://raw.githubusercontent.com/ohmybash/oh-my-bash/master/tools/install.sh)"

这些框架提供了丰富的主题、插件和工具,让你的 Bash 更加强大和易用。

查看支持主题

ls ~/.oh-my-bash/themes/

找到你喜欢主题后,修改~/.bashrc,找到OSH_THEME="agnoster"我设置主题为agnoster

命令历史配置

配置 Bash 历史记录,增加存储的命令数量并忽略重复项,忽略重复项这个一定要配置,总有ll狂魔。

echo 'HISTSIZE=5000' >> ~/.bashrc
echo 'HISTFILESIZE=10000' >> ~/.bashrc
echo 'HISTCONTROL=ignoreboth:erasedups' >> ~/.bashrc

安全性增强

对敏感操作进行别名设置以增加安全性警告

alias rm='rm -i'

重新加载配置

保存所有更改后,运行以下命令来重新加载 .bashrc 配置

source ~/.bashrc

Ubuntu 上安装和配置 Docker

· 阅读需 2 分钟
素明诚
Full stack development

一、更新软件源

备份现有的 sources.list 文件并替换为清华大学的镜像源

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

sudo tee /etc/apt/sources.list > /dev/null <<EOL
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
EOL

echo "已备份原始 sources.list 文件为 sources.list.bak,并写入新的 sources.list。"

sudo apt-get update

二、安装必要依赖

sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release

三、添加 Docker 的 GPG 密钥和仓库

sudo install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

sudo chmod a+r /etc/apt/keyrings/docker.gpg

echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update

四、安装 Docker

sudo apt-get install -y docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin

五、验证安装

docker info

如果安装成功,您将看到 Docker 的详细信息。

六、配置 Docker 日志和其他选项

创建或修改 /etc/docker/daemon.json 文件

sudo tee /etc/docker/daemon.json > /dev/null <<EOF
{
"insecure-registries": ["0.0.0.0/0"],
"live-restore": true,
"log-driver": "json-file",
"log-opts": {
"max-size": "50m",
"max-file": "3"
},
"default-address-pools": [
{
"base": "172.30.0.0/16",
"size": 24
},
{
"base": "172.31.0.0/16",
"size": 24
}
]
}
EOF

重新加载并重启 Docker 服务

sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker

再次验证

docker info

确保配置已生效。

七、安装 Docker Compose

sudo wget https://github.com/docker/compose/releases/download/v2.27.2/docker-compose-linux-x86_64 \
-O /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

八、更新 Hosts 文件

echo -e "59.151.19.44\tmodel.vnet.com\n172.22.220.40\tmodel.vnet.com" | sudo tee -a /etc/hosts

这样就完成了 Docker 的安装和基本配置。