日历

2013年一月
« 12月   2月 »
 123456
78910111213
14151617181920
21222324252627
28293031  

最近评论

    linux企业应用

    linux expect 交互式登陆服务器查看磁盘使用的脚本

    今天又重新写了一个交互式登陆服务器,检查磁盘使用的脚本.
    这次查看服务器磁盘使用情况的脚本根据参数登陆服务器,而不是在脚本中指定服务器.
    具体脚本内容如下:
    这个是调用df2.sh脚本和分析磁盘使用情况的脚本.
    #!/bin/bash

    date  #打出开始时间
    user1=”oracle”
    user2=”svnroot”
    password1=”oracle”
    password2=”svnroot”
    host1=192.168.1.102
    host2=192.168.1.101

    if [  -e mail.log ]; then
    rm mail.log
    fi
    #1:如果磁盘的容量有大于80%的,将服务器的名字写到mail.log中
    #2:已经写进去了,就不再写了
    serverLog=1

    expect df2.sh $user1 $host1 $password1 > df.log

    cat df.log | egrep -v “^$|spawn|oracle|svnroot|Filesystem”| awk ‘{NF1=NF-1;if(NF>4) print $NF1” “$NF}’| sed ‘s:%::g’ >dftmp.log
    dos2unix dftmp.log #必须执行dos2unix的转换,否则会出问题,不能将正确的信息添加到mail.log
    while read LINE
    do
    PREC=`echo $LINE | awk ‘{print $1}’`
    FILESYSTEM=`echo $LINE | awk ‘{print $2}’`

    if [ $PREC -gt 10 ]; then
    if [ $serverLog -eq “1” ]; then
    serverLog=2
    echo “oracle 服务器的磁盘的使用率有大于80%的,请检查” […]

    linux企业应用

    linux expect 交互式登陆服务器执行任务的脚本

    这几天要写一个登陆到几个服务器查看硬盘情况的脚本,憋了好几天,网上的一些脚本也不好用,今天终于实现了。
    下面是登陆到其他服务器查看硬盘的脚本内容(对硬盘使用情况的分析还没有写)。
    [oracle@oracle11g tmp]$ cat df.sh
    #!/usr/bin/expect -f

    set timeout 2
    set user1 “oracle”
    set user2 “svnroot”
    set password1 “oracle”
    set password2 “svnroot”
    set host1 192.168.1.102
    set host2 192.168.1.101

    spawn /usr/bin/ssh $user1@$host1 “df -h”
    expect {
    password: {
    expect password:
    #send_user “\n”
    send “$password1\r”
    exp_continue
    } incorrect {
    send_user “invalid password or account\n”
    exit
    } timeout {
    send_user “connection to $host1 timed out\n”
    exit
    } eof {
    send_user “\n”
    }
    }

    spawn /usr/bin/ssh $user2@$host2 “df -h”
    expect {
    password: {
    #stty -echo
    #send_user “password (for $user) on […]

    linux/unix基础知识

    恢复删除的文件

    当Linux计算机受到入侵时,常见的情况是日志文件被删除,以掩盖攻击者的踪迹。管理错误也可能导致意外删除重要的文件,比如在清理旧日志时,意外地删除了数据库的活动事务日志。有时可以通过lsof来恢复这些文件。

    当进程打开了某个文件时,只要该进程保持                   打开该文件,即使将其删除,它依然存在于磁盘中。这意味着,进程并不知道文件已经被删除,它仍然可以向打开该文件时提供给它的文件描述符进行读取和写入。除了该进程之外,这个文件是不可见的,因为已经删除了其相应的目录索引节点。

    在/proc 目录下,其中包含了反映内核和进程树的各种文件。/proc目录挂载的是在内存中所映射的一块区域,所以这些文件和目录并不存在于磁盘中,因此当我们对这些文件进行读取和写入时,实际上是在从内存中获取相关信息。大多数与lsof 相关的信息都存储于以进程的PID 命名的目录中,即/proc/1234 中包含的是PID 为1234 的进程的信息。每个进程目录中存在着各种文件,它们可以使得应用程序简单地了解进程的内存空间、文件描述符列表、指向磁盘上的文件的符号链接和其他系统信息。lsof 程序使用该信息和其他关于内核内部状态的信息来产生其输出。所以lsof 可以显示进程的文件描述符和相关的文件名等信息。也就是我们通过访问进程的文件描述符可以找到该文件的相关信息。

    当系统中的某个文件被意外地删除了,只要这个时候系统中还有进程正在访问该文件,那么我们就可以通过lsof从/proc目录下恢复该文件的内容。 假如由于误操作将/var/log/messages文件删除掉了,那么这时要将/var/log/messages文件恢复的方法如下:

    首先使用lsof来查看当前是否有进程打开/var/logmessages文件,如下:

    [root@station90 yum.repos.d]# lsof | grep /var/log/messages

    syslogd   2699      root    1w      REG                8,2   480817     330592 /var/log/messages (deleted)

    从上面的信息可以看到PID 2699(syslogd)打开文件的文件描述符为 1。同时还可以看到/var/log/messages已经标记被删除了。因此我们可以在/proc/2699/fd/1 (fd下的每个以数字命名的文件表示进程对应的文件描述符)中查看相应的信息,如下:

    [root@station90 fd]# pwd

    /proc/2699/fd

    [root@station90 fd]# cat 1 | head -n 5

    Jan 13 08:59:02 station90 syslogd 1.4.1: restart.

    Jan 13 10:44:22 station90 syslogd 1.4.1: restart.

    Jan 13 10:44:22 station90 kernel: klogd 1.4.1, […]