运维 - 第一阶段 - linux与shell编程

linux与shell编程

讲师:墨竹

系统运维与linux

1.系统运维是什么

简单来说运维(Operation and maintenance)是指对公司硬件和软件的维护
硬件包括:机房、机柜、网线光纤、PDU、服务器、网络设备、安全设备等

系统运维软件:

  • 操作系统:Linux、Windows
  • 数据库:Oracle、Mysql、SQL Server、非结构化数据库
  • 中间件:Weblogic、Tomcat等
  • 虚拟化:VMware、KVM等
  • 云平台:Openstack、Docker等

系统运维支持软件:

  • 监控系统:监控机房、硬件、操作系统、数据库、中间件等
  • 备份系统:备份重要数据
  • 身份认证管理系统:也叫4A系统,认证Authentication、授权Authorization、记账Accounting、审计Audit
  • CMDB系统:CMDB存储与管理企业IT架构中设备的各种配置信息
  • ITSM系统:IT服务管理系统是一套帮助企业对IT系统的规划、研发、实施和运营进行有效管理的系统,可管理问题工单、变更工单、事件工单等。
  • 自动化运维系统->智能化运维系统
  • 私有云系统

业务系统:

  • 企业的业务系统,比如核心业务系统、APP、网站、ERP系统、CRM系统等

2.系统运维学了之后能做什么

  • 初级系统运维工程师
  • 中级系统运维工程师
  • 高级系统运维工程师
  • 系统运维总监

3.运维与linux的关系

linux是运维中最基础的是最重要的技术点。就好比我们要在windows上办公必须先学会使用windows操作系统, 但是linux操作系统与windows操作系统不同,他的入门要求要高一些,通常采用指定来进行操作。

今后的环境基本都是基于linux,因此我们先来学习linux基础。

第1章 Linux概述

1.1 了解Unix系统

Unix 是较早被广泛使用的计算机操作系统之一,它的第一版于1969年由 Ken Thompson 在 AT&T 贝尔实验室是实现,1973年 Ken Thompson 与 Dennis Ritchie 用C语言重写了 Unix 的第三版内核
在这里插入图片描述

  • Unix是一个强大的多用户、多任务操作系统。
  • UNIX的商标权由国际开放标准组织(The Open Group)所拥有。
  • UNIX操作系统是商业版,需要收费,价格比Microsoft Windows正版要贵一些。

1.2 了解Linux发展历史

Linux是一套自由加开放源代码的类Unix操作系统,诞生于1991年10月5日(第一次正式向外公布),由芬兰学生Linus Torvalds和后来陆续加入的众多爱好者共同开发完成。

Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。

GPL协议:

Richard M.Stallman 于1984年创立自由软件体系GNU,拟定普遍公用版权协议(GeneralPublicLicense,简称GPL),今天Linux的成功就得益于GPL协议。

所有GPL协议下的自由软件都遵循着Richard M. Stallman的"Copyleft"(非版权)原则:即自由软件允许用户自由拷贝、修改和销售,但是对其源代码的任何修改都必须向所有用户公开。

GNU 计划

GNU计划和自由软件基金会FSF(the Free Software Foundation)是由Richard M. Stallman 于1984 年一手创办的。旨在开发一个类似UNIX 并且是自由软件的完整操作系统

到上世纪90 年代初,GNU 项目已经开发出许多高质量的免费软件,其中包括有名的emacs 编辑系统、bash shell 程序、gcc 系列编译程序、gdb 调试程序等等。这些软件为Linux 操作系统的开发创造了一个合适的环境。这是Linux 能够诞生的基础之一,以至于目前许多人都将Linux 操作系统称为“GNU/Linux”操作系统。

在这里插入图片描述

Linux 系统特点

开放性(开源)、多用户、多任务、良好的用户界面、优异的性能和稳定性以及多用户多任务的特点

多用户:多个用户,在登陆计算机(操作系统),允许同时登陆多个用户进行操作

多任务:多个任务,允许用户同时进行多个操作任务

注意:Windows 属于单用户多任务,Linux 属于多用户多任务

1.3 Linux的应用领域

  • 服务器系统
    Web应用服务器、数据库服务器、游戏服务器、接口服务器、DNS、FTP等等;

  • 嵌入式系统
    路由器、防火墙、手机、PDA、IP 分享器、交换器、家电用品的微电脑控制器等等

  • 高性能运算、计算密集型应用
    Linux有强大的运算能力。IBM的Watson超级计算机就是使用了Linux系统

  • 桌面应用系统
    很多桌面操作系统的底层也是Linux

  • 移动手持系统
    安卓系统就是基于Linux

1.4 Linux版本

Linux 的版本继承了 Unix 的版本定制规则,分为内核版本和发行版本

内核版本:内核就是一个核心,其他软件都基于这个核心,不能直接使用,内核版本统一在 http://www.linux.org 发布

发行版本:由各个 Linux 发行商发布,Linux 发行商有权选择 Linux 的内核版本。常见的 Linux 的发行版本:RedHat、CentOS、Debian、Ubuntu

内核版本分为稳定版和开发版,区分方式是根据次版本的奇偶判定,奇数为开发版,偶数为稳定版

在这里插入图片描述

  • Debian
    Debian运行起来极其稳定,这使得它非常适合用于服务器。

  • redhat:
    这是第一款面向商业市场的Linux发行版。它有服务器版本,支持众多处理器架构。
    全球最大的linux发行厂商,功能全面、稳定。

  • ubuntu:
    Ubuntu是Debian的一款衍生版,侧重于它在这个市场的应用,在服务器、云计算、甚至一些运行的移动设备上很常见。

  • centos:
    CentOS是一款企业级Linux发行版,它使用红帽企业级Linux中的免费源代码重新构建而成。
    这款重构版完全去掉了注册商标以及Binary程序包方面一个非常细微的变化。

  • Fedora
    Fedora同是一款非常好的发行版,有庞大的用户论坛,软件库中还有为数不少的软件包。
    Fedora同样使用YUM来管理软件包。

第2章 安装Linux

2.1 安装虚拟机软件

  • 什么是虚拟

虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。

  • 常用的虚拟机

常用的虚拟机软件 主要包括:VMware Workstation、 VirtualBox、Virtua* PC

VMware Workstation:
是VMware公司销售的商业软件产品之一。该工作站软件包含一个用于英特尔x86相容电脑的虚拟机套装,其允许用户同时创建和运行多个x86虚拟机

VirtualBox:
是一款开源虚拟机软件。VirtualBox 是由德国 Innotek 公司开发,由SunMicrosystems公司出品的软件,使用Qt编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VMVirtualBox

Virtua* PC:
是Microsoft 最新的虚拟化技术。主要适合做微软自己产品的服务

  • 我的电脑与虚拟机

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 安装Centos 7系统

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3 配置静态IP

配置网络的目的主要是为了固定虚拟机的内网IP,方便我们在真实的操作系统中使用Linux连接工具软件进行远程连接。

1.关闭虚拟机
2.点击编辑,选择倒数第二个选项“虚拟网络编辑器”,出现下面的“虚拟网络编辑器”窗口。选择NAT模式,注意子网IP前三位与NAT设置的网关IP、DHCP网段一致。

在这里插入图片描述

设置NAT

在这里插入图片描述

设置DHCP范围

在这里插入图片描述

3.进入操作系统配置网卡信息
执行命令

vi /etc/sysconfig/network-scripts/ifcfg-ens33

在这里插入图片描述
插入、保存退出

i 插入
esc 退出
:wq 保存退出

4.重启执行命令重启网卡服务

systemctl restart network

5.检查IP是否更变

命令: ip addr

在这里插入图片描述

5.测试网络是否连通

ping www.baidu.com

在这里插入图片描述
说明网络已经连通.

2.4 给虚拟机进行快照

快照其实就是还原点,我们设置了快照。以后如果被我们玩坏了,也可以快速的还原到以前状态!

VMware快照
在这里插入图片描述

2.5 安装远程连接工具

2.5.1 远程终端命令工具

主要功能是向Linux系统远程发送命令

Xshell:目前最好用
SecureCRT:收费
Putty:早就停止维护了,很多东西支持的很差。但因为习惯依旧很多人支持

2.5.2 XManager工具

1)安装过程比较简单下一步
2)配置主机地址
在这里插入图片描述
在这里插入图片描述
3) 输入用户名和密码
在这里插入图片描述
在这里插入图片描述
4) xshell工作样式配置
在这里插入图片描述
5) xftp 工具使用

xftp window操作系统和centos 系统传输文件
在这里插入图片描述
在这里插入图片描述

第3章 Linux的结构

3.1 Linux组成

在这里插入图片描述

  • KERNEL
    内核:是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序。
    作用: 管理内存 管理CPU 管理进程 管理文件系统 管理设备驱动 管理网络通信
    特点: 支持多任务 支持共享库 支持需求挂载

  • SHELL
    Shell:是系统的用户界面,提供了用户和内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行,是一个命令解释器。但它不仅是命令解释器,而且还是高级编程语言,shell编程。

  • FILE SYSTEMS
    FILE SYSTEMS(文件系统):文件系统是文件存放在磁盘等存储设备上的组织方法,Linux支持多种文件系统,如ext3,ext2,NFS,SMB,iso9660等

  • PROGRAMS/UTILITIES/TOOLS
    应用程序:标准的Linux操作系统都会有一套应用程序例如X-Window,Open Office等

3.2 Linux目录结构

在这里插入图片描述
注意:

/bin	:用户的基本命令 		(核心的二进制文件目录)
/boot	:系统引导文件、内核	(存放程序加载所需文件)
/dev	:设备文件	
/etc	:配置文件		
/home	:普通用户的家目录
/lib 	:系统库 (存放共享文件 内核模块的文件)
/lib64	:????
/media	:移动设备挂载点
/mnt	:临时文件系统挂载点
/opt	:第三方应用程序的安装位置
/proc	:用于输出内核与进程信息相关的虚拟文件系统
/root	:root用户目录 		(系统管理员主目录)
/run 	:存放运行中相关数据, 进程pid 
/sbin	:管理类的基本命令 (二进制文件 超级管理员)
/srv	:系统运行的服务用到的数据
/sys	:用于输出当前系统上硬件设备相关信息的虚拟文件系统
/tmp	:临时文件存放地
/usr	:共享的只读数据
/var	:变化的数据文件

第4章 常用Linux命令的基本使用

4.1 常用快捷键

1) tab键:			命令或者路径提示及补全;
2) ctrl+c:			放弃当前输入,终止当前任务或程序;
3) ctrl+l:			清屏;
4) ctrl + insert:	复制;
5) shift + insert:	粘贴;
6) alt+c :			断开连接 / ctrl + shfit + R 重新连接
7) alt+1/2/3/4/5… :切换会话窗口
8) 上下键:			查找执行行过的命令,或者是history命令

4.2 终端命令格式

command [-options] [parameter]

  • command : 命令名, 相应功能的英文单词或单词的缩写
  • [-options] : 选项, 可用来对命令进行控制, 也可以省略
  • [parameter] : 传给命令的参数, 可以是 零个、一个 或者 多个

4.3 帮助命令

因为一个命令有很多可选项, 死记硬背肯定不行, 所以需要借助手册查阅.

1) -- help 帮助信息

command --help

说明: 显示 command 命令的帮助信息
缺点: 虽然可以查询命令的帮助信息, 但是没有提供 翻页、搜索功能.

2) man 手册

man command

说明:
查询 command 命令的使用手册
man 时 manual 的缩写, 是Linux提供的一个手册, 包含了绝大部分的命令、函数的详细使用说明.

使用 man 时的操作键:

操作键功能
空格键显示手册的下一屏
Enter键一次滚动手册页的一行
b回滚一屏
f前滚一屏
q (quit)退出
/word搜索word字符串
n(next)搜索下一个
N搜索上一个

提醒:
现阶段只需要 知道 通过以下两种方式可以查询命令的帮助信息
先学习 常用命令 及 常用参数 的使用即可, 工作中如果遇到问题可以借助 网络搜索

4.4 其他常用命令

序号命令对应英文作用
01lslist查看当前目录下的内容
02pwdprint working derectory查看当前所在文件夹
03cd [目录名]change directory切换文件夹
04touch [文件名]touch如果文件不存在, 新建文件
05mkdir [目录名]make directory创建目录
06rm [文件名]remove删除指定的文件名
07clearclear清屏

4.5 目录操作命令

Linux中并没有文件夹的概念,应该叫目录。

4.5.1 切换目录
cd	(change directory) 		功能: 切换目录
pwd	(print work directory) 	功能: 显示当前工作目录

在这里插入图片描述

4.5.2 练习
1 查看当前所在目录
2 切换到 	/usr/local(绝对路径)
3 切换到 	上一级 /usr
4 切换到 	/usr/tmp (相对路径)
5 切换回 	/usr/local
6 后退到上一次所在目录

答案

pwd
cd /usr/local
cd ..
cd tmp
cd /usr/local
cd -

4.6 查看目录内容

ls(list) 		功能: 列出目录内容
	a(all) 		功能: 所有
	h(human) 	功能: 人性化的显示(单位: K,G等)

在这里插入图片描述

4.6.1 ls练习
1 查看 			/usr内容
2 查看所有 		/usr内容(既包含隐藏,也包含非隐藏)
3 查看 			/usr详细内容
4 简化 查看 		/usr详细内容
5 易懂简化版 查看  /usr详细内容
ls
ls -a 
ls -l
ll
ls -lh

扩展: linux 如何使用树结构显示某文件夹下的所有文件(包括子文件夹 )?

ls -R

4.7 创建文件

1)通过 touch 命令 创建文件

第一步: 创建一个空白文件

touch 不存在的文件

第二步: 修改文件的末次访问时间

touch 存在的文件

2)案例

touch test.txt

4.8 创建目录命令

通过 mkdir 命令 创建目录

基本语法

mkdir [-p] 要创建的目录
选项英文含义
-pparent可以递归创建目录

案例

mkdir test
mkdir -p test/test1

注意

通过 mkdir -p 目录名 命令 创建目录
注意: 新建目录的名称不能与当前目录中已有的目录或文件同名

4.9 rmdir 删除一个空的目录

基本语法:

rmdir 要删除的空目录,remove 即移除

案例

rmdir test2

注意:

如果该目录中存在文件或其他目录是该命令是不能删除的.

4.10 touch创建文件和rm 删除文件

  1. 创建文件的命令
touch 文件名称

注意事项:

touch 文件名1 文件2 .. 可以创建多个文件
  1. 删除命令
rm [-参数] 文件/目录 (功能描述:递归删除目录中所有内容)慎用

通过 rm -rf 文件/目录 命令实现删除 文件和目录的功能, rm 对应的英文是 remove 含义: 删除

参数英文含义
-fforce (强制)强制删除,忽略不存在的文件, 无需提示
-rrecursive (递归)递归地删除目录下的内容, 删除文件夹 时必须加此参数

在这里插入图片描述

案例

1)删除空目录
rmdir test1

2)递归删除目录中所有内容
rm -rf test2

4.11 cp 复制拷贝命令

通过 cp 实现复制将指定的 文件 或 目录 复制到 另一个 文件 或 目录中

1)基本语法:

(1)cp source dest (功能描述:复制source文件到dest)
(2)cp -r sourceFolder targetFolder (功能描述:递归复制整个文件夹)
命令英文作用
-rrecursive (递归)递归复制目标目录的内容

2)案例:

(1)复制文件
cp test.txt test1.txt

(2)递归复制整个文件夹
cp -r abc /tmp

4.12 mv (move)

通过 mv 命令可以用来 移动 文件 或 目录, 也可以给 文件或目录重命名

1)基本语法

(1)mv oldNameFile newNameFile (功能描述:重命名)
(2)mv /temp/movefile /targetFolder (功能描述:递归移动文件)

2)案例:

1)重命名
mv file1 file11 (把file1文件夹改名为file11)

2)移动文件
mv file11 test (把file11文件夹放到test文件夹内)

4.13 cat 查看文件内容

查看文件内容,从第一行开始显示。

1)基本语法

cat [选项] 要查看的文件

2)选项

-b 	:	列出行号,仅针对非空白行做行号显示,空白行不标行号!
-n	:	列出行号,连同空白行也会有行号,与 -b 的选项不同;
-E 	:	将结尾的断行字节 $ 显示出来;
-T 	:	将 [tab] 按键以 ^I 显示出来;
-v 	:	列出一些看不出来的特殊字符;
-A 	:	相当于 -vET 的整合选项,可列出一些特殊字符而不是空白而已;

3)案例

查看内容
[root@localhost usr] cat abc.txt
babbaba
abababab
ababbabaZZ

查看添加-A
[root@localhost usr] cat -A abc.txt
babbaba$
abababab$
ababbabaZZ$

查看添加-b
[root@localhost usr] cat -b abc.txt
1 babbaba
2 abababab
3 ababbabaZZ

查看添加-E
[root@localhost usr] cat -E abc.txt
babbaba$
abababab$
ababbabaZZ$

查看内容添加-n
[root@localhost usr] cat -n abc.txt
1 babbaba
2 abababab
3 ababbabaZZ

查看内容添加-T
[root@localhost usr] cat -T abc.txt
babbaba
abababab
ababbabaZZ

查看内容添加-v
[root@localhost usr] cat -v abc.txt
babbaba
abababab
ababbabaZZ

4.14 more 查看文件内容

查看文件内容,一页一页的显示文件内容。

1)基本语法:

more 要查看的文件

2)功能使用说明

空格键 :		代表向下翻『一页』;
Enter :			代表向下翻『一行』;
q 				代表立刻离开 more ,不再显示该文件内容。
Ctrl+F 			向下滚动一屏
Ctrl+B 			返回上一屏
= 				输出当前行的行号

3)案例

[root@linux121 test1] more test1.java

4.15 less 查看文件内容

less 的作用与 more 十分相似,都可以用来浏览文字档案的内容,不同的是 less 允许使用[pageup] [pagedown]往回滚动。

1)基本语法:

less 要查看的文件

2)功能使用说明

空格键 		:向下翻动一页;
[pagedown]	:向下翻动一页;
[pageup] 	:向上翻动一页;
/字符串 		:向下搜寻『字符串』的功能;n:向下查找;N:向上查找;
q 			:离开 less 这个程序;

3)案例

[root@linux121 test1] less test1.java

4.16 head查看文件内容

查看文件内容,只看头几行,优点:对于大文件不必都加载,只显示头几行即可。

  1. 基本语法
head 文件名 		:查看前10行
head -n 3 文件名 :查看文件的前3行
head -c 3 文件名 :查看文件的前3个字符

4.17 tail 查看文件内容

查看文件内容,只看尾巴几行,优点:可以查看文件实时追加的内容。

1)基本语法

(1)tail -n 10 文件 	(功能描述:查看文件头(从末尾开始数)10行内容,10可以是任意行数)
(2)tail -f 文件 		(功能描述:实时追踪该文档的所有行更新)

2)案例

1 查看文件后10行内容
2 动态追踪文件内容
3 动态追踪 最后10行内容 且 退出

3)答案

tail -10 文件名
tail -f 文件名
tail -10f 文件名 (ctrl + c 是退出)

4.18 组合命令

Linux中的命令组合后,可以产生神奇的效果!

append 追加
replace 替换,覆盖

4.18.1 重定向输出>和>>
  • > 重定向输出;
  • >> 重定向输出, 又追加功能;
  • 实例
    cat /etc/passwd > a.txt 将输出定向到a.txt中
    cat /etc/passwd >> a.txt 输出并且追加

echo 控制台输出的内容 (类似sout)

需求:

1 删除 /usr/tmp/目录下的所有内容
2 增加 1.txt文件, 内容: 文本1
3 增加 2.txt文件, 内容: 文本2
4 将2.txt内容 复制粘贴到 3.txt
5 将1.txt内容 复制粘贴到 3.txt(缺点: 产生替换效果)
6 将2.txt内容 复制追加粘贴到 3.txt中
7 将ifconfig内容 追加到 3.txt中

答案:

1 删除 /usr/tmp/目录下的所有内容
[root@spark01 tmp] rm -rf *

2 增加 1.txt文件, 内容: hello
[root@spark01 tmp] touch 1.txt && ls
1.txt
[root@spark01 tmp] echo hello > 1.txt && cat 1.txt
hello

3 增加 2.txt文件, 内容: world
[root@spark01 tmp] touch 2.txt && ls
1.txt 2.txt
[root@spark01 tmp] echo world > 2.txt && cat 2.txt
world

4 将2.txt内容 复制粘贴到 3.txt
[root@spark01 tmp] touch 3.txt && ls
1.txt 2.txt 3.txt
[root@spark01 tmp] cat 2.txt > 3.txt && cat 3.txt
world

5 将1.txt内容 复制粘贴到 3.txt(缺点: 产生替换效果)
[root@spark01 tmp] cat 1.txt > 3.txt && cat 3.txt
hello

6 将2.txt内容 复制追加粘贴到 3.txt中
[root@spark01 tmp] cat 2.txt >> 3.txt && cat 3.txt
hello
world

7 将ifconfig指令内容 追加到 3.txt中
[root@spark01 tmp] ifconfig >> 3.txt
[root@spark01 tmp] cat 3.txt
hello
world
eth0 	Link encap:Ethernet HWaddr 00:0C:29:0E:3F:05
		inet addr:192.168.220.200 Bcast:192.168.220.255 Mask:255.255.255.0
		inet6 addr: fe80::20c:29ff:fe0e:3f05/64 Scope:Link
		UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
		RX packets:12903 errors:0 dropped:0 overruns:0 frame:0
		TX packets:10765 errors:0 dropped:0 overruns:0 carrier:0
		collisions:0 txqueuelen:1000
		RX bytes:1189753 (1.1 MiB) TX bytes:3324044 (3.1 MiB)
		Interrupt:19 Base address:0x2000
		
lo 		Link encap:Local Loopback
		inet addr:127.0.0.1 Mask:255.0.0.0
		inet6 addr: ::1/128 Scope:Host
		UP LOOPBACK RUNNING MTU:16436 Metric:1
		RX packets:0 errors:0 dropped:0 overruns:0 frame:0
		TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
		collisions:0 txqueuelen:0
		RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
4.18.2 管道 “|”

管道符号| 的作用是: 将一个命令的输出作为另一个命令的输入

配合使用的命令

ps(Process Status) 进程状态 ps -ef
grep(Global Regular Expression Print) 全局正则表达式版本(搜索)
  • 管道是Linux命令中重要的一个概念, 其作用是将一个命令的输出用作另一个命令的输出
  • 示例
    ls --help | more 分页查询帮助信息
    ps -ef | grep java 查询名称中包含java的进程

需求:

1 分页查询 ls的帮助信息(回车键 下一行, 空格键 下一页, ctrl +c 退出)
2 查询ls帮助信息中包含'递归'的指令

答案:

ls --help | more
ls --help | grep 'recursive'
4.18.3 逻辑控制&&

命令间的逻辑控制

  • 命令之间使用 && 链接, 实现类似逻辑与的功能
  • 只有在 && 左边的命令运行成功时, && 右边的命令才会被执行
  • 只要左边命令运行失败, 后面的命令就不会被执行
  • 例如: cp 1.txt 2.txt && cat 2.txt

因为 启动软件通常不会打印启动的日志信息, 所以需要再打开对应的日志信息查看

分:

tail -100f catalina.out

./startup.sh

使用合并指令:

./startup.sh && tail -100f ../logs/catalina.out

缺点: 比较麻烦. 解决: 使用&&指令就可以一步到位

这个经常把一些命令组合使用,比如我们在启动tomcat后,再用tail命令查看日志。如果启动失败,则不查看

需求:

1 打印1.txt内容 且 打印2.txt内容
2 打印100.txt内容 且 打印2.txt内容(没有)
3 启动tomcat 且 打印日志信息

答案:

cat 1.txt && cat 2.txt
cat 100.txt && cat.2.txt
./startup.sh && tail -50f ../logs/catalina.out

4.19 history查看所敲命令历史

1)基本语法:

history

2)案例

[root@linux121 test] history

在这里插入图片描述

第5章 打包和解包命令

5.1 打tar包

  • 类似将 冬天的衣服 放到 袋
  • 打包之后的大文件 需要以 .tar 结尾.

tar 打包命令格式

# 将 一系列文件 打包成 一个大文件
tar -cvf 打包名.tar 被打包的目录
tar -cvf 打包名.tar 被打包的文件1 被打包的文件2 被打包的文件3

tar 选项说明

命令英文含义
ccreate生成档案文件, 创建打包文件
vverbosely(啰嗦的)像 ‘唐僧’ 一样报告进度
ffile指定档案的文件名称, f后面一定是 .tar 文件, 所以必须放到最后
练习1: 将1.txt、2.txt、3.txt 打包成 123.tar文件
练习2: 将有内容的aaa目录 打包成 aaa.tar 文件

5.2 解tar包

  • 类似将 冬天的衣服 从 袋子里取出来

tar 解包命令格式

# 将一个打包后的 分解成 一系列小文件, 分解位置为 当前目录
tar -xvf 打包名.tar

# 将一个打包后的 分解成 一系列小文件, 分解位置为 指定目录
tar -xvf 打包名.tar -C 解包路径位置
命令英文含义
xextract (提取)解包
C (大写C)directory (目录)默认保存到当前目录, 通过 -C 更改解压目录, 注意: 解压目录必须存在
练习1: 将 123.tar 解压到 当前目录中
练习2: 将 aaa.tar 解包到 /export/test/a1/b1/c1/ 目录中

小结

打包: tar -cvf 打包之后的文件名.tar 被打包的目录或文件名
解包: tar -xvf 打包之后的文件名.tar [ -C 指定解包位置 ]

5.3 gzip格式 压缩 和 解压缩

  • 打包 和 压缩 是两件事
  • 类似与 先将冬天衣服放到压缩袋, 再抽取里面的空气
  • Linux 中, 最常用的压缩文件格式是 xxx.tar.gz
  • tar 命令中有一个选项 -z 可以调用 gzip , 从而可以方便的实现压缩和解压缩的功能

命令格式如下

# 压缩文件
tar -zcvf 打包压缩文件名.tar.gz 被压缩的文件/目录

# 解压缩文件
tar -zxvf 打包文件.tar.gz

# 解压缩到指定路径
tar -zxvf 打包文件.tar.gz -C 目录路径

tar 的选项说明

命令英文含义
zgzip使用gzip压缩和解压缩
练习1: 将1.txt、2.txt、3.txt 打包压缩成 123.tar.gz文件(gzip压缩格式)
练习2: 将有内容的aaa目录 打包成 aaa.tar.gz 文件(gzip压缩格式)
练习3: 将 123.tar.gz 解压到 当前目录中(gzip压缩格式)
练习4: 将 aaa.tar.gz 解包到 /export/bbb 目录中(gzip压缩格式)

5.4 bzip2 格式 压缩 和 解压缩

  • bzip 是压缩的第二种方式
  • 类似与 先将冬天衣服放到压缩袋, 再抽取里面的空气
  • Linux 中, bzip2 压缩文件格式是 xxx.tar.bz2
  • tar 命令中有一个选项 -j 可以调用 bzip2 , 从而可以方便的实现压缩和解压缩的功能

命令格式如下

# 压缩文件
tar -jcvf 打包压缩文件名.tar.bz2 被压缩的文件/目录

# 解压缩文件
tar -jxvf 打包文件.tar.bz2

# 解压缩到指定路径
tar -jxvf 打包文件.tar.bz2 -C 目录路径

注意事项: 如果报错tar (child): bzip2:无法 exec: 没有那个文件或目录
要安装bzip2的包
yum install -y bzip2

tar 的选项说明

命令英文含义
jbzip2使用bzip2压缩和解压缩
练习1: 将1.txt、2.txt、3.txt 打包压缩成 123.tar.bz2文件(bzip2压缩格式)
练习2: 将有内容的aaa目录 打包成 aaa.tar.bz2 文件(bzip2压缩格式)
练习3: 将 123.tar.bz2 解压到 当前目录中(bzip2压缩格式)
练习4: 将 aaa.tar.bz2 解包到 /export/bbb 目录中(bzip2压缩格式)

小结

打包压缩: tar -jcvf 打包之后的文件名.tar.bz2 被打包压缩的目录或文件名
解包解压缩: tar -jxvf 打包之后的文件名.tar.bz2 [ -C 指定解包位置 ]

第6章 时间日期

6.1 date 显示当前时间

1)基本语法:注意命令与参数之间有空格

(1)date (功能描述:显示当前时间)
(2)date +%Y (功能描述:显示当前年份)
(3)date +%m (功能描述:显示当前月份)
(4)date +%d (功能描述:显示当前是哪一天)
(5)date +%Y%m%d … (功能描述:显示当前年月日各种格式 )
(6)date "+%Y-%m-%d %H:%M:%S" 或者单引号也可以 (功能描述:显示年月日时分秒)

2)案例

[root@linux121 /]# date
[root@linux121 /]# date +"%Y-%m-%d"(注意date后面有个空格再加 )
[root@linux121 /]# date "+%Y-%m-%d %H:%M:%S"(注意date后面有个空格再加 ;注意%d空格%H)

6.2 date 显示非当前时间

显示的是字符串描述的时间,不是当前时间。

1)基本语法:

(1)date -d '1 days ago' (功能描述:显示前一天日期)
(2)date -d yesterday +"%Y-%m-%d"(同上)
(3)date -d next-day +"%Y-%m-%d" (功能描述:显示明天日期)
(4)date -d 'next monday' (功能描述:显示下周一时间)

2)案例:

[root@linux121 /]# date -d '1 days ago'
Sun Dec 19 19:45:03 CST 2021

[root@linux121 /]# date -d 'next monday'
Mon Dec 27 00:00:00 CST 2021

6.3 设置系统时间

1)基本语法:

date -s 字符串时间

2)案例

[root@hadoop106 /]# date -s "2020-06-20 20:52:18"

6.4 cal 查看日历

1)基本语法:

cal [选项] (功能描述:不加选项,显示本月日历)

选项:

1. -3 ,显示系统前一个月,当前月,下一个月的日历

2. 具体某一年,显示这一年的日历。

2)案例:

[root@linux121 /]# cal
[root@linux121 /]# cal -3
[root@linux121 /]# cal 2020

第七章 搜索查找

7.1 find 查找文件或者目录

find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等。

基本格式: find path [options]

1.按照文件名查找

(1)find /etc -name yum.conf #在/etc目录下文件yum.conf
(2)find /etc -name 'yum' #表示在/etc目录下查找文件名中含有字符串‘yum’的文件
(3)find . -name 'yum*' #表示当前目录下查找文件名开头是字符串‘yum’的文件
#使用通配符*(0或者任意多个)。

2.按照文件特征查找

(1)find / -atime -2 # 查找在系统中最后48小时访问的文件 (Access Time,文件读取访问时间)
(2)find / -empty 	# 查找在系统中为空的文件或者文件夹
(3)find / -group susan 	# 查找在系统中属于group为susan的文件
(4)find / -mtime -1 	# 查找在系统中最后24小时里修改过的文件 (modify time)
(5)find / -user susan	# 查找在系统中属于susan这个用户的文件
(6)find / -size +10000c # 查找出大于10000字节的文件(c:字节,w:双字,k:KB,M:MB,G:GB)
(7)find / -size -1000k 	# 查找出小于1000KB的文件

3.使用混合查找方式查找文件
参数有: !,-and(-),-or(-o)。

(1)find /tmp -size +10c -and -mtime +2 #在/tmp目录下查找大于10字节并在2天前修改的文件
(2)find / -user root -or -user susan #在/目录下查找用户是root或者susan用户的文件
(3)find /tmp ! -user susan #在/tmp目录中查找所有不属于susan用户的文件

7.2 grep 过滤查找

grep是根据文件的内容进行查找,会对文件的每一行按照给定的模式(pattern)进行匹配查找。

基本格式:grep [options] 范围

1. 主要参数

[options]主要参数:
-c: 只输出匹配行的计数。
-i: 不区分大小写
-n: 显示匹配行及行号。
-w: 显示整个单词
-r: 递归查询

2. 实例练习:

1)在applicationContext.xml文件中查找name
2)查找name统计行号
3)统计jdbc的个数
4)查找dataSource 并忽略大小写
5)查找mapper单词
6)递归查询/usr目录下 含有name的字段

第8章 vi编辑器

  • 在Linux下一般使用vi编辑器来编辑文件。
  • vi既可以查看文件也可以编辑文件。
  • 而vim是vi的升级版本,具备更多的功能.
  • vi如果目标文件不存在,会创建新的文件。但是如果新文件没做编辑,退出后还会消失。

8.1 vi的三种模式介绍

  • 三种模式(状态) : 编辑, 底行, 命令模式
    切换到编辑模式 : 按 i, o, a
    切换到底行模式 : 按 : (冒号)
    切换到命令模式 : 按 Esc
  • 更多详细用法, 查询文档 \相关资料\文档 <Vim命令合集.docx> 和 <vi使用方法详细介绍.docx>

在这里插入图片描述

编辑模式(插入模式):对文本进行输入和修改
底行模式:退出vim或者查找、替换功能
命令模式(一般模式):通过快捷命令操作数据,打开vi默认就是命令模式

如果vim命令不能使用需要安装:
yum -y install vim-enhanced

8.2 编辑模式

命令模式按下:i、o、a进入编辑模式:
i:光标不动
o:另起一行
a:光标到下一个字符
按ESC退出编辑模式,进入命令模式

8.3 底行模式

命令模式下,按 : 或者 / 进入底行模式,可以输入命令

1)退出vim : (重点重点重点)

:q 		未编辑时退出vim
:q! 	编辑后,退出并且不保存
:wq 	编辑后,退出且保存
:x 		编译后保存

2)撤销上次操作(扩展—一般模式下)

u 			撤销上一次操作		(ctrl + z windows操作)
ctrl + r 	恢复上一次被撤销的操作 	(ctrl + y windows操作)

3)设置行号(了解) 底行模式

:set nu 	显示行号
:set nonu 	不显示行号

4)替换文本(了解)

:s/old/new/ 	用new替换old,替换当前行的第一个匹配
:s/old/new/g 	用new替换old,替换当前行的所有匹配
:%s/old/new/ 	用new替换old,替换所有行的第一个匹配
:%s/old/new/g 	用new替换old,替换整个文件的所有匹配

5)查找 (一般模式)

/文本 	搜索指定文本,高亮显示,按n显示下一个,按N显示前一个
:整数 	快捷跳转到指定行

8.4 命令模式(一般模式)

p(pause) 	将之前dd或yy的数据粘贴到光标位置
yy 			复制光标所在行
5yy 		复制光标及下面共5行
dd 			剪切当前行
5dd 		剪切光标及下面共5行

第9章 用户及组管理

9.1 useradd 添加新用户

(注意:当前用户必须有添加用户的权限)

1)基本语法:

useradd 用户名 (功能描述:添加新用户)

2)案例:

[root@linux121 ~]# useradd hadoop

9.2 passwd 设置用户密码

1)基本语法:

passwd 用户名 (功能描述:设置用户密码)

2)案例

[root@linux121 ~]# passwd hadoop

在这里插入图片描述

9.3 id 判断用户是否存在

1)基本语法:

id 用户名

2)案例:

[root@linux121 ~]#id hadoop

在这里插入图片描述

9.4 su 切换用户

1)基本语法:

su 用户名称   (功能描述:切换用户,只能获得用户的执行权限,不能获得环境变量)
su - 用户名称 (功能描述:切换到用户并获得该用户的环境变量及执行权限)

2)案例

[root@linux121 ~]#su hadoop
[root@linux121 ~]#su - hadoop

9.5 userdel 删除用户

1)基本语法:注意区别

(1)userdel 用户名 (功能描述:删除用户但保存用户主目录)
(2)userdel -r 用户名 (功能描述:用户和用户主目录,都删除)

2)案例:

(1)删除用户但保存用户主目录
[root@linux121 ~]#userdel hadoop

(2)删除用户和用户主目录,都删除
[root@linux121 ~]#userdel -r hadoop

9.6 who 查看登录用户信息

1)基本语法

(1)whoami 		(功能描述:显示自身用户名称)
(2)who am i 	(功能描述:显示登录用户的用户名)
(3)who 		(功能描述:看当前有哪些用户登录到了这本台机器上)

2)案例

[root@linux121 ~]# whoami
[root@linux121 ~]# who am i
[root@linux121 ~]# who

9.7 设置Linux普通用户具有root权限即sudo的使用

1)sudo命令
sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性 。

2)修改配置文件
修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示:

vim /etc/sudoers

## Allow root to run any commands anywhere
root ALL=(ALL) ALL
tom ALL=(ALL) ALL

3)使用tom用户登录,操作管理员命令
本质:使用临时管理员权限

#不切换root用户,也可以完成添加用户的功能
sudo useradd lisi
sudo passwd lisi

9.8 cat /etc/passwd 查看创建了哪些用户

cat /etc/passwd

9.9 用户组管理命令

每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。

9.9.1 groupadd 新增组

1)基本语法

groupadd 组名

2)案例:
添加一个hadoop组

[root@linux121 ~]#groupadd hadoop
9.9.2 groupdel 删除组

1)基本语法:

groupdel 组名

2)案例例

[root@linux121 ~]# groupdel hadoop
9.9.3 groupmod 修改组

1)基本语法:

groupmod -n 新组名 老组名

2)案例
修改hadoop组名称为hadoop1

[root@linux121 hadoop]# groupmod -n hadoop1 hadoop
9.9.4 cat /etc/group 查看创建了哪些组
cat /etc/group

9.10 usermod 修改用户

1)基本语法:

usermod -g 用户组 用户名

2)案例:
将用户hadoop加入mygroup用户组

[root@linux121 ~]#usermod -g mygroup hadoop

第10章 文件权限

Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。在Linux中我们可以使用ll或者ls –l命令来显示一个文件的属性以及文件所属的用户和组。

10.1 文件权限

在这里插入图片描述
在这里插入图片描述

权限分段:每一段代表不同的用户
属主权限:当前文件所属用户的权限,在Linux中每一个文件都有所属的用户
属组权限:当前文件的用户所在组的其它成员的权限
其它用户权限:跟文件所属用户不在同组的其它用户的权限

每一段中的内容都是一样的,分别限定:读(r=4)、写(w=2)、执行(x=1)

rwx 	7 		具备所有权限(421)
rw- 	6 		具备读写权限(420)
r-x 	5 		具备读和执行权限(401)
r-- 	4 		具备只读权限(400)
-wx 	3 		具备写和执行权限(021)
-w- 	2 		具备写权限(020)
--x 	1 		具备执行权限(001)
--- 	0 		000

问题:

1 777 什么意思?
2 644 什么意思?
3 755 什么意思?

答案

777 所属用户具有 读写执行权限, 所属同组用户具有 读写执行权限, 其他人具有 读写执行权限
644 所属用户具有 读写权限, 所属同组用户具有 读权限, 其他人具有 读权限
755 所属用户具有 读写执行权限, 所属同组用户具有 读执行权限, 其他人具有 读执行权限

10.2 文件权限管理

修改文件权限

chmod [-cfvR] [--help] [--version] mode file...

在这里插入图片描述

需求:

1 新增 /usr/tmp/1.txt 文件 且 查看 权限
2 修改权限为 777(方式一)
3 修改权限为 755(方式二)

答案

[root@itheima16 tmp]# touch /usr/tmp/1.txt
[root@itheima16 tmp]# ll
总用量 0
-rw-r--r--. 1 root root 0 7月 24 05:15 1.txt
[root@itheima16 tmp]# chmod 777 1.txt
[root@itheima16 tmp]# ll
总用量 0
-rwxrwxrwx. 1 root root 0 7月 24 05:15 1.txt
[root@itheima16 tmp]# chmod u=rwx,g=rx,o=rx 1.txt
[root@itheima16 tmp]# ll
总用量 0
-rwxr-xr-x. 1 root root 0 7月 24 05:15 1.txt

10.3 chown 改变所有者

1)基本语法:

chown 最终用户 (功能描述:改变文件或者目录的所有者)

2)案例

[root@linux121 test]# chown hadoop test1.txt
[root@linux121 test]# ls -al

10.4 chgrp 改变所属组

1)基本语法:

chgrp 最终用户组 (功能描述:改变文件或者目录的所属组)

2)案例:

[root@linux121 test]# chgrp hadoop test1.java
[root@linux121 test]# ls -al
-rwxr-xr-x. 1 root hadoop 551 4月 23 13:02 test1.java

第11章 系统管理与进程管理

11.1 磁盘信息

序号命令作用
1df -hdisk free 显示磁盘剩余空间
2du -h [目录名称]disk usage 显示目录下的目录大小

选项说明

参数含义
-h以人性化的方式显示文件大小

11.2 ps 查看系统中所有进程

进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。

1)基本语法:

ps -aux (功能描述:查看系统中所有进程)
选项含义
a显示终端上的所有进程, 包括其他用户的进程
u显示进程的详细状态
x显示没有控制终端的进程

注意:
ps -aux 和ps -ef 两者的输出结果差别不大,但展示风格不同。-aux是BSD风格,-ef是System V
风格

2)功能说明

USER:	该进程是由哪个用户产生的;
PID:	进程的ID号;
%CPU:	该进程占用CPU资源的百分比,占用越高,进程越耗费资源;
%MEM:	该进程占用物理内存的百分比,占用越高,进程越耗费资源;
VSZ:	该进程占用虚拟内存的大小,单位KB;
RSS:	该进程占用实际物理内存的大小,单位KB;
TTY:	该进程是在哪个终端中运行的。其中tty1-tty7代表本地控制台终端,tty1-tty6是本地的字符界面终端,tty7是图形终端。pts/0-255代表虚拟终端。
STAT:	进程状态。常见的状态有:R:运行、S:睡眠、T:停止状态、s:包含子进程、+:位于后台
START:	该进程的启动时间
TIME:	该进程占用CPU的运算时间,注意不是系统时间
COMMAND:产生此进程的命令名

11.3 top 查看系统健康状态

1)基本命令

top [选项]

(1)选项:

-d 秒数:指定top命令每隔几秒更新。默认是3秒。
-i:	使top不显示任何闲置或者僵死进程。
-p:	通过指定监控进程ID来仅仅监控某个进程的状态。

(2)操作选项,即在执行top命令之后,与top命令进行交互:

P: 以CPU使用率排序,默认就是此项
M: 以内存的使用率排序
N: 以PID排序
q: 退出top

(3)查询结果字段解释
在这里插入图片描述
第一行信息为任务队列信息
在这里插入图片描述
第二行为进程信息
在这里插入图片描述
第三行为CPU信息
在这里插入图片描述
第四行为物理内存信息
在这里插入图片描述
第五行为交换分区(swap)信息
在这里插入图片描述
2)案例

[root@linux121 hadoop]# top -d 1
[root@linux121 hadoop]# top -i
[root@linux121 hadoop]# top -p 2575

执行上述命令后,可以按P、M、N对查询出的进程结果进行排序

11.4 kill 终止进程

1)基本语法:

kill -9 pid进程号

选项

-9 表示强迫进程立即停止

举例:

[root@linux121 ~]# kill -9 5102

11.5 netstat 显示网络统计信息

1) netstat作用
netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况

2)安装命令

yum install net-tools

3)基本语法

选项:
在这里插入图片描述

NETSTAT [-a] [-b] [-e] [-n] [-o] [-p proto] [-r] [-s] [-v] [interval]
-a 显示所有连接和监听端口。
-e 显示以太网统计信息。它列出的项目包括传送的数据报的总字节数、错误数、删除数、数据报的数量和广播的数量
-n 以数字形式显示地址和端口
-o 显示与每个连接相关的所属进程 ID
-p proto 显示 proto 指定的协议的连接;proto 可以是下列协议之一: TCP 、UDP 、TCPv6 或 UDPv6

常用选项

netstat -e 本选项用于显示关于以太网的统计数据。
netstat -r 本选项可以显示关于路由表的信息,类似于后面所讲使用route print 命令时看到的 信息。除了显示有效路由外,还显示当前有效的连接。
netstat -a 本选项显示一个所有的有效连接信息列表,包括已建立的连接(ESTABLISHED ),也包括监听连接请求(LISTENING )的那些连接,断开连接(CLOSE_WAIT )或者处于联机等待状态的(TIME_WAIT )等
netstat -n 显示所有已建立的有效连接。

组合用法:

netstat -anp 查看这个系统目前网络状况.

查看端口22的使用情况

[root@linux121 hadoop-2.7.2]# netstat -anp | grep 22

在这里插入图片描述

第12章 软件安装

12.1 rpm 软件包管理器

12.1.1 目标
  • 通过 rpm命令 实现对软件 的安装、查询、卸载
  • RPM 是Red-Hat Package Manager(RPM软件包管理器)的缩写
  • 虽然 打上了 red-hat 的标记, 但是理念开放, 很多发行版都采用, 已经成为行业标准
12.1.2 路径
  • 第一步: rpm包 的查询命令
  • 第二步: rpm包 的 卸载
  • 第三步: rpm包 的 安装
12.1.3 实现

第一步: rpm包 的 查询命令

选项英文含义
-qquery查询
-aall所有
-iinfo信息
-llist显示所有相关文件
-ffile文件, 显示文件对应 rpm 包
  • 查询已安装的rpm列表
rpm -qa | grep XXX
rpm -qa | less
  • 查询软件包信息
rpm -qi 软件全包名
  • 查看一个rpm包中的文件安装到那里去了?
rpm -ql 软件全包名
  • 查看指定文件归属于那个软件包
rpm -qf 文件的全路径

第二步: rpm包 的 卸载

命令英文含义
rpm -e 软件包名称erase清除 卸载rpm软件包
rpm -e --nodeps 软件包名称Don’t check dependencies卸载前 跳过 依赖检查

第三步: rpm包 的 安装

命令含义
rpm -ivh rpm包的全路径安装 rpm 包
参数英文含义
-iinstall安装
-vverbose打印提示信息
-hhase显示安装进度

小结

# 1 查询
rpm -qa | grep rpm包

# 2 卸载
rpm -e rpm全包名
rpm -e --nodeps rpm全包名

# 3 安装
rpm -ivh rpm包的全路径

12.2 yum

12.2.1 yum 介绍
  • Yum (全称为 Yellow dog Updater, Modified )本质上 也是一个 软件包管理器。
  • 特点: 基于 RPM 包管理,能够从指定的服务器 自动下载、 自动安装、 自动处理依赖性关系
12.2.2 yum 原理

在这里插入图片描述

12.2.3 常用命令

注意: 必须联网

命令含义
yum listgrep 需要的软件名
yum -y install 需要的软件包下载安装
yum -y remove 需要卸载的软件包卸载
yum repolist列出设定yum源信息
yum clean all清除yum缓存信息

12.3 安装 httpd 软件

  • 安装httpd:
yum -y install httpd
  • 启动 httpd 服务
service httpd start
  • 测试
http://192.168.80.100:80
  • 问题: 发现无法访问?

    • 原因: 因为 linux 的防火墙 禁止他人 访问自己的80端口
    • 解决: 通知 防火墙放行
  • 关闭防火墙

systemctl stop firewalld 查看防火墙状态

12.4 安装 JDK

系统默认安装OpenJDK,首先需要删除OpenJDK

1、查看以前是不是安装了openjdk
如果不是root用户需要切换到root用户(su - root
命令: rpm -qa | grep java
显示如下:(有则卸载,没有就不用),注意版本可能会有些不一样,以实际操作的为准。

tzdata-java-2013g-1.el6.noarch
java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64
java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64

2、卸载openjdk:
(其中参数“tzdata-java-2013j-1.el6.noarch”为上面查看中显示的结果,粘进来就行,如果你显示的不
一样,请复制你查询到的结果)

rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.i686
rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.i686
rpm -e --nodeps tzdata-java-2013g-1.el6.noarch
-e 			erase package(uninstall) 				移除包(卸载)
--nodeps 	do not verify package dependencies 		不要验证包依赖关系

3、安装jdk
(1)切换到root用户并进入usr目录: cd /usr
(2)在usr目录下创建java文件夹: mkdir java
(3)将jdk1.8.0_141.tar.gz拷贝或上传到java目录下(也可以用工具)
(4)进入/usr/java文件夹下:cd /usr/java/
(5)修改权限,参数“jdk1.8.0_141.tar.gz”为你自己上传的jdk安装文件 chmod 755 jdk1.8.0_141.tar.gz
(6)解压: tar -zxvf jdk1.8.0_141.tar.gz
(7)配置环境变量

vi /etc/profile

添加内容:
export 主要用来设置环境变量

export JAVA_HOME=/usr/java/jdk1.8.0_141/
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:${JAVA_HOME}/bin

(8)重新编译环境变量

source /etc/profile

(9)测试

java -version

12.5 安装 tomcat

安装Tomcat

1、创建安装目录:mkdir /usr/tomcat
2、给apache-tomcat-7.0.57.tar.gz 文件权限
3、解压tomcat压缩文件: tar -zxvf apache-tomcat-7.0.57.tar.gz -C /user/tomcat
注意,这里也可以只打开tomcat所需端口:8080
4、启动tomcat:
进入tomcat的bin目录: cd /usr/tomcat/apache-tomcat-7.0.57/bin/
启动tomcat web服务器: ./startup.sh
访问: 192.168.80.100:8080
5、停止tomcat: ./shutdown.sh
6、查看tomcat日志信息:

tail -200f /usr/tomcat/apache-tomcat-7.0.57/logs/catalina.out

200表示最后显示行数
也可以用组合命令,启动并查看日志:
进入tomcat的bin目录

./startup.sh && tail -200f ../logs/catalina.out

12.6 安装mysql

  • 下面看看如何在CentOS7系统上安装 MySQL5.6.44
12.6.1 查询系统自带的mysql
[root@hadoop01 yum.repos.d]# rpm -qa | grep mysql
mysql-libs-5.1.73-8.el6_8.x86_64
12.6.2 卸载系统自带的mysql
rpm -e --nodeps mysql-libs-5.1.73-8.el6_8.x86_64
12.6.3 下载安装官网yum源
查看yum源仓库
ll /etc/yum.repos.d/

下载yum源
wget -P /usr/software http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm
  • 注意: 需要联网

在这里插入图片描述

12.6.4 安装下载好的rpm文件
cd /usr/software
rpm -ivh mysql-community-release-el6-5.noarch.rpm

在这里插入图片描述

12.6.5 安装mysql 服务器
yum -y install mysql-community-server
  • 注意: 需要联网下载, 估计需要等待十几分钟!
  • 测试是否安装成功

在这里插入图片描述

12.6.6 启动服务
service mysqld start

如果出现:serivce: command not found
安装service
yum install initscripts

在这里插入图片描述

12.6.7 修改密码

在这里插入图片描述

# 设置密码
/usr/bin/mysqladmin -u root password '123'

# 进入mysql
mysql -uroot -p123
12.6.8 问题1: 解决中文乱码

由于MySQL编码原因会导致数据库出现乱码。

解决办法:
修改MySQL数据库字符编码为UTF-8,UTF-8包含全世界所有国家需要用到的字符,是国际编码。

具体操作:

  1. 进入MySQL控制台
# 进入mysql
mysql -uroot -p123

# 查看编码集 发现不是utf8
show variables like 'character_set_%';

在这里插入图片描述

  1. 修改mysql配置文件
# 清空 mysql 配置文件内容
[root@Hadoop-NN-01 ~]# >/etc/my.cnf

# 修改mysql 软件的编码集
[root@Hadoop-NN-01 ~]# vi /etc/my.cnf

# 修改内容如下:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
  1. 重启MySQL服务
[root@Hadoop-NN-01 ~]# service mysqld restart
# 查看MySQL字符集
show variables like 'character_set_%';

在这里插入图片描述
MySQL数据库字符集编码修改完成!

12.6.9 问题2: 默认情况下 mysql服务端不允许客户端远程访问

问题: 使用客户端 远程 连接mysql报错?
在这里插入图片描述

  • 原因: 因为 用户 没有 远程访问的权限
  • 解决: 授权
# 给root授权:既可以本地访问, 也可以远程访问
grant all privileges on *.* to 'root'@'%' identified by '123' with grant option;

# 刷新权限(可选)
flush privileges;

第13章 大数据linux操作

13.1 克隆2台机器

13.1.1 克隆操作

关闭当前centos7-1
右键点击克隆

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

13.1.2 配置克隆后机器

1
网络配置文件ifcfg-ens33的ip地址
vi /etc/sysconfig/network-scripts/ifcfg-ens33
在这里插入图片描述

重启网卡服务器
systemctl restart network

检查ip地址是否更变
ip addr

2
在这里插入图片描述
hostname主机名,不要跟源克隆机一致
查看主机名命令 hostnamectl
更改主机名 hostnamectl set-hostname xxx
重启机器 reboot

13.2 关闭三台虚拟机防火墙

1 查看防火墙状态
systemctl status firewalld

2 设置防火墙停用状态
systemctl stop firewalld

3 设置防火墙功能失效,开机自动关闭
systemctl disable firewalld

在这里插入图片描述

13.3 三台机器关闭selinux

安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。

关闭安全策略否则SELinux服务开启后导致SSH连接异常。

修改文件 vi /etc/selinux/config

在这里插入图片描述

13.4 三台机器免密登录

13.4.1 ssh协议[安全外壳协议]

SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH
为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全
性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。

SSH提供两种级别的安全验证:

第一种级别(基于口令的安全验证)
只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。

第二种级别(基于秘钥的安全验证)
需要依靠密钥,也就是你必须为自己创建一对秘钥,并把公用秘钥放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的秘钥进行安全验证。

13.4.2 ssh基于密码远程登录
命令含义
ssh ip地址登录到远程指定的机器上(需要输入用户名和密码)

在这里插入图片描述

可以通过主机名登录
需要配置主机名和ip地址的映射关系
分别的在centos7-1 centos7-2 centos7-3中配置
vi /etc/hosts

在这里插入图片描述

接下来就可以是用主机名登录了

在这里插入图片描述

13.4.3 ssh基于秘钥实现免密登录

在这里插入图片描述

前提:配置hostname与IP映射
第一步:在三台机器执行以下命令,生成公钥与私钥
第二步:将centos7-2和centos7-3的公钥拷贝到centos7-1
第三步:再将centos7-1的公钥分发给centos7-2和centos7-3

第一步: 在centos7-1和centos7-2和centos7-3上面都要执行,产生公钥和私钥
ssh-keygen -t rsa 

第二步:在centos7-1 ,centos7-2和centos7-3上执行: 将公钥拷贝到centos7-1上面去
ssh-copy-id centos7-1 

第三步:
scp authorized_keys centos7-2:$PWD
scp authorized_keys centos7-3:$PWD

使用ssh完成免密登录即可 (ssh centos7-2)

13.5 三台机器时钟同步

13.5.1 原理

内网的所有服务器都和时钟服务器进行同步时间
在这里插入图片描述

13.5.2 如何同步
  1. 查看本机当前时间
    date

  2. 设置本机当前时间
    date -s "2018-08-17 20:08:09"

  3. 通过命名和时钟服务器同步时间: 网络计时协议(NTP) : net time protocal
    ntpdate us.pool.ntp.org

  4. 编辑定时任务
    crontab -e
    1 定时任务内容如下 每隔1分钟执行指令一次 */1 * * * * /usr/sbin/ntpdate us.pool.ntp.org;
    Crontab使用 格式说明

    # Example of job definition:
    # .---------------- minute (0 - 59)
    # | .------------- hour (0 - 23)
    # | | .---------- day of month (1 - 31)
    # | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
    # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR
    sun,mon,tue,wed,thu,fri,sat
    # | | | | |
    # * * * * * user-name command to be executed
    

    使用实例

    实例1:每1分钟执行一次command
    命令:* * * * * command
    实例2:每小时的第3和第15分钟执行
    命令:3,15 * * * * command
    实例3:在上午8点到11点的第3和第15分钟执行
    命令:3,15 8-11 * * * command
    实例4:每隔两天的上午8点到11点的第3和第15分钟执行
    命令:3,15 8-11 */2 * * command
    实例5:每个星期一的上午8点到11点的第3和第15分钟执行
    命令:3,15 8-11 * * 1 command
    

    Crantab在线生成 https://cron.qqe2.com/

第14章 Shell编程

14.1 简介

Linux中的shell脚本是一个特殊的应用程序,它介于操作系统和系统内核之间,充当一个命令解释器的角色。负责接收用户输入的操作指令并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。 同时它又是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。

Linux 的 Shell 解释器 种类众多,一个系统可以存在多个 shell,可以通过 cat /etc/shells 命令查看系统中安装的shell解释器。

Bash 由于易用和免费,在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。

14.2 shell 解释器

java 需要 虚拟机解释器, 同理 shell脚本也需要 解析器

[root@node04 shells]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh

14.3 快速入门

14.3.1 编写脚本

新建 /usr/shell/hello.sh 文件

#!/bin/bash
echo 'hello lagou'

!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
echo 命令用于向窗口输出文本。

14.3.2 执行 shell 脚本

执行方式1

[root@centos7-1 shell]# /bin/sh hello.sh
hello lagou
[root@centos7-1 shell]# /bin/bash hello.sh
hello lagou

在这里插入图片描述
问题: bash 和 sh 是什么关系?
答: sh 是 bash 的 快捷方式

执行方式2

[root@node04 shells]# bash hello.sh
hello world
[root@node04 shells]# sh hello.sh
hello world

1.查看环境变量path:
echo $PATH
2.添加执行权限
chmod +x 文件名称

14.4 变量

在shell脚本中, 定义变量时,变量名不加美元符号($),如:
username="tom"

注意 : 变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。

同时,变量名的命名须遵循如下规则:

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)。

有效的 Shell 变量名示例如下:

JACK
LD_LIBRARY_PATH
_demo
var2

无效的变量命名:

?var=123
user*name=runoob

使用语句给变量赋值
举例:

for file in`ls /etc`

for file in $(ls /etc)

以上语句是将/etc下目录的文件名循环出来

使用变量

使用一个定义过的变量,只要在变量名前面加美元符号即可,如:

your_name="tom"
echo $your_name
echo ${your_name}

变量名外面加花括号是可选的, 添加花括号是帮助解释器识别变量边界
举例:

habby="i like ${course}script"
habby="i like $coursescript"

只读变量
使用readyonly命令可以将变量定义为只读变量, 只读变量的值不能被改变

readonly 变量名

举例:

username=tom
readonly username
username=jack 报错 /bin/sh: NAME: This variable is read only.

删除变量

使用unset命令可以删除变量

unset variable_name

注意:unset命令不能删除只读变量

14.5 字符串

字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。

单引号

skill='java'
str='I am goot at $skill'
echo $str

输出结果为:

I am goot at $skill

单引号字符串的限制:

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行)

双引号

skill='java'
str="I am goot at $skill"
echo $str

输出结果为:

I am goot at java

双引号的优点:

  • 双引号里可以有变量
  • 双引号里可以出现转义字符

获取字符串长度

skill='java'
echo ${skill} # 输出结果: java
echo ${#skill} # 输出结果: 4

提取子字符串

一下实例从字符串第2个字符开始截取2个字符

str="i like hadoop"
echo ${str:2} #substring(2)
echo ${str:2:2} #substring(2,2)

查找子字符串

查找字符o在那个位置(最先出现的字符)

str="hadoop is so easy"
echo `expr index "$str" o`

找的时候是从1开始查找

14.6 运算符

Shell 和其他编程一样,支持包括:算术、关系、布尔、字符串等运算符。原生 bash 不支持 简单的数学运算,但是可以通过其他命令来实现,例如expr。expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

例如,两个数相加

val=`expr 1 + 2`
echo $val

注意:

表达式和运算符之间要有空格,例如 1+2 是不对的,必须写成 1 + 2。

完整的表达式要被 ` 包含,注意不是单引号,在 Esc 键下边。

下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20
14.6.1 算数运算符
运算符说明举例
+加法`expr $a + $b` 结果为 30
-减法`expr $a - $b` 结果为 -10
*乘法`expr $a * $b` 结果为 200
/除法`expr $b / $a` 结果为2
%取余`expr $b % $a` 结果为0
=赋值a=$b 将把变量 b 的值赋值给 a
==相等. 用于比较两个数字, 相同则返回 true.[ $a == $b ] 返回 false
!=不相等, 用于比较两个数字, 不相同则返回 true.[ $a != $b ] 返回 true

注意:条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,
必须写成 [ $a == $b ]

案例

#!/bin/bash
a=4
b=20

#加法运算
each expr $a + $b

#减法运算
echo expr $a - $b

#乘法运算,注意*号前面需要反斜杠
echo expr $a \* $b

#除法运算
echo $a / $b
此外,还可以通过(())、$(())、$[]进行算术运算。
((a++))
echo "a = $a"
c=$((a + b))
d=$[a + b]
echo "c = $c"
echo "d = $d"
14.6.2 关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:

运算符说明英文举例
-eq检测两个数是否相等, 相等返回 trueequal[ $a -eq $b ] 返回 false
-ne检测两个数是否不相等, 不相等返回 truenot equal[ $a -ne $b ] 返回 true
-gt检测左边的数是否大于右边的, 如果是, 则返回truegreater than[ $a -gt $b ] 返回 false
-lt检测左边的数是否小于右边的, 如果是, 则返回trueless than[ $a -lt $b ] 返回 true
-ge检测左边的数是否大于等于右边的, 如果是, 则返回truegreater than or equal to[ $a -ge $b ] 返回 false
-le检测左边的数是否小于等于右边的, 如果是, 则返回trueless than or equal to[ $a -le $b ] 返回 true

14.7 流程控制

14.7.1 if 语句
  • if语句格式

    if condition
    then
    	command1
    	command2
    	...
    	commandN
    fi
    
  • if.else语句

    if condition
    then
    	command1
    	command2
    	...
    	commandN
    else
    	command
    fi
    
  • if…elif…else

    if condition1
    then
    	command1
    elif condition2
    then
    	command2
    else
    	commandN
    fi
    

案例

[root@hadoop01 export]# cat if_test.sh
#!/bin/bash
a=20
b=10
# 需求1: 判断 a 是否 100
if [ $a > 100 ]; then
echo "$a 大于 100"
fi

# 需求2: 判断 a 是否等于 b
if [ $a -eq $b ]; then
echo "$a 等于 $b"
else
echo "$a 不等于 $b"
fi

# 需求3: 判断 a 与 b 比较
if [ $a -lt $b ]; then
echo "$a 小于 $b"
elif [ $a -eq $b ]; then
echo "$a 等于 $b"
else
echo "$a 大于 $b"
fi

# 需求4: 判断 (a + 10) 和 (b * b) 比较大小
if test $[ a + 10 ] -gt $[ b * b ]; then
echo "(a+10) 大于 (b * b)"
else
echo "(a+10) 小于或等于 (b*b)"
fi
14.7.2 for 循环

格式

for variable in (list); do
command
command
...
done

练习

# 需求1: 遍历 1~5
# 需求2: 遍历 1~100
# 需求3: 遍历 1~100之间的奇数
# 需求4: 遍历 根目录 下的内容
[root@hadoop01 export]# cat for_test.sh
#!/bin/bash
# 需求1: 遍历 1~5
for i in 1 2 3 4 5; do
echo $i;
done

# 需求2: 遍历 1~100
for i in {1..100}; do
echo $i
done

# 需求3: 遍历 1~100之间的奇数
for i in {1..100..2}; do
echo $i
done

# 需求4: 遍历 根目录 下的内容
for f in `ls /`; do
echo $f
done
14.7.3 while 语句

while循环用于不断执行一系列命令,也用于从输入文件中读取数据;命令通常为测试条件。其格式为

while condition; do
	command
done

需求: 计算 1~100 的和

#!/bin/bash
sum=0
i=1
while [ $i -le 100 ]; do
	sum=$[ sum + i]
	i=$[ i + 1 ]
done
echo $sum

运行脚本,输出:

5050
14.7.4 无限循环
for ((;;))
do
	command
done


while true
do
	command
done

14.8 case

Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下:

casein
模式1)
command1
command2
...
commandN
;;

模式2)
command1
command2
...
commandN
;;
esac

case工作方式如上所示。取值后面必须为单词in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。

取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。

下面的脚本提示输入1到4,与每一种模式进行匹配:

echo '输入 1 到 4 之间的数字:'
read aNum
case $aNum in
	1) echo '你选择了 1'
	;;
	2) echo '你选择了 2'
	;;
	3) echo '你选择了 3'
	;;
	4) echo '你选择了 4'
	;;
	*) echo '你没有输入 1 到 4 之间的数字'
	;;
esac

输入不同的内容,会有不同的结果,例如:

输入 14 之间的数字:
你输入的数字为:
3
你选择了 3

14.9 跳出循环

在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,Shell使用两个命令来实现该功能:
break和continue。

14.9.1 break命令

break命令允许跳出所有循环(终止执行后面的所有循环)。
需求: 执行死循环 每隔1秒打印当前时间, 执行10次停止

#!/bin/bash
# 需求: 执行死循环 每隔1秒打印当前时间, 执行10次停止
i=0;
while true; do
	sleep 1
	echo $i `date +"%Y-%m-%d %H:%M:%S"`
	i=$[ i + 1]
	if [ $i -eq 10 ]; then
		break
	fi
done
14.9.2 continue

continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。

需求: 打印 1~30, 注意 跳过3的倍数

#!/bin/bash
# 需求: 打印 1~30, 注意 跳过3的倍数
for i in {1..30}; do
	if test $[ i % 3 ] -eq 0; then
		continue
	fi
	echo $i
done

14.10 函数使用

14.10.1 函数的快速入门

格式

[ function ] funname()
{
	action;
	[return int;]
}
  • 可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
  • 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。
    return后跟数值n(0-255)

快速入门

#!/bin/bash
demoFun(){
	echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demoFun
echo "-----函数执行完毕-----"
14.10.2 传递参数给函数

在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…

带参数的函数示例:

#!/bin/bash
funWithParam(){
	echo "第一个参数为 $1 !"
	echo "第二个参数为 $2 !"
	echo "第十个参数为 $10 !"
	echo "第十个参数为 ${10} !"
	echo "第十一个参数为 ${11} !"
	echo "参数总数有 $# 个!"
	echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

输出结果:

第一个参数为 1 !
第二个参数为 2 !
第十个参数为 10 !
第十个参数为 34 !
第十一个参数为 73 !
参数总数有 11!
作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !

14.11 shell编程案例

14.11.1 统计目录文件

编写脚本/root/bin/sumfile.sh,统计/etc,/var,/usr目录中共有多少个一级子目录和文件

#!/bin/bash
##写一个脚本/root/bin/sumfile.sh,统计/etc, /var, /usr目录中共有多少个一级子目录和文件
num1=$(ls -l /etc | wc -l)
num2=$(ls -l /var | wc -l)
num3=$(ls -l /usr | wc -l)
let Num=$num1+$num2+$num3
echo $Num
14.11.2 猜数字小游戏

脚本生成一个 100 以内的随机数字,提示用户才数字,根据用户的输入,提示用户是否猜对,猜大或猜小继续循环猜,猜对跳出循环。

RANDOM 为系统自动的系统变量,值为 0-32767 的随机数

#!/bin/bash
#猜数字小游戏
num=$[RANDOM%100+1]
while :
do
	read -p "计算机生成一个1-100的随机数" cat
	if [ $cat -eq $num ];then
		echo "猜对了"
		break
	elif [ $cat -le $num ];then
		echo "小了"
	else
		echo "大了"
	fi
done
14.11.3 使用 case、 while 和 read 进行查看磁盘信息

题目:编写一个交互脚本,执行脚本时候键盘输入对应的参数,脚本反馈对应信息,当输入为“exit”时候脚本退出。脚本采用 read 捕捉键盘输入信息,然后使用 case 进行条件选择并执行命令,最后使用while 对 case 语句进行循环。

#!/bin/bash
#EOF (End Of File)表示文本结束符。注意: EOF必须顶行写,前面不能用制表符或者空格。
#cat << EOF的意思是以EOF输入字符为标准输入结束,就是当你输入cat << EOF的时候,你可以随意输入
字符,但是当输入EOF#的时候就结束了
cat << EOF
D|d 显示硬盘信息
M|m 显示内存信息
S|s 显示交换分区信息
EOF

read -p "请输入以上对应参数:" CANSHU
while [ $CANSHU != "exit" ]; do
case $CANSHU in
d|D)
	df -h
	;;
m|M)
	free -m | grep Mem
	;;
s|S)
	free -m | grep Swap
	;;
*)
echo "Ukown"
;;
esac
read -p "请再次输入以上对应参数:" CANSHU
done
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值