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

简介: 嵌入式 Linux入 门第二课, linux 文件系统、文件类型及权限管理。 ...... 矜辰所致

前言

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

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

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

<3
嵌入式 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支持大文件;

  • ext4

ext4 相比与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 命令。

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

相关文章
|
7月前
|
自然语言处理 监控 Linux
Linux 内核源码分析---proc 文件系统
`proc`文件系统是Linux内核中一个灵活而强大的工具,提供了一个与内核数据结构交互的接口。通过本文的分析,我们深入探讨了 `proc`文件系统的实现原理,包括其初始化、文件的创建与操作、动态内容生成等方面。通过对这些内容的理解,开发者可以更好地利用 `proc`文件系统来监控和调试内核,同时也为系统管理提供了便利的工具。
299 16
|
8月前
|
Unix Linux Shell
Linux新手入门手册
在Linux或类Unix系统中,掌握一系列基础命令和快捷键是提升工作效率的关键。这些工具和技巧不仅能帮助用户更高效地管理系统,还能在日常使用中带来极大的便利。以下是对这些基础操作与快捷键的详细解析大全。
147 9
|
9月前
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
493 15
|
10月前
|
Ubuntu Unix Linux
Linux网络文件系统NFS:配置与管理指南
NFS 是 Linux 系统中常用的网络文件系统协议,通过配置和管理 NFS,可以实现跨网络的文件共享。本文详细介绍了 NFS 的安装、配置、管理和常见问题的解决方法,希望对您的工作有所帮助。通过正确配置和优化 NFS,可以显著提高文件共享的效率和安全性。
2205 7
|
10月前
|
存储 运维 监控
Linux--深入理与解linux文件系统与日志文件分析
深入理解 Linux 文件系统和日志文件分析,对于系统管理员和运维工程师来说至关重要。文件系统管理涉及到文件的组织、存储和检索,而日志文件则记录了系统和应用的运行状态,是排查故障和维护系统的重要依据。通过掌握文件系统和日志文件的管理和分析技能,可以有效提升系统的稳定性和安全性。
254 7
|
10月前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
449 13
|
10月前
|
安全 Linux 数据安全/隐私保护
深入Linux操作系统:文件系统和权限管理
在数字世界的海洋中,操作系统是连接用户与硬件的桥梁,而Linux作为其中的佼佼者,其文件系统和权限管理则是这座桥梁上不可或缺的结构。本文将带你探索Linux的文件系统结构,理解文件权限的重要性,并通过实际案例揭示如何有效地管理和控制这些权限。我们将一起航行在Linux的命令行海洋中,解锁文件系统的奥秘,并学习如何保护你的数据免受不必要的访问。
|
1月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
304 1
二、Linux文本处理与文件操作核心命令
|
1月前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
558 56
|
20天前
|
存储 安全 Linux
Linux卡在emergency mode怎么办?xfs_repair 命令轻松解决
Linux虚拟机遇紧急模式?别慌!多因磁盘挂载失败。本文教你通过日志定位问题,用`xfs_repair`等工具修复文件系统,三步快速恢复。掌握查日志、修磁盘、验重启,轻松应对紧急模式,保障系统稳定运行。
176 2