【运维基础知识】《Linux 系统架构与文件系统及权限管理全解析》

ops/2024/10/20 1:10:30/

标题:《Linux 系统架构与文件系统及权限管理全解析》

摘要: 本文将深入介绍 Linux 系统架构、文件系统和权限管理。涵盖内核、用户空间、守护进程等系统架构组成部分,详细阐述文件系统层次结构、设备文件、符号链接等内容,同时深入讲解权限管理中的用户和组、文件权限、更改权限等关键概念。读者将通过本文深入了解 Linux 系统的核心机制,掌握有效管理 Linux 系统的关键知识。

关键词:Linux 系统架构、文件系统、权限管理、内核、用户空间、守护进程、设备文件、符号链接、文件权限、访问控制列表

一、Linux 系统架构

  1. 内核(Kernel)
    • 内核是 Linux 系统的核心,负责管理系统的硬件资源,如 CPU、内存、磁盘等。它就像是一个大管家,精心调度着各种硬件资源,确保系统高效稳定运行。
    • 内核通过系统调用(syscalls)与用户空间(user space)的程序交互。系统调用就像是一座桥梁,连接着内核与用户空间的程序,使得用户程序能够请求内核提供各种服务。
  2. 用户空间(User Space)
    • 用户空间是操作系统中除内核外的所有部分,包括所有的用户程序、库、服务等。这里是用户应用程序的舞台,各种应用程序在这里尽情发挥各自的功能。
    • 用户空间的程序通过系统调用请求内核提供服务。当用户程序需要进行一些系统级别的操作时,就会通过系统调用向内核发出请求。
  3. 系统调用(System Calls)
    • 系统调用是用户空间程序与内核交互的接口。它为用户程序提供了一种规范的方式来请求内核执行如文件操作、进程控制、通信等操作。
    • 例如,当一个程序需要读取文件时,它会通过系统调用向内核发出请求,内核接收到请求后会执行相应的文件读取操作,并将结果返回给用户程序。
  4. 守护进程(Daemons)
    • 守护进程是运行在后台的服务程序,它们通常在系统启动时开始运行,并等待用户或其他程序的请求。就像默默无闻的守护者,守护进程在后台默默为系统提供各种服务。
    • 例如,打印服务守护进程会在后台等待打印任务的请求,当有打印任务时,它会负责将任务发送到打印机进行打印。
  5. 图形用户界面(GUI)
    • 许多 Linux 发行版提供了图形用户界面,允许用户通过图形化的方式进行操作,如 GNOME、KDE 等。图形用户界面为用户提供了更加直观和便捷的操作方式。
    • 例如,用户可以通过图形用户界面中的文件管理器来浏览和管理文件,而不需要使用命令行工具。

二、Linux 文件系统

  1. 文件系统层次结构(Filesystem Hierarchy)
    • Linux 文件系统遵循标准的层次结构,如/bin(二进制可执行文件)、/etc(系统配置文件)、/home(用户家目录)、/var(变量数据文件,如日志)等。这种层次结构使得文件的组织更加清晰,方便用户和系统管理文件。
    • 例如,当用户需要安装一个新的软件时,软件的安装程序通常会将可执行文件安装到/bin/usr/bin目录下,将配置文件安装到/etc目录下。
  2. 设备文件(Device Files)
    • Linux 将硬件设备映射为文件,如/dev下的设备文件。这种方式使得用户可以像操作普通文件一样操作硬件设备。
    • 例如,用户可以通过读写/dev/sda文件来访问硬盘设备,就像读写一个普通的文件一样。
  3. 符号链接(Symbolic Links)
    • 符号链接是指向另一个文件或目录的快捷方式。它就像一个指针,指向另一个文件或目录,使得用户可以通过符号链接快速访问目标文件或目录。
    • 例如,用户可以创建一个符号链接,将其指向一个常用的目录,这样就可以通过符号链接快速访问该目录,而不需要记住复杂的路径。
  4. 文件系统类型(Filesystem Types)
    • Linux 支持多种文件系统类型,如 ext4(第四扩展文件系统)、xfs、ntfs 等。不同的文件系统类型具有不同的特点和适用场景。
    • 例如,ext4 文件系统具有良好的稳定性和性能,适用于大多数 Linux 系统;xfs 文件系统则在大容量存储和高并发访问方面表现出色。
  5. 挂载(Mounting)
    • 挂载是将一个设备或目录作为文件系统的一个部分,使其可以被访问的过程。就像将一个外部存储设备插入电脑后,需要进行挂载才能访问其中的文件。
    • 例如,当用户插入一个 USB 存储设备时,系统会自动检测到设备,并将其挂载到一个特定的目录下,用户可以通过该目录访问设备中的文件。

以下是一个使用 Java 代码获取文件系统信息的示例:

import java.io.File;
import java.util.Arrays;public class FileSystemInfo {public static void main(String[] args) {File[] roots = File.listRoots();for (File root : roots) {System.out.println("文件系统根目录:" + root);System.out.println("可用空间:" + root.getFreeSpace() + "字节");System.out.println("总空间:" + root.getTotalSpace() + "字节");System.out.println("已用空间:" + (root.getTotalSpace() - root.getFreeSpace()) + "字节");System.out.println("文件系统类型:" + root.getFileSystem().getType());System.out.println();}}
}

下面是一个描述文件系统挂载过程的流程图:

插入设备或指定目录
系统检测
识别文件系统类型
分配挂载点
将设备或目录挂载到挂载点
可以访问文件

三、Linux 权限管理

  1. 用户和组(Users and Groups)
    • Linux 系统中的每个用户都有一个唯一的用户 ID(UID)和一个组 ID(GID)。用户可以属于多个组。用户就像是系统中的居民,每个用户都有自己的身份和权限。
    • 例如,一个用户可能属于用户组和管理员组,这样他就可以同时拥有普通用户和管理员的权限。
  2. 文件权限(File Permissions)
    • Linux 文件系统为文件和目录提供了三种类型的权限:读(r)、写(w)和执行(x)。权限分为三组:所有者(owner)、组(group)和其他(others)。
    • 例如,一个文件的权限可能是rwxr-xr--,表示所有者有读、写、执行权限,组用户有读和执行权限,其他用户只有读权限。
  3. 更改权限(Changing Permissions)
    • 使用chmod命令可以更改文件和目录的权限。例如,chmod u+x file给予文件所有者执行权限。
    • 以下是一个使用 Java 代码检查文件权限的示例:
import java.io.File;public class CheckFilePermissions {public static void main(String[] args) {File file = new File("test.txt");if (file.exists()) {boolean isReadable = file.canRead();boolean isWritable = file.canWrite();boolean isExecutable = file.canExecute();System.out.println("文件可读:" + isReadable);System.out.println("文件可写:" + isWritable);System.out.println("文件可执行:" + isExecutable);} else {System.out.println("文件不存在!");}}
}
  1. 更改所有权(Changing Ownership)
    • 使用chown命令可以更改文件或目录的所有者。例如,chown newuser file将文件的所有者更改为newuser
  2. 访问控制列表(Access Control Lists, ACLs)
    • ACLs 提供了更细粒度的权限控制,允许为不同的用户和组设置不同的权限。
    • 例如,一个文件可以设置为用户 A 有读、写、执行权限,用户 B 只有读权限,用户 C 没有任何权限。
  3. sudosu
    • sudo允许授权用户以其他用户(通常是 root)的身份执行命令。
    • su用于切换到另一个用户,通常用于切换到 root 用户。
  4. 密码管理
    • passwd命令用于更改用户密码。/etc/shadow文件存储了用户的密码信息。

下面是用户和组与文件权限的对比表格:

对比项用户和组文件权限
作用对象用户和用户组文件和目录
权限类型用户身份和所属组读、写、执行
管理方式通过用户管理工具和命令chmodchown等命令

以下是本文内容的 Excel 表格展示:

主题内容
Linux 系统架构内核、用户空间、系统调用、守护进程、图形用户界面
Linux 文件系统文件系统层次结构、设备文件、符号链接、文件系统类型、挂载
Linux 权限管理用户和组、文件权限、更改权限、更改所有权、访问控制列表、sudosu、密码管理

嘿,亲爱的读者们!希望你们在阅读完这篇文章后,对 Linux 系统架构、文件系统和权限管理有了更深入的理解。如果你们有任何独特的见解、经验或者问题,欢迎在评论区分享哦!让我们一起交流学习,共同进步,成为更厉害的 Linux 高手!😎


http://www.ppmy.cn/ops/126847.html

相关文章

基于springboot+微信小程序校园自助打印管理系统(打印1)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于springboot微信小程序校园自助打印管理系统实现了管理员、店长和用户。管理员实现了用户管理、店长管理、打印店管理、打印服务管理、服务类型管理、预约打印管理和系统管理。店长实现…

SpringBoot驱动的智能购物推荐平台开发指南

1系统概述 1.1 研究背景 如今互联网高速发展,网络遍布全球,通过互联网发布的消息能快而方便的传播到世界每个角落,并且互联网上能传播的信息也很广,比如文字、图片、声音、视频等。从而,这种种好处使得互联网成了信息传…

Vue 字符串常用方法

文章目录 前言在模板中使用在计算属性中使用在方法中使用 前言 Vue.js中的字符串处理主要是依赖于JavaScript的字符串方法,Vue.js本身并没有提供额外的字符串处理方法,但它允许你在模板、计算属性和方法中方便地使用这些JavaScript方法。想要了解JavaSc…

高可用之限流-07-token bucket 令牌桶算法

限流系列 开源组件 rate-limit: 限流 高可用之限流-01-入门介绍 高可用之限流-02-如何设计限流框架 高可用之限流-03-Semaphore 信号量做限流 高可用之限流-04-fixed window 固定窗口 高可用之限流-05-slide window 滑动窗口 高可用之限流-06-slide window 滑动窗口 sen…

【Go初阶】两万字快速入门Go语言

初见golang语法 package mainimport "fmt"func main() {/* 简单的程序 万能的hello world */fmt.Println("Hello Go")} 第一行代码package main定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main…

vue登录页面

这里写目录标题 登录业务流程表单如何进行校验自定义校验规则整个表单的统一内容校验 封装登录接口axios的二次封装整个项目api的统一管理 调用接口 登录业务流程 表单如何进行校验 ElementPlus表单组件内置了表单校验功能,只需要按照组件要求配置必要参数即可 1.…

vue video播放m3u8监控视频

很关键的问题 vite创建的项目不需要import ‘videojs-contrib-hls’ 导入就报错 直接添加如下代码即可 html5: {vhs: {overrideNative: true},nativeVideoTracks: false,nativeAudioTracks: false,nativeTextTracks: false} 下面是完整组件示例 <template><div>…

YashanDB学习-数据库SQL基础操作

YashanDB学习-数据库SQL基础操作 1、 创建用户、创建角色、授权用户、切换用户、修改密码2、表空间3、表4、索引5、数据6、事务 1、 创建用户、创建角色、授权用户、切换用户、修改密码 注&#xff1a;切换对象须具有登录会话的权限方可进行切换操作 # 创建用户 账号yashan 密…