Linux就该这么学 | 第01~03章
第0章:前 言
1、为什么要学习Linux?
Linux系统是一款优秀的软件产品,具有类似UNIX的程序界面,而且继承了UNIX的稳定性,能够较好地满足工作需要。Linux相比Windows,更加稳定且有效率,免费或少许免费,漏洞少且快速修补,多任务多用户,更加安全的用户及文件权限策略,适合小内核程序的嵌入系统,相对不耗资源。
Linux 对比 Windows2、技术学习与开源协议
一名技术高超的导师不应该仅仅是技术知识的搬运工,而应该是优质知识的提炼者。
常见的开源许可协议有:GNU GPL、BSD、Apache许可协议、MPL、MIT。
3、常见的Linux系统版本
首先要区分Linux系统内核与Linux发行版本。前者是由Linus Torvalds负责维护,提供硬件抽象层、硬盘及文件系统控制及多任务功能的系统核心程序。后者是我们常说的Linux操作系统,也就是由Linux内核系统和各种常用软件的集合产品。
全球大约有数百款Linux发行版本,每个系统版本都有自己的特性和目标人群。常见的Linux发行版本有:
1)红帽企业级Linux(RHEL),这是全球使用最广泛的Linux系统。
2)社区企业操作系统(CentOS),通过把RHEL系统重新编译并发布给用户免费使用的Linux系统,具有广泛的使用人群。
3)Fodora
4)openSUSE
5)Gentoo
6)Debian,其稳定性、安全性很强,提供了免费的基础支持,可以良好地支持各种硬件架构。
7)Ubuntu,它是一款派生自Debian的操作系统,对新款硬件具有极强的兼容能力。Ubuntu和Fodora都是极其出色的Linux桌面系统。
4、关于RHEL7系统
CentOS系统是通过把RHEL系统释放出的程序源代码经过二次编译之后生成的一种Linux系统,其命令操作和服务配置方法与RHEL完全相同。根据GNU GPL许可协议,我们同样可以免费地使用RHEL系统,甚至可以修改其源码进而创建衍生产品。本书将以RHEL7系统为例进行教学。
RHEL7是RedHat公司于2014年末推出的当前最新的企业版Linux系统。RHEL7系统创新式地集成了Docker虚拟化技术,支持XFS文件系统,兼容微软的身份管理,并采用systemd作为系统初始化进程,其性能和兼容性相较于之前版本都有了很大的改善。
5、关于红帽公司
红帽公司成立于1993年,是全球首家收入超10亿美元的开源公司。红帽认证是由红帽公司推出的Linux认证,该认证被认为是Linux行业乃至整个IT领域中价值最高的认证之一。其认证主要包括红帽认证系统管理员(RHCSA,初级认证)、红帽认证工程师(RHCE,中级认证)和红帽认证架构师(RHCA,高级认证)。
红帽认证第1章:部署虚拟环境安装Linux系统
本章学习概要:准备工具,安装配置VM虚拟机,安装Linux系统,重置root管理员密码,RPM(红帽软件包管理器),Yum软件仓库,systemd初始化进程。
1、准备工具
工欲善其事,必先利其器。准备 VMware WorkStation虚拟机软件 和 RHEL7(RHEL-server-7.0-x86_64-LinuxProbe.Com.iso)系统软件。
2、安装并配置VM虚拟机
VMware WorkStation虚拟机软件是一款桌面计算机虚拟软件,让用户能够在单一主机上同时运行多个不同的操作系统。每个虚拟操作系统的硬盘分区、数据配置都是独立的,而且多台虚拟机可以构建为一个局域网。Linux系统对硬件设备的要求很低,因此我们没有必要购买一台新的电脑,而是使用虚拟机就可以搞定。
把VM虚拟机安装完成后,不能立即安装Linux。因为还要在虚拟机设置操作系统所需的硬件标准。只有把虚拟机内系统的硬件资源模拟出来后才可以正式开始安装Linux系统。VM虚拟机的强大之处便在于它不仅可以调取真实的物理设备资源,还可以模拟出多网卡或硬盘等资源。
VM虚拟机软件为用户提供了3种可选的网络模式,分别为:
1)桥接模式:相当于在物理主机与虚拟机网卡之间架设了一座桥梁,从而可以通过物理主机的网卡访问外网。
2)NAT模式:让VM虚拟机的网络服务发挥路由器的作用,使得通过虚拟机软件模拟的主机可以通过物理主机访问外网。
3)仅主机模式:仅让虚拟机内的主机与物理主机通信,不能访问外网。
我们通常使用“仅主机模式”。
3、在VM中安装Linux系统
在安装RHEL7 或 CentOS7 系统时,物理电脑的CPU必须要支持VT(Vritualization Technology)虚拟化技术。所谓VT,指的是让单台计算机能够分割出多个独立资源区,并让每个资源区按照需要模拟出系统的一项技术,其本质就是通过中间层实现计算机资源的管理和再分配,让系统资源的利用率最大化。
如果开启虚拟机后提示“CPU不支持VT技术”等报错信息,请重启电脑并进入到BIOS中把VT虚拟化功能开启即可。
RHEL7系统的软件定制界面,可以根据用户需要来调整系统的基本环境,例如把Linux系统用作基础服务器、文件服务器、Web服务器或工作站等。
安装RHEL7时,我们可以选择手动分区或者自动分区。Linux系统会根据FHS(Filesystem Hierarchy Standard, 文件系统层次结构标准)把不同的目录定义为相应的不同功能。
4、重置root管理员密码
重置密码是日常工作常见的需求,事实上只需要几步就可以完成密码的重置工作。
查看当前系统的版本
cat /etc/redhat-release
第1步:在Linux命令行中输入 reboot 命令,重启Linux。
第2步:在Linux重启过程中,按下键盘上的 e 键,进入内核编辑界面,如下图示:
第3步:使用键盘向下键,翻到“linux16”这一段,在段尾追加上 "rd.break" 参数(如下图示);然后按下 Ctrl + X 组合键来运行修改过的内核程序。
修改内核程序第4步:上一步运行内核程序后大概30秒,将进入到系统的紧急救援模式(如下图示)。
紧急救援模式第5步:在紧急救援模式下,输入以下命令:
mount -o remount, rw /sysroot
chroot /sysroot
passwd
两次输入新密码
touch /.autorelabel
exit
reboot
重置密码
第6步:再次执行 reboot 命令后,即完成了 root 用户的密码重置工作。
5、RPM(红帽软件包管理器)
在RPM公布之前,要想在Linux系统中安装软件只能采取源码包的方式安装。这种安装方式,需要运维人员自行编译代码并解决软件依赖关系。没有RPM时,软件的安装、升级、卸载都不得不人为地考虑各个程序和库的依赖关系,因此导致软件管理难度非常大。
RPM机制,正是为解决这个问题而设计的,通过RPM安装软件可以自动地分析软件所需要的依赖关系。RPM常用命令如下:
rpm 命令6、Yum软件仓库
尽管RPM能够帮助用户查询软件相关的依赖关系,但问题还是要运维人员自己来解决,而有些大型软件可能与数十个程序都有依赖关系。Yum软件仓库便是为了进一步降低软件安装难度和复杂度而设计的技术。Yum软件仓库可以根据用户的要求分析出所需软件包及其相关的依赖关系,然后自动地从服务器下载软件包并安装到Linux系统。
Yum软件仓库中的RPM软件包可以是红帽官方发布的,也可以是由第三方发布的,当然也可以是我们自己编写的。Yum软件仓库的技术拓扑图(如下图示):
Yum软件仓库Yum常用命令如下:
yum 命令7、systemd初始化进程
Linux操作系统的开机过程是这样的,即从BIOS开始,接着进入Boot Loader,然后加载系统内核并进行内核初始化,最后启动初始化进程。
初始化进程作为Linux系统的第一个进程,它需要完成Linux系统中相关的初始化工作,为用户提供合适的工作环境。红帽RHEL7系统已经替换掉了旧的初始化服务System V init,正式采用了全新的 systemd 初始化进程服务。systemd初始化进程服务采用了并发启动机制,开机速度得到了不小的提升。
RHEL7选用 systemd 作为初始化进程服务,它使用目标(target)代替了System V init 中运行级别的概念,因此在RHEL7中就没有了“运行级别”这个概念。Linux系统启动要进行大量的初始化工作,比如挂载文件系统和交换分区、启动各类进程服务等,这些工作任务都可以看作是一个一个的单元(Unit)。
1)systemd 与 System V init 的区别以及作用,如下图示:
systemd 对比 System V init2)更改系统模式:把当前系统默认的运行目标修改为“多用户、无图形”模式,可直接使用 ln 命令把多用户模式目标文件链接到 /etc/systemd/system/目录下:
ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
执行完上述的链接命令后,再执行 reboot 重启命令。开机后即是无图形的系统模式(即没有图形界面),如下图就是无图形模式:
无图形模式3)RHEL7中使用 systemctl 命令来管理服务,而不是 service 和 chkconfig 等旧命令。下表是 service 命令和 systemctl 命令的对比:
service 对比 systemctlchkconfig 命令和 systemctl 命令的对比,如下表:
chkconfig 对比 systemctl示例:查看各个级别下服务的启动与禁用情况
systemctl list-unit-files --type=service
示例:查看 vmtoolsd 服务是否为开机自启动
systemctl is-enabled vmtoolsd.service # .service 可省略
8、本章练习题
1)为什么建议读者校验下载的系统镜像或工具?
为了保证软件包的安全与完整性。
2)使用虚拟机安装 Linux 系统时,为什么要先选择稍后安装操作系统,而不是去选择 RHEL 7 系统镜像光盘?
在配置界面中若直接选择了 RHEL 7 系统镜像,则 VMware Workstation 虚拟机会使用内置的安装向导自动进行安装,最终安装出来的系统跟我们后续进行实验所需的系统环境会不一样。
3)RPM(红帽软件包管理器)只有红帽企业系统在使用,对吗?
RPM 已经被 CentOS、Fedora、openSUSE 等众多 Linux 系统采用,它真的很好用!
4)简述 RPM 与 Yum 软件仓库的作用。
RPM是为了简化安装的复杂度,而 Yum软件仓库是为了解决软件包之间的依赖关系。
5.RHEL 7 系统采用了 systemd 作为初始化进程,那么如何查看某个服务的运行状态?
执行命令“systemctl status 服务名.service”可查看服务的运行状态,其中服务名后的.service 可以省略。
第2章:新手必须掌握的 Linux 命令
本章要学习的内容有:强大的Shell,使用命令查看帮助文档,常用的系统工作命令,系统状态的检测命令,工作目录的切换命令,文本文件的编辑命令,文件目录的管理命令,打包压缩与搜索命令。
1、强大好用的Shell
1)内核和硬件有着怎样的关系?
计算机硬件是由运算器、控制器、存储器、输入输出设备等共同组成的,而让各种硬件设备协调工作的东西就是系统内核。Linux系统内核负责完成对硬件资源的分配和调度。由此可见,系统内核是十分重要的,因此一般不建议我们直接去编辑内核中的参数,而是让用户通过基于系统调用接口开发出的程序或服务来管理计算机。
2)为什么不建议使用图形化界面工具?
Linux系统中有些图形化工具,比如逻辑卷管理器LVM,极大地降低了运维人员出错的概率。事实上,图形化工具是调用了脚本来完成相应的工作任务。虽然图形化工具简单易操作,但缺乏了Linux命令原有的灵活性及可控性。再者,图形化工具相较于Linux命令会更加耗费系统资源。因此经验丰富的运维人员甚至不会去安装图形化界面。
3)Shell是什么?有什么用?
Shell 翻译官Shell是一个命令行工具,也称为终端或壳。它扮演着人与内核(硬件)之间的翻译官角色。用户使用 Shell 命令调用系统中相应的程序服务去完成特定的工作。现在主流Linux系统默认使用的都是 Bash Shell,其背后即是Bash解释器。
4)Bash 解释器有哪些优势?
Bash解释器的4大优势2、使用 man 帮助命令
Linux命令的一般格式: 命名名称 [命令参数] [命令对象]
命令对象一般是指要处理的文件、目录、用户资源等;而命令参数可以使用长格式参数(以两个 - 开头),也可以使用短格式参数(以一个 - 开头)。对新人来讲,最大的挑战莫过于复杂参数的使用以及参数值的多变性。
使用长格式参数:
man --help
使用短格式参数:
man -h
1)使用 man 学习Linux命令
man man
man ifconfig
2)man 文档中各个字段的含义
字段含义3)man 文档中的快捷键
快捷键3、常用的系统工作命令
1)echo 命令,向终端输出字符串或变量提取后的值
echo geekxia
echo $SHELL
2)date 命令,用于显示及设置系统的时间日期。在 date命令中输入以“ + ”号开头的参数,即可按照指定格式输出系统的时间或日期。
date # 查看系统时间
date "+%Y-%m-%d %H:%M:%S" # 以指定格式查看系统时间
date -s "20181203 22:54:50" # 设置系统时间
date "+%j" # 查看今天是今年中的第几天
date命令中常用的参数
3)reboot 命令,用于重启系统。默认情况下,只有 root 用户才能使用该命令。
4)poweroff 命令,用于关闭系统,默认情况下,只有 root 用户才能使用该命令。
5)wget 命令,用于在终端中下载网络文件。
下载:
wget http://geekxia.cn/test.txt
递归下载:
wget -r -p http://geekxia.cn
wget 命令
6)ps 命令,用于查看某个进程的状态,它常与管道符技术搭配使用。
在Linux中,进程有5种状态:R-运行状态,S-中断状态,D-不可中断状态,Z-僵死状态,T-停止状态。我们如果能够合理地管理Linux中众多进程的状态,则可以大大地优化系统的性能。ps命令的常用参数如下图示:
ps aux
注:在Linux中,命令的参数有长短之分,长格式和长格式参数之间不能合并,长格式和短格式参数之间也不能合并。但是短格式和短格式参数之间可以合并,合并后仅保留一个 - 即可。另外,ps 命令比较特殊的地方在于,它允许参数不加 - 符号,因此我们可以直接使用 " ps aux "这样的命令。
7)top 命令,用于动态地监视进程活动与系统负载等信息。该命令相当强大,能够动态地查看系统的运维状态,可将它看作是Linux中的“强化版的Windows任务管理器”。执行 top 命令后,终端界面如下图所示:
top 命令注:上图中画红框的前5行均为系统整体的统计信息,它们的含义如下。
解释 top 命令的统计信息8)pidof 命令,用于查询某个指定进程的 PID 值。每个进程的 PID 值都是唯一的。
pidof sshd # 查看SSH服务的 PID
9)kill 命令,用于终止某个指定 PID 的服务进程。
kill 972 # 杀死 PID = 972 的服务进程
10)killall 命令,用于终止某个指定名称的服务所对应的全部进程。注,通常来讲,复杂的服务程序会有多个进程协同工作,如果逐个去结束它们会比较麻烦,这个时候 killall 命令就派上了用场,它可批量结束掉某个服务程序所带有的全部进程。
pidof httpd
killall httpd # 杀死 httpd 服务下的全部进程
11)Ctrl + C,在终端中执行 Ctrl+C 可以结束掉一个正在执行或运行的Linux命令。
12)& 符号,在Linux中执行有些命令时会不断地在屏幕上输出信息,影响到后续命令的输入,则可以在执行这个命令时在其末尾加上一个 & 符号,这样该命令就会进入到系统后台去执行了。
4、系统状态检测命令
1)ifconfig 命令,用于获取网卡配置与网络状态等信息,如网卡名称、IP地址(inet参数)、网卡物理地址(也称MAC地址)、RX和TX接收数据包和发送包的个数及累计流量。
2)如何查看系统内核与系统版本等信息?
使用“ uname -a ”命令 或者 查看 redhat-release 文件。
3)如何查看系统的负载信息?
uptime 命令用于查看系统的当前时间、系统已运行时间、启用终端数量以及平均负载值等信息。平均负载值指的是最近1分钟、5分钟、15分钟内的压力情况;负载值越低越好,尽量不要超过1,在生产环境下不要超过5。
4)如何查看内存的使用量等信息?
为了保证Linux系统不会因资源耗尽而突然宕机,我们要时刻关注内存的使用量。下图示中的参数,分别代表内存总量、已使用量、空闲量、进程共享的内存量、磁盘缓存的内存量、可用量。
5)如何当前登入系统的用户的相关系统?(使用 who 命令)
6)如何查看系统所有的历史登录记录?(使用 last 命令)
7)history 命令,它用于查看历史执行过的最近100条命令。如果觉得100不够用,还可以自定义 /etc/profile 中去修改 HISTSIZE 的值。“ history -c ”命令用于清空历史登记的记录。“ ! 历史命令编号” 用于执行某一条历史命令。事实上,历史命令记录是存放在 .bash_history 文件中的(以 . 开头的文件均代表是隐藏文件),所以使用 " cat ~/.bash_history "也可以查看到命令的历史记录。
history8)sosreport 命令,用于收集系统配置及架构信息,并输出诊断文档。当Linux系统出现故障时,我们可以使用这个命令来收集相关的诊断信息,通过诊断信息找出导致系统故障的根源。该命令所生成的诊断报告,存放在 /var/tmp 目录下,如下图示:
sosreport5、与工作目录相关的命令
1)pwd 命令,用于查看当前路径。
2)"cd -" 返回到上一次所处的目录; “cd ..” 返回至上一级目录;“cd ~” 进入到当前用户的家目录; "cd ~username" 进入到指定用户的家目录;“cd /路径” 进入到指定的目录中。
3)ls 命令,查看文件信息。-a 参数查看所有文件(包括隐藏文件), -l 参数列举文件的属性、大小等文件属性,-d 参数查看目录文件的文件属性。
6、文本文件编辑命令
Linux系统中,一切都是文件。对服务程序进行配置本质上就是对文本文件的编辑。
1)cat 命令,用于查看内容较少的纯文本文件。-n 参数,用于显示行号。
2)more 命令,用于查看内容较多的纯文本文件。more命令会在最下面使用百分比来提示已经阅读了多少内容。使用空格键或回车键,可以向下翻页。
3)head 命令,用于查看纯文文档的前N行。
head -n 20 /etc/yum.conf
4)tail 命令,用于查看纯文本文档的后N行,或者持续刷新内容。
tail -n 30 /etc/yum.conf
tail命令最强大的功能是可以持续地刷新一个文件的内容,比如实时查看最新日志。
tail -f /var/log/messages
5)tr 命令,用于替换文本文件中的字符。如下示例,把 readme.txt 中的所有小写字母转化成大写字母。
cat readme.txt | tr [a-z] [A-Z]
命令解读:先使用 cat 命令读取文件内容,再通过 | 管道符把这些内容传递给 tr 命令进行字符替换。
tr6)wc 命令,用于统计文件中文本的行数、字数、字节数。在Linux中,passwd是用于保存系统账号信息的文件,统计当前系统有多少个用户,如使用如下命令实现:
wc -l /etc/passwd
7)stat 命令,用于查看文件的存储信息和时间等信息。
stat8)cut 命令,用于按“列”提取文本字符。按列读取文本内容时,使用 -f 参数来设置第几列,使用 -d 参数指定间隔符号。在Linux中,如何准确地提取文本文件中我们想要的内容,是我们应该重点学习的内容。如下示例,我们读取 /etc/passwd 中当前系统前10个用户名。
head -n 10 /etc/passwd | cut -f 1 -d :
cut
9)diff 命令,用于比较多个文本文件的差异。该命令绝对是判断文件是否被篡改过的有力神器。--brief 参数用于确认两个文件是否相同,-c 参数用于详细比较多个文件的差异之处。
diff7、文件目录的管理命令
1)touch 命令,用于创建空白文件或设置文件的时间。
2)mkdir 命令,用于创建文件目录。-p 参数用于递归创建嵌套的文件目录。文件夹是Linux中最常见的文件类型之一。
mkdir -p a/b/c/d/e
3)cp 命令,用于复制文件或复制目录。复制操作存在以下三种可能:
cp cp4)mv 命令,用于剪切文件(移动文件)或者文件重命名。
mv5)rm 命令,用于删除文件或删除目录。-f 参数不询问用户并且强制删除;-r 递归删除,用于删除目录。
6)dd 命令,用于按照指定大小和个数的数据块来复制文件或者转换文件,还可以用于把光驱设备中的光盘制作成 iso 镜像文件。
复制文件:
dd if=/dev/zero of=560_file count=1 bs=560M
创建并生成 iso 镜像文件:
dd if=/dev/cdrom of=RHEL-server-7.0-x86_64-com.iso
dd
注:Linux系统中有一个名为 /dev/zero 的设备文件,这个文件不会占用系统的存储空间,但却可以提供无穷无尽的数据。
7)file 命令,用于查看文件的类型。在 Linux 中,一切皆文件,我们不能单凭文件后缀来判断文件的类型,此时就需要使用 file 命令来查看文件的类型。
file8、打包命令与搜索命令
网络传输文件建议使用压缩格式的文件,因为压缩格式的文件体积小,传输时间相对更短。
1)tar 命令,用于对文件进行打包压缩或解压。压缩格式主要有 .tar / .tar.gz / .tar.bz2 等,这些格式的文件大部分都可以使用 tar 命令来生成。tar 命令的常用参数如下:
tar注意,上述参数中 -f 特别重要,当有多个参数同时使用时,必须把 -f 参数放在所有参数的最后,因为它代表着要压缩或解压的软件包名称。
压缩文件:
tar -czvf home.tar.gz /home
解压文件:
tar -xzvf home.tar.gz -C /root/demo
2)grep 命令,用于在文本中执行关键词搜索,并显示匹配的结果。grep命令是用途最为广泛的文本搜索匹配工具。如下示例,我们查找当前系统中被禁用了的用户:
grep -n /sbin/nologin /etc/passwd
解释:在Linux系统中,/etc/passwd 文件是保存着所有的用户命令,而一旦用户的登录终端被设置成 /sbin/login ,则该用户将不再允许登录系统了。因此我们可以使用上述命令来查看当前系统中有哪些用户被禁止登录了。grep 命令的常用参数如下:
grep3)find 命令,用于在系统中查找文件。其命令格式为:“find [查找路径] 查找条件 相关操作”。Linux中一切皆文件,find命令就派上了大用场。find命令,是最最常用的文件搜索工具,其常用参数如下:
find特别说明,-exec参数,这个参数用于把 find 命令搜索到的结果交由紧随其后的命令进一步处理,它十分类似于第3章中的管道符技术,并且由于 find 命令对参数的特殊要求,因此虽然 exec 是长格式参数,但依然可以写成
根据文件系统层次标准(Filesystem Hierarchy Standard)协议,Linux系统中的配置文件会保存到 /etc 目录中。如下示例,我们可以查找当前系统中所有以 “host” 开头的文件:
在 /etc 目录下找到以 “host” 开关的文件,并打印出来:
find /etc -name "host*" -print
find
如下示例,在整个系统中搜索权限中包括 SUID 权限的所有文件:
find / -perm -4000 -print
再示例,在整个系统中找出所有归属于 geekxia 用户的文件,并把这些文件复制到 /home/geekxia 目录中去:
find / -user geekxia -exec cp -a {} /home/geekxia/ \;
9、课后习题
1)在RHEL7系统及众多Linux系统中,最常用的Shell终端是什么?
Bash(Bourne-Again Shell)解释器。
2)在执行Linux命令时,使用参数的目的是什么?
为了让Linux系统命令能够更贴合用户的实际需求进行工作。
3)Linux命令、命令的参数,以及命令的对象之间,通常使用什么来间隔?
使用一个或多个空格进行间隔。
4)请使用 echo 命令在屏幕上输出 SHELL 变量的值。
echo $SHELL
5)Linux系统中有哪5种进程?它的含义分别是什么?
5种进程6)请关闭 PID 为 5529 的服务进程。
kill 5529
如果还知道该进程的名称,那么还可以使用 killall 命令来关闭该服务。
7)使用 ifconfig 命令查看网络状态时,需要重点查看哪 4 项信息?
这4项重点信息分别是网卡名称、IP地址、网卡的物理地址、以及RX/TX收发流量数。
8)使用 uptime 命令查看系统负载时,三个负载值所对应的时段是多少?
三个时段,分别是 1分钟、5分钟、15分钟。
9)使用 history 命令查看历史命令的执行记录时,命令前面的数字除了排序外,还有什么用处?
还可以使用 “!序号数字” 来执行某一次的命令记录,从而避免了重复输入较长命令的麻烦。
10)查看内容较长的文本时,建议使用 cat / more / head / tail 中的哪个命令?
文件内容较长时,推荐使用 more 命令来查看;反之使用 cat 命令。
11)使用 mkdir 创建具有嵌套层级的目录时,应该加上什么参数?
应该加上 -p 参数,表示递归迭代。
12)使用 rm 命令删除文件或目录时,可以使用哪个参数来避免二次确认?
使用 -f 参数,可以无须二次确认。
13)如何对 backup.tar.gz 进行解压?
tar -xzvf backup.tar.gz -C /home/backup
14)使用 grep 命令对文件进行关键词搜索时,如果想进行文件内容的反选,该使用什么参数?
使用 -v 参数实现反向选择,即显示出不包含该关键词的行。
grep -v /sbin/nologin /etc/passwd
grep
第3章、管道符、重定向与环境变量
本章学习内容:输入输出重定向,管道命令符,命令行的通配符,常用的转义字符,重要的环境变量。
对Linux命令灵活地组合使用,才能提升工作效率。接下来我们的任务就是把多个Linux命令适当地结合起来,使其协同工作,以便我们更加高效地处理数据。要做到这一点,我们必须搞懂重定向的技术原理。
1、输入输出重定向
所谓输入重定向,就是把文件中的内容导入到命令中去。所谓输出重定向,就是把原本要输出到屏幕上的数据写入到指定的文件中去。工作中,输出重定向的使用频率会更高。五种类型的重定向,如下图示:
1)STDIN,文件描述符为 0,默认从键盘输入,也可以从其它文件或命令输入。
2)STDOUT,文件描述符为 1,默认输出到屏幕。
3)STDERR,文件描述符为 2,默认输出到屏幕。
重定向技术的使用方法如下图示:
重定向的语法4)对于重定向中的标准输出模式(STDOUT),可以省略文件描述符 1 不写;但对于错误输出模式(STDERR)的文件描述符 2 是必须要写的。如下示例,我们把 man bash 命令原本会打印的屏幕上的信息,写入到 bash.txt 文件中去:
man bash > bash.txt
more bash.txt
5)下面示例,演示了标准覆盖输出重定向(1>)和标准追加输出重定向(1>>):
覆盖与追加6)下面示例,演示了错误覆盖输出重定向(2>)和错误追加输出重定向(2>>):
覆盖与追加错误输出重定向十分有用,当我们在执行一个自动化的Shell脚本时,我们可以使用错误重定向技术把Linux命令运行过程中的报错信息写入到指定的文件中去,以便于安装后的排错工作。
7)下面示例,我们演示一下输入重定向的使用(文件描述符 0,可以省略)。我们把 error.txt 文件中的内容导入到 wc -l 命令中,进而统计一下 error.txt 中的内容行数:
输入重定向上述 输入重定向 的命令,事实上等同于 cat error.txt | wc -l 的管道符命令。
2、管道命令符
1)管道符命令的基本语法是“ 命令A | 命令B | 命令C ”,意思是“把前一个命令原本要输出到屏幕上的标准正常数据,当作是后一个命令的标准输入”。如下示例,我们要统计一下当前系统中有多少个用户被禁用了,命令如下:
grep "/sbin/nologin" /etc/passwd | wc -l
2)管道符,非常强大,我们可以把它套用到其它不同的命令上去。比如我们想要用翻页的方式查看 /etc 目录中的文件列表时,就可以使用如下命令:
ls -l /etc | more
3)在修改密码时,通常需要输入两次密码进行确认。我们可以使用管道符和 passwd 命令的 --stdin 参数,来优化密码重置的任务。如下示例,把 root 用户密码改为 "x123456"。
使用管道符重置用户密码4)如下示例,使用管道符给 geekxia 用户发送邮件:
mail 邮件5)使用输入重定向,向 geekxia 用户发送邮件。其目的是让用户一直输入内容,直到我们输入自定义的分界符时才会结束输入。如下示例,root 用户给自己发送一封邮件:
mail 邮件3、命令行的通配符
所谓通配符,就是通用的匹配信息的符号,就好比是编程语言中的正则表达式。比如星号 * 代表匹配零个或多个字符;问题 ? 代表匹配单个字符;中括号 [0-9] 代表匹配 0~9 中的任意一个数字;中括号 [abc] 代表匹配 a、b、c 这三个字符中的任意一个。如下示例,使用通配符查看当前系统中所匹配到的硬盘的文件属性,命令如下:
4、常用的转义字符
为了能够更好地理解用户的表达,Shell解释器还提供了特别丰富的转义字符来处理用户输入的特殊数据。4个常用的转义字符如下:
1)单引号会把它其中的字符都解释成字符串;双引号会保留它其中的变量属性;反斜杠会把紧随其后的字符解释成特殊字符并进行转义。如下示例,演示单引号、双引号、反斜杠的使用:
转义字符2)反引号会把它其中的命令执行后返回结果。如下示例,演示了反引号的使用:
反引号5、重要的环境变量
变量是计算机系统用于保存可变值的数据类型。在Linux中,变量名一般都是大写。Linux系统中的环境变量用于定义系统环境的一些参数。要让Linux系统能够正常地运行并为用户提供服务,需要数百个环境变量协同工作。
1)在Linux中,一切皆文件。那么,用户执行一条命令后,Linux系统中到底发生了什么事情呢?bash解释器是如何寻找命令脚本所在位置的呢?简单来说,命令在Linux中的执行可以分为如下4个步骤(如下图示)。
bash解释器如何寻找命令脚本所在的位置2)如何设置、查看和取消“命令别名”?
alias3)PATH 环境变量有什么用?如何查看 PATH 环境变量?如何修改 PATH 环境变量?
PATH 环境变量4)为什么不能把当前目录(.)添加到 PATH 中去呢?
关于 PATH作为一名态度谨慎、有经验的运维人员,在接手一台Linux系统后,一定要在执行命令前先检查PATH变量中是否有可疑的目录。PATH变量是特别有用的。
5)如何查看Linux系统中所有的环境变量?
env
6)Linux系统中最重要的10个环境变量
Linux系统中最重要的10个环境变量7)Linux 作为一个多用户多任务的操作系统,能够为每个用户提供独立的、合适的工作运行
环境,因此,一个相同的变量会因为用户身份的不同而具有不同的值。
8)除了Linux系统自带的变量以外,我们还可以自定义变量。
自定义变量 - 本地变量9)如何才能把用户自定义的本地变量,提升为全局变量呢?(使用 export 命令,把本地变量提升为全局变量后,这样其它用户也可以访问了)
全局变量6、复习题
本章复习题本章完!!