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 里命令ls -l 后,文件类型权限后面的数字啥意思比如-rw------ 1 root 11 02-05 05:14