2024-08-14



# 安装ZeroTier One
curl -s https://install.zerotier.com | sudo bash
 
# 启动ZeroTier服务
sudo systemctl start zerotier-one
 
# 开机自启动
sudo systemctl enable zerotier-one
 
# 加入ZeroTier网络,替换成你自己的网络ID
sudo zerotier-cli join YOUR_NETWORK_ID
 
# 配置防火墙允许ZeroTier通信
sudo ufw allow from 99.107.139.0/24 to any port 9993 comment 'ZeroTier'
 
# 重启防火墙
sudo ufw disable
sudo ufw enable
 
# 查看加入的网络状态
zerotier-cli status

这段代码展示了如何在Linux上安装和配置ZeroTier One,加入你的ZeroTier网络,并通过配置防火墙允许ZeroTier的通信,从而实现内网穿透。这里的IP地址范围99.107.139.0/24是ZeroTier官方IP池的一部分,根据实际情况可能会变化,请参照ZeroTier官方文档进行相应的修改。

2024-08-14



#!/bin/bash
 
# 检查磁盘空间并发送警告
check_disk_space() {
    local disk=$1
    local warning_threshold=$2
    local available=$(df -h $disk | grep -v Filesystem | awk '{print $4}')
    if [[ $available =~ ^[0-9]+[kKmMgGtT]?$ ]]; then
        available=${available%%[kKmMgGtT]*}
        if [ $available -lt $warning_threshold ]; then
            echo "警告: 磁盘空间不足于$disk"
            # 发送邮件或者其他通知方式
        fi
    fi
}
 
# 清理/tmp目录下的临时文件
clear_tmp() {
    local tmp_dir=$1
    find $tmp_dir -type f -exec rm -f {} \;
    find $tmp_dir -type d -exec rmdir {} \;
}
 
# 优化文件系统,回收inode
optimize_filesystem() {
    local fs=$1
    e2fsck -f $fs
    resize2fs $fs
}
 
# 主函数
main() {
    local disk="/dev/sda1"
    local warning_threshold=20G
    local tmp_dir="/tmp"
    local filesystem="/dev/sda3"
 
    check_disk_space $disk $warning_threshold
    clear_tmp $tmp_dir
    optimize_filesystem $filesystem
}
 
# 执行主函数
main

这段代码提供了一个简化的示例,用于检查磁盘空间、清理/tmp目录下的文件,并对文件系统进行inode优化。这是一个基本的脚本框架,可以根据实际需求进行功能扩展和错误处理。

2024-08-14

在Linux系统中,挂载数据盘或云盘通常涉及以下步骤:

  1. 确认新盘已经连接到系统并且可以通过lsblkfdisk -l命令看到。
  2. 对新盘进行分区,如果已经有分区可以跳过这步。
  3. 创建文件系统(格式化新分区)。
  4. 挂载新分区到指定的挂载点。

以下是一个简单的示例流程:




# 确认新盘
lsblk
 
# 对新盘进行分区,假设新盘是 /dev/sdb
sudo fdisk /dev/sdb
# 在fdisk提示下创建新分区
 
# 创建文件系统,例如创建一个ext4文件系统
sudo mkfs.ext4 /dev/sdb1
 
# 创建一个挂载点
sudo mkdir /mnt/mydatadisk
 
# 挂载新分区
sudo mount /dev/sdb1 /mnt/mydatadisk
 
# 为了让系统启动时自动挂载,需要将挂载信息添加到 /etc/fstab 文件
echo '/dev/sdb1 /mnt/mydatadisk ext4 defaults 0 2' | sudo tee -a /etc/fstab

请根据实际情况替换/dev/sdb/mnt/mydatadisk为你的数据盘设备名和想要挂载的目录。

2024-08-14

在Linux环境下,要查看.db文件(SQLite数据库文件),您可以使用sqlite3命令行工具。如果您的系统尚未安装sqlite3,您可以通过包管理器进行安装。

以下是使用sqlite3查看.db文件的基本步骤:

  1. 打开终端。
  2. 输入sqlite3命令,后跟您要查看的.db文件的路径。

例如,如果您的数据库文件名为example.db,位于当前目录下,您可以使用以下命令:




sqlite3 example.db

成功运行上述命令后,您将进入sqlite3的交互式环境。在这里,您可以运行SQL命令来查询数据库内容。

以下是一些基本的SQLite命令:

  • .tables:列出所有的表。
  • .schema:查看数据库的schema。
  • .exitCTRL+D:退出sqlite3

示例:




-- 列出所有表
.tables
 
-- 查看特定表的结构
SELECT * FROM table_name;
 
-- 退出sqlite3
.exit

请确保将table_name替换为您要查询的实际表名。如果数据库文件需要密码,您可以在打开数据库时使用-read参数指定包含密码的文件。

2024-08-14

在Linux中,进程可能有三种状态:运行(R)、休眠(S)、僵尸状态(Z)和停止(T)。但是,进程可能处于"不可中断的睡眠状态"(D),这不是官方的状态码,但是它确实可能出现在ps命令的输出中。

  1. 运行状态(R):进程在CPU的运行队列中正在运行,或者正在等待CPU服务。
  2. 休眠状态(S):进程被中止了,但是它的数据还在内存中。
  3. 僵尸状态(Z):进程已结束,但是父进程还没有读取到子进程的退出状态。
  4. 不可中断的睡眠状态(D):进程正在睡眠,并且是不可中断的。当进程持有一个锁时,通常会处于这种状态。

注意,"不可中断锁"(也称为tasklock)是Linux内核中的一种特殊锁,用于防止任务结构(task structure)被移动。当一个进程持有这个锁时,其他试图操作该进程的内核路径都会被阻塞,直到锁被释放。

处于D状态的进程通常是正在进行内核级操作,并且不应被打扰的进程。这包括等待I/O操作完成的进程,以及执行内核空间中的系统调用的进程。

如果你看到有进程处于D状态,并且你确定这些进程不应该处于这种状态,你可能需要调查为什么这些进程在持有不可中断锁。这可能是由于代码中的逻辑错误,例如长时间持有锁,或者是在不合适的上下文中进行了长时间的睡眠。

解决办法通常涉及分析导致进程长时间持有锁的原因,并在代码中修复问题。这可能涉及到修复一个死锁问题,或者重新设计锁的使用方式以减少锁的持有时间。

请注意,处理D状态的进程通常需要管理员权限,因为只有管理员可以强制结束处于不可中断状态的进程。在强制结束这些进程之前,你应该确保了解为什么这些进程会处于这种状态,并确保解决了根本问题。

2024-08-14

在Linux下,为了以sudoroot权限运行Visual Studio Code(VScode),你可以创建一个名为vscode-root.desktop的文件,并在其中指定运行VScode所需的命令。

以下是一个简单的vscode-root.desktop文件示例:




[Desktop Entry]
Name=Visual Studio Code (Root)
Comment=Rise Visual Studio Code
Exec=sudo code --no-sandbox
Icon=/usr/share/icons/hicolor/scalable/apps/code.svg
Terminal=false
Type=Application
Categories=TextEditor;Development;
StartupNotify=true

请注意,你需要将Exec行中的code替换为VScode的实际路径,如果你的VScode安装在非标准位置。

然后,将此文件保存在~/.local/share/applications//usr/share/applications/目录下,取决于你想要该快捷方式出现在哪个位置。

之后,你可以通过你的桌面环境或者使用命令行来启动Visual Studio Code(Root)。例如,如果你使用的是GNOME,你可以通过搜索或者在应用程序菜单中找到并启动它。

注意:使用sudo运行VScode可能会带来安全风险,因为sudo会提升VScode的权限,这可能会让恶意代码获取更高的权限。考虑到这一点,通常建议避免以sudoroot权限运行VScode。如果必须要以管理员权限运行,请确保你知道自己在做什么,并采取了相应的安全措施。

2024-08-14

在Linux系统中,动态库查找路径由环境变量LD_LIBRARY_PATH定义。这个环境变量包含一个或多个目录路径,系统会在这些目录中查找动态库。

设置LD_LIBRARY_PATH环境变量的方法如下:

临时设置(当前会话有效):




export LD_LIBRARY_PATH=/path/to/library:$LD_LIBRARY_PATH

永久设置(添加到用户的.bashrc.bash_profile文件中):




echo 'export LD_LIBRARY_PATH=/path/to/library:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

或者使用lib目录:




echo 'export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

注意:路径/path/to/library/usr/local/lib应替换为你需要添加的实际库路径。使用冒号:来分隔多个路径,并确保在已有的$LD_LIBRARY_PATH后追加新路径。

2024-08-14

在Linux中设置网络通常涉及编辑配置文件或使用命令行工具。以下是两种常用的方法:

  1. 编辑配置文件:

对于静态IP设置,你可能需要编辑/etc/network/interfaces(Debian或Ubuntu系统)或/etc/sysconfig/network-scripts/ifcfg-ethX(CentOS系统)文件。

例如,在Debian或Ubuntu系统中设置静态IP的/etc/network/interfaces文件可能看起来像这样:




auto eth0
iface eth0 inet static
address 192.168.1.10
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8 8.8.4.4

在CentOS系统中,你会编辑类似ifcfg-eth0的文件,内容如下:




DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.1.10
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4

保存文件后,你可能需要重启网络服务或者整个系统。

  1. 使用命令行工具:

对于临时或动态IP设置,你可以使用ifconfigip命令。

例如,使用ifconfig设置IP地址:




sudo ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up
sudo route add default gw 192.168.1.1 dev eth0

或者使用ip命令:




sudo ip addr add 192.168.1.10/24 dev eth0
sudo ip route add default via 192.168.1.1 dev eth0

设置DNS可以编辑/etc/resolv.conf




echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
echo "nameserver 8.8.4.4" | sudo tee -a /etc/resolv.conf

请注意,编辑/etc/resolv.conf可能会被NetworkManager或其他网络服务管理,因此在这种情况下,使用图形界面或相应的命令行工具(如nmcli)来设置DNS可能更安全。

对于更复杂的网络配置,你可能需要使用特定的图形界面工具或第三方网络管理工具。

2024-08-14

tail 是一个 Linux 命令行工具,用于输出文件中的尾部内容。这里提供一些常用的 tail 命令用法和参数。

基本用法:




tail filename # 显示文件的最后10行

参数用法:

  • -n:指定显示的行数,如 tail -n 20 filename 显示文件最后20行。
  • -f:实时跟踪文件的新增内容,常用于查看日志文件。

高级用法示例:




tail -f /var/log/syslog # 实时显示系统日志
tail -n +50 filename # 显示文件从第50行到文件末尾的内容
tail -c 10 filename # 显示文件最后10个字符

这些是 tail 命令的基本和高级用法,它们可以帮助用户快速查看和跟踪文件的更新。

2024-08-14

要安装指定版本的Node.js,你可以使用Node Version Manager(nvm)或Node Version Manager for Windows(nvm-windows)。以下是使用nvm在Unix系统(例如Linux或macOS)上安装旧版本Node.js的步骤:

  1. 安装nvm:



curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
# 或者使用wget:
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
  1. 关闭并重新打开终端或执行下面的命令以使nvm命令生效:



export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
  1. 安装指定版本的Node.js:



nvm install <version> # 例如:nvm install v10.16.0
  1. 使用特定版本的Node.js:



nvm use <version> # 例如:nvm use v10.16.0

对于Windows系统,你可以使用nvm-windows。步骤如下:

  1. 下载nvm-windows的安装程序:访问 nvm-windows releases 页面并下载最新的安装程序。
  2. 安装nvm-windows,按照安装向导的指示进行。
  3. 打开命令提示符或PowerShell。
  4. 使用以下命令安装旧版本的Node.js:



nvm install <version> # 例如:nvm install 10.16.0
  1. 使用特定版本的Node.js:



nvm use <version> # 例如:nvm use 10.16.0

请确保替换 <version> 为你想安装的Node.js版本号。