1.网络配置
一般我们使用的是nat,网络地址转换的连接模式
电脑中虚拟机会分配一个ip,然后须有一个类似于虚拟网卡的vmnet8(相当于网关)。这两个处在同一个网段中可以网络互通,同时这个vmnet8可以和电脑主机通信,然后电脑和局域网网关联通,连接到互联网。
查看网络IP和网关
编辑》虚拟网络编辑器
查看windows的vmnet8
查看linux的网络配置ifconfig
linux网络环境配置
第一种该方式,自动获取
登录后通过界面自动获取ip,这样每次获取的ip可能都不一样
第二种方式,指定ip地址
直接修改配置文件指定ip地址
vi /etc/sysconfig/network-scripts/ifcfg-ens33
首选需要修改这里的ip,网关,网络连接方式等信息
然后再虚拟网络编辑里面修改网关信息,然后ip就改变了。
设置主机名和hosts映射
可以使用hostname查看linux的主机名
修改主机名的文件在/etc/hostname
修改后需要重启生效
(1)设置Windows的hosts映射
设置hosts映射,在windows的C:\Windows\System32\drivers\etc\hosts中指定一个ip对应的名称映射。这里就相当于设定一个变量,变量的值是ip地址。ping的之后直接ping变量就行。
192.168.200.130 liu
(2)设置linux的映射
修改文件/etc/hosts 192.168.200.1ThinkPad-PC
主机名解析过程分析
hosts是一个文本文件,用来记录ip和hostname(主机名称)的映射关系
dns:域名解析系统,是和互联网上作为域名和ip地址互相映射的一种分布式数据库。
用户在浏览器中输入了网址:浏览器会首先检查浏览器本身的缓存有没有该ip地址的解析,然后检查本地的dns解析器缓存,然后再检查本地的hosts映射文件,最后检查全球的域名服务dns。一级一级的查找,有就直接用,没有就返回不存在。
一般来说,第一次访问某一网站成功之后,浏览器和操作系统会缓存网址的ip地址映射。
可以在cmd中使用ipconfig/displaydns 查看。使用ipconfig/flushdns清理。
2.进程管理(重点)
基本介绍
1)在LINUX中,每个执行的程序都称为一个进程。每一个进程都分配一个ID号(pid,进程号)。=>windows=>linux
2)每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。
3)一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才才结束。
显示系统执行的进程
ps 【选项】
-a:显示当前进程所有信息
-u:以用户的形式显示进程
-x:显示后台运行进程的参数
VSZ:进程占用的虚拟内存大小(单位:KB)
RSS:进程占用的物理内存大小(单位:KB)
以全格式显示当前所有进程,查看进程的父进程
ps-ef是以全格式显示当前所有的进程
-e显示所有进程。-f全格式
是BSD风格
UID:用户ID
PID:进程ID
PPID:父进程ID
C:CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高
STIME:进程启动的时间
TTY:完整的终端名称
TIME:CPU时间
CMD:启动进程所用的命令和参数
终止进程kill和killall
kill 【选项】 进程号
killall 进程名称
-9:表示强迫进程立即停止
(1)比如踢掉某个非法登录用户。首先,远程登录的进程是sshd。先查询这个进程所对应的进程号,就可以看出有一个用户登录,分为两个进程,上面那个是下面的父进程。直接踢掉就可以。或者使用killall
(2)直接终止sshd这个远程登录服务
kill 1198
恢复指令/bin/systemctl start sshd.service
(3)kill -9 bash对应的进程号:强制杀掉终端。因为如果不加-9,系统会觉得终端重要,然后不执行。
(4)查看进程树:pstree
pstree 【选项】
p:显示进程的PID
-u:显示进程的所属用户
服务(service)管理
服务(service)本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysqld,sshd防火墙等),因此我们又称为守护进程,是Linux中非常重要的知识点。
(1)service管理指令
1)service服务名[start|stop|restart|reload|status]
2)在CentOS7.0后很多服务不再使用service,而是systemctl(后面专门讲)
3)service指令管理的服务在/etc/init.d查看
请使用service指令,查看,关闭,启动network[注意:在虚拟系统演示,因为网络连接会关闭]指令:
service network status
service network stop
service network start
(2)查看服务名
方式1:使用setup->系统服务就可以看到全部。setup
方式2:/etc/init.d看到service指令管理的服务
ls -l /etc/init.d
(3)服务的运行级别(runlevel):
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS),不支持网络
运行级别3:完全的多用户状态(有NFS),无界面,登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
开机的流程
(4)centos7后的运行级别
在/etc/initab进行了简化,如下:
multi-user.target:analogoustorunlevel3
graphical.target:analogoustorunlevel5
init0
#Toviewcurrentdefaulttarget,run:
systemctlget-default
#Tosetadefaulttarget,run:
systemctlset-defaultTARGET.target
查看模式,切换,重启生效
(5)chkconfig指令
通过chkconfig命令可以给服务的各个运行级别设置自启动/关闭chkconfig指令管理的服务在/etc/init.d查看
列出服务列表,改变服务开关,单独查询一个服务信息。改变之后需要重启才能生效。
(6)systemctl管理指令
基本语法:systemctl[start|stop|restart|status] 服务名
systemctl指令管理的服务在/usr/lib/systemd/system查看
systemctl list-unit-files [|grep服务名](查看服务开机启动状态,grep可以进行过滤)
systemctl enable 服务名(设置服务开机启动)
systemctl disable 服务名(关闭服务开机启动)
systemctl is-enabled服务名(查询某个服务是否是自启动的)
查看防火墙状况,开关防火墙
查看防火墙自启动状态:开启;开启防火墙;关闭防火墙;关闭防火墙自启;开启防火墙自启;查询防火墙状态:开启;
打开或关闭某个指定端口
首先防火墙的作用就是类似于一个拦截器,会打开一部分系统端口,关闭一部分系统端口。开启的端口会被转发到系统,关闭的则不行。可以使用telnet来访问端口测试。
在真正的生产环境,往往需要将防火墙打开,但问题来了,如果我们把防火墙打开,那么外部请求数据包就不能跟服务器监听端口通讯。这时,需要打开指定的端口。比如80、22、8080等、
telnet 192.168.200.130 111访问111端口。一般会被挡住,这时候就需要开启端口。
1)打开端口:firewall-cmd--permanent --add-port=端口号/协议
2)关闭端口:firewall-cmd--permanent --remove-port=端口号/协议
3)重新载入,才能生效:firewall-cmd --reload
4)查询端口是否开放:firewall-cmd --query-port=端口/协议
动态监控进程
top与ps命令很相似。它们都用来显示正在执行的进程。Top与ps最大的不同之处,在于top在执行一段时间可以更新正在运行的的进程。
第一行:当前时间;系统已经运行时间;登录用户数;负载值
第二行:总进程数;在运行;休眠;停止;僵死进程。
剩下的就是cpu占用信息,内存占用信息等。
top 【选项】
进入top之后可以通过交互操作来对信息排序
案例1.监视特定用户,比如我们监控tom用户top:
输入此命令,按回车键,查看执行的进程。u:然后输入“u”回车,再输入用户名,即可,
案例2:终止指定的进程,比如我们要结束tom登录top:
输入此命令,按回车键,查看执行的进程。k:然后输入“k”回车,再输入要结束的进程ID号
案例3:指定系统状态更新的时间(每隔10秒自动更新),默认是3秒top-d10
查看系统网络情况netstat
netstat 【选项】
-an按一定顺序输出
-p显示哪个进程在调动
该指令可以看到linux那个端口和外界通信,双方的端口号是什么
就比如这里,虚拟机和xshell有两个远程登录的连接。xshell是在本机上使用的。远程登录用的是ssdh(22)端口。所以本机显示192.168.200.130:22 windows主机是另一个端口。
3.Linux实操篇-RPM与YUM
rpm包的管理
pm用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。RPM是RedHatPackageManager(RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat的标志,但理念是通用的。
(1)rpm包简单的查询指令
rpm -qa | grep xxx
(2)rpm包的其他指令
rpm -qa 查询所有的rpm安装包,可以同时使用管道过滤或者more等指令
rpm -q 软件包名:查询软件包是否安装
rpm -qi 软件包名:查询寻软件包的信息
rpm -ql 软件包名:查询软件包中的文件
rpm-qf 文件全路径名:查询文件所属的软件包
rpm -e 包的名称:删除某个软件
删除之后就会警告,然后就删掉了。
可以使用rpm -vih 安装包全路径名称
比如这里rpm安装包可以在linux中找到。centos7》package,然后搜索。将安装包复制到opt(约定在这)
i=install安装 v=verbose提示 h=hash进度条
yum
Yum是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。
yum install xxx下载安装
4.搭建JavaEE环境
安装javaee环境需要,idea,jdk,tomcat,mysql。
安装步骤jdk
1)mkdir/opt/jdk //创建存放jdk压缩包的目录
2)通过xftp6上传到/opt/jdk下 //将jdk压缩包传到这里,也可以用其他方式
3)cd/opt/jdk
4)解压tar-zxvfjdk-8u261-linux-x64.tar.gz //解压,然后这时候就相当于windows的安装完成
5)mkdir/usr/local/java //约定来说,最好放在特定的位置
6)mv/opt/jdk/jdk1.8.0_261/usr/local/java //所以移动一下
7)配置环境变量的配置文件vim/etc/profile //配置环境变量,和windows一样,让命令在其他 地方也可以使用
8)export JAVA_HOME=/usr/local/java/jdk1.8.0_261 //配置过程和windows类似
9)export PATH=$JAVA_HOME/bin:$PATH
10)source/etc/profile[让新的环境变量生效] //刷新一样
linux和windows不太一样的地方在于,jdk的解压之后不需要安装。直接就可以使用。
tomcat安装
步骤和jdk类似。
1)上传安装文件,并解压缩到/opt/tomcat
2)进入解压目录/bin,启动tomcat./startup.sh
3)开放端口8080,回顾firewall-cmd16.3.2
测试是否安装成功:在windows、Linux下访问http://linuxip:8080
idea的安装
1)下载地址:https://www.jetbrains.com/idea/download/#section=windows
2)解压缩到/opt/idea
3)启动ideabin目录下./idea.sh,配置jdk
4)编写Helloworld程序并测试成功!
mysql的安装是最麻烦的, 他的压缩包无法直接解压。需要解压rpm形式。然后linux有一个数据库和mysql冲突,所以需要先卸载之后才能安装mysql。需要安装四个mysql的rpm。然后就会自动给root用户分配一个密码。可以更改。具体过程略。
5.Shell编程
Shell是什么
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
shell脚本的执行方式
1. 脚本格式要求
1)脚本以#!/bin/bash开头
2)脚本需要有可执行权限
编写一个shell脚本,输出hello word
vim hello.sh
#!/bin/bash
echo "hello,world~"
2.脚本执行方式
方式1(输入脚本的绝对路径或相对路径)
说明:首先要赋予helloworld.sh脚本的+x权限,
再执行脚本比如./hello.sh或者使用绝对路径/root/shcode/hello.sh
方式2(sh+脚本)
说明:不用赋予脚本+x权限,直接执行即可。
比如shhello.sh,也可以使用绝对路径
3.shell变量的定义
1)Linux Shell中的变量分为,系统变量和用户自定义变量。
2)系统变量:$HOME、$PWD、$SHELL、$USER等等,比如:echo$HOME等等..
3)显示当前shell中所有变量:set
基本语法
1)定义变量:变量名=值
2)撤销变量:unset变量
3)声明静态变量:readonly变量,注意:不能unset
注意指令的返回结果复制给变量C=`date` 这里的反引号是tab上面的那个。不是单引号。
4.定义变量的规则
1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头。5A=200(×)
2)等号两侧不能有空格
3)变量名称一般习惯为大写,这是一个规范,我们遵守即可
5.定义环境变量
将一个变量提升为全局都可以使用的变量,也就是配置的环境变量。(配置方法参照之前)
1)export变量名=变量值(功能描述:将shell变量输出为环境变量/全局变量)
2)source配置文件(功能描述:让修改后的配置信息立即生效)
3)echo$变量名(功能描述:查询环境变量的值)
6.定义位置变量
当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量比如:./myshell.sh100200,这个就是一个执行shell的命令行,可以在myshell脚本中获取到参数信息
$n(功能描述:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})
$*(功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
$@(功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
$#(功能描述:这个变量代表命令行中所有参数的个数)
7.预定义变量
1)$$(功能描述:当前进程的进程号(PID))
2)$!(功能描述:后台运行的最后一个进程的进程号(PID))
3)$?(功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
8.运算符
1)“$((运算式))”或“$[运算式]”或者exprm+n//expression表达式
2)注意expr运算符间要有空格,如果希望将expr的结果赋给某个变量,使用``
3)exprm-n4)expr\*,/,%乘,除,取余
9.条件判断
if [ 条件 ]
then
语句
fi
1)=字符串比较
2)两个整数的比较
-lt小于
-le小于等于little equal
-eq等于
-gt大于
-ge大于等于
-ne不等于
3)按照文件权限进行判断
-r有读的权限-w有写的权限-x有执行的权限
4)按照文件类型进行判断
-f文件存在并且是一个常规的文件
-e文件存在
-d文件存在并是一个目录
注意条件判断的空格,[ ]中条件的前后都需要空格。
10.流程控制
if [ 条件 ]
then
语句
elif [ 条件 ]
then
代码
fi
注意事项:[条件判断式],中括号和条件判断式之间必须有空格
11.case语句
12.for循环
for 变量 in 值1,2,3
do
代码
done
$*:获取输入脚本的所有参数当做一个整体
$@:获取输入脚本的所有参数当做不同的,分别输出
13.while
14.read读取控制台输入
read(选项)(参数)
选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒),
如果没有在指定的时间内输入,就不再等待了。。参数变量:指定读取值的变量名
15. shell编程系统函数(例子)
basename基本语法
功能:返回完整路径最后/的部分,常用于获取文件名
basename [pathname] [suffix]
basename [string] [suffix]
(功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。选项:suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。
案例1:请返回/home/aaa/test.txt的"test.txt"部分
basename /home/aaa/test.txt .txt
>test
dirname基本语法
功能:返回完整路径最后/的前面的部分,常用于返回路径部分dirname文件绝对路径
(功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))
案例1:请返回/home/aaa/test.txt的/home/aaa
dirname /home/aaa/test.txt
16.自定义函数
[function] funname [()]{
Action;
[returnint;]
}
17.shell编程综合案例
1)每天凌晨2:30备份数据库hspedu到/data/backup/db
2)备份开始和备份结束能够给出相应的提示信息
3)备份后的文件要求以备份时间为文件名,并打包成.tar.gz的形式,比如:2021-03-12_230201.tar.gz
4)在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除。
5)画一个思路分析图
6.日志管理
基本介绍
1)日志文件爱你是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关的信息、各种服务相关信息等。
2)日志对于安全来说也很重要,它记录了系统每天发生的各种事情,通过日志来检查错误发生的原因,或者受到攻击者留下的痕迹。
1.系统常用的日志
/var/log 目录就是系统日志文件存放的位置
系统常用日志
使用root用户通过远程登录,输入一次错误的密码。然后查看secure日志。
2.日志管理服务rsyslogd
CentOS7.6 日志服务是rsyslogs,rsyslogs功能更强大。
/etc/rsyslog.config这个配置文件管理了所有日志配置。
查询Linux中的rsyslogd服务是否启动
ps aux|grep"rsyslog" | grep-v"grep"
查询rsyslogd服务的自启动状态
systemctl list-unit-files|grep rsyslog
配置文件:/etc/rsyslog.conf
编辑文件时的格式为:*.*存放日志文件其中第一个*代表日志类型,第二个*代表日志级别
这里就配置了所有的日志文件输出。
比如mail.*就是记录邮件日志的信息。后面的*代表所有级别。最后面的路径是保存路径。
1)日志类型分为:
auth ##pam产生的日志
authpriv ##ssh、ftp等登录信息的验证信息
corn ##时间任务相关
kern ##内核
lpr ##打印
mail ##邮件
mark(syslog)-rsyslog ##服务内部的信息,时间标识
news ##新闻组
user ##用户程序产生的相关信息
uucp ##unixtonuixcopy主机之间相关的通信
local1-7 ##自定义的日志设备
2)日志级别分为:
debug ##有调试信息的,日志通信最多
info ##一般信息日志,最常用
notice ##最具有重要性的普通条件的信息
warning ##警告级别
err ##错误级别,阻止某个功能或者模块不能正常工作的信息
crit ##严重级别,阻止整个系统或者整个软件不能正常工作的信息
alert ##需要立刻修改的信息
emerg ##内核崩溃等重要信息
none ##什么都不记录
由日志服务rsyslogd记录的日志文件,日志文件的格式包含以下4列:
1)事件产生的时间
2)产生事件的服务器的主机名
3)产生事件的服务名或程序名
4)事件的具体信息
日志管理服务应用实例。
在/etc/rsyslog.conf中添加一个日志文件/var/log/hsp.log,当有事件发送时(比如sshd服务相关事件),该文件会接收到信息并保存.给小伙伴演示重启,登录的情况,看看是否有日志保存
3.日志轮替
日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除
日志轮替文件命名
1)centos7使用logrotate进行日志轮替管理,要想改变日志轮替文件名字,通过/etc/logrotate.conf配置文件中“dateext”参数:
2)如果配置文件中有“dateext”参数,那么日志会用日期来作为日志文件的后缀,例如“secure-20201010”。这样日志文件名不会重叠,也就不需要日志文件的改名,只需要指定保存日志个数,删除多余的日志文件即可。
3)如果配置文件中没有“dateext”参数,日志文件就需要进行改名了。当第一次进行日志轮替时,当前的“secure”日志会自动改名为“secure.1”,然后新建“secure”日志,用来保存新的日志。当第二次进行日志轮替时,“secure.1”会自动改名为“secure.2”,当前的“secure”日志会自动改名为“secure.1”,然后也会新建“secure”日志,用来保存新的日志,以此类推。
日志轮替规则参数说明:
daily 日志的轮替周期是每天
weekly 日志的轮替周期是每周
monthly 日志的轮替周期是每月
rotate 数字保留的日志文件的个数。0指没有备份
compress 日志轮替时,旧的日志进行压缩
createmodeownergroup 建立新日志,同时指定新日志的权限与所有者和所属组。
mailaddress 当日志轮替时,输出内容通过邮件发送到指定的邮件地址。
missingok 如果日志不存在,则忽略该日志的警告信息
notifempty 如果日志为空文件,则不进行日志轮替
minsize 大小日志轮替的最小值。也就是日志一定要达到这个最小值才会轮替,否则就算时间达到也不轮替size大小日志只有大于指定大小才进行日志轮替,而不是按照时间轮替。
dateext 使用日期作为日志轮替文件的后缀。
为自己的日志加入日志轮替
1)第一种方法是直接在/etc/logrotate.conf配置文件中写入该日志的轮替策略
2)第二种方法是在/etc/logrotate.d/目录中新建立该日志的轮替文件,在该轮替文件中写入正确的轮替策略,因为该目录中的文件都会被“include”到主配置文件中,所以也可以把日志加入轮替。
3)推荐使用第二种方法,因为系统中需要轮替的日志非常多,如果全都直接写入/etc/logrotate.conf配置文件,那么这个文件的可管理性就会非常差,不利于此文件的维护
日志轮替的机制原理
日志轮替之所以可以在指定的时间备份日志,是依赖系统定时任务。在/etc/cron.daily/目录,就会发现这个目录中是有logrotate文件(可执行),logrotate通过这个文件依赖定时任务执行的。通过crond后台程序。
查看日志内存
journalctl 可以查看内存日志,这里我们看看常用的指令
journalctl ##查看全部
journalctl -n 3 ##查看最新3条
journalctl --since19:00 --until19:10:10#查看起始时间到结束时间的日志可加日期
journalctl -p err##报错日志
journalctl -o verbose##日志详细内容
journalctl_PID=1245 _COMM=sshd##查看包含这些参数的日志(在详细日志查看)
或者 journalctl | grep sshd