SOP风格教程

SOP(Standard Operating Procedure)即标准操作流程,意味着将复杂任务拆解为明确的步骤

硬件视角的计算机

C视角下程序内部的状态:全局变量,stack frame们(注意每个栈帧有自己的pc)

状态迁移:执行指令,响应中断,输入输出

执行指令(纯计算的)可以改变程序内部的状态,发出系统调用(中断)才能改变外部的状态

有用的prompt

我现在在[],如果你是一个专业人士,你有什么更好的方法和建议吗,尽可能全面

BIOS

basic i/o system

启动后常驻系统,提供输入输出服务

严格来说是firmware(cpu reset后执行的第一个软件)

booting

引导

bootstrapping的简写,“通过自力更生出人头地”

描述了从firmware开始,直到拉起操作系统的初始化过程

unix

Unix操作系统=unix内核+工具

GNU/Linux=linux内核+GNU项目的工具

fork

创建一个新的状态机,程序内部状态完全复制,外部状态(即操作系统维护的状态)各自处理

exec

复位内部状态,外部状态不变

C库在启动时初始化FILE* stdin, stdout, stderr,很显然

everything is a file对高速设备不够友好

shift,CR&LF,tab&backspace和打字机的渊源

pty

teletypewriter是双向的,有一个键盘可以输入,有一个屏幕可以输出

一对虚拟设备,或者说应该像管道那样理解,但是双向

master由终端模拟器使用,写口的用户输入指令通向slave的读口,读口接受来自slave的输出用来打印给用户

slave由shell使用,一般见到的/dev/pts/0,/dev/pty就是它

终端属性控制

Canonical Mode按行处理

Non-canonical Mode: 按字符处理,如vim的交互式程序

回显、信号处理、特殊字符等

?这里的终端可能指的是pty的master以及可能的其他的

ctrl c这种会被操作系统处理

stty -a

观察按键绑定

进程组是一组相关的进程,可以一次性向它们发送信号

shell中运行程序会为程序创建新进程组(这样可以确定前台进程到底是哪些),而fork默认不创建新进程组

ctrl+c,ctrl+z向前台进程组

session,controling terminal

SIGHUP和nohup

不同shell对命令的处理可能不同

所以需要写shebang

systemcall是abi,而libc是api

apt代理

raspbian - How can i configure a http proxy for apt-get? - Stack Overflow

/etc/apt/apt.conf.d/10proxy
Acquire::http::Proxy "http://yourproxyaddress:proxyport/";