工具
Shell
使用 shell
- date
- echo
- 环境变量 $PATH
- which
在 shell 中导航
- pwd
- cd
- ls
- mv
- cp
- mkdir
在程序间创建连接
- < file
- > file
- >>
- |
根用户
- sudo
- tee
工具
-
查看命令如何使用
- -h
- –help
- man
-
查找文件
- find
- fd
- locate
-
查找代码
- grep
- ack
- ag
- rg
-
查找 shell 命令
- history
-
文件夹导航
- fasd
- autojump
- tree
- broot
- nnn
- ranger
脚本
shebang
shell 脚本
-
shell 函数和脚本的区别
- 函数只能与 shell 使用相同的语言,脚本可以使用任意语言。
- 函数仅在被定义时被加载,脚本会在每次被执行时加载。
- 函数会在当前的 shell 环境中执行,脚本会在单独的进程中执行。
-
bash
-
变量赋值:foo=bar
-
访问变量:$foo
-
原义字符串:’ ’
-
转义字符串:“ ”
-
控制流
- if
- case
- while
- for
-
函数
-
特殊变量
- $0:脚本名
- $1-$9:脚本的参数
- $@:所有参数
- $#:参数个数
- $?:前一个命令的返回值
- $$:当前脚本的进程识别码
- !!:完整的上一条命令,包括参数
- $_:上一条命令的最后一个参数
-
短路运算符
- &&
- ||
-
通配
-
通配符
- ?
- *
-
{ }
-
-
python
编辑器
vim
-
编辑模式
- 正常模式
- 插入模式
- 替换模式
- 可视化模式
- 命令模式
-
基本操作
-
插入文本
- i(正常模式)
-
缓存,标签页,窗口
-
命令行
- :q 退出
- :w 保存
- :wq 保存并退出
- :e {文件名} 打开要编辑的文件
- :ls 显示打开的缓存
- :help {标题} 打开帮助文档
-
-
接口
-
移动
-
基本移动
- hjkl(左,下,上,右)
-
词
- w(下一个词),b(词初),e(词尾)
-
行
- 0(行初),^(第一个非空格字符),$(行尾)
-
屏幕
- H(屏幕首行),M(屏幕中间),L(屏幕底部)
-
翻页
- Ctrl-u(上翻),Ctrl-d(下翻)
-
文件
- gg(文件头),G(文件尾)
-
行数
- :{行数} 或者 {行数}G
-
杂项
- % 符号配对
-
查找
- f{字符},t{字符},F{字符},T{字符}
- 查找/到 向前/向后 在本行的{字符}
- 导航匹配:,/ ;
-
搜索
- /{正则表达式}
- 导航匹配:n / N
-
-
选择
-
可视化模式
- 可视化:v
- 可视化行:v
- 可视化块:Ctrl + v
-
-
编辑
- i:进入插入模式
- O / o:在之上/之下插入行
- d{移动命令}:删除{移动命令}
- c{移动命令}:改变{移动命令}
- x:删除字符
- s:替换字符
- 可视化模式 + 操作
- u:撤销
- y:复制
- p:粘贴
-
计数
- 3w:向前移动三个词
- 5j:向下移动5行
- 7dw:删除7个词
-
修饰语
- ci(:改变当前括号内的内容
- ci[:改变当前方括号的内容
- da’:删除一个单引号字符串,包括周围的单引号
-
-
自定义 Vim
- 文本配置文件:~/.vimrc
-
扩展 Vim
- 插件位置:~/.vim/pack/vendor/start/
-
其他程序的 Vim 模式
- Shell
- Readline
-
Vim 进阶
- 搜索和替换
- 多窗口
- 宏
数据整理
sed
正则表达式
awk
分析数据
利用数据整理来确定参数
整理二进制数据
命令行环境
任务控制
-
结束进程
- SIGINT 信号:Ctrl-c
- SIGQUIT 信号:Ctrl-\
- SIGTERM 信号:kill -TERM
-
暂停和后台执行进程
-
SIGSTOP 暂停信号
-
SIGTSTP 信号:Ctrl-z(Terminal Stop)
-
SIGKILL 信号:不能被程序捕获
-
恢复
- 在前台继续:fg
- 在后台继续:bg
-
当前会话尚未完成的任务:jobs
-
让命令在后台运行:命令添加后缀 &
-
终端多路复用
-
tmux
- 会话
- 窗口
- 面板
别名
- alias
配置文件
-
bash
- ~/.bashrc
- ~/.bash_profile
-
git
- ~/.gitconfig
-
vim
- ~/.vimrc
- ~/.vim
-
ssh
- ~/.ssh/config
-
tmux
- ~/.tmux.conf
可移植性
远端设备
-
ssh foo@bar.mit.edu
-
执行命令:ssh foobar@server ls
-
ssh 密钥
- 密钥生成
- 基于密钥的认证机制
-
通过 ssh 复制文件
- ssh + tee
- scp
- rsync
-
端口转发
- 本地端口转发
- 远程端口转发
-
ssh 配置
-
杂项
- Mosh
- sshfs
Shell & 框架
- prezto
- oh-my-zsh
终端模拟器
版本控制(Git)
数据模型
-
Blob 对象:文件(数据对象)
-
树:目录
-
快照:被追踪的最顶层的树
-
关联快照:历史记录
-
仓库:对象和引用
-
伪码表示
- type blob = array
- type tree = map<string, tree | blob>
- type commit = struct {
- parent: array
- author: string
- message: string
- snapshot: tree
- }
- type object = blob | tree | commit
- objects = map<string, object>
- references = map<string, string>
暂存区
命令行接口
- 基础
- 分支和合并
- 远端操作
- 撤销
- 高级操作
杂项
- 图形用户界面
- Shell 集成
- 编辑器集成
- 工作流
- GitHub
- 其他 Git 提供商
学习资源
调试及性能分析
调试代码
-
打印调试法
-
日志
-
第三方日志系统
-
调试器
-
pdb
- list
- step
- next
- break
- return
- quit
-
-
专门工具
-
追踪系统调用
- strace
- dtrace
- dtruss
-
网络数据包
- tcpdump
- Wireshark
-
web 开发
-
Chrome / Firefox 开发者工具
- 查看源码
- 实时修改
- javaScript shell
- 网络分析
- 存储,查看 Cookies 和本地应用存储
-
-
-
静态分析
性能分析
-
计时
-
工具
-
cpu
- 追踪分析器
- 采样分析器
-
内存
-
事件分析
-
可视化
-
资源监控
- 通用监控
- I / O 操作
- 磁盘使用
- 内存使用
- 打开文件
- 网络连接和配置
- 网络使用
- 专门工具
元编程
构建系统
- 依赖
- 目标
- 规则
依赖管理
-
软件仓库
-
版本控制
-
版本号
- 语义版本号
-
-
锁文件
持续集成系统
-
CI:一种雨伞术语(涵盖了一组术语的术语)
-
工作原理:需要在代码库中添加一个文件,描述当前仓库发生任何修改时,应该如何应对。
-
测试
- 测试套件
- 单元测试
- 集成测试
- 回归测试
- 模拟
安全和密码学
熵:度量不确定性
散列函数:任意大小输入,固定大小输出
-
应用
- Git 中的内容寻址存储
- 文件的信息摘要
- 承诺机制
密钥生成函数
对称加密
非对称加密
- 密钥分发
案例分析
- 密码管理器
- 两步验证(双因子验证)
- 全盘加密
- 聊天加密
- SSH
大杂烩
修改键位映射
守护进程
FUSE(用户空间文件系统)
备份
API(应用程序接口)
-
结构化 URL:api.service.com
-
私密令牌
- OAuth
常见命令行标志参数及模型
窗口管理器
VPN
Markdown
子主题 10
Hammerspoon(macOS 桌面自动化)
开机引导以及 Live USB
Docker,vagrant,VMs,Cloud,OpenStack
交互式记事本编辑
GitHub
- 议题(issue)
- 拉取请求(pull request)
- 复刻(fork)
参考链接:计算机教育中缺失的一课