通过strace工具可跟踪用户进程与Linux内核的调用交互,可看到其中的System Call(系统调用情况)情况;
安装strace: apt-get instsall strace
strace安装完成后执行:strace ls /data即可看到ls命令执行时所执行的系统调用情况,如下图所示:

程序执行后输出很多信息,有看到反复执行:openat与stat系统调用,但很多貌似和我们这次关心的没多大关系,过滤掉无关紧要的。
找到如下信息:
stat("/data", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
openat(AT_FDCWD, "/data", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
getdents64(3, /* 6 entries */, 32768) = 168
getdents64(3, /* 0 entries */, 32768) = 0
close(3)
write(1, "apache-flume-1.8.0 code deepin"..., 44apache-flume-1.8.0 code deepin-wine soft
) = 44
从着当中我们可以看到这么几个系统调用:stat、openat、fstat、getdents64、close;
此时可通过网络或系统的man指令了解着几个系统调用的具体作用;
stat:为获取文件状态系统调用
openat:将打开目录/data获取它的文件描述符,返回值3即为文件描述符;
fstat:获取文件描述符为3的文件状态
getdents64:获取文件描述符为3的目录项
close:关闭文件描述符3
write:在获取到文件目录信息后将参数2中的信息标准输出到控制台
通过上面的跟踪可看到此次ls命令执行过程中所发生的系统调用情况;通过使用这几个系统调用我们也可开发出类似ls的工具;
使用Go所开发的工具

FEATURED TAGS
Agent
大模型
ChatGPT
HA
智能家居
LSM
Linux
Dapr
开发
插件
Linux,虚拟机,ubuntu
缓存
图片
Flink
反射
内置函数
go
限流
大数据,Spark,Kafka
面向对象
镜像
docker,hadoop,镜像
kafka,java
求导
链式法则
微积分
源码
快照
协议
ZooKeeper
ZAB
tomcat
Hadoop
Spark
python
自动微分
React Native
React
Node.js
Android
Kafka
lambda
jvm
rasp
框架
SPI
asm
maven
idea
依赖管理
module
helm
逻辑回归
S函数
IOS
Fiddler
Andriod
Protocol Buffer
kryo
车联网,大数据,神经网络
字节序
最小二乘法
线性代数
线性回归
最大似然法
网络编程
大数据
树莓派
Raspbian
redis
海南
分析
人口
函数式编程
clojure
线程
并行
actor
红黑树
数组
动态数组
tcp
编程
markdown
二叉搜索树
AVL树
数据结构
golang
梯度下降法
skaffold
k8s
机器学习
选法
一致性
算法
分布式
paxos
Raft
一致性协议
引擎
容器
通信
微服务
Kubernetes
docker
文件系统
NFS
神经网络
神经元
深度学习
poi
反向传播
java
并发模型
并发
多线程
Scala