Linux高级管理
文章目录
- Web网站服务专业术语
- HTTP协议概述
- HTTP资源概述
- LAMP部署文档
- Apache部署
- Apache应用
- MySQL部署
- PHP部署
- 测试LAMP环境是否可用
- LAMP架构应用实例
- KVM 虚拟化
- 虚拟化概述
- 操作系统基本符号说明
- 基础符号系列
- 引号符号系列
- 重定向输出、输入符号
- 路径信息系列
- 逻辑符号系列
- 系统通配符号系列
- 操作系统正则符号说明
- 基础正则符号
- 扩展正则符号
- 三剑客常用操作
- 三剑客简介
- sed命令相关
- awk相关
- Shell基础
- 关于bash和shell
- shell变量
- 特殊的shell变量
- 条件测试相关
- Shell语法
- if语句
- for语句
- while语句
- case语句
Web网站服务专业术语
HTTP协议概述
1、TCP协议与HTTP协议
1.TCP协议主要用于数据传输控制,而HTTP协议主要用于应用层面的数据交互。
2.HTTP属于应用层协议,是建立在TCP协议基础之上的,HTTP协议以客户端请求和服务器端响应为标准,浏览器通常称之为客户端,而Web服务器称之为服务器。客户端打开任意一个端口向服务端的指定端口(默认80)发起HTTP请求,首先会先发起TCP三次握手,TCP三次握手的目的是建立可靠的数据连接通道,TCP三次握手通道建立完毕,进行HTTP数据交互。
3.HTTP协议从诞生之初到现在经历了若干个版本,其中最主要的版本为:HTTP 1.0、HTTP 1.1,其中HTTP 1.0是第一个得到广泛应用的版本,而HTTP 1.1为当前使用的主流版本。
2、HTTP请求方法
1.在HTTP通信中,每个HTTP请求报文都包含一个方法。用以告诉Web服务器端需要执行什么具体的动作,这些动作包括:获取指定Web页面、提交内容到服务器、删除服务器上的资源文件等,这些HTTP请求报文中包含的方法被称为HTTP请求方法。
2.常用的HTTP请求方法GET:从服务器获取资源(如页面、图像、音频、视频等)。GET请求可以缓存,并且会将数据作为URL的一部分来发送。POST:向服务器提交要处理的数据,例如在Web表单中输入的数据。POST请求不会缓存,而且不会将数据作为URL的一部分来发送。PUT:将请求的资源存储在指定的URL下。PUT请求可以用于创建或更新资源。DELETE:删除指定的URL的资源。HEAD:获取资源的元数据,而不获取资源本身。HEAD请求通常用于检查资源是否存在,以及获取资源的大小和类型等信息。
3、HTTP状态码
1.HTTP状态码(HTTP Status Code)是用来表示Web服务器响应HTTP请求状态的数字代码。每当Web客户端向Web服务器发送一个HTTP请求时,Web服务器都会返回一个状态响应代码。这个状态码是一个三位数字代码,作用是告知Web客户端此次的请求是否成功,或者是否要采取其他的动作方式。
2.HTTP状态码分类1xx(信息性状态码):表示请求已被接收,继续处理。2xx(成功状态码):表示请求已成功被服务器接收、理解、并接受。3xx(重定向状态码):表示需要客户端采取进一步的操作才能完成请求。4xx(客户端错误状态码):表示客户端发送的请求有错误,常见的有404 Not Found(请求的资源不存在)和403 Forbidden(请求被拒绝)。5xx(服务器错误状态码):表示服务器在处理请求时发生了错误,常见的有500 Internal Server Error(服务器内部错误)和503 Service Unavailable(服务器暂时不可用)。
3.HTTP状态码的命令行查看:curl -I 192.168.1.11
4、HTTP协议原理及重点分析
1.整个HTTP协议请求的工作流程用户在Web浏览器地址栏输入访问地址Web浏览器请求DNS服务器将域名解析为Web服务器的IP地址Web浏览器将端口号(默认是80)从访问地址(URL)中解析出来Web浏览器通过解析后的IP地址及端口号,与Web服务器之间建立一条TCP连接(三次握手)建立TCP连接后,Web浏览器向Web服务器发送HTTP请求报文Web服务器响应并读取浏览器的请求信息,然后返回HTTP响应报文Web浏览器解析HTTP响应报文并显示所请求的资源。Web服务器关闭HTTP连接,关闭TCP连接(四次挥手)
2.涉及到的重要知识点用户访问网站的流程。DNS解析流程细节。建立TCP连接过程,涉及TCP/IP 3次握手原理知识。发送HTTP报文及HTTP请求报文内容细节。Web服务器响应客户端请求处理细节。响应HTTP报文及HTTP响应报文的细节。关闭TCP连接,涉及TCP/IP协议4次挥手原理知识。
3。Linux下实践观察HTTP协议的通信过程:curl -v 192.168.1.11
HTTP资源概述
1、媒体类型
1.互联网上的数据有很多不同的数据类型,Web服务器会把通过Web传输的每个对象都打上名为MIME类型的数据格式标签。最初设计MIME(Multipurpose Internet Mail Extension,多用途因特网邮件扩展)是为了解决在不同的电子邮件系统之间搬移报文时存在的问题。MIME在电子邮件系统中工作得非常好,后来,HTTP也支持了这个功能,用它来进行数据描述并标记不同的数据内容类型。当Web服务器响应HTTP请求时,会为每一个HTTP对象数据加一个MIME类型。
2.当Web浏览器获得服务器返回的对象时,会去查看相关的MIME类型,进行相应处理。MIME类型存在于HTTP响应报文的响应头部信息里,它是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间由一条斜杠来分隔。
3.常见的MIME类型text/html:HTML网页文件的MIME类型text/plain:纯文本文件的MIME类型,例如txt文件application/json:JSON格式数据的MIME类型application/pdf:PDF文件的MIME类型image/jpeg:JPEG图片文件的MIME类型image/png:PNG图片文件的MIME类型image/gif:GIF图片文件的MIME类型audio/mpeg:MP3音频文件的MIME类型video/mp4:MP4视频文件的MIME类型application/xml:XML文件的MIME类型
2、URL和URI介绍
1.URL:全称Uniform Resource Location,中文翻译为统一资源定位符,也被称为网页地址(网址)。如同网络上的门牌,它是因特网上标准的资源唯一地址。通俗地说,URL是Interne上用来描述信息资源的字符串,主要用在各种WWW客户端和服务器程序上。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。严格来讲,每个URL都是一个URI,它标识一个互联网资源,并指定对其进行操作或取得该资源的方法。URL的格式由下列3部分组成:第一部分是协议,如HTTP、HTTPS;第二部分是主机资源服务器IP地址或域名(端口号),如www.chengdu.com;第三部分是主机资源的具体地址,如目录和文件名等,如gaoxin/index.html。第一部分和第二部分之间用://符号隔开,第二部分和第三部分之间用/符号隔开。第一部分和第二部分是不可缺少的,第三部分可以省略。
2.URI:全称Uniform Resource Identifier,中文翻译为统一资源标识符,是一个用于标识某一互联网资源名称的字符串。这个字符串在世界范围内唯一标识并定位某一个信息资源。互联网上每个可用的数据资源,如HTML、图片、视频等皆通过统一资源标识符进行定位。
3.二者的区别URI(Uniform Resource Identifier)是一种标识某个资源的方式,而URL(Uniform Resource Locator)则是一种URI的具体实现。URI是一个字符序列,用于标识互联网上的一个资源,可以是网页、图片、视频、文本文件等。它由三个部分组成:方案(scheme)、主机名(host)和路径(path)。例如,http://www.example.com/index.html 是一个URI,其中方案是http,主机名是www.example.com,路径是/index.html。URL是一种URI的具体实现,用于指定资源在互联网上的位置。URL包含了URI所需的三个部分,以及其他可选的组件,例如端口号、查询参数和片段标识符等。例如,http://www.example.com/index.html 是一个URL,其中方案是http,主机名是www.example.com,路径是/index.html。因此,URL是URI的一种特殊形式。所有的URL都是URI,但并不是所有的URI都是URL。如果一个URI只包含方案和路径,而没有主机名,则它不是一个URL,但仍然是一个有效的URI。
3、静态、动态网页资源
1.静态网页资源是指网页在服务器端预先生成,然后直接发送给客户端的网页资源。这些网页资源通常是以HTML、CSS、JavaScript、图片等文件的形式存储在服务器上。当客户端请求这些资源时,服务器会直接将对应的文件发送给客户端,而不需要在发送前对其进行任何处理。静态网页资源的优点是处理速度快、请求处理成本低、稳定性高等,缺点是不能根据客户端请求的不同生成不同的网页内容。
2.动态网页资源是指在服务器端根据客户端请求动态生成的网页资源。这些资源通常是通过在服务器端运行脚本来生成的,例如PHP、Python、Java等。在处理动态网页资源时,服务器会根据客户端请求的参数来生成相应的HTML页面,并将该页面发送给客户端。动态网页资源的优点是可以根据客户端请求的不同生成不同的网页内容,缺点是处理速度相对较慢,请求处理成本较高。
3.在实际应用中,静态网页资源和动态网页资源常常会结合使用,以达到最佳的网页性能和用户体验。通常情况下,静态网页资源被用来展示网页的基本结构和样式,而动态网页资源则被用来展示个性化的内容和交互效果。
4、网站流量度量术语
1.浏览量(Pageviews):指用户在访问网站时,打开网站的每一个页面被计算为一次浏览量,即每个页面的访问次数。
2.访客数(Unique visitors):指访问网站的独立用户数量,同一个用户在一天内多次访问仅算一次。
3.访问次数(Visits):指用户在一定时间内(通常是一天)内,访问网站的次数。一个用户在一天内访问同一个网站多次,每次访问均被计为一次访问次数。
4.跳出率(Bounce rate):指用户在访问网站后,在不浏览任何其他页面的情况下直接离开的比例,通常以百分比表示。
5.平均访问时长(Average session duration):指用户在一次访问中停留在网站上的平均时间长度。
6.转化率(Conversion rate):指访问网站后,用户进行了预定、购买、注册等操作的比例,通常以百分比表示。
7.流量来源(Traffic sources):指用户访问网站的来源,可以分为直接流量、搜索引擎流量、推广流量等。
8.地域分布(Geographic location):指访问网站的用户所在的地理位置,通常以国家或地区为单位进行统计。
9.设备分布(Device type):指用户访问网站的设备类型,如PC、手机、平板等。
5、网站并发连接
1.网站并发连接:指在同一时间内,向同一个网站发起的连接数。
2.在实际应用中,网站并发连接是一个非常重要的指标,因为它直接影响着网站的稳定性和性能。当网站并发连接数过高时,会导致服务器负载过重,网站响应时间变慢甚至崩溃,影响用户体验和网站的可用性。因此,网站管理者通常需要对网站并发连接数进行监控和管理,以确保网站能够稳定运行。
3.为了管理并发连接数,常见的做法是使用负载均衡和流量控制等技术。负载均衡可以将网站流量分发到多个服务器上,从而降低单个服务器的负载压力,提高网站的可用性。流量控制则可以限制单个用户的连接数,以减少对服务器的负载影响,同时保护网站的安全性。
6、当前互联网主流Web服务软件
1.Apache HTTP Server:Apache是一款免费开源的Web服务器软件,被广泛应用于Linux和其他Unix系统中。它具有高度可配置性、稳定性和安全性,是目前最流行的Web服务器之一。
2.Nginx:Nginx是一款高性能的Web服务器和反向代理服务器,它的设计目标是提供高并发、低内存占用和高度可扩展的服务。Nginx可以支持数以万计的并发连接,是处理大量请求的理想选择。
3.Microsoft IIS:Microsoft IIS是由微软公司开发的Web服务器软件,可以在Windows操作系统上运行。IIS具有高度集成性和易用性,是企业级Web应用程序的理想选择。
4.Lighttpd:Lighttpd是一款轻量级的Web服务器软件,具有高度可扩展性和高性能。它被广泛应用于各种高流量和负载平衡的Web应用程序中。
5.Tomcat:Tomcat是一款开源的Java Web服务器软件,由Apache软件基金会开发。它具有高度可移植性和可扩展性,被广泛应用于Java Web应用程序的开发和部署
LAMP部署文档
Apache部署
1、安装Apache
1.上传httpd源码包至服务器
2.确认httpd服务是否安装,并安装2.4版本所需依赖包
# rpm -qa httpd若提示已安装则进行卸载,未安装则直接执行第3步:
# rpm -e httpd --nodeps
# yum install -y apr apr-devel cyrus-sasl-devel expat-devel libdb-devel openldap-devel apr-util-devel apr-util pcre-devel pcre gcc gcc-c++ make lrzsz3.解压并指定解压目录(rz传软件包)
# tar zxf httpd-2.4.25.tar.gz -C /usr/src/
进入解压目录
# cd /usr/src/httpd-2.4.25/
4.执行配置:
# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi
其中选项作用如下:
--prefix:指定将httpd服务程序安装到哪个目录,如/usr/local/httpd。若不指定安装目录,默认安装在/usr/local/apache2目录下
--enable-so:启用动态加载模块支持,使httpd具备进一步扩展功能的能力。
--enable-rewrite:启用网页地址重写功能,用于网站优化及目录迁移维护。
--enable-charset-lite:启动字符集支持,以便支持使用各种字符集编码的网页。
--enable-cgi:启用CGI脚本程序支持,便于扩展网站的应用访问能力。5.执行编译以及安装:
# make && make install
6.确认安装成功,进入安装目录查看是否有文件存在
# cd /usr/local/httpd/
# ls
7.优化路径方便管理:
# ln -s /usr/local/httpd/bin/* /usr/local/bin/ //文件链接# httpd -v //查看当前httpd程序版本
8.设置为开机自启:centos 7.5:
创建Apache 系统控制文件:
# vim /lib/systemd/system/httpd.service
[Unit]
Description=The Apache HTTP Server
After=httpd.target[Service]
Type=forking
PIDFile=/usr/local/httpd/logs/httpd.pid
ExecStart=/usr/local/bin/apachectl $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=1s[Install]
WantedBy=multi-user.target //最小化安装或者桌面版本 /graohical.target# systemctl daemon-reload //重载systemctl系统
# systemctl enable httpd.service //将httpd服务设置为开机自启以下两种方法都可查询开机是否启动:
# systemctl list-unit-files | grep httpd.service
# systemctl is-enabled httpd
2、主要文件及目录
程序安装目录:/usr/local/httpd/
主配置文件:/usr/local/httpd/conf/httpd.conf
网页目录:/usr/local/httpd/htdocs/
服务脚本:/usr/local/httpd/bin/apachectl
主程序:/usr/local/httpd/bin/httpd
访问日志: /usr/local/httpd/logs/access_log
错误日志: /usr/local/httpd/logs/error_log
3、配置服务器
修改主机名
# vim /etc/sysconfig/network
HOSTNAME=www.chengdu.com //修改主机名,用于域名解析,可不更改
在主配置文件中添加主机名:
# vim /usr/local/httpd/conf/httpd.conf
ServerName www.chengdu.com //添加此项(斜杠搜索ServerName,默认被注释了)
检查配置文件是否正常:
# apachectl -t //提示OK 则正常
启动HTTPD服务:
# systemctl start httpd
查看运行的进程,有进程表示启动成功
# ps aux | grep httpd
修改默认显示网页
# vim /usr/local/httpd/htdocs/index.html
www.chengdu.com //加入此内容客户机通过服务器IP地址进行访问:服务器中查看客户机访问日志记录:
# tail /usr/local/httpd/logs/access_log
4、常用的全局配置参数
ServerRoot:服务目录
ServerAdmin:管理员邮箱
User:运行服务的用户身份
Group:运行服务的组身份
ServerName:网站服务器的域名
DocumentRoot:网页文档的根目录
Listen:监听的IP地址、端口号
PidFile:保存httpd进程PID号的文件
DirectoryIndex:默认的索引页文件
AddDefaultCharset UTF-8 设置字符集
常用的全局配置参数(续)
ErrorLog:错误日志文件的位置
CustomLog:访问日志文件的位置
LogLevel:记录日志的级别,默认为warn
Timeout:网络连接超时,默认为300秒
KeepAlive:是否保持连接,可选On或Off
MaxKeepAliveRequests:每次连接最多请求文件数
KeepAliveTimeout:保持连接状态时的超时时间
Include:需要包含进来的其他配置文件
Apache应用
1、客户机地址限制
Require all granted //允许访问策略
Require all denied //拒绝访问策略
Require local //只允许本地访问
Require [not] host <主机名或域名列表>
Require [not] ip <ip地址或网段列表>举例1:表示只禁止IP 1.1访问服务<RequireAll> //使用"not"需要用到此标签,将该段加入到项目中Require not ip 192.168.1.1Require all granted</RequireAll>举例2:表示只允许IP 1.0网段和2.0网段访问服务,不需要使用 <RequireAll>标签Require ip 192.168.1.0/24 192.168.2.0/24Require ip 192.168.1.1/32 192.168.0.0/16
被拒绝的主机连接服务器将会显示403错误
2、用户授权访问
认证就是客户端要给服务器出示一些自己的身份证明,来证明自己是谁!一旦服务器知道了客户端的身份,就可以判定客户端可以访问的事务和资源了。 在HTTP中,认证通常是通过提供用户名和密码来进行认证的。
http服务支持两种认证方式:摘要认证(需要模块功能支持,更加安全的方式传递验证信息)、基本认证。
基本认证:基于用户访问控制包括认证和授权,
认证:指识别用户身份的过程
授权:指允许特定用户访问特定目录区域的过程1.创建用户认证数据文件
# cd /usr/local/httpd
# bin/htpasswd -c /usr/local/httpd/conf/.awspwd webadmin //创建授权访问的用户账户文件
# bin/htpasswd /usr/local/httpd/conf/.awspwd webadmin1 //添加新用户时不需要-c选项
2.添加用户授权配置
# vim /usr/local/httpd/conf/httpd.conf
<Directory "/usr/local/httpd/htdocs"> //在此行下添加Authname "AAA"Authtype BasicAuthuserfile /usr/local/httpd/conf/.awspwdrequire valid-user //valid-user:代表所有列表中的用户,若需要指定单个用户可修改为:require webadmin注意:当设置了主机访问控制的同时配置了验证访问,主机访问控制生效。
# Require all granted //配置了主机访问又配置了验证访问,因此需要关闭主机访问控制。Authname "AAA"Authtype BasicAuthuserfile /usr/local/httpd/conf/.awspwdrequire valid-user需求1:
允许192.168.1.254直接访问,而其他人输入密码才能访问:Require ip 192.168.1.253Authname "AAA"Authtype BasicAuthuserfile /usr/local/httpd/conf/.awspwdrequire valid-user
需求2:
拒绝一个地址访问而允许其他人认证访问:Require not ip 192.168.1.100Authname "AAA"Authtype BasicAuthuserfile /usr/local/httpd/conf/.awspwdrequire valid-userRequire all granted
3、构建虚拟web主机
能够让一台web服务器同时存在多个站点!1.基于域名的虚拟主机 ****
通过两个域名访问到不同内容
1.1安装配置DNS服务器用于域名解析
# yum install -y bind
# mv /etc/named.conf /etc/named.conf.bak
# vim /etc/named.conf
options {directory "/var/named";
};
zone "chengdu.com" IN {type master;file "chengdu.com.zone";
};
zone "shanghai.com" IN {type master;file "shanghai.com.zone";
};
# vim /var/named/chengdu.com.zone
$TTL 600
@ IN SOA chengdu.com. admin.chengdu.com.(201704051d5d2D6h
)
@ IN NS ns1.chengdu.com.
ns1 IN A 192.168.1.10
www IN A 192.168.1.10# vim /var/named/shanghai.com.zone
$TTL 600
@ IN SOA shanghai.com. admin.shanghai.com.(201704051H5M2D6h
)
@ IN NS ns1.shanghai.com.
ns1 IN A 192.168.1.10
www IN A 192.168.1.10# systemctl restart named 1.2.准备虚拟主机网页文档
# mkdir /var/wwwchengdu /var/wwwshanghai //创建两台虚拟主机网页根目录# echo "www.chengdu.com" > /var/wwwchengdu/index.html //生成网页文件内容
# echo "www.shanghai.com" > /var/wwwshanghai/index.html1.3.以独立的形式创建虚拟主机配置文件
# mv /usr/local/httpd/conf/extra/httpd-vhosts.conf /usr/local/httpd/conf/extra/httpd-vhosts.conf.bak
# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
<VirtualHost 192.168.1.10:80>DocumentRoot "/var/wwwchengdu"ServerName www.chengdu.comErrorLog "logs/www.chengdu.com.error.log"CustomLog "logs/www.chengdu.com.custom.log" common
</VirtualHost><VirtualHost 192.168.1.10:80>DocumentRoot "/var/wwwshanghai"ServerName www.shanghai.comErrorLog "logs/www.shanghai.com.error_log"CustomLog "logs/www.shanghai.com.access_log" common
</VirtualHost>注意:也可以将以上所有配置文件直接放在httpd.conf中设置虚拟主机时需要注意:1.修改主配置文件,确定主配置文件没有访问限制拒绝策略2.将 "/"区域设置为允许所有人访问:<Directory /> //此区域中将拒绝所有改为允许所有AllowOverride noneRequire all granted //将拒绝改为允许</Directory>3.在主配置文件中加入引用虚拟主机配置文件项:# vim /usr/local/httpd/conf/httpd.confInclude conf/extra/httpd-vhosts.conf# systemctl restart httpd
验证:访问chengdu域名能够看到chengdu内容 访问shanghai能够看到shanghai内容2.基于端口的虚拟主机
访问www.chengdu.com 得到的网页信息:www.chengdu.com
访问www.chengdu.com:8080 得到的网页信息:www.shanghai.com
在原配置文件中将shanghai的端口号改为8080,在httpd.conf中添加监听端口8080,重启访问服务即可
# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
找到shanghai配置区域
<VirtualHost 192.168.1.10:8080> //修改为8080DocumentRoot "/var/wwwshanghai"ServerName www.chengdu.com //域名改为www.chengdu.com ErrorLog "logs/www.shanghai.com.error_log"CustomLog "logs/www.shanghai.com.access_log" common
# vim /usr/local/httpd/conf/httpd.conf
Listen 8080 //添加监听端口# systemctl restart httpd //重启服务验证
www.chengdu.com //能够访问到chengdu页面
www.chengdu.com:8080 //能够访问到shanghai页面3.基于IP的虚拟主机
192.168.1.11 www.chengdu.com
192.168.1.12 www.shanghai.com
# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
<VirtualHost 192.168.1.11:80> //将shanghai.com段修改IP为11DocumentRoot "/var/wwwshanghai"ServerName www.shanghai.comErrorLog "logs/www.shanghai.com.error_log"CustomLog "logs/www.chengdu.com.access_log" common
</VirtualHost>开放IP加端口的监听
Listen 192.168.1.10:80
Listen 192.168.1.11:80
#Listen 192.168.1.10:8080 //禁用此项修改DNS解析:
# vim /var/named/shanghai.com.zone@ IN SOA shanghai.com. admin.shanghai.com.(201704051H5M2D6h
)
@ IN NS ns1.shanghai.com.
ns1 IN A 192.168.1.11 //修改为11
www IN A 192.168.1.11 //修改为11# ifconfig ens33 192.168.1.11/24
# systemctl restart named
# systemctl restart httpd注意:需要将虚拟机两张网卡都设置为同一个vmnet网卡,便于客户端访问验证
验证:通过域名shanghai能够看到shanghai内容
通过域名chengdu能够看到chengdu内容通过nslookup也能够解析到shanghai域名的IP为11,chengdu的IP为10
直接通过IP 192.168.1.10能够访问到chengdu页面
直接通过IP 192.168.1.11能够访问到shanghai页面
MySQL部署
1.CentOS7系统默认可能会安装MariaDB,因此查询是否已经以rpm方式安装,若有即卸载。
# rpm -e mariadb
2.安装mysql运行所需依赖软件
# yum install -y gcc gcc-c++ make ncurses-devel autoconf lrzszncurses 字符终端处理库,包括面板和菜单等功能
autoconf //兼容多系统进行make编译上传 cmake、mysql至服务器(rz上传)
# tar zxvf cmake-2.8.6.tar.gz -C /usr/src
# cd /usr/src/cmake-2.8.6
# ./configure
# make && make install
3.编译安装mysql
# cd
# tar zxf mysql-5.6.36.tar.gz -C /usr/src
# cd /usr/src/mysql-5.6.36/
# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc
-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all
其中选项作用如下:
-DCMAKE_INSTALL_PREFIX //程序安装路径
-DSYSCONFDIR //程序初始化目录,配置文件存放目录
-DDEFAULT_CHARSET //指定字符集
-DDEFAULT_COLLATION //指定字符集校对规则
-DWITH_EXTRA_CHARSETS //支持额外的字符集官方对相关配置选项的说明:
https://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html
# make && make install# useradd -M -s /sbin/nologin mysql //创建mysql运行用户和组
4.配置mysql
# chown -R mysql:mysql /usr/local/mysql
# cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf //复制mysql主配置文件到运行目录初始化数据库,以mysql用户运行初始化脚本并制定mysql数据库运行目录和数据存放目录
# /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/--user //指定运行用户
--basedir //指定安装目录
--datadir //指定数据库数据存放位置修改属主权限
# chown -R root /usr/local/mysql
# chown -R mysql /usr/local/mysql/data
设置变量环境,方便执行mysql命令,若不设置则只能够使用绝对路径命令执行
# echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
# . /etc/profile
添加为系统服务,方便控制mysql服务
# cp /usr/local/mysql/support-files/mysql.server /usr/local/mysql/bin/mysqld.sh# vim /lib/systemd/system/mysqld.service //注意要改为自己的主机名
[Unit]
Description=Mysql Server
After=mysqld.target[Service]
User=mysql
Type=forking
PIDFile=/usr/local/mysql/data/ch4ser.pid
ExecStart=/usr/local/mysql/support-files/mysql.server start
ExecStop=/usr/local/mysql/support-files/mysql.server stop[Install]
WantedBy=multi-user.target //Minimal 或者桌面/graohical.target# systemctl daemon-reload //重载systemctl守护进程
# systemctl enable mysqld.service //将mysqld服务设置为开机自启以下两种方法都可查询开机是否启动:
# systemctl list-unit-files | grep mysqld
# systemctl is-enabled mysqld.service# systemctl start mysqld
# netstat -anpt | grep mysqld //可查看mysql运行状态,端口号为tcp:3306管理使用mysql数据库
# mysql -u root -p //u指定用户,p指定密码,默认root无密码,回车即可
# mysqladmin -u root -p password //修改密码为root用户密码为123,需要回车输入原密码,默认密码为空
数据库中所有数据存放在/usr/local/mysql/data/中
通过用户登录mysql界面后需要执行mysql操作语句才能够实现管理mysql数据库
每条语句最后应当加上";" 输入语句可以不区分大小写,但是参数必须区分。
PHP部署
1.准备安装环境
卸载之前rpm方式安装的PHP程序# rpm -e php php-cli php-ldap php-common php-mysql --nodeps相关组件及依赖包:
# yum install -y zlib-devel libxml2-devel xz-devel2.安装三个加密扩展工具库:(rz上传libmcrypt、mhash、mcrypt)
# tar zxvf libmcrypt-2.5.8.tar.gz -C /usr/src/ //php加密算法扩展库程序
# cd /usr/src/libmcrypt-2.5.8/
# ./configure
# make && make install
# ln -s /usr/local/lib/libmcrypt.* /usr/lib/
# cd
# tar zxvf mhash-0.9.9.9.tar.gz -C /usr/src/
# cd /usr/src/mhash-0.9.9.9/
# ./configure
# make && make install
# ln -s /usr/local/lib/libmhash.* /usr/lib/
# cd
# tar zxvf mcrypt-2.6.8.tar.gz -C /usr/src/
# cd /usr/src/mcrypt-2.6.8/
# ./configure //如若提示版本小于2.5,则执行以下命令设置变量重新配置
# vim /etc/profile //编辑系统文件,在最后新起一行加入以下内容:
export LD_LIBRARY_PATH=/usr/local/lib: LD_LIBRARY_PATH
# . /etc/profile
# ./configure //设置变量后重新配置
# make && make install3.安装PHP
# yum install -y libjpeg-devel libpng-devel freetype-devel libtool* libtool-ltdl* libtool-ltdl-devel GD插件,提供验证码功能
(rz上传php)
# tar zxf php-5.5.38.tar.gz -C /usr/src
# cd /usr/src/php-5.5.38/
# ./configure --prefix=/usr/local/php5 --with-mcrypt --with-apxs2=/usr/local/httpd/bin/apxs --with-mysql=/usr/local/mysql/ --with-config-file-path=/usr/local/php5 --enable-mbstring --with-png-dir --with-freetype-dir --with-jpeg-dir --with-gd --libdir=/usr/lib64 --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-zip--prefix:指定安装目录
--with-mcrypt:加载数据加密等扩展工具支持
--with-apxs2:指定apache提供的apxs模块支持程序位置
--with-mysql:指定mysql数据库安装位置
--with-config-file-path:指定php配置文件php.ini将要存放的位置
--enable-mbstring:启用多字符串功能
--with-mysqli:mysql扩展功能make: *** [sapi/cli/php] 错误 1
# vim Makefile
EXTRA_LIBS = -liconv //88行左右此处添加如下内容: -liconv
或者:
#make clean
#make# make && make install4.设置LAMP运行环境
主要设置php.ini,用于确定PHP的运行参数,httpd.conf:用于加载libphp5.so,以便支持PHP网页
1.PHP.ini设置
PHP的配置文件在解压目录下,有两个配置文件,分别用于开发与生产
/usr/src/php-5.5.38/php.ini-development //开发版,用于测试、学习
/usr/src/php-5.5.38/php.ini-production //生产版,用于生产环境
将PHP.ini配置文件拷贝至安装目录下
# grep -v "^;" /usr/src/php-5.5.38/php.ini-development | grep -v "^$" > /usr/local/php5/php.ini
# vim /usr/local/php5/php.ini
在[PHP] 的下一行加入如下:
default_charset = "utf-8"
file_uploads = On
upload_max_filesize = 2M
max_file_uploads = 20M
post_max_size = 8M
extension = php_mysqli.dll
short_open_tag = On //修改自带的为on
分别是设置默认字符集、允许文件上传、上传文件最大限制、每个请求最多能够上传总数、通过post提交的数据量限制、识别PHP语法标记、以及添加mysql支持5.添加优化模块(rz上传php的补丁包zend-loader-php5.5-linux-x86_64_update1.tar.gz)
# tar zxf zend-loader-php5.5-linux-x86_64_update1.tar.gz -C /usr/src/
# cd /usr/src/zend-loader-php5.5-linux-x86_64/
# cp ZendGuardLoader.so /usr/local/php5/
# vim /usr/local/php5/php.ini //加入优化模块 [PHP]中
zend_extension=/usr/local/php5/ZendGuardLoader.so
zend_loader.enable=16.httpd.conf配置调整
# vim /usr/local/httpd/conf/httpd.conf
找到如下项,大概在159行左右,在此项下一行添加如下二行内容:
LoadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php //此行为添加项
LoadModule rewrite_module modules/mod_rewrite.so //此行为添加项
找到如下项,大概在261行左右,在末尾加上"index.php",效果如下图DirectoryIndex index.html index.php //index.php为后添加
# systemctl restart httpd
测试LAMP环境是否可用
1.设置php网页进行测试
# vim /usr/local/httpd/htdocs/test.php
添加如下内容:
<?php
phpinfo( );
?>用于显示服务器PHP环境信息的网页
客户机进行访问测试:http://192.168.1.100/test.php2.测试PHP是否能够访问Mysql数据库
# vim /usr/local/httpd/htdocs/test1.php //新建mysql连接网页
以下为php5.3推荐的写法,在5.5中被遗弃,因此在5.5中写以下内容后,虽然能够连接成功,但是会提示"不建议用mysql 而是用mysqli",因此5.5版本的php用第二部分的网页内容,主要是将MySQL改为了MySQLi
5.3适用网页内容:
<?php
$link=mysql_connect('localhost','root','123456'); //设置登录信息,连接mysql
if($link) echo "恭喜你,数据库连接成功!"; //连接成功后返回的结果
mysql_close(); //关闭连接
?>5.5适用网页内容:
<?php
$link=mysqli_connect('localhost','root','123456');
if($link) echo "恭喜你,数据库连接成功!";
mysqli_close($link);
?># mysqladmin -u root -p password //设置mysql密码为 123456
Enter password: //默认密码为空 ,回车即可
New password:
Confirm new password: 客户机进行访问测试:http://192.168.1.100/test1.php
LAMP架构应用实例
1、部署phpMyAdmin系统(rz上传phpMyAdmin)
1.解包并移动至网页根目录
# tar zxf phpMyAdmin-4.7.2-all-languages.tar.gz -C /usr/local/httpd/htdocs/
# cd /usr/local/httpd/htdocs
# mv phpMyAdmin-4.7.2-all-languages/ phpMyAdmin
生成配置文件
# cd phpMyAdmin/
# cp config.sample.inc.php config.inc.php 浏览器访问
http://192.168.1.100/phpMyAdmin/
用户名密码均为mysql系统中的授权信息,如root 123456出现的问题:
1.在配置php时,如出现"Sorry, I cannot run apxs. Possible reasons follow:"解决方案:
# vim /usr/local/httpd/bin/apxs
#! /usr/bin/perl -w //将第一行修改为此内容2.phpmyadmin在web界面进行登录无反应,解决方案:修改系统时间为当前时间即可修改
2、部署skyuc(rz上传skyuc)
# yum install -y unzip
# unzip SKYUC.v3.4.2.SOURCE.zip
# cp -rf SKYUC.v3.4.2.SOURCE/wwwroot/ /usr/local/httpd/htdocs/skyuc/
# cd /usr/local/httpd/htdocs/skyuc/
# chown -R daemon:daemon admincp/ data/ templates/ upload/
[root@pillarx1d ~]# mysql -u root -p
mysql> create database skyucdb;
mysql> grant all on skyucdb.* to skyuc@localhost identified by 'Aa123456';
//用户名skyuc,数据库主机localhost,数据库名skyucdb
http://192.168.1.100/skyuc点击"立即安装"时报错:
Deprecated: mysql_escape_string(): This function is deprecated; use mysql_real_escape_string() instead. in /usr/local/httpd/htdocs/skyuc/wwwroot/includes/class_core.php on line 811OK
解决方法:
# vim /usr/local/httpd/htdocs/skyuc/wwwroot/includes/class_core.php
找到171行中将"mysql_escape_string"改为:"mysql_real_escape_string"点击"立即安装"时报错:
Strict Standards: Non-static method Shutdown::init() should not be called statically, assuming $this from incompatible context in /usr/local/httpd/htdocs/skyuc/wwwroot/includes/class_core.php on line 24462446行可以禁用后端连接为:192.168.1.10/skyuc/admincp
3、部署discuz(rz上传discuz)
[root@pillarx1d ~]# mysql -u root -p
mysql> create database bbsdb;
mysql> grant all on bbsdb.* to bbs@localhost identified by 'Aa123456';# yum install -y unzip
# unzip Discuz_7.0.0_FULL_SC_UTF8.zip
# cd Discuz_7.0.0_FULL_SC_UTF8
# cp -rf upload/ /usr/local/httpd/htdocs/bbs
# cd /usr/local/httpd/htdocs/bbs/
# chown -R daemon config.inc.php attachments/ forumdata/ uc_client/data/cache/ templates/ uc_server网页访问安装页面:
192.168.1.10/bbs/installhttp://192.168.1.10/bbs/admincp.php //后台
http://192.168.1.10/bbs/index.php //首页根据报错进行修改:
# vim /usr/local/php5/php.ini
short_open_tag = On //将off修改为on
# /etc/init.d/httpd restart
KVM 虚拟化
虚拟化概述
1、什么是虚拟化技术?
1.虚拟化技术是一种在单个计算机上运行多个虚拟机的技术2.虚拟化技术将物理计算机的资源(如处理器、内存、存储和网络)分割成多个虚拟实例,并为每个实例提供一份独立的资源3.虚拟化技术可以提高资源的利用率,使得多个操作系统和应用程序可以在同一台计算机上并行运行,提高了计算机的可靠性、安全性和灵活性
举一个实际例子,假设你有 3 台物理服务器,分别用于不同的用途,每台服务器仅使用了大约 30% 的能力,没有完全发挥它们的潜能
借助虚拟化技术,能够将其使用率从 30% 提高到 60%,甚至提高到 90%
这样一来,虽然使用相同的硬件,但可以更加高效地利用这些资源,并且降低了成本


2、虚拟化技术工作原理
1.虚拟化技术通过 "Hypervisor(虚拟机监视器)" 和 "硬件虚拟化技术" 将物理计算机的资源划分为多个独立的虚拟机实例每个虚拟机可以运行自己的操作系统和应用程序,这样可以提高计算资源的利用率,提供灵活性和可扩展性,并实现资源的隔离和安全性2."Hypervisor"负责管理和分配计算机的资源,比如处理器、内存、存储和网络它确保每个虚拟机都能获得自己所需的资源,并且互相之间不会干扰每个虚拟机被分配一部分计算机资源,就好像它们独占地使用这些资源一样3."硬件虚拟化技术"使得虚拟机就能够直接与物理计算机的硬件进行交互,而不会产生冲突这使得虚拟机可以以接近真实电脑的方式运行,同时提供了良好的性能
操作系统基本符号说明
基础符号系列
1.美元符号:$ //取变量内容、配合awk去列、普通用户提示符、
2.叹号符号: ! //取反、强制
3.竖线符号: | //前一个命令执行结果交给后面命令处理
4.xargs: //将信息进行分组显示
1.同时创建多个文件,并查看这些文件中的内容:
touch abc{1..9}.txt
find / -maxdepth 2 -type f -name "abc*" | xargs cat2.将查询到的多个文件的详细信息显示出来:
find / -name "abc*" | xargs ls -l3.删除所创建的多个文件
find / -maxdepth 2 -type f -name "abc*" | xargs rm -rf4.查找出*.txt文件,批量复制到/tmp目录
find /root -type f -name "*.txt" | xargs cp -t /tmp
#find /root -type f -name "*.txt" | xargs -i cp {} /tmp5.查找出*.txt文件,批量移动到/tmp目录
find /root -type f -name "*.txt" | xargs mv -t /tmp
引号符号系列
1.单引号'' 输出的信息,写什么显示什么
2.双引号"" 和单引号功能类似 但对特殊信息会做解析
3.反撇号`` 里面的内容可以被当成命令执行
4.$($()) 将括号中的命令先执行,将执行结果交给括号外面的命令进行处理
1.echo '$PATH' 结果为$PATH2.echo "$PATH" 结果为/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin3.`echo pwd` 结果为/root4.查看sshd_config文件所属RPM软件包的详细信息
rpm -qi (rpm -qf $(find / -name 'sshd_config'))
重定向输出、输入符号
> 1> 标准输出重定向符号
2> 错误输出重定向符号
>> 1>> 标准输出追加重定向符号
2>> 错误输出追加重定向符号
&> 正确、错误都重定向输出< 标准输入重定向符号
<< 标准输入追加重定向符号
1.将正确、错误信息以追加方式,同时保留到一个文件
echo abc123 &>> log.txt
# echo abc123 >> log.txt 2>> log.txt2.创建一个存有password的文档,使用标准输入重定向,修改用户zhangsan的密码
vim pass.txt
123456 //只需一行,因为--stdin
passwd --stdin zhangsan < pass.txt 3.不使用vim交互式界面,使用标准输入重定向,向abc123.txt里追加内容
cat >> abc123.txt << EOF
XXX
XXX
EOF //最后输入EOF表示完成输入
路径信息系列
1.上一级目录 ../
2.当前路径 ./
3.返回到家目录 ~
4.两个目录之间进行快速切换 -
逻辑符号系列
1.&& 与逻辑符号 前一个命令执行成功, 再执行后面的命令
2.|| 或逻辑符号 前一个命令执行失败, 再执行后面的命令
1.删除abc文件,若成功,则在log文件中生成成功信息
rm abc.txt && echo 'succeed' >> log.txt2.删除abc文件,若失败,则在log文件中生成失败信息
rm abc.txt || echo 'error' >> log.txt
系统通配符号系列
1.* 模糊匹配所有内容( 0个或多个字符 )
2.{} 生成序列信息 / 生成组合序列( 快速备份文件/快速恢复文件 )
1.查找文件或文件夹,名字为axxxb
find / -name "a*b"2.生成连续序列
echo {1..10} 结果为 1 2 3 4 5 6 7 8 9 10
echo {001..100} 结果为 001 002 003 ...... 98 99 100
echo {a..z} 结果为 a b c d e ...... x y z
echo {A..Z} 结果为 A B C D E ...... X Y Z3.生成不连续序列
echo {1..10..2} 生成奇数序列 1 3 5 7 9
echo {0..10..2} 生成偶数序列 0 2 4 6 8 10
echo {www,bbs,blog} 结果为www bbs blog4.生成组合序列
echo {A,B}{01,02} 结果为 A01 A02 B01 B02
echo A{01,02} 结果为 A01 A02
echo A{,02} 结果为 A A025.常用的文件备份操作
cp /etc/passwd{,.back} // 将passwd拷贝并命名为passwd.back
#cp /etc/passwd /etc/passwd.back6.在/abc123目录中创建test.txt文件,并在/abc123目录中生成test.txt.back备份文件
mkdir /abc123 && touch test.txt && cp /abc123/test.txt{,.back}7.将备份文件快速还原
cp /abc123/test.txt{.back,}
操作系统正则符号说明
基础正则符号
基本正则符号:
^ 匹配行首,awk中则是匹配字符串的开始
$ 匹配行尾,awk中则是匹配字符串的结尾
^$ 表示空行
* 匹配之前的项N次或者多次,如果是操作系统符号则相当于正则的 .*
. 匹配除换行符\n之外的任意单个字符,包括空格
.* 匹配所有 相当于操作系统符号的*
[] 匹配包含在[字符]之中的任意一个字符[ok] 在文件中找有o的字符信息和在文件中有k的字符信息PS: 将一个字符串信息,进行拆分成一个一个的字符进行匹配
[^ok] 匹配[^字符]之外的任意一个字符[^ok] 在文件中找有o的字符信息和在文件中有k的字符信息,进行排除不要显示,显示其他信息^[ok] 标识查询o和k开头的内容
[ - ] 匹配[]中指定范围内的一个字符
1、^和$
1.尖角符号^ 以什么开头的信息
2.美元符号$ 以什么结尾的信息
3.^$ 表示空行
1.列出/etc下以d开头的文件或目录
ls /etc | grep "^d"2.列出/下以t结尾的文件或目录
ls / | grep "t$"3.查看test.txt除空行以外的内容
cat >> ~/test.txt <<EOF
I am Edison!
I can sing.I like music, hip-hop!
our site is https://clot.com
my qq num is 1234567890.not 12345678900.
my god ,i am not Big handsome boy,but Edison!
EOFgrep -v "^$" ~/test.txt
2、.和*
1.点符号. 匹配任意一个字符,且只有一个字符
2.星符号* 匹配前一个字符连续出现了0次或者多次
3.点和星结合.* 匹配任意所有信息
*3、转义符号*
1.转移符号\的作用1.1.将有特殊意义符号,转义成普通信息进行识别1.2.将没有意义的信息转义为有特殊意义的信息
4、[ ]和[^]
1.括号符号[ ]1.1.有包含a、b、c的行 grep "[abc]" test.txt1.2.匹配多个字符信息 grep "h[a-z]p" ~/test.txt
2.括号和尖号组合 [^]2.1.排除符号,除了a、b、c外,匹配包含其他字符的行grep "[^abc]" test.txt#grep -v "[abc]" test.txt
扩展正则符号
扩展正则符号:
? 匹配之前的项1次或0次
+ 匹配之前的项1次或多次
() 将多个字符信息汇总成整体,进行过滤进行后项引用前项 (test) \1--sed
x{n} 匹配之前的项n次。n可以是0的正整数
x{3,} 之前的项至少需要匹配N次
x{n,m} 指定之前的项至少匹配n次,最多匹配m次,n<=megrep "a{2}" 查询数据中a连续出现两次的行,2个a以上的行也会 显示,比如一行有aaa,aaaa都会显示出来egrep "a{1,2}" 查询数据中a出现一个a或连续两个a的行
| 交替匹配|两边的任意一项ab(c|d)匹配abc或者abd
\ 将有意义的字符信息,转义成普通字符进行识别 将特殊的扩展正则符号,转换成基础正则符号将没有意义的字符信息转成有意义的字符\n \t \e \.扩展正则符号使用注意:grep命令识别扩展正则: egrep / -Esed命令识别扩展正则: sed -r
1.注意:默认情况下, grep 和 sed 不能直接识别扩展正则符号,需要使用 egrep / grep -E 或 sed -r
2.加号符号+ 匹配前一个字符出现1次或者多次(*号是匹配前一个字符出现0次或者多次)
3.问号符号? 匹配前一个字符出现0或者1次
4.括号符号{} 匹配前一个字符指定出现多少次
5.竖线符号| 或者符号,用于匹配多个信息
6.括号符号() 指定信息进行整体匹配
1.若qq号必须为数字和字母的组合,请找出文档中qq号输入错误的项
cat >> ~/test02.txt << EOF
张三 123456
李四 123457
王五 abcdef
赵六 123459
EOFgrep -E [0-9]+ /root/test02.txt | grep -v [a-z]2.通过[]筛选出/etc/ssh/ssh_config 不包含#号开头的行和不包含;号开头的行
grep -v "^[#;]" /etc/ssh/ssh_config 3.查找/etc/passwd中zhangsan和root的用户信息
egrep "^zhangsan|^root" /etc/passwd4.指定匹配test.txt中含my的行
egrep "(my)" test.txt5.批量创建用户 test01..test10,并给每个用户设置密码信息,默认初始化密码(123456)
echo test{01..10} | xargs -n1 | sed -r 's#(.*)#useradd \1;echo "\1" | passwd --stdin \1#g'6.将echo 123456 ==> 转换为 <12><34><56>进行显示
echo 123456 | sed -r "s#(12)(34)(56)#<\1><\2><\3>#g"7.只将ens33网卡的IP地址信息显示出来
ifconfig ens33 | head -2 | tail -1 | awk -r '{print $2}'8.括号符号:{}
第一种情况: x{n,m} 表示前一个字符至少连续出现n次,最多出现m次
egrep "0{2,3}" test.txt
第二种情况: x{n} 表示前一个字符正好连续出现了n次
egrep "0{2}" test.txt
第三种情况: x{n,} 表示前一个字符至少连续出现n次,最多出现多少次不限
egrep "0{2,}" test.txt
第四种情况: x{,m} 表示前一个字符至少连续出现0次,最多出现m次
egrep "0{,2}" test.txt
三剑客常用操作
三剑客简介
1.三剑客的作用:grep擅长查找功能,sed擅长取行(行编辑)和替换,awk擅长取列2.grep选项
-n 显示出匹配的行在原位置所在的行号
-a 二进制以文本方式搜索数据
-c 计算找到的搜索字符串总行数
-o 仅显示出匹配到的内容 统计文件中出现的次数
-i 不区分大小写
-v 反向选择
-E 扩展的grep,即egrep
-B 除显示匹配一行之外,并显示该行之前的num行grep -B 3 "root" /etc/passwd
-A 除显示匹配一行之外,并显示该行之后的num行
-C 除了显示匹配的行外,并显示该行前后的各num行
-w 按单词搜索,相当于\b
-r 递归查找目录下所包含的内容3.sed3.1.sed简介:是一个行文本编辑工具,按照每行中的字符进行处理操作。处理后的数据只会显示在屏幕上,并不会对原文件进行修改。使用sed时最主要用到四个功能:增加、查询、删除、修改3.2.sed命令语法:sed [options] [commands] [inputfile...]3.3.选项-n:关闭默认输出,只输出经过sed编辑的内容。默认情况下,sed会将每一行的处理结果输出到标准输出。-e:用于指定多个sed命令,可以在一个命令行上输入多个命令,以分号隔开。-f:用于从指定的文件中读取sed命令,而不是从命令行中读取。-i:在原始文件中进行编辑,而不是将结果输出到标准输出。-r:使用扩展正则表达式(ERE)而不是基本正则表达式(BRE)。-s:将文件视为单个长字符串来处理,而不是将其视为多个行。-u:在处理每个输入行时禁用输出缓冲,使sed立即将其写入标准输出。3.4.动作d:删除匹配行p:查询并打印匹配行,通常与-n同时使用i \:在匹配行之前追加文本a \:在匹配行之后追加文本c \:用新文本替换匹配行s 替换匹配文本r 文件路径:在指定的位置插入另外一个文件的内容w 文件路径:将符合条件的所有行保存至指定的文件中= 显示符合条件的所在行的行号s@@@:查找条件也可以使用模式,但是被替换的内容不能使用模式
sed命令相关
1、sed查询
1.查询文档第3行:
sed -n '3p' passwd.txt
2.查询文档第1-3行:
sed -n '1,3p' passwd.txt
3.查询第一行与最后一行:
sed -n '1p;$p' passwd.txt
4.查询文件中所有内容:
sed -n '1,$p' passwd.txt
5.只查询sshd相关的行:
sed -n '/sshd/p' passwd.txt
6.查询以nologin结尾的行:
sed -n '/nologin$/p' passwd.txt
7.查询从111行开始到abc行中间的行:
sed -n '/111/,/abc/p' passwd.txt
8.查询只包含root和张三的行:
sed -n '/root/p;/zhangsan/p' passwd.txt
2、sed增加
0.注意:不加选项-i的,都不能对文件内容进行修改,只是对显示内容进行了修改
1.以行号指定插入行内容1.1.添加信息到第一行:sed '1ich4ser' passwd.txt //1表示在第几行操作,i表示在第几行的前面操作//只是显示的内容变化,文件内容并没有变化1.2.在文件第三行之后添加信息:sed '3ach4ser' passwd.txt //3表示在第几行操作,a表示在第几行的后面操作1.3.在文件末尾添加一行新内容:sed '$ach4ser' passwd.txt 1.4.同时添加两行内容:sed '$ach4ser\nsxy' passwd.txt //使用的是\n换行
2.以关键字插入行内容2.1.在匹配行的下一行添加一行数字123456内,/a表示在下一行添加内容:sed '/sshd/a123456' passwd.txt2.2.在匹配行的上一行添加一行数字内容,/i表示在上一行添加内容:sed '/sshd/i123456' passwd.txt2.3.在有zhangsan行的前面添加###### 后面添加######信息:sed -e '/zhangsan/i######' -e '/zhangsan/a######' passwd.txt
3.在匹配内容中增加内容3.1.在关键字nologin为末尾的匹配行的末尾增加新内容aaased '/nologin$/ s/$/aaa/' passwd.txt //使用"/nologin$/"先匹配以“nologin”结尾的行//然后使用s替换行尾($)为aaa,相当于在行尾新增了aaa3.2.在有包含root的行首加入字符aaased '/root/ s/^/aaa/' passwd.txt //使用"/^root/"匹配以“root”开头的行//然后使用s替换行首(^)为aaa,相当于在行首新增了aaa3.3.在有包含root的行首加入字符aaa并在以bash结尾的行加入内容bbbsed -e '/^root/ s/^/aaa/' -e '/bash$/ s/$/bbb/' passwd.txt
3、sed替换(重点)
0.补充:g是替换标记,用于指示替换命令应该替换所有匹配的文本,而不仅仅是第一个匹配如果未使用替换标记g,sed则只会替换每行的第一个匹配项
1.指定内容进行替换1.1.将每行的第一个出现的root都替换成aaaa:sed 's/root/aaaa/' passwd.txt //sed默认只替换第一个匹配项,若想全部替换,需要加上替换标记g1.2.将每行的所有root都替换成aaaa:sed 's/root/aaaa/g' passwd.txt //用g表示替换所有匹配的文本1.3.将文档中1个0及以上都改成1个0sed 's/0+/0/g' passwd.txt1.4.将selinux配置文件中,含关键字SELINUX的行的enforcing替换为disabled,并直接修改文件内容sed -i '/SELINUX/ s/enforcing/disabled' /etc/selinux/config //先匹配到含SELINUX关键字的行,然后使用s替换enforcing为disabled//使用 -i 表示直接对文件内容进行修改
4、sed删除
1.删除第8行再显示文本内容
sed '8d' passwd.txt
2.删除1-3行
sed '1,3d' passwd.txt
3.从文本开始处一直删除到第一个空行为止
sed '1,/^$/d' passwd.txt
4.删除文本中的空行
sed '/^$/d' passwd.txt
5.删除文本中包含sshd的行
sed '/sshd/d' passwd.txt
6.删除匹配行至最后一行
sed '/sshd/,$d' passwd.txt
7.删除最后一行
sed '$d' passwd.txt
8.删除每行行前行后的所有空格:
sed 's/^[ \t]*//; s/[ \t]*$//' passwd.txt
awk相关
1.默认以空格为分隔符,列出第一、第四列数据:
awk '{print $1,$4}' netstat.txt
2.列出第一列内容,默认以空格为分隔符:
df -TH | awk '{print $1}'
3.列出第一列内容,以:为分隔符:
awk -F: '{print $1}' passwd.txt
Shell基础
关于bash和shell
1、bash简介
1. bash 是一个为GNU计划编写的Unix shell,是许多Linux发行版的默认Shell
2.查询系统默认的shell: echo $SHELL/bin/bash
2、shell简介
1.当命令或程序语句不在交互式命令行下执行,而是通过一个程序文件来执行时,该程序就可以被称为脚本
2.在shell脚本中写入命令、变量、语句、及流程控制语句,然后将这些命令“一次性”执行完毕,这种批量执行命令的方式被称为非交互式的方式。
3.shell在生产环境中常被用于:3.1.软件一键自动化安装、优化,监控报警、软件启动、日志分析等3.2.由于shell与linux关系密切,因此更加适合通过shell脚本语言来帮助用户实现轻松、高效的运维任务
3、执行.sh脚本的方法
bash test.sh //常用
sh test.sh
./test.sh //需要文件拥有X权限
. test.sh
source test.sh
注意:最后两种方式执行脚本时会加载并执行相关脚本文件中的命令及语句,而不是产生一个子shell来执行文件中的命令。其他方式在执行时都会生成一个新的子进程执行。
shell变量
1.变量类型1.1.变量分为环境变量(全局变量)和普通变量(局部变量)1.2.环境变量可以创建在他们的shell及子shell中使用,环境变量又分为自定义变量和bash内置环境变量。1.3.普通变量只能在创建他们的shell函数或shell脚本中使用,普通变量一般由开发者在开发脚本程序时创建。
2.自定义变量及撤销变量export 变量名=变量值变量名=变量值;export 变量名declare -x 变量名=变量值unset ABC //撤销变量
3.read定义变量3.1.用户输入变量值read abc //回车后等待输入变量值,赋值给变量abcTest //输入Testecho $abc Test3.2.用户输入变量值,并给出提示信息 -pread -p "请输入你要学习的课程:" IT请输入你要学习的课程:linuxecho $ITlinux3.3.用户输入值时隐藏输入内容 -s方法一:使用 read -s 实现(常用)方法二:使用 stty -echo 实现,但在使用stty -echo 后一定要结束使用stty,否则无法正常显示再次输入的内容#!/bin/bashread -s -p "输入密码:" password#!/bin/bashstty -echoread -p "输入密码:" passwordstty echo3.4.设置用户输入字符的数量,达到该值自动提交 -nread -n 8 abc3.5.限制时间内输入内容,默认单位为秒 -tread -s -t 2 var3.6.以特定字符结尾 -dread -d "#" var
4.数值变量的整数运算:需要使用到 expra=100b=`expr $a \* $a` //这里的反斜杠是转义echo $b10000
特殊的shell变量
1.环境变量 $PATHenv //查看当前工作环境的环境变量
2.位置变量
$n:n为自然数。0代表命令本身,1到9代表第1到第9个参数(参数的值是执行该命令时,从1开始依次输入的),10以上的参数要用大括号包含,如${10}。vim sum.sh a=`expr $1 + $2`echo "$1 + $2 = $a"bash sum.sh 2 42 + 4 = 6
3.预定义变量$?:上一条命令执行后返回的状态,当返回状态值为 0 时表示执行正常,非 0 值表示执行异常或出错$#:命令行中位置变量的个数$*:所有位置变量的内容
条件测试相关
1.文件测试-e:测试目录或文件是否存在-d:测试是否为目录-f:测试是否为文件-r:测试当前用户是否有权限读取-w:测试当前用户是否有权限写入-x:测试是否设置有可执行权限
2.整数值比较-eq:等于-ne:不等于-gt:大于-lt:小于-le:小于等于-ge:大于等于
3.字符串比较-z:检查字符串是否为空,对于未定义或赋予空值的变量将视为空串=:第一个字符串是否与第二个字符串相同!=:第一个字符串与第二个字符串不相同,! 表示取反
4.逻辑测试&&:逻辑与,相当于“而且”只有当前后两个条件都成立,整个测试命令返回值为0,表示成立||:逻辑或,相当于“或者”只要前后两个条件有一个成立,整个测试命令返回值为0,表示成立!:逻辑否,表示“不” 只有当前指定的条件不成立时,整个测试命令的返回值才为0
Shell语法
if语句
1、单分支举例
1.检测目录/media/cdrom/是否存在,若不存在则创建,存在则不做任何操作
vim a.sh
#!/bin/bash
MOUNT_DIR="/media/cdrom/"
if ! [ -e $MOUNT_DIR ]
thenmkdir -p $MOUNT_DIRecho "目录'${MOUNT_DIR}'已创建成功!"
fi
//上述案例中,首先定义变量MOUNT_DIR,并赋值
//使用 -e 判断目录是否存在,! 表示取反
//若目录不存在,则执行then里面的内容,创建文件夹
//若目录存在,则不做任何操作2.root用户能够执行fdisk命令,其余用户不能执行,并给出对应的提示信息
vim fdisk.sh
#!/bin/bash
if [ $USER != root ]
thenecho "当前用户为${USER},该用户不是超级管理员,无法执行该命令!"exit 1
fi
echo -e "\e[5;32m 该系统磁盘情况如下:\e[0m"
fdisk -l
//上述案例中,使用 $USER 获取当前用户名
//若当前用户不是root,那么执行then里面的内容,给出相应提示后 exit 退出
//若是root,则打印提示信息,并执行 fdisk 命令
//这里的 echo -e 表示可以对打印的字符串进行格式化,比如指定颜色、显示类型等
重置=0 黑色=30 红色=31 绿色=32 黄色=33
蓝色=34 粉色=35 青色=36 白色=37
如:\e[1;31m // 1表示为文本显示类型
1=粗体 4=下划线 5=闪烁 7=背景色
//\e[0m,为将颜色重置为默认颜色,否则之后所输出的所有信息都将是31号颜色
2、多分支举例
1.检测ping的对象是否能够连通,并反馈结果
vim b.sh
#!/bin/bash
ping -c 1 -i 0.2 -W 3 $1 &> /dev/null
if [ $? -eq 0 ]
thenecho "Host $1 is up!"
elseecho "Host $1 is down!"
fibash b.sh 192.168.1.151
Host 192.168.1.151 is up!//上述案例中,ping带的参数:-c包的个数,i测试时间间隔 W延迟3秒等待应答
// $? 是上一条命令执行的返回结果,为 0 表示执行成功,为非 0 表示执行失败
// [ $? -eq 0 ] 表示判断上一条命令是否执行成功
//若执行成功,则执行then里面的内容, $1 是位置变量
//若执行失败,则执行else里面的内容 ,$1 是位置变量
//需要注意的是,执行该脚本的时候,需要指定IP才能获取到 $1 ,如 bash b.sh 192.168.1.1002.判断user1用户是否存在,若存在则打印其UID,若不存在则创建user1用户,并给其设置密码
#!/bin/bash
Name="user1"
if id $Name &> /dev/null;thenecho "user1存在,ID信息为:`id $Name`"
elseecho "user1不存在,正在建立该用户..."useradd $Nameecho 123456 | passwd --stdin $Name &> /dev/null && echo "user1创建成功! ID信息为:`id $Name`"
fi//上述案例中,首先定义变量$Name并赋值
//使用 id $Name 获取user1的ID信息,以此判断user1用户是否存在
//若存在,则打印其ID信息
//若不存在,则创建并设置密码
//设置密码使用 --stdin ,只需一行即可循环输入3.给一个用户,判断该用户是管理员还是普通用户
vim abc.sh
#!/bin/bash
id $1 &>/dev/null
if [ $? -eq 0 ];then
A=`id -u $1`if [ $A -eq 0 ];thenecho "当前用户$1 的UID为:$A,为系统管理员!"elseecho "当前用户$1 的UID为:$A,为普通用户!"fi
elseecho "你输入的用户名不存在!"
fibash abc.sh root
当前用户root 的UID为:0,为系统管理员!
bash abc.sh zhangsan
当前用户zhangsan 的UID为:1000,为普通用户!
bash abc.sh wangwu
你输入的用户名不存在!//上述案例中,首先执行命令 id $1,然后通过 [ $? -eq 0 ] 判断上条命令是否执行成功
//若执行成功,则将命令 id -u $1 的结果(UID)赋值给$A,然后通过 [ $A -eq 0 ] 判断指定的用户是否为管理员(UID=0),根据判断的结果,执行相应操作
//否则表示用户不存在4.查询httpd服务是否启动,若没启动则启动
#!/bin/bash
HTTPD=`netstat -anpt | grep httpd | awk -F: '{print $4}'`
STATUS=`pidof httpd`
if [ -z $HTTPD ];thenecho "当前程序未启动,正在启动..."apachectl start &> /dev/null &&echo -e "\e[5;32m 服务已启动! \e[0m"
elseecho -e "当前查询的服务状态为:\e[5;32m已启动! \e[0m\n相关进程ID号为:\n\e[1;36m $STATUS \e[0m"
fi//首先定义变量$HTTPD,通过正则表达式以及三剑客筛选 httpd 服务的 80 端口开放情况,以此作为 httpd 服务是否启动的依据
//然后定义变量$STATUS,使用命令 pidof httpd 获取进程号,并赋值
//使用 [ -z $HTTPD ] 判断$HTTPD内容是否为空,即服务是否启动
//若未启动,则执行then里面的内容,即打印信息并启动httpd服务
//若已启动,则打印提示信息,并给出httpd服务的进程号5.实现让用户在输入值时隐藏输入内容
方法一:使用 read -s 实现(常用)
方法二:使用 stty -echo 实现,但在使用stty -echo 后一定要结束使用stty,否则无法正常显示再次输入的内容
#!/bin/bash
read -s -p "输入密码:" password#!/bin/bash
stty -echo
read -p "输入密码:" password
stty echo
for语句
1.在/root/a.txt文件里存有多个用户名,通过获取其内容创建多个用户,并设置相同的密码ch4ser
#!/bin/bash
USERNAMES=`cat /root/a.txt`
for name in $USERNAMES
douseradd $nameecho "ch4ser" | passwd --stdin $name
done//首先使用 cat /root/a.txt 将用户名列出来,并赋值给$USERNAMES,相当于一个用户名数组
//然后定义$name遍历$USERNAMES里面的内容,直到$USERNAMES里面内容被遍历完
//每次循环的操作为,创建用户以及设置密码2.在/root/ipadds.txt文件里存有多个主机IP,判断这些主机是否能够通信
#!/bin/bash
IPLIST=$(cat /root/ipadds.txt)
for IP in $IPLIST
doping -c 3 -i 0.2 -W 3 $IP &> /dev/nullif [ $? -eq 0 ] ; thenecho "Host $IP is up."elseecho "Host $IP is down."fi
done//首先定义变量IPLIST=$(cat /root/ipadds.txt),和案例1一样,相当于一个IP地址的数组
//然后定义$IP遍历$IPLIST里面的内容,直到$IPLIST里面内容被遍历完
//每次循环的操作为, ping 主机IP ,若 ping 成功则打印对应主机能够通信,否则打印不能通信
while语句
1、关于随机变量$RANDOM的补充
1.$RANDOM 在每次调用的时候,返回一个不同的随机整数 指定的范围是: 0 - 32767
2.如果想生成从0开始且只有两位的数:
echo ${RANDOM:0:2} //表示取随机数,但是该数从0开始且只有2位数,":2"为值的位数,最高5位数
3.如果我们想要产生0-25范围内的数,如何做呢?如下:
echo $(expr $RANDOM % 26) //用这个环境变量对26取模,就可以得到最小是0,最大是25的数了。
4.如果想得到1--68范围内的数,可以这样
echo $(expr $RANDOM % 68 + 1) //前面可以得到最小为0,最大为67的随机数,再加上1,就可以得到最大为1,最小为68的数了。
5.如果想得到6--87范围内的数。可以这样
echo $(expr $RANDOM % 82 + 6)
6.如果想得到10-100范围内的数:
echo $(expr $RANDOM % 91 + 10) //前面可以得到最小为0,最大为81的随机数,再加上6,就可以得到最大为87,最小为6的数了。
1.创建20个用户并指定相同的密码123456,要求用户名为ch4ser1,ch4ser2,...,ch4ser20的形式,也就是用户名最后一位每次加1
#!/bin/bash
PREFIX="ch4ser"
Uid=1
while [ $Uid -le 20 ]
douseradd ${PREFIX}$Uidecho "123456" | passwd --stdin ${PREFIX}$Uid &> /dev/nulllet Uid++
done//首先定义变量$PREFIX,即用户名前缀,然后定义自增变量$Uid
//当$Uid小于等于20,执行循环,每执行一次让$Uid增加1,即总共执行次数为 20
//每次循环的操作除$Uid的自增外,还进行用户的创建以及设置密码操作
//其中用户创建指定的用户名为${PREFIX}$Uid的拼接形式2.生成商品价格(0-999)让用户猜,猜低、猜高都给出提示,直到猜对为止,并记录总共猜的次数
#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "商品实际价格为0-999之间,猜猜看是多少?"
while true
doread -p "请输入你猜测的价格数目:" INTlet TIMES++if [ $INT -eq $PRICE ] ; thenecho "恭喜你答对了, 实际价格是 $PRICE"echo "你总共猜测了 $TIMES 次"exit 0elif [ $INT -gt $PRICE ] ; thenecho "太高了!"elseecho "太低了!"fi
done//首先$(expr $RANDOM % 1000)生成一个0-999的随机数,赋值给变量$PRICE
//然后定义猜的次数,即变量$TIMES
//每一次循环里,先使用 read -p 让用户输入猜的价格$INT,然后让$TIMES自增1
//然后判断是否猜对,若猜对则给出成功的提示,并打印总共猜的次数,然后 exit 0 退出循环
//若猜错,则给出或高或低的提示,进行执行循环,直到用户猜对为止
case语句
1.判断用户键入的字符类型
#!/bin/bash
read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in[a-z]|[A-Z]) echo "您输入的是 字母。";;[0-9])echo "您输入的是 数字。";;*)echo "您输入的是 空格、功能键或其他控制字符。"
esac//首先使用 read -p 让用户输入一个字符,赋值给变量$KEY
//然后使用 case 去匹配字符的类型
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
