Linux 系统常用脚本

1 获得内存硬件信息

#!/bin/bash
# by qfong.com  selinuxplus.com
echo "  Locator   Size     Speed        Form Factor   Type       Type Detail"
echo "  ========= ======== ============ ============= ========== ==========="
dmidecode \
|sed -e '/./{H;$!d;}'\
 	-e 'x;/Memory Device\n/!d;'\
 	-e 's/: /:/g'\
 	-e 's/</{/g' -e 's/>/}/g' \
	-e 's/[ \t]*\n/\n/g'\
|awk -F: '/Size|Type|Form.Factor|Type.Detail|[^ ]Locator/{printf ("|%s",$2)}/Speed/{print "|" $2}'\
|sed -e 's/No Module Installed/{EMPTY}/'\
|sort \
| awk -F'|' '{printf (" %-10s %-8s %-12s %-13s %-10s %-8s\n", $4,$2,$7,$3,$5,$6);}'

2 获得设备信息

#!/bin/bash
# by qfong.com selinuxplus.com
df -kP |grep /|awk -F' ' '{print $6":"$5}'|awk -F'%' '{print $1}'|tr -s '\n' ';'

3 获得分区信息

#!/bin/bash
# by qfong.com  selinuxplus.com
name_val() {
   printf "%12s | %s\n" "$1" "$2"
}
[ -f /tmp/diskinfo ] && >/tmp/diskinfo
for disk in $(ls /sys/block/ | grep -v ram | grep -v loop); do
      if [ -e "/sys/block/${disk}/queue/scheduler" ]; then
         name_val "${disk}" "$(cat /sys/block/${disk}/queue/scheduler | grep -o '\[.*\]') $(cat /sys/block/${disk}/queue/nr_requests)"
         fdisk -l "/dev/${disk}" >> /tmp/diskinfo 2>/dev/null
      fi
   done
awk '
      BEGIN {
         format="%-12s %4s %10s %10s %18s\n";
         printf(format, "Device", "Type", "Start", "End", "Size");
         printf(format, "============", "====", "==========", "==========", "==================");
      }
      /Disk.*bytes/ {
         disk = substr($2, 1, length($2) - 1);
         size = $5;
         printf(format, disk, "Disk", "", "", size);
      }
      /Units/ {
         units = $9;
      }
      /^\/dev/ {
         if ( $2 == "*" ) {
            start = $3;
            end   = $4;
         }
         else {
            start = $2;
            end   = $3;
         }
         printf(format, $1, "Part", start, end, (end - start) * units);
      }
   ' /tmp/diskinfo

4 获得cfq I/O调度信息

#!/bin/bash
# by qfong.com selinuxplus.com
name_val() {
   printf "%12s | %s\n" "$1" "$2"
}
for disk in $(ls /sys/block/ | grep -v ram | grep -v loop); do
   if [ -e "/sys/block/${disk}/queue/scheduler" ]; then
      	name_val " ${disk}"   "	$(cat /sys/block/${disk}/queue/scheduler | grep -o '\[.*\]') $(cat /sys/block/${disk}/queue/nr_requests)"
	 fdisk -l "/dev/${disk}" >> /tmp/diskpartion 2>/dev/null
   fi
done

5 获得fstab信息

#!/bin/bash
# by qfong.com  selinuxplus.com
awk '
{printf "%-26s %-12s %-8s %-16s %-1s %-1s \n",$1,$2,$3,$4,$5,$6}' /etc/fstab  |grep  -v ^# |grep  -v ^$
printf "advice>>>"
echo "fstab" >>/tmp/NKevent
awk '($2 ~ /\/tmp|\/boot|\/dev\/shm|\/var\/log\/audit/ )\
{ $4 = $4 ",nosuid,noexec,nodev"} ($2 ~ /\/home/  )\
{ $4 = $4 ",nosuid,nodev" }($2 ~ /\/var/ ){ $4 = $4 ",nosuid"};\
{printf "%-26s %-12s %-8s %-16s %-1s %-1s \n",$1,$2,$3,$4,$5,$6}' /etc/fstab  |grep  -v ^# |grep  -v ^$

6 获得inode信息

#!/bin/bash
# by qfong.com selinuxplus.com
name_val() {
   printf "%12s | %s\n" "$1" "$2"
}

for file in dentry-state file-nr inode-nr; do
      name_val "${file}" "$(cat /proc/sys/fs/${file} )"
done

7 获得挂载点信息

#!/bin/bash
# by qfong.com  selinuxplus.com
sfile1=/tmp/sysmount1
sfile2=/tmp/sysmount2
    df -hP | sort > ${sfile1}
    mount | sort | join ${sfile1} - > ${sfile2}
spec="$(awk '
      BEGIN {
         f=10;
         m=0;
         t=0;
      }
      /./ {
         if ( length($1) > f ) {
            f=length($1);
         }
         if ( length($11) > m ) {
            m=length($11);
         }
         if ( length($10) > t ) {
            t=length($10);
         }
      }
      END{ 
	 print "%-" f "s %5s %4s %-" t "s  %s";

      }
   ' ${sfile2})";
   awk "
      BEGIN {
         spec=\"  ${spec}\n\";
       printf spec, \"Filesystem\", \"Size\", \"Used\", \"Type\", \"Mountpoint\";
      }
      {
         printf spec, \$1, \$2, \$3, \$5, \$6
      }" ${sfile2}
rm ${sfile2} ${sfile1}

8 获得netstat信息

#!/bin/bash
# by qfong.com selinuxplus.com
netfile=/tmp/netstat
netstat -antp >${netfile}
echo "  Connections from remote IP addresses"
awk '$1 ~ /^tcp/ && $5 ~ /^[1-9]/ {
      print substr($5, 0, index($5, ":") - 1);
   }' ${netfile} | sort | uniq -c \
      | awk '{printf "    %-15s %5d\n", $2, $1}' \
      | sort -n -t . -k 1,1 -k 2,2 -k 3,3 -k 4,4
   echo "  Connections to local IP addresses"
   awk '$1 ~ /^tcp/ && $5 ~ /^[1-9]/ {
      print substr($4, 0, index($4, ":") - 1);
   }' ${netfile} | sort | uniq -c \
      | awk '{printf "    %-15s %5d\n", $2, $1}' \
      | sort -n -t . -k 1,1 -k 2,2 -k 3,3 -k 4,4
   echo "  Connections to top 10 local ports"
   awk '$1 ~ /^tcp/ && $5 ~ /^[1-9]/ {
      print substr($4, index($4, ":") + 1);
   }' ${netfile} | sort | uniq -c | sort -rn | head -n10 \
      | awk '{printf "    %-15s %5d\n", $2, $1}' | sort
   echo "  States of connections"
   awk '$1 ~ /^tcp/ {
      print $6;
   }' ${netfile} | sort | uniq -c | sort -rn \
      | awk '{printf "    %-15s %5d\n", $2, $1}' | sort
rm ${netfile}

9 获得netstat 链接状态的信息

#!/bin/bash
# by qfong.com selinuxplus.com
netstat -n |awk '/^tcp/{++S[$NF]}END {for (a in S) print a,S[a]}'

10获得selinux 相关信息

#!/bin/bash
# by qfong.com selinuxplus.com
selogin=/tmp/semanage_login
seuser=/tmp/semanage_user
semanage login -l >${selogin}
semanage user -l >${seuser}
sed -i '1,3d' ${seuser}
printf "***The Selinux Login List:>>>\n"
cat ${selogin}

spec="$(awk '
      BEGIN {
         f=8;
         m=10;
         t=0;
      }
      /./ {
         if ( length($1) > f ) {
            f=length($1);
         }
         if ( length($4) > m ) {
            m=length($4);
         }
      }
      END{ 
	 print "%-"f "s %-8s %-8s %-"m "s %-s %s %s %s";

      }
   ' ${seuser})";
   awk "
      BEGIN {
         spec=\"  ${spec}\n\";
	printf \"***The Selinux User List:>>>\n\n\"
       printf spec, \"\", \"Labeling\", \"MLS/\", \"MLS/\", \"\",\"\",\"\",\"\";
       printf spec, \"SEL User\", \"Prefix\", \"MCSLevel\", \" MCSRange\", \"SEL Roles\",\"\",\"\",\"\";
      }
      {
         printf spec, \$1, \$2, \$3, \$4, \$5,\$6,\$7,\$8
      }" ${seuser}


rm ${seuser} ${selogin}

11 获得tcp-warpper限制

#!/bin/bash
# by qfong.com  selinuxplus.com
HOSTSALLOW=/etc/hosts.allow
cat /etc/hosts.allow|grep -v ^#
if [ $? != 0 ];then
printf "The Hosts.allow is Null\n"
fi
for I in $(ifconfig |grep "inet addr"|cut -f2 -d: |cut -f1-3 -d"."|grep -v ^127|sort -n)
do
if ! grep  -q ${I}  ${HOSTSALLOW} ;then
printf "advice>>>\n"
printf "ALL:localhost,${I}.\n"
fi
done

HOSTSDENY=/etc/hosts.deny

12 获得linux snmp设置信息

#!/bin/bash
# by qfong.com  selinuxplus.com
cat /etc/snmp/snmpd.conf |grep mib-2
cat /etc/snmp/snmpd.conf |grep ^"view mib2"
if [ $? != 0 ];then
printf "advice>>>\n"
echo "snmpd mgmt">>/tmp/NKevent
printf "view mib2   included  .iso.org.dod.internet.mgmt.mib-2 fc\n"
fi
#cat /etc/snmp/snmpd.conf |grep "systemview none"
cat /etc/snmp/snmpd.conf |grep "exact mib2"
if [ $? != 0 ];then
printf "advice>>>\n"
echo "snmpd mib2">>/tmp/NKevent
printf "access notConfigGroup "" any noauth exact mib2 none none\n"
fi

12 获得系统常用日志信息

#!/bin/bash
# by qfong.com  selinuxplus.com
cd /var/log >/dev/null
for LOGF in	\
	boot.log	\
	btmp		\
	cron		\
	dmesg		\
	ksyms		\
	httpd		\
	lastlog		\
	maillog		\
	mailman		\
	messages	\
	news		\
	pgsql		\
	rpmpkgs		\
	sa		\
	samba		\
	scrollkeeper.log\
	secure		\
	spooler		\
	squid		\
	vbox		\
	wtmp		
do
	if [ -e ${LOGF} ];then
	ls -l  ${LOGF} |grep -v total
fi 
done
cd -  >/dev/null

13 获得系统限制链接数

#!/bin/bash
# by qfong.com  selinuxplus.com
limit=/tmp/limit
cat /etc/security/limits.conf | grep -v "^#" |grep -v ^$   >${limit}
spec="$(awk '
      BEGIN {
         f=8;
         m=8;
         t=10;
      }
      /./ {
         if ( length($2) > f ) {
            f=length($2);
         }
         if ( length($3) > m ) {
            m=length($3);
         }
         if ( length($4) > t ) {
            t=length($4);
         }
      }
      END{ 
	 print "%10s %"f"s %" m "s %" t "s";

      }
   '  ${limit} )";
   awk   "
      BEGIN {
         spec=\"  ${spec}\n\";
     	  printf spec, \"<domain>\" ,\"<type>\", \"<item>\" ,\"<value>\";
   }
    {     printf spec, \$1, \$2, \$3, \$4
      }"   ${limit}

14 获得网卡信息

#!/bin/bash
# by qfong.com  selinuxplus.com
name_val (){
printf "%12s | %s\n" "$1" "$2"
}
lspci | grep -i ethernet |cut -d: -f3|sed 's/(rev.*)//g'|while read line;do
name_val Controller "${line}"
done

15 获得系统alias信息

#!/bin/bash
# by qfong.com  selinuxplus.com
aliasfile=/tmp/aliasfile
grep "alias" /root/.*rc | awk -F: '{print $2}' |grep  ^alias|sed 's/=/ /g' > ${aliasfile}
grep "alias" /root/.*profile | awk -F: '{print $2}' |grep  ^alias|sed 's/=/ /g'  >> ${aliasfile}
grep "alias" /etc/profile | awk -F: '{print $2}' |grep  ^alias|sed 's/=/ /g' >> ${aliasfile}
grep "alias" /etc/profile.d/colorls.sh >> ${aliasfile}
grep "alias" /etc/profile.d/colorls.sh >> ${aliasfile}
cat ${aliasfile} |sed 's/^  //g' |sort -r |sort -u 
rm $aliasfile

发表评论

您的电子邮箱地址不会被公开。