笔记:《linux就该这么学》-刘遄
没看完,但会持续更新到本条随笔中,只记我个人认为有用的,尤其是在前言部分中
我了怎么生成目录了,使用[TOC]+一行空行即可生成(有没有人知道为什么在段落前加缩进或者加空格,结果都无效呢...)
- 前言
- 开源许可协议
- GUN GPL(GUN General Public License,GNU通用公共许可证)
- BSD(Berkeley Software Distribution,伯克利软件发布版)许可协议
- Apache 许可证版本(Apache License Version)许可协议
- MPL(Mozilla Public License,Mozilla 公共许可)许可协议
- MIT(Massachusetts Institute of Technology)许可协议
- 常见的linux系统版本
- 首先需要区分Linux 系统内核与Linux 发行套件系统的不同
- 热门的几个Linux操作系统
- 红帽认证资格
- 红帽认证系统管理员(Red Hat Certified System Administrator,RHCSA)
- 红帽认证工程师(Red Hat Certified Engineer,RHCE)
- 红帽认证架构师(Red Hat Certified Architect,RHCA)
- 开源许可协议
- 第一章 部署虚拟环境安装Linux 系统
- 1.1 准备您的工具
- 1.2 安装配置VM 虚拟机
- 1.3 安装您的Linux 系统
- 1.4 重置root 管理员密码
- 1.5 RPM(RedHat Packages Manager红帽软件包管理器)
- 1.6 Yum 软件仓库
- 1.7 systemd 初始化进程
- 1.8 复习题
- 第二章 新手必须掌握的Linux 命令
- 2.1 强大好用的Shell
- 2.2 执行查看帮助命令
- 2.3 常用系统工作命令(从这里开始相对重要)
- 2.4 系统状态检测命令
- 2.5 工作目录切换命令
- 2.6 文本文件编辑命令
- 2.7 文件目录管理命令
- 2.8 打包压缩与搜索命令
- 第三章 管道符、重定向与环境变量
- 3.1 输入输出重定向
- 3.2 管道命令符
- 3.3 命令行的通配符
- 3.4 常用的转义字符
- 3.5 重要的环境变量
- 第四章 Vim 编辑器与Shell 命令脚本
- 4.1 Vim 文本编辑器
- 4.2 编写Shell 脚本
- 4.3 流程控制语句
- 4.4 计划任务服务程序
- 第五章 用户身份与文件权限
- 5.1 用户身份与能力
- 5.2 文件权限与归属
- 5.3 文件的特殊权限
- 5.4 文件的隐藏属性
- 5.5 文件访问控制列表
- 5.6 su 命令与sudo 服务
- 第六章 存储结构与磁盘划分
- 6.1 一切从“/”开始
- 6.2 物理设备的命名规则
- 6.3 文件系统与数据资料
- 6.4 挂载硬件设备
- 6.5 添加硬盘设备
- 6.6 添加交换分区
- 6.7 磁盘容量配额
- 6.8 软硬方式链接
- 第七章 使用RAID 与LVM 磁盘阵列技术
- 7.1 RAID(独立冗余磁盘阵列)
- 7.2 LVM(逻辑卷管理器)
- 第八章 iptables 与firewalld 防火墙
- 8.1 防火墙管理工具
- 8.2 iptables
- 8.3 firewalld
- 8.4 服务的访问控制列表
- 第九章 使用ssh 服务管理远程主机
- 9.1 配置网络服务
- 9.2 远程控制服务
- 9.3 不间断会话服务
- 第十章 使用Apache 服务部署静态网站
- 10.1 网站服务程序
- 10.2 配置服务文件参数
- 10.3 SELinux 安全子系统
- 10.4 个人用户主页功能
- 10.5 虚拟主机功能
- 10.6 Apache 的访问控制
- 第十一章 使用vsftpd 服务传输文件
- 11.1 文件传输协议
- 11.2 vsftpd 服务程序
- 11.3 简单文件传输协议
- 第十二章 使用Samba 或NFS 实现文件共享
- 12.1 Samba 文件共享服务
- 12.2 NFS(网络文件系统)
- 12.3 autofs 自动挂载服务
- 第十三章 使用BIND 提供域名解析服务
- 13.1 DNS 域名解析服务
- 13.2 安装bind 服务程序
- 13.3 部署从服务器
- 13.4 安全的加密传输
- 13.5 部署缓存服务器
- 13.6 分离解析技术
- 第十四章 使用DHCP 动态管理主机地址
- 14.1 动态主机配置协议
- 14.2 部署dhcpd 服务程序
- 14.3 自动管理IP 地址
- 14.4 分配固定IP 地址
- 第十五章 使用Postifx 与Dovecot 部署邮件系统
- 15.1 电子邮件系统
- 15.2 部署基础的电子邮件系统
- 15.3 设置用户别名信箱
- 第十六章 使用Squid 部署代理缓存服务
- 16.1 代理缓存服务
- 16.2 配置Squid 服务程序
- 16.3 正向代理
- 16.4 反向代理
- 第十七章 使用iSCSI 服务部署网络存储
- 17.1 iSCSI 技术概述
- 17.2 创建RAID 磁盘阵列
- 17.3 配置iSCSI 服务端
- 17.4 配置Linux 客户端
- 17.5 配置Windows 客户端
- 第十八章 使用MariaDB 数据库管理系统
- 18.1 数据库管理系统
- 18.2 初始化MariaDB 服务
- 18.3 管理账户以及授权
- 18.4 创建数据库与表单
- 18.5 管理表单及数据
- 18.6 数据库的备份及恢复
- 第十九章 使用PXE+Kickstart 无人值守安装服务
- 19.1 无人值守安装系统
- 19.2 部署相关服务程序
- 19.3 自动部署客户端主机
- 第二十章 使用LNMP 架构部署动态网站环境
- 20.1 源码包程序
- 20.2 LNMP 动态网站架构
- 20.3 搭建Discuz!论坛
- 20.4 选购服务器主机
前言
开源许可协议
GUN GPL(GUN General Public License,GNU通用公共许可证)
"最开源"的协议.软件中使用了遵循GPL的产品或代码,则该软件也得遵循GPL,即必须开源、免费(但帮别人解决问题收服务费是可以的),不适合商用软件.遵循GPL的软件,允许自由复制、自由传播、收费传播(但必须让买家知道软件是可以免费获取的)、自由修改(修改后的软件也遵循GPL).
BSD(Berkeley Software Distribution,伯克利软件发布版)许可协议
自由修改、收费传播,如果修改后的软件中包含遵循BSD的源代码,则修改后的软件也当遵循BSD,即也允许修改,允许修改后商用,但是不能用原软件的名字,用原作者的名字,用原机构的名字做推广(所以我只说了收费传播没说自由传播).
Apache 许可证版本(Apache License Version)许可协议
自由修改、收费传播,修改后的软件也必须遵守Apache协议,修改了源码的话需要声明更改的地方,如果软件是基于他人的源码编写而成,需保留原始代码的协议、商标、专利声明及其他作者声明的内容信息(Apache与其他协议共存).
MPL(Mozilla Public License,Mozilla 公共许可)许可协议
相较于GPL许可协议,MPL更加注重对开发者的源代码需求和收益之间的平衡.
MIT(Massachusetts Institute of Technology)许可协议
目前限制最少的开源许可协议之一,自由修改、自由传播、收费传播、不必开源,只要程序的开发者在修改后的源代码中保留原作者的许可信息即可,因此普遍被商业软件所使用。
常见的linux系统版本
首先需要区分Linux 系统内核与Linux 发行套件系统的不同
- Linux 系统内核指的是一个由Linus Torvalds 负责维护,提供硬件抽象层、硬盘及文件系统控制及多任务功能的系统核心程序。
- Linux 发行套件系统是我们常说的Linux 操作系统,也即是由Linux 内核与各种常用软件的集合产品
我可不可以理解为Linux操作系统=Linux内核+定制的软件,封装在了一起?类似国内各种手机操作系统,是从安卓原生改UI、改内置软件而成。
热门的几个Linux操作系统
-
红帽企业版Linux(RedHat Enterprise Linux,RHEL):
红帽公司是全球最大的开源技术厂商,RHEL 是全世界内使用最广泛的Linux 系统。RHEL 系统具有极强的性能与稳定性,并且在全球范围内拥有完善的技术支持。RHEL 系统也是本书(即《Linux就该这么学》)、红帽认证以及众多生产环境中使用的系统。
-
社区企业操作系统(Community Enterprise Operating System,CentOS):
通过把RHEL 系统重新编译并发布给用户免费使用的Linux 系统,具有广泛的使用人群。CentOS 当前已被红帽公司“收编”。
-
Fedora:
由红帽公司发布的桌面版系统套件(目前已经不限于桌面版)。用户可免费体验到最新的技术或工具,这些技术或工具在成熟后会被加入到RHEL 系统中,因此Fedora 也称为RHEL系统的“试验田”。运维人员如果想时刻保持自己的技术领先,就应该多关注此类Linux 系统的发展变化及新特性,不断改变自己的学习方向。
-
openSUSE:
源自德国的一款著名的Linux 系统,在全球范围内有着不错的声誉及市场占有率。
-
Gentoo:
具有极高的自定制性,操作复杂,因此适合有经验的人员使用。读者可以在学习完本书后尝试一下该系统。
-
Debian:
稳定性、安全性强,提供了免费的基础支持,可以良好地支持各种硬件架构,以及提供近十万种不同的开源软件,在国外拥有很高的认可度和使用率。
-
Ubuntu:
是一款派生自Debian 的操作系统,对新款硬件具有极强的兼容能力。Ubuntu 与Fedora 都是极其出色的Linux 桌面系统,而且Ubuntu 也可用于服务器领域。
Ubuntu因为其类似windows桌面的原因是我第一个接触的Linux系统
现在国内大多数Linux 相关的图书都是围绕CentOS 系统编写的,作者大多也会给出围绕CentOS 进行写作的一系列理由,但是很多理由都站不住脚,根本没有剖析到CentOS系统与RHEL 系统的本质关系。CentOS 系统是通过把RHEL 系统释放出的程序源代码经过二次编译之后生成的一种Linux 系统,其命令操作和服务配置方法与RHEL 完全相同,但是去掉了很多收费的服务套件功能,而且还不提供任何形式的技术支持,出现问题后只能由运维人员自己解决。经过这般分析基本上可以判断出,选择CentOS 的理由只剩下—免费!当人们大举免费、开源、正义的旗帜来宣扬CentOS 系统的时候,殊不知CentOS 系统其实早在2014 年年初就已经被红帽公司“收编”,当前只是战略性的免费而已。再者说,根据GNU GPL 许可协议,我们同样也可以免费使用RHEL 系统,甚至是修改其代码创建衍生产品。开源系统在自由程度上没有任何差异,更无关道德问题。
本书是基于最新的RHEL 7 系统编写的,书中内容及实验完全通用于CentOS、Fedora 等系统。也就是说,当您学完本书后,即便公司内的生产环境部署的是CentOS 系统,也照样可以搞得定。更重要的是,本书配套资料中的ISO 镜像与红帽RHCSA 及RHCE 考试基本保持一致,因此更适合备考红帽认证的考生使用。
随书配备的 ISO 镜像文件下载地址:http://www.linuxprobe.com/tools
深度评解红帽 RHCSA、RHCE、RHCA 认证:http://www.linuxprobe.com/redhat-certificate
红帽认证资格
其认证主要包括红帽认证系统管理员(RHCSA)、红帽认证工程师(RHCE)与红帽认证架构师(RHCA)。且只有先通过红帽RHCSA 认证后才能考取红帽RHCE 认证。
上图为红帽进阶等级图
红帽认证系统管理员(Red Hat Certified System Administrator,RHCSA)
属于Linux 系统的初级认证,比较适合Linux 爱好者。该认证要求考生对Linux 系统有一定的了解,并且能够熟练使用Linux 命令来完成以下任务:
- 管理文件、目录、文档以及命令行环境;
- 使用分区、LVM 逻辑卷管理本地存储;
- 安装、更新、维护、配置系统与核心服务;
- 熟练创建、修改、删除用户与用户组,并使用 LDAP 进行集中目录身份认证;
- 熟练配置防火墙以及 SELinux 来保障系统安全。
证书示意图如下(作者刘遄的证书):
红帽认证工程师(Red Hat Certified Engineer,RHCE)
属于Linux 系统的中级水平认证,难度相对RHCSA 认证来讲更大,而且要求考生必须已获得RHCSA 认证。该认证适合有基础的Linux 运维管理员,主要考察对下列服务的管理与配置能力:
- 熟练配置防火墙规则链与 SElinux 安全上下文;
- 配置 iSCSI(互联网小型计算机系统接口)服务;
- 编写 Shell 脚本来批量创建用户、自动完成系统的维护任务;
- 配置 HTTP/HTTPS 网络服务;
- 配置 FTP 服务;
- 配置 NFS 服务;
- 配置 SMB 服务;
- 配置 SMTP 服务;
- 配置 SSH 服务;
- 配置 NTP 服务。
证书示意图如下(作者刘遄的证书):
红帽认证架构师(Red Hat Certified Architect,RHCA)
属于Linux 系统的最高级别认证,是公认的Linux 操作系统顶级认证,目前中国仅有不到1000 人(2017 年更新数据)持有该认证。考生需要在获得RHCSA 与RHCE 认证后再完成5 门课程的考试才能获得RHCA 认证,因此难度最大,备考时间最长,费用也最高(考试费约在1.8 万元~2.1 万元人民币)。该认证考察的是考生对红帽卫星服务、红帽系统集群、红帽虚拟化、系统性能调优以及红帽云系统的安装搭建与维护能力。
证书示意图如下(作者刘遄的证书):
红帽RHEL 7 版本的RHCA 认证需要完成至少5 门考试。这5 门考试的时间不同,但均为210 分合格(70%)。而且红帽公司非常注重RHCA 架构师认证的实用性,所以课程总是在随行业趋势而不断调整。
下表为 2017 年最新版的考试课程。欲取得红帽RHCA 认证,您必须通过以下任意5 门认证考试。
考试代码 认证名称 EX210 红帽 OpenStack 认证系统管理员考试 EX220 红帽混合云管理专业技能证书考试 EX236 红帽混合云存储专业技能证书考试 EX248 红帽认证 JBoss 管理员考试 EX280 红帽平台即服务专业技能证书考试 EX318 红帽认证虚拟化管理员考试 EX401 红帽部署和系统管理专业技能证书考试 EX413 红帽服务器固化专业技能证书考试 EX436 红帽集群和存储管理专业技能证书考试 EX442 红帽性能调优专业技能证书考试
由于markdown会自动根据标题等级生成目录,故不专门记录书中目录部分
第一章 部署虚拟环境安装Linux 系统
1.1 准备您的工具
一台电脑
1.2 安装配置VM 虚拟机
VMware WorkStation,试用30天;
点击创建新的虚拟机,使用典型配置,选择稍后安装操作系统
将客户机操作系统的类型选择为“Linux”,版本为“Red Hat Enterprise Linux7 64 位”,然后单击“下一步”
自定义配置(除了虚拟机安装位置都可以默认)
光驱设备此时应在“使用ISO 镜像文件”中选中了下载好的RHEL 系统镜像文件
VM 虚拟机软件为用户提供了 3 种可选的网络模式,分别为桥接模式、NAT 模式与仅主机模式。这里选择“仅主机模式”
- 桥接模式:相当于在物理主机与虚拟机网卡之间架设了一座桥梁,从而可以通过物理主机的网卡访问外网。
- NAT模式:让 VM 虚拟机的网络服务发挥路由器的作用,使得通过虚拟机软件模拟的主机可以通过物理主机访问外网,在真机中 NAT 虚拟机网卡对应的物理网卡是VMnet8。
- 仅主机模式:仅让虚拟机内的主机与物理主机通信,不能访问外网,在真机中仅主机模式模拟网卡对应的物理网卡是 VMnet1。
把 USB 控制器、声卡、打印机设备等不需要的设备统统移除掉。移掉声卡后可以避免在输入错误后发出提示声音,确保自己在今后实验中思绪不被打扰。然后单击“关闭”按钮,最终的虚拟机配置情况如下图:
返回到虚拟机配置向导界面后单击“完成”按钮,如下图所示。虚拟机的安装和配置顺利完成。
当看到下图所示的虚拟机配置成功界面时,就说明您的虚拟机已经被配置成功了。接下来准备步入属于您的 Linux 系统之旅吧。
1.3 安装您的Linux 系统
这里教的是安装有图形化界面的RH7系统,不知道是否影响学习纯命令行的linux...
安装 RHEL 7 或 CentOS 7 系统时,您的电脑的 CPU 需要支持 VT(VirtualizationTechnology,虚拟化技术)。所谓 VT,指的是让单台计算机能够分割出多个独立资源区,并让每个资源区按照需要模拟出系统的一项技术,其本质就是通过中间层实现计算机资源的管理和再分配,让系统资源的利用率最大化。其实只要您的电脑不是五六年前买的,价格不低于三千元,它的 CPU 就肯定会支持 VT 的。如果开启虚拟机后依然提示“CPU 不支持 VT 技术”等报错信息,请重启电脑并进入到 BIOS 中把 VT 虚拟化功能开启即可。
在虚拟机管理界面中单击“开启此虚拟机”按钮后数秒就看到 RHEL 7 系统安装界面,如图所示。在界面中,Test this media & install Red Hat Enterprise Linux 7.0 和Troubleshooting 的作用分别是校验光盘完整性后再安装以及启动救援模式。此时通过键盘的方向键选择 Install Red Hat Enterprise Linux 7.0 选项来直接安装 Linux 系统。
接下来按回车键后开始加载安装镜像,所需时间大约在 30~60 秒,请耐心等待,如图所示。
选择系统的安装语言后单击 Continue 按钮,如图所示。
在安装界面中单击 SOFTWARE SELECTION 选项,如图。
RHEL 7 系统的软件定制界面可以根据用户的需求来调整系统的基本环境,例如把 Linux系统用作基础服务器、文件服务器、Web 服务器或工作站等。此时您只需在界面中单击选中Server with GUI 单选按钮,然后单击左上角的 Done 按钮即可,如图。
返回到 RHEL 7 系统安装主界面,单击 NETWORK & HOSTNAME 选项后,将 Hostname字段设置为 linuxprobe.com,然后单击左上角的 Done 按钮,如图。
返回到安装主界面,单击 INSTALLATION DESTINATION 选项来选择安装媒介并设置分区。此时不需要进行任何修改,单击左上角的 Done 按钮即可,如图。
返回到安装主界面,单击 Begin Installation 按钮后即可看到安装进度,在此处选择 ROOTPASSWORD,如图。
然后设置 root 管理员的密码。若坚持用弱口令的密码则需要单击 2 次左上角的 Done 按钮才可以确认,如图。这里需要多说一句,当您在虚拟机中做实验的时候,密码无所谓强弱,但在生产环境中一定要让 root 管理员的密码足够复杂,否则系统将面临严重的安全问题。
Linux 系统安装过程一般在 30~60 分钟,在安装过程期间耐心等待即可。安装完成后单击 Reboot 按钮,如图。
重启系统后将看到系统的初始化界面,单击 LICENSE INFORMATION 选项,如图。
选中 I accept the license agreement 复选框,然后单击左上角的 Done 按钮,如图。
返回到初始化界面后单击 FINISH CONFIGURATION 选项,即可看到 Kdump 服务的设置界面。如果暂时不打算调试系统内核,也可以取消选中 Enable kdump 复选框,然后单击 Forward 按钮,如图。
在如下图所示的系统订阅界面中,选中 No, I prefer to register at a later time 单选按钮,然后单击 Finish 按钮。此处设置为不注册系统对后续的实验操作和生产工作均无影响。
虚拟机软件中的 RHEL 7 系统经过又一次的重启后,我们终于可以看到系统的欢迎界面,如下图所示。在界面中选择默认的语言 English (United States),然后单击 Next按钮。
将系统的输入来源类型选择为 English (US),然后单击 Next 按钮,如图。
为 RHEL 7 系统创建一个本地的普通用户,该账户的用户名为 linuxprobe,密码为 redhat,然后单击 Next 按钮,如图。
按照下图所示的设置来设置系统的时区,然后单击 Next 按钮。
在下图所示的界面中单击 Start using Red Hat Enterprise Linux Server 按钮,
出现如下图所示的界面。至此,RHEL 7 系统完成了全部的安装和部署工作。准备开始学习Linux 系统吧。
1.4 重置root 管理员密码
平日里让运维人员头疼的事情已经很多了,因此偶尔把 Linux 系统的密码忘记了并不用慌,只需简单几步就可以完成密码的重置工作。但是,如果您是第一次阅读本书,或者之前没有 Linux 系统的使用经验,请一定先跳过本节,等学习完 Linux 系统的命令后再来学习本节内容。如果您刚刚接手了一台 Linux 系统,要先确定是否为 RHEL 7 系统。如果是,然后再进行下面的操作。
[root@linuxprobe ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.0 (Maipo)
重启 Linux 系统主机并出现引导界面时,按下键盘上的 e 键进入内核编辑界面,如图所示。
在 linux16 参数这行的最后面追加“rd.break”参数,然后按下 Ctrl + X 组合键来运行修改过的内核程序,如图所示。
大约 30 秒过后,进入到系统的紧急求援模式,如图所示。
依次输入以下命令,(在执行passwd后会提示输入密码以及确认输入的密码,此处输入的密码就是重置之后的新密码)
mount -o remount,rw /sysroot
chroot /sysroot
passwd
touch /.autorelabel
exit
reboot
等待系统重启操作完毕,然后就可以使用新密码 linuxprobe 来登录Linux 系统了。命令行执行效果如图所示。
1.5 RPM(RedHat Packages Manager红帽软件包管理器)
在 RPM(红帽软件包管理器)公布之前,要想在 Linux 系统中安装软件只能采取源码包的方式安装。早期在 Linux 系统中安装程序是一件非常困难、耗费耐心的事情,而且大多数的服务程序仅仅提供源代码,需要运维人员自行编译代码并解决许多的软件依赖关系,因此要安装好一个服务程序,运维人员需要具备丰富知识、高超的技能,甚至良好的耐心。而且在安装、升级、卸载服务程序时还要考虑到其他程序、库的依赖关系,所以在进行校验、安装、卸载、查询、升级等管理软件操作时难度都非常大。(在我不懂的年纪,看着一堆软件开着源,源码包能下载,但不知道怎么用,怎么编译出来,真的很难受??)
RPM 机制则为解决这些问题而设计的。RPM 有点像 Windows 系统中的控制面板,会建立统一的数据库文件,详细记录软件信息并能够自动分析依赖关系。目前 RPM 的优势已经被公众所认可,使用范围也已不局限在红帽系统中了。表 1-1 是一些常用的 RPM 软件包命令,当前不需要记住它们,大致混个“脸熟”就足够了。
| 表1-1 | 常用的RPM软件包命令 |
|---|---|
| 安装软件的命令格式 | rpm -ivh filename.rpm |
| 升级软件的命令格式 | rpm -Uvh filename.rpm |
| 卸载软件的命令格式 | rpm -e filename.rpm |
| 查询软件描述信息的命令格式 | rpm -qpi filename.rpm |
| 列出软件文件信息的命令格式 | rpm -qpl filename.rpm |
| 查询文件属于哪个RPM的命令格式 | rpm -qf filename |
1.6 Yum 软件仓库
尽管 RPM 能够帮助用户查询软件相关的依赖关系,但问题还是要运维人员自己来解决,而有些大型软件可能与数十个程序都有依赖关系,在这种情况下安装软件会是非常痛苦的。Yum 软件仓库便是为了进一步降低软件安装难度和复杂度而设计的技术。Yum 软件仓库可以根据用户的要求分析出所需软件包及其相关的依赖关系,然后自动从服务器下载软件包并安装到系统。Yum 软件仓库的技术拓扑如图所示。
Yum 软件仓库中的 RPM 软件包可以是由红帽官方发布的,也可以是第三方发布的,当然也可以是自己编写的。《Linux 就该这么学》随书提供的镜像光盘内已经包含了大量可用的RPM 红帽软件包,后文中详细讲解这些软件包。表 1-2 所示为一些常见的 Yum 命令,当前只需对它们有一个简单印象即可。
| 表1-2 | 常见的Yum命令 |
|---|---|
| 命令 | 作用 |
| yum repolist all | 列出所有仓库 |
| yum list all | 列出仓库中所有软件包 |
| yum info 软件包名称 | 查看软件包信息 |
| yum install 软件包名称 | 安装软件包 |
| yum reinstall 软件包名称 | 重新安装软件包 |
| yum update 软件包名称 | 升级软件包 |
| yum remove 软件包 | 移除软件包 |
| yum clean all | 清除所有仓库缓存 |
| yum check-update | 检查可更新的软件包 |
| yum grouplist | 查看系统中已经安装的软件包组 |
| yum groupinstall 软件包组 | 安装指定的软件包组 |
| yum groupremove 软件包组 | 移除指定的软件包组 |
| yum groupinfo 软件包组 | 查询指定的软件包组信息 |
1.7 systemd 初始化进程
Linux 操作系统的开机过程是这样的,即从 BIOS 开始,然后进入 Boot Loader,再加载系统内核,然后内核进行初始化,最后启动初始化进程。初始化进程作为 Linux 系统的第一个进程,它需要完成 Linux 系统中相关的初始化工作,为用户提供合适的工作环境。红帽 RHEL 7 系统已经替换掉了熟悉的初始化进程服务 System V init,正式采用全新的systemd 初始化进程服务。如果您之前学习的是RHEL 5或RHEL 6系统,可能会不习惯。systemd 初始化进程服务采用了并发启动机制,开机速度得到了不小的提升。虽然 systemd初始化进程服务具有很多新特性和优势,但目前还是下面 4 个槽点。
- 槽点 1:systemd 初始化进程服务的开发人员 Lennart Poettering 就职于红帽公司,这让其他系统的粉丝很不爽。
- 槽点 2:systemd 初始化进程服务仅仅可在 Linux 系统下运行,“抛弃”了 UNIX 系统用户。
- 槽点 3:systemd 接管了诸如 syslogd、udev、cgroup 等服务的工作,不再甘心只做初始化进程服务。
- 槽点 4:使用 systemd 初始化进程服务后,RHEL 7 系统变化太大,而相关的参考文档不多,令用户着实为难。
无论怎样,RHEL 7 系统选择 systemd 初始化进程服务已经是一个既定事实,因此也没有了“运行级别”这个概念,Linux 系统在启动时要进行大量的初始化工作,比如挂载文件系统和交换分区、启动各类进程服务等,这些都可以看作是一个一个的单元(Unit),systemd 用目标(target)代替了 System V init 中运行级别的概念,这两者的区别如表 1-3 所示。(心酸,明明我md语法没问题为什么表格没生效,最后我在表格之前加了一行空行生效了,没错,就下面这个表格,明明之前的表格不需要加空行,如表1-1和表1-2,土拨鼠尖叫.gif)
| 表 | 1-3 | systemd与System V init的区别以及作用 |
|---|---|---|
| System V init运行级别 | systemd目标名称 | 作用 |
| 0 | runlevel0.target, poweroff.target | 关机 |
| 1 | runlevel1.target, rescue.target | 单用户模式 |
| 2 | runlevel2.target, multi-user.target | 等同于级别 3 |
| 3 | runlevel3.target, multi-user.target | 多用户的文本界面 |
| 4 | runlevel4.target, multi-user.target | 等同于级别 3 |
| 5 | runlevel5.target, graphical.target | 多用户的图形界面 |
| 6 | runlevel6.target, reboot.target | 重启 |
| emergency | emergency.target | 紧急 Shell |
如果想要将系统默认的运行目标修改为“多用户,无图形”模式,可直接用 ln 命令把多用户模式目标文件连接到/etc/systemd/system/目录:
[root@linuxprobe ~]# ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
如果有读者之前学习过 RHEL 6 系统,或者已经习惯使用 service、chkconfig 等命令来管理系统服务,那么现在就比较郁闷了,因为在 RHEL 7 系统中是使用 systemctl 命令来管理服务的。表 1-4 和表 1-5 所示 RHEL 6 系统中 System V init 命令与 RHEL 7 系统中 systemctl 命令的对比,您可以先大致了解一下,后续章节中会经常用到它们。
| 表 | 1-4 | systemctl 管理服务的启动、重启、停止、重载、查看状态等常用命令 |
|---|---|---|
| System V init命令(RHEL 6 系统) | systemctl命令(RHEL 7 系统) | 作用 |
| service foo start | systemctl start foo.service | 启动服务 |
| service foo restart | systemctl restart foo.service | 重启服务 |
| service foo stop | systemctl stop foo.service | 停止服务 |
| service foo reload | systemctl reload foo.service | 重新加载配置文件(不终止服务) |
| service foo status | systemctl status foo.service | 查看服务状态 |
| 表 | 1-5 | systemctl 设置服务开机启动、不启动、查看各级别下服务启动状态等常用命令 |
|---|---|---|
| System V init命令(RHEL 6 系统) | systemctl命令(RHEL 7 系统) | 作用 |
| chkconfig foo on | systemctl enable foo.service | 开机自动启动 |
| chkconfig foo off | systemctl disable foo.service | 开机不自动启动 |
| chkconfig foo | systemctl is-enabled foo.service | 查看特定服务是否为开机自动启动 |
| chkconfig --list | systemctl list-unit-files --type=service | 查看各个级别下服务的启动与禁用情况 |
1.8 复习题
- 为什么建议读者校验下载的系统镜像或工具?
答:为了保证软件包的安全与完整性。 - 使用虚拟机安装 Linux 系统时,为什么要先选择稍后安装操作系统,而不是去选择 RHEL 7系统镜像光盘?
答:在配置界面中若直接选择了 RHEL 7 系统镜像,则 VMware Workstation 虚拟机会使用内置的安装向导自动进行安装,最终安装出来的系统跟我们后续进行实验所需的系统环境会不一样。 - RPM(红帽软件包管理器)只有红帽企业系统在使用,对吗?
答:RPM 已经被 CentOS、Fedora、openSUSE 等众多 Linux 系统采用,它真的很好用! - 简述 RPM 与 Yum 软件仓库的作用。
答:RPM 是为了简化安装的复杂度,而 Yum 软件仓库是为了解决软件包之间的依赖关系。 - RHEL 7 系统采用了 systemd 作为初始化进程,那么如何查看某个服务的运行状态?
答:执行命令“systemctl status 服务名.service”可查看服务的运行状态,其中服务名后的.service 可以省略。(如systemctl status mysql,把systemctl看成system control的缩写比较好记,虽然我不确定ctl是不是control的缩写)
第二章 新手必须掌握的Linux 命令
2.1 强大好用的Shell
通常来讲,计算机硬件是由运算器、控制器、存储器、输入/输出设备等共同组成的,而让各种硬件设备各司其职且又能协同运行的东西就是系统内核。Linux 系统的内核负责完成对硬件资源的分配、调度等管理任务。由此可见,系统内核对计算机的正常运行来讲是太重要了,因此一般不建议直接去编辑内核中的参数,而是让用户通过基于系统调用接口开发出的程序或服务来管理计算机,以满足日常工作的需要,如图所示。
Shell 就是这样的一个命令行工具。Shell(也称为终端或壳)充当的是人与内核(硬件)之间的翻译官,用户把一些命令“告诉”终端,它就会调用相应的程序服务去完成某些工作。现在包括红帽系统在内的许多主流 Linux 系统默认使用的终端是 Bash(Bourne-Again SHell)解释器。主流 Linux 系统选择 Bash 解释器作为命令行终端主要有以下 4 项优势,读者可以在今后的学习和生产工作中细细体会 Linux 系统命令行的美妙之处,真正从心里爱上它们。
- 通过上下方向键来调取过往执行过的 Linux 命令;
- 命令或参数仅需输入前几位就可以用 Tab 键补全;
- 具有强大的批处理脚本;
- 具有实用的环境变量功能。
2.2 执行查看帮助命令
常见执行Linux命令的格式是这样的:
命令名称 [命令参数] [命令对象]
注意,命令名称、命令参数、命令对象之间请用空格键分隔。
命令对象一般是指要处理的文件、目录、用户等资源,而命令参数可以用长格式(完整的选项名称),也可以用短格式(单个字母的缩写),两者分别用--与-作为前缀(示例请见表 2-1)。Linux新手不会执行命令大多是因为参数比较复杂,参数值需要随不同的命令和需求情况而发生改变。因此,要想灵活搭配各种参数,执行自己想要的功能,则需要长时间的经验积累了。
| 表2-1 | 命令参数的长格式与短格式示例 |
|---|---|
| 长格式 | man --help |
| 短格式 | man -h |
有读者现在可能会想:“Linux 系统中有那么多命令,我怎么知道某个命令是干嘛用的?在日常工作中遇到了一个不熟悉的 Linux 命令,我又怎样才能知道它有哪些可用参数呢?”接下来,我们就拿 man 这个命令作为本书中第一个教给读者去学习的 Linux 命令了。
对于真正的零基础读者,您可以通过以下三张图来学习如何在 RHEL 7 系统中执行 Linux命令。
在 RHEL 7 系统的桌面上单击鼠标右键,在弹出的菜单中选择 Open in Terminal 命令,这将打开一个 Linux 系统命令行终端
在命令行终端中输入 man man 命令来查看 man 命令自身的帮助信息
敲击回车键后即可看到帮助信息
在 man 命令帮助信息的界面中,所包含的常用操作按键及其用途如表 2-2 所示。
| 表2-2 | man 命令中常用按键以及用途 |
|---|---|
| 按键 | 用途 |
| 空格键 | 向下翻一页 |
| Page Down | 向下翻一页 |
| Page Up | 向上翻一页 |
| home | 直接前往首页 |
| end | 直接前往尾页 |
| / | 从上至下搜索某个关键词,如“/linux” |
| ? | 从下至上搜索某个关键词,如“?linux” |
| n | 定位到下一个搜索到的关键词 |
| N | 定位到上一个搜索到的关键词 |
| q | 退出帮助文档 |
一般来讲,使用 man 命令查看到的帮助内容信息都会很长很多,如果读者不了解帮助文档信息的目录结构和操作方法,乍一看到这么多信息可能会感到相当困惑。man 命令的帮助信息的结构如表 2-3 所示。
| 表2-3 | man 命令帮助信息的结构以及意义 |
|---|---|
| 结构名称 | 代表意义 |
| NAME | 命令的名称 |
| SYNOPSIS | 参数的大致使用方法 |
| DESCRIPTION | 介绍说明 |
| EXAMPLES | 演示(附带简单说明) |
| OVERVIEW | 概述 |
| DEFAULTS | 默认的功能 |
| OPTIONS | 具体的可用选项(带介绍) |
| ENVIRONMNET | 环境变量 |
| FILES | 用到的文件 |
| SEE ALSO | 相关的资料 |
| HISTORY | 维护历史与联系方式 |
2.3 常用系统工作命令(从这里开始相对重要)
说实话我个人不太习惯把命令后的参数用[]括起来的参考格式,因为常常以为这个[]也要输入(TxT),所以之后的内容我就按个人习惯来了。
- echo命令
echo命令用于在终端输出字符串或变量提取后的值,格式为echo [字符串 | $变量]。(echo 字符串或echo $变量名,如环境变量是PATH,可以echo $PATH在终端打印环境变量值试试)。
比如我们使用$变量的方式提取变量 SHELL 的值,并将其输出到屏幕上:
[root@linuxprobe ~]# echo $SHELL
/bin/bash
- date命令
date命令用于显示及设置系统的时间或日期,格式为date 选项 +指定的格式。
只需在强大的 date 命令中输入以“+”号开头的参数,即可按照指定格式来输出系统的时间或日期。把打包后的文件自动按照“年-月-日”的格式打包成“backup-2017-9-1.tar.gz”,用户只需要看一眼文件名称就能大概了解到每个文件的备份时间,很直观。date命令中常见的参数格式及作用如表 2-4 所示。
| 表2-4 | date命令中的参数及作用 |
|---|---|
| 参数 | 作用 |
| %t | 跳格(Tab 键) |
| %H | 小时(00~23) |
| %I | 小时(00~12) |
| %M | 分钟(00~59) |
| %S | 秒(00~59) |
| %j | 今年中的第几天 |
按照默认格式查看当前系统时间的 date 命令如下所示:
[root@linuxprobe ~]# date
Mon Aug 24 16:11:23 CST 2017
按照“年-月-日 小时:分钟:秒”的格式查看当前系统时间的 date 命令如下所示:
[root@linuxprobe ~]# date "+%Y-%m-%d %H:%M:%S"
2017-08-24 16:29:12
将系统的当前时间设置为 2017 年 9 月 1 日 8 点 30 分的 date 命令如下所示:
[root@linuxprobe ~]# date -s "20170901 8:30:00"
Fri Sep 1 08:30:00 CST 2017
再次使用 date 命令并按照默认的格式查看当前的系统时间,如下所示:
[root@linuxprobe ~]# date
Fri Sep 1 08:30:01 CST 2017
date 命令中的参数%j 可用来查看今天是当年中的第几天。这个参数能够很好地区分备份时间的新旧,即数字越大,越靠近当前时间。该参数的使用方式以及显示结果如下所示。
[root@linuxprobe ~]# date "+%j"
244
- reboot命令
reboot命令用于重启系统,其格式为reboot。
由于重启计算机这种操作会涉及硬件资源的管理权限,因此默认只能使用 root 管理员来执行,其命令如下:
[root@linuxprobe ~]# reboot
- poweroff命令
poweroff命令用于关闭系统,其格式为poweroff。
该命令与 reboot 命令相同,都会涉及硬件资源的管理权限,因此默认只有 root 管理员才可以关闭电脑,其命令如下:
[root@linuxprobe ~]# poweroff
- wget命令
wget命令用于在终端中下载网络文件,格式为“wget -参数 下载地址”。
如果您没有 Linux 系统的管理经验,当前只需了解一下wget命令的参数以及作用,然后看一下下面的演示实验即可。表 2-5 所示为wget命令的参数以及参数的作用。
| 表2-5 | wget命令的参数及作用 |
|---|---|
| 参数 | 作用 |
| -b | 后台下载模式 |
| -P | 下载到指定目录 |
| -t | 最大尝试次数 |
| -c | 断点续传 |
| -p | 下载页面内所有资源,包括图片、视频等 |
| -r | 递归下载 |
演示:使用wget下载《Linux就该这么学》,文件的完整路径为http://www.linuxprobe.com/docs/LinuxProbe.pdf,执行命令如下:
wget http://www.linuxprobe.com/docs/LinuxProbe.pdf
wget -b http://www.linuxprobe.com/docs/LinuxProbe.pdf
wget -P /root http://www.linuxprobe.com/docs/LinuxProbe.pdf
echo '如果途中网络中断可以断点续传'
wget -c http://www.linuxprobe.com/docs/LinuxProbe.pdf
echo '组合一下'
wget -b -P /root -t 5 -c http://www.linuxprobe.com/docs/LinuxProbe.pdf
接下来可以尝试使用-r递归下载参数来下载www.linuxprobe.com网站内所有页面数据及文件,下载完后会自动保存到当前路径之下名为www.linuxprobe.com的文件夹(目录)中,执行命令如下:
wget -r -p http://www.linuxprobe.com
echo '用-b后台下载可以方便干其他事,不用-b后台下载则方便监督下载是否完成'
- ps 命令
ps命令用于查看系统中的进程状态,格式为ps 参数。(我好像明白作者在参数周围加[]的原因了,[参数]表示参数可选可不输,但是我还是不想加...)
估计读者在第一次执行这个命令时都要惊呆一下—怎么会有这么多输出值,这可怎么看得过来?其实,刘遄老师通常会将 ps 命令与第 3 章的管道符技术搭配使用,用来抓取与某个指定服务进程相对应的 PID 号码。ps 命令的常见参数以及作用如表 2-6 所示。
| 表2-6 | ps命令的参数及作用 |
|---|---|
| 参数 | 作用 |
| -a | 显示所有进程(包括其他用户的进程) |
| -u | 用户及其他详细信息 |
| -x | 显示没有控制终端的进程 |
Linux 系统中时刻运行着许多进程,如果能够合理地管理它们,则可以优化系统的性能。在Linux 系统中,有 5 种常见的进程状态,分别为运行、中断、不可中断、僵死与停止,其各自含义如下所示:
- R(运行):进程正在运行或在运行队列中等待。running
- S(中断):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态。sleepping
- D(不可中断):进程不响应系统异步信号,即便用 kill 命令也不能将其中断。disabled?
- Z(僵死):进程已经终止,但进程描述符依然存在, 直到父进程调用 wait4()系统函数后将进程释放。zombie
- T(停止):进程收到停止信号后停止运行。stopped
当执行ps aux命令后通常会看到如表 2-7 所示的进程状态,表 2-7 中只是列举了部分输出值,而且正常的输出值中不包括中文注释。(以后表的前表后我都加一行空行算了,出问题的原因摸不清)
表2-7
| USER | PID | %CPU | %MEM | VSZ | RSS | TTY | STAT | START | TIME | COMMAND |
|---|---|---|---|---|---|---|---|---|---|---|
| 进程的所有者 | 进程ID号 | 运算器占用率 | 内存占用率 | 虚拟内存使用量(单位KB) | 占用的固定内存量(单位KB) | 所在终端 | 进程状态 | 被启动的时间 | 实际使用CPU的时间 | 命令名称与参数 |
| root | 1 | 0.0 | 0.4 | 53684 | 7628 | ? | Ss | 07:22 | 0:02 | /usr/lib/systemd/systemd |
| root | 2 | 0.0 | 0.0 | 0 | 0 | ? | S | 07:22 | 0:00 | [kthreadd] |
| root | 3 | 0.0 | 0.0 | 0 | 0 | ? | S | 07:22 | 0:00 | [ksoftirqd/0] |
| root | 5 | 0.0 | 0.0 | 0 | 0 | ? | S< | 07:22 | 0:00 | [kworker/0:0H] |
| root | 7 | 0.0 | 0.0 | 0 | 0 | ? | S | 07:22 | 0:00 | [migration/0] |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
注:
如前面所提到的,在 Linux 系统中的命令参数有长短格式之分,长格式和长格式之间不能合并,长格式和短格式之间也不能合并,但短格式和短格式之间是可以合并的,合并后仅保留一个-(减号)即可。另外ps命令可允许参数不加减号(-),因此可直接写成ps aux的样子。
- top命令
top命令用于动态地监视进程活动与系统负载等信息,其格式为top。
top命令相当强大,能够动态地查看系统运维状态,完全将它看作 Linux 中的“强化版的Windows 任务管理器”。top命令的运行界面如图所示。
在图中,top 命令执行结果的前 5 行为系统整体的统计信息,其所代表的含义如下。
- 第 1 行:系统时间、运行时间、登录终端数、系统负载(三个数值分别为 1 分钟、5分钟、15 分钟内的平均值,数值越小意味着负载越低)。
- 第 2 行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。
- 第 3 行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。
注:
第 3 行中的数据均为 CPU 数据并以百分比格式显示,例如“97.1 id”意味着有 97.1%的 CPU 处理器资源处于空闲。
- 第 4 行:物理内存总量、内存使用量、内存空闲量、作为内核缓存的内存量。
- 第 5 行:虚拟内存总量、虚拟内存使用量、虚拟内存空闲量、已被提前加载的内存量。
- pidof命令
pidof命令用于查询某个指定服务进程的 PID 值,格式为“pidof 参数 服务名称”。(早知道,我当初就能直接自动化,起码大部分工作都能自动化)
每个进程的进程号码值(PID)是唯一的,因此可以通过 PID 来区分不同的进程。例如,可以使用如下命令来查询本机上 sshd 服务程序的 PID:
[root@linuxprobe ~]# pidof sshd
2156
- kill命令
kill命令用于终止某个指定 PID 的服务进程,格式为“kill 参数 进程的PID”。
接下来,我们使用kill命令把上面用pidof命令查询到的 PID 所代表的进程终止掉,其命令如下所示。这种操作的效果等同于强制停止 sshd 服务。
[root@linuxprobe ~]# kill 2156
此处占个位置,用于放展示kill的参数的表格,因为书中这里没写
- killall命令
killall命令用于终止某个指定名称的服务所对应的全部进程(即杀掉服务名中包含指定字符串的所有进程),格式为:“killall 参数 进程名称”。
通常来讲,复杂软件的服务程序会有多个进程协同为用户提供服务,如果逐个去结束这些进程会比较麻烦,此时可以使用 killall 命令来批量结束某个服务程序带有的全部进程。下面以 httpd 服务程序为例,来结束其全部进程。由于 RHEL7 系统默认没有安装 httpd 服务程序,因此大家此时只需看操作过程和输出结果即可,等学习了相关内容之后再来实践。
[root@linuxprobe ~]# pidof httpd
13581 13580 13579 13578 13577 13576
[root@linuxprobe ~]# killall httpd
[root@linuxprobe ~]# pidof httpd
[root@linuxprobe ~]#
注:
如果我们在系统终端中执行一个命令后想立即停止它,可以同时按下 Ctrl + C 组合键(生产环境中比较常用的一个快捷键),这样将立即终止该命令的进程。或者,如果有些命令在执行时不断地在屏幕上输出信息,影响到后续命令的输入,则可以在执行命令时在末尾添加上一个&符号,这样命令将进入系统后台来执行。