Author Archive
Debian安装配置Iptables防火墙
2011-07-23, Nortan Posted in 操作系统, 配置 | 3 回复 | 查看全文>>
服务器通常会安装防火墙,Debian上有很防火墙,Iptables为比较常用的免费防火墙,Iptables能够提供数据包过滤,网络地址转换(NAT)等功能.在Debian上手工配置Iptables的资料比较少,本文做一个详细的介绍.
第一步,首先确定你的系统已经安装Iptables.打开SSH终端,输入
whereis iptables
如果能看到如下类似信息,说明你已经安装了iptables
iptables: /sbin/iptables /usr/share/iptables /usr/share/man/man8/iptables.8.gz
如果不是这个提示,或者没有任何提示,那你的Debian上可能没有安装iptables
请使用如下命令安装:
sudo apt-get install iptables
注意:本文所有命令在普通帐号下完成,本普通帐号使用sudo具有root权限,本人不建议直接使用root用户 查看全文…
Debian更新出现NO_PUBKEY AED4B06F473041FA错误的解决办法
2011-07-22, Nortan Posted in 操作系统 | 我来说两句 | 查看全文>>
在更新Debian5的时候提示公钥错误,错误提示大概如下:
W: GPG error: http://mirrors.163.com lenny-proposed-updates Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY AED4B06F473041FA
W: GPG error: http://mirrors.163.com lenny/updates Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY AED4B06F473041FA
W: You may want to run apt-get update to correct these problems
目前可行,并且快速的解决的办法是:
aptitude install debian-archive-keyring
java操作Windows进程
2011-07-19, Nortan Posted in Java, 人生百味 | 我来说两句 | 查看全文>>
java对平台的依赖性不太大,所以对系统的一些处理一直不太人性化,比如系统托盘到JDK6才支持,而对进程的处理,如Windows进程,虽然可以很好的操作,但用到这个功能并会的人可能不太多.这里写了一个用java对windows进程操作的例子.
这个类完了了列出所有的进程,杀死指定PID的进程,杀死指定进程名的进程等等,当然有getTaskList这个方法怎么取PID我相信你懂了,只要真正看懂这个类,估计一般需要都可以满足了.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Collection; import java.util.Hashtable; public class JavaWindowsTaskManager { /** * 杀死一个进程 * @param task 进程号 * */ public static void killTask(Integer pid) { try { // 取得任务列表 Hashtable<Integer, WindowsTask> tasks = getTaskList(); WindowsTask task = tasks.get(pid); if(task != null){ Runtime.getRuntime().exec("tskill " + pid); } } catch (Exception e) { e.printStackTrace(); } } /** * 杀死指定名称的所有进程 * @param taskName */ public static void killTask(String taskName){ try{ Hashtable<Integer, WindowsTask> tasks = getTaskList(); Collection<WindowsTask> allTasks = tasks.values(); for(WindowsTask task: allTasks){ if(task.getName().equals(taskName)){ killTask(task.getPid()); } } }catch (Exception e) { e.printStackTrace(); } } /** * 返回当前机器的所有进程 * * @return */ public static Hashtable<Integer, WindowsTask> getTaskList() { Hashtable<Integer, WindowsTask> tasks = new Hashtable<Integer, WindowsTask>(); try { Process process = Runtime.getRuntime().exec("taskList"); InputStreamReader in = new InputStreamReader(process .getInputStream(), "GBK"); BufferedReader reader = new BufferedReader(in); String taskInfo = null; WindowsTask task = null; String tmp = null; while ((taskInfo = reader.readLine()) != null) { if (taskInfo.trim().length() > 0 && (taskInfo.contains("Services") || taskInfo .contains("Console"))) { System.out.println(taskInfo); task = new WindowsTask(); tmp = taskInfo.substring(0, 26); task.setName(tmp.trim()); tmp = taskInfo.substring(26, 35); task.setPid(Integer.valueOf(tmp.trim())); tmp = taskInfo.substring(35, 52); task.setSessionName(tmp.trim()); tmp = taskInfo.substring(52, 64); task.setSessionId(Integer.valueOf(tmp.trim())); tmp = taskInfo.substring(64, taskInfo.lastIndexOf("K")); tmp = tmp.replaceAll(",", ""); task.setMem(Long.valueOf(tmp.trim())); tasks.put(task.getPid(), task); } } } catch (Exception e) { e.printStackTrace(); } return tasks; } /** * 启动一个进程,传入的值可以是服务名,也可以是可执行文件的全路径名 * * @param task */ public static void startTask(String task) { try { Runtime.getRuntime().exec(task); } catch (IOException e) { e.printStackTrace(); } } } class WindowsTask { // 映像名称 private String name; // PID private Integer pid; // 会话名 private String sessionName; // 会话编号 private Integer sessionId; // 内存使用 private long mem; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getPid() { return pid; } public void setPid(Integer pid) { this.pid = pid; } public String getSessionName() { return sessionName; } public void setSessionName(String sessionName) { this.sessionName = sessionName; } public Integer getSessionId() { return sessionId; } public void setSessionId(Integer sessionId) { this.sessionId = sessionId; } public long getMem() { return mem; } public void setMem(long mem) { this.mem = mem; } }
PageRank又下降了
2011-07-01, Nortan Posted in 人生百味 | 2 回复 | 查看全文>>
最近没有什么文章更新,又加了两个PageRank为0的链接.慢慢造成了我的网站PageRank由5降到4,现在直接就下降了1了,呵呵,又得全重新来过!不过无所谓,本来就不太在意这些个东西.
高性能JavaBean属性复制工具BeanUtils的实现
2011-06-25, Nortan Posted in Java | 我来说两句 | 查看全文>>
JavaBean属性复制较好的工具有apache提供的Jakarta-Common-BeanUtils,不过他的性能不太近人意,我测试的一个JavaBean共有16个属性,使用Jakarta-Common-BeanUtils与直接使用get/set方法相比,差开800倍!如果是企业内部应用800倍的差别可能影响也没有多大,但如果你做是一个高性能的服务器800倍就是很大的问题.当然,Jakarta-Common-BeanUtils还有一个问题,就是你的项目中必须引入commons-beanutils-x.x.x.jar及等等相关的包,这个我很不喜欢!
不喜欢它,又想要它的功能,那就自己写一个简单的,这样还自主!当然实现这样的JavaBean属性复制工具,必须要满足两个要求才有意义,第一是比它要轻量,甚至一个类就要解决它,第二个性能一定要比它好,这是最关键的.
实现这样的JavaBean属性复制工具,肯定要乃至java的反射. 查看全文…