大家好,又见面了,我是你们的朋友全栈君。
3. 软件安装
3.1 软件安装介绍
学软件开发,各种台的软件熟练安装是必须要熟练掌握。大家都知道,Windows下安装软件时,只需用鼠标双击软件的安装程序,或者用Zip等解压缩软件解压缩即可安装;在android或者apple中安装软件时,只需要在手机应用商店点击安装即可。而在Linux下安装软件难度高于Windows、Android、ios和windows phone下软件安装。下面我就详细讲解Linux下如何安装软件。
Linux下软件的安装大概可以分为如下几种:
代码语言:javascript复制1. 二进制程序的安装(最简单安装)
2. rpm程序安装(后缀名为*.rpm)
3. yum源安装(本质也是rpm安装,它只是rpm的一种安装方式而已)
4. 源码安装
3.2 二进制安装
Linux下二进制格式的软件是指事先已经在各种平台编译安装好相关软件,然后压缩打包,在安装时只需解压或者执行安装可执行文件即可。这种软件发行格式类似与windows系统,这样做的原因是保护源代码程序不对外泄露,保护知识产权。
二进制软件包的优点是安装简单、容易,缺点是缺乏灵活性,相应的软件包执行在对应平台下安装,离开这个环境软件就无法运行。
二进制软件包提供了很多类型的打包方式,最常见的就是我们RPM格式的包,还有以“.tar.gz、.tgz、 .bz2”等形式的二进制软件包,最后还有一个就是提供安装程序进行安装的二进制软件包。下面分别介绍:
- 安装*.tar.gz、*.bz2二进制软件包 这种格式的软件包,安装其实就是简单的解压过程,根据不同的软件打包格式,我们用相应的解压命令解压即可。 对于* .tar.gz软件格式解压:tar –zxvf xxxxxx.tar.gz 对于*.bz2软件格式解压: tar -jxvf xxxxxx.tar.gz这类软件的卸载,对于解压后只有单一目录的软件,可以直接删除对应软件目录即可,如果解压后文件分散在几个目录中,需要一一手动删除目录。 例如:我们常用的应用服务器容器tomcat软件就是基于这种打包压缩格式发行的。我们只需下载后解压即可完成安装,如果需要卸载,直接删除对应的tomcat目录即可。 案例一:JDK的安装
准备工作:
代码语言:javascript复制1.上传JDK安装包到centOS系统里(root用户的家里)
2.统一安装到/user/local/目录下
2. 安装步骤
代码语言:javascript复制step1. 解压jdk到/usr/local目录下
[root@hostname01 ~]# tar -zxvf jdk-8u221-linux-x64.tar.gz -C /usr/local
step2. 将解压后的目录进行更名操作
[root@hostname01 ~]# cd /usr/local
[root@hostname01 local]# mv jdk1.8.0_221/ jdk
step3. 配置环境变量
[root@hostname01 local]# vi /etc/profile
.........省略........
# java environment
JAVA_HOME=/usr/local/jdk
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
# 导出环境变量
export JAVA_HOME PATH
step4. 重新引导配置文件
[root@hostname01 local]# source /etc/profile
step5. 验证版本号
[root@hostname01 local]# java -version
[root@hostname01 local]# javac
代码语言:javascript复制配置环境变量的三个文件
/etc/profile :系统级别的一个配置文件
~/.bash_profile :用户级别的一个配置文件
~/.bashrc :用户级别的一个配置文件
2. 提供安装程序的软件包 这种软件包都提供了安装脚本或者安装向导程序,只需在下载此类软件包后解压,然后进入安装目录,找到类似的setup、install、install.sh之类的可执行文件运行即可,然后根据提示(比如安装路径,参数设置等等)进行相应的设置,接着安装就自动完成。 这类软件的卸载也提供了相应的卸载脚本或者卸载向导,根据提示即可完成软件卸载。 例如:经常使用的sun jdk就是这种安装方式,从网络下载下来的jdk是个二进制可执行文件,首先设置文件的可执行权限(例如chmod 755 jdk1.6.0_07.bin,权限操作本书后面会有详细讲述) ,然后运行软件(也即是./ jdk1.6.0_07.bin)即可完成安装。安装完成会在当前目录产生一个对应的jdk程序目录。
3.3 rpm安装
RPM软件包管理
RPM软件包也称为二进制软件包
RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括RedHat、CentOS、SUSE等Linux的发行版本都有采用,可以算是公认的行业标准了。RPM文件在Linux系统中的安装最为简便
RPM命令使用
rpm的常用参数
代码语言:javascript复制i:安装应用程序(install)
vh:显示安装进度(verbose hash)
U:升级软件包(update)
qa: 显示所有已安装软件包(query all)
qi: 列出安装包的详细信息
qc: 配置文件
qd: 文档说明
qR: 显示依赖关系
安装参数
-i:安装的含义
-v:安装过程中的显示详情
-h:以进度条的形式显示安装进度
e:卸载应用程序(erase)
注意:如果其它软件包有依赖关系,卸载时会产生提示信息,可使用--nodeps强行卸载。
查询所有安装的rpm包: rpm –qa
查询mysql相关的包: rpm –qa | grep mysql
安装:rpm -ivh jdk.rpm
卸载: rpm –e mysql*
强行卸载:rpm –e mysql* --nodeps
3.3.1 rpm包的安装(安装MySQL5.7.28)
准备工作
代码语言:javascript复制1. 上传安装包:mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
说明:tar包里存储了多个rpm包。需要释放
2. 拆包,找到相关的rpm包
[root@hostname01 ~]# tar -xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar -C ./
mysql-community-embedded-5.7.28-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
mysql-community-devel-5.7.28-1.el7.x86_64.rpm
mysql-community-embedded-compat-5.7.28-1.el7.x86_64.rpm
mysql-community-libs-5.7.28-1.el7.x86_64.rpm
mysql-community-test-5.7.28-1.el7.x86_64.rpm
mysql-community-common-5.7.28-1.el7.x86_64.rpm
mysql-community-embedded-devel-5.7.28-1.el7.x86_64.rpm
mysql-community-client-5.7.28-1.el7.x86_64.rpm
mysql-community-server-5.7.28-1.el7.x86_64.rpm
3. 安装的rpm包:
mysql-community-server-5.7.28-1.el7.x86_64.rpm
安装步骤
代码语言:javascript复制1. 查询CentOS7.7中是否已经安装了mariadb。如果安装了,请卸载(因为与mysql不兼容)
[root@hostname01 ~]# rpm -qa | grep mariadb
mariadb-libs-5.5.64-1.el7.x86_64 <==强制卸载
[root@hostname01 ~]# rpm -e mariadb-libs-5.5.64-1.el7.x86_64 --nodeps
2. 安装mysql-common 因为被mysql-libs依赖
[root@hostname01 ~]# rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm
3. 安装mysql-libs 因为被mysql-client依赖
[root@hostname01 ~]# rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
4. 安装mysql-client 因为被mysql-server依赖
[root@hostname01 ~]# rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
5. 安装依赖插件:perl 和net-tools
[root@hostname01 ~]# yum -y install perl net-tools
6. 安装mysql-server
[root@hostname01 ~]# rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm
mysql服务端是安装好了,但是服务项没有启动,所以下一步要进行的就是启动服务项
代码语言:javascript复制7. 启动mysql的服务项,并检查
[root@hostname01 ~]# systemctl start mysqld
[root@hostname01 ~]# systemctl status mysqld
8. 查找初始密码(启动服务时,会生成/var/log/mysqld.log文件)
[root@hostname01 ~]# cat /var/log/mysqld.log | grep password
2020-04-08T08:15:04.180438Z 1 [Note] A temporary password is generated for root@localhost: dwtqdjaHn0;p
2020-04-08T08:16:02.523447Z 2 [Note] Access denied for user 'root'@'localhost' (using password: NO)
9. 登陆mysql(mysql命令在rpm安装自动安装到相应path对应的目录下了),复制临时密码
[root@hostname01 ~]# mysql -uroot -p
10. 修改密码策略级别为low(mysql5.7.28的密码策略比较高,因此要先设置为low)
mysql> set global validate_password_policy=low;
11. 修改密码(此时的密码长度要求时8位以上的字符)
mysql> alter user root@localhost identified by 'mmforu123'
------------------到此彻底结束了----------------
扩展:策略内容
mysql> show variables like "%validate_password%";
-------------------------------------- -------
| Variable_name | Value |
-------------------------------------- -------
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 8 |
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | LOW |
| validate_password_special_char_count | 1 |
-------------------------------------- -------
7 rows in set (0.01 sec)
3.4 yum日常操作
图形化界面,手动挂载
yum(yellowdog updater modifified):软件包管理工具
- 应用yum的好处
- 自动解决软件包依赖关系
- 方便的软件包升级
- yum的缺点: 需要联网,从远程YUM源服务器上自动下载相关的软件(包括依赖的软件),然后安装到本地磁盘中。
- 查询 yum list 查询所有可用软件包列表 yum list all/installed yum search 关键字 搜索服务器上所有和关键字相关的包 yum info 关键字 来查找包名
- 安装 yum -y install 包名 -y: 自动回答yes yum -y install/remove appname
- 升级 yum -y update 包名 注意:如果不加包名,就升级所有的,包括内核。必须加包名升级单个软件包,慎用升级所有的检测升级 yum check-update
- 卸载 yum -y remove 包名 卸载不存在卸载依赖关系的其他软件
- 其他操作 yum –help、man yum 帮助 yum clean all 清除缓存和旧的包 yum repolist 查看当前可用的yum源 yum deplist httpd 列出一个包所有依赖的包
3.5 本地yum源安装
3.5.1安装步骤
第一步:确保虚拟机引用了DVD.iso文件,并确保启动时链接 已经勾选。
代码语言:javascript复制注意,开机后,iso文件已经挂载到/dev/cdrom上
验证: more /dev/cdrom
第二步:创建一个新的挂在目录
代码语言:javascript复制]# mkdir /mnt/dvd
第三步:将/dev/cdrom 挂载到/mnt/dvd上
代码语言:javascript复制]# mount -t iso9660 -o loop /dev/cdrom /mnt/dvd
可以查看一下dvd里的内容,有内容,说明成功挂载
Packages目录下全都是rpm包
第四步:将原有的yum源配置文件设置为失效状态
代码语言:javascript复制]# cd /etc/yum.repos.d/
]# rename .repo .repo.bak ./*.repo 重命名扩展名
第五步:创建一个新的repo配置文件(可以拷贝)
代码语言:javascript复制]# cp CentOS-Base.repo.bak local.repo
第六步:配置yum源信息
]# vi local.repo
删除多余的东西
代码语言:javascript复制[wangcongming] <==仓库名称
name=local <==昵称
baseurl=file:///mnt/dvd <==本地挂载目录
enabled=1 <==启用或者禁用仓库。 1表示启用,0表示禁用
gpgcheck=1 <==是否校验。 1表示校验,0表示不校验
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 <==校验钥匙
第七步:清空原有的缓存
代码语言:javascript复制]# yum clean all
第八步: 重新列出本地yum源的信息
代码语言:javascript复制]# yum list all
3.5.2 挂载光盘
3.5.3 让网络yum源文件失效
代码语言:javascript复制cd /etc/yum.repos.d/
rename .repo .repo.bak * #重命名所有的.repo文件
cp CentOS-Media.repo.bak CentOS-Media.repo #配置一个.repo文件
3.5.4 对CentOS-Base.repo的解释
cat /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever -Base
mirrorlist=http://mirrorlist.centos.org/?release=releasever&arch=basearch&repo=os
baseurl=http://mirror.centos.org/centos/releasever/os/basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
解释:
代码语言:javascript复制[base] 容器名称,一定要放在[]中
name 容器说明,这个可以自己随便写
mirrorlist 镜像站点,这个可以注释掉
baseurl yum源服务器的地址。默认是CentOS官方的yum源服务器
enabled 此容器是否生效,如果不写或写enable=1都是生效,写成enable=0就是不生效
gpgcheck 如果是1是指RPM的数字证书生效,如果是0则不生效
pggkey 数字证书的公匙文件保存位置,不用修改
3.5.5 修改光盘yum源文件
vi CentOS-Media.repo
代码语言:javascript复制[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///mnt/cdrom
#这里的地址为自己光盘挂载地址,并把不存在的地址注释掉,在行首注释
# file:///media/cdrom/
# file:///media/cdrecorder/
gpgcheck=1
enabled=1 #把原来的0改为1,让这个yum源配资文件生效
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
可使用 yum repolist 查看 当前可用yum源
yum clean all
yum repolist
注意点:
1.如果一旦重启服务器,需要重新挂载
解决方法:
代码语言:javascript复制vi /etc/fstab
在文件里面添加DVD所在目录到需要挂载的目录:
代码语言:javascript复制/dev/cdrom /mnt/dvd iso9660 defaults 0 0
保存退出重启即可
2.需要检查当前的虚拟机的镜像文件挂载处,将已经连接前面打勾
3.如果镜像文件有两个DVD,我们可以这样做
- 再添加一个光驱,将DVD2连接进来
- 将服务器重启,发现在/dev下有了两个镜像文件(cdrom和cdrom1)
- 在/mnt下再去创建一个文件夹(cdrom1)
- 分别进行挂载操作mount -t iso9660 -o loop /dev/cdrom /mnt/cdrom mount -t iso9660 -o loop /dev/cdrom1 /mnt/cdrom1
- 到/etc/yum.repos.d里面,同时添加路径 file:///mnt/cdrom file:///mnt/cdrom1
3.6 搭建局域网YUM源
3.6.1 选择局域网内的一台机器作为YUM源服务器,安装HTTP服务进程
代码语言:javascript复制]# yum list | grep http
]# yum -y install httpd.x86_64
3.6.2 开启HTTP服务进程并设置开机自启动
代码语言:javascript复制]# systemctl status httpd
]# systemctl start httpd
]# systemctl enable httpd
3.6.3 配置HTTP服务管理YUM源目录,让httpd服务管理的目录/var/www/html下有挂载的路径的软连接
代码语言:javascript复制# HTTP服务进程管理的目录是/var/www/html
#在管理目录下,创建软连接,指向YUM源目录
]# ln -s /mnt/dvd /var/www/html/repo <===都是用绝对路径,保没错
3.6.4 其他机器只需要把本地YUM源的路径指向局域网YUM源地址即可
代码语言:javascript复制]# cd /etc/yum.repos.d/
]# rename .repo .repo.bak ./*.repo
]# cp CentOS-Base.repo.bak local.repo
]# vi local.repo
[local] <==仓库名称
name=local <==昵称
baseurl=http://hostname01/repo <==将baseurl指向局域网服务器(自行更改服务器名)
enabled=1 <==启用或者禁用仓库。 1表示启用,0表示禁用
gpgcheck=1 <==是否校验。 1表示校验,0表示不校验
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 <==校验钥匙
3.7 源码编译安装
由于linux操作系统开放源代码,因而在其上安装的软件大部分也都是开源软件,例如apache、tomcat、php等软件。开源软件基本都提供源码下载,源码安装的方式;
3.7.1 源码安装的优点
- 用户可以自己定制软件功能,安装需要的模块,不需要的功能可以不用安装。
- 用户还可以自己选择安装路径,方便管理。
- 卸载软件也很方便,只需删除对应的安装目录即可。
- 能最大程度和服务器平台融合,效率稍微比其他方式高。
- 没有windows所谓的注册表之说。
3.7.2 源码安装的缺点
- 安装较为繁琐,需要自己配置
- 安装较为耗时,需要自己编译源码
- 安装较为容易出错,出错也难以解决
3.7.3 安装步骤
源码安装软件一般有以下几个步骤组成:下载解压源码、分析安装平台环境(ifconfifigure)、编译安装软件(make,make install)。下面我们分别介绍。
3.7.3.1下载解压源码
linux下软件的源码一般都是C或者C 语言编写的,并且都会在软件的官方网站上提供源码包下载,例如apache开源项目的官方网站为http://www.apache.org,此外在网上的很多开源社区一般也提供一些常用软件的源码下载,源码都打包成压缩文件,常见的源码打包压缩格式有“.tar.gz”、“.tar.baz2”等。
我们可以从网站上首先下载源码文件,然后在传到所在的linux系统下,如果你的linux系统处于联网状态下,也可以直接在系统内通过wget之类的下载命令将源码包直接下载到linux系统下。下载完成,把相应的软件解包即可,针对下载软件包的不同,使用不同的方法进行解压,解压完毕后进入解压生成的目录中,在这个目录下,一般都存在一个REDAME文件,这个文本文件非常重要,它详细的介绍了这个软件所能完成的功能、授权许可、安装需求、安装注意事项、安装方式等等,由于linux各个版本的差异,以及安装环境的不同,软件的安装方式也不尽相同,所以在安装软件前,一定要事先阅读这个README文件,确保安装的正确性。
3.7.3.2 分析安装平台环境
在软件包解压完毕之后,我们进入源码目录,一般都会存在confifigure和README这么两个文件,README就是上面我们讲到的,是对软件的介绍和安装说明;linux下软件的安装受到操作系统安装环境的影响,比如某些软件在安装或者运行过程中需要调用操作系统本身的库文件,或者需要运行系统的某个工具等等,但是系统中不存在这个库文件或者这个工具没有安装,那么安装或者运行软件就会失败。
为了避免这个问题的出现,在安装软件的时候就需要分析操作系统环境,检测当前系统是否拥有安装软件所需的所有文件和工具,如果系统缺少某个文件,就给出提示,直到满足软件的所有需求为止。这个就是confifigure文件的功能,confifigure文件一般是个可执行文件,可以在当前目录下直接输入“./confifigure”进行软件安装的环境测试,如果提示缺少某些安装包,就需要进行安装,直到测试通过。通常的,源码安装都需要GCC或者CC编译器,这些编译器一般在安装系统时定制安装包中的开发工具选项下,其实这也是我们在第二章安装linux系统中要求选择开发工具包的原因所在。
此外,在执行confifigure分析软件需求时,还可以在“./confifigure”后面加上软件的安装路径以及安装所需的模块等等一些选项,来定制用户需要的软件功能。
3.7.3.3 编译安装软件
在验证软件安装环境后,正式进入软件的编译步骤,在进行编译前,首先了解下关于编译的一些基础知识。
在linux系统下,make是我们经常用到的编译命令,无论是安装软件还是项目开发,都会经常用到编译安装命令,也就是make和make install,对于一个包含很多源文件的应用程序,使用make和makefile工具可以简单快速的解决各个源文件之间复杂的依赖关系,同时,make工具还可以自动完成所有源码文件的编译工作,并且可以只对上次编译后修改过的文件进行增量编译,因此,熟练掌握了make和makefile工具之后,源码安装软件就变的像windows下安装软件一样简单。
3.7.3.4 Makefile文件介绍
make工具最主要的功能就是通过makefile文件来实现的,makefile文件是按照某种语法来进行编写的,文件中定义了各个源文件之间的依赖关系,并说明了如何编译源文件并生成可执行文件,它通过描述各个源程序之间的关系让make工具自动完成编译工作。
在linux系统下,习惯用Makefile替代makefile文件,我们在执行confifigure通过后,就会在当前目录下生成这个文件,一般情况下在命令行输入make时,make命令会默认去寻找当前目录下的Makefile文件,如果我们用其它文件作为makefile,就要在make命令选项后指定makefile文件,例如我们设定编译规则文件为make_file,就需要使用以下命令指定:[root@WEBServer ~]#make -f make_file
3.7.3.5 Makefile举例
下面我们通过举例了解下Makefile的编写原则和内容。
代码语言:javascript复制例如有一个test程序,有三个源文件file1.c、file2.c、file3.c以及库文件LS编译生成,这三个源文件 还分别包含了自己的头文件1.h、2.h、3.h。通常,C编译器将会输出三个目标文件file1.o、file2.o、 file3.o。假定file1.c和file3.c都要声明用到一个apcs的文件,但是file2.c不用,也就是在 file1.c和file3.c文件中都有类似“#include “apcs””的声明。
下面这段代码就是对test程序的描述:
1:#It is a example for describing makefile
2:test: file1.o file2.o file3.o
3:cc file1.o file2.o file3.o -LS -o test
4:file1.o: file1.c 1.h apcs
5:gcc -c file1.c
6:file3.o: file3.c 3.h apcs
7:gcc -c file3.c
8:file2.o: file2.c c.h
9:gcc -c file2.c
这个描述文档其实就是一个makefile文件,第一行为注释行,第二行指定test程序有file1.o、 file2.o、file3.o链接生成,第三行描述了如何从test所依赖的文件建立可执行文件,接下来的第四、 六、八行定义了三个目标文件和它们依赖的“.c”、“.h”和“apcs”文件。剩下的第五、七、九行定义了如何从 目标依赖的文件生成可执行文件。
在了解Makefile文件结构后,我们就可以控制编译的选项,定制自己所需的软件功能。
接下来,我们只需在命令行输入make命令,即可进入编译阶段,根据软件源程序的大小和系统的硬件配置,编 译时间不定,编译完毕,会在当前目录以及子目录下生成相应的可执行文件,接下来就进入最后的安装软件阶 段,在命令行输入make install命令,开始安装软件,安装进程会首先创建安装目录,如果我们没有指定安 装的目录,安装程序默认会安装在系统的/usr/local目录下创建安装目录,然后将相应的文件和可执行程序 从源码目录拷贝到安装目录下,这样安装就完毕了。
3.8 克隆
3.8.1 克隆前的准备工作
安装minimal版本虚拟机(自行安装 )
3.8.2 克隆后所需要进行的操作
3.8.2.1 准备工作
代码语言:javascript复制1. 关机要克隆的虚拟机
2. 选中要克隆的虚拟机
3. 右键点击-->管理-->克隆-->下一步-->虚拟机的当前状态-->创建完整克隆
4. 命名操作-点击完成
3.8.2.2 修改主机名
代码语言:javascript复制##改主机名
hostnamectl set-hostname xxx
3.8.2.3 修改ip地址
代码语言:javascript复制]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
......
IPADDR=192.168.10.112
...............
保存退出
重启服务:systemctl restart network.
查看ip: ip addr
建议:reboot
3.8.2.4 使用nat模式实现两台虚拟机局域网通讯
3.8.2.5 操作新linux系统流程
1.更改主机名临时 永久 2.检查网卡是否启动 3.关闭NetworkManager网络管理服务 4.关闭防火墙 5.更改ip地址 6.更改主机名称和主机映射 7.使用连接工具(fifinalshell)进行连接 8.如果出现问题按照以上流程检查
3.9 scp命令
代码语言:javascript复制集群模式下,各节点之间如何方便的拷贝文件?
命令格式:
scp file 远程用户名@远程服务器IP:~/ (注意:冒号和目录之间不能有空格)
如果拷贝目录,需要加-r 选项。
使用root用户
eg: [root@hd01 etc]#scp /etc/profile root@node2:/etc
eg: [root@hd01 etc]# scp -r /usr/jdk1.8 node2:/usr/java 使用root用户可以将远程用户名省略
eg: [root@hd01 etc]#scp /root/a/ node2:$PWD
注:使用$PWD 默认到当前正在操作的目录(node2的etc下)。 注意:目标主机要有与当前正在操作的目录 相同的目录,前面的文件或文件夹会直接拷贝到后面的目录中
~:到当前用户的宿主目录
eg: scp /etc/services node2:/root/service.hard
可以通过这种方式修改拷贝的文件名。
补充:
- 身份相同则可以省略用户
- 密码对应传入用户
- 如果想使用主机名充当ip地址,需要配置/etc/hosts文件
从本地复制到远程
代码语言:javascript复制# 拷贝文件
scp /home/test/test.txt root@192.168.0.2:/home/test/
# 拷贝目录
scp -r /home/test/ root@192.168.0.2:/home/test/
从远程复制到本地
代码语言:javascript复制# 拷贝文件
scp root@192.168.0.2:/home/test/ /home/test/test.txt
# 拷贝目录
scp -r root@192.168.0.2:/home/test/ v/home/test/
3.10 ssh免密登录
3.10.1 ssh免密登录作用
方便的进行节点之间的切换 ssh node2
3.10.2 免密登录实现流程
还需要输入密码
- 拷贝完成之后,会在要免密登录的机器上生成授权密码文件 注意:免密码登录是单向的
3.10.2 ssh免密登录原理
1.node1 使用 ssh-keygen –t rsa 生成公钥和私钥 2.ssh-copy-id root@node2 将公钥拷贝到node2上,实际上是把公钥内容追加到 authorized_keys文件中。 3.请求时:node1向node2发送连接请求时,附带主机,ip地址等信息 4.node2收到请求后,去授权文件里查找node1的公钥,找到之后,随机生成一个字符串,并用公钥加密,并发送给node1 5.node1接收到密文之后,用私钥解密,并把解密结果返回给node2 6.node2拿到解密结果之后,与之前的字符串进行比较,如果相同,则可以登录成功。
3.11搭建局域网时间服务器
在每一台机器上,都可以使用定时任务crontab同步网络上的时间服务器 ,如time.windows.com
代码语言:javascript复制前提:安装ntpdate.x86_64
然后: 使用root用户,进行定时
0 * * * * /usr/sbin/ntpdate -u time.windows.com
第一步:选择一台机器作为时间服务
代码语言:javascript复制选择hostname01
第二步:安装ntp.x86_64软件
代码语言:javascript复制]# yum -y install ntp.x86_64
第三步:确保ntpd服务是启动的,并且开机自启动
代码语言:javascript复制]# systemctl status ntpd
]# systemctl start ntpd
]# systemctl enable ntpd
第四步:配置/etc/ntp.conf
代码语言:javascript复制]# vi /etc/ntp.conf
...................
# Hosts on local network are less restricted.
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap
# 上一行就是添加局域网的段位
..............
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 127.127.1.0
# 上一行就是添加本机作为服务器,共有的服务注释掉
第五步:最好将时间服务器的防火墙关闭,
代码语言:javascript复制]# systemctl stop firewalld
]# systemctl disable firewalld
第六步:建议重启
代码语言:javascript复制]# reboot
第七步:其他机器保证安装了ntpdate.x86_64
第八步:其他机器可以使用root写定时任务进行同步(运行crontab -e,每个用户都有唯一一个同名文件,在里面写)
代码语言:javascript复制0 7,17 * * 1-5 /usr/sbin/ntpdate -u 服务器ip或者主机名
注意:局域网上的时间差如果太大,同步可能失效。
3.12 定时器crontab
3.12.1 crontab的简介
在Linux中,周期性的执行任务一般由cron这个守护进程来处理,它是一个linux下 的定时任务执行工 具,可以在无需人工干预的情况下运行作业。 [ps -ef|grep cron] – cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。 – cron的配置文件称为“crontab”,是“cron table”的简写。
3.12.2 cron服务
代码语言:javascript复制service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
service crond status //查看服务状态
3.12.3 cron的配置文件位置
1.var/spool/cron/ 2.说明这个目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名,比如tom建 的crontab任务对应的文件就是/var/spool/cron/tom。一般一个用户最多只有一个crontab文件。
3.12.4 crontab命令格式
代码语言:javascript复制作用:用于生成cron进程所需要的crontab文件
格式:crontab [-u username] -e
3.12.5 文件内容格式
格式如下:
代码语言:javascript复制* * * * * user-name command to be executed
共有六部分组成,分别表示:
分 时 日 月 星期 要运行的命令
解析:
minute: 一小时中的哪一分钟 [0~59]
hour: 一天中的哪个小时 [0~23]
day: 一月中的哪一天 [1~31]
month: 一年中的哪一月 [1~12]
week: 一周中的哪一天 [0~6] 0表示星期天
commands: 执行的命令
书写注意事项
- 全都不能为空,必须填入,不知道的值使用通配符*表示任何时间
- 每个时间字段都可以指定多个值,不连续的值用,间隔,连续的值用-间隔。
- 命令应该给出绝对路径
- 用户必须具有运行所对应的命令或程序的权限
- */num 表示频率
3.12.6 应用案例
代码语言:javascript复制1. 每天早上6点
0 6 * * * echo "Good morning." >> /tmp/test.txt
//注意 如果不进行追加 ,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。
2. 每两个小时
0 */2 * * * echo "Have a break now." >> /tmp/test.txt
3. 晚上11点到早上8点之间每两个小时和早上八点
0 23-7/2,8 * * * echo "Have a good dream" >> /tmp/test.txt
4. 周一到周五下午,5点半提醒学生15分钟后关机
30 17 * * 1-5 /usr/bin/wall < /etc/issue
45 17 * * 1-5 /sbin/shutdown -h now
5. 学校的计划任务, 12点14点,检查apache服务是否启动
*/2 12-14 * 3-6,9-12 1-5
6. 每月 1、1 0、2 2日的4:45运行/apps/bin目录下的backup.sh
45 4 1,10,22 * * /apps/bin/backup.sh
7. 每周六、周日的 1 : 10运行一个find命令
10 1 * * 6,0 /bin/find -name "core" -exec rm {
} ;
8. 在每天 18:00至23 :00之间每隔30分钟运行/apps/bin目录下的dbcheck.sh
0,30 18-23 * * * /apps/bin/dbcheck.sh
9.每星期六的 11:00 pm运行/apps/bin目录下的qtrend.sh
0 23 * * 6 /apps/bin/qtrend.sh
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/140117.html原文链接:https://javaforall.cn