分形视角观察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

总结

  • 进程树分形
  • 文件链分形

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/617301.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

外观模式详解

外观模式 1 概述 有些人可能炒过股票,但其实大部分人都不太懂,这种没有足够了解证券知识的情况下做股票是很容易亏钱的,刚开始炒股肯定都会想,如果有个懂行的帮帮手就好,其实基金就是个好帮手,支付宝里就…

商场学习之微服务

前言 寒假前在新电脑上配置了java环境,maven仓库,node,js,navicat,MySQL,linux,vmware等环境,创建了6个mysql数据库,77张表。 如此多的表,字段,去手写基础…

2024年天津市静海区教师招聘报名流程(建议电脑)

2024年天津市静海区教师招聘报名流程(建议电脑) #报名 #教师招聘 #教师招聘考试 #教招 #天津教师招聘 #天津教师招聘考试 #24年天津教师招聘 #24年天津市教师招聘考试 #天津市静海区教师招聘 #静海区教师招聘考试 #静海区教师编 #静海区#

1065: 无向图的连通分量计算

解法&#xff1a; dfs求连通性 1.设节点表vis[] 2.遍历节点表dfs标记&#xff0c;每次得到一个连通分量 #include<iostream> #include<vector> using namespace std; int arr[100][100]; void dfs(vector<bool>& vis, int v) {//不用终止条件&#x…

Vellum for Mac v3.7.2激活版:一键创建,轻松出版

还在为繁琐的电子书制作流程而烦恼吗&#xff1f;Vellum for Mac&#xff0c;让您的电子书创作变得轻松简单&#xff01;支持多种格式导入&#xff0c;自动构建书籍内容&#xff0c;无需担心排版和格式问题。丰富的编辑和排版功能&#xff0c;让您的书籍更加精美。一键导出多种…

WHAT - CSS Animationtion 动画系列(三)- 动画卡顿分析

目录 一、背景二、动画卡顿具体分析三、具体优化方法3.1 JavaScript:优化 JavaScript 代码1. requestAnimationFrame 优化2. Web Worker3.2 Style:减少 DOM 操作3.3 Layout:避免频繁触发布局的动画3.4 避免强制同步布局事件3.5 Paint&Composite:GPU加速一、背景 自 HT…

十一、Redis持久化-RDB、AOF

Redis提供了两种持久化数据的方式。一种是RDB快照&#xff0c;另一种是AOF日志。RDB快照是一次全量备份&#xff0c;AOF日志是连续的增量备份。RDB快照是以二进制的方式存放Redis中的数据&#xff0c;在存储上比较紧凑&#xff1b;AOF日志记录的是对内存数据修改的指令文本记录…

c++ 入门2

目录 五. 函数重载 1、参数类型不同 2、参数个数不同 3、参数类型顺序不同 C支持函数重载的原理--名字修饰(name Mangling&#xff09; 为什么C支持函数重载&#xff0c;而C语言不支持函数重载呢&#xff1f; 六. 引用 6.1 概念 6.2 引用特性 6.3 常引用 6.4 使用场景 …

网络基础-ICMP协议

ICMP&#xff08;Internet Control Message Protocol&#xff0c; Internet控制消息协议&#xff09; ICMP协议是IP协议的辅助协议&#xff0c;用于在IP网络上发送控制消息&#xff0c;它通常被用于诊断网络故障、执行网络管理任务以及提供一些错误报告&#xff1b;对于收集各…

【MySQL】SQL基本知识点DML(2)

目录 1.DML添加数据 2.DML-修改数据 &#xff08;1&#xff09;改​编辑 &#xff08;2&#xff09;删​编辑​编辑 3.DQL-基本查询 &#xff08;1&#xff09;查询多个字段​编辑​编辑​编辑 &#xff08;2&#xff09;设置别名 &#xff08;3&#xff09;去重操作 4…

别的项目都有 awesome 仓库,RT-Thread 也要有!

awesome 仓库是 GitHub 上用于收集某个项目或者某个语言相关的优质内容的仓库&#xff0c;例如中间件、新闻资讯、网站等。 作为 RT-Thread 开发者&#xff0c;看到别的项目都有 awesome 仓库&#xff0c;我想 RT-Thread 也应该有&#xff01; 于是&#xff0c;我创建一个 aw…

【Python基础】装饰器(3848字)

文章目录 [toc]闭包什么是装饰器装饰器示例不使用装饰器语法使用装饰器语法 装饰器传参带参数的装饰器类装饰器魔术方法\__call__()类装饰器示例带参数类装饰器property装饰器分页操作商品价格操作 个人主页&#xff1a;丷从心 系列专栏&#xff1a;Python基础 学习指南&…

从0开始学python(七)

目录 前言 1 break、continue和pass函数 1.1 break 1.2 continue 1.3 pass 2、序列的索引及切片操作 2.1字符串的索引和切片 2.1.1 字符串索引 2.1.2 字符串切片 总结 前言 上一篇文章我们介绍了python中的循环结构&#xff0c;包括for和while的使用。本章接着往下讲。…

中仕公考:要报深圳教师编的考生们要注意了,往届、应届都可报!

2024上半年广东深圳市(区)属公办中小学教师招聘公告已发布 5月13日10:00至5月17日17:00报名&#xff0c;6月2日笔试。

基于SSM+Vue的物流管理系统

运行截图 获取方式 Gitee仓库

智慧公厕解决了什么问题?

在现代城市生活中&#xff0c;公厕是一个不可忽视的环节。然而&#xff0c;过去的公共厕所常常存在管理不力、环境脏乱差等问题&#xff0c;给人们的生活带来了许多不便和困扰。为了解决这些问题&#xff0c;智慧公厕应运而生&#xff0c;成为了公共厕所使用、运行、管理、养护…

Linux-进程管理类命令实训

实训1&#xff1a;进程查看&#xff0c;终止&#xff0c;挂起及暂停等操作 1.使用ps命令显示所有用户的进程 2.在后台使用cat命令。查看进程cat&#xff0c;并杀死进程 3.使用top命令只显示某一用户的进程。 4.执行命令cat&#xff0c;把Ctrlz挂起进程&#xff0c;输入jobs命令…

Excel办公技巧之下拉菜单

在日常办工中&#xff0c;经常需在单元格中输入特定的值&#xff0c;此时我们可以使用下拉菜单解决&#xff0c;输入错误和错误值&#xff0c;可以一劳永逸的解决固定数据输入问题。 使用Excel下拉菜单时&#xff0c;它在数据输入和验证方面发挥着重要作用通过点击单元格的下拉…

时序分解 | Matlab实现LMD局域均值分解

时序分解 | Matlab实现LMD局域均值分解 目录 时序分解 | Matlab实现LMD局域均值分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 时序分解 | Matlab实现LMD局域均值分解 Matlab语言 1.算法新颖小众&#xff0c;用的人很少&#xff0c;包含分解图 2.直接替换数据即可用…

iOS 安装cocoapds

注意 CocoaPods安装是基于ruby环境的&#xff0c;所以要安装CocoaPods先要安装Ruby环境&#xff0c;国内不能直接安装&#xff0c;只能通过VPN或淘宝的Ruby镜像来访问。 安装过程 gem sources --remove https://rubygems.org/ ** (注意是两个“-”&#xff0c;否则会移除失败) …