Arch Linux以其滚动更新和极简主义而闻名,它会持续接收软件包更新,始终保持最新状态,这非常符合我的口味。而且安装和配置Arch Linux的过程本身就是一个学习和巩固Linux系统的好机会,因为从分区、文件系统设置到系统配置,都需要用户亲自动手。此外还有强大的社区支持,Arch Linux强调用户参与和贡献,其社区活跃且乐于助人,同时保持了一种独立自由的精神,不受商业利益的过多影响。
平时主要还是使用VPS,所以我就开始研究怎么在VPS上安装Arch Linux。网上虽然有相关的教程,但不多,内容也不尽人意,于是我便开始自己研究和折腾。因为有一定的Linux基础,折腾起来也不是特别费劲,最后总结出3种实测可行的安装方式(踩了不少坑):
根据内存等因素划分:
内存1.5GB以上、商家提供VNC
云服务器/VPS 安装Arch Linux (一)
内存512MB以上、商家提供VNC
云服务器/VPS 安装Arch Linux (二)
内存300-512MB的机器、商家不提供VNC控制台、商家VNC坏了
云服务器/VPS 安装Arch Linux (三) ...
BBRv3 GitHub地址: https://github.com/google/bbr/tree/v3整个过程和之前那篇编译内核有点相似配置要求:2核2GB内存以上,硬盘空间大于20GB
本次用于编译的主机配置 Processor : AMD Ryzen 7 7700X 8-Core Processor CPU cores : 2 @ 4491.560 MHz AES-NI : ✔ Enabled VM-x/AMD-V : ✔ Enabled RAM : 1.9 GiB Swap : 1024.0 MiB Disk : 28.5 GiB Distro : Debian GNU/Linux 11 (bullseye)购买链接安装依赖1apt install git build-essential libncurses-dev libssl-dev libelf-dev bison bc flex rsync debhelper screen vim -y
...
服务器商家提供的系统镜像虽然方便,但是其中总是包含多余的东西,我比较喜欢干净的系统,每次拿到新机器后都会进VNC控制台手动安装系统。但是手动执行系统比较费时费力,一台还好,但是我的服务器很多,一台一台地弄太慢了,把自己整的很烦躁。因此,我决定尝试使用自动化脚本来简化这一过程,提高效率。在服务器管理和运维领域,自动化脚本是节省时间和提高效率的关键。现在正好放寒假,于是我利用空闲的时间深入研究了如何使用preseed.cfg自动化部署Debian系统
脚本已经写好:bash <(curl -sL https://sitao.org/myscripts/installDebian)可选择的系统:Debian 10, 11, 12在debain或者ubuntu上运行脚本,一般在十分钟内完成,机器性能好的话可能才五六分钟,期间可以打开vnc控制台查看进度
脚本设计1.检查权限: 脚本首先检查用户是否以 root 权限运行,以确保能够执行必要的系统操作。
2.选择版本: 脚本提示用户选择要安装的 Debian 版本,并根据用户的选择下载相应的 netboot 文件。
3.设置密码: 用户需要 ...
以3.12.4版本为例在root用户下进行
1.安装编译所需的依赖项1pacman -S gcc make pkg-config
2.下载并解压 Python 源代码123wget https://www.python.org/ftp/python/3.12.4/Python-3.12.4.tar.xztar -xvf Python-3.12.4.tar.xzcd Python-3.12.4/
3.配置编译选项运行 configure 脚本配置编译选项,这里我们启用优化并设置安装路径:
1./configure --enable-optimizations --prefix=/usr/local/python3
4.编译并安装 Python运行以下命令进行编译并安装 Python
1make -j$(nproc) && make install
5.更新环境变量为了在终端中能够直接使用新安装的 Python,需要将其路径添加到环境变量中。运行以下命令:
12echo "PATH=\$PATH:/usr/local/python3/bin" & ...
字符串连接123456#!/bin/bashstr1="Hello"str2="World"combined="$str1 $str2"echo $combined # 输出 "Hello World"
字符串比较可以使用=和!=来比较字符串:
12345678910#!/bin/bashstr1="Hello"str2="World"if [ "$str1" = "$str2" ]; then echo "Strings are equal"else echo "Strings are not equal"fi
获取字符串长度12345#!/bin/bashstr="Hello World"length=${#str}echo $length # 输出 11
子字符串提取可以使用${string ...
适用于: 内存300-512MB的机器、商家不提供VNC控制台、商家VNC坏了
我随便拿了一台机器进行演示,还是预装了Debian系统
预装其他系统也可以,我还是推荐Debian
准备工作1. 确定启动方式:传统BIOS还是UEFI?1ls /sys/firmware/efi
如果提示No such file or directory就是传统BIOS启动,否则就是UEFI
我这台机器是UEFI启动
2. 确定当前系统的根分区使用df -hT命令查看
可以看到根分区是/dev/vda1,即第一个硬盘的第一个分区
3.确定是DHCP还是静态IP执行ip addr查看网卡
如果活动网卡有dynamic字眼说明是DHCP,否则是静态IP
如果是静态IP,把ip地址,子网掩码以及网关记下来
我这台机器是DHCP
准备安装环境1234cd /tmpwget http://mirrors.edge.kernel.org/archlinux/iso/latest/archlinux-bootstrap-x86_64.tar.zstzstd -d archlinux-bootstrap-x86_ ...
适用于: 内存512MB以上的机器
我将使用一台512MB内存的机器进行演示,也是预装了Debian系统
预装其他系统也可以,我更推荐Debian
前言从上一篇文章可以知道,整个过程中主要用到的就是airootfs文件,它一般是.sfs格式的.
我们先看看官方ISO镜像中airootfs.sfs文件的大小:
793MB的airootfs.sfs复制到2GB的内存中,完全没问题,可是对于内存低于1GB的机器,强行把793MB的airootfs.sfs文件复制到内存中进程会被kill掉。所以我就想,airootfs.sfs文件的大小再小些不就可以复制进内存了吗?于是我用archiso工具自制了ISO镜像,将整个镜像大小控制到400MB左右(镜像不断更新中),其中airootfs.sfs才318MB,现在就可以复制进512MB的内存中了.
所以第二种方法的核心步骤就是自制ISO镜像了,你可以根据官方的文档来构建,但我更推荐直接用我自制的(能帮你省不少时间):
archlinux-sitao-x86_64.iso
准备工作1. 确定启动方式:传统BIOS还是UEFI?1ls /sys/fi ...
适用于: 内存1.5GB以上的机器
我在Vultr 开了一台2GB的机器进行演示,预装了Debian系统
预装其他系统也可以,我更推荐Debian
准备工作1. 确定启动方式:传统BIOS还是UEFI?1ls /sys/firmware/efi
如果提示No such file or directory就是传统BIOS启动,否则就是UEFI
我这台机器是UEFI启动
2. 确定当前系统的根分区使用df -hT命令查看
可以看到根分区是/dev/vda2,即第一个硬盘的第二个分区,在grub中表示为(hd0,2)
3.确定是DHCP还是静态IP执行ip addr查看网卡
如果活动网卡有dynamic字眼说明是DHCP,否则是静态IP
如果是静态IP,把ip地址,子网掩码以及网关记下来
我这台机器是DHCP
下载ISO镜像前往Linux镜像网站: mirrors.edge.kernel.org下载archlinux的ISO镜像文件这里以archlinux-2024.06.01-x86_64.iso为例
使用ssh工具连接你的VPS
12mkdir /iso && cd ...
计算机网络
未读TCP协议在负责端到端数据传输的过程中,其核心机制涉及到发送端和接收端的操作系统内存管理,具体包括用户空间(user space)与内核空间(kernel space)两部分。对于每一个TCP socket连接,在内核中都会配备一个发送缓冲区和一个接收缓冲区,TCP的全双工通信模式及流量控制、拥塞控制等特性正是基于这两个独立的缓冲区及其填充状态来实现的。
在TCP socket连接的两端,分别存在send和recv两个操作函数。例如,当客户端向服务器发送数据时,客户端进程会调用send函数,该函数的作用是将待发送的数据复制到socket在其内核中的发送缓冲区。值得注意的是,当send函数执行完毕并返回时,并不代表数据已经到达服务端;实际上,send函数仅完成了从应用层缓冲区到socket内核发送缓冲区的数据复制,数据的实际发送过程由TCP协议栈负责,而非send函数直接处理。
而在接收端,接收缓冲区用于暂存接收到的数据,直到应用程序调用recv函数进行读取为止。recv函数的主要职责是从内核缓冲区中复制数据到应用层用户指定的缓冲区,并返回已接收的数据量。若应用程序未及时调用recv读取 ...
首先安装专业版直达官网: https://www.jetbrains.com.cn/pycharm/download/?section=mac
下载激活工具点击下载这个压缩包: 激活.zip
进入下载目录,解压压缩包
用终端进入激活工具目录执行sh pycharm.sh
可以看见提示Success! Activate pycharm to 2099
验证打开PyCharm,查看About PyCharm
可以看到激活成功了