1. 项目概述
作为一名与Linux系统打了十年交道的运维老兵,我见过太多人把Linux命令当作"黑箱魔法"——他们能熟练背诵各种命令参数组合,却对敲下回车后系统底层究竟发生了什么一无所知。这种"知其然不知其所以然"的状态,往往导致他们在遇到非常规问题时束手无策。
这份指南正是要打破这种局面。不同于市面上那些单纯罗列命令的手册,我们将沿着"命令输入→Shell解析→系统调用→内核响应"的完整链路,逐层拆解Linux命令与系统内核的对话机制。通过理解每个命令背后隐藏的系统级交互,你不仅能更高效地使用Linux,还能在出现异常时快速定位问题根源。
2. 核心需求解析
2.1 从机械操作到理解本质
大多数Linux初学者会经历这样的学习路径:
- 阶段一:死记硬背
ls -l、grep -r等命令组合 - 阶段二:通过
man手册了解参数含义 - 阶段三:在脚本中组合使用命令
但很少有人深入思考:
- 为什么
sudo命令需要输入密码? rm删除文件时,磁盘空间何时真正释放?- 管道符
|背后的进程间通信如何实现?
2.2 系统级理解的必要性
当遇到以下场景时,表层命令知识往往不够用:
- 执行
df显示磁盘已满,但du统计却显示占用空间不足 kill -9无法终止某个僵尸进程- 普通用户无法通过
chmod修改某些文件的权限
理解内核交互机制后,这些问题都能迎刃而解。例如第一个问题通常是由于进程持有已删除文件的句柄,导致空间未释放——此时需要检查lsof | grep deleted。
3. Shell与内核的通信机制
3.1 命令执行的生命周期
一个简单命令ls -l /tmp的执行过程:
Shell解析阶段:
- 词法分析:将输入拆分为
ls、-l、/tmp三个token - 检查别名:
alias ls是否存在 - 查找路径:通过
$PATH定位/bin/ls
- 词法分析:将输入拆分为
系统调用阶段:
// 伪代码表示内核交互 fork(); // 创建子进程 execve("/bin/ls", ["ls", "-l", "/tmp"], envp); // 加载程序 waitpid(); // 等待子进程结束内核响应阶段:
- VFS虚拟文件系统处理
/tmp路径解析 - 页缓存加速目录项读取
- 终端驱动处理输出显示
- VFS虚拟文件系统处理
3.2 关键系统调用解析
| 系统调用 | 命令示例 | 作用描述 |
|---|---|---|
| open() | cat file.txt | 打开文件获取文件描述符 |
| read() | less log.txt | 从描述符读取数据 |
| write() | echo "test" | 向描述符写入数据 |
| fork() | bash | 创建子进程 |
| execve() | ./script.sh | 执行新程序 |
| stat() | ls -l | 获取文件元信息 |
注意:通过
strace -f -o trace.log bash -c "ls -l"可以捕获命令执行时的全部系统调用
4. 高级命令原理解析
4.1 管道背后的魔法
当执行ps aux | grep sshd时:
- Shell通过
pipe()系统调用创建匿名管道(返回两个文件描述符) - 第一个子进程将stdout重定向到管道写入端
- 第二个子进程将stdin重定向到管道读取端
- 内核维护管道缓冲区(默认64KB)
常见陷阱:
- 管道是单向通信,且一旦读取数据就会被消耗
- 管道两端的命令是并行执行的,非顺序执行
- 当写入速度超过读取速度时可能阻塞
4.2 权限控制深度解析
sudo命令的工作流程:
- 检查
/etc/sudoers配置 - 验证用户密码(通过PAM模块)
- 设置有效UID为0(root)
- 执行结束后恢复原始UID
关键配置文件:
# /etc/sudoers 片段 # 允许admin组成员免密执行服务管理命令 %admin ALL=(root) NOPASSWD: /usr/bin/systemctl restart *5. 实战问题排查指南
5.1 磁盘空间异常案例
现象:
df -h显示/var分区使用率100%du -sh /var统计却只显示80%使用率
诊断步骤:
- 检查被删除但仍被进程占用的文件:
lsof +L1 /var | grep deleted - 确认占用进程:
ps -fp $(lsof -t /var/log/apache2/access.log) - 解决方案:
- 重启持有文件句柄的进程
- 或清空文件内容而非删除文件:
:>/var/log/monster.log
5.2 进程管理疑难解析
僵尸进程处理:
- 识别僵尸进程:
ps -A -ostat,pid | grep '^Z' - 获取父进程ID:
ps -o ppid= -p [僵尸PID] - 向父进程发送SIGCHLD信号:
kill -s SIGCHLD [父进程PID]
如果父进程不处理SIGCHLD,唯一解决方案是终止父进程。
6. 性能优化技巧
6.1 文件操作加速
场景:需要递归统计百万级小文件的数量
低效方式:
find /data -type f | wc -l # 涉及多次进程创建高效方式:
find /data -type f -printf '.' | wc -c # 单进程完成
原理:减少进程创建开销(每次fork()+exec()约消耗300μs)
6.2 网络连接优化
TIME_WAIT状态处理:
# 查看当前状态统计 ss -ant | awk 'NR>1 {print $1}' | sort | uniq -c # 调整内核参数(临时生效) echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse调优建议:
- 对于高并发短连接服务,可适当减小
tcp_fin_timeout(默认60s) - 启用
tcp_tw_recycle可能导致NAT环境下连接失败,需谨慎使用
7. 内核参数调优实战
7.1 文件描述符限制
检查当前限制:
# 查看用户级限制 ulimit -n # 查看系统级限制 cat /proc/sys/fs/file-max永久调整方案:
# /etc/security/limits.conf * soft nofile 65535 * hard nofile 65535 # /etc/sysctl.conf fs.file-max = 20971527.2 内存分配策略
OOM Killer调优:
# 查看进程得分 cat /proc/[PID]/oom_score # 保护关键进程 echo -1000 > /proc/[PID]/oom_score_adjSwappiness调整:
# 查看当前值(默认60) cat /proc/sys/vm/swappiness # 对于数据库服务器建议设为10以下 sysctl vm.swappiness=108. 终端控制高级技巧
8.1 颜色输出控制
ANSI转义序列示例:
# 红色错误信息 echo -e "\033[31mError: something wrong\033[0m" # 带背景色的提示 printf "\e[48;5;202m\e[38;5;15m WARNING \e[0m\n"实用函数定义:
red() { echo -e "\033[31m$@\033[0m"; } green() { echo -e "\033[32m$@\033[0m"; } red "Failed to connect!" >&28.2 光标控制魔法
创建进度条效果:
for i in {1..100}; do printf "\rProgress: [%-100s] %d%%" $(printf '#%.0s' $(seq 1 $i)) $i sleep 0.1 done echo屏幕清空技巧:
# 真正清空终端(包括回滚缓冲区) printf "\033[3J\033[H\033[2J"9. 信号处理深入解析
9.1 常用信号列表
| 信号编号 | 信号名 | 默认行为 | 触发场景 |
|---|---|---|---|
| 1 | SIGHUP | 终止 | 终端断开 |
| 2 | SIGINT | 终止 | Ctrl+C |
| 9 | SIGKILL | 强制终止 | kill -9 |
| 15 | SIGTERM | 终止 | 默认kill信号 |
| 19 | SIGSTOP | 暂停进程 | Ctrl+Z |
9.2 信号捕获实践
bash脚本示例:
#!/bin/bash cleanup() { echo "Caught signal, cleaning up..." rm -f /tmp/tempfile.$$ exit 1 } trap cleanup SIGINT SIGTERM # 主程序逻辑 while true; do dd if=/dev/zero of=/tmp/tempfile.$$ bs=1M count=100 sleep 1 done注意事项:
- SIGKILL和SIGSTOP不能被捕获或忽略
- 信号处理函数中应避免复杂操作
- 多线程程序中信号处理更复杂
10. 文件系统底层探秘
10.1 inode与硬链接
inode信息查看:
# 查看文件inode号 ls -i filename # 详细inode信息 stat filename硬链接实验:
# 创建原始文件 echo "test" > original.txt # 创建硬链接 ln original.txt hardlink.txt # 观察inode号 ls -li original.txt hardlink.txt # 显示相同inode # 删除原始文件后数据仍存在 rm original.txt cat hardlink.txt # 仍能显示内容10.2 文件删除真相
删除过程分解:
- 减少文件硬链接计数
- 当链接数为0时,标记inode为可复用
- 将数据块标记为可用(实际数据仍在磁盘上)
- 新数据可能覆盖原有数据块
恢复被删文件:
# 前提:文件句柄仍被某进程持有 # 1. 找到持有进程 lsof -n | grep deleted # 2. 从/proc恢复 cp /proc/[PID]/fd/[FD_NUM] /path/to/recovery11. Shell脚本调试艺术
11.1 调试工具集
基础调试命令:
# 打印执行命令 set -x # 检查未定义变量 set -u # 启用严格模式 set -euo pipefail高级调试技巧:
# 跟踪特定函数调用 declare -ft function_name # 输出行号信息 PS4='+ $LINENO: '; set -x # 使用bashdb调试器 bashdb script.sh11.2 性能分析工具
时间统计:
# 测量命令执行时间 time find / -name "*.conf" # 详细时间分解 /usr/bin/time -v lsprofiling脚本:
#!/bin/bash exec 3>&2 2>profile.log set -x # 你的脚本内容... set +x exec 2>&312. 安全增强实践
12.1 敏感命令审计
记录高危操作:
# 在/etc/bashrc中添加 audit_cmd() { case $1 in rm*|chmod*|chown*|dd*) logger -t "CMD_AUDIT" "$(whoami): $1" ;; esac } trap 'audit_cmd "$BASH_COMMAND"' DEBUG查看审计日志:
journalctl -t CMD_AUDIT -f12.2 受限Shell环境
创建受限用户:
# 使用rbash useradd -s /bin/rbash restricted_user # 设置命令白名单 mkdir /home/restricted_user/bin ln -s /bin/ls /home/restricted_user/bin/ ln -s /usr/bin/top /home/restricted_user/bin/chroot监狱:
# 基本创建步骤 mkdir -p /chroot/{bin,lib,lib64} cp /bin/{bash,ls} /chroot/bin/ ldd /bin/bash | awk '{print $3}' | xargs -I {} cp {} /chroot/lib/13. 终端复用大师课
13.1 tmux高级用法
会话管理:
# 创建命名会话 tmux new -s mysession # 分离会话 Ctrl+b d # 恢复会话 tmux attach -t mysession窗口分割:
# 水平分割 Ctrl+b " # 垂直分割 Ctrl+b % # 切换窗格 Ctrl+b 方向键13.2 脚本化tmux配置
自动化部署会话:
#!/bin/bash SESSION="deploy" tmux new-session -d -s $SESSION # 第一个窗口:日志监控 tmux rename-window -t $SESSION:0 "logs" tmux send-keys -t $SESSION:0 "tail -f /var/log/nginx/access.log" C-m # 第二个窗口:控制台 tmux new-window -t $SESSION:1 -n "console" tmux send-keys -t $SESSION:1 "htop" C-m # 附加会话 tmux attach-session -t $SESSION14. 命令行效率革命
14.1 快捷键大全
bash核心快捷键:
Ctrl+a 移动到行首 Ctrl+e 移动到行尾 Ctrl+u 删除到行首 Ctrl+k 删除到行尾 Alt+. 插入上一个命令的最后一个参数 Ctrl+x* 展开通配符readline配置增强:
# ~/.inputrc 配置示例 "\e[5~": history-search-backward # PageUp搜索历史 "\e[6~": history-search-forward # PageDown搜索历史 set show-all-if-ambiguous on # 自动显示补全14.2 补全系统进阶
自定义补全规则:
# 定义git分支补全 _git_branch_complete() { local cur=${COMP_WORDS[COMP_CWORD]} COMPREPLY=( $(git branch --list | grep "^$cur") ) } complete -F _git_branch_complete git checkout动态补全示例:
# 根据当前目录下的文件类型提供不同补全 _custom_complete() { if [[ -d "$1" ]]; then COMPREPLY=( $(ls "$1") ) else COMPREPLY=( $(file "$1" | awk '{print $2}') ) fi } complete -F _custom_complete mycmd15. 跨平台兼容方案
15.1 差异处理技巧
OS检测与适配:
case "$(uname -s)" in Linux*) machine=Linux;; Darwin*) machine=Mac;; CYGWIN*) machine=Cygwin;; MINGW*) machine=MinGw;; *) machine="UNKNOWN" esac if [ "$machine" = "Mac" ]; then alias sed=gsed alias date=gdate fi工具统一方案:
# 使用coreutils确保GNU工具可用 if ! command -v realpath &> /dev/null; then brew install coreutils # Mac apt install coreutils # Linux fi15.2 容器化兼容层
Docker统一环境:
FROM alpine:latest # 安装统一工具集 RUN apk add --no-cache \ bash \ coreutils \ findutils \ grep \ sed # 设置标准工作目录 WORKDIR /workspace使用示例:
# 在任何平台执行相同命令 docker run -v $(pwd):/workspace mytool image.jpg16. 性能监控与诊断
16.1 实时监控工具
综合监控仪表盘:
# 使用glances pip install glances glances # 或使用bpytop pip install bpytop bpytop专项监控命令:
# 磁盘I/O监控 iostat -x 1 # 网络流量分析 nload eth0 # 进程级I/O iotop -o16.2 性能瓶颈分析
CPU热点分析:
# 采样CPU使用 perf record -F 99 -g -- sleep 10 perf report # 火焰图生成 git clone https://github.com/brendangregg/FlameGraph perf script | FlameGraph/stackcollapse-perf.pl | FlameGraph/flamegraph.pl > flame.svg内存泄漏检测:
# valgrind检测 valgrind --leak-check=full ./myprogram # 或使用mtrace export MALLOC_TRACE=mtrace.log ./myprogram mtrace ./myprogram mtrace.log17. 命令行数据处理
17.1 文本处理三剑客
awk高级模式:
# 分组统计示例 awk '{ count[$1]++ sum[$1]+=$2 } END { for (k in count) print k, count[k], sum[k], sum[k]/count[k] }' data.txtsed流处理:
# 多步编辑管道 sed -e 's/foo/bar/g' \ -e '/^#/d' \ -e '10,20s/old/new/' \ input.txt > output.txt17.2 结构化数据处理
jq处理JSON:
# 提取嵌套字段 curl -s http://api.example.com/data | jq '.user.profile.name' # 复杂转换 jq '[.items[] | {id: .id, name: .name[:10]}]' data.jsoncsvkit处理CSV:
# 数据透视表 csvsql --query \ "SELECT year, SUM(amount) FROM data GROUP BY year" \ sales.csv18. 系统启动过程解密
18.1 启动流程全解析
Linux启动阶段:
- BIOS/UEFI初始化
- 引导加载程序(GRUB)
- 内核初始化
- 解压内核镜像
- 初始化硬件驱动
- 挂载根文件系统
- systemd/sysvinit进程
- 运行级别/target启动
关键日志查看:
# 查看内核启动消息 dmesg | less # 查看systemd启动顺序 journalctl -b | grep "Starting.*service"18.2 自定义启动服务
systemd服务示例:
# /etc/systemd/system/myapp.service [Unit] Description=My Custom Application After=network.target [Service] ExecStart=/usr/local/bin/myapp --daemon Restart=on-failure User=appuser [Install] WantedBy=multi-user.target管理命令:
# 重载配置 systemctl daemon-reload # 启用服务 systemctl enable myapp # 调试模式启动 systemctl start myapp --no-block --show-transaction19. 网络调试进阶
19.1 连接状态分析
TCP状态追踪:
# 实时监控连接状态 watch -n 1 'ss -tan | awk "{print \$1}" | sort | uniq -c' # 统计各状态连接数 netstat -ant | awk '/^tcp/ {print $6}' | sort | uniq -c连接超时调优:
# 调整内核参数 echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout echo 5 > /proc/sys/net/ipv4/tcp_keepalive_time19.2 数据包捕获分析
tcpdump高级用法:
# 捕获HTTP GET请求 tcpdump -i eth0 -A -s 0 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420' # 统计流量最高的IP tcpdump -nn -i eth0 | awk -F'[ .]' '{print $3"."$4"."$5"."$6}' | sort | uniq -c | sort -nrWireshark过滤技巧:
# 显示重传包 tcp.analysis.retransmission # 显示特定流量的SSL握手 ssl.handshake.type == 120. 内核模块开发入门
20.1 基础模块示例
最简单的内核模块:
// hello.c #include <linux/init.h> #include <linux/module.h> MODULE_LICENSE("GPL"); static int __init hello_init(void) { printk(KERN_INFO "Hello kernel!\n"); return 0; } static void __exit hello_exit(void) { printk(KERN_INFO "Goodbye kernel!\n"); } module_init(hello_init); module_exit(hello_exit);Makefile示例:
obj-m := hello.o KDIR := /lib/modules/$(shell uname -r)/build all: make -C $(KDIR) M=$(PWD) modules clean: make -C $(KDIR) M=$(PWD) clean20.2 模块调试技巧
日志查看:
# 实时查看内核日志 tail -f /var/log/kern.log # 或直接使用dmesg dmesg -wH符号信息获取:
# 查看内核符号表 cat /proc/kallsyms | grep function_name # 反汇编模块代码 objdump -d hello.ko21. 系统调用拦截技术
21.1 LD_PRELOAD方法
拦截malloc示例:
// mymalloc.c #define _GNU_SOURCE #include <dlfcn.h> #include <stdio.h> void *malloc(size_t size) { static void *(*real_malloc)(size_t) = NULL; if (!real_malloc) real_malloc = dlsym(RTLD_NEXT, "malloc"); void *ptr = real_malloc(size); fprintf(stderr, "malloc(%zu) = %p\n", size, ptr); return ptr; }编译与使用:
gcc -shared -fPIC -o mymalloc.so mymalloc.c -ldl LD_PRELOAD=./mymalloc.so ls21.2 eBPF高级追踪
opensnoop示例:
# 使用bpftrace追踪文件打开 bpftrace -e 'tracepoint:syscalls:sys_enter_open { printf("%s %s\n", comm, str(args->filename)); }'系统调用统计:
bpftrace -e 'tracepoint:raw_syscalls:sys_enter { @[pid, comm] = count(); }'22. 容器技术底层揭秘
22.1 命名空间隔离
手动创建容器:
# 创建UTS命名空间 unshare --uts /bin/bash # 在新命名空间修改主机名 hostname mycontainer # 验证隔离 exec bash # 新会话仍显示原主机名查看命名空间:
# 列出所有命名空间 ls -l /proc/$$/ns # 查看特定进程的命名空间 ls -l /proc/<PID>/ns22.2 cgroups资源限制
创建CPU限制组:
# 创建控制组 cgcreate -g cpu:/mygroup # 设置CPU份额(相对权重) cgset -r cpu.shares=512 mygroup # 将进程加入控制组 cgexec -g cpu:mygroup stress -c 2内存限制示例:
# 设置内存上限为100MB cgcreate -g memory:/mylimit cgset -r memory.limit_in_bytes=100M mylimit cgexec -g memory:mylimit ./memory_hungry_app23. 安全加固实践
23.1 权限最小化
capabilities精细控制:
# 查看进程能力 getpcaps <PID> # 只授予网络相关能力 setcap 'cap_net_bind_service,cap_net_admin+ep' /usr/local/bin/myappSUID风险检测:
# 查找所有SUID文件 find / -perm -4000 -type f -exec ls -ld {} \; # 查找可写的SUID文件 find / -perm -4000 -type f -perm -o+w -exec ls -ld {} \;23.2 沙箱技术应用
firejail基础使用:
# 以受限模式运行浏览器 firejail --net=none --private firefox # 自定义配置文件 firejail --profile=/etc/firejail/myapp.profile myappbubblewrap沙箱:
# 创建只读根文件系统 bwrap --ro-bind / / \ --tmpfs /home \ --proc /proc \ --dev /dev \ bash24. 性能调优终极指南
24.1 磁盘I/O优化
调度器选择:
# 查看当前调度器 cat /sys/block/sda/queue/scheduler # 对SSD使用noop或deadline echo noop > /sys/block/sda/queue/scheduler文件系统挂载选项:
# ext4优化选项示例 UUID=xxx / ext4 defaults,noatime,nodiratime,data=writeback,commit=60 0 1 # XFS优化选项 UUID=xxx /data xfs defaults,noatime,nodiratime,logbufs=8 0 024.2 内存管理技巧
透明大页配置:
# 查看当前模式 cat /sys/kernel/mm/transparent_hugepage/enabled # 建议对数据库服务器设置为madvise echo madvise > /sys/kernel/mm/transparent_hugepage/enabledswapiness调优:
# 降低swap倾向(0-100范围) echo 10 > /proc/sys/vm/swappiness # 完全禁用swap(谨慎使用) swapoff -a25. 终端图形化技巧
25.1 ASCII艺术与图表
figlet文字艺术:
# 安装figlet apt install figlet # 生成艺术字 figlet -f slant "Linux Rocks"termgraph图表:
# 安装工具 pip install termgraph # 绘制柱状图 echo "A 20\nB 50\nC 30" | termgraph25.2 终端UI框架
dialog交互示例:
# 创建菜单对话框 dialog --menu "System Tools" 15 40 10 \ 1 "Disk Usage" \ 2 "Process List" \ 3 "Network Stats" \ 2> choice.txtwhiptail进度条:
{ for i in {1..100}; do echo $i sleep 0.1 done } | whiptail --gauge "Processing..." 6 60 026. 命令行生产力工具
26.1 现代化替代工具
传统命令的现代替代品:
| 传统命令 | 现代替代 | 优势 |
|---|---|---|
| top | htop/bpytop | 交互式、彩色显示 |
| netstat | ss | 更快、更详细的socket信息 |
| ifconfig | ip | 更强大的网络配置 |
| find | fd | 更快、更友好的语法 |
| grep | rg (ripgrep) | 递归搜索速度极快 |
安装示例:
# Ubuntu/Debian apt install htop iproute2 ripgrep fd-find # CentOS/RHEL yum install epel-release yum install htop iproute ripgrep fd-find26.2 个人知识管理
终端版笔记工具:
# 使用vimwiki管理wiki vim -c "VimwikiIndex" # 或使用jrnl写日志 jrnl "Today I learned about $(uname -r)"cheat.sh快速查询:
# 查询tar用法 curl cheat.sh/tar # 交互式查询 cht.sh python random number27. 跨系统同步方案
27.1 配置同步策略
dotfiles管理:
# 使用git bare仓库管理 git init --bare $HOME/.dotfiles alias dotfiles='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME' dotfiles config --local status.showUntrackedFiles no # 添加配置文件 dotfiles add .bashrc .vimrc dotfiles commit -m "Add base configs"rsync同步脚本:
#!/bin/bash rsync -avz --delete \ --exclude '.cache/' \ --exclude '.config/' \ $HOME/ user@remote:/backup/home/27.2 环境一致性保障
容器化开发环境:
FROM ubuntu:20.04 # 安装基础工具 RUN apt update && apt install -y \ build-essential \ git \ vim # 设置工作目录 WORKDIR /workspace使用示例:
# 开发时挂载代码目录 docker run -it -v $(pwd):/workspace dev-env bash28. 命令行娱乐大全
28.1 终端游戏精选
经典游戏安装:
# 安装nethack(地牢探险) apt install nethack-console # 安装bsdgames(包含多种小游戏) apt install bsdgames现代CLI游戏:
# 安装2048游戏 pip install cli-2048 cli-2048 # 安装太空入侵者 npm install -g space-invaders-cli space-invaders28.2 多媒体控制
音乐播放控制:
# 使用mpd控制音乐 mpc play mpc pause mpc volume +10 # 或使用playerctl通用控制 playerctl play-pause视频转ASCII:
# 安装libcaca apt install cacaview # 播放ASCII艺术视频 mplayer -vo caca movie.mp429. 硬件交互技巧
29.1 USB设备控制
列出USB设备:
lsusb -v | less # 树状显示 lsusb -t设备权限管理:
# 查看当前权限 ls -l /dev/ttyUSB* # 永久设置权限(创建udev规则) echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="abcd", MODE="0666"' > /etc/udev/rules.d/99-mydevice.rules29.2 传感器数据读取
CPU温度监控:
# 查看温度传感器 sensors # 特定CPU核心温度 cat /sys/class/thermal/thermal_zone*/temp | awk '{print $0/1000}'硬盘SMART数据:
# 安装工具 apt install smartmontools # 查看健康状态 smartctl -H /dev/sda # 详细属性 smartctl -A /dev/sda30. 命令行云计算
30.1 云API调用
AWS CLI示例:
# 列出EC2实例 aws ec2 describe-instances \ --query 'Reservations[*].Instances[*].[InstanceId,State.Name,PublicIpAddress]' \ --output table # 创建S3存储桶 aws s3 mb s3://my-unique-bucket-nameDigitalOcean CLI:
# 创建Droplet doctl compute droplet create \ --image ubuntu-20-04-x64 \ --size s-1vcpu-1gb \ --region nyc1 \ my-droplet30.2 基础设施即代码
Terraform基础:
# main.tf provider "aws" { region = "us-east-1" } resource "aws_instance" "web" { ami = "ami-0c55b159cbfafe1f0" instance_type = "t2.micro" }初始化与应用:
terraform init terraform plan terraform apply31. 终极命令行环境
31.1 个性化配置
高效.bashrc配置:
# 历史记录增强 shopt -s histappend HISTCONTROL=ignoreboth HISTSIZE=5000