《Linux基础》补充笔记 您所在的位置:网站首页 linuxumask函数的头文件 《Linux基础》补充笔记

《Linux基础》补充笔记

2023-04-22 07:52| 来源: 网络整理| 查看: 265

Linux是我们想深入学习和成为社畜程序员无法绕开的一个操作系统,理由很多,比如它是现代化应用程序交付的首选平台,无论是部署在裸机、虚拟化还是容器化环境;公司内部服务(TCE、FaaS、SCM)统一使用Debian Linux系统等等。

什么是Linux?Linux是一种自由和开放源代码的类Unix操作系统,最初由芬兰的程序员Linus Torvalds在1991年开发。它被设计成具有高度可定制性和稳定性,并且可以在多种计算机架构上运行。Linux系统常用于服务器和嵌入式设备上,也有许多桌面和笔记本电脑使用Linux操作系统。由于Linux源代码是开放的,用户可以根据自己的需求进行修改和分发。

计算机是由软件和硬件组成,软件是基于硬件去运行,操作系统固然也是一种软件,所以我们要从计算机硬件先开始了解。

计算机中有五大单元。

分别是:输入单元、输出单元、存储器、运算器和控制器。

输入单元负责将外部信息输入到计算机系统中;

输出单元负责将计算机内部处理完毕的信息输出到外部;

存储器用于存放程序和数据,分为内存和外存两种形式;

运算器用于对数据进行运算和处理,包括算术逻辑运算、移位、比较等;

控制器用于控制计算机系统的运行,指挥各单元协调工作,实现指令的执行、数据传输等功能。

那如何实现从硬件启动到软件启动呢?

当计算机加电后,BIOS(Basic Input/Output System)芯片会首先被激活并进行自检(POST,Power-On Self-Test),检测计算机硬件是否正常。之后,BIOS会读取存储在固件中的启动程序(boot loader),并将控制权传递给启动程序。启动程序会将操作系统的核心文件(kernel)从硬盘、光盘或网络中读取到内存中,并将控制权交给操作系统。操作系统在初始化一些硬件、加载设备驱动程序等操作之后,就可以开始为用户提供服务。

知道了如何从计算机硬件到操作系统的启动,接下来我们可以好好了解Linux系统的发展史

Linux 是一种自由、开放源代码的类 Unix 操作系统,它的发展历史可以追溯到 1991 年。

1991 年,芬兰大学生林纳斯·托瓦兹(Linus Torvalds)开始开发 Linux 操作系统,他的初衷只是想在自己的计算机上运行 Unix 程序,因为当时 Unix 操作系统的价格十分昂贵。于是他开发了一个小型的 Unix 兼容内核,这就是 Linux 内核的雏形。

随着 Linux 内核的不断完善,越来越多的开发者加入了 Linux 的开发工作。1992 年,Linux 0.12 版本发布,这是第一个能够自举的 Linux 内核,即用 Linux 内核本身编译出的 Linux 内核。

1993 年,Linux 1.0 版本发布,标志着 Linux 成为了一个完整的操作系统。此后,Linux 的发展势头愈来愈强,吸引了越来越多的用户和开发者。许多公司也开始投入到 Linux 的开发和推广中,其中最著名的是红帽公司(Red Hat),它成为了 Linux 领域的领军企业之一。

到了 21 世纪初,Linux 已经成为了一个广泛应用的操作系统,被许多大型企业和组织广泛采用,包括谷歌、亚马逊、IBM 等等。同时,Linux 社区也变得更加庞大和活跃,Linux 的内核版本不断更新和升级,现在已经发展到了第 5 代。

Linux也具有十分清晰的体系结构。

Linux 体系结构是一个分层结构,分为硬件层、内核层和用户层。其中,硬件层是由物理设备组成的,包括 CPU、内存、磁盘、网络适配器等;内核层是操作系统内核,提供了系统的核心功能,例如进程管理、内存管理、文件系统管理等;用户层是应用程序和用户界面,提供了各种应用程序和用户界面的支持。

在 Linux 系统中,内核负责管理硬件设备,并提供系统调用接口,应用程序通过这些接口与内核进行通信。用户层包括 Shell、应用程序、图形界面等,通过 Shell 与内核进行交互,通过系统调用接口访问内核提供的服务。

Linux 体系结构的分层设计使得系统具有可扩展性和可维护性,同时也允许用户选择不同的用户界面和应用程序,以满足不同的需求。

Linux系统有着具体的系统结构

Linux系统结构可以分为内核空间和用户空间。

内核空间是操作系统内核所占用的内存空间,包括操作系统核心代码、系统调用接口、中断处理程序等,它负责系统的底层运行、硬件管理和资源调度,为用户空间提供服务和保障。

用户空间是用户程序所占用的内存空间,包括应用程序、库函数、命令等,它与内核空间隔离,通过系统调用接口向内核发出请求,由内核来完成具体的操作。

Linux系统结构的设计目标是保证内核稳定、高效、安全,同时提供灵活的用户接口,使得开发者能够方便地开发各种应用程序,从而满足不同用户的需求。

系统结构和体系结构也有区别

Linux的体系结构和系统结构都是指Linux操作系统的组成部分和结构,但是它们从不同的角度描述了Linux操作系统。

Linux的体系结构主要是指Linux内核(kernel)、Shell和应用程序等组成部分之间的关系和交互方式,以及它们在硬件上的实现方式。Linux的体系结构一般是分层次的,从底层到高层分别是硬件层、内核层、Shell层和应用层。其中,内核是整个系统的核心,负责管理硬件设备、提供进程管理、内存管理、文件系统等基本功能,Shell是用户与内核之间的接口,提供命令解释、脚本编程、界面交互等功能,应用程序则是运行在Shell之上的,为用户提供各种实用功能。

Linux的系统结构则主要是指Linux操作系统的各个部分之间的逻辑关系和功能划分,它更注重的是对操作系统各个组成部分的功能和作用进行描述。通常来说,Linux的系统结构可以分为五个主要部分:内核、Shell、文件系统、应用程序和库函数。其中,内核负责管理硬件设备、进程管理、内存管理等底层操作,Shell负责提供用户与内核之间的接口,文件系统负责管理文件和目录,应用程序则是具体的功能模块,而库函数则提供了一些基本的功能接口和调用方式。

因此,Linux的体系结构和系统结构都是描述Linux操作系统的结构和组成部分,但是体系结构更注重于描述它们之间的关系和交互方式,而系统结构更注重于对它们的功能和作用进行描述。

Linux的进程管理是一个比较核心的功能。

Linux是一个多用户、多任务的操作系统,进程管理是其中一个核心功能。进程是计算机中正在执行的程序的实例。操作系统在内核层面负责进程的管理和调度,确保进程之间的合理共享和利用系统资源。

Linux中的进程管理涉及以下内容:

进程的创建和销毁:在Linux中,进程是通过fork()系统调用创建的。当进程结束时,会自动调用exit()系统调用来退出并释放资源。 进程的状态:在Linux中,进程有多种状态,如运行状态、等待状态、停止状态等。内核会根据进程的状态来进行调度。 进程的调度:进程调度是指内核按照一定策略和算法从等待队列中选择一个进程来执行。Linux中采用时间片轮转的调度算法。 进程间通信:进程间通信是指进程之间通过一定的机制进行信息交换。Linux中提供了多种IPC(Inter-Process Communication)机制,如管道、消息队列、信号量、共享内存等。 进程的资源限制:Linux中可以通过设置进程的资源限制来限制进程可以使用的资源。如可以限制进程可以使用的CPU时间、内存大小、文件打开数量等。 进程的优先级:在Linux中,每个进程都有一个优先级,内核会根据进程的优先级来进行调度。可以通过nice命令或renice命令来修改进程的优先级。

总之,进程管理是Linux系统的一个核心功能,涉及到多个方面的功能,包括进程的创建、销毁、状态管理、调度、进程间通信、资源限制等。

进程调度是指操作系统按某种策略或规则选择进程占用CPU进行运行的过程

Linux的进程调度是指操作系统在多个进程之间分配处理器时间的过程。Linux使用基于时间片的轮询调度算法,即每个进程被分配一个时间片,在时间片用完之前,操作系统不会抢占该进程的CPU时间,如果时间片用完,则操作系统将进程置于就绪队列的末尾,并分配给下一个就绪进程。因此,每个进程都有机会使用CPU时间,避免了某个进程长时间占用CPU的情况,保证了系统的公平性。

Linux的进程调度器是内核的一部分,可以分为三个级别:高级调度器、中级调度器和低级调度器。

高级调度器用于决定哪些进程进入内核,哪些进程可以留在内核。这个决策基于进程的优先级和性质。

中级调度器用于决定哪些进程可以进入运行状态,哪些进程应该放在后台。

低级调度器用于决定正在运行的进程应该运行多长时间,并在时间片用完时切换到下一个进程。

Linux还支持实时进程,即实时进程优先于普通进程获得CPU时间,保证实时进程的响应性能。Linux提供了两个调度策略:SCHED_FIFO和SCHED_RR,前者为先进先出调度策略,后者为时间片轮询调度策略。

进程调度也是有原则的。

Linux的进程调度遵循以下几个原则:

公平原则:每个进程都应该获得公平的CPU时间,以便在合理的时间内完成其工作。 优先级原则:具有更高优先级的进程应该获得更多的CPU时间,以便尽早完成其任务。 饥饿原则:不应该出现某个进程一直无法获得CPU时间的情况,每个进程都应该有机会获得一定数量的CPU时间。 时间片轮转原则:为了避免进程长时间霸占CPU,应该使用时间片轮转的方法,每个进程都应该获得一定的CPU时间片,并在该时间片用完之后被强制放弃CPU。 可撤销原则:系统应该能够撤销或终止任何进程,以便在需要的情况下回收CPU资源。

这些原则可以确保Linux系统在多任务处理时具有高效性和公平性。

Linux中的文件系统也是核心之一

Linux的文件系统是指Linux操作系统中用于组织和管理文件和目录的机制和结构。Linux的文件系统采用了类似于UNIX的树形结构,即以根目录为起点,往下分支形成的多层目录结构。

在Linux中,文件系统包括了文件和目录,还包括了一些特殊的文件类型,例如设备文件、软链接等。Linux中的文件系统是通过挂载(mount)的方式来实现的,即将存储设备上的文件系统挂载到Linux的文件系统树上,从而使得这些文件系统中的文件和目录能够被访问和管理。

常见的Linux文件系统类型包括:ext4、ext3、ext2、XFS、JFS、ReiserFS、Btrfs等。其中,ext4是Linux下使用最广泛的文件系统类型,也是默认的文件系统类型。

Linux有这么多不同的文件系统,如何实现对用户提供统一调用接口的?

在Linux中,提供了虚拟文件系统(Virtual File System,VFS)的概念,它可以屏蔽底层不同文件系统的差异,为用户提供统一调用接口。VFS为所有的文件系统提供了相同的接口,使得用户无论使用哪个文件系统,都可以使用相同的系统调用来读写文件,打开或关闭文件等操作。

具体来说,当一个进程调用文件操作的系统调用时,VFS会通过调用具体文件系统的相关操作函数实现对文件的操作。不同的文件系统只需要实现一组特定的操作函数(如读、写、打开、关闭等),并且需要遵循一定的规则和接口,即可被VFS所支持和调用。

通过这种方式,Linux实现了对多种文件系统的支持,同时又保证了用户使用的透明性和统一性。

Linux的用户权限是确保系统安全性的重要因素之一

在 Linux 中,用户权限可以分为三个级别:用户本身的权限、用户所属组的权限以及其他用户的权限。

每个文件和目录都有所有者和所属组。Linux 中的用户可以被分为两类:root 用户和普通用户。root 用户是系统管理员,拥有最高权限,可以对整个系统进行任何操作。普通用户则只有受限的权限,只能访问自己有权限的文件和目录。

Linux 中的文件和目录权限可以通过 chmod 命令来设置。chmod 命令使用数字表示权限,其中第一个数字表示所有者的权限,第二个数字表示所属组的权限,第三个数字表示其他用户的权限。每个数字都由三位二进制数表示,其中每一位的意义分别是读、写和执行权限。例如,数字 7 表示所有权限都开放,数字 6 表示读写权限都开放,但没有执行权限。

Linux 中还有一种重要的权限管理机制叫做 SUID(Set User ID)和 SGID(Set Group ID)。当 SUID 或 SGID 标记被设置在一个可执行文件上时,这个文件将以拥有者或组的身份来运行。这对于某些需要访问特殊权限的程序非常有用,例如密码管理程序。

另外,Linux 中还有一个叫做 umask 的机制。umask 是掩码的意思,它定义了新建文件和目录的默认权限。umask 值是一个八进制数,表示需要从新文件和目录的权限中屏蔽掉的权限。例如,umask 值为 022 表示屏蔽掉其他用户的写权限和所属组的写权限,只有所有者拥有读写权限。

对应的,文件也需要有权限来对不同用户进行不同限制。

在 Linux 系统中,每个文件和目录都有一组权限。这些权限可以控制哪些用户或用户组可以访问文件或目录,以及他们可以进行的操作。

Linux 的文件权限由三种基本操作组成:读取(r)、写入(w)和执行(x)。这三种操作可以分别针对三种不同的用户进行控制,分别是文件所有者、文件所属组和其他用户。

文件权限分为三个权限位:读权限(r),写权限(w)和执行权限(x)。rwx 位被称为“三进制权限”,因为每个权限位都可以设置为 0(禁止)或 1(允许)。权限也可以用八进制表示,其中 r=4、w=2、x=1,因此 rwx 权限可以表示为 7。

例如,权限为“rw-r--r--”表示文件所有者有读取和写入权限,文件所属组和其他用户只有读取权限。该权限的八进制表示为 644。

在 Linux 中,可以使用 chmod 命令更改文件权限。例如,要将文件的所有者和所属组的权限设置为读取、写入和执行权限,而其他用户只有读取权限,可以使用以下命令:

chmod 755 filename 复制代码

这个命令将文件的权限设置为“rwxr-xr-x”,八进制表示为 755。

文件权限是 Linux 系统中安全性的重要组成部分。授予适当的权限可以确保只有授权用户可以访问和更改文件,从而保护系统免受未经授权的访问和恶意操作的影响。

Linux系统里也有多样的软件包配合用户对系统进行操作

Linux的软件包是一种预先打包好的软件,它包含了安装、配置、运行该软件所需的一切组件和依赖关系。在Linux系统中,软件包通常以一种标准的格式打包,例如RPM(Red Hat Package Manager)和DPKG(Debian Package)。这些软件包可以通过软件包管理器进行安装、更新和删除。软件包管理器可以自动解决依赖关系,使得软件的安装和维护变得更加容易和方便。

Linux 上有很多不同的软件包,包括但不限于以下几种:

RPM包(RedHat Package Manager):这是一种最初由 RedHat 公司开发的软件包管理格式。它使用.rpm 扩展名,可以在大多数 Linux 发行版中使用。 DEB包(Debian Package):这是一种由 Debian 发行版开发的软件包管理格式。它使用.deb 扩展名,可以在大多数基于 Debian 的发行版中使用。 Tarball:这是一种打包成 tarball 形式的软件包。这种格式比较常见于开源软件,它需要用户手动下载并安装。这种格式通常需要用户自行解压并安装。 Snap包:这是一种由 Canonical 公司开发的新型软件包格式,它可以在大多数 Linux 发行版中使用。Snap 包可以包含依赖项,并且可以在不同版本的发行版之间移植。 Flatpak包:这是一种由 Fedora 和 RedHat 公司开发的软件包管理格式。它可以在大多数 Linux 发行版中使用。Flatpak 包也可以包含依赖项,并且可以在不同版本的发行版之间移植。

软件包也具有管理工具

Linux有多个软件包管理工具,常见的有以下几种:

dpkg:Debian GNU/Linux 发行版使用的软件包管理工具,可以用于安装、升级、删除、查询 Deb 格式的软件包。 apt-get:Debian GNU/Linux 发行版中基于 dpkg 的软件包管理工具,可以自动解决软件包之间的依赖关系,并自动下载、安装所需的软件包。 rpm:Red Hat 发行版使用的软件包管理工具,可以用于安装、升级、删除、查询 RPM 格式的软件包。 yum:Red Hat 发行版中基于 rpm 的软件包管理工具,可以自动解决软件包之间的依赖关系,并自动下载、安装所需的软件包。 pacman:Arch Linux 发行版使用的软件包管理工具,可以用于安装、升级、删除、查询 Pacman 格式的软件包。

这些软件包管理工具都提供了命令行接口,通过命令行工具可以方便地进行软件包的安装、升级、删除、查询等操作。此外,还有一些图形化的软件包管理工具,如 Synaptic、Apper 等,它们提供了可视化界面,使得软件包的管理更加方便。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有