收集系统信息脚本中英对照

作者:Ajian 发布时间:March 27, 2009 分类:Shell

今天正巧碰上看到两个一样的SHELL脚本 一个是英文原版的 一个是加了中文注释的,把采集的信息用wiki的格式输出。 感觉这个脚本挺清楚的,可以把中间的一些东西抽出来加以利用。

#!/bin/bash                        

#make sure tools work as expected
LANG=C                           

#this specifies which Headline level is used
HL='===='                                   

CPU=`cat /proc/cpuinfo  | grep 'model name' | awk -F\: '{print $2}'|uniq|sed -e 's/ //'`
MHz=`cat /proc/cpuinfo | grep 'cpu MHz' | awk -F\: '{print $2}'|uniq|sed -e 's/ //'`    
CPUCOUNT=`cat /proc/cpuinfo|grep "physical id"|uniq|wc -l`                              
RAM=`cat /proc/meminfo | grep MemTotal | awk -F\: '{print $2}' | awk -F\  '{print $1 " " $2}'`
SWAP=`cat /proc/meminfo | grep SwapTotal | awk -F\: '{print $2}' | awk -F\  '{print $1 " " $2}'`
SYSTEM=`uname -sr`                                                                              
HOSTNAME=`(hostname -f || hostname) 2>/dev/null`                                                

# look for known Distributions
if [ -e /etc/debian_version ]; then
OS="Debian `cat /etc/debian_version`"
elif [ -e /etc/redhat-release ]; then
OS=`cat /etc/redhat-release`         
elif [ -e /etc/SuSE-release ]; then  
OS=`cat /etc/SuSE-release |head -n1` 
elif [ -e /etc/gentoo-release ]; then
OS=`< /etc/gentoo-release`           
else                                 
OS='unknown'                         
fi                                   

echo "
$HL General $HL

^ Hostname | $HOSTNAME |
^ CPU      | $CPU      |
^ MHz      | $MHz      |
^ # CPU    | $CPUCOUNT |
^ RAM      | $RAM      |
^ Swap     | $SWAP     |
^ System   | $SYSTEM   |
^ OS       | $OS       |
"                       

echo -e "$HL Network $HL\n"
for DEV in `/sbin/ifconfig -a |grep '^\w'|awk '!/lo/{print $1}'`
do                                                              
IP=`/sbin/ifconfig $DEV |awk -F\: '/inet / {print $2}'|awk '{print $1}'`
echo "^ $DEV | $IP |"                                                   
done                                                                    
echo                                                                    

echo -e "$HL PCI $HL\n"
lspci |sed 's/^/  /'   
echo                   

echo -e "$HL Filesystems $HL\n"
df -hPT -x tmpfs | awk '{print "| " $1 " | " $2 " | " $3 " | " $7 " |"}'
echo                                                                    

echo -e "$HL IDE devices $HL\n"

for DEV in `ls -1d /proc/ide/hd* |sed 's/.*\///'`
do                                               
MODEL=`cat /proc/ide/$DEV/model`                 
if [ -e /proc/ide/$DEV/capacity ]; then          
SIZE=`cat /proc/ide/$DEV/capacity`
SIZE=`expr $SIZE / 2097152`
else
if [ -e /sys/block/$DEV/size ]; then
SIZE=`cat /sys/block/$DEV/size`
SIZE=`expr $SIZE / 2097152`
else
SIZE='(unknown)'
fi
fi

echo "| /dev/$DEV | $MODEL | $SIZE GB |"
done

if [ "$(ls -1d /sys/block/sd* 2> /dev/null)" ]; then
echo -e "$HL SCSI devices $HL\n"
for DEV in `ls -1d /sys/block/sd* |sed 's/.*\///'`
do
MODEL=`cat /sys/block/$DEV/device/model`
SIZE=`cat /sys/block/$DEV/size`
SIZE=`expr $SIZE / 2097152`

echo "| /dev/$DEV | $MODEL | $SIZE GB |"
done
echo
fi
#!/bin/bash
 
# 为了使脚本正确运行,将语系设置为通用 C
LANG=C
 
# 指定不同输出部分以 H2 输出
HL='===='
 
# 将从 /proc/cpuinfo 获得的 CPU 型号信息存于变量 CPU 中
CPU=`cat /proc/cpuinfo  | grep 'model name' | awk -F\: '{print $2}'|uniq|sed -e 's/ //'`
# 将从 /proc/cpuinfo 获得的 CPU 频率信息存于变量 MHz 中
MHz=`cat /proc/cpuinfo | grep 'cpu MHz' | awk -F\: '{print $2}'|uniq|sed -e 's/ //'`
# 将从 /proc/cpuinfo 获得的 CPU 个数信息存于变量 CPUCOUNT 中
CPUCOUNT=`cat /proc/cpuinfo|grep "physical id"|uniq|wc -l`
# 将从 /proc/cpuinfo 获得的 CPU 核数信息存于变量 CPUKENELCOUNT 中
CPUKENELCOUNT=`cat /proc/cpuinfo|grep "processor"|uniq|wc -l`
# 将从 /proc/meminfo 获得的物理内存数量存于变量 RAM 中
RAM=`cat /proc/meminfo | grep MemTotal | awk -F\: '{print $2}' | awk -F\  '{print $1 " " $2}'`
# 将从 /proc/meminfo 获得的虚拟内存数量存于变量 SWAP 中
SWAP=`cat /proc/meminfo | grep SwapTotal | awk -F\: '{print $2}' | awk -F\  '{print $1 " " $2}'`
# 将操作系统类型信息存于变量 SYSTEM 中
SYSTEM=`uname -sr`
# 将计算机名存于变量 HOSTNAME 中
HOSTNAME=`(hostname -f || hostname) 2>/dev/null`
 
# 将操作系统发型版信息存于变量 OS 中
if [ -e /etc/debian_version ]; then
  OS="Debian `cat /etc/debian_version`"
elif [ -e /etc/redhat-release ]; then
  OS=`cat /etc/redhat-release`
elif [ -e /etc/SuSE-release ]; then
  OS=`cat /etc/SuSE-release |head -n1`
elif [ -e /etc/gentoo-release ]; then
  OS=`< /etc/gentoo-release`
else
  OS='unknown'
fi
 
# 打印常规信息
echo "
 
# 打印常规信息标题
$HL General $HL
 
# 以表格形式打印上面收集的信息变量
^ Hostname | $HOSTNAME |
^ CPU      | $CPU      |
^ MHz      | $MHz      |
^ # CPU    | $CPUCOUNT |
^ # CPUKENEL | $CPUKENELCOUNT |
^ RAM      | $RAM      |
^ Swap     | $SWAP     |
^ System   | $SYSTEM   |
^ OS       | $OS       |
"
 
# 打印网络信息标题
echo -e "$HL Network $HL\n"
# 以 for 循环用表格形式打印各个网络接口及 IP
for DEV in `/sbin/ifconfig -a |grep '^\w'|awk '!/lo/{print $1}'`
do
  IP=`/sbin/ifconfig $DEV |awk -F\: '/inet / {print $2}'|awk '{print $1}'`
  echo "^ $DEV | $IP |"
done
# 打印空行
echo
 
# 打印PCI设备信息标题
echo -e "$HL PCI $HL\n"
# 将 lspci 命令输出的每一行前加两个空格,即以CODE方式显示 lspci 命令的输出
lspci |sed 's/^/  /'
# 打印空行
echo
 
# 打印文件系统信息标题
echo -e "$HL Filesystems $HL\n"
# 以表格方式打印除了 tmpfs 之外所有文件系统的信息
# (包括: Filesystem、Type、Size、Mounted 四项信息)
df -hPT -x tmpfs | awk '{print "| " $1 " | " $2 " | " $3 " | " $7 " |"}'
echo
 
# 打印IDE设备信息标题
echo -e "$HL IDE devices $HL\n"
 
# 以 for 循环用表格形式输出每一个 IDE 设备的信息
for DEV in `ls -1d /proc/ide/hd* |sed 's/.*\///'`
do
  MODEL=`cat /proc/ide/$DEV/model`
  # 由于不同的Linux发布系统记录设备大小的文件不同
  # 因此使用下面的 if 嵌套语句进行判断
  if [ -e /proc/ide/$DEV/capacity ]; then
    SIZE=`cat /proc/ide/$DEV/capacity`
    SIZE=`expr $SIZE / 2097152`
  else
    if [ -e /sys/block/$DEV/size ]; then
      SIZE=`cat /sys/block/$DEV/size`
      SIZE=`expr $SIZE / 2097152`
    else
      SIZE='(unknown)'
    fi
  fi
 
  echo "| /dev/$DEV | $MODEL | $SIZE GB |"
done
 
# 当  /sys/block/sd* 存在时
if [ "$(ls -1d /sys/block/sd* 2> /dev/null)" ]; then
 # 打印SCSI设备信息标题
  echo -e "$HL SCSI devices $HL\n"
  # for 循环用表格形式输出每一个 SCSI 设备的信息
  for DEV in `ls -1d /sys/block/sd* |sed 's/.*\///'`
  do
    MODEL=`cat /sys/block/$DEV/device/model`
    SIZE=`cat /sys/block/$DEV/size`
    SIZE=`expr $SIZE / 2097152`
 
    echo "| /dev/$DEV | $MODEL | $SIZE GB |"
  done
  echo
fi

棋盘山-黑沟活动计划

作者:Ajian 发布时间:March 27, 2009 分类:户外活动

这周六的活动去黑沟,好像难度不大,期待的就是那个35M的绳降,呵呵,现在树都发芽要变绿了,去踏青了。周日再去看看樱花,享受这不错的春日。

发起人
铁镐
联系方式
13693244034
活动时间
2009年03月28日 至 2009年03月28日
活动地点
棋盘山
集合时间
28日早7:30三义庙/7:45平果园地铁
集合地点
28日早7:30三义庙/7:45平果园地铁
人数限制
33人
活动强度
绿野1级
尚有名额
0人
报名截止时间
2009年03月27日 18:50:00

[前言】
此次活动,全程13公里,累计上升1000米,绳降32米,请慎重报名。
自己自愿购买保险。

【行程安排】
7:30三义庙出发
7:45苹果园地铁
9:30上山
13:00休息吃饭
18:00上车返京

【费用预算】
包车:35元左右/人

【装备要求】
手套,手电
午饭自带,水2~4升

【报名须知】
系统报名,留下电话,注明上车地点

【活动备注】
相关游记、图片见链接:11月30日(周日)铁镐队-西口子__棋盘石__黑沟__大梯子 一日穿越
http://www.lvye.info/modules/newbb/viewtopic.php?topic_id=194218&forum=12

利用SVN钩子同步程序注意事项

作者:Ajian 发布时间:March 23, 2009 分类:SVN

前言:其实利用SVN实时同步到WEB服务器即时展现出来的文章已经到处都是,但是我在做的时候 还是有不少的小问题,很多文章也没有提出来过,还有同步也是,我还是记录下自己做过的尤其是一些细节,时间一长又会忘掉了。

同步程序思路:用户提交程序到SVN,SVN触发hooks,按不同的hooks进行处理,这里用到的是post-commit,利用post-commit到代码检出到SVN服务器的本地硬盘目录,再通过rsync同步到远程的WEB服务器上。

知识点:
1、SVN的hooks
# start-commit 提交前触发事务
# pre-commit 提交完成前触发事务
# post-commit 提交完成时触发事务
# pre-revprop-change 版本属性修改前触发事务
# post-revprop-change 版本属性修改后触发事务
通过上面这些名称编写的脚本就就可以实现多种功能了,相当强大。
2、同步命令rsync的具体参数使用
3、具有基个语言的编程能力bash python perl都可以实现

post-commit具体实现细节
post-commit脚本

#!/bin/sh
# -------------------------------------------------------------------------------
# Filename:    post-commit
# Revision:    1.0
# Date:        2009/03/20
# Author:      Ajian
# Email:       ajian521#gmail.com
# Website:     www.ohlinux.com
# Description: WEB server with synchronization code by SVN
# -------------------------------------------------------------------------------
# Copyright:   2009 (c) Ajian
# License:     GPL
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# -------------------------------------------------------------------------------
#Version 1.0
#When users submit finished code, put the code up-to-date detection and synchronization to the WEB server, taking care not to include the delete operation.
	
#Set variable
SVN=/usr/bin/svn
WEB=/home/test_nokia/
RSYNC=/usr/bin/rsync
LOG=/tmp/rsync_test_nokia.log
WEBIP="192.168.0.23"
export LANG=en_US.UTF-8

#update the code from the SVN
$SVN update $WEB --username user --password  password
#If the previous command completed successfully, to continue the following
if [ $? == 0 ]
then
    echo ""     >> $LOG
    echo `date` >> $LOG
    echo "##############################" >> $LOG
    chown -R nobody:nobody /home/test_nokia/
    #Synchronization code from the SVN server to the WEB server, notes:by the key 
    $RSYNC -vaztpH  --timeout=90   --exclude-from=/home/svn/exclude.list $WEB root@$WEBIP:/www/ >> $LOG
fi

以上是具体的post-commit程序
注意事项:
1、一定要定义变量,主要是用过的命令的路径。因为SVN的考虑的安全问题,没有调用系统变量,如果手动执行是没有问题,但SVN自动执行就会无法执行了。
2、SVN update 之前一定要先手动checkout一份出来,还有这里一定要添加用户和密码 如果只是手动一样会更新,但自动一样的不行。
3、加上了对前一个命令的判断,如果update的时候出了问题,程序没有退出的话还会继续同步代码到WEB服务器上,这样会造成代码有问题
4、记得要设置所属用户,因为rsync可以同步文件属性,而且我们的WEB服务器一般都不是root用户,用户不正确会造成WEB程序无法正常工作。
5、建议最好记录日志,出错的时候可以很快的排错
6、最后最关键的数据同步,rsync的相关参数一定要清楚,这个就不说了。注意几个场景:
这里的环境是SVN服务器与WEB服务器是开的
把SVN服务器定义为源服务器 WEB服务器为目的服务器
场景一、如果目的WEB服务器为综合的混杂的,像只有一个WEB静态资源,用户提交的,自动生成的都在WEB的一个目录下,建议不要用--delete这个参数
上面这个程序就是这样,实现的是源服务器到目的服务器的更新和添加,而没有删除操作,WEB服务器的内容会多于源SVN的服务器的
场景二、实现镜像,即目的WEB服务器与源SVN服务器一样的数据,SVN上任何变化WEB上一样的变化,就需要--delete参数
场景三、不需要同步某些子目录,可能有些目录是缓存的临时垃圾目录,或者是专用的图片目录(而不是样式或者排版的)要用exclude这个参数
注意:这个参数的使用不用写绝对路径,只要目录名称就行 aa代表文件 aa/ 代表目录 ,缺点就是如果有多个子目录都是一样的名称 那么这些名称就都不会被同步
建议用--exclude-from=/home/svn/exclude.list 用文件的形式可以方便的添加和删除
exclude.list

.svn/
.DS_Store
images/

利用SVN的钩子还可以写出很多的程序来控制SVN 如代码提交前查看是否有写日志,是否有tab,有将换成空格,是否有不允许上传的文件,是否有超过限制大小的文件等等。

Shell整理-服务器信息收集程序

作者:Ajian 发布时间:March 19, 2009 分类:Shell

前言:我们常常需要收集服务器的信息,硬件的来补充硬件表,服务器的流量、连接数来监控服务器状态等都需要收集,而且还会想把收集过来的信息通过邮件或者excel表显示出来,等等。计划写了个比较强的综合性的服务器收集程序,现在下面先展示的是一个硬件信息收集的程序
这个程序的特点:适应slackware和centos redhat系列的系统,还有需要安装dmidecode 这个可以统计到空闲的PCI槽 物理内存的数量和大小 还可以统计CPU的物理个数和类型等。最后可以结合转excel脚本转换成excel文件。最后就可以形成了一张表。


#!/bin/bash

# -------------------------------------------------------------------------------
# Filename:    system_info.sh
# Revision:    1.1
# Date:        2008/12/30
# Author:      Ajian
# Email:       ajian521#gmail.com
# Website:     www.ohlinux.com
# Description: get the infomation of the system ,eg: memory,cpu ,etc
# Notes:       can check one or many sites
# -------------------------------------------------------------------------------
# Copyright:   2009 (c) Ajian
# License:     GPL
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# -------------------------------------------------------------------------------
#Version 1.1
#get the infomation about , hostname OS CPU CPU_num CPU_Phy  Mem_inuse Mem_Phy disk disk_inuse
#
Hostname=`hostname | cut -d. -f1`
#echo $Hostname
if [ ! -f /etc/slackware-version ]
then
OS=`cat /etc/issue | head -1`
else
OS=`cat /etc/slackware-version | head -1`
fi

#echo $OS
CPU=`cat /proc/cpuinfo | grep "model name" | head -1 | cut -d: -f2`
#echo $CPU
CPU_Phy=`cat /proc/cpuinfo | grep phy | sort | uniq | wc -l`
#echo $CPU_Phy
CPU_num=`cat /proc/cpuinfo | grep ^process | wc -l`
#echo $CPU_num
CPU_core=$(( $CPU_num / $CPU_Phy ))
#echo $CPU_core

Mem_inuse=`free -m | grep Mem | awk '{print $2}'`
Mem_Phy=`dmidecode -t 17 | grep "Size" | cut -d: -f2 | sort | uniq -c | awk '{printf "%s ",$0}'`
#echo $Mem_inuse
#echo $Mem_Phy
Disk=`fdisk -l | grep Disk | grep GB | cut -d, -f1 | cut -d/ -f3 | awk '{printf "%s  ",$0}'`
#echo $Disk
Disk_inuse=`df -h | grep ^/dev | awk '{print $1,$6,$2}' |  awk '{printf "%s  ",$0}'`
#echo $Disk_inuse

echo -e "$Hostname\t$OS\t$CPU\t$CPU_Phy*$CPU_core\t$Mem_inuse MB\t$Mem_Phy\t$Disk\t$Disk_inuse" > ; /tmp/systeminfo.txt

OpenSUSE升级注意事项

作者:Ajian 发布时间:March 18, 2009 分类:openSUSE

呵呵,最近我就升级得比较频繁,出了不少的问题。

我把KDE4.1升到KDE4.2.1 后来又升到4.3 功能上感觉有不少的改进,但毕竟还是有不少的BUG,甚至是最致命的。后来在网上查都解决不了,就问了下swyear(http://swyear.blogspot.com/2009/03/kde-42.html)要注意哪些事项 看下下面的对话吧,懒得再重复一遍了。

jian 提到...
你好,我最近也升级到了KDE4.2 升级方法见http://www.ohlinux.com/?p=251 应该是官方的方法 后来我又升级到4.3但发现很不稳定有很多的问题 所以我又降下来了 现在用的是4.2.66 (KDE 4.2.66 (KDE 4.3 >= 20090310)) "release 2.4" 现在的问题是 plasma-desktop 占用的CPU到100% 占用了我双核中的其中一个CPU 造成发热量很大,而且时常也有完全卡机(没有任何挽救的办法)的情况 不知道你是否有遇到过 我现在一直在更新baseurl=http://download.opensuse.org/repositories/KDE:/KDE4: /UNSTABLE:/Desktop/openSUSE_11.1/ 但一直都没有解决 请求帮助 谢谢
jian 提到...
另外我要补充的是 我的libqt4 用的是4.5.0 我看了你提到的swyear中的是4.4.3 这个是否会有影响?主要我现在查找不出这个100%的原因 你是否有比较好的方法
swyear 提到...
jian:
除非必要,我不會去用 UNSTABLE 的東西,除非要測試,目前我沒有多餘的機器,要用 VM 跑也沒多餘空間(真慘),所以幫不上忙了。看您的 KDE 版本編號是屬於 4.3 系列的,您可以將 UNSTABLE 的套件庫停用,用 Factory 的 4.2.1 來無條件降級回來,這樣會比較穩定。KDE 4.3 許多新特性『聽說』要用 qt4.5,若是 4.2.1 用 qt4.4 系列的就可以了。
jian 提到...
我昨天晚上用factory降了,但是现在桌面用不了了,调不出桌面配置,有什么方法可以恢复默认opensuse的桌面?
jian 提到...
已经解决了 我把/root/.kde4/share/apps下的desktoptheme移除就可以了 还有出现firefox不能使用的情况,也是因为有相关的程序没有降级造成的。100%的问题也没有了,现在还有一个问题就是任务管理器上不能显示中文 中文是空白的

当然还有遇到不少小的问题,如声音没有了,是因为他保存了上次的声音是关闭的,如果在开机进入桌面的时候不迅速的把音量打开,会一直都没有声音。现在还有几个问题是我的kmail不能存储密码,任务管理器上的标题不显示中文,还有一个akonadi检测服务,还老是出错,不知道做什么的,想把他给删除了;ATI的驱动好像没有最新内核版本的,我就一直升不了内核。等等问题