自动ban掉对web服务进行暴力扫描的ip

守护女神

自动ban掉对web服务进行暴力扫描的ip

# cat auto_block_ip.sh
#!/bin/bash

# 定义日志目录路径
LOG_DIR="/var/log/apache2"

# 获取当前时间减去10分钟的时间戳
TEN_MINUTES_AGO=(date -d "10 minutes ago" "+%d/%b/%Y:%H:%M:%S")

# 临时文件用于存储需要阻止的IP地址及其计数
TEMP_FILE=(mktemp)

# 遍历日志目录中的所有日志文件
for LOG_FILE in "LOG_DIR"/*.log; do
    # 检查文件是否存在且是普通文件
    if [[ -f "LOG_FILE" ]]; then
        # 使用awk处理日志文件,找出所有在最近10分钟内的404响应
        # 并按IP地址统计次数
        awk -v date="TEN_MINUTES_AGO" '
        BEGIN { FS=" "; OFS="\t"; }4 >= date && 9 == "404" {
            ip =1;
            count[ip]++;
        }
        END {
            for (ip in count) {
                if (count[ip] > 100) print ip, count[ip];
            }
        }' "LOG_FILE" >> "TEMP_FILE"
    fi
done

# 读取临时文件并使用ufw进行阻止
while IFS='\t' read -r ip count; do
    echo "Blocking IP:ip with count 404 responses."
    sudo ufw insert 2 deny fromip
done < "TEMP_FILE"

# 删除临时文件
rm -f "TEMP_FILE"

Solaris 命令使用

solaris

查看网络连接:
netstat -f inet -n

抓包到文件:
snoop -o test -x from 10.1.0.1

网卡状态:
ifconfig -a

查看ip:
ifconfig -a|grep inet

进程查看:
ps -ef

CPU占用查看:
prstat -a

查看shell程序:
echo $SHELL

使用bash做shell:
bash

重启:
reboot

Solaris 10 服务状态:
# svcs
查看当前所有的服务状态,可以使用|管道符重定向作更个性化的查找;如
# svcs |grep online 查看当前运行服务
# svcs |grep offline 查看当前停止服务
# svcs |grep inetd 查看inetd 服务状态
关闭ftp、telnet、sendmai 等网络服务:
# svcadm disable svc:/network/ftp
# svcadm disable svc:/network/telnet
# svcadm disable svc:/network/smtp:sendmail

 

============修改 ip 地址(验证确实)(转)====

1.确定网卡接口名
# kstat -c net | grep net
name: ce0 class: net
name: ce1 class: net

2.启动接口
# ifconfig ce0 plumb
3.设置IP
# ifconfig ce0 10.24.8.207 netmask 255.255.255.0 up
4.设置默认网关
# route add default 10.24.8.1
5.检查ip配置
# ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
ce0: flags=1000843<UP,BROADCAST,RUNNING ,MULTICAST,IPv4> mtu 1500 index 2
inet 10.24.8.207 netmask ffffff00 broadcast 10.24.8.255

注意配置的网卡状态中有RUNNING 字样,如果没有的话,可以考虑是网线没有插在相应的网卡接口上,
要么把网线插到正确的接口上,要么重新在正确的网络接口上配置IP。
以上配置在机器重启后会失效。
要使以上配置永久生效,按如下步骤修改各个文件。

二.永久生效配置(我是按照这种方法来做的)
1.修改/etc/hosts文件
这个文件中指定ip地址与别名的对应关系,如果以后要修改ip地址,修改这个文件的ip就可以
# cat /etc/hosts
127.0.0.1 localhost
10.24.8.207 testsvr.com testsvr loghost 
确实比较复杂,记录一下我的配置过程如下:
我的电脑打开这个文件里面的默认内容如下:\
::1 localhost loghost kxxq-dhcp-n2   (注:这一行也不知道是啥意思,就不管了,最后的一个kxxq..是我系统的名称)
127.0.0.1 localhost loghost kxxq-dhcp-n2  (注:这个127.0.0.1是一个回环地址,默认的所有的电脑都有的,不用改)
我自己做的修改是,只是在下一行添加上了一句:
59.70.157.101 testsvr testsvr kxxq-dhcp-n2  
这就行了,解释一下:第一个是ip,第二个是在下面的文件里对应的名字,最后的是一个系统名字(可以通过hostname -a 来得到,不过上面的已经有了,呵呵。。。。)
为避免系统报找不到本机机器名的错误,一定按照上面的样子配置IP 。
2.编辑网络接口文件
修改接口文件,如果不存在就直接创建,这个文件确定网络接口、别名、ip三者的对应关系。
有几个网卡,就有几个hostname.<接口名> 文件
这个文件只有一行内容,对应于/etc/hosts文件中ip地址后的别名
# cat /etc/hostname.ce0
testsvr
3.修改默认网关的配置 (注意,所谓的网关是要在这配置的)
# cat /etc/defaultrouter
10.24.8.1

4.修改子网掩码配置
# cat /etc/netmasks
10.24.8.207 255.255.255.0(注意了,这个地方有问题,前面的那个是网络地址,应该是10.24.8.0,记着,网络号,应该是0(对应于后面的子网来设的,记着,一般这个网络号最后都是0),并不是网关,也不是ip地址。后面的是子网掩码)
5.DNS设置
如果机器需要通过域名访问其他服务器,则必须配置DNS
#cat /etc/resolv.conf
domainname testsvr.com   (注:这个地方在我电脑试的时候不行,所以我把这一行删了,就成了,只剩下下一行就行了)
nameserver 10.24.7.7
当然,也可以在/etc/hosts文件中追加要访问的服务器的IP 和域名信息。
但是,如果使用/etc/resolv.conf 的话,必须同时修改 /etc/nsswitch.conf 的这一行
hosts: files
改为
hosts: files dns
这表示:将使用hosts文件解析主机,如果无法解析主机名将使用DNS。

Nginx 配置文件详解

 

 

顶级配置

 

 

  1. #定义 Nginx 运行的用户和用户组
  2. user nginx;
  3.  
  4. #进程文件
  5. pid /var/run/nginx.pid;
  6.  
  7. #错误日志位置和级别,debug、info、notice、warn、error、crit
  8. error_log  /var/log/nginx/error.log warn;
  9.  
  10. #Nginx worker 的进程数,一般可设置为可用的CPU内核数。
  11. worker_processes 8;
  12.  
  13. #每个 worker 打开文件描述符的最大数量限制。理论值应该是最多打开文件数(系统的值ulimit -n)与 nginx 进程数相除,但是 nginx 分配请求并不均匀,所以建议与ulimit -n的值保持一致。
  14. worker_rlimit_nofile 65535;
  15.  

复制代码

 

修改系统文件打开数量限制:

  1. sudo sh -c ulimit -HSn 65535 //临时修改

复制代码

 

重启后永久生效,则需要设置修改:

  1. sudo vim /etc/security/limits.conf

复制代码

 

在文件尾部添加:

  1. * soft nofile 200000
  2. * hard nofile 200000

复制代码

 

Events 模块

  1. events {
  2.     #设置一个worker进程同时打开的最大连接数
  3.     worker_connections 2048;
  4.  
  5.     #告诉nginx收到一个新连接通知后接受尽可能多的连接
  6.     multi_accept on;
  7.  
  8.     #设置用于复用客户端线程的轮询方法。如果你使用Linux 2.6+,你应该使用epoll。如果你使用*BSD,你应该使用kqueue。
  9.     use epoll;
  10. }
  11.  

复制代码

 

HTTP 模块

  1. http {
  2.     #隐藏 Nginx 的版本号,提高安全性。
  3.     server_tokens off;
  4.  
  5.     #开启高效文件传输模式,sendfile 指令指定 Nginx 是否调用sendfile 函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘 IO 重负载应用,可设置为 off,以平衡磁盘与网络 I/O 处理速度,降低系统的负载。
  6.     sendfile on;
  7.  
  8.     #是否开启目录列表访问,默认关闭。
  9.     autoindex off;
  10.  
  11.     #告诉 Nginx 在一个数据包里发送所有头文件,而不一个接一个的发送
  12.     tcp_nopush on;
  13.  
  14.     #告诉 Nginx 不要缓存数据,而是一段一段的发送–当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值。Nginx 默认会始终工作在 tcp nopush 状态下。但是当开启前面的 sendfile on; 时,它的工作特点是 nopush 的最后一个包会自动转转换到 nopush off。为了减小那200ms的延迟,开启 nodelay on; 将其很快传送出去。结论就是 sendfile on; 开启时,tcp_nopush 和 tcp_nodelay 都是on 是可以的。
  15.     tcp_nodelay on;
  16.  
  17.     #日志格式设定
  18.     log_format  main  ‘remote_addr –remote_user [time_local] “request” ‘
  19.     ‘statusbody_bytes_sent “$http_referer” ‘
  20.     ‘”http_user_agent” “http_x_forwarded_for”‘;
  21.     #定义访问日志,设置为 off 可以关闭日志,提高性能
  22.     access_log /var/log/nginx/access.log main;
  23.  
  24.  
  25.     #连接超时时间,单位是秒
  26.     keepalive_timeout 120;
  27.  
  28.     #读取HTTP头部的超时时间,默认值 60。客户端与服务器建立连接后将开始接收HTTP头部,在这个过程中,如果在一个时间间隔(超时时间)内没有读取到客户端发来的字节,则认为超时,并向客户端返回408 (“Request timed out”)响应。
  29.     client_header_timeout 60;
  30.  
  31.     #默认值 60。与client_header_timeout相似,只是这个超时时间只在读取HTTP包体时才有效。
  32.     client_body_timeout 10;
  33.  
  34.     #发送响应的超时时间,默认值 60。即Nginx服务器向客户端发送了数据包,但客户端一直没有去接收这个数据包。如果某个连接超过send_timeout定义的超时时间,那么Nginx将会关闭这个连接。
  35.     send_timeout 60;
  36.  
  37.     #连接超时后将通过向客户端发送RST包来直接重置连接。这个选项打开后,Nginx会在某个连接超时后,不是使用正常情形下的四次握手关闭TCP连接,而是直接向用户发送RST重置包,不再等待用户的应答,直接释放Nginx服务器上关于这个套接字使用的所有缓存(如TCP滑动窗口)。相比正常的关闭方式,它使得服务器避免产生许多处于FIN_WAIT_1、FIN_WAIT_2、TIME_WAIT状态的TCP连接。注意,使用RST重置包关闭连接会带来一些问题,默认情况下不会开启。
  38.     reset_timedout_connection off;
  39.  
  40.     #要限制连接,必须先有一个容器对连接进行计数,”zone=” 是给它一个名字,可以随便叫,这个名字要跟下面的 limit_conn 一致。$binary_remote_addr 用二进制来储存客户端的地址,1m 可以储存 32000 个并发会话。
  41.     limit_conn_zone $binary_remote_addr zone=addr:5m;
  42.  
  43.     #给定的key设置最大连接数。这里key是addr,我们设置的值是100,也就是说我们允许每一个IP地址最多同时打开有100个连接。
  44.     limit_conn addr 100;
  45.  
  46.     #对每个连接限速100k。这如果一个IP允许两个并发连接,那么这个IP就是限速200K。
  47.     limit_rate 100k; 
  48.  
  49.     #include 是一个在当前文件中包含另一个文件内容的指令。这里我们使用它来加载文件扩展名与文件类型映射表。nginx根据映射关系,设置http请求响应头的Content-Type值。当在映射表找不到时,使用nginx.conf中default-type指定的默认值。
  50.     include /etc/nginx/mime.types;
  51.  
  52.     #设置文件使用的默认的MIME-type
  53.     default_type text/html;
  54.  
  55.     #默认编码
  56.     charset UTF-8;
  57.  
  58.     #该模块可以读取预先压缩的gz文件,这样可以减少每次请求进行gzip压缩的CPU资源消耗。该模块启用后,nginx首先检查是否存在请求静态文件的gz结尾的文件,如果有则直接返回该gz文件内容。
  59.     gzip_static off;  
  60.  
  61.     #开启 gzip 压缩。
  62.     gzip on;
  63.  
  64.     # 禁用客户端为 IE6 时的 gzip功能。
  65.     gzip_disable “msie6”;
  66.  
  67.     #Nginx做为反向代理的时候启用。可选值:off|expired|no-cache|no-sotre|private|no_last_modified|no_etag|auth|any
  68.     gzip_proxied any;
  69.  
  70.     #设置允许压缩的页面最小字节数,页面字节数从header头中的Content-Length中进行获取。建议设置成大于1k的字节数,小于1k可能会越压越大。
  71.     gzip_min_length 1024;
  72.  
  73.     #设置数据的压缩等级。这个等级可以是1-9之间的任意数值,9是最慢但是压缩比最大的。
  74.     gzip_comp_level 5;
  75.  
  76.     #设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。 例如 4 4k 代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。
  77.     gzip_buffers 4 16k;
  78.  
  79.     #设置需要压缩的数据格式。Nginx默认只对text/html进行压缩。
  80.     gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
  81.  
  82.     #为打开文件指定缓存,默认是没有启用的,max 指定缓存数量,建议和打开文件数一致,inactive 是指经过多长时间文件没被请求后删除缓存。
  83.     open_file_cache max=65535 inactive=30s;
  84.  
  85.     #多长时间检查一次缓存的有效信息
  86.     open_file_cache_valid 30s;
  87.  
  88.     #open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的。出现 Last-Modified 不变的情况,就是因为当nginx对一个静态文件缓存后,如果30s内还在访问它,那么它的缓存就一直存在,直到30s内你不访问了为止。
  89.     open_file_cache_min_uses 2;
  90.     #是否记录cache错误
  91.     open_file_cache_errors on;
  92.  
  93.     include /etc/nginx/conf.d/*.conf;
  94.     include /etc/nginx/sites-enabled/*;
  95. }
  96.  

复制代码

 

SERVER 模块

  1. server {
  2.     #监听端口,nginx 会根据请求的 HOST 来决定使用哪个 SERVER 段的配置。如果没有匹配的 server_name,则默认使用配置文件中第一个。加上 default_server 则可以以指定没有匹配时的默认规则。
  3.     #listen 80;
  4.     listen 80 default_server;
  5.  
  6.     #域名可以有多个,用空格隔开
  7.     server_name www.test.com test.com;
  8.     root /user/share/nginx/html/test;
  9.  
  10.     #404页面配置
  11.     error_page   404   /404.html;
  12.  
  13.     #配置 ssl,有需要时开启。
  14.     ssl on;
  15.     ssl_certificate /etc/nginx/ssl/server.crt;
  16.     ssl_certificate_key /etc/nginx/ssl/server.key;
  17.  
  18.     location / {
  19.         index   index.html index.php;
  20.     }
  21.  
  22.     #图片缓存时间设置
  23.     location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ {
  24.         expires 10d;
  25.     }
  26.  
  27.     #JS和CSS缓存时间设置
  28.     location ~ .*.(js|css)?$ {
  29.         expires 1h;
  30.     }
  31.  
  32.     location ~ [^/]\.php(/|$) {
  33.         fastcgi_index   index.php;
  34.         #开启 PATH_INFO 支持,作用就是把参数按照给定的正则表达式分割成 fastcgi_script_name 和fastcgi_path_info。
  35.         #例如:请求 index.php/id/1 不加此行配置时,fastcgi_script_name 是 /index.php/id/1,fastcgi_path_info 是空。
  36.         #加上之后,fastcgi_script_name 是 index.php,fastcgi_path_info 是 /id/1
  37.         fastcgi_split_path_info ^(.+\.php)(.*)$;
  38.  
  39.         #此值即是 PHP 中 $_SERVER[‘SCRIPT_FILENAME’] 的值
  40.         fastcgi_param   SCRIPT_FILENAME document_rootfastcgi_script_name;
  41.         fastcgi_param   PATH_INFO               $fastcgi_path_info;
  42.         fastcgi_param   PATH_TRANSLATED document_rootfastcgi_path_info;
  43.  
  44.         #指定FastCGI服务器监听端口与地址。须和 PHP-FPM 的设置相同。
  45.         #fastcgi_pass   127.0.0.1:9000;
  46.         fastcgi_pass    unix:/var/run/php5-fpm.sock;
  47.         include fastcgi_params;
  48.     }
  49. }
  50.  

复制代码

 

参考资料

1、http://nginx.org/en/docs/


2、http://www.oschina.net/translate/nginx-setup


3、http://www.ha97.com/5194.html

MySQL常用命令集锦

一、连接MYSQL。 


    格式: mysql -h主机地址 -u用户名 -p用户密码


    1、连接到本机上的MYSQL。


    首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码.


    如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql>


    2、连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:


    mysql -h110.110.110.110 -u root -p 123;(注:u与root之间可以不用加空格,其它也一样)


    3、退出MYSQL命令: exit (回车)


    


二、修改密码。 


    格式:mysqladmin -u用户名 -p旧密码 password 新密码


    1、给root加个密码ab12。首先在DOS下进入目录mysql\bin,然后键入以下命令


    mysqladmin -u root -password ab12


    注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。


    2、再将root的密码改为djg345。


    mysqladmin -u root -p ab12 password djg345





三、增加新用户。 


    (注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)


    格式:grant select on 数据库.* to 用户名@登录主机 identified by “密码”


    1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用root用户连入MYSQL,然后键入以下命令:


    grant select,insert,update,delete on *.* to test1@”%” Identified by “abc”;


    但增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,解决办法见2。


    2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),


    这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MYSQL主机上的web页来访问了。


    grant select,insert,update,delete on mydb.* to test2@localhost identified by “abc”;


    如果你不想test2有密码,可以再打一个命令将密码消掉。


    grant select,insert,update,delete on mydb.* to test2@localhost identified by “”;
 
 



下篇我是MYSQL中有关数据库方面的操作。注意:你必须首先登录到MYSQL中,以下操作都是在MYSQL的提示符下进行的,而且每个命令以分号结束。


一、操作技巧


    1、如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。


    也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就OK。


    2、你可以使用光标上下键调出以前的命令。


二、显示命令


    1、显示当前数据库服务器中的数据库列表:


    mysql> SHOW DATABaseS;


    注意:mysql库里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。


    2、显示数据库中的数据表:


    mysql> USE 库名;


    mysql> SHOW TABLES;


    3、显示数据表的结构:


    mysql> DESCRIBE 表名;


    4、建立数据库:


    mysql> CREATE DATABASE 库名;


    5、建立数据表:


    mysql> USE 库名;


    mysql> CREATE TABLE 表名 (字段名 VARCHAR(20), 字段名 CHAR(1));


    6、删除数据库:


    mysql> DROP DATABASE 库名;


    7、删除数据表:


    mysql> DROP TABLE 表名;


    8、将表中记录清空:


    mysql> DELETE FROM 表名;


    9、显示表中的记录:


    mysql> SELECT * FROM 表名;


    10、往表中插入记录:


    mysql> INSERT INTO 表名 VALUES (”hyq”,”M”);


    11、更新表中数据:


    mysql-> UPDATE 表名 SET 字段名1='a',字段名2='b' WHERE 字段名3='c';


    12、用文本方式将数据装入数据表中:


    mysql> LOAD DATA LOCAL INFILE “D:/mysql.txt” INTO TABLE 表名;


    13、导入.sql文件命令:


    mysql> USE 数据库名;


    mysql> SOURCE d:/mysql.sql;


    14、命令行修改root密码:


    mysql> UPDATE mysql.user SET password=PASSWORD('新密码') WHERE User='root';


    mysql> FLUSH PRIVILEGES;


    15、显示use的数据库名:


    mysql> SELECT DATABASE();


    16、显示当前的user:


    mysql> SELECT USER();


三、一个建库和建表以及插入数据的实例


    drop database if exists school; //如果存在SCHOOL则删除


    create database school; //建立库SCHOOL


    use school; //打开库SCHOOL


    create table teacher //建立表TEACHER


    (


    id int(3) auto_increment not null primary key,


    name char(10) not null,


    address varchar(50) default ‘深圳',


    year date


    ); //建表结束


    //以下为插入字段


    insert into teacher values(”,'allen','大连一中','1976-10-10′);


    insert into teacher values(”,'jack','大连二中','1975-12-23′);


    如果你在mysql提示符键入上面的命令也可以,但不方便调试。


    (1)你可以将以上命令原样写入一个文本文件中,假设为school.sql,然后复制到c:\\下,并在DOS状态进入目录[url=]\\mysql\\bin[/url],然后键入以下命令:


    mysql -uroot -p密码 < c:\\school.sql


    如果成功,空出一行无任何显示;如有错误,会有提示。(以上命令已经调试,你只要将//的注释去掉即可使用)。


    (2)或者进入命令行后使用 mysql> source c:\\school.sql; 也可以将school.sql文件导入数据库中。


四、将文本数据转到数据库中 


    1、文本数据应符合的格式:字段数据之间用tab键隔开,null值用[url=]\\n[/url]来代替.例:


    3 rose 大连二中 1976-10-10


    4 mike 大连一中 1975-12-23


    假设你把这两组数据存为school.txt文件,放在c盘根目录下。


    2、数据传入命令 load data local infile “c:\\school.txt” into table 表名;


    注意:你最好将文件复制到[url=]\\mysql\\bin[/url]目录下,并且要先用use命令打表所在的库。


五、备份数据库:(命令在DOS的[url=]\\mysql\\bin[/url]目录下执行) 


    1.导出整个数据库


    导出文件默认是存在mysql\bin目录下


    mysqldump -u 用户名 -p 数据库名 > 导出的文件名


    mysqldump -u user_name -p123456 database_name > outfile_name.sql


    2.导出一个表


    mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名


    mysqldump -u user_name -p database_name table_name > outfile_name.sql


    3.导出一个数据库结构


    mysqldump -u user_name -p -d –add-drop-table database_name > outfile_name.sql


    -d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table


    4.带语言参数导出


    mysqldump -uroot -p –default-character-set=latin1 –set-charset=gbk –skip-opt database_name > outfile_name.sql


    1. 备份数据库 


    mysqldump -uroot -p test_db > test_db.sql 


    2. 恢复数据库 


    mysql -uroot -p test_db < test_db.sql 


    3. 创建权限 


    grant all privileges on test_db.* to test_db@'localhost' identified by '123456'; 


    兼容mysql4.1之前模式: 


    update mysql.user set password=old_password('123456') where user='test_db'; 


    4. 忘记密码 


    在“my.cnf”或“my.ini”文件的“mysqld”配置段添加“skip-grant-tables”,然后重新启动mysql即可登录修改root密码。

Linux常用系统性能监控命令

监控CPU使用率





使用下面的命令:





[root@localhost ~]# gnome-system-monitor





将会出现图形化工具GNOME System Monitor,如下图所示:





1.jpg 





监控CPU调度程序运行队列





linux可以使用vmstat命令





vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写, 是实时系统监控工具。该命令通过使用knlist子程序和/dev/kmen伪设备驱动器访问这些数据,输出信息直接打印在屏幕。vmstat反馈的与CPU相关的信息包括:


(1)多少任务在运行


(2)CPU使用的情况


(3)CPU收到多少中断


(4)发生多少上下文切换





下面只介绍 Vmstat与CPU相关的参数





vmstat的语法如下:





vmstat [delay [count]]





参数的含义如下:





2.jpg 





当没有参数时,vmstat则显示系统启动以后所有信息的平均值。有delay时,第一行的信息自系统启动以来的平均信息。从第二行开始,输出为前一个delay时间段的平均信息。当系统有多个CPU时,输出为所有CPU的平均值。





3.jpg 





total_cur = user + system + nice + idle + iowait + irq + softirq





total_pre = pre_user + pre_system + pre_nice + pre_idle + pre_iowait + pre_irq + pre_softirq





total = total_cur – total_pre





[root@localhost ~]# vmstat





运行结果如下:





4.jpg 





监控锁竞争





使用 sysstat包中的pidstat命令来监控





[root@localhost ~]# pidstat





运行结果如下:





Linux 2.6.32-431.el6.x86_64 (localhost.localdomain) 05/07/15 _x86_64_ (1 CPU)





09:58:18 PID %usr %system %guest %CPU CPU Command


09:58:18 1 0.00 0.00 0.00 0.00 0 init


09:58:18 4 0.00 0.00 0.00 0.00 0 ksoftirqd/0





……





09:58:18 37143 0.00 0.00 0.00 0.00 0 dbus-launch


09:58:18 37144 0.00 0.00 0.00 0.00 0 dbus-daemon


09:58:18 37268 0.00 0.00 0.00 0.00 0 fprintd


09:58:18 37272 0.00 0.00 0.00 0.00 0 pidstat





监控网络I/O使用率





nicstat原本是Solaris平台下显示网卡流量的工具,Tim Cook将它移植到linux平台





首先安装之,源码在这里下, 这里使用的版本是1.92。





安装make环境:





yum install gcc gcc-c++ make automake autoconf -y





由于nicstat依赖32bitglibcpackage,所以





yum install libgcc.i686 glibc.i686 glibc-devel.i686  -y





下载文件并安装:





# wget -c http://nchc.dl.sourceforge.net/p … nicstat-1.92.tar.gz


# tar zxvf nicstat-1.92.tar.gz # cd nicstat-1.92 # cp Makefile.Linux Makefile # uname -m





[root@localhost nicstat-1.92]# make


gcc -O3 -m32 nicstat.c -o nicstat


nicstat.c:99:1: warning: "DUPLEX_UNKNOWN" redefined


In file included from nicstat.c:84:


/usr/include/linux/ethtool.h:691:1: warning: this is the location of the previous definition


mv nicstat `./nicstat.sh –bin-name`





[root@localhost nicstat-1.92]# ./nicstat.sh





5.jpg 





磁盘I/O使用率





iostat [-t] [-c] [interval [count]]





参数的含义如下:





6.jpg 





当没有参数时,iostat则显示系统启动以后所有信息的平均值。与CPU有关的输出的含义





7.jpg 





total_cur = user + system + nice + idle + iowait + irq + softirq





total_pre = pre_user + pre_system + pre_nice + pre_idle + pre_iowait + pre_irq + pre_softirq





total = total_cur – total_pre





有interval时,第一行的信息自系统启动以来的平均信息。从第二行开始,输出为前一个interval时间段的平均信息。





使用iostat命令





[root@localhost ~]# iostat





运行结果如下:





Linux 2.6.32-431.el6.x86_64 (localhost.localdomain) 05/07/15 _x86_64_ (1 CPU)





avg-cpu: %user %nice %system %iowait %steal %idle


6.12 0.00 1.35 2.35 0.00 90.19





Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn


sda 6.03 267.11 272.53 26904430 27450404








PS:附上Brendan Gregg个人站点上分享了很多Linux 性能相关的资源:





Linux observability tools| Linux 性能观测工具





8.jpg 





Linux benchmarking tools| Linux 性能测评工具


9.jpg 





Linux tuning tools| Linux 性能调优工具


10.jpg 





Linux observability sar


11.jpg 





愈看更多图表和演讲,请移步:http://www.brendangregg.com/linuxperf.html





补充:去年在微博分享 BrendanGregg 在SCaLE 11x 大会上的演讲《Linux Performance Analysis and Tools | Linux 性能分析和工具》,这个链接(https://www.joyent.com/blog/linux-performance-analysis-and-tools-brendan-gregg-s-talk-at-scale-11x)中有演讲视频(Youtube)和幻灯片(SlideShare),所以请自带梯子访问。





参考资料


http://www.cnblogs.com/argb/p/3448661.html





http://blog.jobbole.com/76103/





http://blog.yufeng.info/archives/2518





原文地址:http://www.kuqin.com/shuoit/20150608/346478.html

SED单行脚本快速参考

整理:Eric Pement
译者:Joe Hong 

摘自网络.


文本间隔:
--------

 # 在每一行后面增加一空行
 sed G

 # 将原来的所有空行删除并在每一行后面增加一空行。
 # 这样在输出的文本中每一行后面将有且只有一空行。
 sed '/^/d;G'

 # 在每一行后面增加两行空行
 sed 'G;G'

 # 将第一个脚本所产生的所有空行删除(即删除所有偶数行)
 sed 'n;d'

 # 在匹配式样“regex”的行之前插入一空行
 sed '/regex/{x;p;x;}'

 # 在匹配式样“regex”的行之后插入一空行
 sed '/regex/G'

 # 在匹配式样“regex”的行之前和之后各插入一空行
 sed '/regex/{x;p;x;G;}'

编号:
--------

 # 为文件中的每一行进行编号(简单的左对齐方式)。这里使用了“制表符”
 # (tab,见本文末尾关于'\t'的用法的描述)而不是空格来对齐边缘。
 sed = filename | sed 'N;s/\n/\t/'

 # 对文件中的所有行编号(行号在左,文字右端对齐)。
 sed = filename | sed 'N; s/^/     /; s/ *\(.\{6,\}\)\n/\1  /'

 # 对文件中的所有行编号,但只显示非空白行的行号。
 sed '/./=' filename | sed '/./N; s/\n/ /'

 # 计算行数 (模拟 "wc -l")
 sed -n '='

文本转换和替代:
--------

 # Unix环境:转换DOS的新行符(CR/LF)为Unix格式。
 sed 's/.//'                     # 假设所有行以CR/LF结束
 sed 's/^M//'                    # 在bash/tcsh中,将按Ctrl-M改为按Ctrl-V
 sed 's/\x0D//'                  # ssed、gsed 3.02.80,及更高版本

 # Unix环境:转换Unix的新行符(LF)为DOS格式。
 sed "s//`echo -e \\\r`/"        # 在ksh下所使用的命令
 sed 's/'"/`echo \\\r`/"         # 在bash下所使用的命令
 sed "s//`echo \\\r`/"           # 在zsh下所使用的命令
 sed 's//\r/'                    # gsed 3.02.80 及更高版本

 # DOS环境:转换Unix新行符(LF)为DOS格式。
 sed "s///"                      # 方法 1
 sed -n p                         # 方法 2

 # DOS环境:转换DOS新行符(CR/LF)为Unix格式。
 # 下面的脚本只对UnxUtils sed 4.0.7 及更高版本有效。要识别UnxUtils版本的
 #  sed可以通过其特有的“--text”选项。你可以使用帮助选项(“--help”)看
 # 其中有无一个“--text”项以此来判断所使用的是否是UnxUtils版本。其它DOS
 # 版本的的sed则无法进行这一转换。但可以用“tr”来实现这一转换。
 sed "s/\r//" infile >outfile     # UnxUtils sed v4.0.7 或更高版本
 tr -d \r <infile >outfile        # GNU tr 1.22 或更高版本

 # 将每一行前导的“空白字符”(空格,制表符)删除
 # 使之左对齐
 sed 's/^[ \t]*//'                # 见本文末尾关于'\t'用法的描述

 # 将每一行拖尾的“空白字符”(空格,制表符)删除
 sed 's/[ \t]*//'                # 见本文末尾关于'\t'用法的描述

 # 将每一行中的前导和拖尾的空白字符删除
 sed 's/^[ \t]*//;s/[ \t]*//'

 # 在每一行开头处插入5个空格(使全文向右移动5个字符的位置)
 sed 's/^/     /'

 # 以79个字符为宽度,将所有文本右对齐
 sed -e :a -e 's/^.\{1,78\}/ &/;ta'  # 78个字符外加最后的一个空格

 # 以79个字符为宽度,使所有文本居中。在方法1中,为了让文本居中每一行的前
 # 头和后头都填充了空格。 在方法2中,在居中文本的过程中只在文本的前面填充
 # 空格,并且最终这些空格将有一半会被删除。此外每一行的后头并未填充空格。
 sed  -e :a -e 's/^.\{1,77\}/ & /;ta'                     # 方法1
 sed  -e :a -e 's/^.\{1,77\}/ &/;ta' -e 's/\( *\)\1/\1/'  # 方法2

 # 在每一行中查找字串“foo”,并将找到的“foo”替换为“bar”
 sed 's/foo/bar/'                 # 只替换每一行中的第一个“foo”字串
 sed 's/foo/bar/4'                # 只替换每一行中的第四个“foo”字串
 sed 's/foo/bar/g'                # 将每一行中的所有“foo”都换成“bar”
 sed 's/\(.*\)foo\(.*foo\)/\1bar\2/' # 替换倒数第二个“foo”
 sed 's/\(.*\)foo/\1bar/'            # 替换最后一个“foo”

 # 只在行中出现字串“baz”的情况下将“foo”替换成“bar”
 sed '/baz/s/foo/bar/g'

 # 将“foo”替换成“bar”,并且只在行中未出现字串“baz”的情况下替换
 sed '/baz/!s/foo/bar/g'

 # 不管是“scarlet”“ruby”还是“puce”,一律换成“red”
 sed 's/scarlet/red/g;s/ruby/red/g;s/puce/red/g'  #对多数的sed都有效
 gsed 's/scarlet\|ruby\|puce/red/g'               # 只对GNU sed有效

 # 倒置所有行,第一行成为最后一行,依次类推(模拟“tac”)。
 # 由于某些原因,使用下面命令时HHsed v1.5会将文件中的空行删除
 sed '1!G;h;!d'               # 方法1
 sed -n '1!G;h;p'             # 方法2

 # 将行中的字符逆序排列,第一个字成为最后一字,……(模拟“rev”)
 sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'

 # 将每两行连接成一行(类似“paste”)
 sed '!N;s/\n/ /'

 # 如果当前行以反斜杠“\”结束,则将下一行并到当前行末尾
 # 并去掉原来行尾的反斜杠
 sed -e :a -e '/\\/N; s/\\\n//; ta'

 # 如果当前行以等号开头,将当前行并到上一行末尾
 # 并以单个空格代替原来行头的“=”
 sed -e :a -e '!N;s/\n=/ /;ta' -e 'P;D'

 # 为数字字串增加逗号分隔符号,将“1234567”改为“1,234,567”
 gsed ':a;s/\B[0-9]\{3\}\>/,&/;ta'                     # GNU sed
 sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta'  # 其他sed

 # 为带有小数点和负号的数值增加逗号分隔符(GNU sed)
 gsed -r ':a;s/(^|[^0-9.])([0-9]+)([0-9]{3})/\1\2,\3/g;ta'

 # 在每5行后增加一空白行 (在第5,10,15,20,等行后增加一空白行)
 gsed '0~5G'                      # 只对GNU sed有效
 sed 'n;n;n;n;G;'                 # 其他sed

选择性地显示特定行:
--------

 # 显示文件中的前10行 (模拟“head”的行为)
 sed 10q

 # 显示文件中的第一行 (模拟“head -1”命令)
 sed q

 # 显示文件中的最后10行 (模拟“tail”)
 sed -e :a -e 'q;N;11,D;ba'

 # 显示文件中的最后2行(模拟“tail -2”命令)
 sed '!N;!D'

 # 显示文件中的最后一行(模拟“tail -1”)
 sed '!d'                        # 方法1
 sed -n 'p'                      # 方法2

 # 显示文件中的倒数第二行
 sed -e '!{h;d;}' -e x              # 当文件中只有一行时,输入空行
 sed -e '1{q;}' -e '!{h;d;}' -e x  # 当文件中只有一行时,显示该行
 sed -e '1{d;}' -e '!{h;d;}' -e x  # 当文件中只有一行时,不输出

 # 只显示匹配正则表达式的行(模拟“grep”)
 sed -n '/regexp/p'               # 方法1
 sed '/regexp/!d'                 # 方法2

 # 只显示“不”匹配正则表达式的行(模拟“grep -v”)
 sed -n '/regexp/!p'              # 方法1,与前面的命令相对应
 sed '/regexp/d'                  # 方法2,类似的语法

 # 查找“regexp”并将匹配行的上一行显示出来,但并不显示匹配行
 sed -n '/regexp/{g;1!p;};h'

 # 查找“regexp”并将匹配行的下一行显示出来,但并不显示匹配行
 sed -n '/regexp/{n;p;}'

 # 显示包含“regexp”的行及其前后行,并在第一行之前加上“regexp”所
 # 在行的行号 (类似“grep -A1 -B1”)
 sed -n -e '/regexp/{=;x;1!p;g;!N;p;D;}' -e h

 # 显示包含“AAA”、“BBB”或“CCC”的行(任意次序)
 sed '/AAA/!d; /BBB/!d; /CCC/!d'  # 字串的次序不影响结果

 # 显示包含“AAA”、“BBB”和“CCC”的行(固定次序)
 sed '/AAA.*BBB.*CCC/!d'

 # 显示包含“AAA”“BBB”或“CCC”的行 (模拟“egrep”)
 sed -e '/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d    # 多数sed
 gsed '/AAA\|BBB\|CCC/!d'                        # 对GNU sed有效

 # 显示包含“AAA”的段落 (段落间以空行分隔)
 # HHsed v1.5 必须在“x;”后加入“G;”,接下来的3个脚本都是这样
 sed -e '/./{H;!d;}' -e 'x;/AAA/!d;'

 # 显示包含“AAA”“BBB”和“CCC”三个字串的段落 (任意次序)
 sed -e '/./{H;!d;}' -e 'x;/AAA/!d;/BBB/!d;/CCC/!d'

 # 显示包含“AAA”、“BBB”、“CCC”三者中任一字串的段落 (任意次序)
 sed -e '/./{H;!d;}' -e 'x;/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d
 gsed '/./{H;!d;};x;/AAA\|BBB\|CCC/b;d'         # 只对GNU sed有效

 # 显示包含65个或以上字符的行
 sed -n '/^.\{65\}/p'

 # 显示包含65个以下字符的行
 sed -n '/^.\{65\}/!p'            # 方法1,与上面的脚本相对应
 sed '/^.\{65\}/d'                # 方法2,更简便一点的方法

 # 显示部分文本——从包含正则表达式的行开始到最后一行结束
 sed -n '/regexp/,p'

 # 显示部分文本——指定行号范围(从第8至第12行,含8和12行)
 sed -n '8,12p'                   # 方法1
 sed '8,12!d'                     # 方法2

 # 显示第52行
 sed -n '52p'                     # 方法1
 sed '52!d'                       # 方法2
 sed '52q;d'                      # 方法3, 处理大文件时更有效率

 # 从第3行开始,每7行显示一次    
 gsed -n '3~7p'                   # 只对GNU sed有效
 sed -n '3,{p;n;n;n;n;n;n;}'     # 其他sed

 # 显示两个正则表达式之间的文本(包含)
 sed -n '/Iowa/,/Montana/p'       # 区分大小写方式

选择性地删除特定行:
--------

 # 显示通篇文档,除了两个正则表达式之间的内容
 sed '/Iowa/,/Montana/d'

 # 删除文件中相邻的重复行(模拟“uniq”)
 # 只保留重复行中的第一行,其他行删除
 sed '!N; /^\(.*\)\n\1/!P; D'

 # 删除文件中的重复行,不管有无相邻。注意hold space所能支持的缓存
 # 大小,或者使用GNU sed。
 sed -n 'G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P'

 # 删除除重复行外的所有行(模拟“uniq -d”)
 sed '!N; s/^\(.*\)\n\1/\1/; t; D'

 # 删除文件中开头的10行
 sed '1,10d'

 # 删除文件中的最后一行
 sed 'd'

 # 删除文件中的最后两行
 sed 'N;!P;!D;d'

 # 删除文件中的最后10行
 sed -e :a -e 'd;N;2,10ba' -e 'P;D'   # 方法1
 sed -n -e :a -e '1,10!{P;N;D;};N;ba'  # 方法2

 # 删除8的倍数行
 gsed '0~8d'                           # 只对GNU sed有效
 sed 'n;n;n;n;n;n;n;d;'                # 其他sed

 # 删除匹配式样的行
 sed '/pattern/d'                      # 删除含pattern的行。当然pattern
                                       # 可以换成任何有效的正则表达式

 # 删除文件中的所有空行(与“grep '.' ”效果相同)
 sed '/^/d'                           # 方法1
 sed '/./!d'                           # 方法2

 # 只保留多个相邻空行的第一行。并且删除文件顶部和尾部的空行。
 # (模拟“cat -s”)
 sed '/./,/^/!d'        #方法1,删除文件顶部的空行,允许尾部保留一空行
 sed '/^/N;/\n/D'      #方法2,允许顶部保留一空行,尾部不留空行

 # 只保留多个相邻空行的前两行。
 sed '/^/N;/\n/N;//D'

 # 删除文件顶部的所有空行
 sed '/./,!d'

 # 删除文件尾部的所有空行
 sed -e :a -e '/^\n*/{d;N;ba' -e '}'  # 对所有sed有效
 sed -e :a -e '/^\n*/N;/\n/ba'        # 同上,但只对 gsed 3.02.*有效

 # 删除每个段落的最后一行
 sed -n '/^/{p;h;};/./{x;/./p;}'

特殊应用:
--------

 # 移除手册页(man page)中的nroff标记。在Unix System V或bash shell下使
 # 用'echo'命令时可能需要加上 -e 选项。
 sed "s/.`echo \\\b`//g"    # 外层的双括号是必须的(Unix环境)
 sed 's/.^H//g'             # 在bash或tcsh中, 按 Ctrl-V 再按 Ctrl-H
 sed 's/.\x08//g'           # sed 1.5,GNU sed,ssed所使用的十六进制的表示方法

 # 提取新闻组或 e-mail 的邮件头
 sed '/^/q'                # 删除第一行空行后的所有内容

 # 提取新闻组或 e-mail 的正文部分
 sed '1,/^$/d'              # 删除第一行空行之前的所有内容

 # 从邮件头提取“Subject”(标题栏字段),并移除开头的“Subject:”字样
 sed '/^Subject: */!d; s///;q'

 # 从邮件头获得回复地址
 sed '/^Reply-To:/q; /^From:/h; /./d;g;q'

 # 获取邮件地址。在上一个脚本所产生的那一行邮件头的基础上进一步的将非电邮
 # 地址的部分剃除。(见上一脚本)
 sed 's/ *(.*)//; s/>.*//; s/.*[:<] *//'

 # 在每一行开头加上一个尖括号和空格(引用信息)
 sed 's/^/> /'

 # 将每一行开头处的尖括号和空格删除(解除引用)
 sed 's/^> //'

 # 移除大部分的HTML标签(包括跨行标签)
 sed -e :a -e 's/<[^>]*>//g;/</N;//ba'

 # 将分成多卷的uuencode文件解码。移除文件头信息,只保留uuencode编码部分。
 # 文件必须以特定顺序传给sed。下面第一种版本的脚本可以直接在命令行下输入;
 # 第二种版本则可以放入一个带执行权限的shell脚本中。(由Rahul Dhesi的一
 # 个脚本修改而来。)
 sed '/^end/,/^begin/d' file1 file2 ... fileX | uudecode   # vers. 1
 sed '/^end/,/^begin/d' "@" | uudecode                    # vers. 2

 # 将文件中的段落以字母顺序排序。段落间以(一行或多行)空行分隔。GNU sed使用
 # 字元“\v”来表示垂直制表符,这里用它来作为换行符的占位符——当然你也可以
 # 用其他未在文件中使用的字符来代替它。
 sed '/./{H;d;};x;s/\n/={NL}=/g' file | sort | sed '1s/={NL}=//;s/={NL}=/\n/g'
 gsed '/./{H;d};x;y/\n/\v/' file | sort | sed '1s/\v//;y/\v/\n/'

 # 分别压缩每个.TXT文件,压缩后删除原来的文件并将压缩后的.ZIP文件
 # 命名为与原来相同的名字(只是扩展名不同)。(DOS环境:“dir /b”
 # 显示不带路径的文件名)。
 echo @echo off >zipup.bat
 dir /b *.txt | sed "s/^\(.*\)\.TXT/pkzip -mo \1 \1.TXT/" >>zipup.bat


使用SED:Sed接受一个或多个编辑命令,并且每读入一行后就依次应用这些命令。
当读入第一行输入后,sed对其应用所有的命令,然后将结果输出。接着再读入第二
行输入,对其应用所有的命令……并重复这个过程。上一个例子中sed由标准输入设
备(即命令解释器,通常是以管道输入的形式)获得输入。在命令行给出一个或多
个文件名作为参数时,这些文件取代标准输入设备成为sed的输入。sed的输出将被
送到标准输出(显示器)。因此:

 cat filename | sed '10q'         # 使用管道输入
 sed '10q' filename               # 同样效果,但不使用管道输入
 sed '10q' filename>newfile     # 将输出转移(重定向)到磁盘上

要了解sed命令的使用说明,包括如何通过脚本文件(而非从命令行)来使用这些命
令,请参阅《sed&awk》第二版,作者Dale Dougherty和Arnold Robbins
(O'Reilly,1997;http://www.ora.com),《UNIX Text Processing》,作者
Dale Dougherty和Tim O'Reilly(Hayden Books,1987)或者是Mike Arst写的教
程——压缩包的名称是“U-SEDIT2.ZIP”(在许多站点上都找得到)。要发掘sed
的潜力,则必须对“正则表达式”有足够的理解。正则表达式的资料可以看
《Mastering Regular Expressions》作者Jeffrey Friedl(O'reilly 1997)。
Unix系统所提供的手册页(“man”)也会有所帮助(试一下这些命令
“man sed”、“man regexp”,或者看“man ed”中关于正则表达式的部分),但
手册提供的信息比较“抽象”——这也是它一直为人所诟病的。不过,它本来就不
是用来教初学者如何使用sed或正则表达式的教材,而只是为那些熟悉这些工具的人
提供的一些文本参考。

括号语法:前面的例子对sed命令基本上都使用单引号('...')而非双引号
("...")这是因为sed通常是在Unix平台上使用。单引号下,Unix的shell(命令
解释器)不会对美元符()和后引号(`...`)进行解释和执行。而在双引号下
美元符会被展开为变量或参数的值,后引号中的命令被执行并以输出的结果代替
后引号中的内容。而在“csh”及其衍生的shell中使用感叹号(!)时需要在其前
面加上转义用的反斜杠(就像这样:\!)以保证上面所使用的例子能正常运行
(包括使用单引号的情况下)。DOS版本的Sed则一律使用双引号("...")而不是
引号来圈起命令。

'\t'的用法:为了使本文保持行文简洁,我们在脚本中使用'\t'来表示一个制表
符。但是现在大部分版本的sed还不能识别'\t'的简写方式,因此当在命令行中为
脚本输入制表符时,你应该直接按TAB键来输入制表符而不是输入'\t'。下列的工
具软件都支持'\t'做为一个正则表达式的字元来表示制表符:awk、perl、HHsed、
sedmod以及GNU sed v3.02.80。

不同版本的SED:不同的版本间的sed会有些不同之处,可以想象它们之间在语法上
会有差异。具体而言,它们中大部分不支持在编辑命令中间使用标签(:name)或分
支命令(b,t),除非是放在那些的末尾。这篇文档中我们尽量选用了可移植性较高
的语法,以使大多数版本的sed的用户都能使用这些脚本。不过GNU版本的sed允许使
用更简洁的语法。想像一下当读者看到一个很长的命令时的心情:

   sed -e '/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d

好消息是GNU sed能让命令更紧凑:

   sed '/AAA/b;/BBB/b;/CCC/b;d'      # 甚至可以写成
   sed '/AAA\|BBB\|CCC/b;d'

此外,请注意虽然许多版本的sed接受象“/one/ s/RE1/RE2/”这种在's'前带有空
格的命令,但这些版本中有些却不接受这样的命令:“/one/! s/RE1/RE2/”。这时
只需要把中间的空格去掉就行了。

速度优化:当由于某种原因(比如输入文件较大、处理器或硬盘较慢等)需要提高
命令执行速度时,可以考虑在替换命令(“s/.../.../”)前面加上地址表达式来
提高速度。举例来说:

   sed 's/foo/bar/g' filename         # 标准替换命令
   sed '/foo/ s/foo/bar/g' filename   # 速度更快
   sed '/foo/ s//bar/g' filename      # 简写形式

当只需要显示文件的前面的部分或需要删除后面的内容时,可以在脚本中使用“q”
命令(退出命令)。在处理大的文件时,这会节省大量时间。因此:

   sed -n '45,50p' filename           # 显示第45到50行
   sed -n '51q;45,50p' filename       # 一样,但快得多

如果你有其他的单行脚本想与大家分享或者你发现了本文档中错误的地方,请发电
子邮件给本文档的作者(Eric Pement)。邮件中请记得提供你所使用的sed版本、 
该sed所运行的操作系统及对问题的适当描述。本文所指的单行脚本指命令行的长
度在65个字符或65个以下的sed脚本〔译注1〕。本文档的各种脚本是由以下所列作
者所写或提供:

 Al Aab                               # 建立了“seders”邮件列表
 Edgar Allen                          # 许多方面
 Yiorgos Adamopoulos                  # 许多方面
 Dale Dougherty                       # 《sed & awk》作者
 Carlos Duarte                        # 《do it with sed》作者
 Eric Pement                          # 本文档的作者
 Ken Pizzini                          # GNU sed v3.02 的作者
 S.G. Ravenhall                       # 去html标签脚本
 Greg Ubben                           # 有诸多贡献并提供了许多帮助
-------------------------------------------------------------------------

译注1:大部分情况下,sed脚本无论多长都能写成单行的形式(通过`-e'选项和`;'
号)——只要命令解释器支持,所以这里说的单行脚本除了能写成一行还对长度有
所限制。因为这些单行脚本的意义不在于它们是以单行的形式出现。而是让用户能
方便地在命令行中使用这些紧凑的脚本才是其意义所在。

Suse使用经验收集

find . -name "*.*" | xargs grep "htdoc"

=====在当前目录指定文件中搜索某关键字

gzip -d -k gz文件名.gz 解压(不删除原文件,只用-d的话,会删除原gz文件)

gzip -d gz文件名 mysql -u root -p 库名 < 备份的.sql

SuSE 安装 CDH3

Cloudera 为SUSE Linux Enterprise Server 11 (SLES 11). Service pack 1及以后版本提供64位包.

在SUSE系统上,请不要尝试IBM的Java版本了, Hadoop在它上面不能正常工作,请安装使用Oracle JDK ,CDH3 必须 Oracle JDK 1.6. Cloudera 建议版本 1.6.0_26. (最低支持版是 1.6.0_8) JDK6链接

在root设定JDK环境变量 vi /ect/profile

# export JAVA_HOME=<jdk-install-dir>
# export PATH=JAVA_HOME/bin:PATH

<jdk-install-dir> 类似 /usr/java/jdk1.6.0_26 这样.

 

二:开始安装CDH3在SUSE上
1: 

zypper addrepo -f http://archive.cloudera.com/sles/11/x86_64/cdh/cloudera-cdh3.repo

2:

zypper refresh

3:
 

rpm --import http://archive.cloudera.com/sles/11/x86_64/cdh/RPM-GPG-KEY-cloudera

4:

zypper search hadoop
zypper install hadoop-0.20 hadoop-0.20-native

5:

zypper install hadoop-hbase

6:Starting HBase in Standalone Mode

zypper install hadoop-hbase-master
/etc/init.d/hadoop-hbase-master start

SuSE 11 使用笔记

设置默认网关/路由
/etc/sysconfig/network/routes
default 192.168.1.254 – –

 

修改dns
vi /etc/resolv.conf 
domain site 
nameserver 202.102.46.151
 

安装 rpm
rpm -ivh file.rpm

 

一:开启SSH服务

1. 修改sshd_config文件,命令为:vi /etc/ssh/sshd_config 
         将#PasswordAuthentication no的注释去掉,并且将no修改为yes //注意必须小写 
         将#PermitRootLogin yes的注释去掉
2.重新启动SSH服务,命令为:/etc/init.d/sshd stop 然后 start
3.验证SSH服务状态,命令为:/etc/init.d/sshd status
4:使用netstat -ta 查看端口是否在侦听

 

二:关闭防火墙

Suse默认开启了防火墙
1:
编辑  vi /etc/sysconfig/SuSEfirewall2
FW_SERVICES_EXT_TCP = "22"
多个端口用"空格"隔开
填写要开启的端口

2:
rcSuSEfirewall2 restart 重启防火墙


三:安装工作
图形界面: 
YaST
yast2
zypper 

 

四:VNC配置文件

# vi /root/.vnc/xstartup

#!/bin/sh

xrdb $HOME/.Xresources
xsetroot -solid grey
xterm -geometry 80×24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#twm &
startgnome &
DISPLAY=:1 gnome-session &

 

四:修改文件 sed

SSH S2C 不可本地听

server-to-client的转发只能绑定到服务器的127.0.0.1地址,即使在SSH客户端设定了绑定0.0.0.0
确保在服务器的sshd_config中打开了GatewayPorts yes选项 , 即可在0.0.0.0 上LISTEN

CentOS 6 安装使用记录

1.修改网卡配置

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE="eth0"
HWADDR="00:0C:12:34:56:78"
NM_CONTROLLED="no"
ONBOOT="yes"
BOOTPROTO=static
IPADDR=192.168.1.202
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
###注意字段名要"大写"

2.修改DNS配置
# vi /etc/resolv.conf

# 填写相应的域名服务器DNS地址

nameserver 192.168.1.1
3.重启网络服务

# service network restart
# 重启完毕后ping网关,外网测试

BitTorrent Sync 备份系统 安装记录

apt-get install python-software-properties
add-apt-repository ppa:tuxpoldo/btsync
apt-get update
apt-get install btsync

提示输入密码 :"The password for accessing the web interface:” 时,输入WEB管理密码;其余默认,直接回车即可。
填写上下载速度的时候不可写0,一定要填写速度.

安装完毕后,btsync 的配置文件在 /etc/btsync/debconf-default.conf ,你可以去修改这个文件,配置新的密码。

修改密码后,重启 btsync 服务:

/etc/init.d/btsync restart

使用
打开浏览器访问 http://IP:8888

登录默认账号: admin ,密码即前面输入的密码。

点击 Add Folder 按钮选择需要备份的目录(推荐备份 /var 目录),并产生一个随机安全 Secret 号。

客户端安装
访问 http://labs.bittorrent.com/experiments/sync.html ,点击红色的 Download 按钮,再点击 Windows 按钮,下载并安装

打开程序,输入前面得到的随机安全 Secret 号,选择一个下载的目录,你会看到,备份开始了。

原作:unbuntuChina