1 /etc/passwd 各个字段意思
linux 系统用户信息 /etc/passwd 这个口令文件 由7个以冒号分割的字段组成,它们是:用户名,加密口令,用户ID,用户组ID,注释字段,家目录,shell程序。如
work:x:501:501::/home/work:/bin/bash
当我们了解到历史缘由后,会更好地理解采用某种特定实现技术的原因。
当一个文件具有多个硬连接时,很难保持多个属性副本之间的同步。
现在的文件名 至少支持255个字符。
以斜线开头的路径是 绝对路径,否则是相对路径。
Linux 中 cc 通常链接至gcc /usr/bin/cc -> gcc
程序内可以使用chdir() 改变其工作目录 Python 中为 os.chdir('/home/work')
相对目录 和 绝对目录
登陆时的 工作目录是其实目录 ,是又口令文件/etc/passwd 中的相应用户的登陆项获得。
pid = fork ()
pid 等于 0 的是子进程
fork向父进程 返回 新进程的PID,对子进程则返回 0 。fork()被调用一次 ,但是返回两次。
调用exec函数时,新进程会替换原来的进程。 用这种方式来启动一个程序。spawn
父进程需要等待子进程。waitpid(), 并获取子进程的终止状态。
运行一个程序,就要考虑给它传参。
线程和线程ID
通常一个进程只有一个控制线程 。
线程也用ID表示,但是线程ID只在 进程内起作用 。
在进程模型建立很久之后,线程模型才被引用到UNIX系统中。
函数出错一般返回一个 负值或者一个空指针
errno 如果没有出错,其值不会被另一个例程清楚,因此仅当在出错时候才去检查errno的值, 因为errno中可能是某次出错的值。
errno的所有常量都不为0
#include <string.h>
char * strerror( int errnum) ;
#include <stdio.h>
void perror( const char *msg);
改善程序的健壮性:这个问题本质是 ,程序如果出错了,是让程序自己去处理,还是由人工来处理。 如果全部错误都交给程序去处理,那么程序就会变得非常复杂,可能出错判断 远远多于了 正常的业务, 比如 路由器这样的 程序。 因为这类设备 安装一次 就再 不维护了。
然而对于互联网的程序来说,如果人每天上班都能维护, 就可以大大减轻程序 的负担, 交出一些 责任由人去定期检查 。 这是人力成本的上升 。 最终 这是一个权衡的事情 。但是 程序的逻辑再严密,还是要必要的人力检查 。在互联网业务中。
用户ID为0的是 root 用户
Max OS 禁用超级用户,需要开启。
组文件 /etc/group
附加组ID, 一个用户可允许加入之多16个组。
使用kill 函数发送信号, 我们必须是该进程的所有者 或者 超级用户 。
时间值 分为 日历时间 和 进程时间
日历时间是 到 1970年的秒数
进程时间 包括 时钟时间 , 用户CPU时间, 系统CPU时间。 用time 来取得。
Linux大约提供了250个 系统调用
必要时,我们可以替换库函数,但却不能替换 系统调用。
用户代码 -- malloc (存储分配函数 )-- sbrk (系统调用) -- 内核
应用程序 调用 库函数 + 系统调用 ,很多库函数都是调用 系统调用 。
系统调用通常提供一个最小接口 ,而库函数 提供比较复杂的功能 。
进程控制系统调用 通常由用户 直接调用 。
好书的特点是 看起来不吃力。