Tag: Summary

  • 自动更新花生壳的ip

    参考:

    http://open.oray.com/wiki/doku.php?id=文档:花生壳:http协议说明

    只能使用GET方式提交信息,这里使用curl,需提前安装好curl。
    加一个判断,如果当前dns中的ip和检测的ip不一致时,就自动提交;一致则退出。

    #!/bin/bash
    orayuser=your oray name
    oraypass=your oray passoword
    oraydomain=your domain
    realip=`curl http://ddns.oray.com/checkip | cut -d' ' -f 6 | cut -d'<' -f 1`
    theurl="http://$orayuser:[email protected]/ph/update?hostname=$oraydomain&myip=$realip"
    currentip=`nslookup $oraydomain | tail -2 | head -1 | cut -d' ' -f 2`
    if [ "$realip" = "$currentip" ]; then
     exit 0
    else
     curl "$theurl"
    fi

    在crontab中加入以下内容,每十五分钟检测一次

    */15 * * * * /bin/bash /root/pushiporay.sh

    –添加于2013年3月3日开始–

    后来申请了noip.com的二级域名,才发现花生壳和人家的api是如此的像。同理可更新noip里的记录

    #!/bin/bash
    noipuser=your noip username
    noippass=your noip password
    noipdomain=your noip domain
    realip=`curl http://ddns.oray.com/checkip | cut -d' ' -f 6 | cut -d'<' -f 1`
    noipurl="http://$noipuser:[email protected]/nic/update?hostname=$noipdomain&myip=$realip"
    noipcurrentip=`nslookup $noipdomain | tail -2 | head -1 | cut -d' ' -f 2`
    if [ "$realip" = "$noipcurrentip" ]; then
     echo "no need to update"
     exit 0
    else
     curl "$noipurl"
    fi

     

  • CentOS6.2安装epel包

    官方介绍:

    https://fedoraproject.org/wiki/EPEL/zh-cn

    在装了epel之后,要安装nginx,php,mysql,直接yum install就可以了。

    EPEL 包含一个叫做’epel-release’的包,这个包包含了 EPEL 源的 gpg 密钥和软件源信息。

    现在安装epel-release

    rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

    重装

    rpm -iv --replacepkgs http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

    上面的地址经常变,可以打开下面网址找到epel包

    http://dl.fedoraproject.org/pub/epel/6/x86_64/

    导入RPM-GPG-KEY-EPEL的key

    rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

    epel安装完之后在/etc/yum.repos.d/下生成了两个文件,epel.repo,epel-testing.repo

    修改epel.repo文件(epel-testing包含最新的测试软件包,其版本很新但是安装有风险)

    在[epel-debuginfo]前添加

    priority=11

    这样yum时会先去官方源查找,官方源没有再去epel安装

    PS:还有一款不错的源,叫atomic,包含有php-fpm,安装这个源则更为方便,此脚本会自动安装对应系统的版本,更省心。

    wget -q -O - http://www.atomicorp.com/installers/atomic | sh

    同样rpmforge也很不错,在这里查看对应版本的安装方法

    http://wiki.centos.org/zh/AdditionalResources/Repositories/RPMForge

    epel centos6 源

    [epel]
    name=Extra Packages for Enterprise Linux 6 - $basearch
    baseurl=http://mirrors.tuna.tsinghua.edu.cn/epel/6/$basearch
    failovermethod=priority
    enabled=1
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
    
    [epel-debuginfo]
    name=Extra Packages for Enterprise Linux 6 - $basearch - Debug
    baseurl=http://mirrors.tuna.tsinghua.edu.cn/epel/6/$basearch/debug
    failovermethod=priority
    enabled=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
    gpgcheck=1
    
    [epel-source]
    name=Extra Packages for Enterprise Linux 6 - $basearch - Source
    baseurl=http://mirrors.tuna.tsinghua.edu.cn/epel/6/SRPMS
    failovermethod=priority
    enabled=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
    gpgcheck=1
    
  • ls命令按文件大小排序

    今天想在某网站找一个10KB大小的图片文件可是了半天

    后来想起ls可以按文件大小排序

    ls可以按照文件大小进行输出排序,这是一个很实用的参数。

    man ls

    -S sort by file size

    由大到小排序

    ls -Sl

    从小到大排序

    ls -Slr

    -h,表示”–human-readable”,单位是k或者M ,比较容易看清楚结果。

    显示子目录结构

    ls -R

    附:

    ls按时间排序

    ls -lt 从新到旧
    ls -lrt 从旧到新

    ls对当前目录和文件大小排序

    du -s * | sort -nr

    只对当前目录排序,并用直观的大小显示出来

    for i in $(ls -l |grep '^d' |du -s * |sort -nr|awk '{print $2}');do du -sh $i;done
  • find命令

    linux里最重要的命令之一,可使用的选项之多令人无法记住,还好可以用man find来查询,下面以例子来学习,掌握最基础的先

    查找文件名为foobar

    find -name "foobar"

    查找不同文件后缀, 用 -o 连接

    find . -name "*.tf" -o -name "*.hcl" -exec cat {} \;

    不区分大小写查找 foobar

    find -iname "foobar"

    从 / 查找文件并限制查找的深度

    find / -maxdepth 2 -name passwd

    查找并计算 md5sum 值,后面参数不能省略

    find -iname "MyCprogram.c" -exec md5sum {} \;
    find -iname "MyCprogram.c" -exec md5sum {} +

    查到不包含某字符串的文件(反查)

    find -maxdepth 1 -not -iname "MyCProgram.c"

    根据 inode number 查找文件

    ls -li *
    find ./ -inum 17735

    对于乱码文件根据 inum 查找并删除

    find ./ -inum 17744 -exec rm {} +

    查找等于10KB的文件:

    find . -size 10k

    查找大于100KB的文件:

    find . -type f -size +100k
    查找大于100MB的文件:
    find . -type f -size +100M
    查找大于1GB的文件:
    find . -type f -size +1G

    查找空文件 并删除

    find ~ -empty
    find /path/to/dir -empty -type f -delete
    

    查找空目录 并删除

    find ~ -empty -type d
    find /path/to/dir -empty -type d -delete
    

    查找home目录中的所有文件

    find $HOME -print
    或
    find ~ -print

    查找当前目录中权限是644的文件

    find . -type f -perm 644 -exec ls -l {} \;

    查找系统中所有文件长度为0的普通文件,并列出它们的完整路径

    find / -type f -size 0 -exec ls -l {} \;

    查找/var/log/目录中更改时间在7日以前的普通文件(即保留最近7天的),并在删除之前询问

    find /var/log/ -type f -mtime +7 -ok rm {} \;

    查找/var/log目录中访问时间在7天以内的文件

    find /var/log/ -type f -mtime -7

    查找比某个文件更新的文件

    find -newer filename

    查找/var/log目录中messages.*.gz文件

    find /var/log/ -name "messages.*.gz"

    查找当前目录下,属组是root的文件

    find . -group root -exec ls -l {} \;

    对当前目录(包含子目录)进行排序

    find . -type d | sort

    与其他命令结合统计代码量

    find ./ -name '*' | xargs wc -l

    做一些漂亮的 alias 删除程序生成的临时文件或某种类型文件

    alias rmao="find . -iname a.out -exec rm {} \;"
    alias rm100m="find / -type f -name *.tar -size +100M -exec rm -i {} \;"
    alias rm1g="find / -type f -name *.tar -size +1G -exec rm -i {} \;"
    alias rm2g="find / -type f -name *.tar -size +2G -exec rm -i {} \;"
    alias rm5g="find / -type f -name *.tar -size +5G -exec rm -i {} \;"
    
  • mysql数据库空间用满时,巧用软链接转移

    参考:http://www.webhostingtalk.com/showthread.php?t=1086919

    对于一些做SEO的人来说,/var/lib/mysql 和 /var/www 是两个占用空间的大户,下面以数据库为例,将/var/lib/mysql下的数据库移动到较大的/home下,并使用软链接将/home/mysql 链接到/var/lib/mysql,实现充分利用空间的目的。

    在这些网站都不在使用的时候,停用mysql,apache

    /etc/init.d/mysqld stop
    /etc/init.d/httpd stop

    使用rsync完整的将数据拷贝(-a archive mode归档模式 -v verbos显示详细 )

    rsync -av /var/lib/mysql /home/

    这个过程根据数据量的不同时间不同,数据很大的话建议使用screen

    接下来看一下大小,如果以上命令都完全执行完的话,是不会出现什么问题的

    du -sh /var/lib/mysql
    du -sh /home/mysql

    将旧的/var/lib/mysql移走,随便移到什么地方,实再不需要删掉也行

    mv /var/lib/mysql /var/lib/mysql-bak

    创建软链接

    ln -s /home/mysql /var/lib/mysql

    之后一定要再次确认上面的软链接链接到对的地方,如果不正确mysql一启动就麻烦了。

     

    #######ubuntu用户注意 begin#######

    如果使用ubuntu下apt-get安装的mysql版本,还需如下操作

    vim /etc/apparmor.d/usr.sbin.mysqld

    将如下两行注释

    /var/lib/mysql/ r,
    /var/lib/mysql/** rwk,

    变更为(可能是因为apparmor不支持软链接)

    /home/mysql/ r,
    /home/mysql/** rwk,

    重启apparmor

    /etc/init.d/apparmor restart

    #######ubuntu用户注意 end#######

     

    之后启动mysql,apache

    /etc/init.d/mysqld start
    /etc/init.d/httpd start

    这样以后所有的mysql数据的位置就在/home/mysql里了。

    另一种解决方案:不用软链接而直接将数据库转移到目录/mnt/sx_disk

    rsync -av /var/lib/mysql /mnt/sx_disk/

    之后在/etc/my.cnf中,将[mysqld]中的如下参数改为

    [mysqld]
    datadir=/mnt/sx_disk/mysql
    socket=/mnt/sx_disk/mysql/mysql.sock

    只这样还不行,会出现

    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

    另外需添加

    [client]
    port=3306
    socket=/mnt/sx_disk/mysql/mysql.sock

    这样数据库就存为了新的位置/mnt/sx_disk目录中。

    如果同是ubuntu下mysql的话,也需要按上面的方式修改/etc/apparmor.d/usr.sbin.mysqld

  • linux工具之logwatch

    logwatch的下载地址:

    http://sourceforge.net/projects/logwatch

    Logwatch是一个可定制的日志分析系统。使用Perl语言编写。

    Logwatch通过系统的日志分析,并创建一个报告,分析您所指定的区域。 Logwatch易于管理,在大多数系统上都可以使用。

    ubuntu安装:

    sudo apt-get install logwatch

    用法:

    Usage: /usr/sbin/logwatch [–detail <level>] [–logfile <name>] [–output <output_type>]
    [–format <format_type>] [–encode <enconding>] [–numeric]
    [–mailto <addr>] [–archives] [–range <range>] [–debug <level>]
    [–filename <filename>] [–help|–usage] [–version] [–service <name>]
    [–hostformat <host_format type>] [–hostlimit <host1,host2>] [–html_wrap <num_characters>]

    用法举例:

    如不加–range,则默认是昨天到今天的区间

    0.查看帮助信息/查看时间区间的用法

    # logwatch --help
    # logwatch --range Help

    1.查看日志,显示比较全的信息

    # logwatch

    2.查看某服务sshd日志

    # logwatch --service sshd

    3.查看近三天的cron日志

    logwatch --service cron --range '-3 days'

    4.查看sshd的日志,并发送邮件(需配置好邮件服务器,可以对外发邮件)

    # logwatch --service sshd --mailto [email protected]