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 编辑器,很多系统里它实际会指向 vimdemo.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.1tailscale0 是 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 用户登录