一.非交互式shell -----expect
1.装包 yum -y install expect
2.最后一行不执行
一. sed的基本用法
1.sed 命令 -n 选项的用法
sed -n '1p' /etc/passwd (显示passwd文件的第一行,不加n则会全部显示,p是打印)
sed '1,4d' /etc/passwd (d删除,删除passwd的1-4行内容,并显示删除后的内容)
2.sed 命令 -i 选项的用法
正常情况下sed命令,只是把处理的结果显示打印到屏幕上,而不会真的修改原始文件;只有
加了-i 选项后才会取修改原始文件;
3.sed 选项后面跟多个指令时,可以用;(分号)隔开;
sed -n '1p;5p' /etc/passwd 显示第一行和第五行
4.认识sed工具p输出操作
sed -n '/local$/p' 1.txt 输出以local结尾的行
sed -n 'p;n' 1.txt 输出基数行
sed -n 'n;p' 1.txt 输出偶数行
sed -n '5,$p' 1.txt 输出从第五行到最后一行
sed -n '$=' 1.txt 输出文本的总行数
5.sed工具的d输出操作(不要加-n)
sed '3,5d' 1.txt 删除3-5行
sed '/init/d' 1.txt 删除包含init所有的行
sed '/init/d;/bin/d' 1.txt 删除所有包含init和bin的行
sed '/init/!d' 1.txt 删除不包含init的行
sed '$d' 1.txt 删除最后一行
sed '/^$/d' 1.txt 删除文件中所有的空行
6.sed工具的s替换操作
sed 's/ll/AA/' 1.txt 将所有行的第一个ll替换为AA
sed 's/ll/AA/g' 1.txt 将所有行的ll替换为AA
sed '3s/script/SCRIPT/2' 1.txt 将第三行内的第二个script替换为SCRIPT
sed 's/init//g' 1.txt 删除所有的init字符
sed 's/script\|init\e//g' 删除所有的script init e 的字符
sed '3,5s/^#//' 1.txt 解除3到5行的#注释
sed '6,7s/^/#/' 1.txt 给6到7行添加注释
7.sed的扩展
sed 's/.//2;s/.$//' 1.txt 删除每行的第二个字符和最后一个字符
sed -r 's/^(.)(.)(.*)/\2\1\3/' 把每行的第一个字符和第二个字符互换
sed -r 's/[0-9]//g;s/^( )+//' 1.txt 把文件中所有数字,和首行空格删除;
sed 's/[A-Z]/(&)/g' 1.txt 把文件中每个大写字母添加括号
二.使用sed修改系统配置
1.修改IP地址 /etc/sysconfig/network-scripts/ifcfg-eth0
sed '/^IPADDR/s/192.168.1.1/172.25.10.1/' 1.txt (第一种方法)
sed -r '/^IPADDR/s/192.168.1.(.*)/172.25.10.\1/' 1.txt (第二种)
2.调整web根目录(由于需要替换的字符串中有 / ,为了避免与sed替换操作的分隔混淆,可以使用其他字符作为替换分隔,比如可改用“s#old#new#”的方式实现替换)
sed 's#/var/www/html#/var/www/web#' 1.txt
一. Squid代理服务器(功能全,速度相对varnish慢)
1.装包yum -y install squid
2.修改配置文件:vim /etc/squid/squid.conf
http_port 80 vhost (修改第59行;下面内容自己添加)
visible_hostname www.haha.com(设置自己的代理服务的名字,用于客户访问代理服务器)
cache_peer 192.168.2.100 parent 80 0 originserver(定义后端服务器)
cache_dir ufs /var/spool/squid 200 16 256 (设置硬盘缓存容量为200M
自动创建16个一级子目录和256个二级子目录)
http_access allow all (修改56行,允许所有主机使用代理服务器)
3.重启服务设置开机自启。netstat -antpu | grep 80 查看squid是否启用
4.用客户端验证
二. Varnish代理服务器(加速web,性能好,速度快,缓存数据在内存)
1.安装Varnish源码包和安装依赖包yum -y install gcc readline-devel pcre-devel
解压源码包,cd进去,执行./configure --prefix=/usr/local/varnish指定安装路径
然后make && make install 编译安装;
2.复制启动脚本和配置文件
cd到解压出来的软件包中;cp redhat/varnish.initrc /etc/init.d/varnish
cp redhat/varnish.sysconfig /etc/sysconfig/varnish (复制配置文件)
ln -s /usr/local/varnish/sbin/varnishd /usr/sbin/ (创建快捷方式)
ln -s /usr/local/varnish/bin/* /usr/bin/
3.修改前端配置:vim /etc/sysconfig/varnish
VARNISH_LISTEN_PORT=80 (修改66行, 默认端口)
VARNISH_STORAGE_SIZE=64M (修改89行,定义缓存大小)
VARNISH_STORAGE="malloc,${VARNISH_STORAGE_SIZE}"(修改92,基于内存方式缓存)
4.修改后端配置(代理配置文件) vim /etc/varnish/default.vcl
mkdir /etc/varnish
cp /usr/local/varnish/etc/default.vcl /etc/varnish
uuidgen > /etc/varnish/secret
vim /etc/varnish/default.vcl (取消注释即可)
backend default {
.host = "192.168.2.100"; (定义后端服务器)
.port = "80"; (定义端口号)
}
5.重启服务:/etc/init.d/varnish start
6.客户端访问;
7.日志的使用:
varnishlog (软件本身日志,在内存里)
varnishncsa (访问日志,没人访问则没有日志)
8.问题:vanish 代理主要采用了缓存技术,存在的一个问题是,如果web服务更新了页面,会导致客户端访问页面时,还是旧的,不能立即同步(软件有自动更新缓存,但有时间);如果想立即同步,需要手动清除缓存
varnishadmin -S /etc/varnish/secret -T 127.0.0.1:6082 (交互式)
(/etcc/varnish/secret 密码存放文件)(6082 仅管理员使用的端口)
storage.list (列出缓存)
backend.list (列出后端服务器)
ban.url .*(清理所有)(支持正则;清除缓存)
ban.url 2.html (2.html是源站点)
varnishadm –S /etc/varnish/secret –T 127.0.0.1:6082 ban.url 页面文件名
(非交互式)
-------------------------------------------------------------------------------------------------------------
一.nginx Web 服务器
源码包安装:
1.yum -y install gcc pcre-devel openssl-devel (安装常见依赖包)
2.创建一个普通用户,指定普通用户来安装nginx (增强安全性,避免软件被***,同时软件还拥有root的权限)useradd -s /sbin/nologin nginx
3.tar -xvf nginx-1.8.0.tar.gz 解压安装包
4.cd nginx-1.8.0
5. ./configure --prefix=/usr/local/nginx(安装路路径) --user=nginx(指定用户) --group=nginx(指定组)
6.make && make install (编译并安装)
7.创建一个服务的快捷方式:ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
方便使用;避免每次起服务打很长路径
8.nginx 启动服务
nginx -s stop 关闭服务
nginx -s reload 重新加载配置文件
nginx -V 产看软件信息(安装了那些模块)
9.netsta -anptu | grep nginx (查看服务是否启动,监听端口是多少)
二. 升级(加装)nginx 服务器
1.解压软件,并cd进去
2. ./configure --with-http_ssl_module 安装ssl加密模块(升级前的用户记者也在添加 下)
(./configure --help | grep ssl 通过help查询命令)
3.make 只编译软件,不要make install 安装 因为一旦安装后,就会覆盖升级前的配置;
4.备份(重命名)老的nginx主程序,把刚刚编译出来的新主程序替换老程序;
备份:mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginxold
把新的复制进去 cd 到解压的软件中 然后执行 cp objs/nginx /usr/local/nginx/sbin
5.起服务 nginx -s reload
6.验证 netstat -antpu | grep nginx
-----------------------------------------------------------------------------------------------------------
三. 用户认证
1.用户认证的作用:当访问一个网页时,需要提交用户名和密码认证;
2.修改nginx配置文件:vim /usr/local/nginx/conf/nginx.conf (修改时用;结尾)
server {
listen 80; (通过80端口监听)
server_name www.a.com; (设置网站域名)
auth_basic "renzheng"; (认证窗口提示文字)
auth_basic_user_file "/usr/local/nginx/pass"; (指定认证用户密码文件路径)
location / {
root html;(网页存放路径,这里路径是相对路径)
index index.html index.htm;
3.创建刚在配置文件中写入的密码认证文件;
生成密码文件需要安装httpd-tools包,然后使用命令(交互式)htpasswd创建密码文件;
htpasswd -c /usr/local/nginx/pass tom (创建tom用户名,密码根据提示输)
首次添加用户要使用-c 的选项,当我门再次添加别的用户时千万不要在用-c的选项,一旦使
用会导致覆盖之前的用户;直接用htpasswd /usr/local/nginx/pass zhangsan
4.重启nginx服务(重新读取一边配置文件)
nginx -s reload
四. 基于域名的虚拟主机(就是用一台服务器提供多个网站供用户访问)
1.修改配置文件vim /usr/local/nginx/conf/nginx.conf (有模版直接用,取消注释)
server {
listen 80;
server_name www.a.com;
auth_basic "qingrenzhneg:";
auth_basic_user_file "usr/local/nginx/pass"
location / {
root html;
index index.html index.htm;
}
}
......
server {
listen 80;
server_name www.b.com;
location / {
root web;
index index.html index.htm;
}
}
2.创建www.b.com的网页目录和网页
3.重启服务 nginx -s reload
4.用客户端验证
由于没有DNS服务器解析域名需要采用另外一种办法:修改客户机的/etc/hosts 文件
手动在这个文件中添加;他的优先级还高于DNS的优先级;
vim /etc/hosts 添加 服务器地址 域名
192.168.4.5 www.a.com www.b.com
五.SSL安全的虚拟主机
1.首先确认nginx是否安装--with-http_ssl-module 加密模块
nginx -V 查看nginx软件详细信息
2.生成私钥和证书,需要把生成的文件放入指定路径下:cd /usr/local/nginx/conf
使用openssl命令生成文件
openssl genrsa > my.key (生成私钥)
openssl req -new -x509 -key my.key > my.crt (生成证书)
在生成证书的时候会提示输入:国家 省份 城市 公司 部门 主机名 邮箱
3.修改配置文件,调用私钥和证书实现加密
vim /usr/local/nginx/conf/nginx.conf (有模版直接用,取消最后注释)
server {
listen 443 ssl;
server_name www.c.com;
ssl_certificate my.crt;
ssl_certificate_key my.key;
.......
location / {
root html;
index index.html index.htm;
}
}
4.重启服务nginx -s reload
5.客户端验证,当客户端访问服务器时,服务器会自动传输一个证书给到客户端的
一.Nginx 作代理(调度器,不会缓存)实现访问Web的负载均衡,并且定时检查Web的健康;
1.前提先搭建2台web服务器(作web集群)
2.部署nginx调度器
修改nginx配置文件,此软软件自带备份配置文件(以default结尾),把昨天的配置文件覆盖掉
vim /usr/local/ngins/conf/nginx.conf
http {
upstream webs { (web是我自己命名的集群名称,用于下面调用)
ip_hash;(相同客户端访问,给相同web服务页面,根据实际情况是否写次条命令)
server 192.168.2.100:80 (weight=2 max_fails=2 fail_timeout=10);
括号里的内容为附加条件weight作用是负载量是正常的两倍;max_fails fail_timeout 定义失败后处理动作设置失败次数,不再访问时间,权重;
server 192.168.2.200:80;
} (定义我们的web服务集群)
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://webs; (调用web集群,提供web服务)
}
}
-------------------------------------------------------------------------------------------------------------
二. Nginx作为Web服务器实现 动静分离
1.部署LNMP环境;
L:linux操作系统
N:nginx网站服务软件
M:MySQL Mariadb 数据库
P:网站开发语言(PHP Perl Python)
安装:yum -y install mariadb mariadb-server mariadb-devel php php-mysql
源码安装nginx 手动安装rpm -hiv php-fpm-5.4.16-36.el7_1.x86_64.rpm(他是php的自动监听启动服务,可以自动执行php命令,解析php)
启服务:systemctl restart mariadb php-fpm
查看服务是否启用:netstat -antpu | grep 80(nginx) 3306(mariadb) 9000(php)
2.修改nginx配置文件(有模版,取消注释适当修改即可)(清除上面实验做的配置)
location / {
root html;
index index.html index.htm;
}
location ~ \.php$ { (这个配置需要我们作出修改)
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
通过上面配置实现当客户端访问一个静态页面时直接在根目录下提供页面;如果请求一个动态页面,nginx自动识别,将将请求的内容给到php,读取内容,然后将读取后的内容给到客户端;
php动态的页面还可以取关联读取mariadb数据库的内容(这个关联页面开发提供)
3.手动写一个php动态页面,用客户端验证
4.如果报错查看以下log
1) tailf /usr/local/nginx/logs/error.log
2) ls /var/log/php-fpm/*
-------------------------------------------------------------------------------------------------------------
三. nginx地址重写
好处:1.把长域名变短;
2.跳转页面,跳转网站
3.根据不同的浏览器出现不同的页面
案例1.当客户访问192.168.4.5/a.html 时 服务端自动调转成b.html
vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name localhost;
location / {
root html;
rewrite /a.html /b.html redirect;地址重写
(redirect可写可不写;写了起到的作用是客户输入a.html后会变成b.html)
index index.html index.htm;
}
案例2.客户访问你那个页面,你只提供跳转页面
rewrite ^/ http://www.tmooc.cn;(直接调到tmooc首页上)
案例3.访问网页指定路径,跳转后依然可以提供到之前的指定目录;
rewrite ^/(.*) http://www.jd.com/$1;
四.nginx作web服务器提供电脑版网页和手机版网页实现web页面的跳转
1.先创建两套网页,一套是电脑版的一套手机版的;
模拟实验
cd /usr/local/nginx/html/
echo 电脑版 > test.html
mkdir shouji
echo 手机版 > shouji/test.html
2.修改nginx配置文件
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html;
}
if ($http_user_agent ~* curl) {
rewrite ^/(.*) /shouji/$1;
}
}
3.客户端验证
curl http://192.168.4.5/test.html (伪装成curl 格式浏览器)
curl -A “Windows 10” 地址 伪装成其他浏览器
----------------------------------------------------------------------------------------------------------
备注:rewrite 后跟选项的语法使用
break 完成当前的规则集,不再处理rewrite指令
---------------------------------------------------------------------------------------------------------
五.Nginx常见问题及优化方案
1.版本号:(客户端默认可以直接看到,不利于安全,会被利用版本漏洞***,因此需隐藏)
修改nginx配置文件:(在http下面添加)
http{
server_tokens off; (不显示nginx版本号)
}
2.并发量:软件默认最大并发量为1024(企业需求高于1024,需手动修改)
模拟并发量:
ab -c 500 -n 500 http://192.168.4.5/ (不会报错)
ab -c 1025 -n 1025 http://192.168.4.5/ (报错超过并发量)
解决方案:(两步走,修改nginx配置文件和内核策略)
a.修改nginx配置文件:
worker_processes 2;(第3行;进程数,根据实际cpu数量设置)
worker_connections 65535; (第13行;将值修改为65535)
b.修改内核限制:(默认最多打开1024个文件)
ulimit -a 查看所有限制
ulimit -Hn 100000 (H硬限制(普通用户不可以修改,root可以修改)n最大文件数量)
ulimit -Sn 100000 (S软限制(普通用户可以修改,root可以修改)n最大文件数量)
验证查看:
ss -ntup | grep nginx (查看实时访问量)
以上修改内核为临时修改,重启后无效;永久修改需要修改配置文件
vim /etc/security/limits.conf (在16行下面根据提示添加)
* sofe nofile 100000
* hard nofile 100000
3.包头请求信息过大,导致无法访问(缓存不够大,会报错414)
每个客户机请求内容时,服务端都会去建立一个独立的缓存文件大小默认1k,当客户端请求
的包头信息过大时,就会导致无法访问服务;修改nginx配置文件可以解决;
http {
client_header_buffer_size 1k; (默认包头请求信息缓存)
large_client_header_buffers 4 4k; (扩大请求包信息缓存个数和容量)
}
4.在nginx服务器上进行压缩处理,可以优化访问流量
修改nginx的配置文件,开启压缩功能
http {
gzip on; (开启压缩功能)
gzip_min_length 1000; (设置最小压缩指标,1000字节;)
gzip_comp_level 4; (设置压缩等级)
gzip_types text/plain text (设置那些格式的文件可以压缩要参考mime.types文件)
备注:(mp3 mp4 本身就是压缩格式了)
5.在nginx服务器上修改nginx配置文件,让用户的浏览器缓存数据,可以加快访问速度
这种方法缓存的数据,一旦更新了,用户将不能读取到最新网页内容;因此,在设置时要指定
用户只能缓存一些不经常会改变的内容,如mp3 mp4 jpg 和 多媒体文件;
server {
listen 80;
server_name www.a.com
location / {
root html;
index index.html;
}
location ~* \.(jpg|png)$ { (手动添加进去)
expires 30d; (缓存时间为30天)
}
客户端用about:cache 查看浏览器缓存
6.自定义报错文件
vim /etc/local/nginx/conf/nginx.conf
charset utf-8; (45行,设置识别中文字符)
error_page 404 /error.html; (59行;指定404报错时,提供报错网页的路径)
写把错网页,放到指定路径下;
1.nginx 可以搭建PHP python perl这些写的网页
JAVA写的网页要用Tomcat(免费),jboss(收费),weblogic
2.java 网站要具备jdk(解释器)和tomcat(服务器)
-----------------------------------------------------------------------------------------------
一.Tomcat软件安装(默认访问端口8080)
1.解压软件包,将解压出来的包移动到/usr/local/tomcat 下面;移动完成就时安装ok;
2.查看软件包含的文件ls /usr/local/tomcat
bin 程序
conf 配置文件
logs 日志文件
webapps 网页内容
webapps/ROOT 网页默认根目录
3.启动文件
/usr/local/tomcat/bin/startup.sh 启动程序
/usr/local/tomcat/bin/shutdown.sh 关闭程序
4.查看服务是否启动
netstat -antpu | grep java 查看启动端口
8009
8080
8005 (tomcat启动时生成随机数)
8005端口如果未启动需执行以下操作
mv /dev/random /dev/random.bak
ls -n /dev/urandom /dev/random
二.配置tomcat(严格区分大小写)虚拟主机,实现搭建多web
1.修改配置文件vim /usr/local/tomcat/conf/server.xml
<Host name="www.a.com" appBase="a"
unpackWARs="true" autoDeploy="true">
</Host>
<Host name="www.b.com" appBase="b"
unpackWARs="true" autoDeploy="true">
</Host>
2.创建网页
配置文件可以看出a文件要放到tomcat下,结合默认网页文件要放在ROOT下;按以下这样创建
mkdir -p /usr/local/tomcat/{a,b}/ROOT (创建虚拟主机网页路径)
echo aa > /usr/local/tomcat/a/ROOT/index.html (写网页内容)
echo bb > /usr/local/tomcat/b/ROOT/index.html (写网页内容)
默认要放到ROOT的条件可以手动修改,需要把下面这条命令发到<Host>和</Host>中间
<Context path="" docBase="base" reloadable="true" /> 这样修改后,就是把网 页放到a/base文件加下
3.重启服务,先关闭,在开启;
三.实现路径跳转
当浏览器输入www.a.com/test时,网站把页面从/var/www/html/下提供
<Context path="/test" docBase="/var/www/html" reloadable="true" />
四.作加密网站https (一旦开放了8443端口,所有的网站都可以作)
1. keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/keystore (生成密钥)
#gen 生成密钥
#alias 别名
#keyalg 算法
#keystore 密钥存放位置
2.修改主配置文件,把生成的密钥添加进去;(大概修改84行)先取消注释"<!--""-->",只有最后
一行需要自己添加;
<Connector port="8443"
protocol="org.apache.coyote.http11.Http11NioProtocol"
85 maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
86 clientAuth="false" sslProtocol="TLS"
keystoreFile="/usr/local/tomcat/keystore" keystorePass="123456" />
3.重启服务
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
4.客户端验证,需特别指出访问8443端口,因为配置文件中开放的安全端口为8443
https ://www.a.com:8443
五.Tomcat优化
1.并发量优化
修改配置文件vim /usr/local/tomcat/conf/server.xml (大概60行)
添加以下内容
<Connector port="8080" protocol="HTTP/1.1"
maxThreads="1000" 最大线程数
minSpareThreads="100"
maxSpareThreads="1000"
enableLookups="false"
URIEncoding="utf-8"
acceptCount="1000" 最大排队数
一.memcached数据库(基于内存的储存方式;默认端口11211)
1.装包yum -y install memcached telnet (telnet是一款远程访问工具,mem软件无客户端,所以需安装telnet连接服务器)
2.启服务:systemctl restart memcached.server
查看端口是否启用:netstat -antpu | grep mem
3.查看配置文件(默认不需要修改):vim /etc/sysconfig/memcached
4.连接数据库验证是否可用:telnet 127.0.0.1 11211 (测试环境使用的工具)
set name 0 180 3 添加一个数据 (即可以新建又可以覆盖)
get name 查看添加的数据
#0代表数据不压缩
#180数据在内存里只存180秒
#3代表存3个字符的数据
add name 0 180 3 (add只能添加新的变量)
replace name 0 180 3 (只能替换变量)
append name 0 180 4 (在原来的数据上追加4个字符)
delete name (删除数据)
flush_all 清除所有
stats 统计查看状态操作
5.安装php和数据库关联的软件
正常情况下,数据库要和php脚本关联起来,php软件包并不具备关联功能,需要手动安装;
软件包可以通过搜索查看:yum list | grep memcached
yum -y install php-pecl-memcache (安装可以关联mem数据库的软件)
开启次服务systemctl restart php-fpm
6.之前做过nginx的动静分离,现在可以直接放一个php的页面到html下面直接访问;
一.基于java的web集群指定共用数据库
1.这个环境需要在两个web服务器上配置,先cp软件
需要先安装一个jave关联memcached的软件,这个软件只需要在lnmp中cp相应文件即可实现;
cd lnmp_soft/session
cp *jar /usr/local/tomcat/lib (关联软件的相关包)
cp context.xml /usr/local/tomcat/conf/ (配置文件)
2.修改配置文件vim /usr/local/tomcat/conf/context.xml
只需要修改36行的配置,写入我们web集群共用的memcached数据库的ip地址
3.重启web服务;启动数据库
一.redis数据库:基于内存,持久化储存,数据类型更多;安全,储存重要数据;
1.装包:cd lnmp 解压redis软件包,cd到redis软件包中,
注意不用./configure 直接先安装一个编译软件gcc 然后直接mkae && make install
安装完成后还需要最后一步,cd到redis软件包中的utils文件中,执行脚本
install_server.sh 这个脚本会帮我们配置配置文件;到这里数据库就安装完成了
还可以输入:redis-benchmark 来检测数据库性能
ascll
2.启动数据库:
/etc/init.d/redis_6379 start | stop | restart
3.相关程序
服务器程序:redis-server
客户端程序:redis-cli
3.列表
-1永不过期
-2已经过期
------------------------------------------------------------------------------------------------------------------------------
4.主从 (实时同步)
主
1.修改配置文件 397 requirepass 123456
2.用redis-cli -a 123456访问
3.43 $CLIEXEC -p $REDISPORT -a 123456 shutdown
4./etc/init.d/redis_6379 restart
从
1.211 slaveof 192.168.2.100 6379
2.218 masterauth 123456
验证
主 set nb 123
从 get nb 123
RPM包
源码----->RPM
1.什么是RPM包?
1).压缩包(源码安装后的目录)
2).RPM包含一些描述信息
1.装包yum -y install rpm-build
rpmbuild -ba xx.spec(报错,主要用这条命令来创建下面着6个目录)
rpmbuild/ BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
#SOURCES:存放源码包的目录
#SPECS:配置文件(基本信息,把源码安装过程写到这个配置文件)
#BUILDROOT:假根(对rpmbuild这款软件来说)
#RPMS: 成品的位置,rpm包
2.拷贝一个源码包到SOURCES下
Name:nginx
Version:1.8.0
Release:180
Summary:This is a Web Server
License:GPL
URL:www.sdas
Source0:nginx-1.8.0.tar.gz2
%description
adksadkaldjkfsfklsfjlkfsakjlkfsklwe
%build
./configure --with-http_ssl_module
%files
%doc
/usr/local/nginx/*
3.安装yum -y install gcc pcre-devel openssl-devel
4. cd rpmbuild/SPECS/
rpm-ba nginx.spec
一.SVN:版本控制软件(默认端口3690)(subversion)
版本控制的核心:服务器--共享目录
所有数据都有备份
file:///abc/本地访问
svn://192.168.4.5/abc 远程访问
1.装包yum -y install subversion
2.创建mkdir /var/svn 共享目录框架,此目录不是真实共享目录
3.创建真实共享目录:svnadmin create /var/svn/project1
4.导入想要共享的内容:svn import . file:///var/svn/project1/ -m "注释"
导入的数据不是明文显示的,cd到目录是无法看到的
5.本地使用这个命令查看:svn list file:///var/svn/project1
6. vim svnserve.conf
19 anon-access = none (匿名访问不给任何权限)
20 auth-access = write (认证访问给读的权限)
27 password-db = passwd (指定密码文件为passwd稍后要修改)
34 authz-db = authz (指定控制权限的文件,稍后要修改)
7.vim passwd
tom = 123456
harry = 123456
8.vim authz
[/]
tom = rw
harry = rw
9.启动服务(两种方法)
方法一:svnserve -d -r /var/svn/project/ (指定共享目录发布,-d的意思是放后台)
方法二:systemctl start svnserver (把所有的共享目录都发布出去)
10.验证
客户端:svn co --username tom --password 123456 svn://192.168.2.100/ code
co(checkout)下载,从svn://192.168.2.100/下载共享目录,并且自动放到本地code目录(该目录会自动创建)
11.cd到code 客户端任意修改一个文件,再上传文件
命令:svn ci -m "注释" (ci是上传 ,这个上传会自动识别那个文件改变了,只把改变的文件上传上去)
12.如果服务器上的文件有被更新,客户端可以通过:svn update 命令实现更新自己的本地
13.可以同过以下命令查看vsn的文件更新log;
svn log svn://192.168.2.100
svn info svn://192.168.2.100
14.客户端自己新建文件后通过以下上传到svn服务器
vim 11.sh (直接创建,不受svn管理)
svn add 11.sh (给到svn管理)
svn ci -m "注释" (上传文件)
15.客户端实现新建目录,重命名,复制操作;
svn mkdir abc
svn mv 11.sh 22.sh
svn cp xx.sh zz.sh
svn rm zz.sh
svn ci -m "注释" 最后上传文件
16.对比本地和服务器的差别
svn diff
svn diff 文件名
svn cat svn://192.168.2.100/wenjian
17.数据还原:
1)本地修改了一个文件,但未提交
svn revert 11.txt
2)本地修改了,而且也提交了[6]
svn merge -r6:5 11.txt
3)本地修改了,而且也提交了(第二种)
svn -r5 co svn://192.168.1.100 code2
18.多人协同
1)修改不同的文件
互不影响,最后各自更新各自的
2)修改相同文件的不同行;
先上传的不受影响,后上传的提示过期,要svn update,这个时后文件会自动和并,然后在上传服务;
3)修改相同文件的相同行
会产生冲突,需人员协同;,修改后的文件会生成多个版本,协商后把多于的删除,然后提交服务器
19.备份服务器
svnadmin dump /var/snv/project1/ > my.bak
20.还原服务器
svnadmin load /var/snv/project2/ < my.bak
命令+shell语法格式
python【数据分析,网站,电影,书】
win python
linux python
调用模块【积木】
Linux
python-startup=a.sh
python
ftp://172.40.50.118/share/autotab.sh
python[空格或tab是必需]
if 3>2:
python【模块】 (功能)a.py
shell[模块]
python[模块{10功能}]
import os
os.chmod('ttt.py',777)
os.chmod('/root/abc.txt',0777)
i=12344334
i=0232
i=0x33
i=ob1010
i=1.3
i=9999999999999999999999999999
i="abc"
i='abc'
i='''abc'''
变量赋值:
1.数字
ab=1
ab=99999999999999999999
ab=3.333
ab=0777 (8进制)
ab=0xff (16)
ab=0b010101 (2)
2.字符
ab="abc"
ab='ab'
ab='''abcc'''
a[1]
a[1:-1]
a[:4]
a[4:]
print a+b
print a*20
3.变量可以是列表
a=['tom',122,'test',34]
a[0] 提取a列表中的第0个值
a[1]
a[:3] 提取a列表中的第0到第2值(3-1=2)
a[3:]
tom in a 判断tom是否在a变量中
'nihao' in a 判断nihao是否在a变量中
a.append('xxx') 向列表a中追加值
a.remove(122) 从列表a中删除122的值
4.变量可以是元组,不可修改的列表
ab=('tom',22,'hehe')
ab[0]
ab[1]
'tom' in ab 判断tom是否在ab变量中
5.字典
toms={'name':'tom','age':22,'sex':'male'}
注意事项:字串一定需要【引号】
toms #提取所有的值
toms['name'] #提取toms字典中name的值
toms['age']=18 #修改toms字典中age的值
toms['qq']=1111 #新建toms字典中qq以及它的值
== != >= <= > <
案例:
1.读取用户输入信息,赋值给变量
user=raw_input("提示:")
passwd=raw_input("提示:")
2.判断:
如果用户名是bob,密码是123456,则提示成功
否则提示失败
提示:#coding:utf-8
提示:and逻辑并且,相当于shell【&&】
if 判断1 and 判断2
#!/usr/bin/python
#coding:utf-8
user=raw_input("请输入用户名:")
passwd=raw_input("请输入用密码:")
if user=='bob' and passwd=='123456':
print "成功"
else:
print "失败"
score=raw_input("请输入成绩:")
if score > 90:
print "A"
elif score > 80:
print "B"
elif score > 70:
vim a.py
import random
num=random.randint(1,100)
if 判断:
指令
if 判断:
指令
else:
指令
1. i=11
j=22
print "iam %d,she is %d" %(i,j) (%d 占位符,占位数字)
2.i=tom
3.while True: 死循环
4.range(1,10) 产生1-9的列表[1,2,3,4,5,6,7,8,9],不包含10
range(10) 产生0-9的列表
5.[50 for i in range(10)] 产生10个50 [50, 50, 50, 50, 50, 50, 50, 50, 50, 50]
[i for i in range(10)] 产生0-9
6.["192.168.4.%d" %i for i in range(1,255)]产生4的所有网段
7.python 文件的读写
data=open('/etc/passwd') 设置变量
data.readline() 读一行
data.readline()再读一行
data.read() 读整个文本
data.seek(0) 移动光标到首行
data.close() 关闭文件(带保存功能)
data=open('/root/new.txt','w') 新建一个文件
data.writelines('wqdadadw\n') 写入内容(\n表示回车)
data.flush() 保存文件
8.python 定义函数
def 函数名():
命令
------------
函数名() 调用函数
--------------
#!/usr/bin/python
#coding:utf-8
def jsq(x,y): (形参)
print 'x+y=',x+y
print 'x*y=',x*y
print 'x-y=',x-y
jsq(2,3) (实参)
jsq(2,4)
----------------------------------
#!/usr/bin/python
#coding:utf-8
def jsq(x=2,y=3): (默认参数)如果有实际参数,按实际参数处理
print 'x+y=',x+y
print 'x*y=',x*y
print 'x-y=',x-y
jsq()
jsq(2,4)
9.位置参数
import sys (调用模块)
print sys.argv[0]
print sys.argv[1]
print sys.argv[2]
print sys.argv
10.模块
import 模块1,模块2,模块3 (可以同时导入多个模块)
---------------------------------------------------------------
from test import star (只调用模块中的一个参数)
star() 调用函数
---------------------------------------------------------
import test 调用模块
test.star() 使用函数
1.定义报错
try:
x=int(raw_input("请输入一个数字:"))
print 10/x
except ZeroDivisionError: (出现错误时输出以下)
print "请不要输入0"
else: (未出错时,输出以下)
print "ok"
finally: (不论是否出错,都输出以下)
print 'game over'
2. with open('/etc/hosts') as x: (用with读文件后,文加会自动关闭保存)
... x.readline()
3.raise语句;自定义生成报错,可以把正确输出也报错;
try:
x=int(raw_input("请输入1-100:"))
if x>100:
raise ValueError,"你的值超出了范围"
except ValueError,e:
print "Error:",e
4.assert,自定义报错语句;它是反着来的
try:
x=int(raw_input("请输入1-100数字:"))
assert x<100,"你的数字太大" ##如果你输入的数字大于100则,报错
except AssertionError,e:
print "Error:",e
---------------------------------------------------------------------------------------------------------------------------------
1.正则匹配
正则表达式
m=re.match('the','hello the world')
从开始匹配,在数据中找the
找到返回Match,否则返回None
m.group() #查看找到的匹配值
m=re.search('the','hello the world')
在整个数据的任意位置中找the,仅找第一个匹配
找到返回Match,否则返回None
m.group() #查看找到的匹配值
m=re.findall('the','hello the a the world')
在整个数据的任意位置中找the,找全部的匹配
找到返回Match,否则返回None
m.group() #查看找到的匹配值
-----------------------------------------
x={'qq':444,'age':23} 定义字典
x.get('qq',8)
来源:oschina
链接:https://my.oschina.net/u/4398470/blog/3221323