02 ls 命令的具体实现

Posted 蓝风9

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了02 ls 命令的具体实现相关的知识,希望对你有一定的参考价值。

前言

// 呵呵 昨天的有点敷衍, 我总不能说那都不是细节吧? 

呵呵 这个命令 应该是 linux 使用者 基本上都会使用到的吧?

呵呵 我们这里主要是 看一下 这个命令是如何工作的

main 中主要是参数处理, 循环各个路径 输出各个路径的信息

print_dir 中主要是遍历当前路径下各个 子文件(夹), 具体的业务委托给 gobble_file, 采集各个 子文件(夹) 的相关信息

gobble_file 主要是使用 lstat/stat 命令获取各个 文件(夹) 的相关元数据

print_current_files 主要是输出各个 子文件(夹) 的相关信息, 这里这涉及到具体的输出格式, 我们这里以 ls -l 为例

print_long_format 的输出是常见的 ll 输出的处理, 输出 fmode, nlink, user, group, size, mtime, fileName

基于 linux-4.4.0 + coreutils-8.25

调试基于命令 "ls -l /"

main

可以看到的是 ls 后面的路径只有一个 "/" 

这里是调用 print_dir 来输出 "/" 下面的各个 子文件(夹) 的相关信息 

print_dir 

基于 opendir, readdir 等相关 api 遍历 "/" 下面的各个 子文件(夹) 

调用 gobble_file 来获取各个 子文件(夹) 的相关元数据 

gobble_file 

通过 stat/lstat 相关 api 来获取当前 文件(夹) 的元数据的信息 

print_current_files 

根据 输出格式 进行不同的输出, 我们这里是 print_long_format 

print_long_format

 函数内容较长, 这里不贴完了 

使用 buf 向 stdout 输出 fmode, nlink 

user, group 需要额外的系统调用来获取 uid, gid 对应的名称, 直接使用 stdout 输出 

使用 buf 向 stdout 输出 size, mtime, fileName

 

呵呵 这些内置的命令 是否也没有那么神秘? 

当然 这里仅仅是剖析的核心脉络, 真正的实现细节 还有很多设计 

完 

以上是关于02 ls 命令的具体实现的主要内容,如果未能解决你的问题,请参考以下文章

linux中ls命令会显示全部文件和文件夹,有啥办法只显示含特定字符的文件和文件夹

2019-2020-1 20175311 《信息安全系统设计基础》 ls学习实现与改进

具体解释linux文件处理的的经常使用命令

linux 命令 ls -1 无没显示详细文件列表

如何学习linux命令之ls的使用

linux 里命令ls -l 后,文件类型权限后面的数字啥意思比如-rw------ 1 root 11 02-05 05:14