目录
第一章 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 稍后开始执行时。