Liunx环境压缩

普通压缩


在liunx环境中最常用的压缩应该就是tar。 所以只对tar做下记录。当然还有很多的压缩方式可用。

1
tar -zcvf filename.tar.gz filename ...

解压

1
tar -zxvf filename.tar.gz  path

加密压缩


我是很注重隐私的,所以有时候,对一些文件压缩的同时,还需要加密。+_+

压缩加密

1
tar -zcf  - filename |openssl des3 -salt -k password | dd of=filename.des3

此命令对filename文件进行加码压缩 生成filename.des3加密压缩文件, password 为加密的密码

解压解密

1
dd if=filename.des3 |openssl des3 -d -k password | tar zxf -

注意命令最后面的“-” 它将释放所有文件, -k password 可以没有,没有时在解压时会提示输入密码

Liunx修改时区

如果你用的是去服务器,并且服务器还不再国内,那么就可能出现服务器上时区或时间不对的情况。

为此,我们需要做如下的修改:

  1. 调整时区:
1
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  1. 修改系统时间
1
ntpdate us.pool.ntp.org

没有安装ntpdate的需要先安装。

再次查看时间 command date,就发现时间已经正确了。

检测浏览器支持Html5特性

前言

因为html5是各种新特性的集合,所以如果我们只说某个旧浏览器支持或不支持HTML5。 这个说没有任何意义,存在一定的误解,
应该是某个旧浏览器是否支持HTML5的某些特性,例如:canvas、audio、web worker…等等。

检测HTML5特性的几种方式

  • 判断在全局的对象(例如:window)中是否存在某属性

    (例如:Worker , FileReader , DataView , Blob ….)

  • 创建某个元素,判断该元素是否存在某属性

    (例如 : var el = document.createElement("canvas"); if(el.getContext){})

  • 创建某个元素,判断该元素的方法是否存在,并且调用它检查它的返回值。
1
2
3
4
5
6
function supports_h264_baseline_video() {
if (!supports_video()) { return false; }
var v = document.createElement("video");
return v.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"');
}
if(!supprots_h264_baseline_video()){return false;}
  • 创建某个元素,设置某个属性的值,判断是否支持这个属性的值

    例如 : input元素
    默认创建出来的input, type属性是’text’ ,我们知道的type 还有 输入密码的<input type="password">、完成表单提交的<input type="submit">。 但在HTML5中又提供了很多其他的type。

    这里, 我们就可以使用 设置input的type属性,来判断当前浏览器是否支持HTML5的type。

1
2
3
4
5
6
function checkInputColor(){
var myinput = document.createElement("input");
myinput,setAttribute("type","color");
return myinput.type !="text";
}
if(!checkInputColor()){return false;}

最后 ,如果你对上面这几种的检测方式都不感兴趣。你可以使用 modernizr 一个用来检测HTML5、CSS3的js库。

例如:你想知道你用的浏览器是否支持canvas API ,你就可以这样:

1
2
3
4
5
if (Modernizr.canvas) {
// let's draw some shapes!
} else {
// no native canvas support available :(
}

本文参考:《HTML5: Up and Running》

Liunx之vim使用

分屏多文件启动Vim

使用大写的参数O来垂直分屏。
使用参数n来表示分几屏:

1
vim -On file1 file2 ...

使用小写的o参数来水平分屏:

1
vim -on file1 file2 ...

关闭分屏

关闭当前窗口
Ctrl+w c 或者 :q

在只有一个窗口时, Ctrl+w c将不起作用 ,只能用:q或者Ctrl+w q来关闭窗口

如果我们需要看同一文件的两个部分的内容, 文件又很长, 这时我们需要再打开一个相同的文件 ,我们可以使用Ctrl+w sCtrl+w v(一个是上下分屏,另一个是左右分屏)命令实现

当我们已经打开一个文件后,才想到需要查看另一文件 ,我们就可以使用如下命令:

垂直分屏: :sp filename

水平分屏::vsp filename

updating

JavaScript精粹之函数(一)

在javascript中函数真的是神通广大的很。它除了可以作为一般的函数使用外,我们还可以当对象的方法使用,也可以像这样`function MyClass(){}`,看这名字你们应该知道这是什么了,对的,函数也可以构造成类来使用。对于不同的声明方式,函数的调用也是不一样的。

继续阅读全文 »

用Shell脚本发布系统

脚本是给懒人准备的,越懒的人越需要脚本,我就是那个传说中的懒人,这样别人在死命搞代码的时候,我就可以喝喝茶,看看书了。→_→

用途

做了项目总要发布吧。一个项目也不会就发布一次,发布上去后给用户测试,发现了这儿那儿的问题,然后就没日没夜的改(这要有多少BUG啊),改完后,重新在发布上去,告诉用户一声BUG改了,用户说:嗯。很好很好。过了个几天,用户又开始说,这个不好,改改。 好吧。改吧!! 改完后再发布到服务器 。 这一来一去的,发布好麻烦啊。每次都要做以下几件事:

  • 上传项目到服务器
  • 停止服务
  • 查看服务是否正常停止,没有正常停止还需要手动杀进程
  • 备份当前的系统版本
  • 拷贝刚上传上去的项目到指定目录
  • 重新启动服务
  • 重启后还有看下控制台确保正常启动了

看吧。 每次重新发布都要这样做,烦不烦啊。
如果只需要一步两步就搞定,那应该是多么爽的一件事啊。

于是乎,嘿嘿, 有下接下来的代码。。。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
 #!/bin/sh
#设定要拷贝的原文件名称,默认在用户的活动目录下
fileName='/root/assessment.war'
#默认超时时间设置为30秒
overtime=30

if [ $# -ge 1 ]; then
fileName=$1
fi

if [ $# -ge 2 ]; then
overtime=$2
fi

#fileName='/root/install.log'
#判断文件是否存在
if [ ! -f "$fileName" ]; then
echo "文件:$fileName 不存在,请先上传$fileName..."
exit 0
fi

if [ -z $TOMCAT_HOME ]; then
echo "TOMCAT_HOME环境变量不存在,请先设置tomcat环境变量..."
exit 0
fi

#获得当前tomcat的进程数
psid=`ps -ef|grep "tomcat"|grep -v "grep"|wc -l`

if [ $psid -ge 1 ]; then
$TOMCAT_HOME/bin/./shutdown.sh
echo "正在停止服务,请稍等......"
#用循环判断服务是否已经停止,设置了60秒超时
count=0
while [ $count -lt $overtime ]
do
psid=`ps -ef|grep "tomcat"|grep -v "grep"|wc -l`
if [ $psid -ge 1 ]; then
let count++
else
let "count = $overtime + 1"
break
fi
sleep 1
done
#如果count 60 表示超时 , 61 表示服务已停止
if [ $count -eq $overtime ]; then
echo "无法停止服务,正在使用kill -9 命令强行杀死进程"
psid=`ps -ef | grep tomcat/ | grep -v grep | awk '{print $2}'`
kill -9 $psid
# exit 0
fi
echo "tomcat服务已停止"
fi

echo "开始备份webapps下ROOT.war ......"
if [ -e "$TOMCAT_HOME/webapps/ROOT.war" ]; then
mv $TOMCAT_HOME/webapps/ROOT.war $TOMCAT_HOME/webapps/ROOT.war.bak
fi

echo "删除webapps下ROOT ......."
rm -fr $TOMCAT_HOME/webapps/ROOT

echo "拷贝新的$fileName进入webapps,并改名为ROOT.war "
#mv $fileName $TOMCAT_HOME/webapps/ROOT.war
cp $fileName $TOMCAT_HOME/webapps/ROOT.war
echo "完成拷贝....."

echo "开始重启tomcat服务 ....."
$TOMCAT_HOME/bin/./startup.sh

#
tail -f $TOMCAT_HOME/logs/catalina.out

exit 0

使用

有了这脚本,你重新发布项目,只需如下几步:

  • 远程连接到liunx服务器,就在用户目录下上传项目包
  • 执行该脚本 比如脚本名叫autoPublish.sh , ./autoPublish.sh ~/projectName

后面跟的第一个参数是上传上去的项目名称 ,第二个参数为停止项服务超时时间(可以不管)。
如果不想每次都输入第一个参数 ,手动改下脚本的默认项目地址就行。

只需要两步,搞定发布,是不是感觉舒服了。

嘿嘿。 还不赶紧,试着发个项目上去呗。

RedHat上静默安装Oracle11g

去年的十月前后,公司为某某大学后勤部门开发了一套干部考核系统,我也参与了开发。后来公司用此作为案例,接到了一些其他学校的考核系统的开发项目。原来系统是用mysql作为数据库,如今接到的一所学校的考核系统,要求用oracle数据库。所以公司要求我来为客户那边安装oracle数据库。之前我对mysql的安装有所了解,而对liunx上oracle安装从来没接触过。通过两天的不断的找资料后,最终安装成功,其中也多亏了同事的指点,让安装变得顺利许多。

在此,我写下此文,希望对大家有所帮助。

Oracle安装前,依赖包的检测

这个就不用多说什么了,直接的上代码:

1
2
3
4
rpm -q binutils	compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel \
elfutils-libelf-devel expat gcc gcc-c++ glibc glibc-common glibc-devel\
glibc-headers libaio libaio-devel libgcc libstdc++ libstdc++-devel make\
pdksh sysstat unixODBC unixODBC-devel | grep "not installed"

执行以上代码后,如果显示某个包名,说明该包没有被安装。
安装以上依赖包需要系统的安装盘或系统镜像。

用户那边把系统的镜像文件copy到了系统根目录上,我通过mount挂载了镜像:

1
mount -o loop -t iso9660 /ISONAME.iso /media/cdrom/

然后在/media/cdrom里面就有相应的依赖包,我是在里面的Server目录下面
找到了所有的依赖包。

安装依赖需要执行以下命令:

1
rpm -ivh <依赖包名>

安装依赖包是个麻烦的过程,我是一个个安装的,而且在安装某个包的时候有时会提示你先安装其他的包,非常的麻烦。不知道有没有什么简单方便的方式进行操作。如果有谁有更好的方法,希望能评论告诉
我。

没有图形,就静默吧

不管图形还是静默都需要做的事

  • 创建群组
1
2
groupadd oinstall 
groupadd dba
  • 创建oracle用户并使用其属于刚创建的群组
1
useradd –m –g oinstall –G dba oracle
  • 检查oracle是否属于组oinstall 和 dba

    id oracle

    正确的显示:uid=1001(oracle) gid=1000(oinstall) groups=1001(dba)

  • 给oracle设置密码

    passwd oracle

  • 创建安装oracle的目录并赋相应的权限

1
2
3
mkdir -p /u01/oracle
chown -R oracle:oinstall /u01
chmod -R 775 /u01
  • 内核参数的配置(网上寻找到的,这一步不是很明白其作用),使用vivim(其他编辑器也行)修改 /ect/sysctl.conf文件,一般都有,没有就创建一个,对它做如下的修改或添加:

    fs.file-max = 6815744

    fs.aio-max-nr = 1048576

    kernel.shmall = 2097152

    kernel.shmmax = 2147483648

    kernel.shmmni = 4096

    kernel.sem = 250 32000 100 128

    net.ipv4.ip_local_port_range = 9000 65500

    net.core.rmem_default = 4194304

    net.core.rmem_max = 4194304

    net.core.wmem_default = 262144

    net.core.wmem_max = 1048576

    输入命令:sysctl -p使其立即生效

  • 配置oracle用户的环境变量

    切换到oracle用户下:su -l oracle,然后输入:vim ~/.bash_profile,在其中添加如下环境变量

    1
    2
    3
    4
    export ORACLE_HOME=/u01/oracle/product/11.2/db_1
    export ORACLE_BASE=/u01/oracle
    export ORACLE_SID=orcl
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib

    source ~/.bash_profile使其立即生效

Oracle的下载,解压,安装

下载oracle并进行解压: 这里提供一下我使用的oracle, 点击此处下载
创建目录mkdir /oinstall,我把下载下来的oracle放到了/oinstall下,再通过以下命令解压:

unzip p10404530_112030_Linux-x86-64_1of7.zip
unzip p10404530_112030_Linux-x86-64_2of7.zip

由于静默(silent)安装oracle,需要配置静默响应文件,在/oinstall/database/response下用三个文件,其中一个文件就是用来安装使用,复制一份出来修改其内容。 这是一种方法,若不配置响应文件,则需要设置响应变量。我用了第二种方式 ,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
./runInstaller -silent -force \
FROM_LOCATION=/oinstall/database/stage/products.xml \
oracle.install.option=INSTALL_DB_SWONLY \
UNIX_GROUP_NAME=oinstall \
INVENTORY_LOCATION=/home/oracle/oraInventory \
ORACLE_HOME=/u01/oracle/product/11.2/db_1 \
ORACLE_HOME_NAME="OraDb11g_Home1" \
ORACLE_BASE=/u01/oracle \
oracle.install.db.InstallEdition=EE \
oracle.install.db.isCustomInstall=false \
oracle.install.db.DBA_GROUP=dba \
oracle.install.db.OPER_GROUP=dba \
DECLINE_SECURITY_UPDATES=true

为了方便使用,通过vim create_db.sh,添加上述代码,给该文档权限修改为可执行。

执行需要数分钟的时间,结束时,提示安装成功并且会给出两个文件的路径,分别执行这两个文件。

静默安装监听

复制/oinstall/database/responsenetca.rsp

1
2
3
4
cd /oinstall/database/response 
cp netca.rsp ../myNetca.rsp
cd ..
vim myNetca.rsp

vim MyNetca.rsp修改文件,以下为需要修改的项目:

1
2
3
4
5
NSTALL_TYPE=""custom"" 安装的类型
LISTENER_NUMBER=1 监听器数量
LISTENER_NAMES={"LISTENER"} 监听器的名称列表
LISTENER_PROTOCOLS={"TCP;1521"} 监听器使用的通讯协议列表
LISTENER_START=""LISTENER"" 监听器启动的名称

然后运行:

1
$ORACLE_HOME/bin/netca /silent /responsefile /oinstall/database/response/myNetca.rsp

运行结束

创建oracle实例库

复制/oinstall/database/responsedbca.rsp

1
2
3
4
cd /oinstall/database/response
cp dbca.rsp ../myDbca.rsp
cd ..
vim myDbca.rsp

vim myDbca.rsp修改文件,以下为需要修改的项目:

1
2
3
4
5
6
7
8
9
10
11
# RESPONSEFILE_VERSION = "11.2.0" 
# OPERATION_TYPE = "createDatabase"
# [CREATEDATABASE]
# GDBNAME = "orcl"
# SID = "orcl"
# TEMPLATENAME = "General_Purpose.dbc"
#
# [CONFIGUREDATABASE]
# EMCONFIGURATION = "LOCAL"
# SYSMANPASSWORD = "123456"
# DBSNMPPASSWORD = "123456"

然后执行:

1
$ORACLE_HOME/bin/dbca -silent -responsefile /oinstall/database/response/dbca.rsp

到这里,ORACLE的安装差不多了。但我用本机访问服务器上oracle时,连接不上,出现监听超时的错误,以为是服务器上防火墙没有开放1521端口,但查看后发现1521端口已经加上了。经过几翻折腾才知道,是连接服务器的网络上1521端口未开放,问题总算解决了。

问题总会一个接一个的,在向表插入数据时,发现中文存在无法识别的情况。
在网上找了一堆的资料,最后通过阅读这篇博客解决了问题。

主要原因是:当前的系统的语言环境和环境变量,与oracle的字符集不一致。

可以通过以下步骤修改

1
2
su -l oracle
vim ~/.bash_profile

文件bash_profile中修改或添加以下内容:

1
NLS_LANG = AMERICAN _ AMERICA. ZHS16GBK

然后修改sudo vim /etc/sysconfig/i18n

1
2
3
LANG="en_US.UTF-8"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en"
SYSFONT="latarcyrheb-sun16"

查看oracle的字符集:

1
2
sqlplus / as sysdba
select userenv('language') from dual;

总结

Oracle在Liunx下安装是件麻烦的事,由于是没有图形界面使用静默安装,貌似不会出错停止,还会继续安装,然后就一堆的问题,oracle没法用还得重新安装,这种情况下oracle安装后的Log是一定要看的,看看在安装过程中有什么错误信息。但也发现,oracle静默安装的速度确实是相当的快。与我在WIN上安装Oracle速度根本不是一个级别的。