Linux基础知识点

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

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

对于目录来说, 读:可以查看目录下的内容; 写:可修改目录下的内容(新增或删除文件); 执行:可将目录作为当前工作目录(进入该目录)。

实际测试:子目录有写权限,父目录无写权限可以创建文件吗?答案是可以

2. 索引节点(inode)

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

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

8.4SUID,SGID,SBIT权限的设置

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

SUID:4
SGID:2
SBIT: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]^{[2]}。

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

9.硬链接与软链接

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

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

9.2硬链接(hard link)

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

//创建硬链接
[b3335@MIC root]$ ln /etc/lvlv.txt lvlv_hd.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
7792474 -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节点地址。可见,硬链接本质上是文件的另一个别名。

9.3软链接(symbolic link)

说到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)。

10.查看Linux系统版本

方法一:

lsb_release -a

命令解释: lsb_release -a :FSG(Free Standards Group)组织开发的LSB (Linux Standard Base)标准的一个命令,用来查看linux兼容性的发行版信息。这个命令适用于所有的linux,包括Redhat、SUSE、Ubuntu等发行版。

方法二:

cat /etc/issue

方法三: 如果Linux是RedHat Linux可使用如下命令:

/etc/redhat-release

参考文献

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏吴伟祥

Linux 文件与目录管理 转

pwd是Print Working Directory的缩写,也就是显示目前所在目录的命令。

13640
来自专栏一个会写诗的程序员的博客

Cookie 和 Session 机制原理分析 & 区别对比

Web application servers are generally "stateless":

17920
来自专栏散尽浮华

centos6下redis cluster集群部署过程

一般来说,redis主从和mysql主从目的差不多,但redis主从配置很简单,主要在从节点配置文件指定主节点ip和端口,比如:slaveof 192.168....

602100
来自专栏腾讯云Elasticsearch Service

logstash input插件开发

logstash作为一个数据管道中间件,支持对各种类型数据的采集与转换,并将数据发送到各种类型的存储库,比如实现消费kafka数据并且写入到Elasticsea...

80140
来自专栏北京马哥教育

精通Linux常用的100+命令大全万字详解长文(珍藏版)

运维行业正在变革?推荐阅读:30万年薪Linux运维工程师成长魔法 Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作、文件存取、目录操作、...

647100
来自专栏安恒网络空间安全讲武堂

IAT Hook 技术分析

来源:https://pentest.blog/offensive-iat-hooking/

24820
来自专栏Huramkin的归档库

ps命令常见用法

Linux中的ps命令用来列出系统中当前运行的那些进程,查看它们的运行状态,占用的资源

19910
来自专栏ionic3+

【Weex一瞥笔记】

安装结束后你可以直接使用 weex 命令验证是否安装成功,它会显示 weex 命令行工具各参数:

11630
来自专栏bboysoul

在树莓派上搭建使用gitlab

gitlab是一个代码托管平台,因为我的树莓派系统是安装在128G的u盘上的,用来放电影太小,但是空着就是空着了,所以还不如再搭建一个gitlab服务来存放自己...

30820
来自专栏老司机的简书

XCode打framework包、cocoapods库制作及Pods库的二进制切换

近来公司的公共库里有点小问题,但是公共库打成了framework,即使手上有源码也很难调试。网上百度了很多方法,有临时方法,也有比较好的方案,写一篇博客记录下来...

30820

扫码关注云+社区

领取腾讯云代金券