卸载rpm包遭遇error: specifies multiple packages
Google订阅 | 鲜果榜 | Technorati | Delicious | Twitter | Taobao DBA | 招聘 | 合租 | 管理 | 阿里妈妈

卸载rpm包遭遇error: specifies multiple packages

准备在Redhat Linux系统上安装MySQL5.1,先卸载自带的低版本MySQL,结果不知怎么搞的,同一个package出现了两次,版本也都是一样的:

rpm -qa | grep mysql
mysqlclient10-3.23.58-4.RHEL4.1
mysql-4.1.20-2.RHEL4.1
mysql-4.1.20-2.RHEL4.1
mysqlclient10-3.23.58-4.RHEL4.1

尝试卸载:

rpm -e mysqlclient10-3.23.58-4.RHEL4.1
error: "mysqlclient10-3.23.58-4.RHEL4.1" specifies multiple packages

通过man rpm,发现–allmatches应该可以解决这个问题:

–allmatches
Remove all versions of the package which match PACKAGE_NAME. Normally an error is issued if PACKAGE_NAME matches
multiple packages.

rpm -e --allmatches mysqlclient10-3.23.58-4.RHEL4.1
rpm -e --allmatches mysql-4.1.20-2.RHEL4.1
warning: /etc/my.cnf saved as /etc/my.cnf.rpmsave

ok,系统自带的旧版本MySQL卸载完成。

Linux中如何将文件dump成16进制值

linux中有多种方式可以将文件dump成16进制显示,也可以将16进制值再反向成文件。

$ hexdump test.txt
0000000 524f 2d41 3030 3036 0a30 524f 2d41 3030
0000010 3630 0a30                             
0000014

$ od -x test.txt
0000000 524f 2d41 3030 3036 0a30 524f 2d41 3030
0000020 3630 0a30
0000024

$ xxd test.txt
0000000: 4f52 412d 3030 3630 300a 4f52 412d 3030  ORA-00600.ORA-00
0000010: 3036 300a                     060.

注意到hexdumpod出来的结果都是按实际存储的字节序,因为基于x86的linux是little-endian的,也就是高低字节是颠倒了的。但是xxd的结果是将字节序调整过了的。而IBM的Power CPU是big-endian的,所以在AIX上od的结果如下:

$od -x test.txt
0000000  4f52 412d 3030 3630 300a 4f52 412d 3030
0000020  3036 300a
0000024

xxd还可以实现从16进制反向生成文件,只需要加上-r选现即可。

xxd test.txt | xxd -r
ORA-00600
ORA-00060

$ echo 0000000: 4f52 412d 3030 3630 300a 4f52 412d 3030 | xxd -r
ORA-00600
ORA-00

但是要注意xxd接受的是big-endian格式的16进制值,如果输入的是little-endian的,则生成的文件字符(包括换行符)是两两颠倒的。

$ od -x test.txt | xxd -r
RO-A0006
0RO-A0060
0

vi编辑器中可以使用:%!xxd 调用xxd来将文件转换成16机制编辑模式,编辑完成后再调用:%!xxd -r转换文件模式,从而使得vi具有16进制编辑的功能,:%!其实就是调用外部shell命令,需要注意的是xxd的字节序是big-endian的,不要搞错了。

如果你的Linux系统中找不到xxd命令,那么检查下是否有安装vim-common

rpm -qa | grep vim
vim-enhanced-6.3.046-0.40E.7
vim-X11-6.3.046-0.40E.7
vim-minimal-6.3.046-0.40E.7
vim-common-6.3.046-0.40E.7

Redhat Linux如何设置用户默认属性

和Oracle的profile类似,在Redhat Linux新建一个用户或组,有很多默认继承的属性,比如密码过期时间,密码最短长度,UID/GID的范围等。这些属性是通过文件/etc/login.defs获得的,所以可以通过修改该文件改变后续所有新建用户的默认设置。

一些主要的属性包括:

MAIL_DIR        /var/spool/mail

PASS_MAX_DAYS   99999
PASS_MIN_DAYS   0
PASS_MIN_LEN    5
PASS_WARN_AGE   7

UID_MIN                   500
UID_MAX                 60000

GID_MIN                   500
GID_MAX                 60000

CREATE_HOME     yes

更多的设置及其详细说明,参考man login.defs

AIX虚拟内存管理机制

AIX采用了基于分页的虚拟内存机制。页面一般都是统一大小的(默认页面大小4k,当然也可以启用大页面内存支持,POWER5 芯片支持四种虚拟内存页面的大小:4KB64KB16MB 16GB),这样可以简化整个的管理算法。页面是基于整个虚拟内存地址空间分割的,一个页面最终可能映射到物理内存,也可能映射到磁盘的交换区(paging space)上。很明显,内存中的页面访问速度要快得多,但是内存大小有限,某些页面将不得不被挤出内存。淘汰页面的算法一般都是基于LRU算法的,通过ps -k可以看到AIX有一个lrud的内核守护进程,就是AIX分页替换守护进程。

AIX将所有的内存页面分成两大类型:

工作存储分页的内容都是易失性的,在磁盘上没有对应的永久存储文件数据,诸如进程数据/堆栈/共享内存/内核数据等,都是这一类的。而永久存储分页其实就是文件数据。分成这两种类型,是因为从内存中淘汰页面时,需要做不同的处理。对于工作存储分页,只要释放掉对应的内存页面(其实就是修改某些标志位)就可以了。而永久存储分页,则需要判断是否有数据修改,没有修改的话,和工作存储分页的处理一样,直接标志回收即可,如果有修改,则需要将相应的修改数据写回磁盘。

而根据缓存的文件的不同,永久存储分页又分成两种,一种就是新的jfs2文件系统和NFS文件系统的文件缓存,叫做客户端分页(Client pages)。而原来老的jfs文件系统的文件缓存页面,就是非客户端页面(Non-client pages)

上面对于分页的分类法,是根据缓存的数据类型,需要在淘汰时选择不同的处理方式。而AIX在选择哪些页面需要淘汰的时候,却是按照另外一种标准的。根据这个标准,可以将所有分页分成另外两种类型:

首先,所有的工作存储分页都是计算型分页,也就是说,Oracle的PGA/SGA等都是属于计算型分页的。而永久存储分页,则根据缓存的文件的类型,如果是可执行文件,则对应的分页是计算型的,如果是数据文件,则是非计算型的,同一个文件对应的页面,要么全部是计算型,要么全部是非计算型的。显然的,为了提供Oracle等应用的性能,假如需要淘汰页面,优先应当交换非计算型页面。

[继续阅读全文]