smplayer字幕乱码播放完一个文件名字就会变成符号

test1.下载Array Networks提供的客户端程序 array_vpnc.binsudo&apt-get&install&libc6-i386&#64位系统也是这个包wget&http://q.pnq.cc/uploads/array_vpnc.binchmod&a+x&array_vpnc.bin2.下载这个小脚本到同个目录#下载辅助脚本wget http://q.pnq.cc/uploads/vpn-for-common.sh -O vpn.sh#里面会包含重要信息,我们不想别人随便访问 chmod 700 vpn.sh 3.修改vpn.sh中的配置,将vpn_host、user、key修改为你的配置 vpn_host=your_vpn_serveruser=your_user_namekey=your_static_passwd #密? ?中不变的部分
使用方法: ./vpn.sh
然后根据提示输入,当看到这个提示时,就说明成功了:
array_vpnc: VPN TUNNEL SUCCESSFUL!
public&class&PerformanceTest&{&public&static&void&main(String[]&args){&&&&&long&time1&=&System.currentTimeMillis();&&&&&Long&sum=0L;&&&&&for(long&i=0;i&Integer.MAX_VALUE;i++){&&&&&&&&&sum+=i;&&&&&}&&&&&System.out.println(sum);&&&&&long&time2&=&System.currentTimeMillis();&&&&&System.out.println((time2&-&time1)/1000&+&"秒。");&}}上面的代码执行了28秒public&class&PerformanceTest&{&public&static&void&main(String[]&args){&&&&&long&time1&=&System.currentTimeMillis();&&&&&long&sum=0L;&&&&&for(long&i=0;i&Integer.MAX_VALUE;i++){&&&&&&&&&sum+=i;&&&&&}&&&&&System.out.println(sum);&&&&&long&time2&=&System.currentTimeMillis();&&&&&System.out.println((time2&-&time1)/1000&+&"秒。");&}} 上面的代码执行了7秒第一段代码构造了大约2的31次放的Long 实例
如果你用的SVNKit, 找到以下目录并删除.keyring文件. [eclipsehome ]/"configuration"/org.eclipse .core.runtime
&context-param&的作用:web.xml的配置中&context-param&配置作用1.
启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点:
&listener&&/listener& 和
&context-param&&/context-param& 2.紧接着,容器创建一个ServletContext(上下文),这个WEB项目所有部分都将共享这个上下文. 3.容器将&context-param&&/context-param&转化为键值对,并交给ServletContext. 4.容器创建&listener&&/listener&中的类实例,即创建监听. 5.在监听中会有contextInitialized(ServletContextEvent args)初始化方法,在这个方法中获得ServletContext = ServletContextEvent.getServletContext();context-param的值 = ServletContext.getInitParameter("context-param的键"); 6.得到这个context-param的值之后,你就可以做一些操作了.注意,这个时候你的WEB项目还没有完全启动完成.这个动作会比所有的Servlet都要早.换句话说,这个时候,你对&context-param&中的键值做的操作,将在你的WEB项目完全启动之前被执行. 7.举例.你可能想在项目启动之前就打开数据库.那么这里就可以在&context-param&中设置数据库的连接方式,在监听类中初始化数据库的连接. 8.这个监听是自己写的一个类,除了初始化方法,它还有销毁方法.用于关闭应用前释放资源.比如说数据库连接的关闭.
如:&!-- 加载spring的配置文件 --&&context-param&&&& &param-name&contextConfigLocation&/param-name&&&& &param-value&/WEB-INF/applicationContext.xml,/WEB-INF/action-servlet.xml,/WEB- INF/jason-servlet.xml&/param-value&&/context-param&&listener&&&& &listener-class&org.springframework.web.context.ContextLoaderListener&/listener-class&&/listener&
又如: ---&自定义context-param,且自定义listener来获取这些信息 &context-param&&&& &param-name&urlrewrite&/param-name&&&& &param-value&false&/param-value&&/context-param&&context-param&&&& &param-name&cluster&/param-name&&&& &param-value&false&/param-value&&/context-param&&context-param&&&& &param-name&servletmapping&/param-name&&&& &param-value&*.bbscs&/param-value&&/context-param&&context-param&&&& &param-name&poststoragemode&/param-name&&&& &param-value&1&/param-value&&/context-param&&listener&&&& &listener-class&com.laoer.bbscs.web.servlet.SysListener&/listener-class&&/listener&
public class SysListener extends HttpServlet implements ServletContextListener { private static final Log logger = LogFactory.getLog(SysListener.class); public void contextDestroyed(ServletContextEvent sce) { && //用于在容器关闭时,操作}
//用于在容器开启时,操作 public void contextInitialized(ServletContextEvent sce) {&& String rootpath = sce.getServletContext().getRealPath("/");&& System.out.println("-------------rootPath:"+rootpath); && if (rootpath != null) {&&& rootpath = rootpath.replaceAll("", "/");&& } else {&&& rootpath = "/";&& }&& if (!rootpath.endsWith("/")) {&&& rootpath = rootpath + "/";&& }&& Constant.ROOTPATH =&& ("Application Run Path:" + rootpath);&& String urlrewrtie = sce.getServletContext().getInitParameter("urlrewrite");&& boolean burlrewrtie =&& if (urlrewrtie != null) {&&& burlrewrtie = Boolean.parseBoolean(urlrewrtie);&& }&& Constant.USE_URL_REWRITE =&& ("Use Urlrewrite:" + burlrewrtie);&& 其它略之....
&& } }&& /*最终输出&& -------------rootPath:D:\tomcat_bbs\webapps\BBSCS_8_0_3\&&
21:51:46,526 [com.laoer.bbscs.web.servlet.SysListener]-[INFO] Application Run Path:D:/tomcat_bbs/webapps/BBSCS_8_0_3/&&
21:51:46,526 [com.laoer.bbscs.web.servlet.SysListener]-[INFO] Use Urlrewrite:true&&
21:51:46,526 [com.laoer.bbscs.web.servlet.SysListener]-[INFO] Use Cluster:false&&
21:51:46,526 [com.laoer.bbscs.web.servlet.SysListener]-[INFO] SERVLET MAPPING:*.bbscs&&
21:51:46,573 [com.laoer.bbscs.web.servlet.SysListener]-[INFO] Post Storage Mode:1&& */
context-param和init-param区别web.xml里面可以定义两种参数:(1)application范围内的参数,存放在servletcontext中,在web.xml中配置如下:&context-param&&&&&&&&&&& &param-name&context/param&/param-name&&&&&&&&&&& &param-value&avalible during application&/param-value&&/context-param& (2)servlet范围内的参数,只能在servlet的init()方法中取得,在web.xml中配置如下:&servlet&&&& &servlet-name&MainServlet&/servlet-name&&&& &servlet-class&com.wes.controller.MainServlet&/servlet-class&&&& &init-param&&&&&&& &param-name&param1&/param-name&&&&&&& &param-value&avalible in servlet init()&/param-value&&&& &/init-param&&&& &load-on-startup&0&/load-on-startup&&/servlet& 在servlet中可以通过代码分别取用:package com.wes. import javax.servlet.ServletEimport javax.servlet.http.HttpS public class MainServlet extends HttpServlet ...{ &&& public MainServlet() ...{&&&&&&& super();&&&& }&&& public void init() throws ServletException ...{&&&&&&&& System.out.println("下面的两个参数param1是在servlet中存放的");&&&&&&&& System.out.println(this.getInitParameter("param1"));&&&&&&&& System.out.println("下面的参数是存放在servletcontext中的");&&&&&&& System.out.println(getServletContext().getInitParameter("context/param"));&&&&& }} 第一种参数在servlet里面可以通过getServletContext().getInitParameter("context/param")得到第二种参数只能在servlet的init()方法中通过this.getInitParameter("param1")取得.
$ sudo apt-get install linux-headers-server linux-image-server linux-server 安装前后看free -m&&& 安装后需要重启。
要安装 .deb 套件包时 dpkg -i package_file.deb 要反安装 .deb 套件包时 dpkg -r package_name
注意:使用此命令需要你自己注意依赖软件,所以这并不是安装软件的最佳方法.
dpkg的详细使用方法,网上有很多,下面简单列了几个:
dpkg -i package.deb
dpkg -r package
dpkg -P package
删除包(包括配置文件)
dpkg -L package
列出与该包关联的文件
dpkg -l package
显示该包的版本
dpkg –unpack package.deb
解开 deb 包的内容
dpkg -S keyword
搜索所属的包内容
列出当前已安装的包
dpkg -c package.deb
列出 deb 包的内容
dpkg –configure package
mvn dependency:tree & dep.txt
http://www.oixx.se/fastfox.php
PL/SQL Developer中文乱码,但通过secureCRT连接Oracle显示正常,需要通过以下步骤进行修改。
1、查看服务端的字符集:
select * from v$nls_
2、修改注册表
HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOMEO/NLS_LANG
该项值改为和数据库服务端一致
注:如果不放心,修改该键值:HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/ALL_HOMES/ID0/NLS_LANG
3、修改环境变量
在系统环境变量中设置NLS_LANG,和服务端一致
Class & 和 & Class & 之间是 & extends
Interface & 和 & Interface & 之间是 & extends
Class & 和 & Interface & 之间是 & implements
Interface & 和 & abstract & Interface & 之间仅仅只能被你自己定义的接口extends,不可能implements, & implements是Class和Interface之间的 "专利 "
一句话 & 就是 & abstract & interface & 只能被interface继承,不能直接被类实现
1、mvn archetype:create -DgroupId=org.david.app -DartifactId=mywebapp -DarchetypeArtifactId=maven-archetype-webapp
2、cd mywebapp
&&&& mvn eclipse:eclipse
&&&& 导入eclipse工程
&&&& (或者直接从eclipse中导入maven工程)
3、添加servlet依赖
&&&&&&& &dependency&
&&&&& &groupId&javax.servlet&/groupId&
&&&&& &artifactId&servlet-api&/artifactId&
&&&&& &version&2.5&/version&
&&& &/dependency&
4、添加源代码目录src/main/java
&&&& 将源代码放在该目录下。
5、添加jetty插件
&& &finalName&mywebapp&/finalName&
&& &plugins&
&&&&&&& &plugin&
&&&&&&&&& &groupId&org.apache.maven.plugins&/groupId&
&&&&&&&&& &artifactId&maven-compiler-plugin&/artifactId&
&&&&&&&&& &configuration&
&&&&&&&&&&& &source&1.5&/source&
&&&&&&&&&&& &target&1.5&/target&
&&&&&&&&& &/configuration&
&&&&&&& &/plugin&
&&&&&&& &plugin&
&&&&&&&&& &groupId&org.mortbay.jetty&/groupId&
&&&&&&&&& &artifactId&maven-jetty-plugin&/artifactId&
&& & & & &version&6.1.10&/version&
&&&&&&& &/plugin&&
&& &/plugins&
6、命令行:mvn jetty:run
前些日子安装了Ubuntu 10.04,体验很爽,不过就是默认的输入法不好使,感觉比9.10是个倒退,fcitx也没有google或者搜狗拼音那么爽,幸运的是SCIM-GooglePinyin 项目试图将 Android 上的 Google 拼音输入法移植到 GNU/Linux 平台。SCIM-GooglePinyin 基于SCIM 这个通用输入法平台,目前仍然在开发之中,不过其源代码已经可以通过
安装步骤(需要自己编译):
A. 获取代码:(没有git的先安装git:sudo apt-get install git-core)
$ git clone git:///tchaikov/scim-googlepinyin.git
$ cd scim-googlepinyin.git
B. 编译前提:
上面给的链接里面有介绍怎么编译的,但少提了几个必需组件,这里列一下:
* autotools-dev
* libgtk2.0-dev
* libscim-dev
* automake
用下面命令看看是不是安装了,如果没有,会自动帮你安装上:
$ aptitude install autotools-dev libgtk2.0-dev libscim-dev libtool automake
记住系统必须先存在SCIM(没有的话 sudo apt-get install scim 一下)
$ ./autogen.sh
$ sudo make install
现在重启scim:
关闭scim:pkill scim
然后启动: scim -d (本人测试要重新启动机器)
&OK,去首选项里的“语言支持”的“输入法”选择scim作为默认输入法就OK了。
您可以遵循以下步骤,使您的 gedit 正确显示中文编码文件。
按下 Alt-F2,打开“运行应用程序”对话框。
在文本框中键入“gconf-editor”,并按下回车键,打开“配置编辑器”。
展开左边的树节点,找到 /apps/gedit-2/preferences/encodings 节点并单击它。
双击右边的 auto_detected 键,打开“编辑键”对话框。
单击列表右边的“添加”按钮,输入“GB1;,单击确定按钮。
列表的最底部新增加了一个“GB1;。单击选中它,并单击右边的 “向上” 按钮直到 “GB1;
位于列表的顶部为止。
单击确定按钮,关闭配置编辑器。
安装完重启后会发现无法进入Windows 7,需要我们进行如下步骤:
ubuntu9.10使用grub2,所以不能再使用menu.lst而使用grub.cfg来代替
修改grub需要root权限,默认是只读的,所以不建议直接修改
进入Ubuntu,打开终端,输入“sudo update-grub",即可重新生成grub.cfg,并且会自动搜索并添加剂windows系统的启动项目
如果还是没有windows7的启动项,也可以修改/etc/grub.d/目录下的40_custom,在后面添加
1title Windows&&Seven
2root (hd0,0)
3makeactive
4chainloader +1
然后再执行"sudo update-grub"
1、建用户:
adduser box&&&&&&&&&&&&&&&&&&&&&&&&&&&& //新建box用户
passwd box&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //给box用户设置密码
2、建工作组
groupadd test&&&&&&&&&&&&&&&&&&&&&&&&& //新建test工作组
3、新建用户同时增加工作组
useradd -g test box&&&&&&&&&&&&&&&&&&&&& //新建box用户并增加到test工作组
注::-g 所属组 -d 家目录 -s 所用的SHELL
4、给已有的用户增加工作组
usermod -G groupname username
或者:gpasswd -a user group
5、临时关闭:在/etc/shadow文件中属于该用户的行的第二个字段(密码)前面加上*就可以了。想恢复该用户,去掉*即可。
或者使用如下命令关闭用户账号:
passwd peter –l
重新释放:
passwd peter –u
6、永久性删除用户账号
userdel peter
groupdel peter
usermod –G peter peter&&&(强制删除该用户的主目录和主目录下的所有文件和子目录)
7、从组中删除用户
编辑/etc/group 找到GROUP1那一行,删除 A
或者用命令
gpasswd -d A GROUP
8、显示用户信息
cat /etc/passwd
/etc/group 内容具体分析
/etc/group 的内容包括用户组(Group)、用户组口令、GID及该用户组所包含的用户(User),每个用户组一条记录;格式如下:
group_name:passwd:GID:user_list
在/etc/group 中的每条记录分四个字段:
第一字段:用户组名称;
第二字段:用户组密码;
第三字段:GID
第四字段:用户列表,每个用户之间用,号分割;本字段可以为空;如果字段为空表示用户组为GID的用户名;
我们举个例子:
root:x:0:root,linuxsir&& 注:用户组root,x是密码段,表示没有设置密码,GID是0,root用户组下包括root、linuxsir以及GID为0的其它用户(可以通过/etc/passwd查看);;
beinan:x:500:linuxsir& 注:用户组beinan,x是密码段,表示没有设置密码,GID是500,beinan用户组下包括linuxsir用户及GID为500的用户(可以通过/etc/passwd查看);
linuxsir:x:502:linuxsir& 注:用户组linuxsir,x是密码段,表示没有设置密码,GID是502,linuxsir用户组下包用户linuxsir及GID为502的用户(可以通过/etc/passwd查看);
helloer:x:503:&& 注:用户组helloer,x是密码段,表示没有设置密码,GID是503,helloer用户组下包括GID为503的用户,可以通过/etc/passwd查看;
sudo gedit /etc/NetworkManager/nm-system-settings.conf
managed=false
managed=true
1.从trunk上创建一个分支A svn cp trunk& A -m "描述"例如& svn cp http://svn/trunk/& http://svn/branches/lijun_log/ -m"out log"
2.查看要合并分支的log
svn log --stop-on-copy -q http://svn/B
3.svn merge -r& B分支开始的版本:B分支结束的版本& A分支的ulr&& 列如: svn merge -r
这样主干就合并到B分支上
&&&& 摘要: JDK源码分析Set类,因为Set类是经常要用到的,那我们知道JDK源码中Set类在其中不可以有相同的元素,那么判断这个元素是否相同是如何实现的呢,我们看下下面这张图:
对JDK源码分析之Set类在这张类图上,首先我们看见一个经典模式的应用,那就是适配器模式,我们把map接口的对象,包装成为了Set的接口;在代码中,我们来分析一下;
首先,我...&&
标识符类型 命名规则 例子&
(Packages) 一个唯一包名的前缀总是全部小写的ASCII字母并且是一个顶级域名,通常是com,edu,gov,mil,net,org,或1981年ISO 3166标准所指定的标识国家的英文双字符代码。包名的后续部分根据不同机构各自内部的命名规范而不尽相同。这类命名规范可能以特定目录名的组成来区分部门(department),项目(project),机器(machine),或注册名(login names)。 com.sun.eng&
com.apple.quicktime.v2&
edu.cmu.cs.bovik.cheese&
(Classes) 命名规则:类名是个一名词,采用大小写混合的方式,每个单词的首字母大写。尽量使你的类名简洁而富于描述。使用完整单词,避免缩写词(除非该缩写词被更广泛使用,像URL,HTML) class R&
class ImageS&
接口(Interfaces) 命名规则:大小写规则与类名相似 interface RasterD&
interface S&
(Methods) 方法名是一个动词,采用大小写混合的方式,第一个单词的首字母小写,其后单词的首字母大写。 run();&
runFast();&
getBackground();&
变量(Variables) 除了变量名外,所有实例,包括类,类常量,均采用大小写混合的方式,第一个单词的首字母小写,其后单词的首字母大写。变量名不应以下划线或美元符号开头,尽管这在语法上是允许的。&
变量名应简短且富于描述。变量名的选用应该易于记忆,即,能够指出其用途。尽量避免单个字符的变量名,除非是一次性的临时变量。临时变量通常被取名为i,j,k,m和n,它们一般用于整型;c,d,e,它们一般用于字符型。&
float myW&
实例变量(Instance Variables) 大小写规则和变量名相似,除了前面需要一个下划线 int _employeeId;&
Customer _&
常量(Constants) 类常量和ANSI常量的声明,应该全部大写,单词间用下划线隔开。(尽量避免ANSI常量,容易引起错误) static final int MIN_WIDTH = 4;&
static final int MAX_WIDTH = 999;&
static final int GET_THE_CPU = 1;&
@关于间接层的概念。
间接层就是我们所提炼出来的小函数。本来事情是可以交给一个大函数一次性去执行完的,可是我们为什么还要把他分割成小函数,再委托小函数这个间接层去完成事情呢。以下是作者总结出来的三点间接层的好处。
1、&允许逻辑共享。也就是说小函数做的这些小事情,子类也同样可以做,而且跟其他事情互不干扰。
2、间接层给了我们一个解释自己意图的机会。间接层允许我们选择最适合表达我们意图的名字来命名,那在调用这些函数的时候,我一看他们的名字就知道他们可能会做些什么事情。就像Justin昨天写的那个&A()
&&&&&&&&&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& …
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ….
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ….&& 200&行
&&&&&&&& A1();
&&&&&&&& A2();
&&&&&&&& A3();
&&&&&&&& …….
A2(){….}
A3(){….}
这样你在整理逻辑的时候,头脑会很清醒。(因为名字是我们赋予他们的意义)
3、将变化加以隔离,当我需要修改一些逻辑的时候,我可以把我在整个项目中掀起的波澜降低很多。
@在有些开源的框架内,我的接口名字已经公布了,可是现在我在重构的时候需要改变这些接口名字,改怎么办呢?
这时候可以保留旧的接口,然后在旧的接口中用新接口来实现逻辑。一直持续到所有用户都开始使用新接口的时候,再把这个旧接口去掉。
@这个世界不存在一条万能的定律能解决一切问题(我曾经想象要是有这么一条定律就好了,这也是很多哲学家,科学家所追求过的),所以不要试图用重构来拯救整个世界。有以下几种情况重构不适用。
当代码已经腐朽到连正常功能都不能运行的时候,也许重写(从头再来一遍)比重构要来的简单。
有的时候临近发布,我们要赶眼前的时间,就不应重构了。重构其实是一剂中药,虽然药效很好,但是效果却也来的慢一些。如果是赶时间发布,那就不要寄希望于重构了。重构是我们欠的债,很多时候我们都是举债来发布的,但是债都是有利息的,“过于复杂的代码所造成的【维护和扩展的额外开销】就是利息。一定的利息我们可以承受,但是利息过高就会被拖垮。“出来混总是要还的”。最近几次发布都通宵,这也许就是我们的重构债欠的有点过多的信号。是时候来偿还一些债了。
在此描述您的新便笺。软件中总免不了要使用诸如 Log4net, Log4j, Tracer 等东东来写日志,不管用什么,这些东东大多是大同小异的,一般都提供了这样5个日志级别:
&&& × Debug
&&& × Info
&&& × Warn
&&& × Error
&&& × Fatal
一个等级比一个高,但是在具体开发中,关于应该如何选择适应的等级,却没有找到好的文章进行说明。记录一下自己的一些看法,以便日后使用吧。
=== Debug ===
这个级别最低的东东,一般的来说,在系统实际运行过程中,一般都是不输出的。
因此这个级别的信息,可以随意的使用,任何觉得有利于在调试时更详细的了解系统运行状态的东东,比如变量的值等等,都输出来看看也无妨。
当然,在每一个 Debug 调用之前,一定要加上 If 判断。
=== Info ===
这个应该用来反馈系统的当前状态给最终用户的,所以,在这里输出的信息,应该对最终用户具有实际意义,也就是最终用户要能够看得明白是什么意思才行。
从某种角度上说,Info 输出的信息可以看作是软件产品的一部分(就像那些交互界面上的文字一样),所以需要谨慎对待,不可随便。
=== Warn、Error、Fatal ===
警告、错误、严重错误,这三者应该都在系统运行时检测到了一个不正常的状态,他们之间的区别,要区分还真不是那么简单的事情。我大致是这样区分的:
所谓警告,应该是这个时候进行一些修复性的工作,应该还可以把系统恢复到正常状态中来,系统应该可以继续运行下去。
所谓错误,就是说可以进行一些修复性的工作,但无法确定系统会正常的工作下去,系统在以后的某个阶段,很可能会因为当前的这个问题,导致一个无法修复的错误(例如宕机),但也可能一直工作到停止也不出现严重问题。
所谓Fatal,那就是相当严重的了,可以肯定这种错误已经无法修复,并且如果系统继续运行下去的话,可以肯定必然会越来越乱。这时候采取的最好的措施不是试图将系统状态恢复到正常,而是尽可能地保留系统有效数据并停止运行。
也就是说,选择 Warn、Error、Fatal 中的具体哪一个,是根据当前的这个问题对以后可能产生的影响而定的,如果对以后基本没什么影响,则警告之,如果肯定是以后要出严重问题的了,则Fatal之,拿不准会怎么样,则 Error 之。
=== 一些疑惑 ===
不过在实际使用中,基于上面的这种考虑,也还是有一些具体问题。最常见的就是要在最终产品中将输出日志打开到那种级别才算好呢?
例如在应用中有一个输出窗口,一些系统状态信息将被输出到这个输出窗口中。因为 Info 的级别是如此之低,所以为了让用户能够看到有效的输出信息,必须将日志级别开放到 Info 级别。但是 Warn 的级别比 Info 要高,所以用户不得不被迫看到一些 Warn 的信息。而我们其实已经假定,Warn 信息其实并不影响系统的正常运行,这一般只代表系统中存在一些还没有被发现或者修改的小 Bug。这些 Warn 信息会让最终用户困惑甚至恐慌,系统发出警告了,该怎么办?
个人观点,Info 的级别应该比 Warn 更高才对,Warn 信息和 Debug 一样,应该在产品测试和调试时使用,而 Info、Erro 以及 Fatal 则在产品发布后需要继续使用。
软件中总免不了要使用诸如 Log4net, Log4j, Tracer 等东东来写日志,不管用什么,这些东东大多是大同小异的,一般都提供了这样5个日志级别:
&&& × Debug
&&& × Info
&&& × Warn
&&& × Error
&&& × Fatal
一个等级比一个高,但是在具体开发中,关于应该如何选择适应的等级,却没有找到好的文章进行说明。记录一下自己的一些看法,以便日后使用吧。
=== Debug ===
这个级别最低的东东,一般的来说,在系统实际运行过程中,一般都是不输出的。
因此这个级别的信息,可以随意的使用,任何觉得有利于在调试时更详细的了解系统运行状态的东东,比如变量的值等等,都输出来看看也无妨。
当然,在每一个 Debug 调用之前,一定要加上 If 判断。
=== Info ===
这个应该用来反馈系统的当前状态给最终用户的,所以,在这里输出的信息,应该对最终用户具有实际意义,也就是最终用户要能够看得明白是什么意思才行。
从某种角度上说,Info 输出的信息可以看作是软件产品的一部分(就像那些交互界面上的文字一样),所以需要谨慎对待,不可随便。
软件中总免不了要使用诸如 Log4net, Log4j, Tracer 等东东来写日志,不管用什么,这些东东大多是大同小异的,一般都提供了这样5个日志级别:
&&& × Debug
&&& × Info
&&& × Warn
&&& × Error
&&& × Fatal
一个等级比一个高,但是在具体开发中,关于应该如何选择适应的等级,却没有找到好的文章进行说明。记录一下自己的一些看法,以便日后使用吧。
=== Debug ===
这个级别最低的东东,一般的来说,在系统实际运行过程中,一般都是不输出的。
因此这个级别的信息,可以随意的使用,任何觉得有利于在调试时更详细的了解系统运行状态的东东,比如变量的值等等,都输出来看看也无妨。
当然,在每一个 Debug 调用之前,一定要加上 If 判断。
=== Info ===
这个应该用来反馈系统的当前状态给最终用户的,所以,在这里输出的信息,应该对最终用户具有实际意义,也就是最终用户要能够看得明白是什么意思才行。
从某种角度上说,Info 输出的信息可以看作是软件产品的一部分(就像那些交互界面上的文字一样),所以需要谨慎对待,不可随便。
=== Warn、Error、Fatal ===
警告、错误、严重错误,这三者应该都在系统运行时检测到了一个不正常的状态,他们之间的区别,要区分还真不是那么简单的事情。我大致是这样区分的:
所谓警告,应该是这个时候进行一些修复性的工作,应该还可以把系统恢复到正常状态中来,系统应该可以继续运行下去。
所谓错误,就是说可以进行一些修复性的工作,但无法确定系统会正常的工作下去,系统在以后的某个阶段,很可能会因为当前的这个问题,导致一个无法修复的错误(例如宕机),但也可能一直工作到停止也不出现严重问题。
所谓Fatal,那就是相当严重的了,可以肯定这种错误已经无法修复,并且如果系统继续运行下去的话,可以肯定必然会越来越乱。这时候采取的最好的措施不是试图将系统状态恢复到正常,而是尽可能地保留系统有效数据并停止运行。
也就是说,选择 Warn、Error、Fatal 中的具体哪一个,是根据当前的这个问题对以后可能产生的影响而定的,如果对以后基本没什么影响,则警告之,如果肯定是以后要出严重问题的了,则Fatal之,拿不准会怎么样,则 Error 之。
=== 一些疑惑 ===
不过在实际使用中,基于上面的这种考虑,也还是有一些具体问题。最常见的就是要在最终产品中将输出日志打开到那种级别才算好呢?
例如在应用中有一个输出窗口,一些系统状态信息将被输出到这个输出窗口中。因为 Info 的级别是如此之低,所以为了让用户能够看到有效的输出信息,必须将日志级别开放到 Info 级别。但是 Warn 的级别比 Info 要高,所以用户不得不被迫看到一些 Warn 的信息。而我们其实已经假定,Warn 信息其实并不影响系统的正常运行,这一般只代表系统中存在一些还没有被发现或者修改的小 Bug。这些 Warn 信息会让最终用户困惑甚至恐慌,系统发出警告了,该怎么办?
个人观点,Info 的级别应该比 Warn 更高才对,Warn 信息和 Debug 一样,应该在产品测试和调试时使用,而 Info、Erro 以及 Fatal 则在产品发布后需要继续使用。
目前我所采用的解决方法是,对于 Warn、Error、Fatal 都添加一个相应的系统断言,这样,可以保证当发生这种问题时,在调试阶段,可以立即得到提示。在软件发布以后,这些信息也能被记录到日志文件中去。
log.Warn("message");
System.Diagnostics.Debug.Fail("警告", "message");
Debug.Fail 将导致编译为 Debug 输出时,会弹出一个消息警告窗口,这可保证在测试、调试阶段不漏过任何一个潜在的错误。而在发布时,Release 编译的输出不会包括 Debug 语句,这就不会打扰最终用户,而错误信息仍然能通过 log 记录到日志中
=== Warn、Error、Fatal ===
警告、错误、严重错误,这三者应该都在系统运行时检测到了一个不正常的状态,他们之间的区别,要区分还真不是那么简单的事情。我大致是这样区分的:
所谓警告,应该是这个时候进行一些修复性的工作,应该还可以把系统恢复到正常状态中来,系统应该可以继续运行下去。
所谓错误,就是说可以进行一些修复性的工作,但无法确定系统会正常的工作下去,系统在以后的某个阶段,很可能会因为当前的这个问题,导致一个无法修复的错误(例如宕机),但也可能一直工作到停止也不出现严重问题。
所谓Fatal,那就是相当严重的了,可以肯定这种错误已经无法修复,并且如果系统继续运行下去的话,可以肯定必然会越来越乱。这时候采取的最好的措施不是试图将系统状态恢复到正常,而是尽可能地保留系统有效数据并停止运行。
也就是说,选择 Warn、Error、Fatal 中的具体哪一个,是根据当前的这个问题对以后可能产生的影响而定的,如果对以后基本没什么影响,则警告之,如果肯定是以后要出严重问题的了,则Fatal之,拿不准会怎么样,则 Error 之。
=== 一些疑惑 ===
不过在实际使用中,基于上面的这种考虑,也还是有一些具体问题。最常见的就是要在最终产品中将输出日志打开到那种级别才算好呢?
例如在应用中有一个输出窗口,一些系统状态信息将被输出到这个输出窗口中。因为 Info 的级别是如此之低,所以为了让用户能够看到有效的输出信息,必须将日志级别开放到 Info 级别。但是 Warn 的级别比 Info 要高,所以用户不得不被迫看到一些 Warn 的信息。而我们其实已经假定,Warn 信息其实并不影响系统的正常运行,这一般只代表系统中存在一些还没有被发现或者修改的小 Bug。这些 Warn 信息会让最终用户困惑甚至恐慌,系统发出警告了,该怎么办?
软件中总免不了要使用诸如 Log4net, Log4j, Tracer 等东东来写日志,不管用什么,这些东东大多是大同小异的,一般都提供了这样5个日志级别:
&&& × Debug
&&& × Info
&&& × Warn
&&& × Error
&&& × Fatal
一个等级比一个高,但是在具体开发中,关于应该如何选择适应的等级,却没有找到好的文章进行说明。记录一下自己的一些看法,以便日后使用吧。
=== Debug ===
这个级别最低的东东,一般的来说,在系统实际运行过程中,一般都是不输出的。
因此这个级别的信息,可以随意的使用,任何觉得有利于在调试时更详细的了解系统运行状态的东东,比如变量的值等等,都输出来看看也无妨。
当然,在每一个 Debug 调用之前,一定要加上 If 判断。
=== Info ===
这个应该用来反馈系统的当前状态给最终用户的,所以,在这里输出的信息,应该对最终用户具有实际意义,也就是最终用户要能够看得明白是什么意思才行。
从某种角度上说,Info 输出的信息可以看作是软件产品的一部分(就像那些交互界面上的文字一样),所以需要谨慎对待,不可随便。
=== Warn、Error、Fatal ===
警告、错误、严重错误,这三者应该都在系统运行时检测到了一个不正常的状态,他们之间的区别,要区分还真不是那么简单的事情。我大致是这样区分的:
所谓警告,应该是这个时候进行一些修复性的工作,应该还可以把系统恢复到正常状态中来,系统应该可以继续运行下去。
所谓错误,就是说可以进行一些修复性的工作,但无法确定系统会正常的工作下去,系统在以后的某个阶段,很可能会因为当前的这个问题,导致一个无法修复的错误(例如宕机),但也可能一直工作到停止也不出现严重问题。
所谓Fatal,那就是相当严重的了,可以肯定这种错误已经无法修复,并且如果系统继续运行下去的话,可以肯定必然会越来越乱。这时候采取的最好的措施不是试图将系统状态恢复到正常,而是尽可能地保留系统有效数据并停止运行。
也就是说,选择 Warn、Error、Fatal 中的具体哪一个,是根据当前的这个问题对以后可能产生的影响而定的,如果对以后基本没什么影响,则警告之,如果肯定是以后要出严重问题的了,则Fatal之,拿不准会怎么样,则 Error 之。
=== 一些疑惑 ===
不过在实际使用中,基于上面的这种考虑,也还是有一些具体问题。最常见的就是要在最终产品中将输出日志打开到那种级别才算好呢?
例如在应用中有一个输出窗口,一些系统状态信息将被输出到这个输出窗口中。因为 Info 的级别是如此之低,所以为了让用户能够看到有效的输出信息,必须将日志级别开放到 Info 级别。但是 Warn 的级别比 Info 要高,所以用户不得不被迫看到一些 Warn 的信息。而我们其实已经假定,Warn 信息其实并不影响系统的正常运行,这一般只代表系统中存在一些还没有被发现或者修改的小 Bug。这些 Warn 信息会让最终用户困惑甚至恐慌,系统发出警告了,该怎么办?
个人观点,Info 的级别应该比 Warn 更高才对,Warn 信息和 Debug 一样,应该在产品测试和调试时使用,而 Info、Erro 以及 Fatal 则在产品发布后需要继续使用。
目前我所采用的解决方法是,对于 Warn、Error、Fatal 都添加一个相应的系统断言,这样,可以保证当发生这种问题时,在调试阶段,可以立即得到提示。在软件发布以后,这些信息也能被记录到日志文件中去。
log.Warn("message");
System.Diagnostics.Debug.Fail("警告", "message");
Debug.Fail 将导致编译为 Debug 输出时,会弹出一个消息警告窗口,这可保证在测试、调试阶段不漏过任何一个潜在的错误。而在发布时,Release 编译的输出不会包括 Debug 语句,这就不会打扰最终用户,而错误信息仍然能通过 log 记录到日志中
个人观点,Info 的级别应该比 Warn 更高才对,Warn 信息和 Debug 一样,应该在产品测试和调试时使用,而 Info、Erro 以及 Fatal 则在产品发布后需要继续使用。
目前我所采用的解决方法是,对于 Warn、Error、Fatal 都添加一个相应的系统断言,这样,可以保证当发生这种问题时,在调试阶段,可以立即得到提示。在软件发布以后,这些信息也能被记录到日志文件中去。
log.Warn("message");
System.Diagnostics.Debug.Fail("警告", "message");
Debug.Fail 将导致编译为 Debug 输出时,会弹出一个消息警告窗口,这可保证在测试、调试阶段不漏过任何一个潜在的软件中总免不了要使用诸如 Log4net, Log4j, Tracer 等东东来写日志,不管用什么,这些东东大多是大同小异的,一般都提供了这样5个日志级别:
&&& × Debug
&&& × Info
&&& × Warn
&&& × Error
&&& × Fatal
一个等级比一个高,但是在具体开发中,关于应该如何选择适应的等级,却没有找到好的文章进行说明。记录一下自己的一些看法,以便日后使用吧。
=== Debug ===
这个级别最低的东东,一般的来说,在系统实际运行过程中,一般都是不输出的。
因此这个级别的信息,可以随意的使用,任何觉得有利于在调试时更详细的了解系统运行状态的东东,比如变量的值等等,都输出来看看也无妨。
当然,在每一个 Debug 调用之前,一定要加上 If 判断。
=== Info ===
这个应该用来反馈系统的当前状态给最终用户的,所以,在这里输出的信息,应该对最终用户具有实际意义,也就是最终用户要能够看得明白是什么意思才行。
从某种角度上说,Info 输出的信息可以看作是软件产品的一部分(就像那些交互界面上的文字一样),所以需要谨慎对待,不可随便。
=== Warn、Error、Fatal ===
警告、错误、严重错误,这三者应该都在系统运行时检测到了一个不正常的状态,他们之间的区别,要区分还真不是那么简单的事情。我大致是这样区分的:
所谓警告,应该是这个时候进行一些修复性的工作,应该还可以把系统恢复到正常状态中来,系统应该可以继续运行下去。
所谓错误,就是说可以进行一些修复性的工作,但无法确定系统会正常的工作下去,系统在以后的某个阶段,很可能会因为当前的这个问题,导致一个无法修复的错误(例如宕机),但也可能一直工作到停止也不出现严重问题。
所谓Fatal,那就是相当严重的了,可以肯定这种错误已经无法修复,并且如果系统继续运行下去的话,可以肯定必然会越来越乱。这时候采取的最好的措施不是试图将系统状态恢复到正常,而是尽可能地保留系统有效数据并停止运行。
软件中总免不了要使用诸如 Log4net, Log4j, Tracer 等东东来写日志,不管用什么,这些东东大多是大同小异的,一般都提供了这样5个日志级别:
&&& × Debug
&&& × Info
&&& × Warn
&&& × Error
&&& × Fatal
一个等级比一个高,但是在具体开发中,关于应该如何选择适应的等级,却没有找到好的文章进行说明。记录一下自己的一些看法,以便日后使用吧。
=== Debug ===
这个级别最低的东东,一般的来说,在系统实际运行过程中,一般都是不输出的。
因此这个级别的信息,可以随意的使用,任何觉得有利于在调试时更详细的了解系统运行状态的东东,比如变量的值等等,都输出来看看也无妨。
当然,在每一个 Debug 调用之前,一定要加上 If 判断。
=== Info ===
这个应该用来反馈系统的当前状态给最终用户的,所以,在这里输出的信息,应该对最终用户具有实际意义,也就是最终用户要能够看得明白是什么意思才行。
从某种角度上说,Info 输出的信息可以看作是软件产品的一部分(就像那些交互界面上的文字一样),所以需要谨慎对待,不可随便。
=== Warn、Error、Fatal ===
警告、错误、严重错误,这三者应该都在系统运行时检测到了一个不正常的状态,他们之间的区别,要区分还真不是那么简单的事情。我大致是这样区分的:
所谓警告,应该是这个时候进行一些修复性的工作,应该还可以把系统恢复到正常状态中来,系统应该可以继续运行下去。
所谓错误,就是说可以进行一些修复性的工作,但无法确定系统会正常的工作下去,系统在以后的某个阶段,很可能会因为当前的这个问题,导致一个无法修复的错误(例如宕机),但也可能一直工作到停止也不出现严重问题。
所谓Fatal,那就是相当严重的了,可以肯定这种错误已经无法修复,并且如果系统继续运行下去的话,可以肯定必然会越来越乱。这时候采取的最好的措施不是试图将系统状态恢复到正常,而是/shwen99/rss尽可能地保留系统有效数据并停止运行。
也就是说,选择 Warn、Error、Fatal 中的具体哪一个,是根据当前的这个问题对以后可能产生的影响而定的,如果对以后基本没什么影响,则警告之,如果肯定是以后要出严重问题的了,则Fatal之,拿不准会怎么样,则 Error 之。
=== 一些疑惑 ===
不过在实际使用中,基于上面的这种考虑,也还是有一些具体问题。最常见的就是要在最终产品中将输出日志打开到那种级别才算好呢?
例如在应用中有一个输出窗口,一些系统状态信息将被输出到这个输出窗口中。因为 Info 的级别是如此之低,所以为了让用户能够看到有效的输出信息,必须将日志级别开放到 Info 级别。但是 Warn 的级别比 Info 要高,所以用户不得不被迫看到一些 Warn 的信息。而我们其实已经假定,Warn 信息其实并不影响系统的正常运行,这一般只代表系统中存在一些还没有被发现或者修改的小 Bug。这些 Warn 信息会让最终用户困惑甚至恐慌,系统发出警告了,该怎么办?
个人观点,Info 的级别应该比 Warn 更高才对,Warn 信息和 Debug 一样,应该在产品测试和调试时使用,而 Info、Erro 以及 Fatal 则在产品发布后需要继续使用。
目前我所采用的解决方法是,对于 Warn、Error、Fatal 都添加一个相应的系统断言,这样,可以保证当发生这种问题时,在调试阶段,可以立即得到提示。在软件发布以后,这些信息也能被记录到日志文件中去。
log.Warn("message");
System.Diagnostics.Debug.Fail("警告", "message");
Debug.Fail 将导致编译为 Debug 输出时,会弹出一个消息警告窗口,这可保证在测试、调试阶段不漏过任何一个潜在的错误。而在发布时,Release 编译的输出不会包括 Debug 语句,这就不会打扰最终用户,而错误信息仍然能通过 log 记录到日志中
也就是说,选择 Warn、Error、Fatal 中的具体哪一个,是根据当前的这个问题对以后可能产生的影响而定的,如果对以后基本没什么影响,则警告之,如果肯定是以后要出严重问题的了,则Fatal之,拿不准会怎么样,则 Error 之。
=== 一些疑惑 ===
不过在实际使用中,基于上面的这种考虑,也还是有一些具体问题。最常见的就是要在最终产品中将输出日志打开到那种级别才算好呢?
例如在应用中有一个输出窗口,一些系统状态信息将被输出到这个输出窗口中。因为 Info 的级别是如此之低,所以为了让用户能够看到有效的输出信息,必须将日志级别开放到 Info 级别。但是 Warn 的级别比 Info 要高,所以用户不得不被迫看到一些 Warn 的信息。而我们其实已经假定,Warn 信息其实并不影响系统的正常运行,这一般只代表系统中存在一些还没有被发现或者修改的小 Bug。这些 Warn 信息会让最终用户困惑甚至恐慌,系统发出警告了,该怎么办?
个人观点,Info 的级别应该比 Warn 更高才对,Warn 信息和 Debug 一样,应该在产品测试和调试时使用,而 Info、Erro 以及 Fatal 则在产品发布后需要继续使用。
目前我所采用的解决方法是,对于 Warn、Error、Fatal 都添加一个相应的系统断言,这样,可以保证当发生这种问题时,在调试阶段,可以立即得到提示。在软件发布以后,这些信息也能被记录到日志文件中去。
log.Warn("message");
System.Diagnostics.Debug.Fail("警告", "message");
Debug.Fail 将导致编译为 Debug 输出时,会弹出一个消息警告窗口,这可保证在测试、调试阶段不漏过任何一个潜在的错误。而在发布时,Release 编译的输出不会包括 Debug 语句,这就不会打扰最终用户,而错误信息仍然能通过 log 记录到日志中错误。而在发布时,Release 编译的输出不会包括 Debug 语句,这就不会打扰最终用户,而错误信息仍然能通过 log 记录到日志中
目前我所采用的解决方法是,对于 Warn、Error、Fatal 都添加一个相应的系统断言,这样,可以保证当发生这种问题时,在调试阶段,可以立即得到提示。在软件发布以后,这些信息也能被记录到日志文件中去。
log.Warn("message");
System.Diagnostics.Debug.Fail("警告", "message");
Debug.Fail 将导致编译为 Debug 输出时,会弹出一个消息警告窗口,这可保证在测试、调试阶段不漏过任何一个潜在的错误。而在发布时,Release 编译的输出不会包括 Debug 语句,这就不会打扰最终用户,而错误信息仍然能通过 log 记录到日志中
http://www.rainlendar.net/cms/index.php?option=com_rny_download&Itemid=32
listener.ora、 tnsnames.ora和sqlnet.ora这3个文件是关系oracle网络配置的3个主要文件,其中listener.ora是和数据库服务器端 相关,而tnsnames.ora和sqlnet.ora这2个文件不仅仅关系到服务器端,主要的还是和客户端关系紧密。
检查客户端oracle网络的时候可以先检查sqlnet.ora文件:
# SQLNET.ORA Network Configuration File: $ORACLE_HOME/NETWORK/ADMIN/sqlnet.ora
# Generated by Oracle configuration tools.
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, HOSTNAME, ONAMES)
##NAMES.DEFAULT_DOMAIN =
上面的sqlnet.ora文件说明:
SQLNET.AUTHENTICATION_SERVICES= (NTS)——这个表示采用os认证,在数据库服务器上,可以利用sqlplus “/ as sysdba”。一般这个配置在windows上是ok的,在unix环境下可能会有问题,一般在unix下可以去掉这个配置。
NAMES.DIRECTORY_PATH= (TNSNAMES, HOSTNAME, ONAMES)——表示将首先利用tnsnames进行解析;如果tnsnames解析不到,将使用hostname解析;如果hostname解析不 到,将采用onames进行解析。
被注释掉的NAMES.DEFAULT_DOMAIN = ——表示采用默认的domain name为,在tnsnames.ora中如果配置对应的解析,如果原来的别名oralocal,那么,当启用这个参数后,在 tnsnames中的配置要改成oralocal.。在使用tnsping时或者sqlplus登录时,只需写前面的别名,系 统会自动加上后面的domain name来进行解析。
检查完毕sqlnet.ora,一般都会发现是使用tnsname来解析别名的,那么,tnsnames.ora中可以有哪些配置种类呢?
# TNSNAMES.ORA Network Configuration File: $ORACLE_HOME/NETWORK/ADMIN/tnsnames.ora
# Generated by Oracle configuration tools.
###### 一般的配置 ##################################
ORALOCAL =
&&(DESCRIPTION =
&&&&(ADDRESS_LIST =
&&&&&&(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
&&&&(CONNECT_DATA =
&&&&&&(SERVER = DEDICATED)
&&&&&&(SERVICE_NAME = oralocal)
###### 这样也行,用SID=oralocal ###########################
ORALOCAL_2 =
&&(DESCRIPTION =
&&&&(ADDRESS_LIST =
&&&&&&(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
&&&&(CONNECT_DATA =
&&&&&&(SERVER = DEDICATED)
&&&&&&(SID = oralocal)
###### RAC的配置(3节点rac) ###############################
ORALOCAL =
&&(DESCRIPTION =
&&(load_balance = yes)
&&(failover = on)
&&&&(ADDRESS_LIST =
&&&&&&(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521))
&&&&&&(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT = 1521))
&&&&&&(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.3)(PORT = 1521))&&&
&&&&(CONNECT_DATA =
&&&&&&&&(SERVICE_NAME = oralocal)
&&&&&&&&(SERVER = DEDICATED)
&&&&&&&&(failover_mode=(type=select)(method=basic)(retries=20)(delay=20))
ORALOCAL_NODE1 =
&&&(DESCRIPTION =
&&&&&(ADDRESS_LIST =
&&&&&&&(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521))
&&&&&&&(CONNECT_DATA =
&&&&&&&&&(SERVICE_NAME = oralocal)
&&&&&&&&&(INSTANCE_NAME = oralocal_node1)
ORALOCAL_NODE2=
&&&(DESCRIPTION =
&&&&&(ADDRESS_LIST =
&&&&&&&(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT = 1521))
&&&&&&&(CONNECT_DATA =
&&&&&&&&&(SERVICE_NAME = oralocal)
&&&&&&&&&(INSTANCE_NAME = oralocal_node2)
ORALOCAL_NODE3 =
&&&(DESCRIPTION =
&&&&&(ADDRESS_LIST =
&&&&&&&(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.3)(PORT = 1521))
&&&&&&&(CONNECT_DATA =
&&&&&&&&&(SERVICE_NAME = oralocal)
&&&&&&&&&(INSTANCE_NAME = oralocal_node3)
###### DATA GUARD配置(primary库和standby库都需要配置)##############
&&(DESCRIPTION =
&&&&(ADDRESS_LIST =
&&&&&&(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.2)(PORT = 1521))
&&&&(CONNECT_DATA =
&&&&&&&&&&(SERVER=DEDICATED)
&&&&&&&&&&(SERVICE_NAME = oralocal)
&&(DESCRIPTION =
&&&&(ADDRESS_LIST =
&&&&&&(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.1)(PORT = 1521))
&&&&(CONNECT_DATA =
&&&&&&&&&&(SERVER=DEDICATED)
&&&&&&&&&&(SERVICE_NAME = oralocal)
另外需要注意的2点情况:
(1)如果tnsnames中的service_name配置错误,配置成了instance_name了,这个时候会发生tnsping能通,但是 sqlplus连接不上的奇怪情况。报错ORA-12514: TNS:listener could not resolve SERVICE_NAME given in connect descriptor。这个时候查错的时候,需要检查对应的service_name。
(2)如果远程数据库是rac,而且本地客户端端远程数据库处于不同的网段,通过公网链接,rac对外的ip映射只有一个,即只映射到一个节点。请注意在 客户端配置tnsnames的时候按照单机的情况来配置。呵呵,dba不仅仅要学习oracle,了解一些网络的知识,特别是自己系统的网络架构,也是需 要的。
1. 开-闭原则(对扩展开放,对修改关闭)
2. 里氏替换原则(父类的方法都要在子类中实现或者重写)
3. 依赖倒转原则(要针对接口编程,不要针对实现编程)
4. 接口隔离原则
5. 合成/聚合复用原则(尽量使用合成/聚合,而不是使用继承)
6. 迪米特法则(talk only to your immediate friends)
用下面命令:sudo rm /etc/fonts/conf.d/49-sansserif.conf 在应用程序-&附件-&终端 中执行就可以了.已经测试
准备工作:下载httpd.2.2.9.tar.gz
安装apache2.2
tar zxvf httpd.2.2.9.tar.gz
cd httpd.2.2.9
./configure --enable-dav --enable-so --prefix=/opt/apache2.2
说明:--enable-dav允许Apache提供DAV协议支持;--enable-so允许运行时加载DSO模块, --prefix指定apache的安装目录
make install
说明:在configure与make很可能会出现一些fail,而往往是因为缺少一些必要的库,就直接安装一下apt-get install *****,即可,我安装出现过三个,反正这个比较直观
这样,apache 应该安装好了,测试一下,/opt/apache2/bin/apachectl -k start, 在浏览器里输入:http://locahost
正常情况下应该出现It works!
1.首先下载ubuntu-9.10-desktop-i386.iso()文件
存放在C盘(ntfx/fat32)的根目录下;
2.下载Grub4rDos(),将grldr和grub.exe放入C盘根目录;
3.从ubuntu-9.10-desktop-i386.iso文件中复制menu.lst文件到c盘根目录,在最后加入如下内容:
title Install ubuntu
find --set-root /ubuntu-9.10-desktop-i386.iso
kernel /vmlinuz boot=casper find_iso=/ubuntu-9.10-desktop-i386.iso
initrd /initrd.gz
4.复制ubuntu-9.10-desktop-i386.iso里 Casper和 .disk两个目录到C盘根目录;
5.复制ubuntu-9.10-desktop-i386.iso里Casper目录中的vmlinuz和initrd.lz文件到C盘根目录,将initrd.lz文件修改为initrd.gz
6.修改C盘根目录下的boot.ini文件,在文件末尾加入下面代码:
C:\grldr="GRUB"
7.重新启动,在启动菜单处,选择Grub,然后再选择Install Ubuntu就可以开始安装了
8.安装时选择手动分区,可以保留原来的windows系统
9.可能会无法卸载isodevice分区(我遇到了)到挂载的时候,同时按下Ctrl+Alt+F2,然后在:后输入sudo umount -l
/isodevice 输好后,然后回车,再同时按下 Ctrl+Alt+F7,回到安装界面
基本上就ok了
近几年,随着LDAP(Light Directory Access
Protocol,轻量级目录访问协议)技术的兴起和应用领域的不断扩展,目录服务技术成为许多新型技术实现信息存储、管理和查询的首选方案,特别是在网
络资源查找、用户访问控制与认证信息的查询、新型网络服务、网络安全、商务网的通用数据库服务和安全服务等方面,都需要应用目录服务技术来实现一个通用、
完善、应用简单和可以扩展的系统。
对于任何一家大IT网络的企业来说,IT系统中的目录服务功能是必不可少的。如果一个在全国有多个分支机构的企业,已经有了一个内部网络系统,每一个分支
机构都有一个局域网,局域网之间通过专线或者VPN通道连接在一起,那么,如何将网络中的资源和信息有效地管理起来呢?通常,这个企业可以在每一个分支机
构或者每个城市建立一个目录服务器,任何地方的员工连接到本地目录服务器就可以访问到目录树中所有的信息,在目录服务器之间复制目录信息,以保持同步。比
如,人事部门看到的人员目录与财务部门、设备管理部门看到的人员目录是完全一致的,他们所使用的应用系统无须再建立另一套目录结构。当然,这一切都是要经
过身份验证的。
目录服务有着如此重要的作用,但在过去,企业通常采用基于Windows的目录服务器,Linux在这方面相形逊色。作为Windows的核心内容,目录
服务被企业IT人员认为是Windows与Linux相比最具竞争力的部分,也成为Linux产品架构中的软肋。随着Red Hat
Enterprise Linux 4.0出现,这个情况已经改变了。RHEL 4 内附的LDAP 服务器为OpenLDAP 2.2.13-2
版,OpenLDAP 2.x包括数个重要功能:
&&& 1.&支持LDAPv3 - OpenLDAP 2.0
除了其它改善外还支持SASL(SimpleAuthentication and Security Layer)、TLS(Transport
Layer Security)以及SSL(Secure Sockets Layer)。LDAPv2 之后通讯协议很多的改变都是为了加强LDAP
的安全性。
&&& 2.&支持IPv6 - OpenLDAP 支持新一代的因特网通讯协议第6 版。
&&& 3.&LDAP Over IPC - OpenLDAP 能够使用IPC 在系统内进行通讯。这可以避免使用网络通讯以增加安全性。
&&& 4.&使用新的应用程序界面: 改善程序设计人员联机及使用程序的方法。
&&& 本文将以Red Hat Enterprise Linux 4.0 为例,介绍在Linux平台使用OpenLDAP上建立目录服务器。
一、LDAP协议简介
&&& LDAP(轻
量级目录访问协议,Lightweight Directory Access
Protocol)是实现提供被称为目录服务的信息服务。目录服务是一种特殊的数据库系统,其专门针对读取,浏览和搜索操作进行了特定的优化。目录一般用
述性的,基于属性的信息并支持精细复杂的过滤能力。目录一般不支持通用数据库针对大量更新操作操作需要的复杂的事务管理或回卷策略。而目录服务的更新则一
般都非常简单。这种目录可以存储包括个人信息、web链结、jpeg图像等各种信息。为了访问存储在目录中的信息,就需要使用运行在TCP/IP之上的访
问协议—LDAP。
LDAP目录中的信息是是按照树型结构组织,具体信息存储在条目(entry)的数据结构中。条目相当于关系数据库中表的记录;条目是具有区别名
DN(Distinguished
Name)的属性(Attribute),DN是用来引用条目的,DN相当于关系数据库表中的关键字(Primary
Key)。属性由类型(Type)和一个或多个值(Values)组成,相当于关系数据库中的字段(Field)由字段名和数据类型组成,只是为了方便检
索的需要,LDAP中的Type可以有多个Value,
而不是关系数据库中为降低数据的冗余性要求实现的各个域必须是不相关的。LDAP中条目的组织一般按照地理位置
和组织关系进行组织,非常的直观。LDAP系统结构图见图1.
图1 LDAP系统结构图
LDAP的信息是以树型结构存储的,在树根一般定义国家(c=CN)或域名(dc=com),在其下则往往定义一个或多个组织
(organization)(o=Acme)或组织单元(organizational units)
(ou=People)。一个组织单元可能包含诸如所有雇员、 大楼内的所有打印机等信息。
此外,LDAP支持对条目能够和必须支持哪些属性进行控制,这是有一个特殊的称为对
象类别(objectClass)的属性来实现的。该属性的值决定了该条目必须遵循的一些规则,其规定了该条目能够及至少应该包含哪些属性。例
如:inetorgPerson对象类需要支持sn(surname)和cn(common
name)属性,但也可以包含可选的如邮件,电话号码等属性。dn :一条记录的位置;dc :一条记录所属区域;ou
:一条记录所属组织;cn/uid:一条记录的名字/ID。OpenLdap是一个正在得到日益普遍应用的开源软件,和LADP完全兼容。
二、安装OpenLDAP服务器
果在系统安装时已经把安装上了,那么我们就可以直接对OpenLDAP进行配置使用了。否则,可以通过Rat Het Enterprise
Linux图形界面下的“添加/删除应用程序”工具进行安装。具体方法是,选择“主选单”→“系统设置”→“添加/删除应用程序”,在弹出的界面中选中
“网络服务器”的“OpenLDAP-server”,单击“更新”即可,见图2。
图2 安装OpenLDAP 服务器软件
如果你使用的是其他版本的Linux,那么通常要安装以下软件包:OpenLDAP、&&& OpenLDAP-servers、&&&
OpenLDAP-clients、&&& OpenLDAP-devel
,OpenLDAP-2.0是必要套件,一定要先安装;OpenLDAP-servers是服务器套件;OpenLDAP-clients是操作程序套
件;OpenLDAP-devel是开发工具套件。
三、配置OpenLDAP 服务器
&&& 以RedHat Linux 4所为例字介绍OpenLDAP 服务器配置文件。主要文件见表1。
&&& 1.&建立Linux用户账号
&& &使用文本编辑建立一个文本文件,文件名称myusers.list 内容如下:
&&& user1 123456
&&& user2 123456
&&& user3 123456
&&& user4 123456
&&& user5 123456
&&& user6 123456
&&& user7 123456
&&& user8 123456
&&& user9 123456
&&& 注意:第一个字段为使用者名称;第二个字段为预设密码,中间必须用空格隔开。然后使用文本编辑建立另外一个文本文件,文件名称add-users.sh内容如下:
&&& #!/bin/bash
&&& for i in `awk '{print $1}' users.list `
&&& useradd $i
&&& grep "&$i&" users.list | awk '{print $2}' | passwd --stdin $i
&&& 建立Linux用户账号:
&&& #chmod 775 add-users.sh
&&& #./add-users.sh
&&& 2.修改缺省配置文件:/etc/OpenLDAP/slapd.conf,请把蓝色部分按照您的具体情况填写。
&&& database bdb
&&& suffix "dc=myexample,dc=com"&&& #一条记录所属区域#
&&& rootdn "cn=Manager,dc=example,dc=com"
&&& rootpw 1234567&&&&&&&&&&&&&&&& #定义LDAP根管理员的密码
&&& 3.将原有Linux 账号转为LDIF 文件
&&& 原有Linux 服务器上有user1-user9 这些使用者账号,密码均为123456;面便是转换的步骤:
&&& # cd /usr/share/OpenLDAP/migration& #转换文件的目录#
&&& # vi migrate_common.ph
&&& $DEFAULT_MAIL_DOMAIN = "";
&&& Default base
&&& $DEFAULT_BASE = "dc=myexample,dc=com";
&&& # ./migrate_passwd.pl /etc/passwd & /worktmp/user.ldif
&&& # ./migrate_group.pl /etc/group & /worktmp/group.ldif
&&& 4. 建立example.ldif,ou_people.ldif, ou_group.ldif三个文件
&&& #cat example.ldif
&&& dn: dc=example,dc=com
&&& dc: example
&&& objectClass: dcObject
&&& objectClass: organizationalUnit
&&& #cat ou_people.ldif
&&& dn: ou=people, dc=example, dc=com
&&& objectclass: organizationalunit
&&& ou: people
&&& #cat ou_group.ldif
&&& dn: ou=group, dc=example, dc=com
&&& objectclass: organizationalunit
&&& ou: group
&&& 5. 转换原有Linux 账号至OpenLDAP服务器上:
&&& #slapadd -vl example.ldif
&&& added: "dc=example,dc=com" ()
&&& #slapadd -vl ou_people.ldif
&&& added: "ou=people,dc=example,dc=com" ()
&&& #slapadd -vl ou_group.ldif
&&& added: "ou=group,dc=example,dc=com" ()
&&& #slapadd -vl user.ldif
&&& #slapadd -vl group.ldif
四、启动OpenLDAP服务器
&&& #chown ldap.ldap /var/lib/ldap/*& #把/var/lib/ldap/目录内的档案变更拥有者及群组为ldap。
&&& 然后可以通过Rat Het Enterprise Linux图形界面下的选择“主选单”→“系统设置”→“服务器设置”-“服务”,在弹出的界面中选中ldap”,单击“重新启动”即可,见图3。
图3 服务器启动界面
&&& 利用ldapsearch 指令可搜寻LDAP 服务器的数据,若是可看到以下的数据,代表整个设定正确无误。
&&& # ldapsearch -x -b "dc=example,dc=com"
&&& ………
&&& # user9, Group,
&&& dn: cn=user9,ou=Group,dc=myexample,dc=com
&&& objectClass: posixGroup
&&& objectClass: top
&&& cn: user9
&&& userPassword:: e2NyeXB0fXg=
&&& gidNumber: 508
&&& ………
五、配置Linux OpenLDAP客户端
&&& 在客户端执行authconfig-gtk命令,进入认证配置界面,进入图4所示的界面中配置LDAP服务器的信息。在LDAP 服务器处 指定 LDAP 服务器的 IP 地址。
图4 添加OpenLDAP服务器IP地址
&&& 打开 /etc/ldap.conf 文件,下面是一些用于配置的关键指令。&
&&& 到此为止我们已经配置完成Liunx OpenLDAP目录服务器、客户端。
要安装 MySQL,可以在终端提示符后运行下列命令:
sudo apt-get install mysql-server
sudo apt-get install mysql-client
sudo apt-get install php5-mysql
// 安装php5-mysql 是将php和mysql连接起来
一旦安装完成,MySQL 服务器应该自动启动。您可以在终端提示符后运行以下命令来检查 MySQL 服务器是否正在运行:
sudo netstat -tap | grep mysql
当您运行该命令时,您可以看到类似下面的行:
tcp 0 0 localhost.localdomain:mysql *:* LISTEN -
如果服务器不能正常运行,您可以通过下列命令启动它:
sudo /etc/init.d/mysql restart
mysql -uroot -p
(输入mysql的root密码)
配置 MySQL 的管理员密码:
(输入mysql的root密码)
配置 MySQL 的管理员密码:
我还在想象着我的18岁,可我却马上30岁了!真的吗?不愿意去想,但不得不面对。
曾经的年少轻狂,早已荡然无存。曾经的花样年华,早已悄然而逝。80后的我们已经开始站在了20岁的尾巴上,面对三十而立,还有多少人可以昂着头,信誓旦
旦地说,我们依然年轻?是的,年轻就是资本,面对着90后的异军突起,80后的我们是否还年轻?
曾经,骄傲的我们都怀抱着崇高的理想,奔走在陌生的城市,只为寻找内心深处最真的梦想。曾经,生活得再艰难,都会想着只要自己努力,就一定可以取得成
功。曾经,单纯的认为,就算很小很小的一个房间,都可以经营自己最美的爱情。当事业依然碌碌无为的时候,当爱情变得虚无缥缈的时候,80后的我们,是不是
依然还会说,年轻不怕失败?
终有一天,我才发现,原来,80后的我们,都早已经老去。我们不再轻狂,我们不再潇洒,我们不再坦荡,我们不再微笑,我们有的是对于生活的压力,我们有的是对于婚姻的恐惧,我们有的是对于未来的失望,我们有的是对于困难的却步.
面对工作:我们已经没有了更多的激情,只希望能够有一份足够安稳的工作。有风险的工作都已经被排斥了,曾经一千个一万个不愿意走关系找工作的我们,面
对着事业的平淡,连收入都无法给予自己温饱的时候,我们不得不选择屈服,放下原本最高傲的脸面,开始寻求人际关系的最大化。工作的艰辛,对于我们无所畏
惧,重要的是可以一直将这份工作持续。
面对感情:已经不把婚姻当成爱情的升华,而是把婚姻当作是亲情。我们不再渴望一份浪漫而刺激的爱情,而是奢望一段幸福而美满的婚姻。曾经固执的以为,
相亲那只不过是70后,或者说更早一代的婚姻方式,然而等到现在才发现,相亲已经成为了80后婚姻的主流方式。一场场地相亲,一次次的绝望,已经对相亲产
生了麻木和排斥,但依然奔波在相亲场上。难怪,一个朋友说:“我不是在相亲,就是在相亲的路上。”
面对穿着:曾经过度讲究品牌感觉的我们,对于品牌已经变得陌生,橱柜里的昂贵的衣服,让工薪阶层的我们没有勇气再去试穿。赚钱之后,才知道,原来生活
是多么的不容易。我们不再讲究品牌,而更注重衣服的质量以及用途,适合穿着的场合,不再会因为一时的冲动,去血拼那些打折的衣服,衣服不在于多,而在于体
面。合适的,才是我们所需要的,品牌只不过是一个虚幻的东西。
面对社交:当越来越多的朋友有了家庭之后,已经没有多大的勇气再和他们一起聊聊关于生活,因为在他们的口中,都是关于家庭的,而单身的80后更注重个
人情感的书法。曾经极度热爱的酒吧、KTV都不再喜欢了,已经忍受不了那种嘈杂、疯狂的环境,更喜欢坐在咖啡厅里或者茶馆里,看看书,听听音乐,享受咖啡
的苦涩,亦或者茶的清香。
面对家庭:家庭超越了爱情和友情,一切都将家庭放在第一位。没有了原本的冲动,了解了父母的苦心,懂得去体谅他们的无可奈何。原本单纯的家庭之间的关
系,在某一天突然变得清晰,了解了人与人之间的关系,原来一直都不那么单纯,最值得相信的,除了父母,还有自己。越来越讨厌,走亲访友,因为总是会有很多
人问题,关于婚姻的某个问题。
面对娱乐:突然发现,手机使用的频率越来越少了,短信也越来越少了,有的时候甚至不愿意发短信,宁可打个电话,匆匆挂掉。QQ也不像以前那样拼命地闪
个不停,退出了许多的群,有些群碍于面子,一直处于屏蔽,只是偶尔选择几个群聊几句就隐身。再也不会为了游戏,废寝忘食地玩,更多的时候会捧着一本书,安
静地看着。
面对购物:总会想着买东西的时候,是不是有什么赠品,而不会看着哪个好看就买哪个。不再会像以前那样,为了得到某样赠品,去买某样自己不喜欢的东西。
购物早已不是逛街了,而变成了有目的性的行为,买完自己想要的东西,就匆匆离开。一些漂亮,精致的小摆设,只是在柜台上欣赏完之后,放回去,再也不会带回
家之后,塞进箱底。
面对一切的一切,我们都已经会了深思熟虑,我们的心中,早已没有了童话。我们浪费掉了太多的青春,那是一段如此自以为是、又如此狼狈不堪的青春岁月。有欢笑,也有泪水;有朝气,也有颓废;有甜蜜,也有荒唐;有自信,也有迷茫。
我们敏感,我们偏执,我们顽固到底地故作坚强;我们轻易的伤害别人,也轻易的被别人所伤。
我们追逐于颓废的快乐,陶醉于寂寞的美丽;
我们坚信自己与众不同,坚信世界会因我而改变;
我们觉醒其实我们已经不再年轻,我们前途或许也不再是无限的,其实它又何曾是无限的?
80后的我们,已经开始承认我们老了,没有了90后的青春,没有90后的激情,我们有的只是为了生活进行奔波着的疲惫的心。偶尔微笑着告诉自己:三十
岁的男人,我的美好年华才刚刚开始。80后的我们,打一场酣畅淋漓球,也都心有余而力不足。很久没有运动,开始显露臃肿的啤酒肚。
我不禁感叹:原来,80后的我们都早已老去,只是我们一直不愿意服老。
“今天,之所以区别于昨天,恰恰是因为昨天的感受依然在我心中。”
sudo aptitude install gnoCHM
1995,Auer曾在文献[AUER95]中指出:
1.应当根据行为而不是状态定义一个类。也就是说,一个类的实现首先建立在行为基础之上,而不是建立在状态的基础之上。
2.在实现行为时,是用抽象状态而不是用具体状态。如果一个行为涉及到对象的状态时,使用间接的引用而不是直接的引用。换言之,应当使用取值方法而不是直接引用属性。
3.给操作划分层次。一个类的行为应当放到一个小组核心方法(kernel method)里面,这些方法以很方便地在子类中加以置换。
4.将状态属性的确认推迟到子类中。不要在抽象类中过早声明属性变量,应该将它们尽量地推迟到子类中去声明。在抽象超类中,如果需要状态属性的话,可以调用抽象的取值方法,而将抽象的取值方法的实现放到具体子类中。
如果能够遵从这样的原则,那么就可以在等级结构中将接口与实现分隔开来,将抽象与具体分割开来,从而保证代码可以最大限度地被复用。
Ctrl-C:SIGINT中断程序
Ctrl-\:发出SIGQUIT信号中断程序
Ctrl-H: 删除一个字符(包括中文字符)
Ctrl-U:删除自上一个 EOF 或行首以来的输入
Ctrl-D:文件尾字符,这个字符使得 tty 缓冲中的内容被送到等待输入的用户程序中,而不必等到 EOL。
Ctrl-Q:开始字符(所有缓冲区字符进入shell)
&Ctrl-S: 停止字符(所有输入不进入shell)
Ctrl-Z: 挂起字符
Ctrl-V: 字面上的下一个(常用于输入特殊字符,如windows文本文件特有的^M)
Ctrl-W: 删除左边词。
Ctrl-K:删除右边所有字符
&Ctrl-O,Ctrl-J,Ctrl-M:开始新行
Ctrl-A:行首
Ctrl-E:行尾
Ctrl-B:左移
Ctrl-F:右移
Ctrl-L:翻页
Ctrl-P:上一个命令
Ctrl-N:下一个命令
Ctrl-Y:粘贴
======================================================================
-论坛人很多,高手也多,不过好像都在潜水& &&&
-也很不错,文章很好,但是就是商业性浓了点。& &&&
- 非常有系统性,而且推出的java远程教育是中国最全面的scjp远程教育。
-灰狐动力,有个jfox,而且很多关于企业级应用的东西& &
-Matrix技术,不少java文章和资源,论坛牛人多,人气略差。
-java学习可下载不少,论坛人气也一般。& &&&
-很多好文章,而且有出书。& && && && && &
-很多java设计模式的资料。& && && && && && && &
-很多资料和书籍下载,文摘也有不少,就是下载要扣分。
-论坛不错,人气够旺,不过有时候老上不去。& && &
-还可以。我去的较少。& && && && && && && &
-同上。& && && && && && && && && &&&
-ibm非常不错,里面的好文章层出不穷啊。& && && && && && && && && && && && && &
-赛迪还算比较有特色,原创很多。& && && && &
-zdnet也不错哦,精彩。& && && && && && &
水木清华java版 -很多大牛,真的很多,呵呵。& && && && && &&&
-很多好文章,原创比较多。& && && && && && &
==============================================================
-不用多说吧。
-apache很多开源项目,无论是拿来用还是看源代码都很不错
-orielly的,java资源很多
- 很多java文章和tips
-很多文章,还有论坛
-关于应用的比较多,比如服务器
-开源之祖啊。
====================================================================
JAVA开发者应该去的20个英文网站
&&开发者年鉴一书的在线版本. 要想快速查到某种Java技巧的用法及示例代码, 这是一个不错的去处.
&&O'Reilly的Java网站. 每周都有新文章
&&官方的Java开发者网站 - 每周都有新文章发表
&&由 维护的Java技术文章网站
&&Sun公司维护的一个Java社区网站
&&Cnet的网站 - 所有的技术文章, 以Java为主.
&&的Developerworks技术网站; 这是其中的Java技术主页
&&最早的一个Java站点. 每周更新Java技术文章
&&DevX维护的一个Java技术文章网站
&&JavaPro在线杂志网站.
&&Java Developers Journal的在线杂志网站.
&&位于Java.net的一个Java桌面技术社区网站.
&&这是一个讨论所有Java服务器端技术的网站.
&&提供Java评论服务. 包括各种framework和应用程序
&&一个非常棒的采用Q&A形式的Java技术资源社区.
&&一个论坛,得到Java问题答案的地方,初学者的好去处。
&&comp.lang.java的FAQ站点 - 收集了来自comp.lang.java新闻组的问题和答案的分类目录.
&&来自SUN公司的官方Java指南 - 对于了解几乎所有的java技术特性非常有帮助.
&&互联网上最活跃的一个Java Blog网站.
&&来自的Java新闻和技术文章网站.
水木清华java版 的地址是下面的,需要注册,登陆后进去找找吧
linux&查看进程信息
ps&–aux
查看进程的命令有很多,我只是列出了我最常用的几个。
netstat&–tln&//查看服务监听端口
netstat&&&&&&//查看进程号
ps&–aux&&&&&//查看进程号
ps&–aux&|&more&//全部查看
ps&–ef&|&grep&mysql&//查看mysql的进程
kill&-9&3306&//强制杀掉进程号3306
防火墙的设置
设置防火墙:&setup
查看防火墙设置:&iptables&–L
安装Mplayer
sudo apt-get install mplayer mplayer-fonts mplayer-skin mozilla-mplayer
安装解码器
sudo apt-get install w32codecs
回车然后输入你的用户密码,安装解码器
w32codecs是用于播放wmv、rmvb等常见windows平台下的多媒体文件,但如果你的电脑CPU是AMD64,请执行
sudo apt-get install w64codecs
提示一下:如果w32codecs、w64codecs没源的话,那么自己下面地址下载对应的beb后缀的文件后双击安装
http://www.debian-multimedia.org/pool/main/w/w32codecs/
http://www.debian-multimedia.org/pool/main/w/w64codecs/
现在通过 应用程序-&影音-&SMplayer Movie Player可以播放大部了分的多媒体了
安装Smplayer
强烈建议您安装Smplayer,这个是mplayer强大的皮肤加前端
如法炮制:
sudo apt-get install smplayer
以后通过应用程序-&影音-&Smplayer打开Mplayer就好了,看一看它有多么豪华
2009年11月
252627282930311234567891011141518192021222427283012345
阅读排行榜
评论排行榜

我要回帖

更多关于 烟花中 的文章

 

随机推荐