文件系统 三大部分:
myls类似ls的实现 ,-l,-a,-i(当前文件的inode),-n;-l与-i 内容最长 区别 id与name的区别 /etc下面的passwd文件 以及group文件;
一、目录和文件 递归
1. 获取文件属性(stat fstat lstat)
state:通过文件路径获取属性,面对符号链接文件时获取的时目标文件的属性 fstate:通过文件描述符获取属性 lstate:面对符号链接文件时获取的是符号链接文件的属性
- cmd —长格式 -短格式 非选项传参
- 写myls
ls --all=ls -a ls -26a -26A命令选项 26个字母 26+26+10;- 想创建一个-a的文件 不可以直接
1. 写成touch -a;touch — -a; 前面的--表示当前的选项结束。2. 写路径touch tmp/-b` - stat get file status;

- stat 通过名字来做什么事情 填到buf空间;fstate通过文件描述符。。。;lstat 与链接规则?
stat 文件名结构体;stat 命令是由stat函数封装而来
2. 文件访问权限一 2
- st_mode是一个16位位图。用来表示文件类型 文件访问权限,及特殊权限位(u+s,g+s,t)
3. umask
- 作用:防止产生权限过松的文件 一 3 4 5 6
4.文件权限更改/管理 两个函数chmod、fchmod
5.粘住位
- t位
6. 文件系统:FAT(不开源), UFS(unix早期)
- 文件系统:文件或数据的存储和管理。
7.硬链接、软链接 符号链接
- 硬链接的特点:与目录项是同义词 且建立硬链接有限制,不能给分区/目录建立,符号链接优点:可跨分区,可以给目录建立
- link unlink remove rename(mv):改名字或路径,路径相同为改名,不同为改位置
8. 更改文件最后读写的时间 utime
- 更改 atime 和mtime;(读写)
- 没有 创建时间!
9.目录的创建和销毁
- mkdir
- rmdir(empty否则递归)
10.更改当前工作路径
- chidr (cd) fchdir 这两个函数·可以突破 chroot 假根技术 假装告诉进程是根目录;安全机制
- getcwd(pwd) 与ls命令的实现有关
- 用到的时候:守护进程 u盘 长时间跑的进程 放在根目录
读取目录内容
- glob():解析模式/通配符
目录流
- opendir()
- closedir()
- readdir()3
- rewinddir()
- seekdir()
- telldir()
二、系统数据文件和信息
-
/etc/passwd freebsd无该文件 →BDB 轻量数据库;HP UNIX →fs(26个目录). 标准出来和稀泥:getpwuid()
-
/etc/group getgrgid(); getgrnam();(类似上面)每个平台不一样 #使用技巧 开不同终端标签页,查man,log,运行界面,文件的打开/写;
-
/etc/shadow 查看权限 ls -l hash 是混淆不是加密 不可逆 若原串相同 所的串相同 防备管理员坚守自盗 ;加密对应解密。x%5=2,x有无数结果。 加密:安全 :攻击成本大于收益 安全?穷举:口令随机校验防止脚本攻击。
getspname(): char *crypt(const char *key,const char *salt): man 一下 在makefile中加入内容 -D XOPEN_SOURCE;加盐。$id$salt$两个要素共用一个参数。 getpass()应用密码学 blowfish作者 待查
-
时间戳 :time_t char * struct tm time_t 以秒为单位 。计算机喜欢大整数 人类喜欢字符串
date +%s
1758977056
petto@petto-laptop:~$ date
2025年 09月 27日 星期六 20:44:20 CST
不要归为人类… 程序员介于两者之间,喜欢结构体… 三足鼎立
不同类型中切换 time(): 内核 中取时间戳;get time in seconds localtime(); gmtime();格林威治时间 mktime(); strftime();
三、进程环境
-
main 函数
int main(int argc,char *argv[])以前是三个参数(环境变量) -
进程的终止(一字不差背诵5+3) 正常终止: 从main函数返回 return 0;返回值给父进程看。
echo $?打印上一条语句的执行状态。 调用exitman 3 exit调用_exit或_EXIT 最后一个线程从其启动例程返回 最后一个线程调用pthread_exit 异常终止: 调用abort 接到一个信号并终止 最后一个线程对其取消请求作出响应记忆是学习的一种方式atexit():钩子函数
-
命令行参数的分析
-
环境变量 本质:key=value,用export查看所有环境变量。把操作系统看成一个正在跑的程序,环境变量相当于它的全局变量。path保存所有二进制文件(shell 外部 磁盘里)路径。 程序员和管理员之间的约定。 environ(char**)
getenv();
setenv();
putenv();不好用,参数没有const修饰 -
c程序的存储空间布局 pmap(1)
-
库的概念 动态库 静态库 手工装载库:查看手册的例子。模块。插件。photoshop滤镜库。 void dlopen(const charfilename,int flag);要求的手工装载的库,打开方式,返回指针。 dlclose(); dlerror(); dlsymbol();
-
函数跳转 一层一层函数调用,若每一次调用的函数相同,就成了递归。比如说遍历一棵树,只想找到值然后返回,不想一层一层返回出去。 goto语句 不安全
- setjump(),设置跳转点
- longjump(),从哪一个位置跳回到跳转点。