Category: Linux

  • Debian操作系统编译内核

    转自:

    想用上最新的内核,就需要我们自己去编译新内核了

    安装需求软件包

    apt-get install kernel-package libncurses5-dev fakeroot wget build-essential

    下载新内核

    你可以在这里查看可用的内核 目前最新的为2.6.x

    linux kernel 官方网站:http://www.kernel.org

    cd /usr/src
    wget http://www.eu.kernel.org/pub/linux/kernel/v2.6/linux-2.6.26.tar.gz

    解压 创建软链接,切换到软链接中操作

    tar zxvf linux-2.6.26.tar.gz
    ln -s linux-2.6.26 linux
    cd /usr/src/linux

    生成内核文件,首先要复制旧内核的配置文件

    make clean && make mrproper
    cp /boot/config-`uname -r` ./.config
    make menuconfig

    使用下面的步骤来载入旧的内核配置
    1. Load an Alternate Configuration File
    2. Type .config if not already in the textbox
    3. Ok
    4. Do any changes to the kernel modules
    5. Click Exit
    6. Click Yes when asked if you want to save

    编译内核

    make-kpkg clean
    fakeroot make-kpkg –initrd –append-to-version=-custom kernel_image kernel_headers

    这个过程需要很长时间

    安装新内核

    ls -l /usr/src

    到这里,还没有安装内核,
    dpkg -i linux-headers-2.6.26-custom_2.6.26-custom-10.00.Custom_i386.deb
    dpkg -i linux-image-2.6.26-custom_2.6.26-custom-10.00.Custom_i386.deb

    最后重新启动服务器即可

    reboot

  • 用Mutt发送带附件的邮件

    请提前设置好MTA(mail transfer agent),例如:

    debian默认的MTA为exim4的设置为http://jpuyy.com/2011/08/debian-exim4.html

    mutt – The Mutt Mail User Agent

    示例:

    /usr/bin/mutt -s “the mp3 push” [email protected] -a /root/getvoa/latestvoa.mp3 < /dev/null

    最有用的还是这个 -a 附件发送,因为用mail和uuencode发送mp3都不理想

    用/dev/null意思是不输入正文,如果没有 </dev/null 则会自动调用nano

    介面简单而实用

    我的目的是每天自动把某网页更新的voa听力发送到我的邮箱内

    #!/bin/bash
    #for use:get voa mp3 every day
    #author: 2011-08-28 jpuyy.com
    #version: A
    yes | rm `cat latestvoa`
    LANG=C
    theday=`date ‘+%A’`
    urlone=http://www.51voa.com/VOA_Special_English/VOA_News_$theday.html
    urltwo=`/usr/bin/curl $urlone | grep Player`
    urltwo=${urltwo#*\”}
    urlthree=http://down.51voa.com${urltwo%%\”*}
    filename=${urlthree##*\/}
    echo $filename > latestvoa
    wget $urlthree
    /usr/bin/mutt -s “$theday mp3 push” [email protected] -a /root/getvoa/$filename < echo $filename

    保存为 getvoa.sh 这样每天的18点运行脚本

    0 18 * * * /root/getvoa/getvoa.sh

     

  • debian exim4配置发邮件|日志的魔力

    linux就是好,日志对于解决问题有绝对的魔力

    像神奇魔棒,直指要点

    很多天以前就配了一下exim4,发邮件测试一下没收到,用的不多也没有继续弄

    现在用的到了,所以耐下心弄了一下

    exim4重新配置命令

    dpkg-reconfigure exim4-config

    邮件系统设置的常见类型:互联网站;直接通过 SMTP 发送或接收信件
    系统邮件名称:(注意,一定要填一个能解析的域名,我就是在这吃了亏): xxx.com
    要监听入站 SMTP 连接的 IP 地址:(留空)
    其它可接收邮件的目的地址:localhost.localdomain:xxx.com
    为下列域名进行邮件中转 (relay):(留空)                   │
    为下列主机进行邮件中转 (relay):(留空)
    保持最小 DNS 查询量吗 (按需拔号,Dial-on-Demand)?<否>
    本地信件的投递方式:/var/mail/ 中的 mbox 格式
    将设置文件分拆成小文件吗?<否>

     

    回头说上面的系统邮件名称,有vps的最好是填上你的域名,这样就不会被收件(比如说163)拦截了

    当时发信不成功时,先去看一下发信日志,已经277M了,处理这个先放到后面,先说发信失败。

    This message was created automatically by mail delivery software.

    A message that you sent could not be delivered to one or more of its
    recipients. This is a permanent error. The following address(es) failed:

    [email protected]
    SMTP error from remote mail server after MAIL FROM:<xxx@debian>:
    host 163mx02.mxmail.netease.com [220.181.12.73]:
    550 MI:IMF mx23,ScCowGCJ2VFen1xOnm2kAQ–.1082S2 1314692958 http://mail.163.com/help/help_spam_16.htm?ip=58.216.234.50&hostid=mx2
    3&time=1314692958

    错误代码:550 MI:IMF

    打开后面的网址,找到解释:

    550 MI:IMF 发信人电子邮件地址不合规范。请参考http://www.rfc-editor.org/关于电子邮件规范的定义;

    所以问题出在域名上,改好域名,问题解决

    看来出问题先找日志是解决问题的绝佳办法

    Exim4的log记录使用自己的log目录:/var/log/exim4/

    update-exim4.conf的配置文件为 : /etc/exim4/update-exim4.conf.conf

    发送邮件的域名保存在: /etc/mailname

    测试Exim4的配置信息和查看有否有错:exim4 -bV

    有的时候可能会遇到exim4抛出debian ALERT: exim paniclog /var/log/exim4/paniclog has non-zero size, mail system possibly broken错误的情况,可以用以下方法加以解决。
    1、停止exim4 # /etc/init.d/exim4 stop
    2、删除paniclog文件 # rm /var/log/exim4/paniclog
    3、启动exim4 # /etc/init.d/exim4 start

  • debian svn的commit邮件提醒

    最基础简单的配置

    设置全部在/var/svnroot/工程/hooks/里面进行

    如我的是/var/svnroot/nginxsub/hooks/

    准备好三个文件

    mailer.conf //邮件设置文件
    post-commit
    mailer.py

    其中post-commit mailer.py是可执行文件,依据经验,必然主要改mailer.conf 即可

    三个文件得到的方式

    cp /usr/share/subversion/hook-scripts/mailer/mailer.conf.example /var/svnroot/nginxsub/hooks/mailer.conf
    yes | cp post-commit.tmpl post-commit
    cp /usr/share/subversion/hook-scripts/mailer/mailer.py /var/svnroot/nginxsub/hooks

    好,先修改一下post-commit 确定好mailer.py 和 mailer.conf的位置

    "$REPOS"/hooks/mailer.py commit "$REPOS" $REV "$REPOS"/hooks/mailer.conf

    修改mailer.conf

    因为debian自带exim4为MTA 则在21 行处

    mail_command = /usr/sbin/exim4

    在174行处收件人地址

    to_addr [email protected]

    此时更改过版本将会第一时间发到你的邮箱里

    当然还有好多高级用法,下次学习实践了再更新

  • linux at命令实例一则

    明天学校早上8点停电

    办公室有debian的机器,但是现在还在使用,既然都接到了通知,让它断电是不合情理的

    计划明天早3点关机,现在22点钟

    于是执行命令

    # at now +5 hours
     warning: commands will be executed using /bin/sh
     at> /sbin/shutdown -h +0
     at> <EOT>
    job 1 at Fri Aug 26 03:06:00 2011

    那个EOF是组合键 ctrl+d

    at -l 或 atq查看要执行的任务和时间

    # at -l
     1       Fri Aug 26 03:06:00 2011 a root

     

    显示任务1的详细脚本,执行

    # at -c 1
     #!/bin/sh
     # atrun uid=0 gid=0
     # mail root 0
     umask 22
     SSH_CLIENT=10.49.180.5\ 1738\ 22; export SSH_CLIENT
     SSH_TTY=/dev/pts/5; export SSH_TTY
     USER=root; export USER
     LS_COLORS=no=00:fi=00:di=01\;34:ln=01\;36:pi=40\;33:so=01\;35:do=01\;35:bd=40\;33\;01:cd=40\;33\;01:or=40\;31\;01:su=37\;41:sg=30\;43:tw=30\;42:ow=34\;42:st=37\;44:ex=01\;32:\*.tar=01\;31:\*.tgz=01\;31:\*.svgz=01\;31:\*.arj=01\;31:\*.taz=01\;31:\*.lzh=01\;31:\*.lzma=01\;31:\*.zip=01\;31:\*.z=01\;31:\*.Z=01\;31:\*.dz=01\;31:\*.gz=01\;31:\*.bz2=01\;31:\*.bz=01\;31:\*.tbz2=01\;31:\*.tz=01\;31:\*.deb=01\;31:\*.rpm=01\;31:\*.jar=01\;31:\*.rar=01\;31:\*.ace=01\;31:\*.zoo=01\;31:\*.cpio=01\;31:\*.7z=01\;31:\*.rz=01\;31:\*.jpg=01\;35:\*.jpeg=01\;35:\*.gif=01\;35:\*.bmp=01\;35:\*.pbm=01\;35:\*.pgm=01\;35:\*.ppm=01\;35:\*.tga=01\;35:\*.xbm=01\;35:\*.xpm=01\;35:\*.tif=01\;35:\*.tiff=01\;35:\*.png=01\;35:\*.svg=01\;35:\*.mng=01\;35:\*.pcx=01\;35:\*.mov=01\;35:\*.mpg=01\;35:\*.mpeg=01\;35:\*.m2v=01\;35:\*.mkv=01\;35:\*.ogm=01\;35:\*.mp4=01\;35:\*.m4v=01\;35:\*.mp4v=01\;35:\*.vob=01\;35:\*.qt=01\;35:\*.nuv=01\;35:\*.wmv=01\;35:\*.asf=01\;35:\*.rm=01\;35:\*.rmvb=01\;35:\*.flc=01\;35:\*.avi=01\;35:\*.fli=01\;35:\*.gl=01\;35:\*.dl=01\;35:\*.xcf=01\;35:\*.xwd=01\;35:\*.yuv=01\;35:\*.aac=00\;36:\*.au=00\;36:\*.flac=00\;36:\*.mid=00\;36:\*.midi=00\;36:\*.mka=00\;36:\*.mp3=00\;36:\*.mpc=00\;36:\*.ogg=00\;36:\*.ra=00\;36:\*.wav=00\;36:; export LS_COLORS
     MAIL=/var/mail/root; export MAIL
     PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin; export PATH
     PWD=/root; export PWD
     LANG=zh_CN.UTF-8; export LANG
     PS1=\\h:\\w\\\$\ ; export PS1
     SHLVL=1; export SHLVL
     HOME=/root; export HOME
     LANGUAGE=zh_CN:zh; export LANGUAGE
     LS_OPTIONS=--color=auto; export LS_OPTIONS
     LOGNAME=root; export LOGNAME
     SSH_CONNECTION=10.49.180.5\ 1738\ xxx.xxx.xxx.xxx(ip地址)\ 22; export SSH_CONNECTION
     cd /root || {
     echo 'Execution directory inaccessible' >&2
     exit 1
     }
     /sbin/shutdown -h +0

    如果具体哪一天的话

    at 21:00 08/15/2012

    atrm 删除队列中的作业

    查看上次关机时间

    cat /var/log/messages | grep shutting
  • 使用pkill踢掉linux用户

    先看看都哪些终端登陆

    root@ibm:~# w
    19:28:23 up 2 days, 12:12, 1 user, load average: 0.20, 0.29, 0.33
    USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
    root pts/0 192.168.1.102 19:12 1.00s 1.24s 0.02s w

    用户帐号/所用的终端/何处登陆/登陆时间/空闲时间/耗费的CPU/执行后耗费CPU/正在执行

    root pts/0 192.168.1.102 19:12 1.00s 1.24s 0.02s w

    上面可以看到只有我一个用户,使用如下命令会将我自己踢出:

    pkill -kill -t pts/0

    进而衍生出对pkill用法的整理

    pkill is used to send signals to Process (computing)processes. The pkill command allows the use of extended regular expression patterns and other matching criteria.

    pkill的使用是发送信号给进程,支持扩展正则表达式或其他匹配规则.

    pgrep, pkill – look up or signal processes based on name and other attributes。

    后面跟进程名而kill只能跟进程号,pkill还支持自动补全

    那么,如果说xxx有两个进程

    root     10976     1  0 Jul31 ?        00:00:00 xxx: master process usr/local/xxx/sbin/xxx
    www-data 10978 10976  0 Jul31 ?        00:00:00 xxx: worker process

    运行pkill xxx 会把他们全杀死,有时我们并不想要这样的结果,所以要认准了再用。