Author Archive

Debian安装配置Iptables防火墙

2011-07-23, 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, 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, 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, Posted in 人生百味 | 2 回复 | 查看全文>>

最近没有什么文章更新,又加了两个PageRank为0的链接.慢慢造成了我的网站PageRank由5降到4,现在直接就下降了1了,呵呵,又得全重新来过!不过无所谓,本来就不太在意这些个东西.

标签:

高性能JavaBean属性复制工具BeanUtils的实现

2011-06-25, 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的反射. 查看全文…

标签: , ,