1.set fish help文档
set -Ux fish_help_browser lynx用途:在 fish 中把帮助文档浏览器设置为 lynx,并把这个设置持久保存给当前用户的所有 fish 会话。
构成:
set 是 fish 的内建变量设置命令。
-U 表示通用变量,会跨 fish 会话持久保存。
-x 表示把变量导出给子进程。
fish_help_browser 是 fish 帮助命令读取的浏览器变量名。
lynx 是终端里的文字浏览器。
简单扩展:
set -U fish_help_browser lynx 只持久保存,不导出给子进程。
set -eU fish_help_browser 删除这个通用设置,恢复默认行为。
set -S fish_help_browser 查看这个变量当前的定义方式。
2.starship explain提示模块
starship explain用途:解释 starship 当前会显示哪些提示模块,以及这些模块为什么出现。
构成:
starship 是 starship 的主程序,用来生成终端提示符。
explain 是它的子命令,用来解释当前 prompt 中显示的模块。
简单扩展:
starship prompt 直接输出当前完整 prompt 的内容。
starship timings 查看各个模块的耗时,适合排查提示符变慢。
starship explain -p /some/path -s 1 模拟特定目录和退出码下的 prompt 显示结果。
3.vi 常用编辑命令
vi demo.txt用途:打开 vi 编辑器来查看或编辑文件;文件不存在时通常会新建一个空文件。
构成:
vi 启动 vi 编辑器,很多系统里它实际会指向 vim。
demo.txt 是要打开或创建的目标文件名。
简单扩展:
i 进入插入模式开始输入文本,Esc 返回普通模式。
:wq 保存并退出,:q! 不保存直接退出。
/关键字 搜索内容,按 n 跳到下一个结果。
4.卸载旧版 Docker 相关包
sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc | cut -f1)用途:找出系统里可能和 Docker 官方安装包冲突的旧包,并用 apt 一次性卸载。
构成:
sudo 用管理员权限执行后面的卸载命令。
apt remove 用 apt 删除指定软件包。
$(...) 先执行里面的命令,再把输出结果当成外层命令的参数。
dpkg --get-selections 查询给定软件包的安装状态。
docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc 是要检查并清理的一组旧包名。
| 把前一个命令的输出传给后一个命令。
cut -f1 只保留每行第一列,也就是包名本身。
简单扩展:
apt list --installed | grep docker 先查看系统里当前安装了哪些 Docker 相关包。
sudo apt purge 包名 比 remove 更彻底,会连配置文件一起删除。
sudo docker run hello-world 安装完成后常用来验证 Docker 是否正常工作。
5.查看网卡与 IP 信息
ifconfig
❯ curl ifconfig.me
81.70.76.245⏎用途:查看当前机器的网络接口、IP 地址、网卡状态,以及收发数据包等信息。
构成:
ifconfig 用来显示网络接口的配置信息。
eth0 通常是主网卡,对应这台机器的内网地址。
lo 是本机回环接口,对应 127.0.0.1。
tailscale0 是 Tailscale 创建的虚拟网卡,对应 Tailscale 网络地址。
简单扩展:
hostname -I 快速查看本机的 IPv4 地址列表。
ip -4 addr 用更现代的方式查看 IPv4 地址信息。
tailscale ip -4 只查看 Tailscale 的 IPv4 地址。
6.nmap 识别开放端口服务
nmap -sV 10.2.0.17用途:扫描目标主机的常见 TCP 端口,并尽量识别开放端口上的服务名称和版本信息。
构成:
nmap 是网络扫描工具。
-sV 表示对开放端口做服务与版本识别。
10.2.0.17 是要扫描的目标主机 IP。
简单扩展:
nmap 10.2.0.17 只做基础端口扫描,不额外识别服务版本。
nmap --open -sV 10.2.0.17 只显示开放端口,并识别服务版本。
nmap -p- 10.2.0.17 扫描全部 TCP 端口,而不是默认的常见 1000 个端口。
7.curl 跟随网页重定向
curl -L baidu.com用途:跟随 HTTP 重定向并获取百度最终地址返回的页面内容。
构成:
curl 发起 HTTP 请求。
-L 表示跟随服务端返回的重定向地址继续请求。
baidu.com 目标网址,访问时会被跳转到 HTTPS 地址。
简单扩展:
curl baidu.com 直接请求原地址,但默认不跟随重定向。
curl -I baidu.com 只查看响应头,常用来确认重定向或状态码。
curl -sL baidu.com 静默跟随跳转并输出最终页面内容。
8.curl 查询公网 IP 信息
curl cip.cc用途:查询当前机器对外访问互联网时使用的公网 IP,以及地理位置和运营商信息。
构成:
curl 发起 HTTP 请求。
cip.cc 返回当前公网出口 IP 及相关归属地信息的网站。
简单扩展:
curl ifconfig.me 只返回公网 IP 本身,输出更简洁。
curl ip.sb 使用另一个常见服务查询公网 IP。
curl cip.cc/8.8.8.8 查询指定 IP 的归属地信息,而不是当前机器的出口 IP。
9.chmod 修改文件权限
chmod 755 script.sh用途:修改文件或目录的权限,让不同身份的用户拥有不同的读、写、执行能力。
-
755 这是数字权限写法。 三位分别对应:
- 第一位:文件所有者 u
- 第二位:所属组 g
- 第三位:其他人 o
每一位是权限值相加:
- 4 = r,可读
- 2 = w,可写
- 1 = x,可执行
所以 755 的意思是:
- 7 = 4+2+1,所有者可读可写可执行
- 5 = 4+1,组用户可读可执行
- 5 = 4+1,其他人可读可执行
构成:
chmod 是修改文件权限的命令,名字来自 change mode。
755 是数字权限写法,分别表示所有者、组用户、其他人的权限。
script.sh 是要修改权限的目标文件。
简单扩展:
chmod +x script.sh 给文件增加执行权限,是脚本文件最常见的用法之一。
chmod 644 file.txt 常用于普通文本文件,表示所有者可读写,其他人只读。
stat -c '%a %n' script.sh 查看文件当前的数字权限和值对应的文件名。
chmod go-rwx secret.txt 去掉组用户和其他人的全部权限。
10.给 fish 增加 npm 全局 PATH
fish_add_path ~/.npm-global/bin用途:把 npm 全局命令目录加入 fish 的 PATH,让 codex 这类命令能被直接找到。
构成:
fish_add_path fish 的内置命令,用来把目录加入并持久保存到 fish 的用户路径配置。
~ 当前用户家目录的缩写。
~/.npm-global/bin 当前用户的 npm 全局可执行文件目录。
简单扩展:
set -S fish_user_paths 查看 fish 记住的用户 PATH。
echo $PATH 查看当前 shell 实际生效的 PATH。
export PATH=$HOME/.npm-global/bin:$PATH 这是 bash/zsh 中常见的等价写法。
11.用 npm 全局安装 Codex
npm install -g @openai/codex用途:通过 npm 全局安装 Codex 命令行工具,让当前用户可以直接运行 codex。
构成:
npm Node.js 生态的包管理命令。
install 安装指定的软件包。
-g 以全局方式安装,让命令入口出现在 npm 的全局 bin 目录。
@openai/codex 要安装的 Codex 包名。
简单扩展:
npm install @openai/codex 只给当前项目安装,不提供全局命令入口。
npm update -g @openai/codex 把全局安装的 Codex 更新到较新版本。
npm root -g 查看 npm 全局包本体安装目录。
12.清理旧版 Docker 包 bash
sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc | cut -f1)用途:查询已安装的 Docker 相关包名后交给 apt 执行卸载。
构成:
sudo 以管理员权限运行后面的卸载命令
apt remove 删除指定软件包但通常保留配置文件
$(...) 先执行内部命令并把输出作为外层参数
dpkg --get-selections ... 查询这些包的安装选择状态
| cut -f1 只保留第一列包名
简单扩展:
sudo apt purge ... 连配置文件一起清理
dpkg -l | grep docker 先查看当前已安装的 Docker 相关包
13.清理旧版 Docker 包 fish
sudo apt remove (dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc | cut -f1)用途:在 fish 里先取出 Docker 相关包名,再交给 apt 执行卸载。
构成:
sudo 以管理员权限运行后面的卸载命令
apt remove 删除指定软件包但通常保留配置文件
(...) fish 的命令替换语法,会把内部输出当成参数
dpkg --get-selections ... 查询这些包的安装选择状态
| cut -f1 只保留第一列包名
简单扩展:
sudo apt purge (...) 在 fish 里连配置文件一起清理
dpkg -l | grep docker 先查看当前已安装的 Docker 相关包
14.临时进入 bash
bash用途:在当前终端里启动一个新的 Bash 交互会话。
构成:
bash 启动一个新的 Bash shell
简单扩展:
bash -l 以 login shell 方式进入 Bash
bash -c 'cmd' 只执行一条命令后退出
15.退出当前 shell
exit用途:结束当前 shell 会话并返回上一层终端环境。
构成:
exit 让当前 shell 正常退出
简单扩展:
logout 在部分 login shell 中也可退出会话
Ctrl-D 发送 EOF,效果通常等同退出当前 shell
16.将默认 shell 改为 bash
chsh -s /usr/bin/bash用途:把当前用户的登录 shell 改成 Bash。
构成:
chsh 修改用户的默认登录 shell
-s 指定新的 shell 路径
/usr/bin/bash 目标 shell 的可执行文件路径
简单扩展:
chsh -s /usr/bin/fish 把默认 shell 改回 fish
getent passwd $USER 查看当前账号记录的默认 shell
17.在 fish 里单次运行 bash 命令
bash -lc 'docker --version'用途:在 fish 中临时启动 Bash,并只执行一条命令。
构成:
bash 启动 Bash 子进程
-l 以 login shell 方式加载 Bash 环境
-c 读取后面的字符串作为要执行的命令
'docker --version' 这段命令由 Bash 而不是 fish 来解释
简单扩展:
bash -c 'docker --version' 不加载 login shell 配置,通常更轻量
bash -lc 'echo $BASH_VERSION' 用 Bash 语法验证当前执行环境
18.用 bash 替换当前 shell
exec bash用途:直接用 Bash 替换当前 shell 进程,而不是再进一层子 shell。
构成:
exec 用后面的程序替换当前 shell 进程
bash 替换成新的 Bash 进程
简单扩展:
exec fish 直接切回 fish 而不保留当前 shell
bash 普通进入子 shell,之后还能用 exit 返回上一层
19.用 bash 执行单条命令
bash -c 'echo $BASH_VERSION'用途:用 Bash 解释并执行一条命令,然后立即退出。
构成:
bash 启动 Bash 子进程
-c 读取后面的字符串作为要执行的命令
'echo $BASH_VERSION' 输出 Bash 自身的版本变量
简单扩展:
bash -c 'pwd' 用 Bash 执行简单命令并返回结果
bash -lc 'cmd' 需要登录环境配置时再加 -l
20.创建 Docker 代理目录
sudo mkdir -p /etc/systemd/system/docker.service.d用途:创建 Docker systemd drop-in 配置目录,用来放 daemon 代理配置。
构成:
sudo 以管理员权限创建系统目录
mkdir -p 递归创建目录,已存在时不报错
/etc/systemd/system/docker.service.d Docker 服务的 systemd 覆盖配置目录
简单扩展:
ls -la /etc/systemd/system/docker.service.d 查看当前 drop-in 目录内容
sudo rm -r /etc/systemd/system/docker.service.d 删除整个目录,操作前需确认风险
21.写入 Docker daemon 代理配置
cat <<'EOF' | sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf >/dev/null
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="ALL_PROXY=socks5://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1,::1"
EOF用途:为 Docker daemon 写入 systemd 代理环境变量配置。
构成:
cat <<'EOF' 用 here-doc 提供多行配置内容且不展开变量
| sudo tee ... 以 root 权限把内容写入目标配置文件
http-proxy.conf Docker 服务的代理 drop-in 文件
>/dev/null 丢弃 tee 的标准输出,只保留错误信息
简单扩展:
sudo sed -n '1,120p' /etc/systemd/system/docker.service.d/http-proxy.conf 查看配置文件内容
Environment="NO_PROXY=localhost,127.0.0.1,::1,registry.local" 为更多地址添加直连例外
22.下载 MySQL Docker 镜像
sudo docker pull mysql:8.4用途:从 Docker Hub 下载 MySQL 8.4 官方镜像到本机。
构成:
sudo 以管理员权限调用 Docker CLI
docker pull 从远程镜像仓库拉取镜像
mysql:8.4 MySQL 官方镜像名和版本标签
简单扩展:
sudo docker pull mysql:8.0 下载 MySQL 8.0 系列镜像
sudo docker images 查看本地已有镜像列表
23.启动 MySQL 容器
sudo docker run -d \
--name mysql8 \
-e MYSQL_ROOT_PASSWORD=你的强密码 \
-p 3306:3306 \
-v mysql_data:/var/lib/mysql \
mysql:8.4用途:后台启动一个 MySQL 8.4 容器,并把数据保存到 Docker volume。
构成:
sudo docker run -d 以后台模式创建并启动容器
--name mysql8 给容器指定固定名称
-e MYSQL_ROOT_PASSWORD=你的强密码 设置 MySQL root 用户密码
-p 3306:3306 把宿主机 3306 端口映射到容器 3306 端口
-v mysql_data:/var/lib/mysql 将数据库数据持久化到 Docker volume
mysql:8.4 使用 MySQL 8.4 镜像启动
简单扩展:
sudo docker logs -f mysql8 跟踪查看 MySQL 启动日志
sudo docker exec -it mysql8 mysql -uroot -p 进入 MySQL 命令行
24.进入 Docker 容器里的 MySQL 客户端
sudo docker exec -it mysql8 mysql -uroot -p用途:直接在名为 mysql8 的容器里启动 MySQL 客户端并登录 root 用户。
构成:
sudo 以管理员权限调用 Docker CLI
docker exec -it 以交互模式进入正在运行的容器执行命令
mysql8 目标容器名称,不是数据库用户名
mysql -uroot -p 在容器内启动 MySQL 客户端并提示输入 root 密码
简单扩展:
sudo docker exec -it mysql8 sh 先进入容器 shell 再手动执行 MySQL 命令
sudo docker logs -f mysql8 查看容器日志确认 MySQL 是否正常启动
25.在宿主机连接 Docker 里的 MySQL
mysql -h 127.0.0.1 -P 3306 -uroot -p用途:使用宿主机上的 MySQL 客户端,通过端口映射连接 Docker 容器里的 MySQL。
构成:
mysql 宿主机上的 MySQL 客户端命令
-h 127.0.0.1 强制通过本机 TCP 连接而不是 Unix socket
-P 3306 指定连接的 TCP 端口
-uroot 使用 root 用户登录
-p 提示输入密码
简单扩展:
sudo apt install mysql-client-core-8.0 在宿主机安装 MySQL 客户端
mysql -h 127.0.0.1 -P 3306 -u用户名 -p 改用其他 MySQL 用户登录