嵌入式 Linux入 门第二课, linux 文件系统、文件类型及权限管理。...... 矜辰所致
前言
一、Linux 文件属性
1.1 Linux 文件类型
1.2 Linux 文件权限及修改
二、Linux 用户系统
2.1 Linux 的用户
2.2 Linux 的用户组
2.3 文件归属者修改命令
三、Linux 文件系统简介
3.1 Linux文件系统类型
结语
前言
在上文我们说过:在Linux中一切接文件。既然所有东西都是文件,那么如何区分不同的东西?
本文我们就来学习说明一下 Linux 文件系统 以及对文件的权限管理 。
在文章中我们会使用一些 shell 命令进行操作,虽然系列文章还没有讲到 Shell 命令,但是作为嵌入式工程师,多多少少也得知道是什么一个东西,就像 Windows 有 CMD 命令一样,玩 RT-Thread 的时候也会使用到 Shell 命令,即便这些你都不知道,在下一篇 Linux 入门会记录说明一些常用的 Linux Shell 命令,本文的命令也可以作为学习了解。
嵌入式 Linux 入门系列博文:嵌入式 Linux 入门(一、Linux 基本介绍及文件结构)
一、Linux 文件属性
我们进入到 ubuntu 系统,打开终端,默认是进入到我们自己的用户目录下面,我们使用 ls -l (查看该目录下所有文件的详细信息)命令,查看文件详情,如下图:
在这里插入图片描述
在上面图片中的目录详情,我们先整体来说明一下各部分的含义:
在这里插入图片描述
我们主要需要了解文件权限的含义:
文件类型后面的9个字符以3个为一组,第一组表示“文件所有者的权限”,第二组表示“用户组的权限”,第三组表示“其他非本用户组的权限”。(用户和用户组的知识,本文后面会有对应的说明。)
每组都是 rwx 的组合,其中 r 代表可读,w 代表可写,x 代表可执行,- 代表没有这个权限。
在这里插入图片描述1.1 Linux 文件类型
在Linux 中,一共有7种文件类型,如下表格:
字母类型说明-普通文件普通文件包括 文档图片音乐等;纯文本文件(ASCII)、二进制文件(binary)、数据格式的文件(data)、各种压缩文件d目录文件目录,可用 cd 命令进入c字符设备文件linux 驱动里面的字符设备驱动,比如 串行设备,音频设备,键盘、鼠标等等b块设备文件存储设备驱动,比如硬盘,U盘等p管道文件FIFO也是一种特殊的文件类型,它主要目的是解决多个程序同时存取一个文件所造成的错误l链接文件类似Windows下面的快捷方式s套接字文件这类文件通常用在网络数据连接。可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信
我们在上面文章的一些图片中已经看到过 普通文件,和目录文件。
那么我们通过上一篇文章嵌入式 Linux 入门(一、Linux 基本介绍及文件结构)应该可以知道,在目录 /dev 中应该有很多与设备有关的文件,如下图:
在这里插入图片描述
字符设备,块设备,还有连接文件都看到了。
还有一点可以说明一下, 我们后面学习 Linux 驱动开发基本都是与 字符设备文件 和块设备文件 打交道。
文件类型这个基本的知识,也好理解,没有什么复杂的,我们知道了就可以。
1.2 Linux 文件权限及修改
在上面我们讲过文件的 3 种读写权限:读(r)、写(w)和执行(x)。
除了用 r、w 和 x 表示以外,我们也可以使用二进制数表示,三种权限就可以使用 3 位二进制数来表示,一种权限对应一个二进制位,如果该位为1就表示具备此权限,如果该位为 0就表示没不具备此权限:那么组合一下,所有的文件共有 8 种不同的权限组合:
在这里插入图片描述
在Linux 系统中,使用命令“chmod”修改一个文件的权限。
我们经常看到前辈们使用的一条指令为 :chmod 777 xxxx(文件名字),意思就是把这个文件的权限全面开放,对于初学者来说,首先记住这条指令就可以了。
但是要记住,系统本身的文件,千万不要瞎修改,可以在自己的账户下随便新建一个文件作为测试,自己修改看看。
比如,我们做个简单的测试,如下图:
在这里插入图片描述
在我们以后使用 Linux 的时候,经常会遇到权限不够的问题,我们一般都会在命令前加上一个 sudo ,比如下图测试:
在这里插入图片描述
上图中,我用自己的 qzh 账户尝试在根目录 “/” 创建文件 test,给出权限不够的提示。只有 root用户才能在根目录“/”下创建文件 , 所以使用了 sudo 命令暂时获取管理员用户权限。
当然接下来的删除,也是需要 sudo 命令的:
在这里插入图片描述
上面sudo 这个命令以后需要经常使用,需要记住。
二、Linux 用户系统
在上文说明 Linux 文件的设备类型的时候,有提到用户权限,用户组权限,和其他用户权限。
那么我们需要明白什么是用户?什么是用户组?
2.1 Linux 的用户Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,
都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;
另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
每个用户账号都拥有一个唯一的用户名和各自的口令。
用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。
其实在我们使用 Windows 系统的时候,也有用户的概念,只是日常应用很少创建多个用户,切换来切换去,可能相对多的时候,也只是右键 “以管理员身份运行” 某个程序。
在安装 Ubuntu系统的时候被要求创建一个账户,当我们创建好账号以后,系统会在目录/home 下以该用户名创建一个文件夹,所有与该用户有关的文件都会被存储在这个文件文件夹中。同样的,创建其它用户账号的时候也会在目录/home 下生成一个文件夹来存储该用户的文件,如下图:
在这里插入图片描述
Linux 的用户分类:
Linux 用户类型分为以下 3类:
管理员:root 用户,系统管理员,具有所有权限。
系统用户:管理系统运行服务,系统中系统服务由不同用户运行,更加安全,默认被限制登录系统。
普通用户:用于日常工作而不能管理系统的普通用户,只有一部分权限。
在我们使用的 Ubuntu 中,上面的 qzh 用户属于普通用户,但是他是按照系统时候创建的用户,其权限比后面创建的用户大一点,但是没有 root 用户权限大。
这个地方初次创建的用户,比后面创建的普通用户的区别暂时没有必要研究,因为后期我们在使用过程中基本都是在初次创建的用户下面,遇到权限问题可以临时获取管理员,这里做个了解即可。
UID
每个用户都有一个 ID 号,称为 UID,操作系统通过 UID 来识别是哪个用户,用户相关信息可以在文件 /etc/passwd 查看到 :每行用户信息都以 “:” 作为分隔符,划分为7个字段,每个字段所表示的含义如下:
用户名:密码:UID:GID:描述性信息:主目录:默认Shell
每一行都是一个用户的信息,意思如下图解释:
上面第二个密码“x” ,在以前版本的 linux 系统中存放着加密后的用户口令,虽然这个字段存放的只是用户口令的加密串,但是由于 /etc/passwd 文件对所有用户都可读,所以这仍是一个安全隐患。因此,现在许多Linux 版本都使用了shadow技术,把 真正加密后的用户口令存放到 /etc/shadow 文件中 ,而在 /etc/passwd 文件的口令字段中只存放一个特殊的字符,例如用“x”或者“*”来表示。
那么结合这个文件,我们可以再次说明一下 Linux 系统中的几个用户 UID:
超级用户 UID 0 :
系统用户 UID 1-999 :
普通用户 UID 1000以上:
特殊的来宾账号:nobody这个的帐号UID为65534,这个用户的权限会进一步的受到限制,一般用于实现来宾帐号。
系统是根据 UID 来认定用户的权限而不是名字。如果把自己创建的用户 UID 改成 0 ,那么系统登录会把用户视为管理员用户。
2.2 Linux 的用户组
什么是用户组?
用户组是具有相同特征用户的逻辑集合, 有时我们需要让多个用户具有相同的权限,比如查看、修改某一个文件的权限,一种方法是分别对多个用户进行文件访问授权,如果有10个用户的话,就需要授权10次,显然这种方法不太合理;另一种方法是 建立一个组,让这个组具有查看、修改此文件的权限,然后将所有需要访问此文件的用户放入这个组中,那么所有用户就具有了和组一样的权限,这就是用户组。
将用户分组是Linux 系统中对用户进行管理及控制访问权限的一种手段,通过定义用户组,在很大程度上简化了管理工作。
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。每个用户在被创建时均会创建一个默认组(其GID与UID相同,叫作基本组或初始组),而后加入的组叫作扩展组或附加组。
GID
GID 是用户组的编号,可以将多个用户加入到某个组中,方便指派任务或工作。和 UID 一样也是有一个对应的文件保存信息,用户组名和GID相关信息可以在文件 /etc/group 查看到:
在这里插入图片描述
每行的用户组的信息都以 “:” 作为分割符,划分为4个字段,每个字段所表示的含义如下:
组名:密码:GID:该用户组中的用户列表
每一行都是一个用户组的信息,组中的用户列表只包括附加用户,如果该组是某个用户的初始组,则这个用户不会出现在这个用户列表中,如下图:
2.3 文件归属者修改命令
相对于修改权限来说,修改归属者没那么常用,简单了解一下。
使用命令“chown”修改一个文件的所属者和所属:
chown [参数] [用户名.<组名>] [文件名/目录]
chown [-cfhvR] [--help] [--version] user[:group] file...
简单测试如图:
在这里插入图片描述
更多有关用户和用户组的管理可以查看如下链接:Linux 用户和用户组管理
一些常用的指令我们下一篇讲 Shell 命令的时候都会有说明。
三、Linux 文件系统简介
实际上,还需要说明一个文件系统的概念可以说明,文件系统用来组织计算机的文件和资料的系统。
此部分对于初学者,了解一下就好,后面如果真的遇到文件类型的问题再看一篇才好理解。
操作系统就是处理各种数据的,这些数据在硬盘上就是二进制,我们想要看懂这些数据,要有一个翻译器,将这些二进制的数据还原为人类能看懂的文件形式,这个工作就是由文件系统来完成的,文件系统的目的就是实现数据的查询和存储。
由于使用场合、使用环境的不同,Linux有多种文件系统,不同的文件系统支持不同的体系。文件系统是管理数据的,而可以存储数据的物理设备有硬盘、U 盘、SD卡、NAND FLASH、NOR FLASH、网络存储设备等。不同的存储设备其物理结构不同,不同的物理结构就需要不同的文件系统去管理,比如管理 NAND FLASH 的话使用 YAFFS 文件系统,管理硬盘、SD 卡的话就是 ext 文件系统等等。
比如在我们使用 windows 的时候,格式化一个 U 盘,就需要选择文件系统,如下图:
在这里插入图片描述3.1 Linux文件系统类型
和 Windows 类似,在 Windows 下有 FAT32、NTFS 和exFAT 这样的文件系统,在Linux下又有哪些文件系统呢,Linux 下的文件系统主要有 ext2、ext3、ext4 等文件系统。
Linux 还支持其他的 UNIX文件系统,比如XFS、JFS、UFS 等,也支持Windows的 FAT文件系统和网络文件系统 NFS等。
ext2具有极快的速度和极小的CPU占用率,可用于硬盘和移动存储设备,ext2是Linux早期的文件系统,但是随着技术的发展 ext2文件系统已经不推荐使用了。
ext3增加日志功能,可回溯追踪,完全兼容 ext2文件系统,ext3支持大文件;
ext4ext4 相比与ext3提供了更佳的性能和可靠性,并且功能更丰富,ext4 向下兼容 ext3 和 ext2,因此可以将 ext2 和 ext3 挂载为 ext4。 日志式文件系统,支持1EB(1024*1024TB),最大单文件16TB,支持连续写入可减少文件碎片。
在终端中输入如下命令可查询当前磁盘挂载的文件系统:
df -T –h
比如查询我安装的 Ubuntu 使用的哪个版本的文件系统如下图:
在这里插入图片描述
上图中最后一个项目是“挂载点”,在 Linux 下创建一个分区并且格式化好以后我们要将其“挂载”到一个目录下才能访问这个分区,这个我们后期会有对应介绍。
结语
本文我们认识了 Linux 的 7 种文件类型,知道如何查看文件类型,以及对文件的权限管理方式。
然后还任何了一下 Linux 的用户系统,知道了 用户 与 用户组的概念,记住两个概念 UID 和 GID: 用户ID 和 用户组 ID。
然后知道了通过两个文件 /etc/passwd 和 /etc/group 可以查看当前系统下所有用户 和用户组的信息。
最后还简单的介绍了一下 Linux 的文件系统。
这些都是 Linux 的基础知识,内容简单不难理解,但是是学习嵌入式 Linux 入门的必须要知道了解的内容,在下一篇文章,我们开始学习常用的 Shell 命令。
本文就到这里,谢谢大家!