`
bgfrh00g
  • 浏览: 12480 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

linux笔记3

 
阅读更多

linux笔记3
2011年06月13日
  循环语句
  1,break命令
  break即中断的意思,用于跳出当前所在的循环体,但是并不退出程序
  例:循环提示用户输入字符串,并将每次输入的内容保存到临时文件 “/tmp/input.txt 中”
  当用户输入“END”字符串时退出循环体,并统计出input.txt文件中的行数、单词数、字节数等
  信息,统计完后删除临时文件
  [root@localhost ~]#vi inputbrk.sh
  #!/bin/bash
  while true
  do
  read -p "input a string :" STR
  echo $STR >> /tmp/input.txt
  if [ "$STR" ="END" ]; then //建议为STR变量使用引号,以免字符串中有空格时出错
  break
  fi
  done
  wc /tmp/input.txt
  rm -f /tmp/input.txt
  [root@localhost ~]#sh inputbrk.sh
  input a string: benet 3.0
  input a string :accp 6.0
  input a string :END
  3 5 23 /tmp/input.txt
  2,continue 命令
  continue 即“继续” 的意思,用于暂停本次循环,跳转至循环语句的顶部重新测试条件,本次执行过程
  中continue后的命令序列将被忽略
  例: 删除系统中的stu1~stu20 各用户帐号,但是stu8 stu18 除外
  [root@localhost ~]#vi delsome.sh
  #!/bin/bash
  i=1
  while [ $i -le 20 ]
  do
  if [ $i -eq 8 ]|| [ $i -eq 18 ] ; then //碰到需 要保留的用户时跳转而不删除
  let i++
  continue
  fi
  userdel -r stu$!
  let i++
  done
  [root@localhost ~]#grep "stu" /etc/passwd //确认执行结果
  shell函数的应用
  函数的定义和调用
  在使用一个shell函数之前,要求必须称进行定义(定义函数的语句必须在使用函数的语句之前),定义函数的语句格式如下
  fuction 函数名 {
  命令序列
  }
  或者简化成
  函数名()
  {命令序列
  }
  其中函数名称是由用户自行设置,命令序列则是需要重复使用的许多条命令,调用函数时,直接使用函数名即可(不需要加小
  括号)
  例: 在脚本中定义一个help函数,当用户输入的脚本参数不是"start" 或“stop”时,加载该函数并给出关于
  命令用法的帮助信息,否则给出对应的提示信息。
  [root@localhost ~]# vi helpfun.sh
  #!/bin/bash
  help(){ //定义help() 函数,用于显示脚本执行帮助
  echo "usager: "$0" start|stop " //"$0" 变量用于表示本脚本文件名称
  }
  case "$1" in
  start)
  echo "starting …"
  ;;
  stop)
  echo "shutdown…"
  ;;
  *)
  help //调用前面定义的help()函数并执行其中的语句
  esac
  [root@localhost ~]#chmod a+x helpfun.sh
  [root@localhost ~]#./helpfun.sh start
  starting……
  [root@localhost ~]#./helpfun.sh restart //参数不符合要求时,输出执行的帮助信息。
  usage: ./helpfun.sh start | stp
  函数的参数
  在shell脚本中,已经定义的函数就相当于脚本内部设置的命令一样,也可以使用位置参数,如果函数中的命令序列能够
  处理这些参数,则使用参数传递功能可以实现更加灵活的应用。
  例:在脚本中定义一个加法函数,用于计算 两个数的和,并调用该函数分别计算12+34 56+789 的和
  [root@localhost ~]#vi adderfun.sh
  #!/bin/bash
  adder() {
  echo `expr $1 + $2`
  }
  adder 12 34 //将12、34作为adder函数的位置变量$1 $2
  adder 56 789 //将56、789作为adder函数的位置变量 $1 $2
  [root@localhost ~]#sh adderfun.sh
  46
  845
  第九章 系统故障分析与报告
  熟悉觉日志文件及其分析方法
  会解决常见的启动登录类故障
  会解决常见的软件包安装类故障
  会解决常见的文件系统、磁盘类故障
  熟悉觉的系统性能监控方法
  学完本章内容,学员将能够解决以下问题
  1,如何通过日志分析排除故障,查找威胁?
  2,因对“/etc/fstab”文件的误操作导致无法进入系统,如何使用linux安装光盘进行修复
  3,当忘记linux系统管理员的密码时,如何进入系统进行维护
  4,因管理员误删了几个文件,导致系统开机后无法进入系统,仅显示一个“grub>”的提示符,
  应如何解决该故障
  5,对于使用windows和linux双系统主机,在重新安装windows系统后,无法启动进入linux系统中,应该如何解决
  6,在安装一个软件的时候,提示缺少一个.so文件,使得安装无法继续,应如何解决
  linux
  主要日志文件
  1,内核及系统日志
  由syslog,统一管理,
  2,用户日志:这种日志,数据用于linux系统用户登录及退出系统的相关信息,包括,用户名、登录的终端
  登录时间 来源主机,正在使用的进程操作等
  3,程序日志:
  默认放在目录“/var/log”中,一部分程序共用一个日志文件,
  例:列表查看“/var/log”目录中的各种日志文件及子目录
  [root@localhost ~]#ls /var/log
  /var/log/messages:记录linux内核消息及各种应用程序的公共日志信息,包括启动、IO错误、网络错误、程序故障等
  对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的事件记录信息
  /var/log/cron:记录cron计划任务产生的事件信息
  /var/log/dmesg:记录linux系统在引导过程中的各种事件信息
  /var/log/maillog:记录进入或发出系统的电子邮件活动
  /var/log/lastlog:最近几次成功登录事件和最后一次不成功登录事件。
  /var/log/rpmpkgs;记录系统中安装的各rpm包列表信息
  /var/log/secue:记录用户登录认证过程中的事件信息
  /var/log/wtmp:记录每个用户登录、注销及系统启动和停机事件。
  /var/run/utmp:记录当前登录的每个用户的详细信息
  例:查看日志配置文件“/etc/syslog.conf”内容
  [root@localhost ~]#grep -v "^$" /etc/syslog.conf
  #log all kernel messages to the console.
  #loging much else clutters up the screen.
  #kern.* /dev/console
  #log anything (except mail )of level info or higher.
  #don't log private authentication messages!
  *.info;mail.none;authpriv.none;cron.none /var/log/messages
  #the authpriv file has restricted access.
  authpriv.* /var/log/secure
  #log all the mail messages in one place.
  mail.* /var/log/maillog
  #log cron stuff
  cron.* /var/log/cron
  #everybody gets emergency messages.
  *.emerg
  #save news errors of level crit and higher in a special file.
  uucp ,new.crit /var/log/spooler
  #save boot messages also to boot.log
  local17.* /var/log/boot.log
  从配置文件 “/etc/syslog.conf”中可以看到,受syslogd服务管理的日志文件都是linux系统中
  最主要的日志文件,它们记录了linux系统中的内核、用户认证、邮件、计划任务等最基本的系统消息
  。在linux内核中,根据日志消息的重要程度不同,将其分为不同的优先级别(数字越小,优先级越高)
  0 emerg 紧急 :会导致主机系统不可用的情况
  1 alert 警告: 必须马上采取措施解决的问题
  2 crit 严重: 比较严重的情况。
  3 err 错误: 运行出现的错误
  4 warning 提醒: 可能影响系统功能,需要提醒用户的重要事件。
  5 notice 注意: 不会影响正常功能,但是需要注意的事件
  6 info 信息: 一般信息
  7 debug 调试: 程序或系统调试信息等。
  对于syslog服务统一管理的大部日志文件,使用的日志记录格式基本上都是相同的,下面以公共日志文件“/var/log/messages”
  为例来说明内核及系统日志记录的基本格式。
  例: 查看公共日志文件 “/var/log/messages”的最后两行记录
  [root@localhost ~]#tail -2 /var/log/messages
  may 23 09:32:03 localhost smartd(2886):monitoring 0 ata and 0 scsi devices
  may 23 09:32:03 localhost smartd (2888):smartd has fork()ed into background
  mode. new PID=2888
  日志文件中的每一行表示一条信息,每个消息均由四个字段的固定格式的组成
  时间标签:消息发出的日期与时间
  主机名: 生成消息的计算机的名称。
  子系统名称:发出消息的应用程序的名称
  消息:消息的具体内容。
  在有些情况下,可以设置syslog,使其在把日志信息记录到文件的同时将日志信息发送到打印机进行打印,这样无论
  网络入侵者怎么修改日志都不能清除入侵的痕迹。syslog日志服务是一个常会被攻击的显著目标,破坏了它将会使管理员
  难以发现入侵以及入侵的痕迹,因此要特别注意监控其守护进程以及配置文件。
  2,用户日志
  在wtmp utmp lastlog等日志文件中,保存了系统用户登录、退出等相关事件消息。但是这些文件都是二进制数据文件
  ,不能直接使用 tail\less 等文本查看工具进行浏览,需要使用who w users last 与 ac 等用户查询命令来获取日志信息。
  1)
  who命令
  who命令用于查询utmp文件并报告当前登录的每个用户的信息。使用该命令,系统管理员可心查看当前系统存在哪些
  不合法用户,从而对其进行审计和处理。who的默认输出包括用户名、终端类型、登录日期及远程主机
  例:使用who命令查看墚前登录的各用户所在的终端、登录日期 时间 和地点等信息
  [root@localhost ~]#who
  root tty1 2008-12-01 23:06
  xiaoqi tty2 2008-12-02 20:06
  root pts/0 2008-12-03 05:41 (10.0.0.1)
  root pts/1 2008-12-03 07:07 (10.0.0.1)
  例: w命令
  w命令用于查询utmp工显示当前系统中的每个用户及其所运行的进程信息。
  例: 使用w命令查看当前登录的各用户信息及所运行的进程
  [root@localhost ~]#w
  09:26:12 up 2days, 33 min, 4users, load average : 0.17, 0.10,0.08
  user tty from loging idle jcpu pcpu what
  root tty1 mon23 34:19m 0.19s 0.19s -bash
  3,例:users命令
  users命令用单独的一行打印出当前登录的用户,每个显示的用户名对应一个登录会话,如果一个用户不止一个登录会话,那他的用户名
  将显示与其相同的次数。
  [root@localhost ~]#users
  xiaoqi root root root //root用户打开三个终端
  4,例: last命令
  last命令用于查询wtmp文件,显示出自该文件被创建以来登录过的所有用户记录,最近登录的用户记录将会显示在最前面
  使用 last命令查看系统中最近的五次用户登录记录
  [root@localhost ~]# last | head -5
  root pts/0 173.17.17.174 sat may 23 09:34 still logged in
  reboot system boot 2.6.18-8.e15 sat may 23 09:31 06:31
  root pts/0 173.17.17.174 thu may 21 18:04 08:14 (14:10)
  jerry tty5 thu may 21 15:40 -crash (1+17:50)
  teacher tyy3 thu may 21 15:39 -crash (1+17:51)
  5,ac命令
  ac命令将查询wtmp文件中的用户登录和退出情况,报告用户连接的总时间(小时)。使用用户名作为参数,再结合“-d”选项
  可心按每天进行统计。未指定用户名时,可以使用“-p”选项进行分别统计
  例 :统计teacher用户在每天的连接时间
  [root@localhost ~]# ac -d teacher
  may 11 total 0.00
  may 18 total 12.19
  例:分别统计各用户的总连接时间 。
  [root@localhost ~]# ac -p
  st01 0.00
  jerry 43.91
  3,程序日志
  在linux系统中,还有相当一部分应用程序并没有使用syslog服务来管理日志,而是由程序自己维护日志记录。
  例如httpd 网站服务程序使用两个日志文件 access_log 和error_log,一般存放在“/var/log/httpd/”目录中
  ,分别记录客户访问事件、错误事件;而ftp服务程序可心将与文件上传、下载事件相关的消息记录在xferlog文件中,由于不同
  应用程序的日志记录格式差别较大,并没有严格使用统一的格式
  若当前linux主机中安装了webmin等网页界面的管理工具,管理员可以通过浏览器,对系统中的各项日志文件进行选择查看
  总体来说,作为一名合格的系统管理人员,应该提高警惕,随时注意各种可疑的善,定期并随机地检查各种系统日志文件
  ,包括一般信息日志,网络连接日志,文件传输日志,以及用户登录日志记录等。在检查这些日志时,要注意是否有不合常理
  的时间或操作记录。例如以下一些不合理的现象:
  1, 用户在非常规的时间登录,或者用户登录系统的IP地址和以往不一样
  2, 用户登录失败的日志记录,尤其是那些一再连续尝试进入失败的日志记录
  3, 非法使用或不正当使用超级用户权限
  4, 无故或者非法重新启动各项网络服务的记录
  5, 不正常的日志记录,比如日志的残缺不全,或者是诸如wtmp这样的日志文件无故的缺少了中间记录文件
  另外,苦苦提醒管理人员注意的是:日志并不是完全可靠的,高明的黑客在入侵系统后,经常会打扫现场,所以需要综合
  综合运用以上的系统命令、全面、综合的进行审和检测,切忌断章取义,否则会做出错误的判断。
  日志管理策略
  1,日志备份和归档:日志文件也是重要的数据资料,同样需要进行备份和归档
  2,延长日志保存的期限:在存储空间富裕的情况下,日志数据保留的时间应尽可能长
  3,控制日志访问权限:日志数据中可能会包含各类敏感信息,如帐户、口令等,所以需要严格控制其访问权限
  4,集中管理日志:使用集中的日志服务器管理各服务器发送的日志记录,其好处在于方便对日志的收集、整理和分析
  ,杜绝意外的丢失、恶意篡改或删除等。
  1,设置日志服务器A
  在日志服务器A中,需要编辑syslog日志服务的启动参数配置文件“/etc/sysconfig/syslog”,将SYSLOGD_OPTIONS变量
  的内容改为“-r -x -m 0 ”即可,其中“-r ”选项表示允许接收其他主机发送过来的日志记录,“-x 选项表示不进行dns
  域名解析”“-m”表示记录日志时的时间标记间隔(设为0禁用该功能),这些信息可以通过查看syslogd程序的man手册页知道
  例:
  修改日志服务器 a r “/etc/sysconfig/syslog”文件,添加集中管理配置参数 “-r” ,并重启syslog
  [root@localhost ~]#vi /etc/sysconfig/syslog
  syslogd_options="-r -x -m 0"
  [root@localhost ~]#service syslog restart
  [root@localhost ~]#vi /etc/syslog.conf
  cron.*
  [root@localhost ~]#service syslog restart
  3,
  验证日志集中管理功能
  在客户机中B中执行“crontab -e” 命令,随便编写一条计划任务信息并保存退出,然后查看本机的中“/var/log/cron”日志
  文件,将发现没有任何新的记录。
  回到服务器a中查看 “/var/log/cron” 日志文件,将会发现有用户刚刚编辑并退出计划任务配置的事件记录(其中 173.17
  .17.11)表明了发送该消息的客户机的ip地址。
  [root@localhost ~]#tail -3 /var/log/cron
  may 23 16:54:43 173.17.17.11 crontab [14751] : (root) begin edit (root)
  系统启动类故障排除
  在linux系统的启动过程中,涉及到mbr主引导记录,grup启动菜单,系统初始化配轩文件,分区挂载配置文件
  等各方面 ,其中任何一个环节出现故障都可能会导致系统启动的失常,因此一定要注意做好相关文件的备份工作。
  1,mbr扇区故障
  mbr引导记录位于物理的第一个扇区(512个字节),该扇区又称为主引导扇区(MBR扇区),除了包含系统引导程序的部分数据
  以外,还包含了整个硬盘的分区表记录。当主引导扇区故障时,将可能无法引入引导菜单,或者因无法找到正确的分区位置而无法
  加载系统,通过该硬盘引导主机时很可能进入黑屏状态。
  下面将通过示例介绍对mbr扇区进行备份、破坏、修复的过程。
  1,备份mbr扇区数据
  使用dd命令将第1个硬盘(sda)的MBR扇区备份到第2个硬盘的sdb1分区中(挂载到/backup目录中)
  [root@localhost~]#mkdir /backup
  [root@localhost~]#mount /dev/sdb1 /backup
  [root@localhost~]#dd if=/dev/sda of=/backup/sda.mbr.bak bs=512 count=1
  2,模拟mbr扇区故障
  [root@localhost~]#dd if=/dev/zero of=/dev/sda bs=512 count=1
  完成上述操作后重启系统,将会出现“operating system not found”提示信息,表示无法找到可用的操作系统
  因此无法启动主机
  3,备份文件中恢复MBR扇区数据
  sh-3.1#fdisk -l /dev/sda
  disk /dev/sda:21.4Gb 214787889 bytes
  255 heads 63 sectors/track 2610 cylinders
  units=cylinders of 16065 * 512 =8225280 bytes
  disk /dev/sda doesn't contain a valid partiton table
  sh-3.1#mkdir /tmpdir
  sh-3.1#mount /dev/sdb1 /tmpdir //挂载带有备份文件的分区
  sh-3.1#dd if=/tempdir/sda.mbr.bak of=/dev/sda bs=512 count=1 //恢复备份数据
  2,GRUb 引导故障
  grub 是大多数linux系统默认使用的引导程序,可以通过启动菜菜的方式选择进入
  grub是大数linux默认使用的引导程序,可以通过启动菜单的方式选择进入不同的操作系统。当 “/boot/grub/grub.conf”
  配置文件丢失,或者关键配置出现错误,或者mbr记录中的引导程序遭到破坏时,linux主机启动后可能只会出现grub>
  如果在该提示符,可以进行编辑,通过输入对应的引导命令
  grub>root (hd0,0)
  grub>kernel (vmlinuz-2.6.18-8.e15 ro root=/dev/VolGroup00/logvol00 rhgb quiet)
  grub>initrd /initrd-2.6.18-8.e15.img
  grub>boot
  之后的启动过程与正常启动rhel5系统的过程是一模一样的,登录进入系统以后,需要找到配置文件“/boot/grub/grub.conf”
  并修复其中的错误,或者直接重建该文件。具体内容可以参考其他正常主机的同名文件。
  查看 grub.conf启动菜单配置文件主要内容
  [root@localhost~]#grep -v "^#" /boot/grub/grub.conf
  default=1
  timeout=5
  splashimage=(hd0,0)/grub/splash.xpm.gz
  hiddenmenu
  title red hat enterprise linux server (2.6.18-8.e15)
  root (hd0,0)
  kernel /vmlinuz-2.6.18-8.e15 ro root/dev/VolGroup00/LogVo100 rhgb quiet
  initrd /initrd-2.6.18-8.e15.img
  title:指定在启动菜单中显示的操作系统名称。
  root:指定包含内核等引导文件的/boot分区所在的位置。
  kernel:指定内核文件所在的位置,内核加载时权限为只读 “ro” ,并通过 “root=”指定根分区设备文件的位置
  initrd:指定启动内核所使用的临时系统镜像文件所在的位置。
  由于在“grub>”环境中使用的命令较为复杂,而且一般也难以记住相关的命令选项、内核加载参数等。因此用户可以采用另一种
  修复办法,同样使用RHEL5的安装光盘引导进入急救模式,如果分区表并未被破坏,则急救模式将会找到硬盘中的
  linux根分区,并将其挂载到光盘目录结构中的“/mnt/sysimage”文件夹中。
  确认待修复linux系统分区的挂载情况,并重建grub.conf文件
  sh-3.1#chroot /mnt/sysimage //切换到待修复的linux系统根环境
  sh-3.1#mount
  sh-3.1#vi /boot/grub/grub.conf
  sh-3.1#exit //退出chroot环境
  sh-3.1#exit // 退出sh-3.1 环境,系统会自动重启
  在上例中,若未执行“chroot /mnt/sysimage”命令,则重新建立的grub.conf 配置文件应该位于“/mnt/sysimage/boot
  /grub/grub.conf”
  如果是mbr扇区 中的引导程序出现损坏,可能在重建grub.conf配置文件后仍然无法成功启动系统,这时候可以在
  救援模式的shell环境中重新安装grub
  例: 进入待修复的linux系统根环境,重新将grub引导程序安装到第1块硬盘(sda)中的MRB扇区中
  sh-3.1#chroot /mnt/sysimage
  sh-3.1#grub-install /dev/sda
  sh-3.1#exit
  sh-3.1#exit
  上述方法同样适用于linux主机的重装windows系统,不覆盖linx系统,后导致linux系统无法启动的情况。因为对于
  使用双操作系统的主机,后安装的windows系统将使用自己的引导数据覆盖到MBR扇区中的记录,导致开机后不再出现
  grub菜单从而无法进入linx系统。如果后安装linux系统,grub程序将会自动识别硬盘中的windows系统并将其加载到
  grub菜单配置中
  执行 dd if=/dev/zero of=/dev/sda bs=446 count=1 命令可以模拟出对mbr扇区中的grub引导程序的破坏(注意先做好备份)
  但并不破坏分区表(实际上分区表保存在mbr扇区第447-510字节中)
  /etc/inittab文件丢失
  “/etc/inittab”文件是系统初始化进程init的配置文件,当该文件被误删除或者存在错误配置时,可能导致无法
  启动,丢失“/etc/inittab”文件后,启动时将会出现“init :no inittab file found”的错误提示信息。
  这类故障同样可以在rhel5安装光盘的急救模式下进行修复,如果是文件配置错误,则进行纠正或者从备份文件中进行恢复即可。默认
  情况下,如果未使用chroot命令切换环境,则需要修改的文件位于“/mnt/sysimage/etc/inittab”
  若inittab文件已经丢失,且没有可用的备份,则需要从rhel5的光盘目录中重新安装initscripts软件包
  例: 在急救模式中的“sh-3.1#”环境中挂载rhel5光盘设备,重新安装initscripts软件包,结合rpm命令 “--replacepkgs”
  选项用于替换现在的文件
  sh-3.1#chroot /mnt/sysimage
  sh-3.1#mount /dev/hdc /media/cdrom
  sh-3.1#rpm -ivh --replacepkgs /media/cdrom/Server/initscripts-8.45.14.el.i386.rpm
  在急救模式的shell环境中通常不再保留cdrom链接文件,而直接通过设备文件“/dev/hdc”使用光盘。安装完毕重启系统即可
  /etc/fstab文件丢失
  “/etc/fstab”配置文件决定了linux系统在启动后如何加载各分区,例如根分区“/” "/boot" 分区等,若这些分区无法挂载
  ,系统也将无法成功启动。丢失“/etc/fstab”文件后,启动时将会出现如下错误信息。
  waring:can't open /etc/fstab: no such file or directory
  mount: can't find / in /etc/fstab or /etc/mtab
  mounting local filesystem :warning: can't open /etc/fstab: no such file or directory
  同样使用rhel5 的安装光盘进入急救模式的shell环境中,由于缺少fstab文件,光盘系统将无法找到待修复linux分区,因此
  必须通过手动的方式查找并挂载根分区,然后重建fstab配置文件后重启系统即可。
  例: 在急救模式的shell环境中扫描逻辑卷组,激活逻辑卷,以便找到根分区设备,然后手动挂载根分区,并重建fstab配置文件
  sh-3.1#lvm vgscan
  reading all physical volumes. this may take a while
  found volume group "volgroup00" using metadata type lvm2
  sh-3.1#lvm vgchang -ay /dev/volgroup 00
  2 logical volumes in volume group "volgroup00" now active
  sh-3.1#mkdir /tmpdir
  sh-3.1#mount /dev/volgroup00/logvo100 /tmpdir //挂载根分区到/tmpdir目录
  sh-3.1#vi /tmpdir/etc/fstab //重新fatab配置文件,或直接复制备份的文件
  /dev/volgroup00/logvo100 ext3 defaults 1 1
  label=/boot /boot ext3 defaults 1 2
  破解超户密码:
  e 2 e
  空格1 回车 再按 “b”
  passwd reboot
  密码瞬间清除。
  通过急救模式重设root
  sh-3.2#chroot /mnt/sysimage
  sh-3.2#passwd root
  软件包类故障排除
  软件包类故障在linux系统中比较常见,例如,需要编译源码包程序时系统中没有安装gcc编译工具
  安装rpm软件包时有未解决的依赖关系,程序库文件或头文件的安装路径不正确等。软件包类故障产生的
  原因非常多,通常只需要根据相应的错误提示信息,确认安装好编译环境,找到所需要的依赖软件包
  下面主要介绍rpm数据库损坏和找不到“.so”文件的故障解决办法
  rpm数据库损坏
  rpm数据库损坏的故障并不多见,出现该故障的原因一般是由于经常强制关机,误删除运行中的文件,强制
  替换一些rpm包文件等。rpm数据库损坏后,在使用rpm工具查询或安装软件时,将无法正常进行。
  例:模拟rpm数据损坏故障,并验证错误信息。
  [root@localhost~]#echo "something" >> /var/lib/rpm/_db001
  [root@localhost~]#rpm -q httpd
  rpmdb: unable to join the environment
  error:db4 error(11) frome dbenv->open:资源暂时不可用
  error:cannot open packages indeing db3
  error:cannot open packages database in /var/lib/rpm
  package httpd is not installed
  rpm作为linux系统中的软件包管理机制,维护着一份独立的文件数据库,用于存储在系统中安装的rpm包信息。
  当数据文件损坏时,将导致不能使用rpm命令或yum命令来查询、安装、升级、删除rpm类软件包,解决该故障一般只需要执行
  “rpm --rebuilddb”命令,重建数据库即可
  例:清除损坏的rpm数据文件 ,并重建数据库信息
  [root@localhost~]#rm -rf /var/lib/rpm/_db.00*
  [root@localhost~]#rpm --rebuilddb
  缺少*.so类文件
  在通过源码编译的方式安装软件包时,程序的可执行文件、函数库、配置文件等一般会默认安装到“/usr/local”
  目录下的相应位置(例如 /usr/local/mysql/bin 、/usr/local/mysql/lib)以便与系统程序的相关目录区别开来。
  *.so文件就如同windows系统中的.dll文件一样,是库文件。一个程序的正常安装和运行需要特定库文件的支持。由于类似
  “/usr/local/mysql/lib”的目录并不包括在linux系统的默认库文件路径中,当安装其他软件包时,如果需要用到这些目录中的动
  态链接库文件,将会无法找到,从而出现缺少“*.so”文件错误信息。
  在rhel5系统中,配置文件“/etc/ld.so.conf”记录了动态链接库的默认搜索路径,当需要添加新的库文件搜索路径时
  ,则必须在该文件中进行相应的修改,修改完毕后执行ldconfig 命令,重新读取新的配置信息。
  例:将“/usr/locl/mysql/lib/mysql”目录添加到系统的库文件搜索路径中
  [root@localhost~]#vi /etc/ld.so.conf //在文件未尾添加一行记录
  /usr/local/mysql/lib/mysql
  [root@localhost~]#ldconfig
  当安装新的应用程序时,如果提示缺少“*.so”文件,应首先使用find命令查找系统中是否存在对应的文件,若不存在则表
  示拽住望你加的依赖软件 并没有安装,需要先获取相应的软件包并安装才行,若在系统中已经存在对应的“*.so”文件
  ,则可以通过上述获取ld.so.conf文件的方法来解决库文件搜索的问题。
  文件系统、磁盘类故障
  文件系统及磁盘中存储的数据的价值是无法估量的,管理员的工作职责之一就是要确保数据的安全。由于磁盘属于
  易损耗品,无法预估它什么时候会损坏不,最好的办法就是建立完善的备份机制。当系统提示文件系统或磁盘类故障时,处理一定
  要慎重,本节将介绍一些文件系统、磁盘类故障的修复方法 。
  修复文件系统
  linux主机经常因为非正常关机、突然断电、设备数据读写异常等原因导致文件系统的破坏。比较常见的是超级块(super-block)
  损坏,超极块是文件系统的核心“档案”,它记录了该文件系统的类型、大小、空闲磁盘块等信息。当文件系统的超级块数据
  损坏时,linux将无法识别该文件系统,也就是无法挂载使用。
  当通过“/etc/fstab”配置文件自动加载的文件系统出现错误时,linux系统开机后一般会自动进行检测,并提示用户需要进行文件
  的修复操作。例如“/dev/sdb1”分区的超级块出现错误时,启动后系统将提示“give root password for maintenance”
  如下
  /dev/sdb1:
  the superblock could not be read or does not describe a correct ext2
  filesystem. If the device is valid and it really contains an ext3
  filesystem (and not swap or ufs or something else ),then the superblock
  is corrupt,qand you might try running e2fsck with an alternate superblock:
  e2fsck -b 8193
  /boot:clean,38/26104 files, 19522/104388 blocks
  ***an error occurred during the file system check.
  ***dropping you to a shell; the system will reboot
  ***when you leve the shell
  give root password for maintenance
  (or type control -D to continue):
  这里只需输入root用户的密码,即可进入到一个临时的shell环境,在这里用户可以对出现的错误的文件系统进行修复。修复一般
  的文件系统错误可心使用fsck命令,结合“-t”选项指定文件系统类型,结合“-y”选项对发现的问题自动回答“yes”
  。需要注意的是,如果该文件系统遭受破坏的情况很严重,则修复完毕后可能仍然会丢失一些数据,因此清慎重决定是否
  进行修复(必要时也可以称用dd命令将损坏的分区进行备份)
  例:使用fsck命令修复位于“/dev/sdb1”分区中的ext3文件系统。
  sh-3.1#fsck -yt ext3 dev/sdb1
  sh-3.1#exit //退出临时的shell 环境后将自动重启。
  注意:执行“dd if=/dev/zero of=/dev/sdb7 bs=512 count=4”命令可以模拟出对“/dev/sdb7”文件系统数据的破坏(注意先做
  好备份)
  磁盘资源耗尽故障
  显而易见,当一个文件系统的磁盘空间耗尽以后,将无法继续在该分区中创建新的文件数据,从而导致故障出现
  例如,当根分区“/”磁盘空间耗尽以后,将可能导致部分程序乃整个系统无法正常启动或运行,因为一些临时性的
  运行文件将无法建立。
  当根分区磁盘空间不足而无法启动进入linux系统时,可以通过rhel5的安装光盘进行急救模式,转移或清理掉根分区中战胜大量空
  间的文件,具体过程不再赘述。使用dd命令可以模拟出根分区耗尽的故障。例如
  dd if=/dev/zero of=/somefile bs=1M count=99999 命令
  除此以外,在ext3文件系统中i节点作为文件的索引节点,决定了该磁中文件数据的存储位置,当一个文件系统被创建以后,其
  i节点数就已经固定下来了,从而在该文件能够使用的文件数量也就固定下来了。如果用户在该分区中创建了巨量的细小
  文件(耗尽i节点),将可能出现这种情况,虽然该分区中仍然有大量的剩余磁盘空间,但是用户却无法建立新的文件了。
  1、模拟i节点耗尽故障
  (1)以一个24M的ext3文件系统为例("/dve/sdb7")将其挂载到“/data”目录下,并使用带“-i”选项的df命令确认该分区
  i节点的使用情况。
  [root@localhost~]#mkdir /data
  [root@localhost~]#mount /dev/sdb7 /data
  [root@localhost~]#df -i /dev/sdb7
  文件系统 inode(i) 已用 可用 已用% 挂载点
  /dev/sdb7 6024 11 6013 1% /data
  编写一个循环创建空文件的脚本程序,运行该脚本直至耗尽sdb7分区中i节点
  [root@localhost~]#vi killinode.sh //编写耗尽i节点的脚本
  #!/bin/bash
  i=1
  while [ $i -le 6013 ]
  do
  touch /dev/file$i
  let i++
  done
  [root@localhost~]#sh killinode.sh
  (3)i节点耗尽以后,再次创建新的文件时,将会出现“设备上没有空间”的错误信息,但是使用df命令可以查看到该分区
  中还有可用 剩余空间,只是i节点数已经用完。
  [root@localhost~]#touch /data/newfile
  touch :无法触碰 “/data/newfile”:设备上没有空间
  [root@localhost~]#df -hT /dev/sdb7
  文件系统 类型 容量 已用 可用 已用 % 挂载点
  /dev/sdb7 ext3 23M 1.4M 21M 7% /data
  2,修复i节点耗尽故障
  理解i节点耗尽故障的根结以后,问题就比较好解决了。只需要找出该分区中占有用大量i节点的细小文件,并进行
  转移或者删除即可,对于许多用户公用的文件系统,为相关用户设置磁盘限额(包括文件数、磁盘空间两方面)
  例:查找“/data”目录中的空文件并将其删除
  [root@localhost~]#rm -rf `find /data -empty -a -type f`
  无法卸载已经挂载的设备
  在linux系统中,通过umount命令卸载光驱等设备时,有时候会出现“device is busy”的提示信息,而无法卸载,这表示“
  设备正忙”,很可能是由于用户或者其他程序正在使用该设备中的资源而造成的,系统基于保护性考虑,将禁直接卸载设备
  例:当用户的当前工作路径位于光盘中的目录时,将无法卸载该光盘设备
  [root@localhost~]#mount /dev/cdrom /media/cdrom
  mount:block device /dev/cdrom is write-protected,mounting read-only
  [root@localhost~]#cd /media/cdrom
  [root@localhost cdrom]#umount /media/cdrom
  umount: /media/cdrom: device is busy
  umount:/media/cdrom:device is busy
  由于umount命令并不会告知是哪个用户、程序正在使用记住该设备的资源,因此当前登录的用户数量较多、进程结构复杂的情
  况下会很难定位正在使用该目录的进程,使用fuser命令可以帮助解决这个问题
  fuser命令用于找出正在使用某个设备或文件/目录的用户、进程等相关信息。通过“-m”选项可以指定相应的文件或目录
  ,“-v”选项可以显示详细信息,如果使用“-k”选项,还可以强制关闭正在使用的该文件或目录的进程(当然,也可以使用
  kill命令终止该进程)
  例: 查看正在使用的“/media/cdrom”目录的用户、进程等相关信息,然后关闭正在使用该目录的进程。
  [root@localhost mnt]#fuser -mv /media/cdrom
  user pid access command
  /media/cdrom: root 3297 ..c.. bash
  [root@localhost~]#fuser -k /media/cdrom
  检测硬盘坏道
  磁盘坏道分为逻辑坏道与物理坏道两种,前者主要是由于软件操作不当造成的,可以使用软件修复;而后者是物理性损坏
  ,只能通过更改磁盘分区或扇区的占用位置来进行改善,排除掉包含有坏块的磁盘空间,当磁盘出现以下现象时,
  有可能是磁盘出现坏道,需要进行检测和修复
  读取磁盘中的数据中,磁盘设备发出异常声响。
  访问磁盘中的某个文件时,反复读取且出错,提示文件损坏
  对于新建立的分区无法完成格式化。
  系统使用廖磁盘时频繁死机
  硬盘出现坏道后, 如果不及时更换或进行技术处理,坏道就会越来越多,并可能造成频繁死机和数据丢失的结果
  ,所以必要时应该对磁盘进行定期检测,检查是否存在坏道。
  在linux系统中,检测磁盘坏道情况可以使用badblocks命令进行,在创建文件系统的过程中也可以结合mkfs命令的“-c”
  选项进行检测。使用badblocks命令时,“-s”选项用于显示进度信息,“-v”选项用于显示详情。
  例: 使用mkfs命令格式化“/dev/sdb7 ”分区,并结合“-c”选项进行坏块检测
  [root@localhost~]#mkfs -t ext3 -c /dev/sdb7 | grep "bad"
  checking for bad blocks(read-only test):done
  pass completed, 0 bad blocks found
  在长期使用计算机的过程中,文件系统和磁盘的故障现象很难完全避免,对于此类故障的修复处理需要十分谨慎,如果
  操作不慎可能会加重数据破坏的程度。当发现文件系统类故障时,应及时记录故障现象,停止系统中的应用服务,必要时
  应立即关闭系统防止数据遭受更大的破坏。有条件时应尽可能采用磁盘克隆技术,并在克隆盘上进行恢复操作。
  查看系统性能状况
  在linux主机的日常维护中,除了需要查看各种日志记录、进程状况、磁盘使用率等数据以外,通过查看系统的cpu负载
  、内存使用率、磁盘i/o负载等性能善,也有助于管理员进行故障分析和排除。能否快速发现和解决系统性能类故障的关键在于
  ,管理员是否充分了解服务器软硬件和网络环境,是否对其进行了长期的持续不间断的性能监控。
  在后续的安全课和中,将会学生同时监测多台linux主机性能的管理工具,本节只简单介绍如何查看cpu负载、内存
  使用率和磁盘 i/o性能基本信息
  查看cpu负载
  例:使用uptime命令显示主机运行时间、登录的用户数、cpu平均负载等信息
  [root@localhost~]#uptime
  05:33:11 up 7:22 2users load average: 0.04,0.09,0.08
  在上述信息中显示当前主机的时间为:05:33:11 ,系统已经运行了7小时22分钟,当前有两个用户登录到系统;
  最近1分钟,5分钟、15分钟内系统平均负载值分别为0.04 0,09 0.08
  由于uptime 最多只能记录15分钟内的平均负载,如果要得到一整天的cpu负载值,可以编写相应的shell脚本程序进行记录
  例:编写shell脚本程序 cpuload.rec ,用于记录每天的cpu负载值,并结合计划任务每15分钟采集一次数据。
  [root@localhost~]#vi /opt/cupload.rec
  #!/bin/bash
  rq=`date+%F` //其中“%F”等同于“%Y-%m-%d”
  tm=`date+%H:%M`
  loadav=`uptime | cut -d "," -f 5 ` //只记录过去 15分钟的负载值
  echo "$rq $tm $loadav" >>/var/log/cpuload.$rq.log
  [root@localhost ~]#crontab -e
  */15 * * * * /opt/cupload.rec
  对于记录下来的负载值数据,可以导入到其他的绘图工具(如excel)中进行处理,这样可以直观地显示一天中各种时段的cpu
  负载情况。
  2,查看 “/proc/loadavg”文件
  通过 “/proc/loadavg”文件,可以查看到从系统启动以后到当前时刻的累计cpu负载情况,输出信息依次为“1分钟,5,15
  分钟平均负载 正在运行的进程数 / 进程总数 及最近运行的进程 pid号”
  例:通过“/proc/ladavg”文件查看cpu负载情况
  [root@localhost~]#cat /proc/loadavg
  0.15 0.03 0.01 4/84 25697
  查看内存使用情况
  1,使用vmstat 命令
  vmstat命令是用于报告系统虚拟存储使用情况的工具,同时也会输出内存使用信息。输出的信息中包括进程、内存、虚拟内存
  磁盘i/o 系统中断数 cpu时间等数据
  例: 使用vmstat 命令可以查看系统当前的内存使用情况
  [root@localhost~]#vmstat
  proc-------memory----------swap----------io---------system----------cpu--------------
  r b swpd free buff cache si so bi bo in cs us sy id wa st
  0 0 0 304280 27084 145844 0 0 29 8 1007 20 0 2 98 0 0
  其中“memory”一栏下的信息表示和内存相关的统计数据:swpd对应已使用的虚拟内存的值(kb),free对应于空闲的物理
  内存值,buff对应于作为缓冲区使用的物理内存值,cashe对应于作为高速缓存的物理内存值。
  2,使用free命令
  free
  命令主要用于显示系统的物理内存和交换空间的使用情况,与vmstat命令的输出相比,其显示的结果更加直观、易读。结合
  “-m"选项可以mb为单位显示相关的数据。
  例: 使用free命令查看当前系统中内存、交换空间的使用情况。
  [root@localhost~]#free
  total used free shared buffers cashed
  mem 515600 211320 304280 0 27264 145852
  - /+ buffers/cache : 38204 477396
  swap: 1048568 0 1048568
  磁盘i/o性能监控
  磁盘 i/o(输入/输出)性能是衡量计算机总体性能的一个重要指标,使用iostat命令可以查看系统中磁盘的i/o性能统计信息
  ,该命令工具由syssat软件包提供,需要总rhel5的安装光盘中安装
  例:从rhel5的光盘目录中安装sysstat软件包,并使用iostat命令查看磁盘i/o性能统计信息。
  [root@localhost~]#rpm -ivh /media/cdrom/Server/sysstat-7.0.0-3.e15.i386.rpm
  [root@localhost~]#iostat
  linux-2.6.18-8.e15 (localhost.localdomain) 2009年05月24日
  avg-cpu: %user %nice %system %iowait %steal %idle
  0.20 0.00 1.86 0.36 0.00 97.59
  device: tps blk_read/s blk_wrtn/s blk_read blk_wrtn
  sda 1.31 31.58 13.12 334358 138948
  sdb 0.87 24.97 4.07 264364 43052
  dm-0 2.44 31.23 13.12 330642 138944
  dm-1 0.01 0.09 0.00 912 0
  hdc 0.02 0.14 0.00 1492 0
  从上述输出信息同样也可以看到cpu的平均负载信息,关于磁盘i/o性能的各字段的含义如下。
  device: 块设备名
  tps: 设备每秒进行传输的数量(每秒的I/O请求)
  blk_read/s, blk_wrtn/s:设备每秒读写数据块的数量。
  blk_read,blk_wrtn: 自动系统启动以来读写的块设备的总量。
  在实际过程中,还可以结合不同的命令选项使输出的信息更易读。例如,结合“-d ”选项只输出磁盘数据
  结合“-k”“-m”选项用于以kb mb为单位输出统计信息,结合“-t”选项可以同时输出时间,最后还可以
  直接指定刷新信息的时间间隔(秒)。
  例:以kb为单位输出磁盘的i/o性能统计数据,同时显示当前的时间值,并且每5秒钟刷新一次(按ctrl+C键终止)
  [root@localhost~]#iostat -dkt 5
  linux 2.6.18-8.e15(localhost.localdomain) 2009年05月24日
  time: 16时17分49秒
  device tps kb_read/s kb_wrtn/s kb_read kb_wrtn
  sda 1.28 15.12 6.54 167183 72314
  另外,sysstat软件包还提供了一个mpstat命令工具,用于统计进程负载,可以辅助管理员对主机中的进程状况进行了解
  例: 使用mpstat命令工具查看与进程相关的统计数据
  [root@localhost~]#mpstat
  linux 2.6.18-8.e15 (localhost.localdomain) 2009年05月25日
  05时18分11秒 cpu %user %nice %sys %iowait %irq %soft %steal %idle intr/s
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics