一站式环境配置
配置万千
🤔 配置新系统
1. 用户相关
# 1. 修改 root 密码
sudo passwd
# 2. 创建新用户(adduser有交互;用useradd没有)
su root
## 2.1 用useradd
useradd [newuser]
passwd [newuser]
useradd -d /home/[newuser] [newuser]
## 2.2 用adduser
adduser [newuser]
# 3. 设置 sudo 权限
## 3.1 更改文件
sudo vim /etc/sudoers/[newuser]
[newuser] ALL=(ALL) NOPASSWD: ALL
# 4. 更改名字
sudo vim /etc/hostname
2. 网络相关
2.1 ssh
# 初始化rsa密钥
ssh-keygen -t rsa # 三次回车(创建私钥,公钥)
# hostname自然是你想去登录的,别的主机名
ssh-copy-id hostname
# 取消哈希已知hosts,不然后面删除的时候认不出来了
sudo vim /etc/ssh/ssh_config
- HashKnownHosts no
# 如果出现 Permission denied (publickey) 记得检查这两项,取消其注释!
sudo vim /etc/ssh/sshd_config
- PubkeyAuthentication yes
- PasswordAuthentication yes
# 重启sshd服务
sudo systemctl stop sshd
sudo systemctl start sshd
sudo systemctl status sshd
3. 安装
sudo
sudo apt install build-essential gdb git cmake openjdk-11-jdk maven python -y
🐱 系统配置
1 网络
1.1 防火墙与 iptables
# 备份 iptables
iptables-save > /etc/iptables.rules
# 恢复
iptables-restore < /etc/iptables.rules
🐂 其它备忘
1. wsl-gdb 修改
如果是【wsl,ubuntu22.04,gdb12.1】也可以直接下载我修改好的替换/usr/bin/gdb 🔗gdb12.1
WSL 中的gdb不能用,对其进行一定的修改:参考这里,以及这里
首先定位到 wsl 中 gdb的位置(我这时 gdb 版本是 12.1),然后 explorer.exe .
,将 gdb 复制出来
然后利用反汇编工具 IDA 打开 wsl 的gdb,用Search-for-text (左上角一个小望远镜带个T) 搜索 linux_proc_xfer_memory_partial
,看它的 function 地址(使用 text-view)
然后定位到 function 地址查看这函数的汇编码
前面一堆堆栈处理不用管,找一条指令叫 cmp esi 1
,然后jz short loc_xxxxxx
,即发现内存不存在就跳转到错误处理去了。记住 jz
指令的地址:0x335C7D
回到 WSL,运行:(注意用你上面的地址替换掉XXX部分)
echo -ne '\x90\x90' | sudo dd of=/usr/bin/gdb seek=$((0xXXX)) bs=1 count=2 conv=notrunc
然后运行 gdb 打断点调试一个你的文件,跟着走即可正常运行。
让上面的设置永久生效只需:
vim .gdbinit
# 写入:set debuginfod enabled on
2. 各种换源
2.1 ubuntu 换源
源就在 /etc/apt/sources.list
文件里面写着。备份一下,重写文件,然后 sudo apt update
就好了
-
不同 ubuntu 版本之间,区别就在一个小动物上(就是默认桌面的壁纸),改个名字就好了
-
Ubuntu 22.04:jammy
-
Ubuntu 20.04:focal
-
Ubuntu 18.04:bionic
-
Ubuntu 16.04:xenial
-
-
默认注释了代码源以提高速度,注释了预发布软件源(可能不稳定),如有需要可以取消注释。
-
建议将所有常用镜像源保存在
/etc/apt/
目录下,并命名为类似source.list.aliyun
的形式,需要使用时直接复制替换source.list
文件即可。(国内镜像源)
# 中科大源
deb https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
## Pre-released source, not recommended.
# deb https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
2.2 pip 换源
# USTC
pip config set global.index-url https://pypi.mirrors.ustc.edu.cn/simple/
# 阿里云 https://mirrors.aliyun.com/pypi/simple/
# 科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
# 豆瓣(douban) https://pypi.douban.com/simple/
# 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
# 中国科学技术大学 https://pypi.mirrors.ustc.edu.cn/simple/
2.3 npm 换源
npm config get registry # 查看当前源地址
# 临时使用
npm install [xxx] --registry https://registry.npm.taobao.org
# 永久更换
npm config set registry https://registry.npm.taobao.org # 淘宝
npm config set registry https://mirrors.huaweicloud.com/repository/npm # 华为
3. 云服务器
3.1 安全组
3.2 对象存储
🐶 糊口家伙儿
1 vscode
code-runner
:在settings.json
中,可以在当前工作目录下重写一部分,比如对 C++ 文件,单独指定编译命令-lpthread -lhiredis -D _DEBUG
等等 。可以通过ctrl p
打开设置然后搜索 code runner 找到
2 redis
2.1 安装
# 只有这一个版本,就是最新的,不用点进去看了
wget http://download.redis.io/redis-stable.tar.gz && tar xzf redis-stable.tar.gz
cd redis-stable
make -j4
make test # 电脑可能会很吵,不知道它受不受得鸟。一般情况下是不用test的
sudo make install # 把可执行文件拷贝到 /usr/local/bin 目录下
2.2 运行
# 启动服务,可以选择加上你的配置文件
redis-server [{directory}/redis.conf]
# 停止服务
redis-cli shutdown
# 启动命令行
redis-cli -h [hostname] -p [port] -a [passwd]
# 可以 --no-auth-warning,或者不加 -a,进去之后写密码
auth [passwd]
# 修改设置
CONFIG SET/GET loglevel warning
CONFIG SET requirepass ''
2.3 配置
(1)配置文件:
初始在redis-stable/redis.conf
(rw-rw-r--664),可以给它拷贝到~/.redis/
,然后修改的有:
daemonize yes # 以守护进程形式启动
port 6379 # 端口号,默认是 6379
appendonly yes # 打开 AOF 持久化(默认RDB也是打开的)
dir {~/.redis/6379} # 放置持久化文件的位置 rwxrwxr-x 775
logfile {.redis/redis.log} # 日志文件 rw-rw-rw- 666
# 允许远程lian'jie
bind 0.0.0.0 # 任意主机连接
protected-mode no # 关闭保护模式
(2)设置开机自启
初始有一个脚本:redis-stable/utils/redis_init_script
,把它放到 /etc/init.d/
目录下,而后
# 先备份一下,别等下删了 cp ./utils/redis_init_script ~/.redis/
sudo cp ./utils/redis_init_script /etc/init.d/
# chmod 774 /etc/init.d/redis_init_script
sudo update-rc.d redis_init_script defaults
(3)常见错误
-
(error) ERR Errors trying to SHUTDOWN. Check logs
- 主要检查:持久化文件路径和日志文件路径的权限,最起码当前用户要有读写权限。特别是设置在系统目录的时候。(如果设置在
etc var
等目录,除非把这些目录设为可写,不然好像一直退出不了,所以我建议在home路径下设置这两个)
- 主要检查:持久化文件路径和日志文件路径的权限,最起码当前用户要有读写权限。特别是设置在系统目录的时候。(如果设置在
-
Could not connect to Redis at 127.0.0.1:6379: Connection refused
- 笨蛋,快看看是不是已经停止掉redis服务了,还想着
redis-cli shutdown
呢?😄
- 笨蛋,快看看是不是已经停止掉redis服务了,还想着
-
不能远程连接
-
检查下
redis.conf
,看看bind
的是谁 -
试试
telnet
,看是不是端口没放通
-
2.4 使用
python 连接
pip install redis
import redis
r = redis.StrictRedis(host='127.0.0.1', port=6379, db=0)
r.set('foo', 'bar') # True
r.get('foo') # 'bar'
# 哈希表
r.hmset('dict', {'name': 'Bob'})
people = r.hgetall('dict')
print people # {'name': 'Bob'}
# 事务与管道
pipe = r.pipeline()
pipe.set('foo', 'bar')
pipe.get('foo')
result = pipe.execute()
print result # [True, 'bar']
# 管道
pipe = r.pipeline(transaction=False)
result = r.pipeline().set('foo', 'bar').get('foo').execute()
# [True, 'bar']
C++ 连接
hredis
git clone https://github.com/redis/hiredis
cd hiredis
make -j4
sudo make install #仍然是复制可执行文件
sudo ldconfig /usr/local/lib # 更新链接库缓存
g++ redis.cc -lhiredis -o myredisclient # 记得指定库文件
/* 示例代码
#include <hiredis/hiredis.h>
redisConnect(...);
redisCommand(...);
*/
#include <iostream>
#include <hiredis/hiredis.h>
const char *AUTH_KEYS = "shuaikaisredis";
int main()
{
// 连接到 Redis 服务器
redisContext *c = redisConnect("43.139.137.123", 6379);
if (c->err)
{
std::cout << "连接失败: " << c->errstr << std::endl;
return -1;
}
std::cout << "连接成功" << std::endl;
// 使用密码进行身份验证
redisReply *reply = (redisReply *)redisCommand(c, "AUTH %s", AUTH_KEYS);
if (reply->type == REDIS_REPLY_ERROR)
{
std::cout << "身份验证失败: " << reply->str << std::endl;
freeReplyObject(reply);
redisFree(c);
return -1;
}
std::cout << "身份验证成功" << std::endl;
freeReplyObject(reply);
// 列出所有的键值
reply = (redisReply *)redisCommand(c, "KEYS *");
if (reply->type == REDIS_REPLY_ARRAY)
{
for (int i = 0; i < reply->elements; i++)
{
std::cout << "key: " << reply->element[i]->str << std::endl;
}
}
freeReplyObject(reply);
// 获取某一键的值
const char *key2get = "name";
reply = (redisReply *)redisCommand(c, "GET %s", key2get);
if (reply->type == REDIS_REPLY_STRING)
{
printf("%s: %s\n", key2get, reply->str);
}
else
{
printf("There is NO %s EXITS!\n", key2get);
}
freeReplyObject(reply);
// 设置一个新的键值对
const char *key1 = "editor";
const char *value1 = "vscode";
reply = (redisReply *)redisCommand(c, "SET %s %s", key1, value1);
std::cout << "RESULT: " << reply->str << std::endl;
freeReplyObject(reply);
// 断开连接
redisFree(c);
return 0;
}
3 docker
3.1 安装
官方脚本快速安装
# 安装
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
# 启动
sudo systemctl enable docker
sudo systemctl start docker
# 创建用户组并添加当前用户,否则可能会 Permission Deny
sudo groupadd docker
sudo usermod -aG docker shuaikai
# 配置镜像加速
sudo vim /etc/docker/daemon.json
# 写入如下配置
{
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
]
}
# 重启服务,并查看是否配置成功
sudo systemctl daemon-reload
sudo systemctl restart docker
docker info | tail -5
# 如果这里显示权限不够:
## 首先检查一下你的用户是否在docker用户组中
groups
gropus [shuaikai]
## 如果两条命令显示不一致(后者显示你已经在docker组里面了),则需要退出重连一下
3.2 常用指令
# 列出所有镜像
docker images
# 列出所有的容器
docker container ls -a
docker ps -a
# pull 下载镜像
## docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
docker pull ubuntu:18.04
# 从镜像创建一个容器并运行
docker run -it --rm --hostname {hostname} ubuntu:18.04 bash
## -i 交互操作; -t 终端; --rm 容器退出之后将其删除; ubuntu:18.04 启动容器的基础镜像
## bash 启动容器后运行的命令,因为是想要一个终端
# 启动一个停止的容器
docker start [id/name]
docker attach [id/name]
# 进入一个容器,且exit不会导致容器退出的方法
docker exec -it [kkdocker01] bash
# 删除一个/所有已终止的容器
docker rm [id/name]
docker container prune
# 向容器传递内容
docker cp {local_path} <dockerid>:{docker_path}
# 查看整个docker占用的磁盘空间详细信息
docker system df -v
# 网络:映射本地端口到docker的端口,从而实现外部访问docker
# 导入导出:将容器打包成tar文件导出,也可从别的方式导入容器
3.3 docker - redis
docker run -p 6379:6379 --name redis1 -v /opt/docker_redis/redis.conf:/etc/redis/redis.conf -v /opt/docker_redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes --requirepass 123456
# 命令说明 # -p 6379:6379 端口映射:前面表示主机的端口,后面表示容器的端口。
# --name redis01 指定该容器名称,查看和进行操作都比较方便。
# -v 挂载文件或目录 :前表示主机部分,:后表示容器部分。
# -d redis 表示后台启动redis
# redis-server /etc/redis/redis.conf 以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录/usr/local/docker/redis.conf
# --appendonly yes 开启redis 持久化
# --requirepass 123456 设置密码为123456
#
# 进入: docker exec -it redis /bin/bash
# redis-cli -p 6379
# 获取密码:config get requirepass
# 输入密码: auth 123456
🏇 消遣玩意儿
1 wox
插件:
- [][Plugin Detail (wox.one)]directory,查词翻译,
!t, !d, !e
- 自带的一些,比如查文件夹,查书签,显示十六进制颜色,进制转换等
- 可以是everything的关键词查找,如果采用glob匹配,则注意匹配全名
2 typora
(1) 设置自动上传阿里云图床
图片\(\Rarr\)上传服务设定:选择 PicGo-Core(command line)
,没下载的记得下载。使用方法参考 Upload Images - Typora Support 和 PicGo-Core
然后申请你的阿里☁️腾讯云这云那云的,更新配置文件(在 C:\Users\[username]\.picgo\
):
{
"picBed": {
"uploader": "aliyun", // 指定当前默认的图床为 aliyun,
"aliyun": {
"accessKeyId": "", //创建用户时生成的accessKeyId,替换为自己的
"accessKeySecret": "", //创建用户时生成的accessKeySecret,替换为自己的
"bucket": "shuaikai-bucket0001", // 存储空间名,也就是我们创建的Bucket的名字
"area": "oss-cn-shanghai", // 存储区域代号,课通过bucket概览查看,替换为自己的
"path": "blog_img/", // 自定义存储路径,一定要以"/"结尾!,根据自己需求修改
"customUrl": "", // 自定义域名,注意要加http://或者https:// ,根据自己实际情况修改
"options": "" // 针对图片的一些后缀处理参数 PicGo 2.2.0+ PicGo-Core 1.4.0+ 不用修改
}
},
"picgoPlugins": {}
}
(2) CSS已经备份,🤔 等待上传云上
3 sharpkeys
- 映射按键,下载解压版的就够了
4 snipaste
Alt + S
截图,Alt + Z
贴图, Ctrl + T 固定到屏幕上(直接点击就好),
和.
能在历史记录中移动,历史记录保存着整个屏幕1 2 3 4
可以对贴图进行旋转以及镜像。如果想要看一部分镜像的样子,这或许很有用- 双击左键关闭贴图,对贴图 shift+左键双击:得到缩略图, 鼠标中间单击:从缩略图恢复原样
- shift+上下左右/WASD:以像素为单位缩小截图区域;ctrl + 上下左右/WASD:放大
5 nginx
-
sudo apt install nginx
-
sudo systemctl status nginx
-
配置文件在
sudo vim /etc/nginx/nginx.conf
中 (🔗Nginx配置文件详解) -
在
http{}
里面添加上server{...}
user shuaikai; ... server { listen 80; server_name xxx.xxx.xxx.xxx; root /home/shuaikai/web/; index index.html; access_log /home/shuaikai/web/log/kkcloud.access.log; error_log /home/shuaikai/web/log/kkcloud.error.log; }
-
nginx -t
测试配置文件有没有毛病
6 lazyvim
# 1. 首先安装最新版neovim
curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim-linux64.tar.gz
sudo rm -rf /opt/nvim
sudo tar -C /opt -xzf nvim-linux64.tar.gz
export PATH="$PATH:/opt/nvim-linux64/bin"
# 2. 安装 Lazyvim
## 可以选择备份一下 (这里用了bash的大括号扩展语法)
mv ~/.config/nvim{,.bak}
mv ~/.local/share/nvim{,.bak}
mv ~/.local/state/nvim{,.bak}
mv ~/.cache/nvim{,.bak}
git clone https://github.com/LazyVim/starter ~/.config/nvim
rm -rf ~/.config/nvim/.git
# 3. 启动neovim,让lazyvim自动下载
nvim
## 这时候,Mason可能会有一些lsp下载不下来。主要原因是系统没有相关环境,安装上即可
## 3.1 安装node,有些插件需要npm
wget https://nodejs.org/dist/v22.3.0/node-v22.3.0-linux-x64.tar.xz
sudo tar -C /opt -xJf node-v22.3.0-linux-x64.tar.xz
export PATH="$PATH:/opt/node-v22.3.0-linux-x64/bin"
## 3.2 安装go
wget https://go.dev/dl/go1.22.4.linux-amd64.tar.gz
sudo tar -C /opt -xzf go1.22.4.linux-amd64.tar.gz
export PATH="$PATH:/opt/go/bin"
### 注意 go 还要配置一下国内源
go env -w GO111MODULE=auto
go env -w GOPROXY=https://goproxy.cn,direct
## 3.3 安装 rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
## 3.5 安装 ruff(一个号称最快的python检查工具,类似pylint,但是更快)
### 有pip直接用pip,如果是debain12,可以使用pipx
sudo apt install pipx
pipx install ruff
## 3.6 一般情况下,我都会准备好C/C++/clangd等内容,所以不会缺
# 4. 其他可选项,如lazygit,tmux,剪切板支持等
## LazyGit: https://github.com/jesseduffield/lazygit/releases
## Tmux: sudo apt install tmux -y
自定义配置可以参考 lazyvim配置文件参考
🐔 奇技淫巧
1 windows 技巧
Systeminfo.exe
查看系统信息,包括基本信息、BIOS 版本、网卡、Hyper-V 等