在做项目的过程中,总会用到一些Linux边边角角的知识,很多时候用了以后不用就忘了。感觉记录一下还是很有必要。所以决定记一下,以后自己查起来也方便。

一、linux下挂载一个新的磁盘

1.磁盘格式化
     mkfs.ext3 /dev/(磁盘名称)

2.分区
     fdisk /dev/(磁盘名称)

3.使磁盘立即生效
partprobe

4.挂载磁盘

mount -t ext3 /dev/(磁盘名称)    /mnt/disk (挂载目录)

至于以上命令的详细使用方法,可以  man 一下,或搜索一下都有很详细的说明

 

二、一次杀死多个进程

      kill -9 $(ps -ef|grep programname|grep -v grep|awk '{print $2}')

 

三、segment prot 解决办法,在装了Linux SE 安全机制后,运行程序时有时会遇到这样的问题,例如

/emv/bin/perfCollector 192.168.0.201
/emv_bak/bin/perfCollector: error while loading shared libraries: /emv/lib/rrdlib/librrd_th.so.2: cannot restore segment prot after reloc: Permission denied

解决办法

编辑/etc/sysconfig/selinux,找到:

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
SELINUX=enforcing
如果SELINUX已经是 SELINUX=disabled,那么就不用改了,否则就把SELINUX=enforcing 注释掉,新加一行:

SELINUX=disabled
保存,退出。

如果你碰到其他类似提示:
cannot restore segment prot after reloc: Permission denied
哪应该是SELinux的问题,可以考虑把它关闭。

 

四、查找或删除指定天数以前的文件

1.查找3天以前的文件

         find /root/test/sqlfiles/  -mtime +3 

2.删除3天以前修改的文件

        find /root/test/sqlfiles/  -mtime +3  -exec rm -rf {}  \;

如果是 -3 就是最近3天修改的文件

 

五、通过crontab 定时检查程序是否还在运行,如果不在就启动

#!/bin/sh

start_process()
{
        mypid=`ps -ef | grep -w ProgramName | grep -v ProgramName.log |grep -v vi | grep -v grep | awk '{print $2}'`
 
        if [ "x$mypid" = "x" ]; then
                echo "starting ProgramName  !"
                /path/ProgramName &

                sleep 1

                mypid=mypid=`ps -ef | grep -w ProgramName | grep -v ProgramName.log |grep -v vi | grep -v grep | awk '{print $2}'`
              if [ "x$mypid" = "x" ]; then
                        echo "start failed!"
                else
                        echo "start successful!"
                fi
        else
                echo "ProgramName  is running!"
        fi
}
start_process

 

把这个shell加入crontab 就可以。关于crontab的使用,可以看man手册,或搜索一下即可

 

六 linux  下安装 sybase12.5_x 总是报  Segmentation fault 

为新项目搭建环境,一个sybase数据库折腾了一天,每次都是  Segmentation fault ,Server 'SYBASE' was not created.

最后在集成部老大的帮助下,总算是搞定了。原因入下:

只要在glibc 2.4以上版本安装Sybase ASE 12.5.x以及15就会出现上述问题。

解决的办法是:设置环境变量LD_POINTER_GUARD。

在Redhat上:export LD_POINTER_GUARD=0;

在Suse 10上:export LD_POINTER_GUARD=1。

 LD_POINTER_GUARD是派什么用的,搜索到的说法是:LD_POINTER_是用以在不同版本的glibc之间传递内存出问题的指示器。这个问题将会在以后得到解决,而不需要再开关LD_POINTER_GUARD。

然后重新建库,如还报错,手工建库,即可。
$<path of your_SYBASR_HOME>/bin/srvbuild -r sqlsrv.res

例如:/opt/sybase/sdb/ASE-12_5/bin/srvbuild -r /opt/sybase/sdb/ASE-12_5/sqlsrv.res


JVM not found
安装的时候 -is:javahome <路径>就行了,例如

./setup -console -is:javahome /opt/sybase/sdc/sybase_setup/JVM

 

七、ct_connect(): protocol specific layer: external error: The attempt to connect to the server failed.错误处理

sybase安装好,参数配置完毕后,在本机用isql登录数据库没问题,可在windows系统下用客户端连接不上,在另一台linux机子上用isql也连接不上报错:ct_connect(): protocol specific layer: external error: The attempt to connect to the server failed,想起了interfaces文件没有改,把

SYBASE

       master tcp ether emv5server 6666
        query tcp ether emv5server 6666
 

改成

SYBASE

       master tcp ether 192.168.0.181 6666
        query tcp ether 192.168.0.181  6666

后还是连接不上,不知道是什么问题,无奈之下想起了RHLS5的防火墙问题,于是用命令:/etc/init.d/iptables stop 关闭防火墙。

这下还真就连上了。

用命令 netstat -tlnp 查看端口状态发现:tcp        0      0 192.168.0.181:6666          0.0.0.0:*                   LISTEN      4319/dataserver 

再用命令 /etc/init.d/iptables status 看防火强的状态,发现没有接受这个端口连接。原来发往这个tcp端口的数据都被防火墙给过滤了。

防火墙配置文件:/etc/sysconfig/iptables

查看防火墙状态:
/etc/init.d/iptables status

暂时关闭防火墙:
/etc/init.d/iptables stop

重启iptables:
/etc/init.d/iptables restart

禁止防火墙在系统启动时启动
/sbin/chkconfig --level 2345 iptables off 

 

八、让sybase在Linux启动时自启动

1.写自启动脚本 start.syb.sh

#!/bin/sh
su - sybase << EOF
./sybase_start.sh 
EOF

把这个脚本放到目录 /etc/rc.d/init.d 里

2.切换到sybase 用户,在sybase目录下新建脚本 sybase_start.sh 
#!/bin/sh
 
PrgPID=`ps -ef|grep -w dataserver|grep -v grep|awk '{print $2}'`
if [ "x$PrgPID" != "x"  ]; then
        echo "sybase is running"
        exit
else
        echo "now starting sybase"
        cd /opt/sybase/sdb/ASE-12_5/install/
        ./startserver &
fi

这个脚本才是真正的启动sybase的脚本

3.在 /etc/rc.d/目录下有 rc0.d  rc1.d  rc2.d  rc3.d  rc4.d  rc5.d  rc6.d 这几个目录,rc 后面的数字代表着不同的运行级别,意思就是不同运行级别的自启动程序放在不同的rc目录里。关于运行级别可以在 /etc/inittab文件里查到,比如我的机器是  id:3:initdefault: 表示启动后的系统是多用户的命令模式。为了要让sybase自动,所以我要把脚本start.syb.sh软连接到这个目录下。进入 rc3.d后,执行命令

ln -s  /etc/init.d/star_syb.sh ./S100star_syb.sh          这样就可以了。关于连接名字前为什么要有S100原因如下:

在各个运行级别的子目录中,都建立有到/etc/rc.d/init.d子目录中命令脚本程序的符号链接,但是,这些符号链接并不使用命令脚本程序在 /etc/rc.d/init.d子目录中原来的名字。如果命令脚本程序是用来启动一个服务的,其符号链接的名字就以字母S打头;如果命令脚本程序是用来关闭一个服务的,其符号链接的名字就以字母K打头。
  许多情况下,这些命令脚本程序的执行顺序都很重要。如果没有先配置网络接口,就没有办法使用DNS服务解析主机名!为了安排它们的执行顺序,在字母S 或者K的后面紧跟着一个两位数字,数值小的在数值大的前面执行。比如:/etc/rc.d/rc3.d/S50inet就会在 /etc/rc.d/rc3.d/S55named之前执行(S50inet配置网络设置,S55named启动DNS服务器)。

我的机器里S开头的正好表到了99,所以新加的只能是100开始了。

 

九、sybase 推出脚本

      切换的sybase 用,在sybase目录下编写脚本 sybase_stop.sh,脚本名可以随便取

#!/bin/sh
PrgPID=`ps -ef|grep dataserver|grep -v grep|awk '{print $2}'`
 
if [ "x$PrgPID" = "x" ]; then
        echo "sybase wasn't running"
        exit;
fi
 
echo "PID is : $PrgPID"
isql -Usa -P<<EOF #此处很重要,表名接下来的命令是输在登录后的窗口里
shutdown
go
EOF