其他

md文档中图片格式调整

<div style="text-align:center;">
  <img src="图片链接" alt="描述文字" style="width:50%; height:auto;">
</div>

github信息查看

https://api.github.com/users/名字

命令行编译

假设项目结构如下:

project_folder/
    src/
        file1.c
        file2.c
    include/
        header.h

编译命令

gcc -c -I../include file1.c -o file1.o
gcc -c -I../include file2.c -o file2.o
gcc file1.o file2.o -o my_executable

对拍

https://www.cnblogs.com/EdisonBa/p/13509379.html

一段出题代码

#include<bits/stdc++.h>
using namespace std;
const int N=100000;
int main()
{
	srand(time(NULL));
	int T=10;
	for(int i=1;i<=10;i++){
		string output_file=to_string(i)+".in";
		freopen(output_file.c_str(),"w",stdout);
		int n,m;
//		if(i<=3)
//			n=10,m=((rand()<<15)+rand())%(n*n)+1;
		n=1000,m=((rand()<<15)+rand())%(5*n)+1;
//		else n=100000,m=((rand()<<15)+rand())%N+1;
		printf("%d %d\n",n,m);
		for(int i=0;i<m;i++){
			int x=((rand()<<15)+rand())%n+1;
			int y=((rand()<<15)+rand())%n+1;
			printf("%d %d",x,y);
			if(i==m-1);
			else printf("\n");
		}
	}
	return 0;
}

linux命令

  1. 用户
adduser -M -d /dev/null -s /sbin/nologin testuser

adduser:这是添加新用户的命令。

-M:不为用户创建主目录。这意味着在添加用户时,不会在默认的 /home 目录下创建 testuser 的主目录。

-d /dev/null:指定用户的主目录为 /dev/null。由于 /dev/null 是一个特殊的设备文件,可以丢弃所有写入它的数据,这意味着 testuser 没有实际的主目录。

-s /sbin/nologin:指定用户的登录 shell 为 /sbin/nologin。这会阻止用户通过常规方式登录到系统。尝试登录时,系统会显示一条信息,表明登录被禁止。

testuser:这是要添加的用户的用户名。

adduser -d /home/user01 -m user01

-m:创建用户的主目录。如果指定的主目录不存在,-m 选项将创建它。

 tail -n 1 /etc/passwd
passwd -l user01 命令用于锁定用户账号 user01。以下是该命令的详细解释:

-l:表示锁定用户账号(lock)。 user01:!$6$abcdefgh$wqe7r8yK3QH.DRTfEr1:19000:0:99999:7::: /etc/passwd最后一行会多一个感叹号

passwd -u user01 # 解除锁定
usermod -l user02 user01 # 修改用户名,更改用户名不会自动更改用户的主目录名称。若要同时更改用户的主目录名称,需要使用 -d 选项
usermod -l user02 -d /home/user02 -m user01
groupadd student 
# 组名:密码:组ID:组成员
# developers:x:1001:alice,bob,charlie
tail -n 1 /etc/group
useradd -g student -G developers,wheel user02
# 这个命令会创建一个名为 user02 的新用户,默认组(初始组)为 student,并且还属于 developers 和 wheel 这两个附加组。
gpasswd student
gpasswd -d user02 student
usermod -a -G developers,admins user02 # 将现有用户添加到一个或多个附加组中,并且保留用户之前所属的组。如果不使用 -a 选项,用户将被从原有的附加组中删除,只保留在新指定的附加组中。
/etc/passwd  
用户名:密码:UID:GID:用户信息:主目录:登录 shell  
user01:x:1001:1001::/home/user01:/bin/bash  

/etc/shadow  
用户名:密码:上次更改日期:最小间隔天数:最大间隔天数:警告天数:禁用天数:账号过期日期:保留字段  
user01:$6$abcdefg$....:19000:0:99999:7:::  

所有用户对passwd文件均可读取,只有root用户对shadow文件可读,因此密码存放在shadow文件中更安全。  

/etc/group
组名:密码:组ID:组成员
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog
users:x:100:alice,bob,charlie
developers:x:101:alice,bob

/etc/gshadow
组名:组密码:管理员:组成员
root:!:root:daemon
admins:!:alice,bob
users::alice,bob,charlie

配置代理

firefox - 设置 - 常规 - 网络设置

export https_proxy=http://xxx:7890
export http_proxy=http://xxx:7890
export all_proxy=socks5://xxx:7890
git config --global http.proxy http://xxx:7890
git config --global https.proxy http://xxx:7890

wsl突然打不开了,重启也没用

1.cmd下管理员权限执行netsh winsock reset
2.重启电脑
https://blog.csdn.net/qq_41048761/article/details/121420814

linux下apt install报错

APT 包管理器在下载软件包索引文件时出现了 Hash Sum Mismatch 错误。这通常是由于网络问题、镜像源不一致或缓存损坏导致的。

apt clean
rm -rf /var/lib/apt/lists/*
apt update

git在配置ssh key后出现如下错误:

ssh -T git@github.com
nc: connect to xxx.xxx.xxx.xxx port 7890 (tcp) failed: Connection refused
kex_exchange_identification: Connection closed by remote host
Connection closed by UNKNOWN port 65535

换端口

ssh -T -p 443 git@ssh.github.com

git clone失败

https://blog.csdn.net/qq_30252465/article/details/125762378

加大缓存

git config --global http.postBuffer 1024M

wsl2下git push失败

https://blog.csdn.net/PleaseBeStrong/article/details/139378481

# 删除原始origin
git remote remove origin
 
# 使用ssh
git remote add origin git@github.com:Charlesbibi/Simple_Cloud.git
 
# 正常push就没问题了
git push -u origin main

连接服务器容易掉线

https://blog.csdn.net/sanqima/article/details/118293157
https://blog.csdn.net/qq_39846820/article/details/103371782

在没有sudo权限的用户中使用git && 创建和使用容器

mkdir myssh1
cd myssh1
ssh-keygen -t ed25519 -C "xxxx@xxxxx.com" -f ./id_ed25519
# 将pub内容复制到github
ssh -i id_ed25519 git@github.com # 测试连接
mkdir -p ~/myssh1/configs/
vim ~/myssh1/configs/config_ssh
# config_ssh内容
# Host github.com
#     IdentityAgent none
#     IdentityFile ~/myssh1/id_ed25519
#     User git
alias git_ssh='GIT_SSH_COMMAND="ssh -F ~/myssh1/configs/config_ssh" git' # 设置别名
git_ssh clone git@github.com:xlite-dev/LeetCUDA.git # 克隆方式


# 新建的容器加上:
  -v ~/myssh1/id_ed25519:/root/.ssh/id_ed25519 \
  -e GIT_SSH_COMMAND='ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' \

# 如果是现有的容器
docker cp ~/myssh1/id_ed25519 fa:/root/.ssh/id_ed25519

完整流程

创建容器

docker create \
  --gpus all \
  --net=host \
  --runtime=nvidia \
  --shm-size="10g" \
  --cap-add=SYS_ADMIN \
  --cap-add=SYS_PTRACE \
  --security-opt seccomp=unconfined \
  --security-opt apparmor=unconfined \
  -v ~/mycode/fa:/root/fa \
  -v ~/myssh1/id_ed25519:/root/.ssh/id_ed25519 \
  -e GIT_SSH_COMMAND='ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' \
  --name fa \
  nvcr.io/nvidia/pytorch:24.08-py3 \
  sleep infinity
docker start fa
docker exec -it fa bash
# 删除容器
docker stop fa
docker rm fa

首次使用该容器:

# 设置权限
chmod 600 /root/.ssh/id_ed25519

# 测试连接 GitHub
ssh -i /root/.ssh/id_ed25519 -T git@github.com

git config --global user.name "YourName"
git config --global user.email "your_email@example.com"

# 现在可以使用
cd /root/fa
git clone git@github.com:xlite-dev/LeetCUDA.git

本地挂载到服务器

# Ubuntu/Debian 安装 sshfs
sudo apt-get install sshfs

# 创建本地挂载点
mkdir ~/remote_server_dir

# 挂载远程目录
sshfs user@server_ip:/remote/path ~/remote_server_dir

# 卸载
fusermount -u ~/remote_server_dir

定时备份服务器内容

#!/bin/bash

# 配置项
LOG_DIR="~/remote_backups/logs-3090-3"
KEEP_LOGS=3  # 保留最近3个日志文件

# 创建日志目录
mkdir -p "$LOG_DIR"

# 生成带时间戳的日志文件名
DATE=$(date +"%Y%m%d_%H%M%S")
LOGFILE="$LOG_DIR/backup_$DATE.log"

# 日志记录
exec > "$LOGFILE" 2>&1
echo "Backup started at $(date)"

# 锁机制
LOCKFILE="/tmp/backup.lock"
exec 200>$LOCKFILE
flock -n 200 || { echo "Backup already running"; exit 1; }

# 检查是否启用备份
ENABLE_FILE="~/scripts/backup_enabled"
if [ ! -f "$ENABLE_FILE" ]; then
    echo "Backup is disabled. To enable, create the file: $ENABLE_FILE"
    exit 0
fi

# 其他配置项
REMOTE_USER="..."
REMOTE_HOST="10.30.16.24"
REMOTE_DIR="~"
LOCAL_BACKUP_DIR="~/remote_backups/3090-3"
BACKUP_NAME="backup_$DATE-$(printf "%04d" $$).tar.gz"

# 创建备份目录
mkdir -p "$LOCAL_BACKUP_DIR"

# 同步远程数据
rsync -avz --delete -e ssh $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR $LOCAL_BACKUP_DIR/tmp_backup || { echo "rsync failed"; exit 1; }

# 打包压缩
cd "$LOCAL_BACKUP_DIR" || exit 1
tar -czf "$BACKUP_NAME" -C tmp_backup . || { echo "tar failed"; exit 1; }

# 清理临时目录
rm -rf "$LOCAL_BACKUP_DIR/tmp_backup"

# 保留最近3个备份文件
if ls "$LOCAL_BACKUP_DIR/backup_*.tar.gz" 1>/dev/null 2>&1; then
  ls -t "$LOCAL_BACKUP_DIR/backup_*.tar.gz" | tail -n +4 | xargs rm -f
fi

# 清理旧日志文件
find "$LOG_DIR" -name "backup_*.log" | sort | head -n -$KEEP_LOGS | xargs -r rm -f

echo "Backup completed at $(date)"
crontab -e
# 添加以下条目
# */30 * * * * .../server-backup.sh
Licensed under CC BY-NC-SA 4.0