学习目标
掌握Linux用户、权限管理 掌握Linux常用系统管理命令 重点掌握集群服务器环境搭建 掌握Centos上MySQL、JDK安装配置 了解shell编程
内容大纲
#一、Linux用户与权限 用户、用户组管理 文件权限管理 su、sudo #二、Linux常用系统信息查看 时间、日期 进程 磁盘使用情况、内存使用情况 #三、大数据集群环境搭建(重中之重) 集群、分布式---->多台机器 虚拟机克隆 服务器基础环境准备 1、防火墙关闭 2、主机名hostname修改 3、hosts主机名 IP映射 4、ssh免密登录 5、扩展:跳板机、堡垒机 6、集群时间同步 7、scp 跨集群复制文件 #四、Linux软件安装 rpm包管理 yum安装软件 #五、软件安装 JDK MySQL # 六、了解shell编程
01_Linux用户与权限 用户与组概念、权限概念
1.1 用户、用户组
1)用户 user
(1)linux上可以创建不同的用户 不同用户具有不同的权限
(2)权限最高的用户叫做root 超级管理员用户
(3)可以通过root去管理其他用户及权限
2)用户组 usergroup
多个用户组成一组 同一组的用户具有相同的权限
3)一个文件归属可以分为3类
(1)所属用户user
(2)所属用户组group
(3)其他用户组other
1.2 文件权限
(1)读read r
(2)写write w
(3)执行execute x
1.3 权限的分配和管理
1)在linux上对应文件文件夹,划分3个归属
(1)文件的拥有者 user
(2)拥有者所在的用户组 group
(3)其他用户组 others
2)如何去查看权限 ls -l
[root@node1 linux02]# ll
total 8
-rw-r--r--. 1 root root 47 May 18 11:23 1.txt
-rw-r--r-- 就是权限位
第一位 -文件 d文件夹 l链接
后面每3位一组
rw- u 读写
r-- g 读
r-- o 读
02_Linux用户与权限--用户与组的管理
(1)必须是root用户才可以进行管理。
#1、增加一个新的用户组
groupadd 选项 用户组
可以使用的选项有:
-g GID 指定新用户组的组标识号(GID)。
# groupadd group1
此命令向系统中增加了一个新组group1,新组的组标识号是在当前已有的最大组标识号的基础上加1。
# groupadd -g 101 group2
此命令向系统中增加了一个新组group2,同时指定新组的组标识号是101。
#2、查看当前系统已有组信息
cat /etc/group
itcast:x:1001:lisi,wangwu
itcast组名
x 密码口号 一般都没有密码
1001 groupID gid 组编号
lisi,wangwu 归属该组的用户
#3、删除组
groupdel 组名
#4、修改文件归属的组
chgrp 组名 文件/目录名 针对文件夹加上-R可以实现递归修改
#1、创建用户
useradd 选项 新建用户名
-g 指定用户所属的群组。值可以是组名也可以是GID
-G 指定用户所属的附加群组。
#2、设置密码
[root@node1 linux02]# passwd 用户名
Changing password for user allen.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
#3、删除用户
userdel -r 用户名
此命令删除用户sam在系统文件中(主要是/etc/passwd, /etc/shadow, /etc/group等)的记录,同时删除用户的主目录。
#4、查看用户信息
cat /etc/passwd | grep 用户名
#5、修改文件所属的用户
chown allen 1.txt 如果是文件夹及其下面的所有要修改 加上-R参数
(2)linux上root用户和非root用户区别
命令提示符不同: root# 普通用户$
home目录不同:
[root@node1 ~]# pwd
/root
[allen@node1 ~]$ pwd
/home/allen
03_Linux用户与权限 su、sudo权限
3.1 su命令:用于用户之间的切换
# su 用户
[allen@node1 ~]$ ll /root
ls: cannot open directory /root: Permission denied
[allen@node1 ~]$ su root #普通用户切换成为root需要输入root密码
Password:
[root@node1 linux02]# su allen #root用户切换成为普通用户 不需要密码
[allen@node1 linux02]$
[allen@node1 linux02]$ exit #退出
exit
#弊端:虽然通过切换可以具有root权限,但是root密码已经泄露了 不安全。
#能不能实现一种 让普通用户临时具有root权限,但是又不泄露密码
3.2 sudo
-
功能:给普通用户临时授予root权限。
-
注意:能够分配sudo的只有root。
-
sudo的配置命令 visudo
-
sudo具体使用
-
step1:使用root用户编辑sudo配置文件
[root@node1 ~]# visudo ## Allow root to run any commands anywhere root ALL=(ALL) ALL allen ALL=(ALL) ALL allen ALL=(ALL) /usr/bin/ls #配置只允许执行指定的命令
-
step2:普通用户执行命令之前需要添加sudo关键字 申请sudo权限校验
[allen@node1 ~]$ ls /root ls: cannot open directory /root: Permission denied [allen@node1 ~]$ sudo ls /root We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for allen: #这里需要输入allen普通用户的密码 linux02 [allen@node1 ~]$ sudo ls /root #密码和sudo校验成功 获取一个为期5分钟的免密操作 linux02
-
04_Linux用户与权限 权限相关管理命令
4.1 修改文件的权限
核心的命令 chmod 权限 文件|文件夹 (针对文件夹-R 递归修改)
4.2 方式1:老百姓喜闻乐见的形式 数字
read----->r 4 write---->w 2 execute-->x 1 没有权限 0 chmod 777 -R 文件|文件夹
4.3 方式2: 字母 +-形式
user->u group->g others->o all->a + 增加权限 - 减少权限 chmod o-x 1.txt chmod a-w 1.txt
4.4 方式3: 等号赋值形式
chmod u=rwx 1.txt
05_Linux系统信息查看 时间、内存磁盘、进程
5.1 时间、日期
[root@node1 linux02]# date
Tue May 18 14:44:13 CST 2021
[root@node1 linux02]# date +"%Y-%m-%d %H:%M:%S"
2021-05-18 14:44:53
[root@node1 linux02]# cal
May 2021
Su Mo Tu We Th Fr Sa
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
#关于时间日期的同步 同步网络授时
#大数据都是集群环境 基本要求:集群的时间同步问题
5.2 查看磁盘、内存信息(常用)
df -h #disk free 显示磁盘剩余空间
[root@node1 linux02]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 12M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 38G 1.5G 36G 5% / #重点关注这一行
/dev/sda1 1014M 152M 863M 15% /boot
/dev/mapper/centos-home 19G 33M 19G 1% /home
tmpfs 378M 0 378M 0% /run/user/0
tmpfs 378M 0 378M 0% /run/user/1000
#内存使用情况
[root@node1 linux02]# free -h
total used free shared buff/cache available
Mem: 3.7G 257M 3.0G 11M 467M 3.2G
Swap: 3.9G 0B 3.9G
5.3 进程信息
#在安装了jdk的情况下 有一个命令专门用于查看本机运行的java进程。
jps
[root@node1 ~]# jps #必须在安装好jdk之后可以使用
-bash: jps: command not found
#查看本机运行的所有进程
ps -ef | grep 进程名
#通常根据查询的进程号 结合kill -9 进程号 杀死进程
【附】linux完整命令参考资料
06_大数据集群环境搭建 分布式与集群概念初识
1)分布式、集群
分布式:多台不同的服务器中部署不同的服务模块,通过远程调用协同工作,对外提供服务。
集群:多台不同的服务器中部署相同应用或服务模块,构成一个集群,通过负载均衡设备对外提供服务。
2)共同点:多台机器。 相对的概念叫做单机系统。
3)注意:在口语中经常混淆分布式和集群的概念的。都是汲取两者的共同点。
比如:搭建一个分布式hadoop集群。
背后意思:不要搭建单机版本的 搭建多台机器版本的。
4)集群架构
(1)主从架构
主角色:master leader 大哥
从角色:slave follower 小弟
主从角色各司其职,需要共同配合对外提供服务。
常见的是一主多从 也就是一个大哥带着一群小弟共同干活。
(2)主备架构
主角色:active
备角色:standby
主备架构主要是解决单点故障问题的 保证业务的持续可用。
常见的是一主一备 也可以一主多备。
07_大数据集群环境搭建 虚拟机克隆、主机名和IP修改
7.1 虚拟机克隆
(1)前提:是虚拟机处于关闭状态。
(2)分类:链接克隆 、完整克隆
链接克隆:表层是互相独立 底层存储是交织在一起;
完整克隆:完全互相独立的两台虚拟机
(3)修改克隆机器属性。
完整克隆意味着两台机器一模一样。在局域网网络中,有些属性是决定不能一样的。
比如:IP、MAC、主机名hostname
(4)3台虚拟机硬件分配 16G
node1 2*2cpu 4G内存
node2 1*1cpu 2G内存
node3 1*1cpu 2G内存
7.2 修改IP、主机名
(1)命令修改 临时生效 重启无效
(2)修改底层配置文件 永久生效 重启才能生效。
vim /etc/hostname
node2.itcast.cn
#修改IP
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet" #网卡类型 以太网
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none" #ip等信息是如何决定的? dhcp动态分配、 static|node 手动静态分配
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33" #网卡名称
UUID="74c3b442-480d-4885-9ffd-e9f0087c9cf7"
DEVICE="ens33"
ONBOOT="yes" #是否开机启动网卡服务
IPADDR="192.168.88.151" #IP地址
PREFIX="24" #子网掩码 等效: NETMASK=255.255.255.0
GATEWAY="192.168.88.2" #网关服务
DNS1="192.168.88.2" #网关DNS解析
DOMAIN="114.114.114.114" #公网DNS解析 114.114.114.114 谷歌:8.8.8.8 阿里百度DNS
IPV6_PRIVACY="no
#修改主机名hostname
node2.itcast.cn
7.3 重启linxu系统 reboot
08_大数据集群环境搭建 hosts映射修改
8.1 背景
在网络中,很少直接通过IP访问机器,原因难记。
通常使用主机名或者域名访问。
此时就会涉及到主机名域名和IP之间的解析
8.2 实现
本地hosts文件 进行本地查找解析
localhost 127.0.0.1
寻找DNS服务器 域名解析服务
8.3 配置本地hosts文件实现
(1)linux上
vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.88.151 node1.itcast.cn node1
192.168.88.152 node2.itcast.cn node2
192.168.88.153 node3.itcast.cn node3
(2)windows上
C:\Windows\System32\drivers\etc\hosts
192.168.88.151 node1.itcast.cn node1
192.168.88.152 node2.itcast.cn node2
192.168.88.153 node3.itcast.cn node3
09_大数据集群环境搭建 防火墙关闭
(1)firewalld
#查看防火墙状态
systemctl status firewalld
#关闭防火墙
systemctl stop firewalld
#关闭防火墙开机自启动
systemctl disable firewalld
#centos服务开启关闭命令
centos6:(某些可以在centos7下使用)
service 服务名 start|stop|status|restart
chkconfig on|off 服务名
centos7:
systemctl start|stop|status|restart 服务名
systemctl disable|enable 服务名 #开机自启动 关闭自启
(2)selinux
vim /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
(3)需要重启生效
10_大数据集群环境搭建 集群时间同步
1)背景:分布式软件主从角色之间通常基于心跳时间差来判断角色工作是否正常。
2)国家授时中心 北京时间
授时服务器 国家级 企业级 院校级
3)linux上如何同步时间
(1)ntp 网络时间协议 实现基于网络授时同步时间。
(2)date
查看当前的系统时间 也可以手动指定设置时间 不精准
[root@node1 ~]# date
Thu May 20 14:50:30 CST 2021
(3)ntpdate
#ntpdate 授时服务器
ntpdate ntp5.aliyun.com
[root@node1 ~]# ntpdate ntp5.aliyun.com
20 May 14:53:07 ntpdate[2187]: step time server 203.107.6.88 offset -1.354309 sec
#企业中运维往往不喜欢ntpdate 原因是这个命令同步时间是立即的。不是平滑过渡的。
(4)ntpd软件
通过配置 平滑的和授时服务器进行时间的同步
11_大数据集群环境搭建--ssh免密登录
(1)背景
#在进行集群操作的时候 需要从一台机器ssh登录到其他机器进行操作 默认情况下需要密码
[root@node1 ~]# ssh node2
The authenticity of host 'node2 (192.168.227.152)' can't be established.
ECDSA key fingerprint is SHA256:5d9A04L+QfYuW7X1J44cKNbyUtuwPkhg+//0OfEczHI.
ECDSA key fingerprint is MD5:74:f0:65:22:af:fd:65:af:ff:91:37:83:3f:ef:ac:81.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'node2,192.168.227.152' (ECDSA) to the list of known hosts.
root@node2's password:
Last login: Thu May 20 11:48:37 2021 from 192.168.227.1
[root@node2 ~]# exit
logout
Connection to node2 closed.
(2)需求:能否实现免密ssh登录。
(3)技术:SSH方式2:免密登录功能。 原理见课堂画图
(4)实现
#实现node1----->node2
#step1
在node1生成公钥私钥
ssh-keygen 一顿回车 在当前用户的home下生成公钥私钥 隐藏文件
[root@node1 .ssh]# pwd
/root/.ssh
[root@node1 .ssh]# ll
total 12
-rw------- 1 root root 1675 May 20 11:59 id_rsa
-rw-r--r-- 1 root root 402 May 20 11:59 id_rsa.pub
-rw-r--r-- 1 root root 183 May 20 11:50 known_hosts
#step2
copy公钥给node2
ssh-copy-id node2
注意第一次需要密码
#step3
[root@node1 .ssh]# ssh node2
Last login: Thu May 20 12:03:30 2021 from node1.itcast.cn
[root@node2 ~]# exit
logout
Connection to node2 closed.
12_大数据集群环境搭建 scp远程拷贝
(1)背景:linux上copy文件 cp
(2)命令:scp 基于ssh协议跨网络cp动作
(3)注意事项,没有配置ssh免密登录也可以进行scp远程复制 只不过在复制的时候需要输入密码。
(4)栗子
#本地copy其他机器
scp itcast.txt root@node2:/root/
scp -r linux02/ root@node2:$PWD #copy文件夹 -r参数 $PWD copy至和本机相同当前路径
#为什么不需要输入密码
因为配置了机器之间的免密登录 如果没有配置 scp的时候就需要输入密码
#copy其他机器文件到本地
scp root@node2:/root/itcast.txt ./
13_Linux软件安装 rpm包管理器与常用命令
13.1 rpm包管理器
(1)指的是RH系列的包管理器(Red-Hat Package Manager),也是RH安装的软件包后缀名。当下已经扩大了行业标准。
(2)RPM指的是使用rpm命令进行软件的查看、安装、卸载。
(3)弊端
提前下载rpm包,手动安装
自己解决包之间的依赖
13.2 rpm常用命令
#查询
[root@node1 ~]# rpm -qa | grep ssh
libssh2-1.8.0-3.el7.x86_64
openssh-clients-7.4p1-21.el7.x86_64
openssh-7.4p1-21.el7.x86_64
openssh-server-7.4p1-21.el7.x86_64
[root@node1 ~]# rpm -qi openssh-clients-7.4p1-21.el7.x86_64
Name : openssh-clients
Version : 7.4p1
Release : 21.el7
Architecture: x86_64
Install Date: Mon 17 May 2021 11:37:29 AM CST
Group : Applications/Internet
Size : 2643176
License : BSD
Signature : RSA/SHA256, Fri 23 Aug 2019 05:37:26 AM CST, Key ID 24c6a8a7f4a80eb5
Source RPM : openssh-7.4p1-21.el7.src.rpm
Build Date : Fri 09 Aug 2019 09:40:49 AM CST
Build Host : x86-01.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://www.openssh.com/portable.html
Summary : An open source SSH client applications
Description :
OpenSSH is a free version of SSH (Secure SHell), a program for logging
into and executing commands on a remote machine. This package includes
the clients necessary to make encrypted connections to SSH servers.
#rpm安装软件
rpm -ivh rpm 包的全路径
#rpm卸载软件 注意 通常采用忽略依赖的方式进行卸载
rpm -e --nodeps 软件包名称
因为在卸载的时候 默认会将软件连同其依赖一起卸载 为了避免影响其他软件的正常使用 通常建议使用--nodeps参数忽略依赖的存在 只卸载程序自己
14_Linux软件安装 MySQL的rpm安装详解
(1)学习过程中软件安装目录规范
/export/server #软件安装目录
/export/software #安装包的目录
/export/data #软件运行数据保存的目录
/export/logs #软件运行日志
mkdir -p /export/server
mkdir -p /export/software
mkdir -p /export/data
mkdir -p /export/logs
【注】友情提示:MySQL只需要安装在node1服务器即可。
(2)卸载Centos7自带的mariadb
[root@node3 ~]# rpm -qa|grep mariadb
mariadb-libs-5.5.64-1.el7.x86_64
[root@node3 ~]# rpm -e mariadb-libs-5.5.64-1.el7.x86_64 --nodeps
[root@node3 ~]# rpm -qa|grep mariadb
[root@node3 ~]#
(3)安装mysql
mkdir /export/software/mysql
#上传mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar 到上述文件夹下 解压
tar xvf mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar
#执行安装依赖
yum -y install libaio
[root@node3 mysql]# rpm -ivh mysql-community-common-5.7.29-1.el7.x86_64.rpm mysql-community-libs-5.7.29-1.el7.x86_64.rpm mysql-community-client-5.7.29-1.el7.x86_64.rpm mysql-community-server-5.7.29-1.el7.x86_64.rpm
warning: mysql-community-common-5.7.29-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:mysql-community-common-5.7.29-1.e################################# [ 25%]
2:mysql-community-libs-5.7.29-1.el7################################# [ 50%]
3:mysql-community-client-5.7.29-1.e################################# [ 75%]
4:mysql-community-server-5.7.29-1.e################ ( 49%)
(4)mysql初始化设置
#初始化
mysqld --initialize
#更改所属组
chown mysql:mysql /var/lib/mysql -R
#启动mysql
systemctl start mysqld.service
#查看生成的临时root密码
cat /var/log/mysqld.log
[Note] A temporary password is generated for root@localhost: o+TU+KDOm004
(5)修改root密码 授权远程访问 设置开机自启动
[root@node2 ~]# mysql -u root -p
Enter password: #这里输入在日志中生成的临时密码
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.29
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
#更新root密码 设置为hadoop
mysql> alter user user() identified by "hadoop";
Query OK, 0 rows affected (0.00 sec)
#授权
mysql> use mysql;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'hadoop' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
#mysql的启动和关闭 状态查看 (这几个命令必须记住)
systemctl stop mysqld
systemctl status mysqld
systemctl start mysqld
#建议设置为开机自启动服务
[root@node2 ~]# systemctl enable mysqld
Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service.
#查看是否已经设置自启动成功
[root@node2 ~]# systemctl list-unit-files | grep mysqld
mysqld.service enabled
(6)Centos7 干净卸载mysql 5.7
#关闭mysql服务
systemctl stop mysqld.service
#查找安装mysql的rpm包
[root@node3 ~]# rpm -qa | grep -i mysql
mysql-community-libs-5.7.29-1.el7.x86_64
mysql-community-common-5.7.29-1.el7.x86_64
mysql-community-client-5.7.29-1.el7.x86_64
mysql-community-server-5.7.29-1.el7.x86_64
#卸载
[root@node3 ~]# yum remove mysql-community-libs-5.7.29-1.el7.x86_64 mysql-community-common-5.7.29-1.el7.x86_64 mysql-community-client-5.7.29-1.el7.x86_64 mysql-community-server-5.7.29-1.el7.x86_64
#查看是否卸载干净
rpm -qa | grep -i mysql
#查找mysql相关目录 删除
[root@node1 ~]# find / -name mysql
/var/lib/mysql
/var/lib/mysql/mysql
/usr/share/mysql
[root@node1 ~]# rm -rf /var/lib/mysql
[root@node1 ~]# rm -rf /var/lib/mysql/mysql
[root@node1 ~]# rm -rf /usr/share/mysql
#删除默认配置 日志
rm -rf /etc/my.cnf
rm -rf /var/log/mysqld.log
15_Linux软件安装--yum包管理器
15.1 介绍
Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
15.2 特点
(1)自动下载rpm包 进行安装 前提是联网 不联网就凉凉
(2)解决包之间的依赖关系
15.3 原理
#yum之所以强大原因在于有yum源。里面有很多rpm包和包之间的依赖。
yum源分为网络yum源和本地yum源。
#其中网络yum源在centos默认集成了镜像地址 只要联网就可以自动寻找到可用的yum源。 前提联网
#也可以自己搭建本地yum源。实现从本地下载安装。
15.4 命令
#列出当前机器可用的yum源信息
yum repolist all
#清楚yum源缓存信息
yum clean all
#查找软件
yum list | grep 软件包名称
#yum安装软件 -y表示自动确认 否则在安装的时候需要手动输入y确认下载安装
yum install -y xx软件名
yum install -y mysql-*
#yum卸载软件
yum -y remove 要卸载的软件包名
16:Linux软件安装 JDK的安装、环境变量配置
(1)简单:解压即可使用 但是通常配置环境变量,以便于在各个路径下之间使用java。
(2)要求:JDK1.8版本。
(3)步骤
#上传安装包到/export/server下
jdk-8u241-linux-x64.tar.gz
#解压到当前目录
tar -zxvf jdk-8u241-linux-x64.tar.gz
#删除红色安装包(可选)
rm -rf jdk-8u241-linux-x64.tar.gz
#配置环境变量
vim /etc/profile #G + o
export JAVA_HOME=/export/server/jdk1.8.0_241
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#重新价值环境变量文件 让配置生效
source /etc/profile
[root@node1 ~]# java -version
java version "1.8.0_241"
(4)将node1的JDK安装包scp给其他机器
#scp安装包
cd /export/server/
scp -r jdk1.8.0_241/ root@node2:$PWD
#scp环境变量文件
scp /etc/profile node2:/etc/
#别忘了 其他机器source哦
source /etc/profile
17_了解shell编程 介绍、入门案例
17.1 shell介绍
(1)指的是一种程序,往往是使用C语言开发,功能是访问操作系统内核获取操作系统信息。
(2)指的是shell脚本语言,使用什么样的命令语法格式去控制shell程序访问内核。
(3)通常情况下,所说shell编程指的shell脚本编程,学习shell语法规则。
17.2 shell编程开发规范
在哪里编写?
只要能进行文本编辑的地方都可以写 linux上常使用vim编辑器开发
需要编译?
不需要编译
如何执行?
需要语法解释器 不需要安装
Linux系统中集成了很多个同种类的shell解释器
[root@node1 linux02]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
17.3 默认shell解释器 bash shell = shell
因为很多linux发行版都以bash作为默认的解释器 所以说市面上大多数shell编程都是基于bash开展的
bash shell免费的。
17.4 shell的快速入门案例
1)shell脚本文件 后缀名没有要求 通常以.sh结尾 见名知意
2)格式
#!/bin/bash
echo 'hello shell'
#第一行 指定解释器的路径
3)给脚本授予执行权限
chmod a+x hello.sh
4)执行shell脚本
(1)绝对路径指定shell脚本
[root@node1 linux02]# /root/linux02/hello.sh
hello shell
(2)相对路径
[root@node1 linux02]# hello.sh #默认去系统环境变量中寻找 错误
-bash: hello.sh: command not found
[root@node1 linux02]# ./hello.sh #从当前目录下找
hello shell
(3)把shell脚本交给其他shell程序执行 比如sh
[root@node1 linux02]# sh hello.sh
hello shell
5)探讨:后缀名 解释器 执行权限是必须的吗? 不是必须的
[root@node1 linux02]# vim bye.hs
echo "bye bye"
[root@node1 linux02]# sh bye.hs
bye bye
#文件不是sh结尾 没有授权 没有指定bash解释器路径 但是却可以执行
#此时这个文件是作为参数传递给sh来执行的 此时解释器是sh 只要保证文件中语法正确就可以执行
17.5 扩展:shell 命令、shell 脚本
(1)都是属于shell的东西
(2)shell命令倾向于交互式使用,适合逻辑简单场景
(3)shell脚本适合复杂逻辑 理解结合函数、条件判断、流程控制 写出更加丰富的程序。
(4)shell命令和shell脚本之间可以互相换行。
#编写shell脚本 执行脚本
[root@node1 linux02]# cat hello.sh
#!/bin/bash
echo 'hello shell'
[root@node1 linux02]# sh hello.sh
hello shell
#以shell命令执行
[root@node1 linux02]# echo 'hello shell'
hello shell
18_了解shell编程 变量、字符串、反引号、动态传参
18.1 shell变量
(1)语法格式
变量=值 #注意等号两边不能有空格
[root@node1 linux02]# name = allen
-bash: name: command not found
[root@node1 linux02]# name=allen
(2)变量的使用
[root@node1 linux02]# name=allen
[root@node1 linux02]# echo name
name
[root@node1 linux02]# echo $name
allen
[root@node1 linux02]# echo ${name}
allen
[root@node1 linux02]# echo $namewoon
[root@node1 linux02]# echo ${name}woon
allenwoon
#建议提取变量的时候 使用{}标识变量的边界范围
#unset 删除变量
#readonly 只读变量 不能修改 相当于java中final修饰的
[root@node1 linux02]# name=allen
[root@node1 linux02]# echo ${name}
allen
[root@node1 linux02]# name=james
[root@node1 linux02]# echo ${name}
james
[root@node1 linux02]# readonly name=allen
[root@node1 linux02]# echo ${name}
allen
[root@node1 linux02]# name=james
-bash: name: readonly variable
[root@node1 linux02]# unset name
-bash: unset: name: cannot unset: readonly variable
#只读变量不能够进行删除 只会随着生命周期结束而结束
#对应shell命令来说 生命周期就是窗口关闭
#对应shell脚本来说 生命周期就是shell执行结束
18.2 shell字符串使用
(1)定义字符串
可以使用单引号 可以使用双引号 可以不使用引号
推荐使用双引号 实现变量的提取
[root@node1 linux02]# name=allen
[root@node1 linux02]# echo $name
allen
[root@node1 linux02]# name1='allen1'
[root@node1 linux02]# echo $name1
allen1
[root@node1 linux02]# name2="allen2"
[root@node1 linux02]# echo $name2
allen2
[root@node1 linux02]# echo my name is ${name}
my name is allen
[root@node1 linux02]# echo 'my name is ${name}'
my name is ${name}
[root@node1 linux02]# echo "my name is ${name}"
my name is allen
18.3 反引号
`
英文状态下输入ESC下面
功能:表示执行反引号的命令
#需求:把date命令执行的结果赋值给nowtime变量
[root@node1 linux02]# date
Tue May 18 17:01:55 CST 2021
[root@node1 linux02]# nowtime=date #如果没有反引号 理解为字符串
[root@node1 linux02]# echo $nowtime
date
[root@node1 linux02]# nowtime=`date` #使用反引号 理解为执行命令 把命令的结果进行赋值
[root@node1 linux02]# echo $nowtime
Tue May 18 17:02:41 CST 2021
19_网络和服务管理命令
19.1 网络命令
19.1.1 hostname命令
在linux中查看主机名, 使用命令hostname
[root@node1 hello]# hostname
修改主机名称
修改方式一(临时修改)
[root@node1 hello]# hostname itheima
修改方式二(永久修改)
[root@node1 hello]# vim /etc/hostname
注意:修改文件中的主机名称后, 需要重启服务器
19.2 ifconfig命令
在Linux中查看主机IP地址 使用命令ifconfig
[root@node1 hello]# ifconfig
修改主机的ip地址:vim /etc/sysconfig/network-scripts/ifcfg-ens33
20_服务管理命令
service命令是用来控制系统服务的实用工具,它以启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态
service network status #查看网络服务状态
service network stop #停止网络服务
service network start #启动网络服务
service network restart #重启网络服务