哪些是Linux?
假如你曾经未曾接触过Linux,可能就不清楚为何会有那么多不同的Linux发行版。在查看Linux软件包时,你肯定被发行版、LiveCD和GNU之类的术语搞晕过。初次步入Linux世界会让人感觉不这么得心应手。在开始学习命令和脚本之前,本章将为你稍微揭露Linux系统的神秘面纱。首先,Linux可界定为以下四部份:
↪Linux内核↪GNU工具链↪GUI桌面环境↪应用软件...
|--------------------------| | APPS | 应用软件 |--------------------------| | | GUI桌面环境 | GUI |-------------| | | GNU | GNU工具链 |--------------------------| | kernel | Linux内核 |--------------------------| | hardware | 计算机硬件 ----------------------------
1.Linux内核
Linux系统的核心是内核。内核控制着计算机系统上的所有硬件和软件,在必要时分配硬件,并按照须要执行软件。
系统显存管理应用程序管理硬件设备管理文件系统管理
1.系统显存管理
操作系统内核的主要功能之一就是显存管理。内核除了管理服务器上的可用化学显存,还可以创建和管理虚拟显存(即实际并不存在的显存)
|---------| ----------- | | | 物理内存 | | | /---------- | | --------- | 虚拟内存 | —— | 内核 | | | --------- | | ---------- | | | 交换空间 | |---------| -----------
2.应用程序管理
Linux操作系统将运行中的程序称为进程。进程可以在前台运行,将输出显示在屏幕上,也可以在后台运行,隐藏到幕后。内核控制着Linux系统怎样管理运行在系统上的所有进程。
3.硬件设备管理
内核的另一职责是管理硬件设备。任何Linux系统须要与之通讯的设备,都须要在内核代码中加入其驱动程序代码。驱动程序代码相当于应用程序和硬件设备的中间人,准许内核与设备之间交换数据。在Linux内核中有两种方式用于插入设备驱动代码:
曾经,插入设备驱动代码的惟一途径是重新编译内核。每次给系统添加新设备,都要重新编译一遍内核代码。随着Linux内核支持的硬件设备越来越多,这个过程显得越来越低效。不过好在Linux开发人员设计出了一种更好的将驱动代码插入运行中的内核的方式。
开发人员提出了内核模块的概念。它容许将驱动代码插入到运行中的内核而无需重新编译内核。同时,当设备不再使用时也可将内核模块从内核中移走。这些方法极大地简化和扩充了硬件设备在Linux上的使用。
4.文件系统管理
不同于其他一些操作系统,Linux内核支持通过不同类型的文件系统从硬碟中读写数据。除
了自有的众多文件系统外,Linux还支持从其他操作系统(例如MicrosoftWindows)采用的文件
系统中读写数据。内核必须在编译时就加入对所有可能用到的文件系统的支持。表1-1列举了
Linux系统拿来读写数据的标准文件系统。
ext | Linux扩展文件系统,最早的Linux文件系统 ext2 | 第二扩展文件系统,在ext的基础上提供了更多的功能 ext3 | 第三扩展文件系统,支持日志功能 ext4 | 第四扩展文件系统,支持高级日志功能 hpfs | OS/2高性能文件系统 jfs | IBM日志文件系统 iso9660 | ISO 9660文件系统(CD-ROM) minix | MINIX文件系统 msdos | 微软的FAT16 ncp | Netware文件系统 nfs | 网络文件系统 ntfs | 支持Microsoft NT文件系统 proc | 访问系统信息 ReiserFS | 高级Linux文件系统,能提供更好的性能和硬盘恢复功能 smb | 支持网络访问的Samba SMB文件系统 sysv | 较早期的Unix文件系统 ufs | BSD文件系统 umsdos | 建立在msdos上的类Unix文件系统 vfat | Windows 95文件系统(FAT32) XFS | 高性能64位日志文件系统
2.GNU工具链
GNU组织(GNU是GNU’sNotUnix的简写)开发了一套完整的Unix工具,但没有可以运行它们的内核系统。这种工具是在名为开源软件(opensourcesoftware,OSS)的软件理念下开发的。
开源软件理念容许程序员开发软件,并将其免费发布。任何人都可以使用、修改该软件,或将该软件集成进自己的系统,无需支付任何授权费用。将Linus的Linux内核和GNU操作系统工具整合上去,就形成了一款完整的、功能丰富的免费操作系统。
核心GNU工具
GNUcoreutils软件包由三部份构成:
Shell
GNU/Linuxshell是一种特殊的交互式工具。它为用户提供了启动程序、管理文件系统中的文件以及运行在Linux系统上的进程的途径。shell的核心是命令行提示符。命令行提示符是shell负责交互的部份。它容许你输入文本命令,之后解释命令,并在内核中执行。
bash | 由GNU项目开发,被当作标准shell ash | 运行在内存受限环境中简单的轻量级shell,但与bash shell完全兼容 korn | 与Bourne shell兼容的编程shell,但支持如关联数组和浮点运算等一些高级的编程特性 tcsh | 将C语言中的一些元素引入到shell脚本中的shell zsh | 结合了bash、tcsh和korn的特性,同时提供高级编程特性、共享历史文件和主题化提示符的高级shell
3.Linux桌面环境
在Linux的初期(20世纪90年代早期),能用的只有一个简单的Linux操作系统文本界面。这个文本界面容许系统管理员运行程序,控制程序的执行,以及在系统中联通文件。
随着MicrosoftWindows的普及,笔记本用户早已不再满足于对着旧式的文本界面工作了。这促使了OSS社区的更多开发活动,Linux图形化桌面环境应运而生。
有两个基本要素决定了视频环境:主板和显示器。要在笔记本上显示艳丽的画面,Linux软件就得晓得怎样与这三者互通。XWindow系统是图形显示的核心部份。
XWindow系统linux 读写文件,是直接和PC上的主板及显示器打交道的底层程序。它控制着Linux程序怎样在笔记本上显示出漂亮的窗口和图形
Linux发行版
早已了解了构成完整Linux系统所须要的4个关键部件,那你可能在考虑要如何能够把它们组成一个Linux系统。辛运的是,早已有人为你做好这种了
核心Linux发行版
核心Linux发行版富含内核、一个或多个图形化桌面环境以及预编译好的几乎所有能看到的Linux应用。它提供了一站式的完整Linux安装
Slackware | 最早的Linux发行版中的一员,在Linux极客中比较流行 Redhat | 主要用于Internet服务器的商业发行版 Gentoo | 为高级Linux用户设计的发行版,仅包含Linux源代码 openSUSE | 用于商用和家用的发行版 Debian | 在Linux专家和商用Linux产品中流行的发行版
系统目录
|—— bin # 二进制目录,存放用户级的GNU工具(bash命令) |—— boot # 启动目录,存放用于系统引导时使用的各种文件 |—— dev # 设备目录,存放硬件设备,创建设备节点 |—— etc # 系统配置文件目录,存放系统管理和配置文件 |—— home # 普通用户的主目录 |—— lib # 库目录,存放系统和应用程序的动态链接库 |—— lost+found # 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件 |—— media # 媒体目录,可移动媒体设备的常用挂载点 |—— mnt # 挂载目录,另一个可移动媒体设备的常用挂载点 |—— opt # 可选目录,常用于存放第三方软件包和数据文件 |—— proc # 进程目录,存放现有硬件及当前进程的相关信息,是系统内存的映射。可直接访问这个目录来获取系统信息 |—— root # 超级用户的主目录 |—— run # 运行目录,存放系统运作时的运行时数据 |—— sbin # 系统二进制目录,存放许多GNU管理员级工具 |—— srv # 服务目录,存放本地服务的相关文件 |—— sys # 系统目录,存放系统硬件信息的相关文件 |—— tmp # 临时目录,可以在该目录中创建和删除临时工作文件,重启后清空 |—— usr # 用户二进制目录,大量用户级的GNU工具和数据文件都存储在这里 | |—— bin # 包含系统安装的可执行程序。通常,这个目录会包含许多程序 | |—— games # | |—— include # 写程序需要使用到的一些头文件 | |—— lib # 包含由/usr/bin 目录中的程序所用的共享库 | |—— local # 是非系统发行版自带,却打算让系统使用的程序的安装目录。 通常,由源码编译的程序会安装在/usr/local/bin 目录下 | |—— sbin # 包含许多系统管理程序 | |—— share # 存放帮助文档和共享文件 | |—— src # |—— var # 可变目录,用以存放经常变化的文件,比如日志文件
文件权限-权限符
drwxr-xr-x # 文件类型 属主权限 成员权限 其他用户权限 d rwx r-x r-x |—— 文件类型 | |—— - # 文件 | |—— d # 文件夹 | |—— l # 链接 | |—— c # 字符型设备 | |—— b # 块设备 | |—— n # 网络设备 | |—— r # 可读权限 |—— w # 可写权限 |—— x # 可执行权限
文件系统
Linux操作系统中引入的最早的文件系统叫作扩充文件系统(extendedfilesystem,简记为ext)。它为Linux提供了一个基本的类Unix文件系统:使用虚拟目录来操作硬件设备,在化学设备上按定长的块来储存数据。
ext文件系统采用名为索引节点的系统来储存虚拟目录中所储存文件的信息。索引节点系统在每位化学设备中创建一个单独的表(称为索引节点表)来储存这种文件的信息。储存在虚拟目录中的每一个文件在索引节点表中都有一个条目。ext文件系统名称中的extended部份来自其跟踪的每位文件的额外数据
- 文件名 - 文件大小 - 文件的属主 - 文件的属组 - 文件的访问权限 - 指向存有文件数据的每个硬盘块的指针
Linux通过惟一的数值(也称索引节点号)来引用索引节点表中的每位索引节点,这个值是创建文件时由文件系统分配的。文件系统通过索引节点号而不是文件全名及路径来标示文件。
最早的ext文件系统有不少限制,例如文件大小不得超过2GB。在Linux出现后不久,ext文件系统就升级到了第二代扩充文件系统,叫作ext2
日志文件系统
日志文件系统为Linux系统降低了一层安全性。它不再使用之前先将数据直接写入储存设备再更新索引节点表的做法,而是先将文件的更改写入到临时文件(也称日志,journal)中
在数据成功讲到储存设备和索引节点表以后,再删掉对应的日志条目。假如系统在数据被写入储存设备之前崩溃或断电了,日志文件系统上次会读取日志文件并处理先前留下的未写入的数据
2001年,ext3文件系统被引入Linux内核中,直至近来都是几乎所有Linux发行版默认的文件系统。它采用和ext2文件系统相同的索引节点表结构,但给每位储存设备降低了一个日志文件,以将打算写入储存设备的数据先计入日志。
ext4文件系统在2008年遭到Linux内核官方支持,如今已是大多数流行的Linux发行版采用的默认文件系统
不仅支持数据压缩和加密,ext4文件系统还支持一个叫做区段(extent)的特点。区段在储存设备上按块分配空间,但在索引节点表中只保存起始块的位置。因为无需列举所有拿来储存文件中数据的数据块,它可以在索引节点表中节约一些空间。
ext4还引入了块预分配技术(blockpreallocation)。假如你想在储存设备上给一个你晓得要变大的文件预留空间,ext4文件系统可以为文件分配所有须要用到的块,而不仅仅是这些如今早已用到的块。ext4文件系统用0塞满预留的数据块,不会将它们分配给其他文件
Linux中的LVM
LinuxLVM是由HeinzMauelshagen开发的,于1998年发布到了Linux社区。它容许你在Linux上用简单的命令行命令管理一个完整的逻辑卷管理环境
最初的LVM包于1998年发布,只能用于Linux内核2.4版本。它仅提供了基本的逻
LVM的更新版本,可用于Linux内核2.6版本。它在标准的LVM1功能外提供了额外的功能。
最初的LinuxLVM容许你在逻辑卷在线的状态下将其复制到另一个设备。这个功能叫作快照。在备份因为高可靠性需求而未能锁定的重要数据时,快照功能十分给力。传统的备份方式在将文件复制到备份媒体上时一般要将文件锁定。快照容许你在复制的同时,保证运行关键任务的Web服务器或数据库服务器继续工作。遗憾的是,LVM1只容许你创建只读快照。一旦创建了快照,就不能再写入东西了
LVM2容许你创建在线逻辑卷的可读写快照。有了可读写的快照,就可以删掉原本的逻辑卷,之后将快照作为取代挂载上。这个功能对快速故障转移或涉及更改数据的程序试验(假如失败,须要恢复更改过的数据)十分有用。
LVM2提供的另一个引人注目的功能是条带化(striping)。有了条带化,可跨多个化学硬碟创建逻辑卷。当LinuxLVM将文件写入逻辑卷时,文件中的数据块会被分散到多个硬碟上。每位后继数据块会被讲到下一个硬碟上。条带化有助于提升硬碟的性能,由于Linux可以将一个文件的多个数据块同时写入多个硬碟,而无需等待单个硬碟联通读写盘片到多个不同位置。这个改进同样适用于读取次序访问的文件,由于LVM可同时从多个硬碟读取数据。
通过LVM安装文件系统并不意味着文件系统就不会再出问题。和化学分区一样,LVM逻辑卷也容易遭到断电和c盘故障的影响。一旦文件系统受损,就有可能再也没法恢复。
LVM快照功能提供了一些开导,你可以随时创建逻辑卷的备份副本,但对有些环境来说可能还不够。对于涉及大量数据变动的系统,例如数据库服务器,自先前快照以后可能要储存成百上千条记录。
这个问题的一个解决办法就是LVM镜像。镜像是一个实时更新的逻辑卷的完整副本。当你创建镜像逻辑卷时,LVM会将原始逻辑卷同步到镜像副本中。按照原始逻辑卷的大小,这可能须要一些时间就能完成。
一旦原始同步完成,LVM会为文件系统的每次写操作执行两次写入——一次写入到主逻辑卷,一次写入到镜像副本。可以想到,这个过程会增加系统的写入性能。即使原始逻辑卷由于个别缘由毁坏了,你手头也早已有了一个完整的最新副本!
小结
在Linux上使用储存设备须要懂一点文件系统的知识。当工作在Linux系统下时,懂得怎样在命令行下创建和处理文件系统能帮上你的忙。Linux系统和Windows的不同之处在于后者支持大量不同的储存文件和目录的技巧。每位文件系统方式都有不同的特点,使其适用于不同的场景
fdisk命令拿来对储存设备进行分区,便于安装文件系统。在分区储存设备时,必须定义在前面使用哪些类型的文件系统。界定完储存设备分区后,你可以为该分区选用一种文件系统。流行的Linux文件系统包括ext3和ext4。二者都提供了日志文件系统功能,增加它们在Linux系统崩溃时遇见错误或问题的机率
在储存设备分区上直接创建文件系统的一个限制诱因是,假如硬碟空间用完了,你难以轻易地改变文件系统的大小。但Linux支持逻辑卷管理,这是一种跨多个储存设备创建虚拟分区的技巧。这些方式容许你轻松地扩充一个已有文件系统,而不用完全重建。LinuxLVM包提供了跨多个储存设备创建逻辑卷的命令行命令。
假如你还不太了解Linux的命令行命令linux 读写文件linux定时关机命令嵌入式linux培训,欢迎阅读我的下一篇