linux-小知识-13

小知识

shutdown 2 The system is going down for required maintenance. Please save any important work you are doing now!

free -m
buffers为写入缓冲区,sync将缓冲区数据写入磁盘
cache为读取数据的缓存区

隐藏登陆前系统信息提示
>  /etc/issue
>  /etc/issue.net

etc/issue 是显示在TTY控制台登陆前(非图形界面)非ssh远程登陆的显示
/etc/motd :这个文件是在你登陆以后显示的,无论你是 TTY 仍是 PTS 登陆,也无论是  Telnet 或 SSH 都显示这个文件里面的信息


PS1='\[\e[31;40m\][\[\e[31;40m\]\u\[\e[37;40m\]@\h \[\e[36;40m\]\w\[\e[31;40m\]]\[\e[1;32;40m \$ \[\e[0m\]'

录制终端会话

$ script -t 2> timing.log -a output.session
type commands;
…
..
exit 


$ scriptreplay timing.log output.session
# 按播放命令序列输出



tail   -f 跟踪显示文件内容新追加内容

文件权限问题:
文件:
 r 可以使用文件查看类工具获取其内容
 w 可修改其内容
 x 能够把此文件提请内核启动为一个进程
目录:
 r 可使用ls查看此目录中文件列表
 w 可在此目录中建立文件,也可删除此目录中的文件
 x 可使用ls -l查看此目录中文件元数据(须配合r),能够cd进入此目录
 X 只给目录x权限,不给文件x权限
 
 复制一个文件之目录
 :cp   file  dir
 file   至少r
 dir  至少  wx
 
 RANDOM%7   取余数
 
 [[  "$name"   =~  \.sh$    ]]
[[   "$var"   ==   abc*   ]]     == 通配符abc*
☐  里面只要有字符就为真  $?  = 0 
[ x"$var"   =  'x'  ]   判断$var 是否存在

[]   精确匹配
[[]]  模糊匹配  正则表达式

分区利用率断定大于80
[-v  name ]  判断name 是是否被设置
[-n  name]  是否为空




 脚本执行,先查看hash  再看路径PATH  别名优先级大于本地shell
 
 
 
 一、编辑 grub 配置文件

vim /etc/sysconfig/grub   # 实际上是/etc/default/grub的软链接
# 为GRUB_CMDLINE_LINUX变量增长2个参数,具体内容以下(加粗):
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap net.ifnames=0 biosdevname=0 rhgb quiet"
二、从新生成 grub 配置文件

grub2-mkconfig -o /boot/grub2/grub.cfg
而后从新启动 Linux 操做系统,经过 ip addr 能够看到网卡名称已经变为 eth0 。

hostname   -I
本机IP

crontab   -e  
星号(*):表明全部可能的值,例如month字段若是是星号,则表示在知足其它字段的制约条件后每个月都执行该命令操做。
逗号(,):能够用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):能够用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):能够用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线能够和星号一块儿使用,例如*/10,若是用在minute字段,表示每十分钟执行一次。

 xargs命令把从stdin接收到的数据从新格式化,再将其做为参数提供给其余命令。

将多行输入转换成单行输出。
将单行输入转换成多行输出。
指定每行最大的参数数量n,咱们能够将任何来自stdin的文本划分红多行,每行n个参数。
每个参数都是由" "(空格)隔开的字符串。空格是默认的定界符
指定每行最大的参数数量n,咱们能够将任何来自stdin的文本划分红多行,每行n个参数
每个参数都是由" "(空格)隔开的字符串。空格是默认的定界符
xargs -I {} ./cecho.sh -p {} -l 
xargs -0将\0做为输入定界符

cat files.txt | ( while read arg; do cat $arg; done )
# 等同于cat files.txt | xargs -I {} cat {} 




-----------------------------------------------------------------------------------------------------
孩集群运维
 
 网络

nginx   安装 
./configure   --prefix=/data/nginx   --group=nginx  --user=nginx  --with-http_stub_status_module   --with-http_ssl_module  --conf-path=/etc/nginx/nginx.conf   --http-log-path=/vat/log/nginx/access.log
日志格式修改 
access_log  /var/log/nginx/access.log combined;

备份文件后修改
nginx -t 
nginx   -s reload



基于域名的虚拟机
server {
        listen       80;
        server_name  www.example.com;

        location / {
            root   html;        ###设定虚拟机目录
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

基于ip的虚拟机
server {
        listen      192.168.8.1: 80;
        server_name  www.example.com;

        location / {
            root   html;        ###设定虚拟机目录
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

使用include   包含单独配置文件
include   file  | mask ;
在 http {
        
include  extra/www.conf
include  extra/bbs.conf

}


打开nginx的status 
查看是否安装了模块  --with-http_stub_status_module 
nginx  -V
在http  添加

server {
        listen       80;
        server_name  status.example.com;

        location / {
            
            stub_status  on;
            access_log  off;
        }  
    }

    错误日志配置

    语法
    error_log  file  level;
    默认格式    error_log  logs/error.log;
    访问日志
    #log_format  main     '$remote_addr - $remote_user [$time_local] "$request" '
    #                                  '$status $body_bytes_sent "$http_referer" '
    #                                  '"$http_user_agent" "$http_x_forwarded_for"';
    access_log   logs/access.log   main
{
                $remote_addr,  记录客户端IP地址
                $http_x_forwarded_for   前端有代理设置web节点记录客户端地址,此参数生效的前提是代理服务器也开启了x_forwarded_for
                $remote_user 记录客户端用户名称
                $request 记录请求的URL和HTTP协议
                $status 记录请求状态
                $body_bytes_sent 发送给客户端的字节数,不包括响应头的大小; 该变量与Apache模块mod_log_config里的“%B”参数兼容。
                $bytes_sent 发送给客户端的总字节数。
                $connection 链接的序列号。
                $connection_requests 当前经过一个链接得到的请求数量。
                $msec 日志写入时间。单位为秒,精度是毫秒。
                $pipe 若是请求是经过HTTP流水线(pipelined)发送,pipe值为“p”,不然为“.”。
                $http_referer 记录从哪一个页面连接访问过来的
                $http_user_agent 记录客户端浏览器相关信息
                $request_length 请求的长度(包括请求行,请求头和请求正文)。
                $request_time 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
                $time_iso8601 ISO8601标准格式下的本地时间。
                $time_local 通用日志格式下的本地时间。
                }

大日志切割脚本
将正在写入的日志更名并转移至其余目录,而后平滑过渡
!#   /bin/bash 
dateformat=`date  +%Y%m%d`
Basedir=/vat/log/nginx
Nginxdir="$Basedir/logs"
Logname="access"
[      -d   $Basedir   ]     &&  cd   $Nginxdir  || exit  1 
[  -f   ${Logname}.log  ]   ||  exit  1
/bin/mv    ${Logname}.log   ${dateformat}_${Logname}.log

${Basedir}/sbin/nginx   -s  reload 
写入脚本

00  00  *   *    *    /bin/sh     /path/to/shellnname      >  /dev/nul     2>&1


location   

~      #波浪线表示执行一个正则匹配,区分大小写
~*    #表示执行一个正则匹配,不区分大小写
^~    #^~表示普通字符匹配,若是该选项匹配,只匹配该选项,不匹配别的选项,通常用来匹配目录
=      #进行普通字符精确匹配
@     #"@" 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files

location 匹配的优先级(与location在配置文件中的顺序无关)
= 精确匹配会第一个被处理。若是发现精确匹配,nginx中止搜索其余匹配。
普通字符匹配,正则表达式规则和长的块规则将被优先和查询匹配,也就是说若是该项匹配还需去看有没有正则表达式匹配和更长的匹配。
^~ 则只匹配该规则,nginx中止搜索其余匹配,不然nginx会继续处理其余location指令。
最后匹配理带有"~"和"~*"的指令,若是找到相应的匹配,则nginx中止搜索其余匹配;当没有正则表达式或者没有正则表达式被匹配的状况下,那么匹配程度最高的逐字匹配指令会被使用。

location 优先级官方文档

Directives with the = prefix that match the query exactly. If found, searching stops.
All remaining directives with conventional strings, longest match first. If this match used the ^~ prefix, searching stops.
Regular expressions, in order of definition in the configuration file.
If #3 yielded a match, that result is used. Else the match from #2 is used.
=前缀的指令严格匹配这个查询。若是找到,中止搜索。
全部剩下的常规字符串,最长的匹配。若是这个匹配使用^〜前缀,搜索中止。
正则表达式,在配置文件中定义的顺序。
若是第3条规则产生匹配的话,结果被使用。不然,使用第2条规则的结果。

例子
location  = / {
  # 只匹配"/".
  [ configuration A ] 
}
location  / {
  # 匹配任何请求,由于全部请求都是以"/"开始
  # 可是更长字符匹配或者正则表达式匹配会优先匹配
  [ configuration B ] 
}
location ^~ /images/ {
  # 匹配任何以 /images/ 开始的请求,并中止匹配 其它location
  [ configuration C ] 
}
location ~* .(gif|jpg|jpeg)$ {
  # 匹配以 gif, jpg, or jpeg结尾的请求. 
  # 可是全部 /images/ 目录的请求将由 [Configuration C]处理.   
  [ configuration D ] 
}

请求URI例子:

/ -> 符合configuration A
/documents/document.html -> 符合configuration B
/images/1.gif -> 符合configuration C
/documents/1.jpg ->符合 configuration D
@location 例子
error_page 404 = @fetch;

location @fetch(
proxy_pass http://fetch;
)




rewrite 

nginx经过ngx_http_rewrite_module模块支持url重写、支持if条件判断,但不支持else。

该模块须要PCRE支持,应在编译nginx时指定PCRE源码目录

语法:rewrite regex replacement [flag];
默认值:无
做用域:server,location,if
若是一个URI匹配指定的正则表达式regex,URI就按照replacement重写。
rewrite按配置文件中出现的顺序执行。flags标志能够中止继续处理。
若是replacement以"http://"或"https://"开始,将再也不继续处理,这个重定向将返回给客户端。
flag能够是以下参数
last 中止处理后续rewrite指令集,而后对当前重写的新URI在rewrite指令集上从新查找。
break 中止处理后续rewrite指令集,并不在从新查找,可是当前location内剩余非rewrite语句和location外的的非rewrite语句能够执行。
redirect 若是replacement不是以http:// 或https://开始,返回302临时重定向
permant 返回301永久重定向
最终完整的重定向URL包括请求scheme(http://,https://等),请求的server_name_in_redirect和 port_in_redirec三部分 ,说白了也就是http协议 域名 端口三部分组成。

每日一题

1,防止服务器中木马
Linux下的木马经常是恶意者经过Web的上传目录的方式来上传木马到Linux服务器的,可根据从恶意者访问网站开始-->Linux系统-->HTTP服务-->中间件服务-->程序代码-->DB-->存储,层层设卡防御。php

  1. 开发程序代码对上传文件类型作限制,例如不能上传.php程序(JS及后端代码控制)。html

  2. 对上传的内容(包括文本和文件)检测,检测方式可经过程序、Web服务层(中间件层)、数据库等层面控制。前端

  3. 控制上传目录的权限以及非站点目录的权限(Linux文件目录权限+Web服务层控制)。node

  4.  传上木马文件后的访问和执行控制(Web服务层+文件系统存储层)。mysql

  5. 对重要配置文件、命令和WEB配置等文件作md5指纹及备份。linux

  6. 安装杀毒软件clamav等,按期监测查杀木马。ios

  7.  配置服务器防火墙及入侵检测服务。nginx

  8. 监控服务器文件变动、进程变化、端口变化、重要安全日志并及时报警web

从内部管理人员角度:防止被提权正则表达式

  1. 管理服务器或Web化管理服务器。

  2. ssh监听内网。

  3. 采用跳板机、操做审计。

  4. sudo集权管理、锁定关键文件。

  5. 站点目录、上传目录权限属组控制。

  6. 作系统及站点文件备份指纹监控报警。

  7. 动态口令认证。

对上传文件类型 和位置坐严格限制
上穿的文件配置最小权限
上传文件的目录属主最小合适权限
重要的文件作校验,MD5备份
服务器开放的端口作监控,有异常及时报警。

▼ kill -0 $pid 2> /dev/null
 kill -0 $pid中的-0表示不发送任何信号给PID对应的进程,可是仍会对变量值PID对应的进程是否存在进行检查,若是$pid对应的进程存在,则返回0,不存在返回1
2>/dev/null不输出错误信息

▼ 取IP的方式

ifconfig eth0 |sed -n '2p' | awk '{print $2 }'
ifconfig | grep "inet " | awk '{print $2} '
ifconfig | sed -nr 's@.inet ([0-9.]+[0-9]+) .$@\1@p'

▼ 软硬链接区别
硬连接文件与源文件的inode节点号相同,而软连接文件至关于windows下面的快捷方式(inode节点号与源文件不一样
特色:
• 不能对目录建立硬连接,但能够建立软连接,对目录的软连接会常常被用到

• 软连接能够跨文件系统,硬连接不能够跨文件系统。
• 删除软连接文件,对源文件及硬连接文件无任何影响;

• 删除文件的硬连接文件,对源文件及软连接文件无任何影响;

• 删除连接文件的源文件,对硬连接文件无影响,会致使其软连接失效(红底白字闪烁状);

• 同时删除源文件及其硬连接文件,整个文件才会被"真正"的删除。
文件的连接数显示的是硬连接的个数,和软连接个数无关
文件:
一、文件既能够建立软连接,也能够建立硬连接
目录:
一、目录只能够建立软连接,不能够建立硬连接
二、对于一个空目录,它有两个硬连接数,一个是它自己,一个是目录
   下的 "."文件,它每建立一个次一级目录,它的硬连接数目都会加
   1,由于每一个次一次目录下面都有一个“..”文件,但若是在该目录
   下建立文件硬连接数目就不会变化。
实际应用:
一、软连接文件能够做为快捷方式,简化繁琐的文件层次
二、硬连接文件能够用于重要文件,防止文件被误删等状况发生


域名计数
http://www.etiantian.org/index.html
http://www.etiantian.org/1.html
http://post.etiantian.org/index.html
http://mp3.etiantian.org/index.html
http://www.etiantian.org/3.html
http://post.etiantian.org/2.html

awk -F "/"  '{ip[$3]++} END{for(  i  in  ip)  print i ,ip[i] }'  awk

▼ 启动过程
1. 开机BIOS自检,加载硬盘。

2. MBR引导

    3. grub引导菜单

    4. 加载内核kernel

    5. 启动init进程

    6. 读取inittab文件,执行rc.sysinit,rc等脚本

    7. 启动mingetty,进入系统登录界面

▼路由转发,不一样网段IP互通,添加2个网卡分别在中间主机,分别配置路由,跳板机开启转发功能

▼ 数据库给最基础权限
▼ 防止命令行或脚本密码泄露
1,环境变量强制Linux不记录敏感历史命令
命令行执行HISTCONTROL=ignorespace后,再输入带密码的命令的前面加一个空格登陆,登陆命令不会被记录到历史记录里
2,删除命令行记录
history -d 历史命令序号
3,启动脚本+700 权限
4,密码写入my.conf 加700 权限,用户组改成MySQL

▼ 前端运行的命令放入后端
screen
nohup command &
ctrl +z 暂停,bg后台运行
▼ 获取最经常使用的命令
history | awk '{cmd[$2]++} END{for (i in cmd) print i,cmd[i] } ' | sort -nr -k 2 | head | column -t
▼ 生产环境中的硬盘分区



▼查看系统已经登录的命令
w 显示谁远程登陆了系统而且在干什么
who---显示谁远程登陆了
last--显示最近远程登陆的用户-也能够查看已经登陆的用户
lastlog-显示系统中所用用户的最近一次的登陆信息

查找出/tmp目录下面修改时间是7天之前,大小在50k到2M之间,并以.log结尾的文件
find /tmp -type f -mtime +7 -size +50k -size -2M -name "*.log"
▼awk累加
a 1
b 3
c 2
d 7
b 5
a 3
g 2
f 6
d 9
相同字母累加
awk '{count[$1]+=$2} END{for (i in count) print i,count[i]} ' awk

48 Oct 3bc1997 lpas 68.00 lvx2a 138
484 Jan 380sdf1 usp 78.00 deiv 344
483 nov 7pl1998 usp 37.00 kvm9d 644
320 aug der9393 psh 83.00 wiel 293
231 jul sdf9dsf sdfs 99.00 werl 223
230 nov 19dfd9d abd 87.00 sdiv 230
219 sept 5ap1996 usp 65.00 lvx2c 189
216 Sept 3zl1998 usp 86.00 kvm9e 234
要求: 奇数行与偶数行合并输出
sed 'N;s#\n# #g'
xargs -n14 < file 每行14列
xargs -d "\n" -n2< \n为分隔符,每行2列
awk'ORS=NR%2==0?"\n":" "'
awk'NR%2==1{line=$0;next}{print line,$0}'

▼线程与进程
进程:
优势:多进程能够同时利用多个CPU,可以同时进行多个操做。
缺点:耗费资源(建立一个进程从新开辟内存空间)。
进程不是越多越好,通常进程个数等于cpu个数。
 
线程:
优势:共享内存,尤为是进行IO操做(网络、磁盘)的时候(IO操做不多用cpu),可使用多线程执行并发操做。
缺点:抢占资源。
线程也不是越多越好,具体案例具体分析,切换线程关系到请求上下文切换耗时。
计算机中执行任务的最小单元:线程。
 
IO密集型(不用cpu):多线程
计算密集型(用cpu):多进程
费时的操做和消耗资源也就是占内存的操做放在子线程中,更新UI之类的放在主线程中,他们之间经过消息传递实现

用户访问网站流程

一、用户访问网站流程框架
二、DNS解析原理 *****
三、tcp/ip三次握手原理 *****
四、http协议原理(www服务的请求过程)请求报文细节!
五、大规模网站集群架构细节。
六、http协议原理(www服务的响应过程)响应报文细节!
七、tcp/ip四次挥手过程原理 *****

域名解析IP的过程,http请求链接,握手,报文请求网页,服务器响应,

▼内存占前三
ps -eo "%C : %p : %z : %a" --sort -vsz
psaux | sort -k4nr | head -3

使用rsync守护进程模式,常常会出现的异常状况说明

https://blog.51cto.com/lidao/1914588
▼ tcp报文控制字段
【源端口】- 16bit
来源处的端口号; 
   【目的端口】- 16bit 
  目的处的端口号; 
   【序号】- 32bit 
  每个TCP报文段都会有一个序号,序号字段的值实际上是本报文段所发送的数据的第一个字节的序号。
  这是由于TCP是面向链接的可靠服务,其每个字节都会对应一个序号,经过序号来确保服务的可靠性和有序性。 
   【确认号】- 32bit 
 确认号,是指望收到对方的下一个报文段的数据的第一个字节的序号。
   【数据偏移】- 4bit 
      其实它本质上就是“首部长度”,由于“数据偏移”是指TCP报文段的数据部分的起始处距离TCP报文段的起始处的距离。
      数据偏移总共占4bit,所以最大能表示的数值为15。而数据偏移的单位是“4字节”,
      此处的设计和IP数据报的设计是彻底相同的,因此说TCP报文段首部的长度最长为15×4=60字节,且首部长度必须为4字节的整数倍。 
    【保留字段】- 6bit 
      这6bit在标准中是保留字段,我猜想,有两个目的,
      第一个是预留除URG/ACK/PSH/RST/SYN/FIN/以外的冗余功能位;
      第二个是为了对其字节位。 
    【紧急字段URG】- 1bit 
      此字段告诉系统此报文段中有紧急数据,应尽快传送。当URG=1时, 
    【确认字段ACK】- 1bit 
      当ACK=1时,表示确认,且确认号有效;当ACK=0时,确认号字段无效。 
    【推送字段PSH】- 1bit 
      当PSH=1时,则报文段会被尽快地交付给目的方,不会对这样的报文段使用缓存策略。 
    【复位字段RST】- 1bit 
      当RST为1时,代表TCP链接中出现了严重的差错,必须释放链接,而后再从新创建链接。 
    【同步字段SYN】- 1bit 
      当SYN=1时,表示发起一个链接请求。 
    【终止字段FIN】- 1bit 
      用来释放链接。当FIN=1时,代表此报文段的发送端的数据已发送完成,并要求释放链接。 
    【窗口字段】- 16bit 
      此字段用来控制对方发送的数据量,单位为字节。 
      通常TCP链接的其中一端会根据自身的缓存空间大小来肯定本身的接收窗口大小,而后告知另外一端以肯定另外一端的发送窗口大小。 
    【校验和字段】- 16bit 
      这个校验和是针对首部和数据两部分的。 
    【紧急指针字段】- 16bit 
      紧急指针指出在本报文段中的紧急数据的最后一个字节的序号

▼一个网卡添加多个IP
别名及辅助IP
ifconfig eth0:1 10.0.0.100 netmask 255.255.255.224 up
辅助IP(secondary ip address)
ip addr add 10.0.0.100/24 dev eth0
ip addr add 10.0.0.101/24 broadcast 10.0.0.255 dev eth0
ip addr add 10.0.0.101/24 broadcast 10.0.0.255 dev eth0 label eth0:0

辅助IP则是由linux系统的ip命令建立和维护的,ip addr add建立的辅助IP,不能经过ifconfig查看,

    可是通ifconfig建立的别名IP却可在ip addr show命令查看

 1. heartbeat2.1.4及之前使用的是别名IP,heartbeat2.1.4之后使用的都是辅助IP,提供VIP服务

    2. keepalived一直都是用的辅助IP提供服务

▼查找文件并复制

find /tmp/ -type f -mtime +7 -size +50k -size -2M -name "*.log"|xargs -i cp {} /data
find /tmp/ -typef -mtime +7 -size +50k -size -2M -name "*.log" -exec cp {} /tmp \;
find /tmp/ -type f -mtime +7 -size +50k -size -2M -name "*.log"|xargs  cp -t/data
cp $( find /tmp/ -type f -mtime +7 -size +50k -size -2M -name"*.log")  /data

▼ 登录环境故障

-bash-4.1$
-bash-4.1$
通常是由于用户删除文件的时候,把当前用户的家目录的一些隐藏文件删除所致使的
解决方法:把用户老家的模板/etc/skel下面的文件复制过来,

▼ 文件命中有特殊字符删除(空格)
find /oldboy/0413/ -type f -name"*.log" -print0 |xargs -0 ls -l

单引号:
所见即所得:即将单引号内的内容原样输出
双引号: 变量命令展开
无引号:把内容输出出来,可能不会将含有空格的字符串视为一个总体输出, 若是内容中有命令、变量等,会先把变量、命令解析出结果,而后在输出最终内容来,若是字符串中带有空格等特殊字符,则不能完整的输出,须要改加双引号,通常连续的字符串,数字,路径等能够用,不过最好用双引号替代之


CPU使用率超过80%或硬盘超过85%邮件报警

[root@oldboy scripts]# cat check.sh
#!/bin/bash
LANG=en_US.UTF-8
cpuUsed=`top -n 1|awk -F '[, %]+' 'NR==3 {print100-$11}'`
diskUsed=$(df -h|awk -F '[ %]+'  '/\/$/{print $5}')
logFile=/tmp/jiankong.log
 
function Sendmail(){
    mail -s"监控报警" user@oldboyedu.com <$logFile
}
 
function check(){
    if [ `echo"$cpuUsed>80"|bc` -eq 1 -o $diskUsed -ge 85 ];then
       echo"CPU使用率:${cpuUsed}%,磁盘使用率:${diskUsed}%">$logFile
      Sendmail
    fi
}
 
function main(){
    check
}

main


如何快速删除Linux中海量小文件
当一个命令接上不少参数(几十万以上)会报一个错误:Argument list too long

1)  ls|xargs rm -f
2)  find . -type f|xargs rm -f
3)  mkdir /null
rsync-av --delete /null/ /tmp/


出现 kernel: nf_conntrack: table full, dropping packet.如何解决

dmesg或/var/log/messages 出现 kernel: nf_conntrack: table full, dropping packet.
上述结果会让业务访问很慢!各类网络服务耗时大幅上升,各类 timed out,各类丢包,彻底没法正常提供服务。大并发业务场景下,开防火墙很容易出现这种问题
解决方法1:关闭防火墙服务
解决方法2:修改内核参数/etc/sysctl.conf
更根本的解决方法是增长服务器或使用硬件防火墙分担请求

net.nf_conntrack_max= 25000000
net.netfilter.nf_conntrack_max= 25000000
net.netfilter.nf_conntrack_tcp_timeout_established= 180
net.netfilter.nf_conntrack_tcp_timeout_time_wait= 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait= 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait= 120


若是分区满了,如何增长调整分区的容量

  1. 若是使用LVM分区,而且服务器还有多余的硬盘空间,那么能够将这些空间合并到这个分区中。
  2. 若是没有使用LVM分区,可是服务器还有多余空间,能够在这个分区建立一个目录,而后将其余分区挂载到这个目录,变相扩大分区空间。
  3. 若是没有使用LVM分区,而且服务器没有剩余空间,那就须要找一台容量更大的服务器进行数据迁移。

▼ 1-100 累加
seq -s + 100 | bc
awk 'BEGIN{ for(i=1;i<=100;i++) {sum+=i} ;print sum }'

▼ 父进程产生子shell
执行脚本
command &
()
使用管道命令

▼ 取access ip 数
awk '{print $1}' access_log | sort -nr | uniq -c | sort -nr
awk '{s[$1]++}END{for (i in s) print s[i],i}' access.log |sort -rn

▼ 清除binlog 日志
从第一个文件删除到第四个 
mysql> purge binarylogs to 'mysql-bin.000004';
按照时间,删除指定时间以前的
mysql> PURGE MASTER LOGS BEFORE '2017-03-20 00:00:00';
清除全部bin-log
mysql> reset master;
二、设置自动删除
自动删除7天以前的bin-log文件写入配置文件
expire_logs_days = 7
命令行生效
set global expire_logs_days = 7;
▼ MySQL主从复制常见故障及解决方法

MySQL主从复制延迟问题缘由和解决方案

 问题1:主库的从库太多,致使复制延迟
从库数量通常 3—5个为宜,要复制的节点过多,致使复制延迟。
问题2:从库硬件配置比主库差,致使延迟
查看Master和Slave的配置,可能由于配置不当致使复制的延迟
问题3:慢SQL语句过多
假如一条语句执行时间超过2秒, 就须要进行优化进行调整
问题4:主从复制设计问题
主从复制单线程,若是主库的写入并发太大,来不及传送到从库,就会致使延迟,更高版本的MySQL能够支持多线程复制,门户网站则会本身 
开发多线程同步功能。
问题5:主从库之间的网络延迟
主从库网卡、网线、链接的交换机等网络设备均可能成为复制的瓶颈,致使复制延迟,另外跨公网主从复制很容易致使主从复制延迟。
问题6:主库读写压力大,致使复制延迟
主库硬件要好一些,架构前端要加buffer缓存层。

▼ 脚本开机自启动
方法一 简单粗暴/etc/rc.local 注意服务启动顺序

方法二 专业的管理工具chkconfig
    Chkconfig管理一个服务或脚本让他开机自启动有下面几个条件:
    1.这个服务或脚本必须存放在/etc/init.d目录下面
    2.必需要有执行权限(x权限)
    3.这个脚本或服务的前几行必需要有
    # chkconfig: 2345 99 99 必需要有这一行不然chkconfig不认识
    #[空格]chkconfig:[空格]默认在哪一个运行级别启动这个服务或软件[空格]第几个开机启动的[空格]关机的顺序
    4.chkconfig --add 服务名字/脚本名字 把服务或脚本加入到chkconfig 管理之中

    方法三
      systemd 服务建立


chmod命令没有执行权限(x权限)或者chmod命令文件的权限为000
方法一;

[root@oldboyedu bin]# cp cp /oldboy/chmod.new
(此时复制cp命令文件命名叫chmod.new,此时chmod.new文件有就x的权限,但chmod.new不具有有chmod命令的共功能)

[root@oldboyedu bin]# cd /oldboy/
[root@oldboyedu oldboy]# cat /bin/chmod > chmod.new
(把没有x权限的chmod命令文件内容cat到chmod.new,此时chmod.new就有了同chmod同样的功能)

[root@oldboyedu oldboy]# ll
total 52
-rwxr-xr-x 1 root root 52472 May  1 23:09 chmod.new
[root@oldboyedu oldboy]# ./chmod.new +x /bin/chmod
(能够用chmod.new文件给/bin/chmod命令受权x权限)
方法二:
使用ACL
 setfacl -m u:root:rwx /bin/chmod
 chmod +x /bin/chmod


1)第一个参数为URL,便可下载的文件;第二个参数为目录,即下载后保存的位置;
2)若是用户给的目录不存在,则提示用户是否建立;若是建立就继续执行,不然,函数返回一个51的错误值给调用脚本;
3)若是给的目录存在,则下载文件;下载命令执行结束后测试文件下载成功与否;若是成功,则返回0给调用脚本,不然,返回52给调用脚本;

root@oldboyedu scripts]# cat downfile.sh
#!/bin/bash
url=$1
dir=$2
download()
{
    if [ ! -e $dir ];then 
        read -p "$dir No such file or directory,create?(y/n)" answer
        if [ "$answer" == "y" ];then
        mkdir -p $dir
        cd $dir
        wget $url 1 >/dev/null 2>&1
        if [ $? -ne 0 ]; then
        return "52"
        fi
        else
        return "51"
        fi
    fi
    }
download $url $dir
echo $?

▼ 转换为大写
tr "[a-z]" "[A-Z]" < test.sh
awk '{print toupper($0) }' test.sh
sed 's#[a-z]#\u&#g' oldboy.txt

变量扩展-${para,pattern}
root@m01 ~]# echo {A..Z}
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
[root@m01 ~]# big=`echo {A..Z}`
[root@m01 ~]# echo $big
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
[root@m01 ~]# echo ${big,A}
a B C D E F G H I J K L M N O P Q R S T U V W X Y Z
[root@m01 ~]# echo ${big,*}
a B C D E F G H I J K L M N O P Q R S T U V W X Y Z
[root@m01 ~]# echo ${big,,*}
a b c d e f g h i j k l m n o p q r s t u v w x y z

▼alias 在 /root/.bashrc定义

▼ vim编辑命令的自动缩进功能所影响,所以粘贴带注释的代码时能够取消自动缩进
:set paste #<--在vim的命令行模式输入,关闭vim缩进功能
:set nopaste #<--开启vim缩进功能
修改用户家目录下的 .vimrc配置文件:
set pastetoggle=
▼ 逻辑卷配置

通配符
{}最经常使用的就是生成序列echo {a..z}
[]最经常使用的功能是正则表达式中的筐,表示或者 [abc] [a-z] [0-9]
正则
{n,m}
[ ] 中的字符

17/Apr/2015:09:29:24 +0800
变为 2015-04-17 09:29:24 +0800
sed -r 's@([0-9]+)/Apr/(2015)@\2-04-\1@' soho.txt | sed 's/:/ /'
awk 'BEGIN{FIELDWIDTHS="2 1 3 1 4 1 8 1 5"}{print $5"-04-"$1,$7,$NF}' system_date.txt

▼ 管道与管道| xargs
find  |xargs ls -ld##把前一个命令的结果,经过管道传递给后面的命令(ls -ld),传递的是文件名
find  | 命令    ##把前一个命令的结果,经过管道传递给后面的命令,传递的是普通的文本,文字,字符串

find /oldboy -type f |xargs  find命令找到的文件一次性都给 |xargs 处理
find /oldboy -type f -exec   -exec find命令找到一个文件 就传递给 -exec 处理一次

一个100M的磁盘分区,写入0.5K的文件,或写入1M的文件,分别能够写多少个

a、上面的考试题考察的是文件系统inode和block知识。
b、inode是存放文件属性信息的(也包含指向文件实体的指针),默认大小为128byte(c58),256byte(c64)
c、block是存放文件实际内容的。默认大小1K(boot)或4K(非系统分区默认给4K),通常企业多用4K的block。
d、一个文件至少要占用一个inode及一个block。
e、默认较大分区常规企业真实场景状况下,inode数量是足够的。而block数量消耗会更快

 一、默认分区常规状况下,对大文件来说inode是足够的。而block数量消耗的会更快,block为4K的状况下,1M的文件不会有浪费磁盘的状况,因此文件数量大概为100/1=100个。
二、对于小文件0.1K,inode会消耗的更快。默认分区block的数量大于inode数量的。每一个小文件都会占用一个inode和一个block,inode会先消耗完,文件总量是inode的数量。

▼ tmp目录的下的备份文件忽然没
在Centos/RHEL/Fedora系统下存在清理机制
tmpwatch命令的做用就是删除一段时间内不使用的文件
安装后会在/etc/cron.daily/目录下生成一个tmpwatch

▼ awk -F: -v OFS=":" '{a=$1;$1=$NF;$NF=a;print }' passwd
调换 /etc/passwd 文件里 root 位置和/bin/bash 位置
sed -r 's@^([^:]+)(:.:)(/.$)@\1--------\3---@p' passwd

▼ 统计/var/log/下全部文件个数
一、/var/log/下全部文件包括当前目录和子目录以及子目录的子目录下面的文件
二、linux下文件有不少类型,包括 普通文件、连接文件、字符设备文件、块设备文件、socket文件等

tree  /var/log/  | awk  'END { print  $3}'
 find  /var/log/     -type   f    | wc -l
  ll -R /var/log/ |egrep "^[sl-][rwx-]{9}"

批量添加20个用户,用户名为user1~20,密码为5个随机字符(要求不能使用shell循环语句)

 echo user{1..20}|xargs -n1|sed -r 's#(.*)#useradd \1 && pass=echo $RANDOM |md5sum |cut -c 1-5 && echo $pass |passwd --stdin \1 && echo \1 $pass>>/tmp/user_passwd.txt#g'|bash

echo user{01..20}|xargs -n1|awk '{print "useradd "$1"&& echo $(uuidgen|cut -c -8)|passwd --stdin "$1}'|bash
echo stu{01..10}|tr " " "\n"|sed -r 's#(.)#useradd \1;pass=$((RANDOM+10000000));echo $pass|passwd --stdin \1;echo \1\t$pass>>/tmp/user_pass.txt#g' | bash

oldboyedu.com
123456789
oldboy
oldgirl
1)删除文件每行的第二个字符
2)把全部小写字母用括号()括起来
sed -nr 's@(.)(.)(.
)@\1\3@p' soho.txt | sed -nr 's@([[:lower:]])@(\1)@gp'

sed 's#.##2' passwd
 sed  's@[a-z1-9]@(&)@g'  soho.txt

▼ 在目录/tmp下找到10个以abc开头的文件,而后把这些文件的第一行内容保存到文件new中
find . -maxdepth 1 -type f -ls | awk '{ print "cat "$NF " | head -1 >> new" }' |column -t | bash

cat /server/scripts/find.sh
#!/bin/sh
for filename in find /tmp -type f -name "abc*"|head -n 10
do
sed -n '1p' $filename>>new
done

▼ 经过Iptables来限定apache每秒钟链接数为1,峰值为3
iptables -A INPUT -d 172.16.100.1 -p tcp --dport -m limit --limit 1/second --limit-burst -j ACCEPT


文件节点问题inode ,mv文件后节点信息及对应点不变
Apache 产生的日志文件名为access_log,在apache 正在运行时,执行命令mv access_log access_log.bak,执行完后,请问新的apache 的日志会打印到哪里,为何?

新的日志会打印在access_log.bak 中,由于apache 启动时会找access_log 文件,随时准备向文件中加入日志信息,虽然此时文件被更名,可是因为服务正在运行,由于它的inode 节点的位置没有变,程序打开的fd 仍然会指向原来那个inode,不会由于文件名的改变而改变。apache 会继续向已更名的文件中追加日志,可是若重启apache 服务,系统会检查access_log文件件是否存在,若不存在则建立

▼ 实现172.16.1.0/24段全部主机经过124.32.54.26外网IP共享上网
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 124.32.54.26
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE

▼ trap 信号 linux系统脚本中trap信号都有哪些,如何进行使用

▼ grep -q oldboy /etc/passwd 静默模式,不打印到屏幕
▼ 让linux也像windows那样有一个回收站,避免数据的误删除,进而恢复误删数据

mkdir -p ~/.trash
cat >> .bashrc <<EOF
alias rm=trash
alias rl='ls ~/.trash'
alias ur=undelfile
undelfile()
{
  mv -i ~/.trash/ \$@ ./
}

trash()
{
  mv\$@ ~/.trash/
}

cleartrash()
{
   read -p "clear sure?[n]" confirm
    [\$confirm == 'y' ] || [ \$confirm == 'Y' ] && /bin/rm -rf ~/.trash/*
}
EOF

▼ ls 00.html  01.html  02.html  03.html  04.html  05.html  06.html  07.html  08.html  09.html  10.html
批量重命名
rename  .html  .jpg  .html
ls 
.html|awk -F. '{print "mv",$1".html",$1".jpg"}'mv 00.html 00.jpg
 for name in ls *.html;do echo $name ${name%.html}.jpg;done

▼Linux没法联网
IP设置,ping自身
ping 百度 域名解析状况
网关是否可达
路由是否异常

▼ /etc/profile 主要用是系统的环境变量,同时咱们也放些别名
/etc/bashrc 主要用来存放系统的别名和本身定义的函数(均可以放到 /etc/profile中)
.bashrc 是用户本身定义的别名
.bash_profile 是用户本身定义的环境变量
先读取/etc/profile文件,而后读取用户本身的.bash_profile而后读取.bashrc的内容最后读取/etc/bashrc这个文件

/etc/profile /etc/bashrc 为全局环境变量,到哪均可以用,这里只针对命令行,在一些软件中不行
    /etc/profile 放置系统的变量   别名也能够放在这里
    /etc/bashrc 放置别名
    .bashrc .bash_profile 只针对当前登录的用户生效

▼ 修改主机名
cat /etc/hostname
▼按下ctrl+c都会出现一个比较麻烦的字符信息^C
中断不显示^C:  stty -echoctl
终端显示^C:    stty echoctl
▼ 不显示文件空行
grep -v "^$" oldboy.txt
sed '/^$/d' oldboy.txt
awk '!/^$/' oldboy.txt
空格
grep -v "^[ ]$" oldboy.txt
sed  '/^[ ]
$/d' oldboy.txt
awk '!/^[ ]$/' oldboy.txt
空格或tab
sed '/^[ \t]
$/d' oldboy.txt
awk '!/^[ \t]*$/' oldboy.txt

实现 Nginx 代理的节点访问日志记录客户的 IP 而不是代理的 IP

使用proxy反向代理模块中的proxy_set_header参数

proxy_set_header X-Forwarded-For $remote_addr;
▼带宽暴增
a.真实遭受DDOS攻击(遇到过几回,形成影响的很少见,其中还有黑客勒索的案例)。
 b.内部服务器中毒,大量外发流量(这个问题老男孩接警5次以上)
 c.网站元素(如图片)被盗连,在门户页面被推广致使大量流量产生(接警3次以上)
 d.合做公司来抓数据,如:对合做单位提供了API数据接口(有合做的公司的朋友了解这个)
 e.购买了CDN业务,CDN猛抓源站(这个次数也很多)。
 f.其余缘由还有一些,不广泛就不提了。
▼目前已知形成硬盘分区只读的可能缘由有:
文件系统错误
内核相关硬件驱动bug
磁盘坏道
HBA卡故障
RAID卡故障

解决方法:
1.重启系统后看看是否能够自动恢复
2.使用fdisk修复
3.卸载只读的分区,而后从新mount挂载

把第一个文件中的第二、3行内容添加到第二个文件的第3行后面
[root@oldboy ~]# cat 1.txt
111
222
333
[root@oldboy ~]# cat 2.txt AAA
bbb
ccc
ddd
要求修改后的文件

[root@oldboy ~]# cat 2.txt
AAA
bbb
ccc
222
333
ddd
``

sed -n 2,3p 1.txt |xargs |sed -r 's# #\n#g'|sed -r 's#.*#sed -i "3a&" 2.txt#g' |bash
 sed -i "3a$(sed -n '2,3p' 1.txt |xargs |sed 's# #\n#g')" 2.txt 

nfs客户端挂载信息写入/etc/fstab中,系统重启,没有自动挂载是什么缘由

系统启动时,执行挂载操做的时候,网络服务尚未启动,而nfs挂 载须要网络服务
一、 系统启动时,同时启动netfs
chkconfig netfs on
二、 挂载命令写入
/etc/rc.local
▼ nginx 优化内容
1.gzip压缩优化
2.expires缓存优化
3.网络IO事件模型优化
4.隐藏软件名称和版本号
5.防盗链优化
6.禁止恶意域名解析
7.禁止经过IP地址访问网站。
8.HTTP请求方法优化。
9.防DOS攻击单IP并发链接的控制,与链接速率控制。
10.严格设置Web站点目录的权限。
11.将Nginx进程以及站点运行于监牢模式(nginx服务降权启动(不能使用80端口,使用其余端口,例如8080)、站点目录设置普通用户)。
12.经过robot协议以及HTTP_USER_AGENT防爬虫优化
13.配置错误页面根据错误码指定网页反馈给用户
14.Nginx日志相关优化
  访问日志切割轮询、不记录指定元素日志、最小化日志目录权限。
15.限制上传到资源目录的程序被访问,防止木马入侵系统破坏文件。
16.FastCGI参数buffer和cache以及超时等的优化。
17.php.ini和php-fpm.conf配置文件的优化。
18.有关Web服务的linux内核方面深度优化(网络链接、IO、内存等)。
19.Nginx加密传输优化(SSL)。
20.Web服务器磁盘挂载及网络文件系统优化。
21.使用Nginx cache。
22.nginx WAF(nginx+lua) 安全。

▼企业生产MySQL如何优化
a:硬件的优化:
一、 采用64位cpu,cpu至少4颗,L2缓存越大越好
二、 内存要大,32-64G运行1-2个实例,96-128G运行3-4个实例
三、 机械盘选用sas盘,转速15000以上,用可能的话使用ssd
四、 raid卡使用raid10
五、 网卡多块,千兆以上
六、 数据库不要使用虚拟化,slave硬件要好于master

b:操做系统优化
    一、    操做系统选择x86_64位,尽可能采用xfs文件系统
    二、    优化磁盘存储参数
    三、    优化内核参数
    四、    优化网络等

    c:mysql构架优化
    一、根据内存大小,配置服务器跑多实例
    二、主从复制采用mixed模式,尽可能不要跨机房同步,若要跨机房,尽可能采用远程写,本地读
    三、按期检查、修复主从复制的数据差别
    四、业务拆分,搜索功能不使用MySQL数据库执行;某些高并发,安全性通常的业务使用nosql,如:memcache、 redis等
    五、数据库前端加cache,如memcache,用于用户登陆,商品查询
    六、动态数据静态化,整个文件静态化,页面片断静态化
    七、数据库集群读写分离,一主多从,经过dbproxy进行集群读写分离
    八、单表超过800万,拆库拆表,如人工将(登陆、商品、订单)拆表拆库
    九、选择从库备份,而且对数据库进行分表分库备份

    d:MySQL数据库层面优化
    一、    优化my.cnf参数
    二、    优化库表设计,包括字符集、字符串长度、建立短索引、多用复合索引;
    三、    SQL语句优化,减小慢语句数量;

    e:数据库管理流程、制度优化
    一、    人的流程:开发—>核心运维/DBA
    二、    测试流程:内网 IDC测试线上执行
    三、    客户端管理,PHPMYADMIN

    f:MySQL数据库安全优化
    一、    数据库禁止设置外网
    二、    数据库文件权限优化;
    三、    受权用户权限限制,尽可能专库专用户
    四、    限制开发对生产库的操做权限
    五、    防止SQL语句注入

▼ 显示/etc/inittab中以#开头,且后面跟了一个或多个空白字符,然后又跟了任意非空白字符的行
egrep "^#[[:blank:]]+[^[:blank:]]" /etc/inittab
grep -P "^#[ \t]+[^ \t]
" /etc/inittab
grep -P "^#\s+\S+" /etc/inittab

sed -n '/^#[[:blank:]]+[^[:blank:]]*/p' /etc/inittab

sed -n '/^#[ \t]+[^ \t]*/p' /etc/inittab  
sed -nr '/^#\s+\S+/p' /etc/inittab

awk   '/^#[[:blank:]]+[^[:blank:]]/' /etc/inittab
awk   '/^#[ \t]+[^ \t]
/' /etc/inittab  
awk   '/^#\s+\S+/' /etc/inittab

▼iptables支持time时间控制用户行为,若有请写出具体操做步骤,限制在每一个星期一的0点0分0秒到23点59分59秒这个时间段内,全部icmp协议报文的应答都会拒绝
iptables -A INPUT -p ICMP --icmp-type 8 -m time --timestart 00:00:00 --timestop 23:59:59 --weekdays Mon -j DROP

▼ permission denied 即权限拒绝 没有权限,是咱们常见的故障之

显示目录里面的内容 须要oldboy用户对这个目录要有r和x的权限
删除一个文件须要oldboy用户对这个文件的上一级目录 拥有w和x权限。
对于修改文件的内容,要看oldboy用户对这个文件是否有r和w的权限

对shell脚本进行加密

shc
shc -r -f script-name 注意:要有-r选项, -f 后跟要加密的脚本名.
运行后会生成两个文件,script-name.x 和 script-name.x.c
script-name.x是加密后的可执行的二进制文件.
./script-name 便可运行.
script-name.x.c是生成script-name.x的原文件(c语言)
gzexe


书写脚本完成ftp上传下载

#!/bin/sh        
#FileName:ftpput.sh    
#Function:从本地客户端向ftp服务器上传一个文件      
#Version:V0.1        
#Author:    
#Date:
# $#表示传递给此Shell脚本的参数个数  
# -ne表示不等于  
if [ $# -ne 2  ]  
then  
    echo "Usage $0  <local_dir/filename> <remote_dir>"  
    exit 1  
fi    
说明:若是传递的参数个数不等于2个,即提示传参报错信息

# IP表示ftp的服务器ip地址  
IP=127.0.0.1    
#IP=192.168.6.1  
 
# FULLNAME获取本地文件全路径名  
FULLNAME=$1  
 
# DESTDIR获取须要上传的ftp远程目录路径  
DESTDIR=$2 

# basename返回一个路径中的文件名部分  
# 如FULLNAME="/home/Sunrier/Proj/log/test.log";  
# 当local_filename=`basename $FULLNAME`  
# 最终local_filename="test.log"  
local_filename=`basename $FULLNAME`  
 
# DESTFILE表示ftp服务器的路径,以及保存后的文件名  
DESTFILE=$DESTDIR/$local_filename  

# 自动上传文件到ftp服务器,免交互方式
ftp -i -n <<FTPIT  
open $IP  
user Sunrier redhat  
bin  
passive  
cd /home/remote/log/ftpfile  
put $FULLNAME $DESTFILE  
quit  
FTPIT  
exit 0
#FileName:ftpget.sh    
#Function:从ftp服务器上下载一个文件到本地计算机上      
#Version:V0.1        
#Author:
#Date:
     
# $#表示传递给此Shell脚本的参数个数  
# -ne表示不等于  
if [ $# -ne 2  ]  
then  
    echo "Usage $0  <remote_dir/filename> <local_dir>"  
    exit 1  
fi 

# IP表示ftp的服务器ip地址  
IP=127.0.0.1    
#IP=192.168.6.1 

# FULLNAME获取从ftp服务器上下载的文件全路径名  
FULLNAME=$1 

# DESTDIR获取从ftp服务器上下载的文件所存放的本地计算机的目录路径  
DESTDIR=$2  
 
# remote_filename获取从ftp服务器上下载的文件名  
remote_filename=`basename $FULLNAME`  
 
# DESTFILE表示下载文件所存放的本地路径,以及本地保存后的文件名  
DESTFILE=$DESTDIR/$remote_filename

ftp -i -n <<FTPIT  
open $IP  
user Sunrier redhat  
bin  
cd /home/remote/log/ftpfile  
get $FULLNAME $DESTFILE  
quit  
FTPIT       
exit 0

▼建设一个能承受500万PV/天天的网站吗? 500万PV是什么概念?
服务器每秒要处理多少个请求才能应对?如何计算呢?

PV是什么:
PV是page view的简写。PV是指页面的访问次数,每打开或刷新一次页面,就算作一个pv。

计算模型:
每台服务器每秒处理请求的数量=((80%总PV量)/(24小时60分60秒40%)) / 服务器数量 。
其中关键的参数是80%、40%。表示一天中有80%的请求发生在一天的40%的时间内。
24小时的40%是9.6小时,有80%的请求发生一天的9.6个小时当中(很适合互联网的应用,白天请求多,晚上请求少)。

简单计算的结果:
((80%500万)/(24小时60分60秒40%))/1 = 115.7个请求/秒
((80%100万)/(24小时60分60秒40%))/1 = 23.1个请求/秒

初步结论:
如今咱们在作压力测试时,就有了标准,若是你的服务器一秒能处理115.7个请求,就能够承受500万PV/天天。
若是你的服务器一秒能处理23.1个请求,就能够承受100万PV/天天。

留足余量:
以上请求数量是均匀的分布在白天的9.6个小时中,但实际状况并不会这么均匀的分布,会有高峰有低谷。
为了应对高峰时段,应该留一些余地,最少也要x2倍,x3倍也不为过。

115.7个请求/秒 2倍=231.4个请求/秒
115.7个请求/秒 3倍=347.1个请求/秒
23.1个请求/秒 2倍=46.2个请求/秒
23.1个请求/秒 3倍=69.3个请求/秒

最终结论:
若是你的服务器一秒能处理231.4—347.1个请求/秒,就能够应对平均500万PV/天天。
若是你的服务器一秒能处理46.2—69.3个请求,就能够应对平均100万PV/天天。

说明:
这里说明每秒N个请求,就是QPS。由于我关心的是应用程序处理业务的能力。

▼一、克隆虚拟机,克隆前需关闭虚拟机
二、克隆以后的网卡问题解决,其中须要修改HWADDR和UUID
  /etc/sysconfig/network-scripts/ifcfg-ens32
  uuid获取:用命令 nmcli con show 获取
  mac地址获取:从虚拟机的属性里获取
▼如何经过端口查找出进程所在目录
1.咱们能够从netstat -antup命令中获得进程的PID
2.进入/proc目录下以该PID命名的目录中
3.输入ls -ail,结果中 exe连接对应的就是可执行文件的全路经详细信息 
cwd符号连接的是进程运行目录;
exe符号链接就是执行程序的绝对路径;
cmdline就是程序运行时输入的命令行命令;
environ记录了进程运行时的环境变量;
fd目录下是进程打开或使用的文件的符号链接

找出/usr/local 下面全部shell脚本文件,并设置执行权限
find . -maxdepth 1 -type f | xargs file | awk -F":" '$2 ~ /shell script/ { print $1 }'
Mount挂载/data时出现mount: /data is busy 如何解决

查看是否正在使用中

    df -h查看下

    有时候会存在 df -h不会显示出来,但是实际还在挂载

    这时候 grep “/data” /proc/mounts 来进行查看

    而后卸载 umount /data

    卸载失败就强制卸载umount -lf /data

    而后mount新的设备便可。

▼timedatectl set-timezone Asia/Shanghai


php-fpm优化关闭危险参数有哪些

一、打开php的安全模式
php的安全模式是个很是重要的php内嵌的安全机制,可以控制一些php中的函数执行,好比system(),同时把被不少文件操做的函数进行了权限控制。
默认关闭,338行
safe_mode = Off
改成
safe_mode = On
二、用户组安全
; By default, Safe Mode does a UID compare check when
; opening files. If you want to relax this to a GID compare,
; then turn on safe_mode_gid.
; http://php.net/safe-mode-gid
safe_mode_gid = Off # php5.3.27默认关闭
三、关闭危险函数
当打开安全模式,函数禁止能够不作,但为了双重保险仍是作。好比不执行system()能执行系统命令的函数,或能查看php信息的phpinfo()等函数。方法以下
disable_functions = system,passthru,exec,shell_exec,popen,phpinfo
四、关闭php版本号
php版本号会在http的head里显示
expose_php = On
改成
expose_php = Off
五、关闭注册全局变量
register_globals = Off # 默认关闭,不要打开
六、打开magic_quotes_gpc防止SQL注入
magic_quotes_gpc = Off
改成
magic_quotes_gpc = On
七、错误信息控制
通常php在没有链接到数据库或者其余状况下会有错误提示,通常错误信息中会包含php脚本当前的路径信息或者查询的SQL语句等信息,这类信息在生产环境是不容许的,应禁止。想要错误信息,应该导入日志。
display_errors = Off (默认值,不是改成off)

显示错误级别
error_reporting = E_WARNING & E_ERROR
八、错误日志
log_errors = On
log_errors_max_len = 1024 # Set maximum length of log_errors.
error_log = /app/logs/php_errors.log # 注意写权限
九、资源参数限制优化

设置每一个脚本运行的最长时间,当没法上传较大的文件或者后台备份数据常常超时,需调整下面参数,单位秒。

max_execution_time = 30

每一个脚本使用的最大内存

memory_limit = 128M

每一个脚本等待输入数据最长时间

max_input_time = 60

上传文件的最大许可

upload_max_filesize = 2M
十、安全参数优化

禁止打开远程地址

allow_url_fopen = On
改成
allow_url_fopen = Off

防止Nginx文件类型错误解析漏洞

cgi.fix_pathinfo=0

▼ 建立普通文件
touch filename
建立目录文件
mkdir dirname
建立连接文件
ln -s filename linkname
建立块设备文件
mknod /dev/sdb b 16 8
建立字符类型文件
mknod /dev/ccc c 20 5
建立socket文件
mksock a.sock
建立管道文件
mkfifo pipe
▼网站访问高峰以后,如何回收已占用的swap分区
[root@oldboy ~]# swapoff -a
[root@oldboy ~]# swapon -a
[root@oldboy ~]# free -m
▼使用ssh-keygen命令的时候,须要输入3次回车,才能建立密钥对,如何一键非交互生产密钥对
方法一:
ssh-keygen -f ~/.ssh/id_rsa -q -N ''

方法二: ssh-keygen -t rsa -f ~/.ssh/id_dsa -P ""

相关文章
相关标签/搜索