存档

2010年3月10日 的存档,文章数:2

本帖子转自:echoaix  嘟嘟之家  http://blog.chinaunix.net/u/10212/showart.php?id=88834

向echoaix这位sybase 高手表示感谢。

转下面内容的原因是作个记录方便以后来查看如何在unix下修改文件内容。在windows下以十六进制形式修改文件内的数据很简单,可以用 UltraEdit这个强大的工具。我编出来了工具能够实现从sybase数据设备文件中提取数据和翻译解析sybase日志设备文件内容,这个过程中 UE提供了莫大的帮助。我编写的工具跟UE没有关系。但是,有时候对sybase设备文件做一个小小的修改的时候,我喜欢用UE。

但是,在unix环境下的sybase设备文件该如何修改呢?总不能每次都ftp下载下来,用windows下的Ultraedit改好了后再上传到服务器吧?

这样做太麻烦。

幸运的是,早有高手提供了解决的方法!厉害!

下面的代码我没有完全看明白,主要是没unix写过shell的原因。

大概意思是:向sh脚本传递3个参数,用指定数据替换指定文件中的相应偏移的相同字节的数据。

用od定位出被修改的偏移位置。然后用echo向dd传入数据,dd会处理这个文件。

至于如何将4个字节的数据转化到数组里的那段代码,我没有看懂!

-----------------------------------------------------------------------------

环境 :
iBM aix 4.3和sybase11.9 只有这环境
master设备/dev/rlvsybmaster1
前面还是一样看page内容:
dbcc traceon(3604)
go
dbcc tablealloc(sysdatabases) 或  select first from sysindexes where id = object_id("sysdatabases" and indid=1\\找到数据页(pageno)
go
dbcc page(master,pageno,1,0)  \\从硬盘上拿这页内容详细内容
go
master的如下:
Offset 266 -
3256210a:  02000001 00010000 80000001 000008a1  ................
3256211a:  00000000 00000000 00009179 00fe9caa  ...........y....
3256212a:  0005adda 00120034 6d617374 65728000  .......4master..
3256213a:  03302e28                             .0.(.
用od命令定位(od命令真好)
#od -H /dev/lvsybmaster1 |grep '02000001 00010000 80000001 000008a1'
报找不到,郁闷,仔细看看dbcc page用法1(print page header, data rows and row offset table), 2 (print page header and hex dump of data page) 。改用dbcc page(master,pageno,2,0)
结果如下:不只这些,择了master的
32562110:  00008000 00010000 08a10000 00000000  ................
32562120:  00000000 917900fe 9caa0005 adda0012  .....y..........
32562130:  00346d61 73746572 80000330 2e280201  .4master...0.(..
32562140:  00030001 00000000 00010000 01e00000  ................
32562150:  00000000 00000000 917900fd acd60013  .........y......
32562160:  9866001e 00336d6f 64656c80 00032f2d  .f...3model.../-
原来是顺序不同,怪不得grep找不到,再来:
#od -H /dev/lvsybmaster1 |grep '00008000 00010000 08a10000 00000000' 结果
2024420  00008000 00010000 08a10000 00000000  找到,注意这的偏移量是8进制的
找到如何改呢?知道应该用dd,叨咕半天,不行,上网求助 ,在liveunix看到“炸鸡”高人的帖子,给了一个sh如下
cat chvgid.sh
#!/usr/bin/ksh
vgid=$1
disk=$2

set -A a `echo $vgid|\
awk '{
for (f=1; f <= length($0); f=f+2) {
print "ibase=16\nobase=8\n"toupper(substr($0,f,2))
}
}'|bc 2>/dev/null`
/usr/bin/echo "\0"${a[0]}"\0"${a[1]}"\0"${a[2]}"\0"${a[3]}"\c"|dd bs=1 seek=3600 of=/dev/$disk
原来他是要直接改VGID的信息,看来能改的东西真不少。
到现在这个sh我还是看不很明白,但是用没问题,自己改了改如下
#cat chfile.sh
#!/usr/bin/ksh
dstatus=$1
filename=$2
offset=$3

set -A a `echo $dstatus|\
awk '{
for (f=1; f <= length($0); f=f+2) {
print "ibase=16\nobase=8\n"toupper(substr($0,f,2))
}
}'|bc 2>/dev/null`

/usr/bin/echo "\0"${a[0]}"\0"${a[1]}"\0"${a[2]}"\0"${a[3]}"\c"|dd bs=1 seek=$offset of=$filename conv=notrunc
加了$3偏移量,还有注意加conv=notrunc,要不你在修改点后的数据可能都没了。这的偏移量可是10进制的
od -Ad -H /dev/lvsybmaster1 |grep '00008000 00010000 08a10000 00000000' 找10进制偏移
0534800  00008000 00010000 08a10000 00000000
停sybase
改master设备
#chfile.sh 00000000 /dev/lvsybmaster1 534800
4+0 records in.
4+0 records out.
就是要把00008000 改为00000000
重启sybase ok

默认情况下.Solaris10安装完成后.启动是cde界面.但有时用xmanager登录时始终无法建立连接. 如果确认不是防火墙等方面的原因.可以用如下方法解决

1. 关闭默认的cde服务
svcadm disable cde-login
用ps-ef|grep dtlogin 应该看不到dtlogin进程了
2. 进入/etc/X11/gdm
编辑gdm.conf文件(也有可能是这两个文件/usr/share/gdm/defaults.conf 和/etc/X11/gdm/custom.conf) 编辑如下2个地方

找到[xdmcp]字段.
将Enable=flase改为true
将Port=177前的注释取消

然后保存退出.
3.ps-ef|grep gdm 确认目前没有gdm进程.如有杀之
4. 启动gdm服务

# svcs -a|grep gdm
disabled       Aug_07   svc:/application/gdm2-login:default
# svcadm enable svc:/application/gdm2-login:default

然后在xmanager里建立新连接. 这样就可以登录了. 在登录界面的左上角选择cde.熟悉的cde界面就又回来了.

转载2 from: 彬彬有理 http://blog.chinaunix.net/u2/77786/showart_1161371.html -------------------------------------------------------------------------------------------------------------------------------------

前几天有台v890的服务器,没有显卡,装完solaris10系统(完整分发安装)后不能使用xmanager进连接,被折腾了两天,之前上网查说安装时使用 带oem的完整分发安装, 不过没有试,现把可能管用的方法写出来希望对大家有帮助。
1、solaris 10默认开启dxmcp,xmanger采用默认设置即可。对于这种情况应首先检查pc机到服务器间的网络是否有问题,防火墙是否开启了177端口,如可以的话关掉防火墙,仍不能解决问题可使pc 机与服务器直接相连试试。
2、设置系统自动进入桌面
#/usr/dt/bin/dtconfig -e  启用自动进入桌面
/usr/dt/bin/dtconfig -reset 配置资源重新装载
3.检查dtlogin进程是否启动,并且使用177端口
# ps -ef | grep dtlogin
root 101252 100995 0 15:09:01 ? 0:00 /usr/dt/bin/dtlogin -daemon -udpPort 0
root 101420 101419 0 15:13:47 pts/3 0:00 grep dtlogin
这里系统缺省监听udp port 0,就无法监听到177端口上的XDMCP请求
解决方案如下:
# /etc/init.d/dtlogin stop 关掉服务
# /usr/dt/bin/dtlogin -daemon &   换daemon启动方式或者显式指定dtlogin -udpPort 177
修改服务参数使其启动时自动使用177端口:
# svccfg
svc:> select application/graphical-login/cde-login
svc:/application/graphical-login/cde-login> setprop dtlogin/args = "\ -udpPort 177"
svc:/application/graphical-login/cde-login> quit
之后重起dtlogin 服务  # svcadm restart cde-login