《Introduction to Linux》——Linux Fundation(1~10/18章)
原文地址 https://training.linuxfoundation.org/training/introduction-to-linux/
目录
第一章 Linux基金会
Linux作为历史上最大的开源项目,在大数据、网络、嵌入式、云计算、区块链等领域有着重要的作用;
Linux基金会是Linux创建者Linus Torvalds和主要维护者Greg Kroah-Hartman成立的中立的组织,以保证保障和加速今后Linux内核开发。
Linux主要的发行的版本有:
- Red Hat Family Systems (including CentOS and Fedora)
- SUSE Family Systems (including openSUSE)
- Debian Family Systems (including Ubuntu and Linux Mint)
第二章 Linux理念和基本概念
介绍了Linux的发展历史,发展理念,社区和终专用词汇等概念;
第三章 Linux系统知识和系统启动
1.引导(The boot process)
以下是从开机到进入系统的流程:从BIOS开始,触发引导加载程序启动Linux内核。从那里, 调用initramfs 文件系统,触发init程序完成启动过程
1)当你打开设备(计算机)电源,加载的是BIOS(Basic Input/Output System)进行自检(POST, Power On Self Test);BIOS存储在主板的ROM中。
2)自检完成后,加载引导程序(boot loader),引导程序存储在系统的某个硬盘中,可以是引导扇区(对于传统的BIOS / MBR系统),也可以是EFI分区(最新的(统一)可扩展固件接口或EFI / UEFI系统);然后,从CMOS值加载有关日期,时间和最重要的外围设备的信息。Linux有许多引导加载程序; 最常见的是GRUB(用于GRand统一引导加载程序),ISOLINUX (用于从可移动介质引导)和DAS U-Boot (用于在嵌入式设备/设备上引导)。大多数Linux引导加载程序都可以提供用户界面,用于选择引导Linux的备用选项,甚至可能安装的其他操作系统。引导Linux时,引导加载程序负责将内核映像和初始RAM磁盘或文件系统(包含启动系统所需的一些关键文件和设备驱动程序)加载到内存中。
3)引导加载程序有两个不同的阶段:
对于使用BIOS / MBR方法的系统,引导加载程序驻留在硬盘的第一个扇区,也称为主引导记录(MBR)。MBR的大小只有512个字节。在此阶段,引导加载程序检查分区表并找到可引导分区。一旦找到可引导分区,它就会搜索第二阶段引导加载程序,例如GRUB,并将其加载到RAM(随机存取存储器)中。对于使用EFI / UEFI方法的系统,UEFI固件读取其引导管理器数据以确定要从哪里启动哪个UEFI应用程序(即从哪个磁盘和分区可以找到EFI分区)。然后,固件启动UEFI应用程序,例如GRUB,如固件引导管理器中的引导条目中所定义。这个过程比旧的MBR方法更复杂,但更通用。
第二阶段引导加载程序位于/ boot 目录下。将显示启动屏幕,允许我们选择要引导的操作系统(OS)。选择操作系统后,引导加载程序将所选操作系统的内核加载到RAM中并将控制权传递给它。引导加载程序加载选定的内核映像并将控制权传递给它。内核几乎总是被压缩,所以它的第一个工作就是解压缩自己。在此之后,它将检查并分析系统硬件并初始化内核中内置的任何硬件设备驱动程序。
4)initramfs文件系统镜像包含执行安装正确的根文件系统所需的所有操作的程序和二进制文件,例如为大容量存储控制器提供所需文件系统和设备驱动程序的内核功能,其中包含一个名为udev(用于用户设备)的工具,负责计算存在哪些设备,找到他们正确操作所需的设备驱动程序,然后加载它们。找到根文件系统后,将检查错误并装入。安装程序指示操作系统文件系统可以使用,并将其与文件系统整体层次结构中的特定点(挂载点)相关联。如果成功, 则从RAM中清除initramfs ,并执行根文件系统(/ sbin / init)上的初始化(init)程序。初始化(init)处理安装并转移到最终的真实根文件系统。如果在访问大容量存储之前需要特殊的硬件驱动程序,则它们必须位于initramfs映像中。
5)在启动过程即将结束时,初始化(init)会启动许多文本模式登录提示。这使您可以键入用户名,然后输入密码,最终获得命令shell。但是,如果您运行的是具有图形登录界面的系统,则最初不会看到这些。
2.内核 初始化(init)进程及系统服务程序
1)引导加载程序将内核和基于RAM的初始文件系统(initramfs)加载到内存中,因此 内核可以直接使用它。当内核加载到RAM中时,它会立即初始化并配置计算机的内存,并配置连接到系统的所有硬件。这包括所有处理器,I / O子系统,存储设备等。内核还会加载一些必要的用户空间应用程序。
2)一旦内核设置了所有硬件并挂载了根文件系统,内核就会运行 (/sbin/init)。然后,这将成为初始进程,然后启动其他进程以使系统运行。系统上的大多数其他进程最终将其原点跟踪到 init ; 例外包括所谓的内核进程。这些是由内核直接启动的,他们的工作是管理内部操作系统的详细信息。除了启动系统外,init 还负责保持系统运行并干净地关闭系统。它的职责之一是在必要时作为所有非内核进程的管理者; 它在完成后清理完毕,并在用户登录和注销时根据需要重新启动用户登录服务,并对其他后台系统服务执行相同操作。
3)但是 init 将事物视为一个连续过程,分为一系列连续阶段。每个阶段都需要在下一阶段完成之前完成。因此,启动并不能轻易利用可在多个处理器或内核上完成的并行处理。这样开关机就变得异常的缓慢,这对于一些需要快速启动场景就不适合使用。正对此问题,开发了systemd启动方式。systemd的系统启动速度比早期的init方法快。这主要是因为它用积极的并行化技术取代了一系列步骤,这允许同时启动多个服务。复杂的启动shell脚本被更简单的配置文件所取代,这些配置文件枚举了在启动服务之前必须完成的工作,如何执行服务启动以及服务应该指示在启动完成时已完成的条件。需要注意的一点是 (/sbin/init) 现在只指向 (/lib/systemd/systemd) ; 即systemd接管init进程。
3.Linux文件系统基础知识
1)Linux支持的不同类型的文件系统:
- 传统磁盘的文件系统: EXT2,EXT3,EXT4,XFS,增加了Btrfs,JFS,NTFS等等。
- 闪存存储文件系统:ubifs,JFFS2,YAFFS等
- 数据库文件系统
- 特殊用途的文件系统:PROCFS,sysfs的,tmpfs的,squashfs的,debugfs等等。
对比Windows系统
2)Linux使用' / '字符分隔路径(与使用' \ '的Windows不同),并且没有驱动器号。多个驱动器和/或分区作为目录安装在单个文件系统中。可移动媒体(如USB驱动器和CD和DVD)将显示为安装在 / run / media / yourusername / disklabel中, 用于最近的Linux系统,或者安装在/media下,用于较旧的发行版。例如,如果您的用户名是student,则可能最终在/run/media/student/ FEDORA上找到标有FEDORA 的USB 笔式驱动器,并且该光盘上的文件README.txt 将位于/run/media/student/FEDORA /README.txt。
3)所有Linux文件系统名称都区分大小写,因此/boot,/Boot和/BOOT 代表三个不同的目录(或文件夹)。许多发行版区分正确系统操作所需的核心实用程序和其他程序,并将后者放在/usr(用户)下的目录中。
4.选择Linux发行版本
1)更具自己的需要选择合适的Linux发行版本。
2)所有发行版的实际安装过程都非常相似(自行上网搜索)。从安装介质启动后,安装程序将启动并询问有关如何设置系统的问题。如果提供自动安装文件,则会跳过这些问题。然后,执行安装。最后,计算机重新启动到新安装的系统。许多安装程序可以使用配置文件完全自动完成安装,以指定安装选项。此文件称为基于Red Hat的系统的Kickstart文件,基于SUSE的系统的AutoYAST配置文件,以及基于Debian的系统的Preseed文件。
3)然你也可以选择通过虚拟机安装Linux的方式最大化的减少对你现有的计算的改变。
第四章 图形界面
1.图形桌面
1)使用Linux时,可以使用命令行界面(CLI)或图形用户界面(GUI)。要在CLI中工作,您必须记住用于执行任务的程序和命令,以及如何快速准确地获取有关其使用和选项的更多信息。另一方面,使用GUI通常快速而简单。它允许您通过图形图标和屏幕与系统进行交互。对于重复性任务,CLI通常更有效,而如果您不记得所有细节或只做很少的事情,GUI更容易操作。
2)GNOME是一个流行的桌面环境,具有易于使用的图形用户界面。它被捆绑为大多数Linux发行版的默认桌面环境,包括Red Hat Enterprise Linux,Fedora,CentOS,SUSE Linux Enterprise,Ubuntu和Debian。GNOME具有基于菜单的导航功能,有时可以轻松过渡到Windows用户。但是,正如您将看到的,即使它们都使用GNOME,在各个发行版中的外观也可能完全不同。
3)GNOME中的默认文本编辑器是gedit。它简单而强大,非常适合编辑文档,快速记录和编程。尽管gedit被设计为通用文本编辑器,但它还提供了拼写检查,突出显示,文件列表和统计信息的附加功能。
第五章 在图形界面进行系统配置
1.系统设置
1)设置时间,网络连接,软件安装更新。都是图形化的界面,和Windows差不多。
第六章 常见应用
1.互联网应用
2.办公和开发应用
1)大多数Linux发行版都提供LibreOffice,这是一个开源办公套件,始于2010年,并从OpenOffice.org发展而来。虽然我们已经列出了其他办公套件,但LibreOffice是最成熟,最广泛使用和强烈开发的。包含:
- Text (articles, books, reports, etc.) =>Word
- Spreadsheets =>Excel
- Presentations => PPT
- Graphical objects.
2)开发工具
Linux发行版附带了一整套应用程序和工具,这些应用程序和工具是开发或维护用户应用程序和内核本身所需的。
这些工具紧密集成,包括:
- 根据程序员的需求定制的高级编辑器,例如vi和emacs。
- 对于曾经存在的每种计算机语言的编译器(例如用于C和C ++程序的gcc)。
- 调试器,如gdb和各种图形前端,以及许多其他调试工具(如valgrind)。
- 性能测量和监控程序,其中一些具有易于使用的图形界面,另一些则更为神秘,仅供经验丰富的开发工程师使用。
- 完整的集成开发环境(IDE),例如Eclipse,将所有这些工具放在一起。
在其他操作系统上,这些工具必须单独获取和安装,通常需要付费,而在Linux上,通过标准软件包安装系统可以免费获得这些工具。
3.多媒体应用
Linux系统提供了许多声音播放器应用程序,包括:Amarok;Audacity;Rhythmbox;
Linux系统提供了许多电影播放器,包括:VLC;Mplayer;Xine;Totem;
还有电影编辑软件和PS软件。
第七章 命令行操作
1.命令行模式选项
1)Linux系统管理员在命令行提示符下花费了大量时间。它们通常会在此文本环境中自动执行任务并对其进行故障排除。有一种说法,“ 图形用户界面使简单的任务变得更容易,而命令行界面使得困难的任务成为可能 ”。Linux在很大程度上依赖于丰富的命令行工具。命令行界面具有以下优点:
- 不会产生GUI开销。
- 实际上,任何一项任务都可以在命令行中完成。
- 您可以为常用(或易于忘记)任务和一系列过程实现脚本。
- 您可以在Internet上的任何位置登录远程计算机。
- 您可以直接从命令行启动图形应用程序,而不是通过菜单查找。
- 虽然Linux发行版中的图形工具可能不同,但命令行界面却都是一致的。
2)终端仿真器程序在桌面上的窗口内模拟(模拟)独立终端。通过这种方式,我们的意思是它的行为基本上就像您在没有运行图形界面的纯文本终端上登录机器一样。大多数终端仿真程序通过打开其他选项卡或窗口来支持多个终端会话。默认情况下,在GNOME桌面环境中,gnome-terminal应用程序用于在窗口中模拟文本模式终端。其他可用的终端程序包括:xterm,rxvt,konsole,terminator。
3)在shell提示符下输入的大多数输入行有三个基本元素:
- 命令
- 选项
- 参数。
该命令是您正在执行的程序的名称。可以跟随一个或多个选项(或开关)来修改命令可以执行的操作。选项通常与一个或两个破折号,例如启动,-p 或 --print ,为了从区分它们的参数,这代表什么命令操作上。但是,很多命令没有选项,没有参数,或者两者都没有。此外,启动任务时,其他元素(如设置环境变量)也可以出现在命令行中。
4)创建的所有演示都有一个配置了sudo功能的用户,以便在需要时为用户提供管理(admin)权限。sudo允许用户使用另一个用户的安全权限运行程序,通常是root(超级用户)。sudo的功能类似于Windows中的运行功能。
5)如果您的系统尚未 设置和启用sudo ,则需要执行以下步骤:
- 您需要以管理员或超级用户root身份进行修改。虽然sudo将成为执行此操作的首选方法,但我们尚未设置它,因此我们将使用su(稍后将详细讨论)。在命令行提示符下,键入su 并按 Enter键。 然后,系统将提示您输入root密码,因此请输入该密码并按Enter键。你会注意到什么都没有打印出来; 这是其他人无法在屏幕上看到密码。你应该得到一个不同的看起来提示,通常以' # ' 结尾。例如:$ su 密码:#
- 现在,您需要创建配置文件以使您的用户帐户能够使用sudo。通常,此文件在/etc/sudoers.d/ 目录中创建,文件名与用户名相同。例如,对于此演示,假设您的用户名是“学生”。在执行第1步之后,您将通过执行以下操作为“student”创建配置文件:
#echo“student ALL =(ALL)ALL”> /etc/sudoers.d/student - 最后,如果你不通过这样做改变文件的权限,一些Linux发行版会报错:
#chmod 440 /etc/sudoers.d/student
如果您使用sudo ,则应正确设置。使用sudo时,默认情况下,系统会提示您至少在指定时间间隔内第一次提供密码(您自己的用户密码)。将sudo配置为不需要密码或更改每个sudo命令不必重复密码的时间窗口是可能的(尽管非常不安全)。
6)虚拟终端(VT)是在图形环境之外使用整个显示器和键盘的控制台会话。这样的终端被认为是“虚拟的”,因为尽管可以有多个活动终端,但是一次只有一个终端可见。VT与命令行终端窗口不完全相同; 您可以在图形桌面上同时显示许多可见的内容。
一个虚拟终端(通常为一号或七号)保留用于图形环境,并在未使用的VT上启用文本登录。Ubuntu使用VT 7,但CentOS / RHEL和openSUSE使用VT 1进行图形显示。
使用VT有用的情况的一个示例是当您遇到图形桌面问题时。在这种情况下,您可以切换到其中一个文本VT并进行故障排除。
要在VT之间切换,请按CTR的CTRL-ALT- 功能 键。例如,按下CTRL-ALT- F6用于VT 6.实际上,如果您在VT中并且想要切换到另一个VT ,则只需按下 ALT-F6组合键 。
7)Linux发行版可以通过各种方式启动和停止图形桌面。确切的方法不同于分布和分布版本。对于较新的基于systemd的发行版,显示管理器作为服务运行,您可以使用systemctl实用程序停止GUI桌面,大多数发行版也可以使用 telinit命令,如下所示:
$ sudo systemctl stop gdm (或 sudo telinit 3)
并重新启动它(登录到控制台后):
$ sudo systemctl start gdm (或 sudo telinit 5)
在18.04 LTS之前的Ubuntu版本中, 用lightdm代替gdm。
2.基本操作
1)关闭或重启系统的首选方法是使用shutdown 命令。这会发送一条警告消息,然后阻止其他用户登录。然后,init进程将控制关闭或重新启动系统。始终正常关闭非常重要; 如果不这样做可能会导致系统损坏和/或数据丢失。
该停止 和关机 命令发出 执行shutdown -h 中止系统; 重启 问题执行shutdown -r并导致机器重启,而不仅仅是关闭。从命令行重新启动和关闭都需要超级用户(root)访问权限。
管理多用户系统时,您可以选择在关闭之前通知所有用户,如下所示:
$ sudo shutdown -h 10:00 “Shutting down for scheduled maintenance.”
注意:在Ubuntu系统上,关闭消息不会广播给系统上当前的用户。
2)根据特定发行版策略的具体情况,程序和软件包可以安装在各种目录中。通常,可执行程序和脚本应该位于/ bin,/ usr / bin, / sbin, / usr / sbin 目录或/ opt下的某个位置 。它们也可以出现在/ usr / local / bin和/ usr / local / sbin中,或出现在用户帐户空间的目录中,例如/ home / student / bin。
3)有两种方法可以识别路径:
-
绝对路径名
绝对路径名以根目录开头,在树之后,逐分支,直到它到达所需的目录或文件。绝对路径始终以/开头。 -
相对路径名
相对路径名从当前工作目录开始。相对路径永远不会以/开头。
允许目录和文件之间存在多个斜杠(/),但系统会忽略路径名中元素之间的所有斜杠。//// usr // bin 有效,但被系统视为/ usr / bin 。大多数情况下,使用相对路径最方便,这需要较少的输入。通常,您可以利用以下提供的快捷方式:。(目录),...(父目录)和〜(您的主目录)。
4)下表是一个切换路径常用的命令
遍历文件系统树可能会变得乏味。该tree 的命令是获取文件系统树的鸟瞰视图的好方法。使用tree -d只查看目录并禁止列出文件名。
5)所述 LN 实用程序用于创建硬链接和(与-s选项)软链接,也称为符号链接或符号链接。这两种链接在基于UNIX的操作系统中非常有用。假设file1已经存在。硬链接,称为文件2,用下面的命令创建:
$ ln file1 file2
请注意,现在看来存在两个文件。但是,仔细检查文件列表会发现这并不完全正确。
$ ls -li file1 file2
ls的-i选项在第一列中打印出inode编号,这是每个文件对象的唯一数量。这两个文件的字段相同; 这里真正发生的是它只有一个文件,但它有多个与之关联的名称,如ls 输出 中出现的2所示。因此,已经有另一个对象链接到 file1 befo,执行命令。
硬链接非常有用,它们可以节省空间,但您必须小心使用它们,有时候会以微妙的方式使用。首先,如果 在示例中删除file1 或 file2,则会保留inode对象(和剩余的文件名),这可能是不合需要的,因为如果重新创建该名称的文件,以后可能会导致细微的错误。 如果您编辑其中一个文件,具体取决于您的编辑器; 大多数编辑器(包括vi和gedit)默认会保留链接,但修改其中一个名称可能会破坏链接并导致创建两个对象。
使用-s 选项创建软(或符号)链接,如下所示:
$ ln -s file1 file3
$ ls -li file1 file3
通知file3 似乎不再是一个普通的文件,它清楚地表明file1中并有不同的索引节点号。
符号链接在文件系统上不占用额外空间(除非它们的名称很长)。它们非常方便,因为它们可以很容易地修改为指向不同的地方。从home 目录到长路径名创建快捷方式的简便方法 是创建符号链接。
与硬链接不同,软链接甚至可以指向不同文件系统,分区和/或磁盘以及其他媒体上的对象,这些媒体可能目前可用,也可能不存在。如果链接未指向当前可用或现有对象,则会获得悬空链接。
硬链接有点类似于指针,软连接类似于快捷方式。
6)该CD 命令会记住你最后一次,并让你回到那里与CD - 。为了记住不仅仅是访问过的最后一个目录,使用pushd 来改变目录而不是cd ; 这会将您的起始目录推送到列表中。然后使用popd 将您发送回这些目录,以相反的顺序行走(最新的目录将是使用popd检索的第一个目录)。使用dirs命令显示目录列表。
3.文件管理
1)下表是一张阅读文件的命令:
2)touch 通常用于设置或更新文件的访问,更改和修改时间。默认情况下,它会重置文件的时间戳以匹配当前时间。
但是,您也可以使用touch创建一个空文件:
$ touch <filename>
通常这样做是为了创建一个空文件作为占位符以供以后使用。
touch 提供了几个有用的选项。例如, -t选项允许您将文件的日期和时间戳设置为特定值,如下所示:
$ touch -t 12091600 myfile
这将myfile文件的时间戳设置为12月9日下午4点(12 09 1600)。
3)mkdir用于创建目录:
- mkdir sampdir
它 在当前目录下创建一个名为 sampdir的示例 目录。 -
mkdir /usr/sampdir
它 在 / usr下创建一个名为 sampdir的示例目录。
使用rmdir删除目录 。该目录必须为空或命令将失败。要删除目录及其所有内容,您必须执行rm -rf。
4)下表展示操作文件的命令
5)下表展示操作文件夹的命令
输入rm -rf是一种快速简便的方法,可以递归地删除整个文件系统树,但它非常危险,应该非常谨慎地使用,尤其是在root用户使用时(回想一下,递归意味着向下删除所有子目录,一路下来一棵树)。
4.文件查找
1)执行命令时,默认情况下总共有三个标准文件流(或描述符)可供使用:标准输入(标准输入或标准输入),标准输出(标准输出或标准输出)和标准错误(或标准输出)。
通常,stdin是您的键盘,stdout和stderr会打印在您的终端上。stderr经常被重定向到错误记录文件,而stdin是通过将输入指向文件或通过管道从前一个命令的输出来提供的。stdout也经常被重定向到一个文件中。由于stderr是写入错误消息的地方,因此通常不会有任何内容。
在Linux中,所有打开的文件都由所谓的文件描述符在内部表示。简单地说,这些由从零开始的数字表示。stdin是文件描述符0,stdout是文件描述符1,stderr是文件描述符2.通常,如果除了这三个(默认打开)之外还打开了其他文件,它们将从文件描述符3开始并从那里开始增加。
2)通过命令shell ,我们可以重定向三个标准文件流,以便我们可以从文件或其他命令而不是从键盘获取输入,我们可以将输出和错误写入文件或使用它们为后续提供输入命令。
例如,如果我们有一个名为do_something的程序从stdin读取并写入stdout和stderr,我们可以使用less-than sign(< )后跟输入数据要使用的文件名来更改其输入源。:
$ do_something <input-file
如果要将输出发送到文件,请使用大于号(>),如下所示:
$ do_something> output-file
因为stderr与stdout不同,所以在上面的示例中终端窗口上仍会显示错误消息。
如果要将stderr重定向到单独的文件,则使用stderr的文件描述符编号(2),大于号(>),后跟要保存运行命令写入stderr的所有内容的文件的名称:
$ do_something 2>error-file
注意:通过相同的逻辑, do_something 1> output-file 与 do_something> output-file相同。
特殊的简写表示法可以将写入文件描述符2(stderr)的任何内容发送到与文件描述符1(stdout)相同的位置:2>&1。
$ do_something> all-output-file 2>&1
bash 允许上面更简单的语法:
$ do_something>&all-output-file
3)UNIX / Linux的理念是让许多简单和简短的程序(或命令)协同工作以产生非常复杂的结果,而不是让一个复杂的程序具有许多可能的选项和操作模式。为了实现这一点,大量使用管道。您可以将一个命令或程序的输出作为输入传递给另一个命令或程序。为此,我们使用竖线,| ,命令之间的(管道符号),如:
$ command1 | command2 | 指令代码
上面代表了我们经常称之为管道的东西,并允许Linux将几个命令的动作合并为一个。这非常有效,因为 command2 和 command3不必等待先前的管道命令完成,然后才能开始攻击其输入流中的数据; 在多个CPU或核心系统上,可用的计算能力得到更好的利用,并且可以更快地完成工作。
此外,不需要在管道中的各级之间的(临时)文件中保存输出,这节省了磁盘空间并减少了从磁盘读取和写入,这通常是完成某些操作的最慢瓶颈。
4)能够快速找到您要查找的文件将节省您的时间并提高工作效率。您可以在主目录空间或系统上的任何其他目录或位置中搜索文件。执行此操作的主要工具是locate 和find 实用程序。我们还将展示如何 在bash中使用通配符,以指定与给定的通用请求匹配的任何文件。
locate实用程序执行搜索把你的系统上的文件和目录的先前构建数据库的优势,匹配包含指定字符串的所有条目。这有时会导致很长的列表。 为了获得更短(可能更相关)的列表,我们可以使用grep程序作为过滤器。 grep将仅打印包含一个或多个指定字符串的行,如下所示:
$ locate zip | grep bin
这将列出 名称中包含zip 和bin的所有文件和目录。稍后我们将更详细地介绍grep 。注意使用 | 将两个命令组合在一起。
locate使用由相关实用程序创建的数据库 updatedb。大多数Linux系统每天自动运行一次。但是,您可以通过以root用户身份从命令行运行 updatedb来随时更新它 。
要使用?搜索文件,通配符用?替换每个未知字符。 例如,如果您只知道前两个字母是带有.out 扩展名的三字母文件名的“ba” ,请键入 ls ba?.out 。
要使用* 通配符搜索文件,请将未知字符串替换为 *。例如,如果您只记得扩展名为.out,请 输入 ls * .out。如下表所示:
5)find 是Linux系统管理员日常生活中非常有用且经常使用的实用程序。它从任何特定目录(或目录集)中递归文件系统树,并找到符合指定条件的文件。默认路径名始终是当前工作目录。
例如,管理员有时会扫描可能较大的核心文件(其中包含程序失败后的诊断信息),这些文件超过几周,以便将其删除。
删除最近未访问的/ tmp(和其他易失性目录,例如包含缓存文件的易失性目录)中的不必要或过时文件中的文件也很常见 。许多Linux发行版使用定期运行的shell脚本(通常通过cron)来执行这样的垃圾清理。
如果没有给出参数,find会列出当前目录及其所有子目录中的所有文件。缩短列表的常用选项包括-name(仅列出其名称中具有特定模式的列表文件),- iname(也忽略文件名的情况)和-type(将结果限制为某些指定的文件)类型,例如d表示目录,l 表示符号链接,f表示常规文件,等等。
搜索名为gcc的文件和目录:
$ find / usr -name gcc
仅搜索名为gcc的目录:
$ find / usr -type d -name gcc
仅搜索名为gcc的常规文件:
$ find / usr -type f -name gcc
find的另一个好用 是能够在符合搜索条件的文件上运行命令。该-exec选项是用于这一目的。
要查找和删除以.swp结尾的所有文件:
$ find -name “* .swp” -exec rm {} ';'
的 {} (花括号)是将被填充有来自查找表达式产生的所有文件名称的占位符和上述命令将在每一个被单独地运行。请注意,您必须以' ; '结束命令。'(包括单引号)或“ \; ”。两种形式都很好。也可以使用与-exec相同的选项,但find会在执行命令之前提示您获得权限。这使得它成为在盲目执行任何潜在危险命令之前测试结果的好方法。-ok
有时您希望根据属性查找文件,例如创建文件,上次使用等,或根据文件大小。执行此类搜索很容易。
根据时间查找文件:
$ find / -ctime 3
这里,-ctime 是inode元数据(即文件所有权,权限等)最后一次更改的时间; 首次创建文件时经常(但不一定)。您还可以搜索访问/上次读取(-atime)或修改/最后写入(-mtime)次。数字是天数,可以表示为正好表示该值的数字(n),+ n ,表示大于该数字,或者-n ,表示小于该数字。几分钟内有类似的选项(如-cmin, - 胺和 -mmin)。
要根据大小查找文件:
$ find / -size 0
请注意,默认情况下,此处的大小为512字节块; 您还可以指定字节(c),千字节(k),兆字节(M),千兆字节(G)等。与上面的时间数一样,文件大小也可以是精确数字(n),+ n或-n。有关详细信息,请参阅手册 页以查找。
例如,要查找大小超过10 MB的文件并对这些文件运行命令:
$ find / -size + 10M -exec command {} ';'
5.软件安装
1)Linux发行版的核心部分及其大多数附加软件都是通过包管理系统安装的。每个软件包都包含使一个软件组件运行良好并与构成整个系统的其他组件协作所需的文件和其他指令。包可以相互依赖。两个软件包管理系统都在两个不同的级别上运行:低级工具(如dpkg或rpm)负责处理拆包单个软件包,运行脚本,正确安装软件以及高级工具(如apt-get,yum , dnf或zypper)适用于包组,从供应商下载包,并计算出依赖关系。大多数情况下,用户只需要使用高级工具,它将负责根据需要调用低级工具。依赖性解析是高级工具的一个特别重要的功能,因为它处理为您查找和安装每个依赖项的详细信息。但是要小心,因为安装单个软件包可能会导致安装许多甚至数百个依赖软件包。
Advanced Packaging Tool (apt)是底层包管理系统,用于管理基于Debian的系统上的软件。虽然它构成了图形包管理器的后端,例如 Ubuntu软件中心和 synaptic ,但它的本机用户界面位于命令行,其中的程序包括apt-get 和apt-cache。
Yellowdog Updater Modified ( yum )是一个开源命令行包管理实用程序,适用于属于 Red Hat / Fedora 系列的RPM兼容Linux系统。 yum 有命令行和图形用户界面。最近的 Fedora 版本已经用一个名为 dnf 的新实用程序取代了 yum ,这个实用程序 具有较少的历史包袱,具有良好的新功能,并且与日常命令的 yum 大多向后兼容 。
zypper 是 SUSE / openSUSE 系列的包管理系统, 也基于RPM。zypper 还允许您从命令行管理存储库。zypper 使用相当简单,并且非常接近 yum 。
基本的打包命令如下:
第八章 获取Linux资料
1. Linux资料获取该方式
无论您是缺乏经验的用户还是老手,您都不会总是知道(或记住)各种Linux程序和实用程序的正确使用:输入命令是什么,需要选择哪些选项等等。您需要咨询帮助文件定期。由于基于Linux的系统来自各种各样的来源,因此有许多文档库和获取帮助的方法。经销商整合这些材料并以全面且易于使用的方式呈现。
重要的Linux文档源包括:
2. 通过man命令查看man page获取帮助
手册页是最常用的Linux文档源。它们提供了有关许多程序和实用程序的深入文档,以及其他主题,包括配置文件,系统调用,库例程和内核的编程API。它们出现在所有Linux发行版上,总是触手可及。手册 页基础结构最初是在早期的UNIX版本中引入的,在20世纪70年代初。man这个名字只是手册的缩写。使用主题名称作为参数键入man会检索主题手册页中存储的信息。手册页通常会转换为其他格式,例如PDF文档和网页。要了解更多信息,请在线查看Linux手册页。许多网页都有一个帮助项目的图形界面,可能包括手册页。其他文档来源包括已出版的书籍和许多Internet站点。
man程序搜索,格式化并显示手册页系统中包含的信息。由于许多主题都包含大量相关信息,因此输出通过寻呼机 程序(例如less)进行管道(pipe)传输,以便一次查看一页。同时,格式化信息以获得良好的视觉显示。
给定主题可能具有与其关联的多个页面,并且存在默认顺序,确定在未指定选项或节号时显示哪个页面。要列出该主题的所有页面,请使用-f选项。要列出讨论指定主题的所有页面(即使名称中不存在指定的主题),请使用-k 选项。
man -f 生成与输入whatis相同的结果。
man -k 生成与输入apropos相同的结果 。
默认顺序在/etc/man_db.conf 指定,并且大致(但不完全)按部分按升序排列。
手册页分为编号为1到9的章节。在某些情况下,会在章节编号后附加一个字母以标识特定主题。例如,描述部分X Window API的许多页面都在第3X章中。章节号可用于强制人显示特定章节的页面。通常在具有相同名称的多个章节中具有多个页面,尤其是对于库函数或系统调用的名称。
使用-a参数,man将在所有章节中一个接一个地显示具有给定名称的所有页面,如:
$ man -a socket
3. 通过info查看GNU info 获取帮助
Linux文档的下一个来源是GNU Info System。这是GNU项目的标准文档格式,它更喜欢作为man的替代品。信息系统基本上是*格式的,并支持链接的子部分。从功能上讲,信息在很多方面类似于人。但是,主题使用链接进行连接(即使其设计早于万维网)。可以通过命令行界面,图形帮助实用程序查看信息,在线打印或查看。
在终端窗口中键入不带参数的info会显示可用主题的索引。您可以使用常规移动键浏览主题列表: 箭头,Page Up和Page Down。
您可以通过键入info <topic name>来查看特定主题的帮助。然后系统在所有可用信息文件中搜索主题。
一些有用的键是:q退出,h寻求帮助,然后按Enter选择菜单项。
您在信息页面中查看的主题称为节点。 该表列出了在节点之间移动的基本按键。节点本质上是文档中的部分和子部分。您可以在节点之间移动或按顺序查看每个节点。每个节点可以包含菜单和链接的子主题或项目。
项目的功能类似于浏览器链接,并在项目名称的开头用星号(*)标识。命名项目(菜单之外的)引用,用双冒号(::)在项目名称的末尾)。项可以引用文件中的其他节点或其他文件。
4. 通过help选项以及help命令产看help帮助
Linux文档的另一个重要来源是使用--help选项。 大多数命令都有可用的简短描述,可以使用--help 或-h选项以及命令或应用程序查看。例如,要了解有关man命令的更多信息,可以运行以下命令:
$ man --help
该--help选项是为快速参考有用的,它比man或info更快的显示信息页面。
当在bash命令shell中运行时,一些流行的命令(例如echo 和cd)实际上特别运行在bash版本的命令中,而不是在文件系统上找到的常用二进制文件,比如在/ bin或/ usr / bin下。这样做效率更高,因为执行速度更快,因为使用的资源更少。稍后我们将详细讨论命令shell,例如bash。应该注意,在命令的两个版本中可能存在一些(通常很小的)差异。
要查看这些内置命令的概要,您只需键入help ,如屏幕截图所示。
对于这些内置命令,help 执行与-h和--help参数相同的基本功能,以执行独立程序。
5. 其他方式获取帮助
除了手册页,GNU信息系统和帮助命令之外,还有其他Linux文档源,其中一些示例包括:
- 桌面帮助系统
- 包文档
- 在线资源
在线资源:
有很多地方可以访问在线Linux文档,稍微进行一些搜索就会让你陷入其中。以下书籍已经过本课程的其他用户的好评。它是Creative Commons许可下的免费可下载命令行纲要: William Shotts的“ Linux命令行 ”。您还可以找到每个分发的非常有用的文档。每个发行版都有自己的用户生成的论坛和wiki部分。以下是此类来源的一些链接:
此外,您可以使用在线搜索网站查找来自互联网的有用资源,包括博客文章,论坛和邮件列表帖子,新闻文章等。
第九章 进程
1. 进程与进程属性简介
1)进程只是在您的计算机上执行的一个或多个相关任务(线程)的实例。它与程序或命令不同。单个命令实际上可以同时启动多个进程。某些流程彼此独立,其他流程相关。一个进程的故障可能会或可能不会影响系统上运行的其他进程。进程使用许多系统资源,例如内存,CPU(*处理器)周期和外围设备,例如打印机和显示器。操作系统(尤其是内核)负责为每个进程分配这些资源的适当份额,并确保整体优化的系统利用率。
终端窗口(一种命令shell)是一个只要需要运行的进程。它允许用户在交互式环境中执行程序和访问资源。您还可以在后台运行程序,这意味着它们与shell分离。根据正在执行的任务,进程可以是不同类型的。以下是一些不同的流程类型及其描述和示例:
称为调度程序的关键内核函数不断地在CPU上下移动进程,根据相对优先级共享时间,需要多少时间以及已经为任务授予了多少时间。 当进程处于所谓的运行状态时,这意味着它正在当前正在CPU上执行指令,或者正在等待被分配时间(时间片)以便它可以执行。此状态下的所有进程都驻留在所谓的运行队列上,在具有多个CPU或核心的计算机上,每个进程都有一个运行队列。然而,有时进程会进入所谓的睡眠状态,通常是在它们可以恢复之前等待某些事情发生时,也许是为了用户输入内容。在这种情况下,进程正处于等待队列中。还有一些其他不太常见的进程状态,特别是当进程终止时。有时,子进程完成,但其父进程尚未询问其状态。有趣的是,据说这个过程处于一个僵尸状态; 它不是真的存在,但仍然显示在系统的进程列表中。
2)在任何给定时间,总是有多个进程被执行。操作系统通过为每个进程分配唯一的进程ID(PID)来跟踪它们。PID用于跟踪进程状态,CPU使用情况,内存使用情况,资源在内存中的确切位置以及其他特征。当进程诞生时,新PID通常按升序分配。因此,PID 1表示初始化过程(初始化过程),并且向后续过程逐渐分配更高的数字。
该表解释了PID类型及其描述:
在某些时候,您的某个应用程序可能会停止正常工作。你怎么终止它?
要终止进程,可以键入kill -SIGKILL <pid> 或kill -9 <pid>。
但是请注意,您只能结束自己的进程; 那些属于另一个用户的人是禁止的,除非你是root用户。
许多用户可以同时访问系统,每个用户可以运行多个进程。操作系统通过分配给用户的真实用户ID(RUID)识别启动过程的用户。确定用户访问权限的用户由有效UID(EUID)标识。EUID可能与RUID相同,也可能不同。用户可以分为不同的组。每个组由Real Group ID(RGID)标识。组的访问权限由有效组ID(EGID)确定。每个用户可以是一个或多个组的成员。大多数情况下,我们忽略这些细节,只谈论用户ID(UID)。
2. 进程参数和进程控制
1)平均负载是给定 时间段内负载数的平均值。它考虑了以下流程:
- 活跃在CPU上的
- 被认为是可运行的,但等待CPU变得可用
- 睡眠:即等待某种资源(通常是I / O)变得可用。
注意:Linux与其他类UNIX操作系统的不同之处在于它包含休眠进程。此外,它只包括所谓的不可打断的睡眠进程,即不能轻易被唤醒的进程。
2)可以通过运行w, top或正常运行时间来查看负载平均值。我们将在下一页解释这些数字。
使用三组不同的数字显示负载平均值,如以下示例所示:
最后一条信息是系统的平均负载。假设我们的系统是单CPU系统,则三个负载平均数解释如下:
- 0.45:在最后一分钟,系统平均使用率为45%。
- 0.17:在最后5分钟,利用率为17%。
- 0.12:过去15分钟,利用率为12%。
如果我们在第二个位置看到值为1.00,则意味着单CPU系统在过去5分钟内平均100%被利用; 如果我们想要完全使用系统,这是好的。单CPU系统的值超过1.00意味着系统被过度使用:需要CPU的进程多于CPU可用的进程数。如果我们有一个以上的CPU,比如一个四CPU系统,我们会将负载平均数除以CPU的数量。在这种情况下,例如,看到1分钟的负载平均值为4.00意味着整个系统在最后一分钟内使用了100%(4.00 / 4)。短期增长通常不是问题。你看到的高峰可能是一阵活动,而不是一个新的水平。例如,在启动时,许多流程开始,然后活动稳定下来。如果在5分钟和15分钟的负载平均值中看到高峰值,则可能引起关注。
Linux支持后台和前台作业处理。此上下文中的作业只是从终端窗口启动的命令。前台作业直接从shell运行,当一个前台作业运行时,其他作业需要等待shell访问(至少在终端窗口中,如果使用GUI),直到完成。当工作快速完成时,这很好。但如果当前的工作需要很长时间(甚至几个小时)才能完成,这会产生不利影响。在这种情况下,您可以在后台运行作业并释放shell以执行其他任务。后台作业将以较低优先级执行,这反过来将允许顺利执行交互式任务,并且您可以在后台作业运行时在终端窗口中键入其他命令。默认情况下,所有作业都在前台执行。您可以通过后缀& 命令将作业放在后台,例如:updatedb&。
您可以使用CTRL-Z暂停前台作业,也可以使用CTRL-C终止前台作业,并且可以始终使用 bg 和 fg命令分别在后台和前台运行进程。
3)jobs 程序显示在后台运行的所有作业。显示屏显示作业ID,状态和命令名称,如下所示。
jobs -l 提供与jobs相同的信息,包括后台作业的PID。
后台作业连接到终端窗口,因此,如果您注销,jobs 实用程序将不会显示从该终端启动的进程。
3. 进程监控——ps命令和top命令
1)ps 提供有关PID键入的当前正在运行的进程的信息。如果要重复更新此状态,可以从命令行使用 top 或其他常用安装的变体,例如 htop 或 atop,或调用分发的图形系统监视器应用程序。ps 有许多选项可以准确指定要检查的任务,显示哪些信息以及应该使用的输出格式。如果没有选项, ps 将显示在当前shell下运行的所有进程。您可以使用 -u 选项显示指定用户名的进程信息。命令 ps -ef 将详细的显示系统中的所有进程。命令 ps -eLf 更进一步,为每个线程显示一行信息(记住,一个进程可以包含多个线程)。
ps 有另一种选项规范,它源于BSD的各种UNIX,其中选项是在没有前面的破折号的情况下指定的。例如,命令 ps aux显示所有用户的所有进程。ps axo命令允许您指定要查看的属性。屏幕截图显示了 带有 aux 和 axo 限定符的ps的示例输出 。
2)pstree 以树形图的形式显示系统上运行的进程,显示 进程及其父进程与其创建的任何其他进程之间的关系。不显示进程的重复条目,并且线程以大括号显示。
虽然静态查看系统正在执行的操作非常有用,但随着时间的推移监控系统性能也很有价值。一种选择是定期运行ps ,比如每两分钟运行一次。一个更好的选择是使用top 来获得持续的实时更新(默认情况下每两秒),直到你输入 q 退出。top 清楚地突出显示哪些进程消耗最多的CPU周期和内存(使用top 的适当命令)。
3)top 输出的第一行显示系统中发生的事情的快速摘要,包括:
- 系统已经运行了多长时间
- 登录了多少用户
- 什么是负载平均值。
负载平均值决定了系统的繁忙程度。每个CPU的平均负载为1.00表示系统已完全订阅但未过载。如果负载平均值超过此值,则表示进程正在争用CPU时间。如果负载平均值非常高,则可能表示系统出现问题,例如失控进程(处于无响应状态的进程)。
top 输出的第二行显示进程总数,运行数,休眠数,停止数和僵尸进程数。将正在运行的进程数与平均负载进行比较有助于确定系统是否已达到其容量,或者某个特定用户是否运行了太多进程。应检查已停止的进程以查看是否所有内容都正常运行。
top 输出的第三行通过显示每个用户使用的CPU时间百分比来指示如何在用户(我们)和内核(sy)之间划分CPU时间。然后列出以较低优先级运行的用户作业的百分比(niceness-ni)。如果负载平均值很高,则空闲模式(id)应为低,反之亦然。列出了I / O 等待(wa)的作业的百分比。中断包括硬件(hi)与软件中断(si)的百分比。窃取时间(st)通常用于虚拟机,其具有用于其他用途的一些空闲CPU时间。
top 输出的第四行和第五行表示内存使用情况,分为两类:
- 物理内存(RAM) - 显示在第4行。
- 交换空间 - 显示在第5行。
两个类别都显示总内存,已用内存和可用空间。您需要非常仔细地监视内存使用情况,以确保良好的系统性能。一旦物理内存耗尽,系统就会开始使用交换空间(硬盘驱动器上的临时存储空间)作为扩展内存池,并且由于访问磁盘比访问内存要慢得多,这将对系统性能产生负面影响。如果系统经常开始使用交换,则可以添加更多交换空间。但是,还应考虑添加更多物理内存。
top 输出的进程列表中的每一行显示有关进程的信息。默认情况下,进程按CPU使用率最高排序。将显示有关每个进程的以下信息:
- 过程识别号(PID)
- 流程所有者(USER)
- 优先级(PR)和漂亮的值(NI)
- 虚拟(VIRT),物理(RES)和共享内存(SHR)
- 现状(S)
- 使用的CPU(%CPU)和内存(%MEM)的百分比
- 执行时间(TIME +)
- 命令(命令)。
除了报告信息外, 还可以交互使用top来监控和控制流程。当top 在终端窗口中运行时,您可以输入单字母命令来更改其行为。例如,您可以根据CPU或内存使用情况查看排名靠前的进程。如果需要,您可以更改正在运行的进程的优先级,也可以停止/终止进程。该表列出了在运行top时按下各种键时会发生什么:
4. 进程定时设置
1)AT 命令 : 假设您需要在将来某个特定日期执行任务。但是,你知道那天你将远离机器。你将如何执行任务?您可以使用at 实用程序在指定时间执行任何非交互式命令,如图所示:
2)corontab 命令 : cron是一个基于时间的调度实用程序。它可以在特定时间和/或日期持续启动例行后台工作。cron由名为 / etc / crontab (cron table)的配置文件驱动,该文件包含需要在正确安排的时间运行的各种shell命令。有系统范围的crontab文件和基于用户的单独文件。crontab文件的每一行代表一个作业,由一个所谓的 CRON表达式组成,后跟一个shell命令来执行。在crontab -e命令命令将打开的crontab编辑器编辑现有作业或创造新的就业机会。crontab文件的每一行将包含6个字段:
例子:
- 条目* * * * * /usr/local/bin/execute/this/script.sh 将安排一个作业在每个月的每个小时,每个月和每一天的每个小时执行' script.sh '在这一周。
- 条目30 08 10 06 * / home / sysadmin / full-backup 将安排在6月10日上午8点30分进行全面备份,而不管一周中的哪一天。
3)sleep 命令: 有时,必须延迟或暂停命令或工作。例如,假设应用程序已读取并处理了数据文件的内容,然后需要在备份系统上保存报告。如果备份系统当前正忙或不可用,则可以使应用程序休眠(等待)直到它可以完成其工作。这种延迟可能是安装备份设备并准备写入。sleep 会暂停执行至少指定的时间段,该时间段可以是秒数(默认值),分钟,小时或天数。在该时间过去之后(或者已经接收到中断信号),将继续执行。语法是:
sleep NUMBER [SUFFIX] ...
其中SUFFIX可能是:
- s 秒(默认值)
- m 分钟
- h 小时
- d 天
sleep 和AT 有很大的不同; sleep 延迟执行特定时间段,而AT 稍后开始执行时。
第十章 文件操作
1. 文件系统
1)在Linux(以及所有类UNIX操作系统)中,通常会说“一切都是文件”,或者至少它被视为一种文件。这意味着无论您是处理普通数据文件和文档,还是使用声卡和打印机等设备,都可以通过相同类型的输入/输出(I / O)操作与它们进行交互。这简化了一些事情:你打开一个“文件”并执行正常操作,比如阅读文件并在其上书写(这就是为什么文本编辑器,你将在后面的部分中学到的,是如此重要的一个原因)。在许多系统(包括Linux)上,文件系统的结构类似于树。树通常被描绘为倒置,并从最常被称为根目录 开始,该目录标记分层文件系统的开始, 有时也称为主干,或简单地用 /表示。根目录是不 一样的根用户。分层文件系统还包含路径中的其他元素(目录名称),它们由正斜杠(/)分隔,如/ usr / bin / emacs,其中最后一个元素是实际文件名。在本节中,您将了解一些基本概念,包括文件系统层次结构以及磁盘分区。
Linux支持许多由Linux开发人员明确创建的本机文件系统类型,例如:
- EXT3
- EXT4
- 的squashfs
- BTRFS
它还提供在其他外来操作系统上使用的文件系统的实现,例如:
- Windows ( ntfs , vfat )
- SGI(xfs)
- IBM(jfs)
- MacOS(hfs,hfs +)。
还支持许多较旧的旧文件系统,例如FAT 。通常情况下,在机器上使用多个文件系统类型,这取决于诸如文件大小,修改频率,它们所处的硬件类型以及需要何种访问速度等因素等。常用的*文件系统类型是日记类型:ext4,xfs,btrfs和jfs。它们具有许多最先进的功能和高性能,并且基本不会出现突然崩溃的情况。
2)如前所述,Linux系统上的每个文件系统都占用硬盘分区。分区有助于根据所包含数据的类型和用途组织磁盘的内容。例如,运行系统所需的重要程序通常保存在单独的分区(称为root或/)上,而不是包含该系统的常规用户(/ home)所拥有的文件的分区。此外,在Linux的正常操作期间创建和销毁的临时文件可能位于专用分区上。这种类型和可变性隔离的一个优点是,当特定分区上的所有可用空间都耗尽时,系统仍可正常运行。这些图片显示了一个名为gparted的实用程序的使用,它在一个系统上显示分区布局,该系统上有三个操作系统:Windows 10,RHEL 7和Ubuntu 18.04。
在开始使用文件系统之前,需要将其安装到安装点的文件系统树中。这只是一个文件系统要附加(挂载)的目录(可能是空的,也可能不是空的)。有时,如果目录尚不存在,您可能需要创建该目录。
警告:如果在非空目录上挂载文件系统,则该目录的以前内容将被覆盖,并且在卸载文件系统之前无法访问。因此,挂载点通常是空目录。
3)mount 指令用于安装文件系统(可以是本地计算机或,我们将讨论在网络上)的文件系统树中的某处。基本参数是设备节点和挂载点。例如,
$ sudo mount /dev/sda5/home
将与/ dev / sda5设备节点关联的磁盘分区中包含的文件系统附加到/ home 挂载点的文件系统树中。还有其他方法可以指定除设备节点之外的分区,例如使用磁盘标签或UUID。要卸载分区,命令将是:
$ sudo umount /home
注意命令是 umount,而不是卸载!除非以其他方式配置了系统,否则只有root用户(以root身份登录或使用sudo)才有权运行这些命令。如果您希望每次系统启动时它都自动可用,您需要相应地编辑/ etc / fstab(名称是文件系统表的简称)。查看此文件将显示所有预配置文件系统的配置。man fstab将显示如何使用此文件以及如何配置它。 不带任何参数的键入mount将显示所有当前安装的文件系统。 命令df -Th(无磁盘)将显示有关已安装文件系统的信息,包括文件系统类型以及有关当前使用和可用空间的使用情况统计信息。
通常需要跨物理系统共享数据,这些物理系统可以位于相同位置或因特网可以到达的任何地方。网络(有时也称为分布式)文件系统可以将所有数据放在一台计算机上,也可以将其分布在多个网络节点上。可以在各个机器上本地使用各种不同的文件系统; 网络文件系统可以被认为是不同类型的低级文件系统的分组。
许多系统管理员在服务器上安装远程用户的主目录,以便他们可以跨多个客户端系统访问相同的文件和配置文件。这允许用户登录到不同的计算机,但仍然可以访问相同的文件和资源。最常见的此类文件系统仅命名为NFS(网络文件系统)。它历史悠久,最初由Sun Microsystems开发。另一个常见的实现是CIFS(也称为SAMBA),它具有Microsoft roots。我们将在NFS的后续内容中限制我们的注意力。
我们现在将详细介绍如何在服务器上使用NFS。在服务器计算机上,NFS使用守护程序(Linux中的内置网络和服务进程),并通过键入以下命令行启动其他系统服务器:
$ sudo systemctl start nfs
文本文件/ etc / exports包含主机愿意通过NFS与其他系统共享的目录和权限。此文件中的一个非常简单的条目可能如下所示:
/ projects * .example.com(rw)
此条目允许使用具有读写(rw)权限的NFS挂载目录/project,并与example.com域中的其他主机共享。正如我们将在下一章中详细介绍的那样,Linux中的每个文件都有三种可能的权限:read(r),write(w)和execute(x)。
修改/ etc / exports文件后,可以使用exportfs -av命令通知Linux有关允许使用NFS远程挂载的目录。您也可以使用sudo systemctl restart nfs restart NFS 但这指令更笨重,因为它会在启动它之前暂停NFS一段时间。要确保在 系统引导时NFS 服务启动,请使用 sudo systemctl enable nfs.
在客户端计算机上,如果希望在系统引导时自动挂载远程文件系统,则会修改/ etc / fstab文件以完成此操作。例如,客户端的/ etc / fstab文件中的条目可能如下所示:
servername:/ projects / mnt / nfs / projects nfs default 0 0
您也可以在不重启的情况下挂载远程文件系统,也可以直接使用mount命令作为一次性挂载:
$ sudo mount servername:/ projects / mnt / nfs / projects
请记住,如果未修改/ etc / fstab ,则下次重新启动系统时将不会显示此远程装载。此外,如果NFS服务器在引导时不活动,您可能希望在fstab中使用nofail选项。
2. 文件系统架构
1)在本节中,您将学习如何识别和区分Linux中最重要的目录。我们从普通用户的主目录空间开始。每个用户都有一个主目录,通常位于/ home下。现代Linux系统上的/ root 目录只不过是root用户(或超级用户或系统管理员帐户)的主目录。在多用户系统上,/ home目录基础结构通常作为单独的文件系统安装在其自己的分区上,甚至通过NFS在网络上远程导出(共享)。有时,您可以根据用户的部门或职能对用户进行分组。然后,您可以在/ home目录下为每个组创建子目录。例如,学校可以使用以下内容组织 /home:
- / home / faculty /
- / home / staff /
- / home / students /
2)在/ bin中目录包含可执行二进制码,用于启动系统或在单用户模式必需的命令,并且通过所有系统用户所需的必要的命令,如cat,CP,LS,MV,PS 和rm 。
3)同样,/ sbin 目录用于与系统管理相关的基本二进制文件,例如 fsck 和 shutdown。要查看这些程序的列表,请 键入:
$ ls / bin / sbin
系统在单用户模式下启动或运行不是必需(理论上)的命令放在/ usr / bin 和/ usr / sbin 目录中。从历史上看,这样做是为了使 / usr 可以作为单独的文件系统安装,可以在系统启动的后期或甚至通过网络安装。但是,现在大多数人认为这种区别已经过时了。实际上,已经发现许多发行版无法通过这种分离启动,因为这种模式很长时间没有被使用或测试过。因此,在一些最新的Linux发行版 / usr / bin 和 / bin 实际上只是象征性地链接在一起,就像/ usr / sbin和/ sbin一样。
4)某些文件系统,像一个安装在 / proc中,被称为伪文件系统,因为他们没有永久存在磁盘上的任意位置。的/ PROC文件系统包含允许观看不断变化的内核数据虚拟文件(仅在存储器中存在的文件)。该文件系统包含模仿内核结构和配置信息的文件和目录。它不包含真实文件,但包含运行时系统信息,例如系统内存,安装的设备,硬件配置等./ proc中的一些重要文件是:
/ proc / cpuinfo
/ proc / interrupts
/ proc / meminfo
/ proc / mounts
/ proc / partitions
/ proc / version
/ proc 也有子目录,包括:
/ proc / <Process-ID - #>
/ proc / sys
第一个示例显示系统上运行的每个进程都有一个目录,其中包含有关它的重要信息。第二个示例显示了一个虚拟目录,其中包含有关整个系统的大量信息,特别是其硬件和配置。在/ proc中因为需要它报告中的信息只是收集,也不需要在磁盘上存储的文件系统是非常有用的。
5)所述的/ dev目录包含的设备节点,大多数硬件和软件设备中使用的,除了网络设备中的类型伪的文件。这个目录是:
- 未安装磁盘分区时清空
- 包含由udev创建的条目system,在Linux上创建和管理设备节点,在找到设备时动态创建它们。在的/ dev目录包含项目,如:
- / dev / sda1 (第一个硬盘上的第一个分区)
- / dev / lp1(第二台打印机)
- / dev / random (随机数的来源)。
6)在/ var目录包含可能会在大小和内容的系统改变运行文件(VAR代表变量),如以下目录中的条目:
- 系统日志文件:/ var / log
- 包和数据库文件:/ var / lib
- 打印队列:/ var / spool
- 临时文件:/ var / tmp。
在/ var目录可以在它自己的文件系统可以把这样的文件的扩展可容纳和文件大小不严重影响的系统。在/ var下也可以找到网络服务目录,例如/ var / ftp(FTP服务)和/ var / www(HTTP Web服务)。
7)在/ etc目录存放系统配置文件。虽然有一些可执行脚本,但它不包含二进制程序。例如,/ etc / resolv.conf 告诉系统在网络上的哪个位置获取IP地址映射(DNS)的主机名。像用于管理用户帐户的文件 passwd, shadow 和group 会被存储于的/ etc目录中。虽然一些发行版历史上在/ etc下有自己广泛的基础结构 (例如,Red Hat和SUSE使用了/ etc / sysconfig),但随着systemd的出现,今天发行版之间的分布更加均匀。
请注意, / etc 适用于系统范围的配置文件,只有超级用户可以修改那里的文件。用户特定的配置文件始终位于其主目录下。
8)在/ boot目录包含引导系统所需的一些必要的文件。对于系统上安装的每个替代内核,有四个文件:
-
vmlinuz
引导所需的压缩Linux内核。 -
initramfs
引导所需的初始ram文件系统,有时称为initrd,而不是initramfs。 -
config
内核配置文件,仅用于调试和簿记。 -
System.map
内核符号表,仅用于调试。
这些文件中的每一个都在其名称后附加了内核版本。 在/ boot目录下也可以找到Grand Unified Bootloader(GRUB)文件,例如/boot/grub/grub.conf或/boot/grub2/grub2.cfg。
屏幕截图显示了/ boot 目录的示例列表,该目录取自具有多个已安装内核的RHEL 7系统,包括分发提供的内核和自定义编译的内核。名称会有所不同,并且在不同的分布上看起来会有所不同。
9)/ lib包含 / bin和 / sbin中基本程序的库(应用程序共享的公共代码,需要它们运行)。这些库文件名以 ld或 lib开头。 例如,/ lib / libncurses.so.5.9。其中大多数是所谓的动态加载库(也称为共享库或共享对象(SO))。在某些Linux发行版中,存在 包含64位库的/ lib64目录,而/ lib 包含32位版本。在最近的Linux发行版中,可以发现:
即就像/ bin 和/ sbin一样,目录只指向/ usr下的目录。内核模块(内核代码,通常是设备驱动程序,可以在不重新启动系统的情况下加载和卸载)位于/ lib / modules / <kernel-version-number>中。
人们经常使用可移动媒体,例如USB驱动器,CD和DVD。要使材料可通过常规文件系统访问,必须将其安装在方便的位置。大多数Linux系统都已配置,因此当系统注意到已插入的内容时,会自动安装任何可移动介质。虽然历史上这是在/ media 目录 下完成的 ,但现代Linux发行版将这些挂载点放在/ run 目录下。例如,用户名为“student”的带有标签“myusbdrive”的USB笔式驱动器将安装在 / run / media / student / myusbdrive上。
10)/ mnt 目录因为UNIX初期临时挂载文件系统目录中而被使用。这些可以是可移动媒体上的那些,但更常见的可能是具有NFS的网络文件系统,这些系统通常不会安装。或者这些可以是临时分区,或所谓的环回文件系统,它们是伪装成分区的文件。
11)在根目录下可以找到一些其他目录:
12)在/ usr目录树包含理论上非必要的程序和脚本(在这个意义上,他们不应该需要初始化系统),并至少有以下子目录:
3. 文件对比和文件类型
1)既然您已了解文件系统及其结构,那么让我们学习如何管理文件和目录。diff 用于比较文件和目录。这个经常使用的实用程序有许多有用的选项(参见: man diff),包括:
要比较两个文件,请在命令提示符下键入diff [options] <filename1> <filename2>。diff意味着用于文本文件; 对于二进制文件,可以使用 cmp。
您可以使用diff3一次比较三个文件,diff3使用一个文件作为另外两个文件的参考基础。例如,假设您和同事都对同一个文件进行了独立修改。diff3 可以根据您开始使用的公共文件显示差异。diff3的语法 如下:
$ diff3 MY-FILE COMMON-FILE YOUR-FILE
2)许多修改,以源代码和配置文件分布利用贴剂,其中应用,这并不奇怪,与 patch 程序。修补程序文件包含将旧版本文件更新为新文件所需的增量(更改)。补丁文件实际上是通过使用正确的选项运行diff来生成的,如:
$ diff -Nur originalfile newfile> patchfile
仅分发补丁比分发整个文件更简洁有效。例如,如果只需要在包含1000行的文件中更改一行,则补丁文件将只有几行。
要应用补丁,您可以执行以下两种方法之一:
$ patch -p1 <patchfile
$ patch originalfile patchfile
第一种用法更常见,因为它通常用于将更改应用于整个目录树,而不仅仅是一个文件,如第二个示例中所示。要了解-p1选项和许多其他选项的用法 ,请参阅patch 的手册页。Linux和其他开源社区经常使用patch 程序来传播修改和更新
在Linux中,文件的扩展名通常不会像在其他操作系统中那样对其进行分类。我们不能假设名为 file.txt 的文件是文本文件而不是可执行程序。在Linux中,文件名对系统用户而言通常比系统本身更有意义。实际上,大多数应用程序直接检查文件的内容以查看它是什么类型的对象而不是依赖于扩展。这与Windows处理文件名的方式非常不同,例如,以.exe结尾的文件名表示可执行的二进制文件。可以使用文件实用程序确定文件的真实性质。对于作为参数给出的文件名,它会检查内容和某些特征,以确定文件是纯文本,共享库,可执行程序,脚本还是其他内容。
4. 数据备份与数据压缩
1)数据备份
您可以通过多种方式备份数据甚至整个系统。这样做的基本方法包括使用cp进行简单复制或使用更强大的rsync。两者都可用于同步整个目录树。但是,rsync更有效,因为它检查正在复制的文件是否已存在。如果文件存在且大小或修改时间没有变化,rsync将避免不必要的复制并节省时间。此外,因为rsync只复制实际更改的文件部分,所以它可以非常快。cp只能复制本地计算机上的目标文件(除非您复制到使用NFS挂载的文件系统或从中复制),但 rsync也可用于将文件从一台计算机复制到另一台计算机。位置在target : path表单中指定,其中target 可以是[email protected] host的形式。该[email protected]部分是可选的,如果远程用户是来自本地用户的不同使用。当递归地将一个目录树复制到另一个目录树时, rsync非常有效,因为只有差异通过网络传输。通常使用 -r选项将目标目录树与原点同步,以递归方式向下遍历目录树,将所有文件和目录复制到列为源的列表下方。
rsync 是一个非常强大的实用程序。例如,备份项目目录的一种非常有用的方法可能是使用以下命令:
$ rsync -r project-X archive-machine:archives / project-X
请注意,rsync 可能非常具有破坏性!意外滥用会对数据和程序造成很大的伤害,因为无意中将更改复制到了不需要的地方。注意指定正确的选项和路径。强烈建议您首先使用- dry-run选项测试rsync 命令,以确保它提供所需的结果。
要在命令提示符下使用 rsync ,请键入rsync sourcefile destinationfile,其中任一文件可以位于本地计算机上,也可以位于联网计算机上; sourcefile的内容 将被复制到destinationfile。
选项的良好组合显示在:
$ rsync --progress -avrxH --delete sourcedir destdir
2)数据压缩
通常会压缩文件数据以节省磁盘空间并减少通过网络传输文件所需的时间。Linux使用许多方法来执行此压缩,包括:
这些技术的压缩效率(节省多少空间)和压缩时间有所不同; 通常,效率更高的技术需要更长时间。不同方法的减压时间变化不大。此外,tar 实用程序通常用于对存档中的文件进行分组,然后立即压缩整个存档。
a) gzip 是最常用的Linux压缩实用程序。它压缩得非常好并且非常快。下表提供了一些用法示例:
b) bzip2的语法类似于gzip,但它使用不同的压缩算法并生成明显更小的文件,代价是花费更长的时间来完成其工作。因此,它更可能用于压缩较大的文件。常见用法的例子也类似于 gzip:
c) xz 是Linux中使用的空间效率最高的压缩实用程序,压缩文件以.xz扩展名存储,现在用于存储Linux内核的存档。它再一次以较慢的压缩速度换取更高的压缩比。一些用法示例:
d) zip 程序不经常在Linux下使用压缩文件,但经常需要检查和其他操作系统解压缩档案。当您从Windows用户获取压缩文件时,它仅在Linux中使用。这是一个保留功能。
e) 历史上,tar 代表“磁带存档”,用于将文件存档到磁带。它允许您从归档文件创建或提取文件,通常称为tarball。同时,您可以选择在创建存档时进行压缩,并在提取其内容时进行解压缩。以下是使用tar的一些示例:
您可以分离归档和压缩阶段,如下所示:
$ tar cvf mydir.tar mydir; gzip mydir.tar
$ gunzip mydir.tar.gz; tar xvf mydir.tar
但这样做速度较慢,并且创建了不需要的中间.tar文件 浪费空间。
f) dd 工具是使原始磁盘空间复制非常有用的。例如,要备份主引导记录(MBR)(磁盘上包含描述该磁盘上分区的表的第一个512字节扇区),您可以键入:
$ dd if = / dev / sda of = sda.mbr bs = 512 count = 1
警告!
打字:
$ dd if = / dev / sda = / dev / sdb
要将一个磁盘复制到另一个磁盘上,将删除以前存在于第二个磁盘上的所有内容。
在第二个磁盘设备上创建第一个磁盘设备的精确副本。
不要像上面所写那样试验这个命令,因为它可以擦除硬盘!
dd 代表的名称恰好 是一个经常被争论的项目。数据定义这个词是最流行的理论,源于早期的IBM 历史。通常,人们开玩笑说它意味着磁盘破坏者和其他意外,如删除数据!
《11~18章链接》