基本环境
约 932 个字 91 行代码 预计阅读时间 4 分钟
1 升级 Ubuntu 系统
以 20.04 => 22.04 为例
-
保持 SSH 会话活跃
-
启用 screen 服务
-
修改配置
/etc/ssh/sshd_config,追加以下内容 -
重启 SSH 守护进程
-
-
升级软件、安装依赖
-
编辑
/etc/update-manager/release-upgrades,确保以下字段设置 -
开始升级
Azure 升级完之后会丢掉公钥,得用密码登录后重新传一遍
2 SSH
连接简化
还在为连接服务器得输入一长串 username / host / port 信息而烦恼吗?
请去霍霍 ~/.ssh/config 这个文件,如果没有的话就 touch 一个出来
Host [HostAlias] # 用于 ssh HostAlias 简化连接
HostName [IP / URL]
User [UserName]
Port [PortNum] # 非默认端口时需要配置
IdentityFile [path2privateKey] # 存在多个私钥时,指定私钥
现在,你可以用通过 ssh [HostAlias] 命令进行一键连接了
WARNING
在使用 SSH 连接时出现以下 WARNING 信息:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:[一串 SHA 256].
Please contact your system administrator.
Add correct host key in path/to/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in path/to/.ssh/known_hosts:[rowIndex]
Host key for [IP]:port has changed and you have requested strict checking.
Host key verification failed.
-
解释:待连接主机
[IP]:port的密钥发生变化(可能是由于系统重装),SSH 出于安全考虑会默认拒绝连接 -
修复:根据提示删除
known_host文件中的对应行并重新连接,此时 SSH 会显示该主机的新密钥、确认无误后输入yes即可
目测有
ssh-ed25519和endsa-sha2-nistp256两行、都需要删掉
3 查看存储占用
-
所有文件
-
磁盘使用情况
df -h -
剩余磁盘空间
df -hl
-
-
当前路径
-
占用内存的总量
du -sh -
各子目录/文件分别占用的内存容量:
du -sh ./*该命令 不会 显示隐藏文件夹,可以尝试用
du -sh ./.*救一下
-
4 进程筛选
实际上
ps aux查看的是快照,但凑合用吧
# 基础版
ps aux | grep [xxx] # 把 xxx 替换成你要看的东西,比如 git / xxx.py
# 用 nohup 挂的话,grep nohup 是看不出来的 => 用后面的命令
# 进阶版
ps -u [userName] # 显示特定用户的所有进程(目测接 grep 也没用)
ps aux | grep "^user" | grep xxx # 先匹配特定用户(行开头),再匹配特定任务
5 用户管理
新增普通用户
-
创建新用户(自动复制
/etc/skel中的基本配置文件) -
设置密码(可选)
-
配置 SSH 公钥
6 奇妙 bug
terminals database is inaccessible
-
表现:输入
clear命令后,返回terminals database is inaccessible -
可能原因:Conda 的
clear指令覆盖了系统命令验证:检查
which clear的命令中是否包含conda -
解决方案:
-
✅ 重命名 conda 的
clear命令还不行的话,再用
which clear检查一遍 —— 可能需要对当前 conda 环境的命令也做一次替换 -
❌(看起来不管用)修正
$TERMINFO环境变量先尝试一下临时修改后能不能用,不管用就不要写到 srcFile 里了
-
登录时无法自动加载 ~/.bashrc
实际上登录时自动加载的文件是 ~/.bash_profile,手动在里面添加加载逻辑
# 比较保守的写法
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# Optional: 如果你在 ~/bin 下面放了一些 startup program
PATH=$PATH:$HOME/bin
export PATH
7 Bash
awk
用于顺序按行遍历(一个或多个)文件,支持进行一些按列处理
-
基本格式
-
常用内置变量
写法 含义 $0当前整行 $1当前行第 1 列 $2当前行第 2 列 $NF当前行最后一列 NF当前行有多少列 NR当前是读取到的第几行 FNR当前文件的第几行 FS输入字段分隔符 OFS输出字段分隔符 - 仅单个文件时,恒有
NR == FNR - 存在多个文件时,
NR为累计值、FNR会在每个文件开始时重置为 1
- 仅单个文件时,恒有
-
场景题:我们有两个文件,需要找出 id 在区间 [1,1000] 内、且购买 apple 的 username 并输出到文件
#!/bin/bash l=1 r=1000 target="apple" awk \ -v l="$l" \ -v r="$r" \ -v tar="$target" \ 'BEGIN {print "#user_id,user_name"} NR==FNR { if ($1 >= l && $1 <= r && $2 == tar) bought[$1]=1 next } $1 in bought {print}' \ "order.txt" "user.txt" \ > "${target}.txt"-
BEGIN 块仅执行一次:用于给
apple.txt写入表头 -
NR==FNR判断处于首个文件(order.txt)内,用于筛选 user_idbought[$1]=1相当于将$1加入 set(也可以赋其他任意值) -
$1 in bought:已经在扫描 user.txt 了,用于查找 username
-