supersun's space

  • 增大字号
  • 默认文字大小
  • 减小字号

删除perl中模块脚本

脚本来自CPAN中的FAQ

将以下内容保存为rmmod.pl

#!/usr/bin/perl -w

use ExtUtils::Packlist;
use ExtUtils::Installed;

$ARGV[0] or die "Usage: $0 Module::Name\n";

my $mod = $ARGV[0];

my $inst = ExtUtils::Installed->new();

foreach my $item (sort($inst->files($mod))) {
print "removing $item\n";
unlink $item;
}

my $packfile = $inst->packlist($mod)->packlist_file();
print "removing $packfile\n";
unlink $packfile;

 

用法:

perl rmmod.pl Spreadsheet::WriteExcel

 

[转]在AIX上安装RPM格式软件包

原文地址:http://hi.baidu.com/heredo/blog/item/43e155dd130eb9e876c63898.html

1.从Linux Application Toolbox CD安装Redhat Package Manager - rpm.rte
2.安装RPM格式软件
#rpm -ivh fileset_name
例如安装unzip 5.42 for AIX 4.3.3版本,得到的rpm包为unzip-5.42-2.aix4.3.ppc.rpm,则执行命令:
#rpm -ivh unzip-5.42-2.aix4.3.ppc.rpm
unzip                       ##################################################
其中#表示安装进度。如果正常结束没有任何错误提示,那么表明安装成功。
3.检查按装结果
#rpm -q fileset_name
例如上例,查询unzip 5.42版本是否正确安装:
#rpm -q unzip-5.42-2
unzip-5.42-2
表明该包已经正确安装,如果显示:
#rpm -q unzip-5.42-2
package unzip-5.42-2 is not installe d
则表明没有正确安装。
请注意:包名和文件名并不相同。
4.反安装/删除已经安装的文件。
#rpm -e fileset_name
例如上例,删除已经安装的unzip 5.42,则需要执行命令:
#rpm -e unzip-5.42-2
如果没有任何提示,则表明删除成功,如果有任何错误,rpm将提示错误信息,例如:
# rpm -e unzip-5.42-2
error: package unzip-5.42-2 is not installed
表明该包在系统上不存在。

5.查看一下这个软件包里有什么内容,假设这个文件是:unzip-5.42-2.rpm,我们可以用这条命令查看:
rpm -qpi unzip-5.42-2.rpm
系统将会列出这个软件包的详细资料,包括含有多少个文件、各文件名称、文件大小、创建时间、编译日期等信息。

6.用下面这条命令查看软件包将会在系统里安装哪些部分,以方便我们的选择:
rpm -qpl unzip-5.42-2.rpm

7.在安装过程中,若系统提示此软件已安装过或因其他原因无法继续安装,但若我们确实想执行安装命令,可以在 -ivh后加一参数“-replacepkgs”:
rpm -ivh -replacepkgs Linux-1.4-6.i368.rpm

8.当每个软件包安装后,安装文件都会到RPM数据库中“报到”,所以,我们要查询某个已安装软件的属性时,只需到此数据库中查找即可。注意:此时的查询命令不同于1和7介绍的查询,这种方法只适用于已安装过的软件包!命令格式:
rpm -参数

9.在使用过程中,难免会碰到我们不认识的文件,在Windows下我们可以用“开始/查找”菜单快速判断某个文件属于哪个文件夹,在Linux中,下面这条命令行可以帮助我们快速判定某个文件属于哪个软件包:
rpm -qf

 

在AIX中使用ISO文件

在AIX系统中加载ISO文件是一件麻烦的事,从网上查了一下别人的做法,大体思路如下:

1、创建一个比ISO文件大的逻辑卷;
2、使用dd将iso文件的数据复制到逻辑卷;
3、使用mount加载逻缉卷。

使用dd复制数据花的时间比较长,按上面的思路,示例如下:

datavg的信息如下:

# lsvg datavg        
VOLUME GROUP:       datavg                   VG IDENTIFIER:  000c78cc00004c000000012567d527a9
VG STATE:           active                   PP SIZE:        16 megabyte(s)
VG PERMISSION:      read/write               TOTAL PPs:      2170 (34720 megabytes)
MAX LVs:            256                      FREE PPs:       1104 (17664 megabytes)
LVs:                4                        USED PPs:       1066 (17056 megabytes)
OPEN LVs:           3                        QUORUM:         2
TOTAL PVs:          1                        VG DESCRIPTORS: 2
STALE PVs:          0                        STALE PPs:      0
ACTIVE PVs:         1                        AUTO ON:        yes
MAX PPs per VG:     32512                                    
MAX PPs per PV:     3048                     MAX PVs:        10
LTG size (Dynamic): 256 kilobyte(s)          AUTO SYNC:      no
HOT SPARE:          no                       BB POLICY:      relocatable

创建逻缉卷:

datavg的pp大小为16M,此处创建的逻缉卷名为isolv,大小为16MB*50=800MB
# mklv -y isolv datavg 50

将ISO文件的数据写到逻辑卷isolv上
#dd  if=/data/AIX53TooboxLinuxApp.iso of=/dev/isolv

将逻缉卷挂载到/iso目录下
#mount -v cdrfs -o ro /dev/isolv /iso

参考文章

aix中如何mount iso文件:http://blog.sina.com.cn/s/blog_4a5fe822010006xi.html
AIX下有了一个软件的ISO文件,如何安装:http://bbs.chinaunix.net/thread-1037848-1-1.html

最后更新于: 2010-01-21 14:41
 

[转]Oops的诞生

原文:http://blog.chinaunix.net/u1/34654/showart_267006.html

常在河边走,哪能不湿鞋。用Linux,总有死机的时候,如果运气好,会看到一些所谓"Oops"信息(在屏幕上或系统日志中),比如:

Unable to handle kernel paging request at virtual address f899b670
printing eip:
c01de48c
*pde = 00737067
Oops: 0002 [#1]
Modules linked in: bluesmoke_e752x bluesmoke_mc md5 ipv6 parport_pc lp parport nls_cp936 vfat fat dm_mod button battery asus_acpi ac joydev yenta_socket pcmcia_core uhci_hcd ehci_hcd snd_intel8x0 snd_ac97_codec snd_pcm_oss snd_mixer_oss snd_pcm snd_timer snd_page_alloc snd_mpu401_uart snd_rawmidi snd_seq_device snd soundcore ipw2200 ieee80211 ieee80211_crypt sk98lin ext3 jbd
CPU: 0
EIP: 0060:[] Not tainted VLI
EFLAGS: 00210286 (2.6.9-11.21AXKProbes)
EIP is at kobject_add+0x83/0xd7
eax: c038db78 ebx: c038db04 ecx: f899b670 edx: f8a4a630
esi: c038db4c edi: f8a4a614 ebp: c038db80 esp: d7568f2c
ds: 007b es: 007b ss: 0068
Process modprobe (pid: 8227, threadinfo=d7568000 task=f4ea99b0)
Stack: f8a4a614 ffffffea f8a4a5e4 00000000 c01de4f9 f8a4a614 c038db00 c024a1d4
f8a4a5c0 f8a4a5e4 f8a4a5f4 d7568000 c024a661 1d244b3c 00000000 0000000a
c032421b 00000000 00000000 00000015 00000014 00000016 f89ddb34 f8a4a5c0
Call Trace:
[] kobject_register+0x19/0x39
[] bus_add_driver+0x36/0x97
[] driver_register+0x82/0x89
[] pci_register_driver+0x85/0xa1
[] init_module+0xa/0x14 [bluesmoke_e752x]
[] sys_init_module+0x1ec/0x323
[] syscall_call+0x7/0xb
Code: 85 d2 0f 85 06 04 00 00 85 ed 75 0d 8b 47 28 83 c0 10 e8 82 01 00 00 89 c5 8b 47 28 8d 57 1c 83 c0 08 89 47 1c 8b 48 04 89 50 04 11 89 4a 04 8b 47 28 8b 18 8d 4b 48 89 c8 ba ff ff 00 00 0f


Oops 可以看成是内核级的Segmentation Fault。应用程序如果进行了非法内存访问或执行了非法指令,会得到Segfault信号,一般的行为是coredump,应用程序也可以自己截获 Segfault信号,自行处理。如果内核自己犯了这样的错误,则会打出Oops信息。

有不少文章说明如何理解这些Oops (http://pczou.blogchina.com/545558.html),这里只想解释一下它所产生的过程(以2.6系列内核为例):

首先是处理硬件发出的内存访问异常(fault),有些异常是无辜的(比如demand-paging),而有些则是内核的错误所致。

1. do_page_fault() arch/i386/mm/fault.c

如果是内核进行了非法访问,do_page_fault()会先打出EIP, PDE等信息,例如:

Unable to handle kernel paging request at virtual address f899b670
printing eip:
c01de48c
*pde = 00737067

然后调用 die("Oops", regs, error_code);

这之后,如果系统还活着(至少要满足两个条件:1. 在进程上下文 2. 没有设置panic_on_oops),会杀死当前进程。然后继续运行,好像什么事情都没有发生一样。不过,这样的好事不经常发生,发生了也不会太持久。

2. do_page_fault() -> die() arch/i386/kernel/traps.c

die() 首先打出一行:

Oops: 0002 [#1]

其中0002代表错误码 (读错误、发生在内核空间),#1代表Oops发生次数。

* error_code:
*      bit 0 == 0 means no page found, 1 means protection fault
*      bit 1 == 0 means read, 1 means write
*      bit 2 == 0 means kernel, 1 means user-mode


然后,调用 show_registers(regs) 输出寄存器、当前进程、堆栈、指令代码等信息:

Modules linked in: bluesmoke_e752x bluesmoke_mc md5 ipv6 parport_pc lp parport nls_cp936 vfat fat dm_mod button battery asus_acpi ac joydev yenta_socket pcmcia_core uhci_hcd ehci_hcd snd_intel8x0 snd_ac97_codec snd_pcm_oss snd_mixer_oss snd_pcm snd_timer snd_page_alloc snd_mpu401_uart snd_rawmidi snd_seq_device snd soundcore ipw2200 ieee80211 ieee80211_crypt sk98lin ext3 jbd
CPU: 0
EIP: 0060:[] Not tainted VLI
EFLAGS: 00210286 (2.6.9-11.21AXKProbes)
EIP is at kobject_add+0x83/0xd7
eax: c038db78 ebx: c038db04 ecx: f899b670 edx: f8a4a630
esi: c038db4c edi: f8a4a614 ebp: c038db80 esp: d7568f2c
ds: 007b es: 007b ss: 0068
Process modprobe (pid: 8227, threadinfo=d7568000 task=f4ea99b0)
Stack: f8a4a614 ffffffea f8a4a5e4 00000000 c01de4f9 f8a4a614 c038db00 c024a1d4
f8a4a5c0 f8a4a5e4 f8a4a5f4 d7568000 c024a661 1d244b3c 00000000 0000000a
c032421b 00000000 00000000 00000015 00000014 00000016 f89ddb34 f8a4a5c0
Call Trace:
[] kobject_register+0x19/0x39
[] bus_add_driver+0x36/0x97
[] driver_register+0x82/0x89
[] pci_register_driver+0x85/0xa1
[] init_module+0xa/0x14 [bluesmoke_e752x]
[] sys_init_module+0x1ec/0x323
[] syscall_call+0x7/0xb
Code: 85 d2 0f 85 06 04 00 00 85 ed 75 0d 8b 47 28 83 c0 10 e8 82 01 00 00 89 c5 8b 47 28 8d 57 1c 83 c0 08 89 47 1c 8b 48 04 89 50 04 11 89 4a 04 8b 47 28 8b 18 8d 4b 48 89 c8 ba ff ff 00 00 0f


如果是在中断上下文,则直接调用panic()。如果是在进程上下文,则根据panic_on_oops的设置选择是否panic()。panic_on_oops的缺省设置是"0",即在Oops发生时不会进行panic()操作。可以通过sysctl进行设置:
sysctl -w kernel.panic_on_oops=1

有panic_on_oops 这样的设置,说明Oops不一定导致系统死亡,也不一定需要重新启动系统。正如用户程序segfault时可能还能坚持运行一样。不过Oops一旦发生, 系统已经有些不正常了,即使表面上可能还正常,不过可能有些锁已经被占用而无法释放,很快会导致系统死锁。

那么,panic()是什么呢?panic()和用户空间的abort()类似,简单清理一下,就可以放心去死(reboot)了。

3. do_page_fault() -> die() -> panic()

panic会根据 kernel.panic 的设置决定 reboot 前的延时,如果 kernel.panic=0,则打开中断,陷入死循环。反之,则在几秒之后,reboot系统。


可以看出虽然都是死,但死因不同,死亡时的表现更是五花八门。常见的死因有:

  • 非法内存访问 (比如访问地址0)
  • 非法指令
有时候核心成心发出非法指令,比如BUG() (include/asm/bug.h) 中所做的,以引起Oops。类似用户程序中调用assert()。

死亡发生的地点也很关键,直接导致了死亡的不同表现,比如:
  • 进程上下文
  • 中断上下文
在中断上下文中,由于中断是关闭的,而且往往会占用一些锁,这种情况下一般除了死,没有什么别的办法。

在进程上下文中要自由一些,如果运气好的话,可以苟延残喘一段时间。

 

相关链接 http://pczou.bokee.com/3915699.html

 

[转]Auto reboot the linux server when kernel panic

系统内核panic的时候系统自动重启

设置kernel系统参数:
vi /etc/sysctl.conf
#增加此行,以保证此设置持续有效;
#含义是当系统遇到kernel panic时,系统在30秒后reboot;
kernel.panic = 30

#修改此参数,,以保证下一次当系统遇到kernel panic后有效;
#以后无需再修改,默认从上面的设置中加载;
vi /proc/sys/kernel/panic
echo 30 > panic


另外Redhat提供的可导致kernel panic的方式;
执行这几行代码,你的linux 系统就crash了;

cd /proc/sys/kernel
echo 1 > sysrq
cd /proc
echo  c > sysrq-trigger

 


页 1 总共 4