ArchLinux安装要点

1.安装文件包时记得设置DNS。

2.安装完成后首先设置Pacman镜像
nano /etc/pacman.d/mirrorlist
找到CN,去掉Server前面的#,Ctrl+X退出。

3.更新源列表,执行:

pacman -Syu

4.设置签名全部信任(如不设置会十分麻烦)
nano /etc/pacman.conf
在 Architecture = auto 下新增

SigLevel = Optional TrustAll

5.更新系统

pacman -Sy pacman
pacman -Su

6.安装yaourt(32位系统)
nano pacman.conf 最后添加:

[archlinuxfr]
Server = http://repo.archlinux.fr/i686

然后执行 pacman -Sy yaourt curl

ArchLinux上关闭IPv6的方法

IPv6日历历在目,为啥要关呢?我归纳为:洁癖,这和性能或内存啥的没关系。所谓的洁癖是指执行

netstat -lntp

类命令时,输出能清爽一点。

:::*

实在太丑了!

不管怎样,让我们来看看怎样在Arch linux有有效的关闭

IPv6

吧…

正确方法

其实Arch linux的wiki专门介绍过关闭IPv6: Disabling IPv6, 但尝试后发现method1和method2都不管用,必须重新生成一个

initramfs

。对于像我这样的菜鸟,还是列出命令更实惠:

首先编辑

/etc/modprobe.d/modprobe.conf

,添加:

options ipv6 disable=1

然后编辑

/etc/mkinitcpio.conf

,添加:

FILES="/etc/modprobe.d/modprobe.conf"

最后执行命令,并重启:

sudo mkinitcpio -p linux

注意:

  1. 不确定这是最好的办法,因为要重启服务器
  2. 如果
    initramfs

    不是用默认的linux模板,那

    -p linux

    要做相应修改

Nginx全局变量释义

$args 此变量与请求行中的参数相等

$content_length 等于请求行的“Content_Length”的值。

$content_type 等同与请求头部的”Content_Type”的值

$document_root 等同于当前请求的root指令指定的值

$document_uri 与$uri一样

$host 与请求头部中“Host”行指定的值或是request到达的server的名字(没有Host行)一样

$limit_rate 允许限制的连接速率

$request_method 等同于request的method,通常是“GET”或“POST”

$remote_addr 客户端ip

$remote_port 客户端port

$remote_user 等同于用户名,由ngx_http_auth_basic_module认证

$request_filename 当前请求的文件的路径名,由root或alias和URI request组合而成

$request_body_file

$request_uri 含有参数的完整的初始URI

$query_string 与$args一样

$server_protocol 等同于request的协议,使用“HTTP/1.0”或“HTTP/1.1”

$server_addr request到达的server的ip,一般获得此变量的值的目的是进行系统调用。为了避免系统调用,有必要在listen指令中指明ip,并使用bind参数。

$server_name 请求到达的服务器名

$server_port 请求到达的服务器的端口号

$uri 等同于当前request中的URI,可不同于初始值,例如内部重定向时或使用index

本文出自 “学习要永恒” 博客

批量修改MySQL表前缀

在数据库设计中,对于某个特定的项目,一般对其所有的数据表指定相同的表前缀,如WordPress的数据表都是以wp_开头的,Discuz的数据表都是以dz_开头的。这样不但便于区分,更重要的作用在于可以避免将多个项目部署到同一个数据库时可能出现的表同名冲突。

那么,有如下这种情况时:

用户A和用户B都使用wordpress程序,现在他们想将程序放在一起,但是主机上只分配了一个数据库给他们,意味着他们的数据需要存放在一个数据库,问题是他们先前已经创建好了wordpress的数据库,并且使用了相同的表前缀,都使用了wp_,那么,怎样批量修改表前缀呢。

通过PHP脚本显然可以做到,在MySQL中修改表名的语句为

RENAME TABLE oldname TO newname

这里,我尝试采用纯SQL语句来实现,捣鼓了一阵子,于是有了下面这个存储过程:

-- @author xueyu
-- @desc modify the prefix of table name in db
-- @example
--
-- use DBNAME;
-- show tables;
-- source ~/change_prefix.sql;
--
-- call change_prefix('old_', 'new_', 'DBNAME');
--
-- show tables;
-- drop procedure if exists change_prefix;
--

delimiter //
DROP procedure IF EXISTS change_prefix //

CREATE procedure change_prefix(IN oldpre VARCHAR(200), IN newpre VARCHAR(200), IN dbname VARCHAR(200))
begin
  declare done INT DEFAULT 0;
  declare oldname VARCHAR(200);
  declare cur CURSOR FOR SELECT table_name FROM information_schema.TABLES WHERE table_schema= dbname AND table_name LIKE concat(oldpre,'%');
  declare continue handler FOR NOT found SET done = 1;
  open cur;

  repeat
    fetch cur INTO oldname;
    IF NOT done then
        SET @newname = concat(newpre, trim(LEADING oldpre FROM oldname));
        SET @sql = concat('rename table ',oldname,' to ',@newname);
        prepare tmpstmt FROM @sql;
        execute tmpstmt;
        deallocate prepare tmpstmt;
    end IF;
  until done end repeat;

  close cur;
end //

delimiter ;

使用方法很简单,直接导入这个脚本,然后运行

call change_prefix('old_', 'new_', 'DB_NAME');

即可,注意,脚本有删除change_prefix这句,如果你有同样命名的存储过程,注意去掉。用完之后,可以将这个存储过程删除掉。
我们可以批量给数据库里的所有表加上同样的前缀,第一个参数留即可

call change_prefix('', 'added_', 'DB_NAME');

同理,第二个参数留空可以去掉指定的表前缀。

CentOS 5/6 修改主机名(hostname)

需要修改两处:一处是/etc/sysconfig/network,另一处是/etc/hosts,只修改任一处会导致系统启动异常。首先切换到root用户。

/etc/sysconfig/network

用任一款你喜爱的编辑器打开该文件,里面有一行 HOSTNAME=localhost.localdomain (如果是默认的话),修改 localhost.localdomain 为你的主机名。

/etc/hosts

打开该文件,会有一行 127.0.0.1 localhost.localdomain localhost 。其中 127.0.0.1 是本地环路地址, localhost.localdomain 是主机名(hostname),也就是你待修改的。localhost 是主机名的别名(alias),它会出现在Konsole的提示符下。将第二项修改为你的主机名,第三项可选。

将上面两个文件修改完后,并不能立刻生效。如果要立刻生效的话,可以用 hostname your-hostname 作临时修改,它只是临时地修改主机名,系统重启后会恢复原样的。但修改上面两个文件是永久的,重启系统会得到新的主机名。

最后,重启后查看主机名 uname -n 。

NGINX自动切割日志的脚本

#! /bin/bash

nginx=/usr/local/nginx/sbin/nginx #NGINX的位置
Date=$(date -d -1day +"%Y%m%d") #获取昨天日期
logs_dir=/var/logs/ #log目录
bak_dir=/var/logs/$Date #log备份目录

#创建今日备份目录
mkdir $bak_dir

#先把现有的log文件挪到备份目录临时存放
cd $logs_dir
echo "moving logs"
/bin/mv *.log $bak_dir
sleep 3

#重建nginx log
echo "rebuild logs"
echo "nginx -s reopen"
$nginx -s reopen

Linux批量修改文件中内容

在Linux系统下修改一个文件中某段内容,如果想修改的内容只有一段或者几段的话我们手动就可以修改了,但是如果我们需要修改的内容在文件中大批量的出现,我们还是靠手动修改的话将会耗费大量的时间和精力。下面将介绍一种大批量修改文件的方法。希望对有这种需求的朋友有所帮助。

命令结构如下:

find -name '要查找的文件名' | xargs perl -pi -e 's|被替换的字符串|替换后的字符串|g'

Nginx+iptables屏蔽访问Web页面过于频繁的IP(防DDOS,恶意访问,采集器)

通过分析nginx的日志来过滤出访问过于频繁的IP地址,然后添加到nginx的blockip.conf,并重启nginx

脚本如下:

#!/bin/sh
nginx_home = /Data/app_1/nginx
log_path = /Data/logs

/usr/bin/tail -n50000 $log_path/access.log \
|awk '$8 ~/aspx/{print $2,$13}' \
|grep -i -v -E "google|yahoo|baidu|msnbot|FeedSky|sogou" \
|awk '{print $1}'|sort|uniq -c |sort -rn \
|awk '{if($1>150)print "deny "$2";"}'> $nginx_home/conf/vhosts/blockip.conf

/bin/kill -HUP `cat $nginx_home/nginx.pid`

也可以通过分析nginx日志过滤出频繁访问IP,直接用iptables屏蔽这个IP,就用不着重启nginx了,并且屏蔽效果更好。

单个IP的命令是

iptables -I INPUT -s 124.115.0.199 -j DROP

封IP段的命令是

iptables -I INPUT -s 124.115.0.0/16 -j DROP

封整个段的命令是

iptables -I INPUT -s 194.42.0.0/8 -j DROP

封几个段的命令是

iptables -I INPUT -s 61.37.80.0/24 -j DROP
iptables -I INPUT -s 61.37.81.0/24 -j DROP

刚才不小心搞的自己都连不上了-_-!!!

iptables -I INPUT -p tcp –dport 80 -s 124.115.0.0/24 -j DROP

以后用这种只封80端口就行了,不会出问题!

iptables -I INPUT -p tcp –dport 80 -s 124.115.0.0/24 -j DROP

iptables -I INPUT -s 61.37.81.0/24 -j DROP

解封

iptables -F

清空

iptables -D INPUT [编号]

 

Linux下文件权限的解读

三位数字代表9位的权限,分成3部分,第一部分3位表示所有者的权限,第二部分3位表示同组用户权限,第三部分3位表示其他用户权限,r代表读取权限等于4,w代表写入权限等于2,x代表执行权限等于1
比如777,第一位7等于4+2+1,所以就是rwx,所有者有读取、写入、执行的权限,第二位7也是4+2+1,rwx,同组用户具有读取、写入、执行权限,第三位7,代表其他用户有读取、写入、执行的权限。
比如744,第一位7等于4+2+1,rwx,所有者具有读取、写入、执行权限,第二位4等于4+0+0,r–,同组用户只有读取权限、第三位4,也是r–,其他用户只有读取权限。

444  r--r--r--
600  rw-------
644  rw-r--r--
666  rw-rw-rw-
700  rwx------
744  rwxr--r--
755  rwxr-xr-x
777  rwxrwxrwx