Linux学习(一)

笔者给各位读者的建议是每天背 30 个在电脑上看到的不认识的单词

1) 文件系统

提供计算机存储信息的结构,信息存储在文件中,文件主要存储在计算机的内部硬盘里,在目录的分层结构中组织文件。文件系统为操作系统提供了组织管理数据的方式。

2) 设备驱动程序

提供连接计算机的每个硬件设备的接口,设备驱动器使程序能够写入设备,而不需要了解执行每个硬件的细节。简单来说,就是让你能吃到鸡蛋,但不用养一只鸡。

3) 用户接口

操作系统需要为用户提供一种运行程序和访问文件系统的方法。如常用的 Windows 图形界面,可以理解为一种用户与操作系统交互的方式;智能手机的 Android 或 iOS 系统,也是一种操作系统的交互方式。

4) 系统服务程序

当计算机启动时,会自启动许多系统服务程序,执行安装文件系统、启动网络服务、运行预定任务等操作。

Linux 在设计之初,就是基于 Intel x86 系列 CPU 架构计算机的,它是一个基于 POSIX 的多用户、多任务并且支持多线程和多 CPU 的操作系统,它是由世界各地成千上万的程序员设计和开发实现的,当初开发 Linux 系统的目的就是建立不受任何商业化软件版权制约的、全世界都能自由使用的类 Unix 操作系统兼容产品。系统的稳定性和安全性尤为突出。

UNIX/Linux 操作系统,即系统内核(Kernel);中间层是 Shell 层,即命令解释层;高层则是应用层。

  • 内核层是 UNIX/Linux 系统的核心和基础,它直接附着在硬件平台之上,控制和管理系统内各种资源(硬件资源和软件资源),有效地组织进程的运行,从而扩展硬件的功能,提高资源的利用效率,为用户提供方便、高效、安全、可靠的应用环境。

  • Shell层Shell 层是与用户直接交互的界面。

  • 应用层提供基于 X Window 协议的图形环境。

常用的远程管理协议有以下 4 种:

  • RDP(remote desktop protocol)协议:远程桌面协议,大部分 Windows 系统都默认支持此协议,Windows 系统中的远程桌面管理就基于该协议。

  • RFB(Remote FrameBuffer)协议:图形化远程管理协议,VNC 远程管理工具就基于此协议。

  • Telnet:命令行界面远程管理协议,几乎所有的操作系统都默认支持此协议。此协议的特点是,在进行数据传送时使用明文传输的方式,也就是不对数据进行加密。

  • SSH(Secure Shell)协议:命令行界面远程管理协议,几乎所有操作系统都默认支持此协议。和 Telnet 不同,该协议在数据传输时会对数据进行加密并压缩,因此使用此协议传输数据既安全速度又快。

为什么要学习?

开源、稳定、高性能、高可用,吩咐的第三方软件支持

第二章 Linux 安装

VMware 提供的网络连接有 5 种,分别是"桥接模式"、"NAT 模式"、"仅主机模式"、"自定义"和"LAN 区段":

  • 桥接模式:相当于虚拟机的网卡和宿主机的物理网卡均连接到虚拟机软件所提供的 VMnet0 虚拟交换机上,因此虚拟机和宿主机是平等的,相当于一个网络中的两台计算机。这种设置既可以保证虚拟机和宿主机通信,也可以和局域网内的其他主机通信,还可以连接 Internet,是限制最少的连接方式,推荐新手使用。

  • NAT 模式:相当于虚拟机的网卡和宿主机的虚拟网卡 VMnet8 连接到虚拟机软件所提供的 VMnet8 虚拟交换机上,因此本机是通过 VMnet8 虚拟网卡通信的。在这种网络结构中,VMware 为虚拟机提供了一个虚拟的 NAT 服务器和一个虚拟的 DHCP 服务器,虚拟机利用这两个服务器可以连接到 Intemet。所以,在正常情况下,虚拟机系统只要设定自动获取 IP 地址,就能既和宿主机通信,又能连接到 Internet了。但是这种设置不能连接局域网内的其他主机。

  • 仅主机模式:宿主机和虚拟机通信使用的是 VMware 的虚拟网卡 VMnet1,但是这种连接没有 NAT 服务器为虚拟机提供路由功能,所以仅主机网络只能连接宿主机,不能连接局域网,也不能连接 Internet 网络。

  • 自定义网络:可以手工选择使用哪块虚拟机网卡。如果选择 Vmnet1,就相当于桥接网络;如果选择 VMnet8,就相当于 NAT 网络。

  • LAN 区段:这是新版 VMware 新增的功能,类似于交换机中的 VLAN(虚拟局域网),可以在多台虚拟机中划分不同的虚拟网络。

RED证书说明

RHCSA

红帽公司将 RHCE 8 版本的认证课程分为 3 门—RH124、RH134、RH294。RH124 涵 盖了系统管理的基础知识,例如安装系统、用户管理、网络管理、远程管理以及软件管理等RH134 涉及 Shell 自动化脚本的编写、磁盘管理、计划任务、系统安全维护等RH294 主要 介绍 Ansible 自动化管理工具的使用方法。本书将上述内容一网打尽,一个不漏。 红帽认证考试的形式为上机实操,且在一天内考完。上午的 RHCSA 认证的考试时长是 2.5 小时,对应的是 RH124 和 RH134 的课程内容,下午的 RHCE 认证的考试时长是 3.5 小时,对应 的是 RH294 课程内容。两门考试的成绩通常会在考试结束后的 72 小时内公布。RHCSA 和 RHCE 认证考试的满分均为 300 分,达到 210 分为合格,会连同成绩和电子证书发送到考试邮箱中。 RHCSA 属于 Linux 系统的初级认证,主要考核对系统平台的管理能力,比较适合 Linux 爱好者。该认证要求考生对 Linux 系统有一定的了解,并且能够熟练使用 Linux 命令来完成 以下任务:

➢ 访问命令行; ➢ 使用命令行管理文件; ➢ 创建、查看和编辑文本文件; ➢ 管理本地用户和群组; ➢ 监控和管理 Linux 进程; ➢ 控制服务和守护进程; ➢ 利用文件系统权限控制文件访问; ➢ 分析和存储日志文件; ➢ 配置和确保 OpenSSH 服务的安全; ➢ 安装和更新软件包; ➢ 访问 Linux 文件系统; ➢ 管理 Linux 网络; ➢ 使用 Kickstart 安装红帽企业版 Linux; ➢ 管理文件系统和逻辑卷; ➢ 管理计划作业; ➢ 访问网络文件系统; ➢ 管理 SELinux; ➢ 控制防火墙; ➢ 执行故障排除任务。

RHCE

RHCE 属于 Linux 系统的中级水平认证,主要考核对常见服务的部署和维护能力,增加了 Ansible 的知识,而且每道考题 都要求用 Ansible 自动化完成,其目的主要是为了让用户适应当前对自动化部署工作的需求。 这部分内容原本应是顶级 RHCA 认证中 DO407 课程的知识。

服务的管理与配置能力: ➢ 在控制节点上安装和配置 Ansible 或红帽 Ansible 引擎; ➢ 创建和管理托管主机列表,并使它们为 Ansible 自动化做好准备; ➢ 通过命令行运行单个 ad hoc 自动化任务; ➢ 编写 Ansible playbook(剧本)以便自动执行多个任务,并将其应用于托管主机; ➢ 使用变量和 fact 对剧本进行参数化处理,并使用 Ansible vault 保护敏感数据; ➢ 编写和重用现有的 Ansible 角色,以简化剧本的创建并重用代码; ➢ 使用 Ansible 自动执行常见的红帽企业版 Linux 系统的管理任务。

VMware Workstation 这款虚拟机软件为用户提供了 3 种可选的网络模式,分别为“使用 桥接网络”“ 使用网络地址转换(NAT)” 与“使用仅主机模式网络”。

➢ :相当于在物理机与虚拟机网卡之间架设了一座桥梁,从而可以通过物 理主机的网卡访问外网。

➢ :让 VM 虚拟机的网络服务发挥路由器的作用,使得通过 虚拟机软件模拟的主机可以通过物理主机访问外网;在物理机中对应的物理网卡是 VMnet8。

➢ :仅让虚拟机的系统与物理主机通信,不能访问外网;在物理机 中对应的物理网卡是 VMnet1。

第一章Linux 安装

服务的启动、重启、停止、重载、查看状态等常用命令

systemctl start httpd 启动服务
systemctl restart httpd 重启服务
systemctl stop httpd 停止服务
systemctl reload httpd 重新加载配置文件(不终止服务)
systemctl status httpd 查看服务状态

服务开机启动、不启动、查看各级别下服务启动状态等常用命令

systemctl enable httpd 开机自动启动
systemctl disable httpd 开机不自动启动
systemctl is-enabled httpd 查看特定服务是否为开机自启动
systemctl list-unit-files --type=httpd 查看各个级别下服务的启动与禁用 情况

第二章Linux命令

2.3 常用系统工作命令

Linux 系统中时刻运行着许多进程,如果能够合理地管理它们,则可以优化系统的性能。 在 Linux 系统中有 5 种常见的进程状态,分别为运行、中断、不可中断、僵死与停止,其各 自含义如下所示。

➢ R(运行):进程正在运行或在运行队列中等待。

➢ S(中断):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该 状态。

➢ D(不可中断):进程不响应系统异步信号,即便用 kill 命令也不能将其中断。

➢ Z(僵死):进程已经终止,但进程描述符依然存在, 直到父进程调用 wait4()系统函数后将进程释放。

➢ T(停止):进程收到停止信号后停止运行。 除了上面 5 种常见的进程状态,还有可能是高优先级(<)、低优先级(N)、被锁进内存 (L)、包含子进程(s)以及多线程(l)这 5 种补充形式。

image-20231130192210290

image-20231130192225494

8.pstree 命令

pstree 命令用于以树状图的形式展示进程之间的关系,英文全称为“process tree”

9.top命令

top 命令用于动态地监视进程活动及系统负载等信息,输入该命令后按回车键执行即可。强化版的任务管理器,

image-20231130193024487

➢ 第 1 行:系统时间、运行时间、登录终端数、系统负载(3 个数值分别为 1 分钟、5 分钟、15 分钟内的平均值,数值越小意味着负载越低)。

➢ 第 2 行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程 数。

➢ 第 3 行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源 百分比、空闲的资源百分比等。其中数据均为 CPU 数据并以百分比格式显示,例如 “99.9 id”意味着有 99.9%的 CPU 处理器资源处于空闲。

➢ 第 4 行:物理内存总量、内存空闲量、内存使用量、作为内核缓存的内存量。

➢ 第 5 行:虚拟内存总量、虚拟内存空闲量、虚拟内存使用量、已被提前加载的内存量。

PR 和 NI 值代表的是进程的优先级,数字越低(取值范围是 -20~19),优先级越高

10.nice命令

nice 命令用于调整进程的优先级,语法格式为“nice 优先级数字 服务名称”。取值范围是 -20~19

11.pidof命令

查询某个指定服务进程的 PID 号码值,语法格式为“pidof [参数] 服务名称”。

12.kill命令

kill 命令用于终止某个指定 PID 值的服务进程,语法格式为“kill [参数] 进程的 PID”。

加参数-9,表示最高级别地强制杀死进程:

13.killall命令

killall 命令用于终止某个指定名称的服务所对应的全部进程,语法格式为“killall [参数] 服 务名称”。

2.4 系统状态检测命令

1.ifconfig 命令

ifconfig 命令用于获取网卡配置与网络状态等信息,英文全称为“interface config”,语法 格式为“ifconfig [参数] [网络设备]”。 使用 ifconfig 命令来查看本机当前的网卡配置与网络状态等信息时,其实主要查看的就 是网卡名称、inet 参数后面的 IP 地址、ether 参数后面的网卡物理地址(又称为 MAC 地址), 以及 RX、TX 的接收数据包与发送数据包的个数及累计流量(即下面加粗的信息内容):

image-20231130203741332

2.uname命令

uname 命令用于查看系统内核版本与系统架构等信息,英文全称为“unix name”,语法格 式为“uname [-a]”。 在使用 uname 命令时,一般要固定搭配上-a 参数来完整地查看当前系统的内核名称、主机名、内核发行版本、节点名、压制时间、硬件名称、硬件平台、处理器类型以及操作系统 名称等信息:

image-20231130203936565

查看当前系统版本的详细信息,则需要查看 redhat-release 文件,其命 令以及相应的结果如下:

[root@linuxprobe~]# cat /etc/redhat-release 
Red Hat Enterprise Linux release 8.0 (Ootpa)
3.uptime 命令

uptime 命令用于查看系统的负载信息,输入该命令后按回车键执行即可。它可以显示当前系统时间、系统已运行时间、启用终端数量以及 平均负载值等信息

4.free 命令

free 命令用于显示当前系统中内存的使用量信息,语法格式为“free [-h]”。

image-20231130204521028

5.who命令
6.last命令

last 命令用于调取主机的被访记录

7.ping命令

执行 ping 命令时, 系统会使用 ICMP 向远端主机发出要求回应的信息,若连接远端主机的网络没有问题,远端 主机会回应该信息。由此可见,ping 命令可用于判断远端主机是否在线并且网络是否正常。

8.tracepath 命令

tracepath 命令用于显示数据包到达目的主机时途中经过的所有路由信息,语法格式为 “tracepath [参数] 域名”。 当两台主机之间无法正常 ping 通时,要考虑两台主机之间是否有错误的路由信息,导致 数据被某一台设备错误地丢弃。这时便可以使用 tracepath 命令追踪数据包到达目的主机时途 中的所有路由信息,以分析是哪台设备出了问题。下面的情况就很清晰了:

9.netstat 命令

netstat 命令用于显示如网络连接路由表、接口状态等的网络相关信息,英文全称为 “network status”,语法格式为“netstat [参数]”。

-a 显示所有连接中的 Socket

-p 显示正在使用的 Socket 信息

-t 显示 TCP 协议的连接状

-u 显示 UDP 协议的连接状态

-n 使用 IP 地址,不使用域名

-l 仅列出正在监听的服务状态

-i 现在网卡列表信息

-r 显示路由表信息

10.history 命令

history 命令用于显示执行过的命令历史,语法格式为“history [-c]”。 history 命令应该是运维人员最喜欢的命令。执行 history 命令能显示出当前用户在本地计 算机中执行过的最近 1000 条命令记录。如果觉得 1000 不够用,可以自定义/etc/profile 文件中 的 HISTSIZE 变量值。在使用 history 命令时,可以使用-c 参数清空所有的命令历史记录。还 可以使用“!编码数字”的方式来重复执行某一次的命令

历史命令会被保存到用户家目录中的.bash_history 文件中。Linux 系统中以点(.)开头的 文件均代表隐藏文件,这些文件大多数为系统服务文件,可以用 cat 命令查看其文件内容:

11.sosreport 命令

sosreport 命令用于收集系统配置及架构信息并输出诊断文档,输入该命令后按回车键执行即可。

2.5 查找定位文件命令

1.pwd 命令

pwd 命令用于显示用户当前所处的工作目录,英文全称为“print working directory”,输 入该命令后按回车键执行即可。

2.cd 命令

“cd -”命令返回到上一次所处的目录, 使用“cd..”命令进入上级目录,以及使用“cd~”命令切换到当前用户的家目录,抑或使用 “cd~username”命令切换到其他用户的家目录

3.ls命令

ls -ld [目录]查看目录属性信息,

ls -al命令即可查看当前目录中的所有文件并输出这些文件的属性信息

4.tree命令
5.find命令

image-20231203210356081

-exec 参数的重要作用。这个参数用于把 find 命令搜索到的结果交由紧 随其后的命令作进一步处理

在整个文件系统中找出所有归属于 linuxprobe 用户的文件并复制到/root/findresults 目录中。 该实验的重点是“-exec {} \;”参数,其中的{}表示 find 命令搜索出的每一个文件,并且 命令的结尾必须是“\;”。

[root@linuxprobe ~]#find / -user linuxprobe -exec cp -a {} /root/findresults/ \;
6.locate 命令

locate 命令用于按照名称快速搜索文件所对应的位置,语法格式为“locate 文件名称”。

不如试试 locate 命令。在使用 locate 命令时,先使用 updatedb 命 令生成一个索引库文件,这个库文件的名字是/var/lib/mlocate/mlocate.db,后续在使用 locate 命令搜索文件时就是在该库中进行查找操作,速度会快很多。

[root@linuxprobe~]# updatedb 
[root@linuxprobe~]# ls -l /var/lib/mlocate/mlocate.db
7.whereis 命令

whereis 命令用于按照名称快速搜索二进制程序(命令)、源代码以及帮助文件所对应的 位置,语法格式为“whereis 命令名称”。

8.which 命令

which 命令用于按照指定名称快速搜索二进制程序(命令)所对应的位置,语法格式为 “which 命令名称”。 which 命令是在 PATH 变量所指定的路径中,按照指定条件搜索命令所在的路径。也就是 说,如果我们既不关心同名文件(find 与 locate),也不关心命令所对应的源代码和帮助文件 (whereis),仅仅是想找到命令本身所在的路径,那么这个 which 命令就太合适了。下面查找

2.6 文本文件编辑命令

1.cat 命令

cat 命令用于查看纯文本文件(内容较少的),英文全称为“concatenate”,语法格式为“cat [参数] 文件名称”。

2.more 命令

more 命令用于查看纯文本文件(内容较多的),语法格式为“more [参数] 文件名称”。使用回车键向下翻页

3.head 命令

head 命令用于查看纯文本文件的前 N 行,语法格式为“head [参数] 文件名称”。

4.tail 命令

tail 命令用于查看纯文本文件的后 N 行或持续刷新文件的最新内容,语法格式为“tail [参 数] 文件名称”。

tail 命令最强悍的功能是能够持续刷新一个文件的内容,当想要实时查看最新的日志文件 时,这特别有用,此时的命令格式为“tail -f 文件名称”:

5.tr 命令

tr 命令用于替换文本内容中的字符,英文全称为“translate”,语法格式为“tr [原始字符] [目标字符]”。先使用 cat 命令读取待处理的文本,然后通过管道符(详见第 3 章)把这些文本内容传递给 tr 命令进行替换操作即可

cat anaconda-ks.cfg | tr [a-z] [A-Z]
6.wc 命令

wc 命令用于统计指定文本文件的行数、字数或字节数,英文全称为“word counts”,语 法格式为“wc [参数] 文件名称”。

-l 只显示行数 -w 只显示单词数 -c 只显示字节数

wc -l /etc/passwd(保存所有用户信息的文件) 可以显示有多少用户
7.stat 命令

stat 命令用于查看文件的具体存储细节和时间等信息,英文全称为“status”,语法格式为 “stat 文件名称”。

Linux 系统中的文件包 含 3 种时间状态,分别是 Access Time(内容最后一次被访问的时间,简称为 Atime), Modify Time(内容最后一次被修改的时间,简称为 Mtime)以及 Change Time(文件属性最后一次被 修改的时间,简称为 Ctime)。

8.grep 命令@

grep 命令用于按行提取文本内容,语法格式为“grep [参数] 文件名称”。

➢ -n 参数用来显示搜索到的信息的行号

➢ -v 参数用于反选信息(即没有包含关键词的所有信息行)。

在 Linux 系统中,/etc/passwd 文件保存着所有的用户信息,而一旦用户的登录终端被设 置成/sbin/nologin,则不再允许登录系统,因此可以使用 grep 命令查找出当前系统中不允许登 录系统的所有用户的信息:

9.cut 命令

cut 命令用于按“列”提取文本内容,语法格式为“cut [参数] 文件名称”。

不仅要使用-f 参数设置需要查看的列数,还需要使用-d 参 数来设置间隔符号。 接下来使用下述命令尝试提取出 passwd 文件中的用户名信息,即提取以冒号(:)为间 隔符号的第一列内容:

diff 命令

diff 命令用于比较多个文件之间内容的差异,英文全称为“different”,语法格式为“diff [参 数] 文件名称 A 文件名称 B”。--brief 参数来确认两个文件是否相同,还可以使用-c 参数来详细比较出多个文件的差异之处。

uniq 命令

uniq 命令用于去除文本中连续的重复行,英文全称为“unique”,语法格式为“uniq [参数] 文 件名称”。

sort 命令

sort 命令用于对文本内容进行再排序,语法格式为“sort [参数] 文件名称”。

image-20231206193215052

2.7 文件目录管理命令

touch 命令

touch 命令用于创建空白文件或设置文件的时间,语法格式为“touch [参数] 文件名称”。

image-20231206193801353

mkdir 命令

mkdir 命令用于创建空白的目录,英文全称为“make directory”,语法格式为“mkdir [参 数] 目录名称”。 除了能创建单个空白目录外,mkdir 命令还可以结合-p 参数来递归创建出具有嵌套层叠 关系的文件目录:

cp 命令

cp 命令用于复制文件或目录,英文全称为“copy”,语法格式为“cp [参数] 源文件名称 目 标文件名称”。复制命令基本不会出错,唯一需要记住的就是在复制目录时要加上-r 参数

image-20231221142546375

mv 命令

mv 命令用于剪切或重命名文件,英文全称为“move”,语法格式为“mv [参数] 源文件 名称 目标文件名称”。 剪切操作不同于复制操作,因为它默认会把源文件删除,只保留剪切后的文件。如果 在同一个目录中将某个文件剪切后还粘贴到当前目录下,其实也就是对该文件进行了重命 名操作:

rm 命令

rm 命令用于删除文件或目录,英文全称为“remove”,语法格式为“rm [参数] 文件 名称”。

dd 命令

dd 命令用于按照指定大小和个数的数据块来复制文件或转换文件,语法格式为“dd if= 参数值 of=参数值 count=参数值 bs=参数值”。,它能够让用户按照指定大小和个数的数 据块来复制文件的内容。当然,如果愿意的话,还可以在复制过程中转换其中的数据。Linux 系统中有一个名为/dev/zero 的设备文件。因 为这个文件不会占用系统存储空间,但却可以提供无穷无尽的数据,因此常常使用它作为 dd 命令的输入文件,来生成一个指定大小的文件。 dd命令可以直接压制成可执行的iso镜像文件

dd if=/dev/cdrom of=RHEL-server-8.0-x86_64-LinuxProbe.Com.iso
file 命令

file 命令用于查看文件的类型,语法格式为“file 文件名称”。

tar 命令

tar 命令用于对文件进行打包压缩或解压,语法格式为“tar 参数 文件名称”。

image-20231221143706276

image-20231221143715068

一般使用“tar -czvf 压缩包名 称.tar.gz 要打包的目录”命令把指定的文件进行打包压缩;相应的解压命令为“tar -xzvf 压缩 包名称.tar.gz”。下面我们逐个演示打包压缩与解压的操作

第三章 管道符、重定向与环境变量

输入输出重定向;

输入重定向是指把文件导入到命令中,而输出重定向则是指把原本要输出到屏幕 的数据信息写入到指定文件中。

image-20231222144541547

image-20231222144552768

// 将命令结果输入重定向到readme.txt文件
man bash > readme.txt
cat readme.txt
// 覆盖写入
echo "Welcome to LinuxProbe.Com" > readme.txt
cat readme.txt
// 追加写入
echo "Quality linux learning materials" >> readme.txt 
cat readme.txt

管道命令符;

执行格式为“命令 A | 命令 B”,把前一个命令原本要输出到屏幕的信息当作后一个命令的标准输入

​
​
// 通过把管道符和 passwd 命令的--stdin 参数相结合,可以用一条命令 来完成密码重置操作:
echo "linuxprobe" | passwd --stdin root

命令行的通配符;

image-20231224135905198

常用的转义字符;

image-20231224152027805

如果参数中出现了 空格,就加双引号;如果参数中没有空格,那就不用加双引号。

$PRICE,通过 美元符号提取变量的内容,,变量提取符号

美元符号与变量提取符号合并后的$$作用是显示当前程序的进程 ID 号码,需要使用反斜杠(\)来进行转义,将 这个命令提取符转义成单纯的文本去除其特殊功能

如果只需要某个命令的输出值,可以像命令这样,将命令用反引号括起来,达到预 期的效果

重要的环境变量。

。Linux 系统中的环境变量是用来定义系 统运行环境的一些参数,比如每个用户不同的家目录、邮件存放位置等。可以直接通过变量 名称来提取到对应的变量值。

  1. 判断用户是否以绝对路径或相对路径的方式输入命令(如/bin/ls),如果是绝对路径则直接执行,否则进入第 2 步继续判断。 :

  2. Linux 系统检查用户输入的命令是否为“别名命令”,即用一个自定义的命令名 称来替换原本的命令名称。

  3. Bash 解释器判断用户输入的是内部命令还是外部命令。内部命令是解释器内部 的指令,会被直接执行;而用户在绝大部分时间输入的是外部命令,这些命令交由步骤 4 继 续处理。可以使用“type 命令名称”来判断用户输入的命令是内部命令还是外部命令:

    1. 可以用 alias 命令来创建一个属于自己的命令别名,语法格式为“alias 别名=命令”。 若要 取消一个命令别名,则是用 unalias 命令,语法格式为“unalias 别名

  4. 命令执行的最后一步,是系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量叫作 PATH, 可以简单地把它理解成是“解释器的小助手”,作用是告诉 Bash 解释器待执行的命令可能存 放的位置,然后 Bash 解释器就会乖乖地在这些位置中逐个查找。PATH 是由多个路径值组成 的变量,每个路径值之间用冒号间隔,对这些路径的增加和删除操作将影响到 Bash 解释器对 Linux 命令的查找。

[root@linuxprobe~]# echo $PATH /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin PATH=$PATH:/root/bin 
[root@linuxprobe~]# PATH=$PATH:/root/bin
[root@linuxprobe~]# echo $PATH /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin:/root/bin

image-20231227125652050

[root@linuxprobe ~]# echo $HOME /root [root@linuxprobe ~]# echo $SHELL /bin/bash

如果工作需要,可以使用 export 命令将其提升为全局变量,这样其他用户也就可以使用 它了: [root@linuxprobe~]# export WORKDIR

[root@linuxprobe~]# su linuxprobe

[linuxprobe@linuxprobe~] cd $WORKDIR

[linuxprobe@linuxprobe workdir]$ pwd /home/workdir

后续要是不使用这个变量了,则可执行 unset 命令把它取消掉:

第四章 Vim 编辑器与 Shell 命令脚本

➢ :控制光标移动,可对文本进行复制、粘贴、删除和查找等工作。

➢ :正常的文本录入。

➢ :保存或退出文档,以及设置编辑环境。

image-20231227135909705

image-20231227135922885

末行模式主要用于保存或退出文件,以及设置 Vim 编辑器的工作环境,还可以让用户执 行外部的 Linux 命令或跳转到所编写文档的特定行数。

image-20231227135957064

image-20231227140004157

4.1.2 配置主机名称

  1. 使用 Vim 编辑器修改/etc/hostname 主机名称文件。

  2. 把原始主机名称删除后追加“linuxprobe.com”。注意,使用 Vim 编辑器修改主 机名称文件后,要在末行模式下执行“:wq!”命令才能保存并退出文档。

  3. 保存并退出文档,然后使用 hostname 命令检查是否修改成功。

4.1.3 配置网卡信息

网卡 IP 地址配置的是否正确是两台服务器是否可以相互通信的前提。在 Linux 系统中, 一切都是文件,因此配置网络服务的工作其实就是在编辑网卡配置文件

现在有一个名称为 ifcfg-ens160 的网卡设备,将其配置为开机自启动,并且 IP 地址、子 网、网关等信息由人工指定,其步骤如下所示。 :首先切换到/etc/sysconfig/network-scripts 目录中(存放着网卡的配置文件)。 :使用 Vim 编辑器修改网卡文件 ifcfg-ens160,逐项写入下面的配置参数并保存退 出。由于每台设备的硬件及架构是不一样的,因此请读者使用 ifconfig 命令自行确认各自网卡 的默认名称。

➢ :TYPE=Ethernet

➢ :BOOTPROTO=static

➢ :NAME=ens160

➢ :ONBOOT=yes

➢ :IPADDR=192.168.10.10

➢ :NETMASK=255.255.255.0

➢ :GATEWAY=192.168.10.1

➢:DNS1=192.168.10.1 :

重启网络服务并测试网络是否连通。

nmcli connection reload ens160 重启网卡

ping 192.168.10.10 ping自己的IP地址(表明网络适配器(网卡或MODEM)工作正常

4.1.4 配置软件仓库

搭建并配置软件仓库的大致步骤如下所示。 :进入/etc/yum.repos.d/目录中(因为该目录存放着软件仓库的配置文件)。 :使用 Vim 编辑器创建一个名为 rhel8.repo 的新配置文件(文件名称可随意,但 后缀必须为.repo),逐项写入下面的配置参数并保存退出。 ➢ :具有唯一性的标识名称,不应与其他软件仓库发生冲突。 ➢ :可以是一些介绍性的词,易于识别软件仓库的用处。 ➢ :软件包的获取方式,可以使用 FTP 或 HTTP 下载,也可以是本 地的文件(需要在后面添加 file 参数)。 ➢ :设置此源是否可用;1 为可用,0 为禁用。 ➢ :设置此源是否校验文件;1 为校验,0 为不校验。 ➢ :若上面的参数开启了校验功能,则此处为公钥文件位置。若没 有开启,则省略不写。 :按配置参数中所填写的仓库位置挂载光盘,并把光盘挂载信息写入/etc/fstab 文件中。 :使用“dnf install httpd -y”命令检查软件仓库是否已经可用。 开始实战! 进入/etc/yum.repos.d 目录后创建软件仓库的配置文件:

4.2 编写 Shell 脚本

Shell 脚本命令的工作方式有下面两种。

➢ :用户每输入一条命令就立即执行。

➢ :由用户事先编写好一个完整的 Shell 脚本,Shell 会一次性执行脚本 中诸多的命令。

脚本声明(#!) 用来告诉系统使用哪种 Shell 解释器来执行该脚本;第二行的注释信息(#)是对脚本功能和 某些命令的介绍信息,使得自己或他人在日后看到这个脚本内容时,可以快速知道该脚本的 作用或一些警告信息;第三、四行的可执行语句也就是我们平时执行的 Linux 命令了

第一种运行脚本程序的方法bash example.sh

第二种运行脚本程序的方法是 通过输入完整路径的方式来执行。但默认会因为权限不足而提示报错信息,此时只需要为脚 本文件增加执行权限即可(详见第 5 章)。

./f.sh
   bash: ./f.sh: Permission denied    //报错,脚本权限不足
chmod u+x f.sh   //赋予权限
./f.sh
4.2.2 接收用户的参数

能接收用户输入的内容,还要有能力进行判断区别,根据不同的输 入调用不同的功能。

设了用于接收参数的变 量,变量之间使用空格间隔。例如,$0 对应的是当前 Shell 脚本程序的名称,$#对应的是总 共有几个参数,$*对应的是所有位置的参数值,$?对应的是显示上一次命令的执行返回值, 而$1、$2、$3......则分别对应着第 N 个位置的参数值

#!/bin/bash
#the first shell
echo "the current shell is $0"
echo "the number of parameter is $#, they are : $* "
echo "the first is $1, this fifth is $5"
​
[root@linuxprobe ~]# ./f.sh -a -b -c -d -e
the current shell is ./f.sh
the number of parameter is 5, they are : -a -b -c -d -e 
the first is -a, this fifth is -e
​
4.2.3 判断用户的参数

Shell 脚本中的条 件测试语法可以判断表达式是否成立,若条件成立则返回数字 0,否则便返回非零值。条件测 试语法的执行格式如图 4-16 所示。切记,条件表达式两边均应有一个空格。

image-20240102145921371

按照测试对象来划分,条件测试语句可以分为 4 种:

➢ 文件测试语句;

➢ 逻辑测试语句;

➢ 整数值比较语句;

➢ 字符串比较语句。

逻辑语句用于对测试结果进行逻辑分析,根据测试结果可实现不同的效果。例如在 Shell 终端中逻辑“与”的运算符号是&&,它表示当前面的命令执行成功后才会执行它后面的命令, 因此可以用来判断/dev/cdrom 文件是否存在,若存在则输出 Exist 字样。

image-20240102150526102

  • ➢ &&是逻辑“与”,只有当前面的语句执行成功的时候才会执行后面的语句。

  • ➢ ||是逻辑“或”,只有当前面的语句执行失败的时候才会执行后面的语句。

  • ➢ !是逻辑“非”, 代表对逻辑测试结果取反值;之前若为正确则变成错误,若为 错误则变成正确。

[root@linuxprobe ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1966        1180         238          14         546         613
Swap:          2047           0        2047
[root@linuxprobe ~]# free -m | grep Mem | awk '{print $4}'  //快速知道还有多少空闲内存
243
如果想把这个命令写入到 Shell 脚本中,那么建议把输出结果赋值给一个变量,以方便其 他命令进行调用: [root@linuxprobe~]# FreeMem=`free -m | grep Mem: | awk '{print $4}'
[root@linuxprobe~]# echo $FreeMem 
243

image-20240102152950804

[ $FreeMem -lt 1024 ] && echo "Insufficient Memory"

image-20240102153111573

[ ! $LANG = "en.US" ] && echo "Not en.US"

相关推荐

  1. Linux学习笔记(

    2024-04-29 20:10:05       2 阅读
  2. Linux命令学习)history

    2024-04-29 20:10:05       16 阅读
  3. Linux学习笔记() —— 常用命令

    2024-04-29 20:10:05       28 阅读

最近更新

  1. vue配置sql规则

    2024-04-29 20:10:05       0 阅读
  2. ios 企业签名证书购买_iOS苹果企业签名须知

    2024-04-29 20:10:05       0 阅读
  3. android 使用系统工具bootchart统计开机时长

    2024-04-29 20:10:05       0 阅读
  4. 【工具分享】FOFA——网络空间测绘搜索引擎

    2024-04-29 20:10:05       0 阅读
  5. 物联网应用,了解一点 WWAN全球网络标准

    2024-04-29 20:10:05       0 阅读
  6. Jupyter Notebook详尽安装教程

    2024-04-29 20:10:05       1 阅读
  7. 实现淘客返利系统中的用户登录与权限管理

    2024-04-29 20:10:05       1 阅读

热门阅读

  1. SpringBoot Redis使用篇

    2024-04-29 20:10:05       11 阅读
  2. Linux学习阶段划分及学习方法

    2024-04-29 20:10:05       12 阅读
  3. 泽尼克波前拟合 matlab

    2024-04-29 20:10:05       12 阅读
  4. MATLAB初学者入门(18)—— 近邻算法

    2024-04-29 20:10:05       12 阅读
  5. 边缘计算概述_5.边缘计算应用场景

    2024-04-29 20:10:05       12 阅读
  6. mac 安装 python3

    2024-04-29 20:10:05       10 阅读
  7. 计算机网络 2.4差错检验与校正

    2024-04-29 20:10:05       12 阅读
  8. springboot常用注释

    2024-04-29 20:10:05       11 阅读
  9. echarts 旭日图 层级嵌套 子级完全继承父级颜色

    2024-04-29 20:10:05       13 阅读
  10. TP8 利用jwt 生成token

    2024-04-29 20:10:05       10 阅读
  11. Nginx自定义状态码499出现原因

    2024-04-29 20:10:05       13 阅读