进程pid和ppid、进程的uid和euid、用户的uid和gid、文件的创建者和所有者的关系辨析
1、当我们创建用户时,由我们为新建用户命名和设置密码,同时系统会为我们所创建的用户名关联一个号,就是所谓的用户uid。同时我们还可以把这个用户放到某个用户群里,类似的,用户群也可以我们手工建立。如果建立用户时,不指明所建的用户属于哪个用户群,则系统会自动建立一个跟用户名同名的用户群。不管手工建立还是自动建立,系统都会为用户群关联一个号,这个号称之为gid。用户uid所属的群的gid就是用户的gid。
2、系统在运行每个进程时都会关联几个号,分别为pid、ppid、uid、euid。进程的pid为运行进程时,系统自动分配的,用于唯一标识此进程的一个整数。进程的ppid就是进程的父进程的pid。同时,系统还会为运行的进程分配一个进程uid和进程euid,用于判断文件的执行权限。一般情况下,进程uid和进程euid等于运行这个进程的用户uid。对于某文件,它的执行权限分成文件拥有者、文件拥有者同组、其他用户三组,从而分成三个级别。用户euid的作用就是于此。通过比较euid是属于文件的哪个组,从而决定属于文件执行权限的哪个级别,那么这个进程就拥有对该文件什么级别的执行权限。另外,如果可执行文件的setuid位有效,则运行这个可执行文件时,进程uid还是用户的uid,而进程euid则会暂时被修改成该可执行文件的所有者用户uid,直到该进程结束。一句话,在某个进程中,进程pid和ppid是唯一标识该进程的,它不会改变,而进程uid与运行该进程的用户uid相同,进程euid则与uid相同,只有运行设置了setuid位的文件时才会把euid改为这个文件的所有者用户uid。进程gid和进程egid则类似。
文件的属性:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
文件类型 setuid setgid sticky R W X R W X R W X
#define __S_IFMT 0170000 0开头表示是八进制,这个位决定了文件类型
#define __S_IFDIR 0040000 目录文件
#define __S_IFCHR 0020000 字符设备文件
。。。。。。。
#define S_IRUSR 文件的所有者可读
#define S_IWUSR 文件的所有者可写
#define S_IXUSR 文件的所有者可执行
#define S_IRGRP 文件的所有者的同组用户可读
#define S_IROTH 文件的其他用户可读
在shell中执行ls -l命令,则会显示如下:
drwxr-xr-x 2 root root 652 Jul 31 2006 /root/hello
d表示文件,后面几个表示文件所有者、同组用户、其他用户的执行权限,文件数量,文件所有者,文件创建者(注意,RHEL这项是文件所有群),文件大小,日期,文件所在路径
du -sh xxx可以测量xxx文件或目录所占内存大小。