0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

嵌入式Linux入门(二、Linux文件系统、文件类型及权限管理)

矜辰所致 来源:矜辰所致 作者:矜辰所致 2023-06-20 11:44 次阅读
嵌入式 Linux入 门第二课, linux 文件系统、文件类型及权限管理。  ...... 矜辰所致

前言

在上文我们说过:在Linux中一切接文件。 既然所有东西都是文件,那么如何区分不同的东西?

本文我们就来学习说明一下 Linux 文件系统 以及对文件的权限管理 。

在文章中我们会使用一些 shell 命令进行操作,虽然系列文章还没有讲到 Shell 命令,但是作为嵌入式工程师,多多少少也得知道是什么一个东西,就像 Windows 有 CMD 命令一样,玩 RT-Thread 的时候也会使用到 Shell 命令,即便这些你都不知道,在下一篇 Linux 入门会记录说明一些常用的 Linux Shell 命令,本文的命令也可以作为学习了解。

嵌入式 Linux 入门系列博文:

嵌入式 Linux 入门(一、Linux 基本介绍及文件结构)

.

我是矜辰所致,全网同名,尽量用心写好每一系列文章,不浮夸,不将就,认真对待学知识的我们,矜辰所致,金石为开!

一、Linux 文件属性

我们进入到 ubuntu 系统,打开终端,默认是进入到我们自己的用户目录下面,我们使用 ls -l (查看该目录下所有文件的详细信息)命令,查看文件详情,如下图:

图片.png

在上面图片中的目录详情,我们先整体来说明一下各部分的含义:

图片.png

我们主要需要了解文件权限的含义:

文件类型后面的9个字符以3个为一组,第一组表示“文件所有者的权限”,第二组表示“用户组的权限”,第三组表示“其他非本用户组的权限”。(用户和用户组的知识,本文后面会有对应的说明。)

每组都是 rwx 的组合,其中 r 代表可读,w 代表可写,x 代表可执行,- 代表没有这个权限。

图片.png

1.1 Linux 文件类型

在Linux 中,一共有7种文件类型,如下表格:

字母 类型 说明
- 普通文件 普通文件包括 文档图片音乐等;纯文本文件(ASCII)、二进制文件(binary)、数据格式的文件(data)、各种压缩文件
d 目录文件 目录,可用 cd 命令进入
c 字符设备文件 linux 驱动里面的字符设备驱动,比如 串行设备,音频设备,键盘、鼠标等等
b 块设备文件 存储设备驱动,比如硬盘,U盘等
p 管道文件 FIFO也是一种特殊的文件类型,它主要目的是解决多个程序同时存取一个文件所造成的错误
l 链接文件 类似Windows下面的快捷方式
s 套接字文件 这类文件通常用在网络数据连接。可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信

我们在上面文章的一些图片中已经看到过 普通文件,和目录文件。

那么我们通过上一篇文章嵌入式 Linux 入门(一、Linux 基本介绍及文件结构)应该可以知道,在目录 /dev 中应该有很多与设备有关的文件,如下图:

图片.png

字符设备,块设备,还有连接文件都看到了。

还有一点可以说明一下, 我们后面学习 Linux 驱动开发基本都是与 字符设备文件 和块设备文件 打交道。

文件类型这个基本的知识,也好理解,没有什么复杂的,我们知道了就可以。

1.2 Linux 文件权限及修改

在上面我们讲过文件的 3 种读写权限:读(r)、写(w)和执行(x)。

除了用 r、w 和 x 表示以外,我们也可以使用二进制数表示,三种权限就可以使用 3 位二进制数来表示,一种权限对应一个二进制位,如果该位为1就表示具备此权限,如果该位为 0就表示没不具备此权限:

图片.png

那么组合一下,所有的文件共有 8 种不同的权限组合:

图片.png

在Linux 系统中,使用命令“chmod”修改一个文件的权限。

我们经常看到前辈们使用的一条指令为 : chmod 777 xxxx(文件名字),意思就是把这个文件的权限全面开放,对于初学者来说,首先记住这条指令就可以了。

但是要记住,系统本身的文件,千万不要瞎修改,可以在自己的账户下随便新建一个文件作为测试,自己修改看看。

比如,我们做个简单的测试,如下图:

图片.png

在我们以后使用 Linux 的时候,经常会遇到权限不够的问题,我们一般都会在命令前加上一个 sudo ,比如下图测试:

图片.png

上图中,我用自己的 qzh 账户尝试在根目录 “/” 创建文件 test,给出权限不够的提示。只有 root用户才能在根目录“/”下创建文件 , 所以使用了 sudo 命令暂时获取管理员用户权限。

当然接下来的删除,也是需要 sudo 命令的:

图片.png

上面sudo 这个命令以后需要经常使用,需要记住。

二、Linux 用户系统

在上文说明 Linux 文件的设备类型的时候,有提到用户权限,用户组权限,和其他用户权限。

那么我们需要明白什么是用户? 什么是用户组?

2.1 Linux 的用户

Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,
都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。

用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;
另一方面也可以帮助用户组织文件,并为用户提供安全性保护。

每个用户账号都拥有一个唯一的用户名和各自的口令。

用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。

其实在我们使用 Windows 系统的时候,也有用户的概念,只是日常应用很少创建多个用户,切换来切换去,可能相对多的时候,也只是右键 “以管理员身份运行” 某个程序。

在安装 Ubuntu系统的时候被要求创建一个账户,当我们创建好账号以后,系统会在目录/home 下以该用户名创建一个文件夹,所有与该用户有关的文件都会被存储在这个文件文件夹中。同样的,创建其它用户账号的时候也会在目录/home 下生成一个文件夹来存储该用户的文件,如下图:

图片.png

Linux 的用户分类:

Linux 用户类型分为以下 3类:

  • 管理员:root 用户,系统管理员,具有所有权限。
  • 系统用户:管理系统运行服务,系统中系统服务由不同用户运行,更加安全,默认被限制登录系统。
  • 普通用户:用于日常工作而不能管理系统的普通用户,只有一部分权限。

在我们使用的 Ubuntu 中,上面的 qzh 用户属于普通用户,但是他是按照系统时候创建的用户,其权限比后面创建的用户大一点,但是没有 root 用户权限大。

这个地方初次创建的用户,比后面创建的普通用户的区别暂时没有必要研究,因为后期我们在使用过程中基本都是在初次创建的用户下面,遇到权限问题可以临时获取管理员,这里做个了解即可。

UID

每个用户都有一个 ID 号,称为 UID,操作系统通过 UID 来识别是哪个用户,用户相关信息可以在文件 /etc/passwd 查看到 :

图片.png

每行用户信息都以 “:” 作为分隔符,划分为7个字段,每个字段所表示的含义如下:

用户名:密码:UID:GID:描述性信息:主目录:默认Shell

每一行都是一个用户的信息,意思如下图解释:

图片.png

上面第二个密码“x” ,在以前版本的 linux 系统中存放着加密后的用户口令,虽然这个字段存放的只是用户口令的加密串,但是由于 /etc/passwd 文件对所有用户都可读,所以这仍是一个安全隐患。因此,现在许多Linux 版本都使用了shadow技术,把真正加密后的用户口令存放到 /etc/shadow 文件中,而在 /etc/passwd 文件的口令字段中只存放一个特殊的字符,例如用“x”或者“*”来表示。

那么结合这个文件,我们可以再次说明一下 Linux 系统中的几个用户 UID:

超级用户 UID 0 :

图片.png

系统用户 UID 1-999 :

图片.png

普通用户 UID 1000以上:

图片.png

特殊的来宾账号:

图片.png

nobody这个的帐号UID为65534,这个用户的权限会进一步的受到限制,一般用于实现来宾帐号。

系统是根据 UID 来认定用户的权限而不是名字。如果把自己创建的用户 UID 改成 0 ,那么系统登录会把用户视为管理员用户。

2.2 Linux 的用户组

什么是用户组?

用户组是具有相同特征用户的逻辑集合, 有时我们需要让多个用户具有相同的权限,比如查看、修改某一个文件的权限,一种方法是分别对多个用户进行文件访问授权。

如果有10个用户的话,就需要授权10次,显然这种方法不太合理;另一种方法是 建立一个组,让这个组具有查看、修改此文件的权限,然后将所有需要访问此文件的用户放入这个组中,那么所有用户就具有了和组一样的权限,这就是用户组。

将用户分组是Linux 系统中对用户进行管理及控制访问权限的一种手段,通过定义用户组,在很大程度上简化了管理工作。

每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。每个用户在被创建时均会创建一个默认组(其GID与UID相同,叫作基本组或初始组),而后加入的组叫作扩展组或附加组。

GID

GID 是用户组的编号,可以将多个用户加入到某个组中,方便指派任务或工作。 和 UID 一样也是有一个对应的文件保存信息,用户组名和GID相关信息可以在文件 /etc/group 查看到:

图片.png

每行的用户组的信息都以 “:” 作为分割符,划分为4个字段,每个字段所表示的含义如下:

组名:密码:GID:该用户组中的用户列表

每一行都是一个用户组的信息,组中的用户列表只包括附加用户,如果该组是某个用户的初始组,则这个用户不会出现在这个用户列表中,如下图:

图片.png

2.3 文件归属者修改命令

相对于修改权限来说,修改归属者没那么常用,简单了解一下。

使用命令“chown”修改一个文件的所属者和所属:

chown  [参数]  [用户名.< 组名 >]  [文件名/目录] 
chown [-cfhvR] [--help] [--version] user[:group] file...

简单测试如图:

图片.png

一些常用的指令我们下一篇讲 Shell 命令的时候都会有说明。

三、Linux 文件系统简介

实际上,还需要说明一个文件系统的概念可以说明,文件系统用来组织计算机的文件和资料的系统。

此部分对于初学者,了解一下就好,后面如果真的遇到文件类型的问题再看一篇才好理解。

操作系统就是处理各种数据的,这些数据在硬盘上就是二进制,我们想要看懂这些数据,要有一个翻译器,将这些二进制的数据还原为人类能看懂的文件形式,这个工作就是由文件系统来完成的,文件系统的目的就是实现数据的查询和存储。

由于使用场合、使用环境的不同,Linux有多种文件系统,不同的文件系统支持不同的体系。文件系统是管理数据的,而可以存储数据的物理设备有硬盘、U 盘、SD卡、NAND FLASH、NOR FLASH、网络存储设备等。不同的存储设备其物理结构不同,不同的物理结构就需要不同的文件系统去管理,比如管理 NAND FLASH 的话使用 YAFFS 文件系统,管理硬盘、SD 卡的话就是 ext 文件系统等等。

比如在我们使用 windows 的时候,格式化一个 U 盘,就需要选择文件系统,如下图:

图片.png

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支持大文件;

  • ext4

    ext4 相比与ext3提供了更佳的性能和可靠性,并且功能更丰富,ext4 向下兼容 ext3 和 ext2,因此可以将 ext2 和 ext3 挂载为 ext4。

    日志式文件系统,支持1EB(1024*1024TB),最大单文件16TB,支持连续写入可减少文件碎片。

在终端中输入如下命令可查询当前磁盘挂载的文件系统:

df   -T –h

比如查询我安装的 Ubuntu 使用的哪个版本的文件系统如下图:

图片.png

上图中最后一个项目是“挂载点”,在 Linux 下创建一个分区并且格式化好以后我们要将其“挂载”到一个目录下才能访问这个分区,这个我们后期会有对应介绍。

结语

本文我们认识了 Linux 的 7 种文件类型,知道如何查看文件类型,以及对文件的权限管理方式。

然后还任何了一下 Linux 的用户系统,知道了 用户 与 用户组的概念,记住两个概念 UID 和 GID: 用户ID 和 用户组 ID。

然后知道了通过两个文件 /etc/passwd 和 /etc/group 可以查看当前系统下所有用户 和用户组的信息。

最后还简单的介绍了一下 Linux 的文件系统。

这些都是 Linux 的基础知识,内容简单不难理解,但是是学习嵌入式 Linux 入门的必须要知道了解的内容,在下一篇文章,我们开始学习常用的 Shell 命令。

本文就到这里,谢谢大家!

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5083

    文章

    19129

    浏览量

    305400
  • Linux
    +关注

    关注

    87

    文章

    11306

    浏览量

    209570
  • 文件系统
    +关注

    关注

    0

    文章

    285

    浏览量

    19911
  • Shell
    +关注

    关注

    1

    文章

    365

    浏览量

    23383
收藏 人收藏

    评论

    相关推荐

    嵌入式Linux文件系统管理

      嵌入式 Linux 开发人员可以使用平台映像生成器等工具获得对构建复杂文件系统的更多控制,这使得组装、调整和创建文件系统映像更容易完成。
    发表于 08-12 09:23 721次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>文件系统管理</b>

    嵌入式文件系统概述

    的组织形式。·文件系统为操作系统提供了必要的用于创建文件、删除文件、读文件和写文件相应的
    发表于 11-05 06:29

    Linux快速入门文件类型文件属性

    嵌入式Linux应用程序开发详解》第一章 Linux 快速入门1.3.1 文件类型文件属性1
    发表于 12-17 07:58

    适合嵌入式Linux应用的文件系统—— JFFS

    介绍一种适合嵌入式Linux应用的文件系统—— JFFS。JFFS是一种在开源模式下开发的文件系统, 为嵌入式
    发表于 04-16 11:07 4次下载

    适合嵌入式Linux应用的文件系统—— JFFS

    介绍一种适合嵌入式Linux应用的文件系统—— JFFS。JFFS是一种在开源模式下开发的文件系统, 为嵌入式
    发表于 05-14 15:27 12次下载

    构造嵌入式Linux文件系统

    文件系统Linux 系统最基本的资源。本文介绍了一种嵌入式Linux 文件系统的构造过程,较为
    发表于 08-07 09:11 10次下载

    嵌入式Linux文件系统的研究与应用

    随着嵌入式系统的发展,使用Linux操作系统搭建的嵌入式平台得到了越来越广泛的应用。文件系统
    发表于 08-13 08:59 16次下载

    详解嵌入式linux文件类型

    学习嵌入式linux系统开发,对于linux文件类型需要有很深的理解。Linux
    发表于 06-11 16:29 1019次阅读
    详解<b class='flag-5'>嵌入式</b><b class='flag-5'>linux</b><b class='flag-5'>文件类型</b>

    学习嵌入式linux系统开发,文件类型一定要分清

    学习嵌入式linux系统开发,对于linux文件类型需要有很深的理解。Linux
    发表于 07-05 07:01 886次阅读

    嵌入式linux系统开发几大文件类型

      同学们学习嵌入式linux系统开发的热情日益旺盛,而对于linux文件类型需要有很深的理解。Linu
    发表于 08-06 16:28 344次阅读

    嵌入式linux系统开发文件类型

      随着计算机嵌入式系统开发的不断普及,越来越多的人开始学习计算机嵌入式系统开发,学习嵌入式linux
    发表于 08-27 11:31 411次阅读

    你知道嵌入式linux文件类型

    学习嵌入式linux系统开发,对于linux文件类型需要有很深的理解。Linux
    发表于 05-04 17:09 753次阅读
    你知道<b class='flag-5'>嵌入式</b><b class='flag-5'>linux</b><b class='flag-5'>文件类型</b>?

    Linux嵌入式文件系统如何构建

    Linux支持多种文件系统,同样,嵌入式Linux也支持多种文件系统。虽然在嵌入式
    发表于 06-18 09:23 998次阅读

    嵌入式Linux系统移植-(Linux文件系统

    的组织形式。·文件系统为操作系统提供了必要的用于创建文件、删除文件、读文件和写文件相应的
    发表于 11-02 12:51 16次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>系统</b>移植-(<b class='flag-5'>Linux</b><b class='flag-5'>文件系统</b>)

    Linux 下的make 工具和 Makefile

    文件结构) 嵌入式 Linux 入门Linux 文件
    的头像 发表于 06-22 10:45 1159次阅读
    <b class='flag-5'>Linux</b> 下的make 工具和 Makefile