Linuc C 基础 (01)
Linux C 预备知识 特别项: nm [库文件或者可执行文件] #可查看库文件或可执行文件内含的函数。 ldd [可执行文件] #查看改程序用到的动态库的状态(是否找到动态库)。 重点: 结构体的对齐原则 ...
Linux C 预备知识 特别项: nm [库文件或者可执行文件] #可查看库文件或可执行文件内含的函数。 ldd [可执行文件] #查看改程序用到的动态库的状态(是否找到动态库)。 重点: 结构体的对齐原则 ...
Linux C 基础系统函数 *.补充 默认文件描述符 STDIN_FILENO #默认控制台输入文件描述符 STDOUT_FILENO #默认控制台输出文件描述符 STDERR_FILENO #默认控制台错误输出文件描述符 fd转FILE: fdopen函数 FILE转fd: fileno函数 1.C库函数IO函数 文件操作函数: fopen,fclose,fread…… FILE指针(结构体): 文件描述符(整型值,可以索引到磁盘上的文件) 文件读写指针位置(读写文件过程中指针的实际位置) I/O缓存区(内存地址,通过寻址找到对应的内存块,默认大小8kb,提高文件操作的效率,比如写入文件的时候先放到缓冲区)(缓冲区满、调用fflush、正常关闭退出程序时会写入到硬盘) 2.pcd和文件描述符 pcd控制块位于内核地址空间(3G-4G空间)中,包含了一个文件描述符的表(0-1023的数组,其中前三个一只处于占用状态,即标准输入输出和错误,没打开一个文件就占用一个文件描述符,会自动分配到编号考前的空闲位置) 3.虚拟地址空间(分配在硬盘上) ...
Linux C 进程线程 1.基本概念 1.1.程序和进程 程序: 一个可执行文件,不占用系统资源(cpu,内存。。。) 进程: 抽象概念,占用系统资源 程序相当于剧本,进程相当于戏(舞台、演员、灯光。。。) 1.2.并行 来回进行进程间切换达到看似并行的效果(通过硬件手段时钟中断实现) *.程序执行整个过程 ...
安装 Windows & MacOS 直接去 Github 上下载安装包 Ubuntu 1 sudo apt install barrier 设置 服务端设置 “设置服务端” 在里边新增屏幕,名字用客户端的设置名字(不能自己随便给,看客户端的设置里) 关闭SSL 防火墙允许端口 客户端设置 关闭ssl 设置服务端ip 常见问题 Ubuntu 无法启动,提示Wayland问题 日志告警:WARNING: cursor may not be visible 也用该方法解决 ...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 #!/bin/sh datastore_path=/vmfs/volumes/datastore1 template_name=CentOS-Base-250609 nts_template_path="$datastore_path/$template_name" new_path=$datastore_path/$1 if [ -d "$new_path" ]; then echo "exists vm : $1" exit 1 fi mkdir $new_path echo "clone vmdk..." vmkfstools -i $nts_template_path/$template_name.vmdk $new_path/$1.vmdk -d eagerzeroedthick echo "clone vmdk2..." vmkfstools -i $nts_template_path/${template_name}_1.vmdk $new_path/$1_1.vmdk -d zeroedthick echo "generate vmx..." cp $nts_template_path/$template_name.vmx $new_path/$1.vmx sed -i '/ethernet[0-9]\.generatedAddress/d' $new_path/$1.vmx sed -i '/annotation = "/d' $new_path/$1.vmx sed -i '/scsi[0-9]\.sasWWID = "/d' $new_path/$1.vmx sed -i '/sched\.swap\.derivedName = "/d' $new_path/$1.vmx sed -i '/migrate\.hostlog = "/d' $new_path/$1.vmx sed -i '/nvram = "/d' $new_path/$1.vmx sed -i '/vc\.uuid = "/d' $new_path/$1.vmx sed -i '/uuid\.location = "/d' $new_path/$1.vmx sed -i '/uuid\.bios = "/d' $new_path/$1.vmx sed -i "/displayName = \"/c\displayName = \"$1\"" $new_path/$1.vmx # custom disk file and ethernet sed -i "/scsi0:0\.fileName = \"/c\scsi0:0.fileName = \"$1.vmdk\"" $new_path/$1.vmx sed -i "/scsi0:1\.fileName = \"/c\scsi0:1.fileName = \"$1_1.vmdk\"" $new_path/$1.vmx if [ -n "$2" ]; then sed -i '/ethernet0\.addressType = "/c\ethernet0.addressType = "static"' $new_path/$1.vmx sed -i "/ethernet0\.address = \"/c\ethernet0.address = \"$2\"" $new_path/$1.vmx else sed -i '/ethernet0\.addressType = "/c\ethernet0.addressType = "generated"' $new_path/$1.vmx sed -i "/ethernet0\.address = \"/d" $new_path/$1.vmx fi echo "register vm..." vim-cmd solo/registervm $new_path/$1.vmx echo "over."
修改说明地址 https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/ mirror https://mirrors.tuna.tsinghua.edu.cn/ubuntu
Ubuntu win 双系统 时间 要解决 Ubuntu 与 Windows 双系统时间不同步,可以按照以下步骤操作: 打开终端,编辑 /etc/default/rcS 文件,将 “ UTC=yes ” 改成 “ UTC=no ”。 重启进入 Ubuntu 系统,设置好时间。 进入 Windows 系统即可解决时间问题1。或者,也可以在 Windows 系统中使用命令提示符输入 Reg add HKLMSYSTEMCurrentControlSetControl[&Time&]ZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1,然后重启进入 Ubuntu 系统 Ubuntu24 解决办法 由于ubuntu24弃用了hwclock,所以不能使用上述方法解决,需要使用如下解决: ...
1. 配置网卡 1 2 3 4 5 6 7 8 9 10 11 12 13 14 # 编辑网络配置文件 sudo vi /etc/sysconfig/network-scripts/ifcfg-ens1 # 内容如下(示例IP,根据实际情况修改): DEVICE=ens1 BOOTPROTO=dhcp # 或静态IP(需与物理网络同网段) ONBOOT=yes sudo vi /etc/sysconfig/network-scripts/ifcfg-ens2 # 内容如下: DEVICE=ens2 BOOTPROTO=static IPADDR=192.168.10.1 NETMASK=255.255.255.0 ONBOOT=yes 2. 启用IP转发 1 2 3 4 5 sudo vi /etc/sysctl.conf # 取消注释或添加: net.ipv4.ip_forward = 1 # 生效配置 sudo sysctl -p 3. 配置防火墙/NAT 1 2 3 4 5 # 使用firewalld配置 sudo firewall-cmd --permanent --zone=public --add-interface=ens1 sudo firewall-cmd --permanent --zone=internal --add-interface=ens2 sudo firewall-cmd --permanent --zone=public --add-masquerade sudo firewall-cmd --reload 或使用iptables(如果未使用firewalld) 1 2 3 4 5 6 # 或使用iptables(如果未使用firewalld) sudo iptables -t nat -A POSTROUTING -o ens1 -j MASQUERADE sudo iptables -A FORWARD -i ens2 -j ACCEPT # 保存规则(需安装iptables-services) sudo service iptables save sudo systemctl restart iptables DHCP服务 1 sudo yum install dhcp -y 配置dhcp 1 sudo vi /etc/dhcp/dhcpd.conf 1 2 3 4 5 6 7 8 9 10 11 12 # 定义DHCP全局选项(可选) option domain-name "internal.net"; option domain-name-servers 8.8.8.8, 8.8.4.4; # DNS服务器 default-lease-time 600; # 默认租约时间(秒) max-lease-time 7200; # 最大租约时间 # 定义子网段 subnet 192.168.10.0 netmask 255.255.255.0 { range 192.168.10.100 192.168.10.200; # 分配的IP范围 option routers 192.168.10.1; # 网关(指向虚拟机A的ens2) option subnet-mask 255.255.255.0; } 指定DHCP监听的接口 1 sudo vi /etc/sysconfig/dhcpd 1 DHCPDARGS="ens2" # 仅监听内部网络接口 启动DHCP服务并设置开机自启 1 2 sudo systemctl start dhcpd sudo systemctl enable dhcpd 防火墙放行DHCP流量 1 2 sudo firewall-cmd --permanent --add-service=dhcp sudo firewall-cmd --reload
https://www.cnblogs.com/aresxin/p/17864829.html 开启内核转发 1 2 3 4 5 6 7 8 # tail -6 /etc/sysctl.conf net.ipv4.ip_forward=1 net.ipv6.conf.all.forwarding=1 net.ipv4.conf.all.accept_redirects = 0 net.ipv6.conf.all.accept_redirects = 0 # sysctl -p ipsec.conf配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 # cat /etc/ipsec.conf config setup charondebug="ike 1, knl 1, cfg 0, net 1" strictcrlpolicy=no uniqueids=yes # 如果同一个用户在不同的设备上重复登录,yes 断开旧连接,创建新连接;no 保持旧连接,并发送通知; never 同 no, 但不发送通知. cachecrls=no conn ipsec-ikev2-vpn #XAUTH认证需要 auto=add # 当服务启动时, 应该如何处理这个连接项,add 添加到连接表中 compress=no # 是否启用压缩, yes 表示如果支持压缩会启用 type=tunnel keyexchange=ikev2 fragmentation=yes forceencaps=yes dpdaction=clear # 当意外断开后尝试的操作 dpddelay=300s # dpd时间间隔 rekey=no # 不自动重置密钥 left=%any # 服务器端标识,可以是魔术字 %any,表示从本地ip地址表中取 leftid=123.13.12.1 # 服务器端ID标识,这里为你的公网ip,或者@你的域名 leftcert=server.cert.pem # 服务器端证书 leftsendcert=always # 是否发送服务器证书到客户端 leftsubnet=0.0.0.0/0 right=%any # 客户端标识,%any表示任意 rightid=%any rightauth=eap-mschapv2 #KEv2 EAP(Username/Password) rightsourceip=192.168.137.0/24 # 客户端IP地址分配范围 rightdns=223.5.5.5,223.6.6.6 # DNS rightsendcert=never # 客户端不发送证书 eap_identity=%identity # 指定客户端eap id ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024! # 密钥交换协议加密算法列表,可以包括多个算法和协议。 esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1! # 数据传输协议加密算法列表,对于IKEv2,可以在包含相同类型的多个算法(由-分隔) conn xauth_psk #PSK认证需要 keyexchange=ikev2 # 使用 IKEv2 left=%defaultroute leftauth=psk # 服务器校验方式 leftsubnet=0.0.0.0/0 right=%any rightauth=psk rightsourceip=192.168.137.0/24 auto=add conn IKEv2-pubkey #RSA认证 # 服务器端根证书 DN 名称 leftca="CN=ares" # 服务器证书,可以是 PEM 或 DER 格式 leftcert=server.cert.pem # 不指定客户端证书路径 # rightcert = <path> # 指定服务器证书的公钥 leftsigkey=server.pub.pem # rightsigkey = <raw public key> | <path to public key> # 是否发送服务器证书到客户端 leftsendcert=always # 客户端不发送证书 rightsendcert=never # 服务端认证方法,使用证书 leftauth=pubkey # 客户端认证使用 EAP 扩展认证,貌似 eap-mschapv2 比较通用 rightauth=eap-mschapv2 # 服务端 ID,可以任意指定,默认为服务器证书的 subject,还可以是魔术字 %any,表示什么都行 leftid=%any # 客户端 id,任意 rightid=%any
一、虚拟机A(Ubuntu 20)配置 1. 安装WireGuard 1 2 sudo apt update sudo apt install wireguard resolvconf # 安装WireGuard和DNS工具(如需) 2. 生成服务器密钥对 1 2 3 # 生成私钥和公钥 sudo umask 077 # 确保密钥文件权限安全 sudo wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key 3. 配置WireGuard服务端 创建配置文件 /etc/wireguard/wg0.conf: ...