kexec快速切换内核

kexec是一个用于在当前系统下快速切换到另一个内核的一种办法,它采用了一定的机制略过了硬件的初始化,所以切换速度会很快。

自2.6.13以后,Linux内核就已经自置了kexec,而Debian采用的内核已经是2.6.26,而且默认就支持kexec,所以在Debian下我们只要安装kexec-tools就行了。

$ yum install kexec-tools
$ sudo apt-get install kexec-tools

安装好以后,就可以开始加载其他的内核了。
先看看我有哪些内核可以用:

阅读剩余部分...

[快速上手]使用控制台管理维护Linux VPS

本文基于: Xshell和Linux Xen vps为基础截图。

当IP被封或者sshd设置不当造成无法启动或者连接不上的这个时候,你就可以使用控制台进入系统进行操作了,这样下来妈妈再也不担心我把VPS撸坏了。
言归正传

登录会员中心管理进入管理VPS

阅读剩余部分...

[快速上手]如何快速上手使用Linux VPS建立网站

本篇文章基于:Xen Pv VPS,服务端Centos6 X86 32Bit系统, 客户端Windows系统,Xshell终端软件.
对于刚接触Linux系统的人会感觉一头雾水,有的同学甚至会尝试使用远程桌面去连接管理。
其实Linux入门非常简单的,首先。。。你要有一个可以用的服务器或者VPS,如果你没有的话可以去https://www.kvmla.com购买一个。
准备好ssh客户端工具 可以直接在这儿下载 http://down.kvm.la/windows/Xshell4.exe,安装Xshell选择Free for Home/School,可以免费使用无须破解。
ssh客户端建议使用原生的,破解软件和一些汉化软件有植入后门,我们提供的下载链接可以放心使用。

再次重复说一次开始:先去https://www.kvmla.com购买一个服务器或者VPS,Xen VPS效果最佳。

登陆会员中心

登陆会员中心就可以看到您的主机

找到主机IP和密码

阅读剩余部分...

Linux将正在执行的进程转入后台

命令CTRL+Z强制将当前进程转为后台,并使之停止。 1、使进程恢复运行(后台)
使用命令bg
$bg
如果用CTRL+Z停止了几个程序,可用命令$jobs查看
如[1]- Running ./test1 &
[2]+Stopped ./test2
可使用命令$bg  %1  将任务1转入后台运行
2、使进程恢复至前台运行
命令$fg
总结:

阅读剩余部分...

解决vi vim中文乱码问题

yum install vim-minimal fonts-chinese -y
echo "set fencs=utf-8,GB18030,ucs-bom,default,latin1" >>/etc/vimrc
echo "set fencs=utf-8,GB18030,ucs-bom,default,latin1" >>/etc/virc

以上代码是基于centos

Centos安装cpulimit

debian的同学们直接apt-get 就有了

apt-get install cpulimit gawk

centos的就源码安装一下

yum -y --skip-broken install subversion gcc make gawk
cd /tmp
svn checkout https://cpulimit.svn.sourceforge.net/svnroot/cpulimit/trunk cpulimit
cd cpulimit
make
cp cpulimit /usr/bin/

官方地址:http://cpulimit.sourceforge.net/

Centos编译安装git

Git是用于Linux内核开发的版本控制工具。与常用的版本控制工具CVS、Subversion等不同,它采用了分布式版本库的方式,不必服务器端软件支持,使源代码的发布和交流极其方便。Git的速度很快,这对于诸如Linux kernel这样的大项目来说自然很重要。Git最为出色的是它的合并跟踪(merge tracing)能力。

yum install -y gettext-devel autoconf expat-devel cpio perl openssl-devel zlib-devel
wget http://www.codemonkey.org.uk/projects/git-snapshots/git/git-latest.tar.gz
tar xzvf git-latest.tar.gz
cd git-*
autoconf
./configure --with-curl=/usr/local
make
make install

MegaCli 常见用法

【前言】

使用 [SAS MegaRAID Linux MegaCLI] 可以在文字模式下很方便的查看目前 RAID 及 HDD 状态。

【作业环境】

CentOS 5.1 (Linux 2.6.18-53.el5)

Dell PowerEdge 1950

Dell RAID Controller PERC 5/i (Raid Card)

  • scsi0 : LSI Logic SAS based MegaRAID driver

SAS HDD 146 G * 2 (Build RAID-1)

阅读剩余部分...

mysql数据库的时时监控脚本

#!/bin/sh
MYSQL_PW=mysqlpass
logdir=/root/mysql-log
logfile=$logdir/thread.log
THR_MAX=50
[ ! -d $logdir ] && mkdir -p $logdir
while :;
do
        date >>$logfile
        thr=`mysql -uroot -p$MYSQL_PW  -e "status"|grep Threads|awk '{print $2}'`

                 echo -n "the process is :$thr " >>$logfile
                 [ $thr -gt $THR_MAX ] && mysql -uroot   -p$MYSQL_PW  -e "show full processlist"  >$logdir/`date +%y%m%d-%H%M`-proc.log
        echo  "" >>$logfile
        echo "===========================================" >>$logfile

        sleep 30
done

社区站点防灌水脚本

while :;
do
        tail -n 50000 /home/logs/access.log |grep '"/post'|awk '{print $1}' |sort |uniq -c |sort -n >/tmp/post1.txt
        awk '$1>80 {print $2}' /tmp/post1.txt >/tmp/post2.txt

        iptables -nvL |grep REJECT |awk '$1<5 {print $8}' >/tmp/post3.txt

        for ip in `cat /tmp/post3.txt`; do
                iptables -D INPUT -s $ip -j REJECT
        done

        for ip in `cat /tmp/post2.txt` ; do
                iptables -I INPUT -s $ip -j REJECT
        done
        sleep 1200
done

监控系统负载的脚本

#! /bin/bash

N=20
while :;
do
        load=`uptime |awk '{print $10}' |cut -d'.' -f 1`
        if [ $load -gt $N ] ; then

        uptime |awk '{print $1,$8,$9,$10,$11,$12}' >>/root/anaload/`date +%m%d`_anaload.txt
        vmstat 1 600 >>/root/anaload/`date +%m%d`_anaload.txt
        echo " " >>/root/anaload/`date +%m%d`_anaload.txt

        fi

        sleep 10
done

awk 与 sed


awk

(1).命令格式

有三种方式:

命令行方式:

awk [ -F 域分隔符 ] ‘commands’ input_file(s)

域分隔符不指定时缺省为空格,commands是awk命令语句。

awk脚本方式。
awk命令文本方式:

awk –f awk_script_file input_file(s)

(2).awk语句的构成

awk语句都由模式和动作组成。模式决定何时进行操作,动作是操作的具体内容。

模式可以是任何条件语句或复合语句或正则表达式。有两个特殊模式:BEGIN和END。BEGIN在任何文本浏览动作之前,END使用在完成文本浏览之后。

实际动作在{}中指定,简单如打印,复杂的如控制和循环等。

(3).域和记录

awk执行时,其浏览域用$1、$2、…、$n标识,多个域之间用逗号分隔,如$1,$3。

$0标识整个记录(整行)。

(4).awk中的正则表达式

除了基本的元字符外,awk中还可以使用如下两个字符:

+,匹配一个或多个字符;

?,匹配模式出现频率。

(5).awk条件操作符

操作符 描述 操作符 描述
< 小于 >= 大于等于
<= 小于等于 ~ 匹配正则表达式
== 等于 !~ 不匹配正则表达式
!= 不等于     


要匹配一个正则表达式,可以使用~后紧跟/正则表达式/,也可使用if语句,if后面的条件用()括起来。

如:

awk '{if ($4 ~ /Brown/) print $0}' grade.txtawk '$4 ~ /Brown/ {print $0}' grade.txt

(6).复合条件操作符

&&:语句两边必须同时匹配为真。

||:语句两边同时或其中一边为真。

!:求逆。

如:

awk '{if ($1 == "P.Bunny" && $4 == "Yellow") print $0}' grade.txtawk '{if ($4 == "Yellow" || $4 ~ /Brown/) print $0}' grade.txt

(7).awk内置变量

ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME Awk正在浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行-F选项
NF 浏览记录的域个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符


访问命令行参数的方法:ARGV[n]。

访问系统环境变量:ENVIRON[ “EDITOR” ] = “vi”。

FNR表示awk目前操作的记录数,其值小于等于NR。

NF表示记录域个数,在记录被读之后设置。

OFS允许指定输出域分隔符,缺省为空格。

ORS允许指定输出记录分隔符,缺省为新行(\n)。

RS为记录分隔符,缺省为新行(\n)。

例:

显示记录个数:

awk 'END {print NR}' grade.txt

文件非空时才操作:

awk '{if (NR > 0 && $4 ~ /Bronw/) print $0}' grade.txt

显示路径中的文件名:

echo “/usr/sybase/etc/rc.file” |awk -F/ '{print $NF}'

(8).awk其他操作符

= += -= *= /= %= ^= 赋值操作符
? 条件表达操作符
+ - * / % ^ 算术操作符
++ --  前缀和后缀


在awk中可以设置变量。如:

awk '{name=$1; belts=$4; \if (belts ~ /Yellow/) print name" is belt "belts}' grade.txt

(9).awk内置字符串函数

gsub(r,s) 在整个$0中用s替代r
gsub(r,s,t) 在整个t中用s替代r
index(s,t) 返回s中字符串t的第一位置
length(s) 返回s的长度
match(s,r) 测试s是否包含匹配r的字符串
split(s,a,fs) 在fs上将s分成序列a
sprintf(fmt,exp) 返回经fmt格式化后的exp
sub(r,s) 在$0中用最左边最长的子串s替代r
substr(s,p) 返回字符串s中从p开始的后缀部分
substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分


使用举例:

awk 'gsub(/4842/,4899) {print $0}' grade.txt
awk 'BEGIN {print index("Bunny","ny")}' grade.txt
awk '$1 == "J.Troli" {print length($1)" "$1}' grade.txt
awk 'BEGIN {print length("A good man")}'
awk 'BEGIN {print match("ABCD", /d/) }'
awk 'BEGIN { print split("123#456#678", myarray, "#"); \ print myarray[1]; print myarray[2]; print myarray[3])}'
awk "$1 == "J.Troli" {sub(/26/, "29", $0); print $0}' grade.txt
awk '$1 == "L.Tanskey" {print substr($1, 1, 5)}' grade.txt
awk '{print substr($1, 3)}' grade.txt

(10).字符串屏蔽序列

\b    退格键

\f    走纸换页

\n    新行

\r    回车键

\t    tab键

\ddd  八进制值

\c    任意其他特殊字符,如\\为反斜线

(11).awk输出函数printf

基本语法:< P>

printf( [格式控制项],参数)

格式控制类似与c语言中的printf函数。

例如:

awk 'BEGIN { printf "%f\n", 999}'awk 'BEGIN {print "Name\t\tS.Number"} {printf "%-15s %s\n", $1, $3 }'

(12).在命令行向awk传值

格式:

awk 命令变量=输入值。

如:

df -k |awk '($4 ~ /^[0-9]/) \ { if ($4 < TRIGGER) print $6"\t"$4}' TRIGGER=5600who |awk '{ if ($1 == user) print $1"connected to "$2}' user=$LOGNAME

(13).awk数组

数组使用前不用定义,一般使用循环来访问数组。格式:

for ( element in array ) print array[element]



sed

(1).命令格式

调用sed有三种格式:

命令行格式:

sed [选项] sed命令 输入文件

使用sed脚本文件:

sed [选项] –f sed脚本文件 输入文件

可执行sed脚本:

sed脚本 [选项] 输入文件

当没有输入文件时,sed从标准输入中接收输入。sed不会对原始输入文件做修改。

sed命令要用单引号括起来。

sed选项:

n:不打印,sed不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑)。

c:无用。

f:调用脚本文件。

(2).sed定位文本的方式

x x为一行号,如1
x,y 表示行号范围从x到y,如2,5
/pattern/ 查询包含模式的行
/pattern/pattern/ 查询包含两个模式的行
pattern/,x 在给定行号上查询包含模式的行
x,/pattern/ 通过行号和模式查询匹配行
x,y! 查询不包含指定行号x和y的行


sed模式匹配使用正则表达式。

(3).基本sed编辑命令

p 打印匹配行
= 显示文件行号
a\ 在定位行号后附加新文本信息
i\ 在定位行号后插入新文本信息
d 删除定位行
c\ 用新文本替换定位文本
s 使用替换模式替换相应模式
r 从另一个文件中读文本
w 写文本到一个文件
q 第一个模式匹配完成后退出或立即退出
l 显示与八进制ASCII码等价的控制字符
{} 在定位行执行的命令组
n 从另一个文件中读文本下一行,并附加在下一行
g 将模式2粘贴到/pattern n/
y 传送字符
n 延续到下一输入行,允许跨行的模式匹配


例如:

显示文本1到3行:

sed -n '1,3p' quote.txt

显示匹配的行:

sed -n '/Neave/p' quote.txt

在第四行查询模式:

sed -n '4,/The/p' quote.txt

匹配元字符(使用反斜线屏蔽含义):

sed -n '/\$/p' quote.txt

显示整个文件:

sed -n '1,$p' quote.txt

打印模式匹配的行号:

sed -n '/music/=' quote.txt

删除匹配的文本行:

sed '/Neave/d' quote.txt

写入文件/从文件读:

sed '/Neave/w dht' quote.txtsed '/company/r sedex.txt' quote.txt

匹配后退出:

sed '/.a.*/q' quote.txt

显示文件中控制字符:

sed -n '1,$l' func.txt

(4).附加文本

附加文本的操作格式(附加文本中的\表示换行,最后一行不加\,表示结束):

[address]a\text\text\text

插入文本、修改文本与此类似。

(5).替换文本

格式:

[address[,address]] s/pattern-to_find/replace_pattern/[g p w n]

替换选项:

g,缺省替换第一次出现,使用g替换所有出现。

p,打印。

w 文件名,将输出结果写到文件。

如:

sed -n 's/night/NIGHT/p' quote.txt

附加或修改原匹配模式,可以使用(&)命令,&保存发现模式。

将nurse改为”Hello” nurse:

sed -n 's/nurse/"Hello" &/p' quote.txt

通过sendmail和139邮箱监控服务器负载


#! /bin/bash

rmail="15810682546@139.com"
L="25"
host=`hostname`
while :; do
        load=`uptime |awk '{print $10}' |cut -d'.' -f 1`
        if [ $load -gt $L ] ; then
        uptime |awk '{print $8,$9,$10,$11,$12}'>/tmp/mail.txt
        mail -s $host:`cat /tmp/mail.txt|awk '{print $3$4$5}'` $rmail </tmp/mail.txt
        sleep 600
        fi
        sleep 3
done

监控网卡流量脚本

#! /bin/bash

rmail="15810682591@139.com"
N="2000000"
host=`hostname`
while :; do
        n=`sar -n DEV 1 2  |grep eth0 | tail -n1 |awk '{print $5}' |cut -d. -f1`
        if [ $n -gt $N ] ; then
        sar -n DEV 1 |grep eth0 | tail -n1>/tmp/sar.txt
        mail -s $host\_flow:`echo $n`  $rmail </tmp/sar.txt
        sleep 600
        fi
        sleep 3
done

监控服务器是否存活


#! /bin/bash

N=2
rmail=15810682546@139.com
while :; do
        ipfile=/usr/local/sbin/serverip.txt
        for ip in `cat $ipfile`; do
                mailfile=/tmp/pkgloss.txt
                pkgloss=`ping -c4 $ip |grep 'transm' |awk -F',' '{print $2}' |awk '{print $1}'`
                if [ $pkgloss -lt $N ]; then
                echo $ip >$mailfile
                ping -c4 $ip |grep 'transm' >>$mailfile
                mail -s "$ip loss packets"  $rmail<$mailfile
                fi
        done
        sleep 100
done