Linux基础知识点

来源:互联网 发布:fake it til make it 编辑:程序博客网 时间:2024/06/06 18:16

1. rw-rw-r—表示的权限的意思

文件(包括目录)权限分为三类别,从左至右依次是:文件所属主的权限、文件所属所在用户组的权限和其他用户的权限。

2. 索引节点(inode)

理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫做”扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个”块”(block)。这种由多个扇区组成的”块”,是文件存取的最小单位。”块”的大小,最常见的是4KB,即连续八个 sector组成一个 block。文件数据都储存在”块”中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为”索引节点”[4]

linux中目录的数据块中的每一项中都包含了文件名和其对应的i节点。i节点记录了文件的属性以及该文件实际存储位置,即数据块号(block number),每一个block(常见大小4KB),通过inode可以实现文件的查找定位。i节点是linux中的,Unix中是v节点。基本上,inode包含的如下信息:
(1)文件的类型与访问权限;
(2)文件的所有者与组;
(3)文件的大小;
(4)文件的状态改变时间(ctime)、最后一次访问时间(atime)和最近修改时间(mtime);
(5)文件特殊属性,SUID,SGID和SBIT;
(6)文件内容的真正指向(pointer);

可以看出,通过命令ls -l列出来的文件信息均是通过文件的索引节点获取的。inode的数量与大小在格式化的时候就已经固定了,inode的特点有:
(1)每一个inode的大小均固定为128B;可以通过命令dumpe2fs来显示ext2/ext3/ext4文件系统信息。

[b3335@MIC test]$ dumpe2fs -h /dev/sda1 | grep "Inode size"dumpe2fs 1.41.12 (17-May-2010)Inode size:           128

(2)每个文件都只占用一个inode;

操作系统读取磁盘文件的流程是这样的:
(1)根据给定的文件的所在目录,获取该目录的数据实体,根据数据实体中的数据项,找到对应的文件的inode;
(2)根据文件inode,找到inodeTable;
(3)根据inodeTable中的对应关系,找到对应的block;
(4)读取文件。

大致的过程如下图所示:
这里写图片描述

有人会问,文件file所在的目录的数据实体又是如何找到的呢?其实可以这样理解,文件file所在的目录假如是Z,目录Z的上一层目录是Y,那么只要找到Y的数据实体就能拿知道Z的inode,也就找到了Z的数据实体。以此类推,所以只要知道最上面一层目录的数据实体也就能够知道给定的任意一个文件的数据。很显然,Linux 中最上面一层目录就是根目录,文件系统特别的记录了根目录的inode,所以可以找到根目录的数据实体,也就找到了根目录下任意一个文件或目录的inode,进而一层一层的深入,就可以找到给定的文件的inode,也就找到了文件的数据块block,也就获得了文件的真实的内容。

上面我本人参考了《鸟哥的Linux私房菜》连接文件部分推理出来的,未参考权威的著作和文件系统源码,所以仅供参考。也有网友提出说,获取文件的inode是根据一个映射表来完成的,请参考图解linux中Inode-分析Linux如何通过Inode读取磁盘,因为他也没有给出权威的参考资料,只能参考一下。仔细一想,文件系统也许会真的这么做,将文件与其inode缓存在一个映射表中,以提高获取inode的速度,进一步提高文件的查找速度。

3. Linux系统进程类型有

交互进程 ;批处理进程 ;监控进程(守护进程)。

4. IPC进程间通信(Inter-Process Communication)

指多个进程之间相互通信,交换信息的方法。

5. System V,BSD,POSIX是什么

System V是Unix操作系统最早的商业发行版之一,后衍生为Sun公司的Solaris。

BSD Unix 是在System V基础上开发出的Unix版本,后衍生为apple公司的MAC OS。

POSIX是Portable Operating System Interface of Unix的缩写。是一个Unix操作系统接口的标准规范。是IEEE为要在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称,其正式称呼为IEEE 1003,而国际标准名称为ISO/IEC 9945。

6. Linux下文件名字体颜色不同的含义

浅蓝色:表示链接文件;
灰色:表示其他文件;
绿色:表示可执行文件;
红色:表示压缩文件;
蓝色:表示目录;
红色闪烁:表示链接的文件有问题了;
黄色:表示设备文件,包括block,char,fifo。

7.Linux中格式控制符”%hhx”的含义

一个h表示short,两个h表示short short,所以%hhx表示以十六进制输出unsigned char,%hx以十六进制输出unsigned short int。具体可参见printf()详解之终极无惑。

8.文件特殊权限SUID,SGID,SBIT

Linux下的文件的三大重要权限分别是r、w、x(读、写、执行)。除此之外,还有特殊权限SUID,SGID,SBIT。

8.1SUID

SUID的全称是 Set User ID,使用ls /usr/bin/passwd命令你将会发现特殊的文件权限SUID。

命令:ll -d /usr/bin/passwd输出:-rwsr-xr-x. 1 root root 30768 Feb 17  2012 /usr/bin/passwd

其中passwd的属主root拥有的权限是rws,这个s就是权限SUID。该权限的作用就是让非属主用户在执行可执行文件时拥有属主的权限。例如,在Linux中,所有的账号密码都记录在/etc/shadow这个文件里面,这个文件的权限为---------- 1 root root,可见root没有读写权限,但是为什么root实际上可以读取和修改shadow呢?因为Linux的权限管理机制不能够限制神一样的root。从shadow的权限列表可以看出,root组用户和其他用户对shadow没有读写权限的,也就是只有root才能进行强制的读写操作。但是实际上普通用户是可以自行修改自己的密码的,这就是为什么呢?因为/usr/bin/passwd的属主root对其权限是rws,而且其他用户的使用权限为r-x,也就是说,别人有执行这个passwd的权限,在运行passwd时会暂时拥有passwd拥有者也就是root的权限,但前提是必须要有passwd的执行权限。这个就是linux中特有的SUID权限机制。

注意,
(1)SUID只能用于可执行文件,不能作用于目录。同时,也不能用于shell script上面。因为shell脚本将调用很多可执行文件,所以SUID权限,还是要看shell script中调用的命令,而不是shell script本身。
(2)如果在浏览文件时,发现文件所有者权限的第三位是一个大写的“S”则表明该文件的SUID属性无效,比如将SUID属性给一个没有执行权限的文件。

8.2SGID

SGID的全称是Set Group ID。当s标志在文件所有者的x项出现为SUID,那么当s在用户组的x项时则称为SGID。如下面locate文件的权限列表。

ls -l /usr/bin/locate-rwx--s--x. 1 root slocate 38464 Sep 24  2012 /usr/bin/locate

SGID与SUID非常相似,以locate命令为例,如果普通用户在执行locate命令时,可以临时获得locate命令的用户组权限。locate是查询/var/lib/mlocate/mlocate.db这个文件的内容,mlocate.db的权限如下:

ls -l /var/lib/mlocate/mlocate.db-rw-r----- 1 root slocate 52603590 Nov  8 03:20 /var/lib/mlocate/mlocate.db

因此mlocate.db的用户组slocate 对其拥有读权限,所以其他用户在执行locate时,可以以用户组slocate 的读权限来读取mlocate.db。

SGID与SUID不同的是,SGID也可以作用于目录,这也是一种常见用途。当一个目录设置了SGID权限后,将具有如下功能:
(1)用户进入该目录后,其有效用户组(effective group)将会变成该目录的用户组;
(2)如果用户在此目录下具有w权限(可以创建文件),则用户所创建的文件或者子目录的用户组与此目录的用户组相同。

注意,如果在浏览文件时,发现用户组权限第三位是一个大写的“S”则表明该文件的SGID属性无效,比如给一个没有不可执行的文件设置SGID属性。

8.3SBIT

SBIT的全称是Sticky Bit(粘滞位)。SBIT目前只针对目录有效,其作用的当目录拥有SBIT权限时,在该目录中的所有文件或子目录无论是什么权限,只有文件或子目录所有者和root能删除。

这个权限在共享过程中非常实用,共享的目录任何人都有读写的权利,但是目录下的文件只有所有者才能删除该文件。举例来说,我们的 /tmp 本身的权限是[drwxrwxrwt],在这样的权限下,任何人都可以在 /tmp内新增、修改文件,但仅有该文件/目录的创建者与 root 能够删除[1]

注意,同样的,如果目录的其他用户的权限的执行位是T,则表示SBIT权限无效。发生的情况是权限的执行位不是x。

8.4SUID,SGID,SBIT权限的设置

可以通过数字方式来设置这三个特殊权限。三个权限对应的数字分别是:

SUID:4SGID:2SBIT:1

假设要为一个文件设置权限”-rwsr-xr-x”时,由于s在在所有者的权限位上,所以是SUID,因此在原先的755之前加上4即可,即使用chmod 4755 filename来设置。

此外,也可以通过符号法来设置三个特殊权限,其中SUID为u+s,SGID为g+s,SBIT则是o+t,来看看如下的范例:

chmod u=rwxs,go=x test;ls -l test-rws--x--x 1 b3335 b3335 0 Nov  9 10:44 lvlv

这里给出简略的小结,如下表:
这里写图片描述
如果本来在x位上设置了x的时候,设置这些位将会显示小写的(s,s,t),否则会显示为大写的(S,S,T),即无效。这三位如果转化为8进制表示的话,分别对应 的是4(SUID),2(SGID),1(sticky bit),0(什么也不是)[2]

关于目录的rwx的权限的理解。
目录的读权限位意味着可以列出其中的内容;写权限位意味着可以在该目录中创建文件,如果不希望其他用户在你的目录中创建文件,可以取消相应的写权限位;执行权限位则意味着可以搜索、进入该目录,以及删除目录中的文件。因此在创建目录的时候一般都是具有可执行权限。

9.硬链接与软链接

9.1为什么不能给目录建立硬链接

硬链接有两个限制,一个是不能跨文件系统,一个是不能连接到目录。硬链接仅能在单一文件系统上面进行,所以不能跨文件系统。如果对目录建立硬链接,比如将/etc建立一个硬链接/etc_hd时,那么在/etc_hd的目录时,那么在/etc_hd下面的文件名要创建硬链接,而不是仅连接到/etc_hd与/etc而已。并且未来如果需要在/etc_hd下面建立新文件时,连带的/etc下面的数据又要建立一次hard link,因此会降低系统的效率。所以目前hard link对于目录暂时不支持连接。

下面分别在/etc和/root目录下简历源文件lvlv.txt和硬链接lvlv_hd.txt,并产看文件属性。

//创建硬链接[b3335@MIC root]$ ln /etc/lvlv.txt lvlv_hd.txt //列出文件属性[b3335@MIC etc]$ ll -i7792474 -rw---x--x 2 b3335 b3335   22 Nov  9 21:05 lvlv.txt[b3335@MIC root]$ ll -i7792474 -rw---x--x 2 b3335 b3335   22 Nov  9 21:05 lvlv_hd.txt

从上面可以看出硬链接的inode与源文件lvlv.txt相同,其它信息完全相同。

下面贴一张硬链接的示意图。
这里写图片描述

图示的内容表示目录/root下的硬链接lvlv_hd.txt在与/etc下文件lvlv.txt通过inode指向同一个文件内容。目录的数据实体中记录着每一个文件与该文件的inode节点地址。可见,硬链接本质上是文件的另一个别名。

说到linux的硬链接,不得不说符号链接(symbolic link),等同于windows下的文件的快捷方式。与硬链接不同的是软链接会创立一个独立的文件,该文件有自己的inode,但这个文件会让数据的读取指向它连接的那个文件。由于只是利用了文件来作为指向的操作,所以当源文件被删除后软链接文件就会提示“打不开”,实际是找不到被删除的源文件了。

下面创建软链接并查看软链接的属性:

//创建软链接[b3335@MIC root]$ ln -s /etc/lvlv.txt lvlv_sb.txt//查看文件属性[b3335@MIC etc]$ ll -i 7792474 -rw---x--x 2 b3335 b3335   22 Nov  9 21:05 lvlv.txt[b3335@MIC root]$ ll -i 7792478 lrwxrwxrwx  1 b3335 b3335   13 Nov 10 15:23 lvlv_sb.txt -> /etc/lvlv.txt

可以看出,软链接的inode节点与源文件lvlv.txt不同,且软链接的大小刚好等于字符串”/etc/lvlv.txt”的长度13,可见软链接是单独的一个新的文件,文件的内容就是指向的文件的路径。

下面给出软链接的示意图,同样以文件lvlv.txt为例。

这里写图片描述

也许有人会问图中目录/etc和/root的inode节点是如何找到的,请大家参考本文的第二节:索引节点(inode)。


参考文献

[1]鸟哥.鸟哥的私房菜基础学习篇第三版[M].北京:人民邮电出版社,2010:183-184
[2]linux文件权限学习 包括 特殊权限
[3]图解linux中Inode-分析Linux如何通过Inode读取磁盘
[4]linux 索引节点 inode 详解

1 0