分形视角观察Linux世界一切皆文件的设计哲学

一切皆文件

我们知道在Linux的世界里,一切皆文件。

而在前面的博客也说过,Linux世界里对文件进行读写、或进行输入/输出,很好地模拟了图灵机模型,所以,它的描述能力是非常强的!

图例

  • 常见文件
    在这里插入图片描述

一切皆分形

在编程的世界里,有很多设计思想,如果从分形的角度来看,它们都可以将它们所形成的体系,看成分形系统。

在分形系统的世界,充满着自相似。例如,剪取树的任一部分,都与其它部分相似,自身也是一颗树!

文件分形

  • 一切皆文件

注:以Linux为代表

过程分形

  • 一切皆过程

注: 以C为代表

对象分形

  • 一切皆对象

注:以C++\JAVA为代表

函数分形

  • 一切皆函数

注:以函数编程为代表

递归分形

  • 一切皆递归

注:以递归编程为代表

如果以某一种设计思想,一以贯之进行搭建,抽象来看,就是一个完美的分形 😃

系统设计工具

  • 流程图
  • 状态图
  • 序列图
  • 泳道图

每种UML图例适合描述的设计思想是非常不同的,也可以看出来它们之间的本质不同,并不可混淆使用

观察进程树、文件链分形

工具链

  • ps
  • pstree
  • lsof

观察

pstree -sp [$pid]命令,可以观察Linux世界形成的进程树分形。

Linux世界中,存在特别的0号进程和1号进程,以及2号进程,它们形成了各自进程树的基座。

  • 1号进程为所有业务进程的根
  • 2号进程为所有内核进程的根

SSH用户登录终端为对象进行具体观察,就可以明显发现这颗进程树!

# 查找0号、1号、2号进程
ps -ef | grep -E '^root\s+[1-9]+\s+0'

# 观察Init/Systemd 1号进程所形成的进程树
pstree -sp

# 以当前终端观察所形成的进程树
pstree -sp $$
# Output
systemd(1)───sshd(1088)───sshd(1591)───bash(1593)───pstree(1768)

SSH用户登录过程粗略介绍

SSH用户登录终端所形成的进程树,我们可以分析出来,以sshd网络服务进程为根,在用户登录时,它forksshd子进程。

该子进程作为与远程终端,与主机内bash shell进程,进行背靠背协作工作!


每次终端上,执行一条shell命令,就开辟另外一个bash shell的子进程进行实际具体的工作,而最终,通过文件输入输出的串联链,将执行结果送递远程的终端!

  • 当然,SSH内部过程比较复杂,这里仅是从进程树和文件句柄的视角进行粗略描述

背靠背模型图解

在这里插入图片描述

  • 两种接口背靠背,进行移花接木
  • while true; do sleep 360; done脚本命令,可以深入观察bash shell子命令的输入输出句柄,依然是/dev/pts/*

文件证据链

# Output
systemd(1)───sshd(1088)───sshd(1591)───bash(1593)───pstree(1768)

# 观察打开文件句柄
lsof -nPp 1088
COMMAND  PID USER   FD   TYPE             DEVICE SIZE/OFF     NODE NAME
...
sshd    1088 root    3u  IPv4              20514      0t0      TCP *:22 (LISTEN)
sshd    1088 root    4u  IPv6              20516      0t0      TCP *:22 (LISTEN)

# 背靠背打开终端设备
lsof -nPp 1591
COMMAND  PID USER   FD   TYPE             DEVICE SIZE/OFF     NODE NAME
...
sshd    1591 root    3u  IPv4              18945      0t0     TCP 192.168.2.168:22->192.168.2.111:64834
sshd    1591 root    8u   CHR                5,2      0t0     1121 /dev/ptmx
sshd    1591 root    9u   CHR                5,2      0t0     1121 /dev/ptmx
sshd    1591 root   12u   CHR                5,2      0t0     1121 /dev/ptmx

# bash shell打开伪终端
lsof -nPp 1591
COMMAND  PID USER   FD   TYPE             DEVICE SIZE/OFF     NODE NAME
...
COMMAND  PID USER   FD   TYPE DEVICE  SIZE/OFF      NODE NAME
...
bash    1593 root    0u   CHR  136,0       0t0         3 /dev/pts/0
bash    1593 root    1u   CHR  136,0       0t0         3 /dev/pts/0
bash    1593 root    2u   CHR  136,0       0t0         3 /dev/pts/0
# 前台控制句柄
bash    1593 root  255u   CHR  136,0       0t0         3 /dev/pts/0

总结

  • 进程树分形
  • 文件链分形
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值