Windows / Linux 下使用符号链接完全指南

目录 技术

在 Windows 下“创建快捷方式”是很常用的一个功能,快捷方式是一个后缀为 .lnk 的特殊文件,其实这跟 *nix 环境下的符号链接根本不是一回事情。

如果不明白什么是符号链接的话,可以参考这篇文章。另外,符号链接有软硬之分,区别可以参考这篇文章

这里有篇文章: Complete Guide to Symbolic Links(symlinks) on Windows or Linux,讲了如何在 Windows 和 Linux 使用符号链接。

简单翻译归纳如下:

在任意版本的 Windows 资源管理器中创建符号链接

用一个免费的工具 Link Shell Extension可以很方便的创建符号链接,不过在安装这个工具之前,还要先安装 Visual Studio 2005 Redistributable:
Visual Studio 2005 Redistributable

然后再安装 Link Shell Extension:

要创建符号链接,首先在资源管理器中定位到创建符号链接的源文件或是文件夹,然后点击右键,选择“Pick Link Source”:

再换目录到想要创建符号链接到的目标文件夹,在空白处单击右键,选择“Drop as…”,然后再选择一个符号链接方式:

Windows XP 下也一样可以创建:

通过命令行创建符号链接:
Windows Vista/7 终于提供了命令行 mklink 创建真正意义上的符号链接, 不过运行这个命令还需要管理员权限:

然后在命令行里面就可以用 mklink 命令创建符号链接了,不过遗憾的是,这个命令所需的参数格式跟 *nix 下的不同,而且傻傻的还需要用户来指定不同参数来决定创建文件还是文件夹的符号链接。mklink 命令行参数为:

现在也有另外一个开源的工具 ln 可以下载,提供了跟 *nix 下一样的命令行方式创建符号链接,而且也不用再指定文件还是文件夹了。使用方法比较简单,就不赘述了。

Windows XP 可以用 Junction 这个免费工具,把放到 PATH 中去以后,在命令行中如下运行命令就可以了:

*NIX 下创建符号链接:
这个简单,用 ln 命令来搞定了:

如何修改浏览器Cookie

目录 技术

网站通过 Cookie 保存了我们访问网站的信息,在不同的浏览器中修改 Cookie 可以如下操作:

Firefox:
安装 Web Developer 插件,装完重启之后会出现一排新的工具栏,点击 Cookies -> Add Cookie… 即可增加/修改一个Cookie了。

Opera:
Opera 可以在 菜单 -> 工具 -> 高级 -> Cookie… 对话框中找到当前的页面的 Cookie 项,选中以后点“编辑…”即可修改。如果修改不成功的话,有可能是因为启用了 Opera Turbo 加速器导致的,可以检查 菜单 -> 工具 -> 快速参数(F12) -> 启动Opera Turbo 是否开启,如开启着的话,把它关闭以后再试试是不是可以了。

Chrome:
安装 Edit This Cookie 插件,之后点击插件图标即可操作 Cookie。

IE:
可以用 IECookiesView 碰碰运气,如果有其他更好的办法也请告知。

除上述工具之外,免费工具Fiddler 和商业软件 HttpWatch 可以通过设置断点,跨浏览器调试所有的 HTTP(S)流量,很好很强大。只是需要写脚本,就改 Cookie 这个功能没有上述专门的工具来的方便,有杀鸡用牛刀之嫌。

常用软件

目录 技术

Windows:

Notepad++: Windows 开源下的文本编辑器,另外也可以给 Notepad++ 换主题
Process Hacker: Windows 平台下的开源进程查看工具。
Sysinternals Suite: Windows 平台下的一些实用工具集合,已被 Microsoft 收购。
Cygwin: 许多 POSIX 系统(Linux, BSD, 等) 下自由软件移植到 Windows 上的集合,国内更新源推荐: http://mirrors.163.com/cygwin。
eMule: 开源的电驴版本,非 VeryCD 的 easyMule,推荐使用 eMule Mod 版本。
FastCopy: 日本人开发的一款 Windows 平台下的快速拷贝/删除的程序,开源。
FileZilla: 开源的 FTP 工具,支持 Windows, Mac OS X 及 Linux。
Search Everything: 可用来查找定位 Windows 机器上的文件/文件夹,体积小,速度快,免费。
TrueCrypt: 硬盘加密工具,支持 Windows, Mac OS X 及 Linux。


Linux (Ubuntu):

ubuntu-tweak: 国人开发的 Ubuntu 优化大师。
NoMachine NX: Linux 平台下的远程控制软件,速度优于VNC,开源的版本为:FreeNX
aMule: Linux 平台下的电驴。


软件开发 (Java及其他):

JD-GUI: Java 反编译工具,支持 Windows, Mac OS X 及 Linux。
Memory Analyzer(MAT): Java heap 分析工具,可用来查找内存泄露。
Squirrel SQL Client: 通过 JDBC 连接数据库的客户端软件。


关闭默认的 Windows 7 计划任务

目录 技术

默认 Windows 7 安装会自带一些计划任务,比如同步 feed 更新,上传用户体验数据,等等。这些当然最好是关掉的,而所有这些任务在系统的“计划任务”中都可以找到。

打开 Windows 7 “计划任务”可以有但不限于以下几个方法:

1.  “控制面板” -> “系统和安全” -> “管理工具” 之 “计划任务”;也可以直接上右上角的搜索框中直接输入“计划任务”,单击打开。

2.  开始菜单 -> “计算机” 上单击右键,再点“管理”。这里打开了“计算机管理”,在左侧的“系统工具”下即可找到“任务计划程序”。

3.  Win + R -> mmc taskschd.msc 打开“计划任务”; 或是 Win + R -> mmc compmgmt.msc 打开“计算机管理”。

打开“计划任务”之后,在左侧的“任务计划程序库”可以看到目前的一些计划任务,其中“User_Feed_Synchronization”这项就是做 feed 同步的,如果我们用不着 ie8.0 或是 ie9.0 的RSS源订阅功能的话,那就可以把它关掉,免得定期的会去调用程序 msfeedssync.exe 去同步RSS源数据。关掉的方法就是直接选中,右键,然后选择“禁用”就可以了。

另外在“任务计划程序库”下面,还有3个子项,分别是“Leader Technologies”, “Microsoft”, “WPD”,可以分别每个看下,看是不是需要的,不需要的话,就还是都关掉吧,免得系统偷偷的跑一些咱不要的程序。

比如“WPD”下有个任务,叫“SqmUpload”,描述是“This task uploads Customer Experience Improvement Program (CEIP) data for Portable Devices”,过期时间是 2015-5-2 8:00,这个任务是用来上传收集的用户体验数据的,至于是不是仅上传体验数据,还是其他的,我们就不得而知了,省事的话,还是关掉的好。同样选中,右键,然后“禁用”就好了。

另外在“Windows”下,也有很多跟“客户体验改善计划”相关的计划任务,也都是可以关掉的。当然一个个的关闭挺麻烦的,因为相关的任务还不少,要一次关掉“客户体验改善计划”的话,可以去“控制面板” -> “系统和安全” -> “操作中心” -> “更改操作中心设置”,点击“客户体验改善计划设置”,然后选择“否,我不想参与该计划(N)。”,再“保存更改”就可以了。(参考)

Windows7 CEIP disabled=

P.S. 另外有个好的习惯推荐下:可以让 Windows 每次打开程序的时候,都设置发个响声,这样要是有些定时的任务比如病毒之类的在后台跑着,不停的能听到声音,也是个提醒。这个可以在 “控制面板” -> “硬件和声音” -> “更改系统声音”里,把声音方案下的“程序事件”之“打开程序”设定一个声音就可以了。


查看占用端口的是什么程序

目录 技术

Windows XP 下,可以用 Fport 这个命令行程序来查看都是有哪些程序/进程占用了端口。原先这个工具是 Foundstone 公司开发的,后来 Foundstone 被 McAfee 收购之后,还是由后者提供免费下载,不过没有再继续开发了。所以最后的版本就是 v2.0,并不支持 Vista / Win7。 具体使用可以看这篇文章。程序界面如下:

fport command line interface


Windows 7 下,可以用 NirSoft 公司的免费工具 cports。 这是一个图形工具,可以定义过滤条件,使用很方便。 界面如下:

nirsoft - cports


Linux下,则可以用 netstat 和 lsof 命令。lsof 命令事实上不仅仅可以列出端口,它是 “list open file” 的缩写,而在 Linux 下,网络 Socket 也可以看作一种文件的,所以用 lsof 可以查看端口,同样也可以查看是哪些程序/进程打开了某一个硬盘文件,或是查看某个进程打开了哪些文件。具体命令的使用,查 man lsof 就行了,也可以参考这篇文章。另类的用法还可以用来lsof恢复删除的文件,说不定什么时候还真可以救救急的。

netstat vs lsof



[转载] “git checkout” 比 “cp -a” 快

目录 技术

原文出处: http://www.advogato.org/person/apenwarr/diary/369.html

文章中的链接对于了解 Linux, Git 的历史也很有帮助。以下为转载的博客内容:

2008-01-21: “git checkout” is faster than “cp -a”

<!– start of entry 200801/21 –> “git checkout” is faster than “cp -a”

It’s true. I’ve determined this experimentally. And it makes sense, too: if you’ve used “git-repack” on your repository, then you have a nice, compressed, sequential file that contains all the data you’re going to read. So you read through it sequentially, and write into the disk cache. Up to a certain size, there’s no disk seeking necessary! And beyond that size, you’re still only seeking occasionally to flush the write cache, so it’s about as fast as it gets.

Compare to “cp -a”, where for each file you have to read the directory entry, the inode, and the contents, each of which is in a different place on disk. The directory is sequential, so it’s probably read all at once and doesn’t need a seek. But you still have about two seeks per file copied, which is awful.

Even if your disk cache already contains the entire source repository, copying files requires more syscalls (= slow) than reading large sequential blocks of a single huge file. In other words, even with no disk access involved, git-checkout is still faster than “cp -a”. Wow.

In related news, check out this funny mailing list discussion from 2005, in which Linus defends his crazy ideas about merging. It reminds me of the famous “Linux is obsolete” discussion from back when Minix was clearly going to rule the world. Actually, it reminds me rather disturbingly of that, and the results we see now are very similar.

Here’s an excellent discussion of some of the brilliant design behind git.

Yes, I have become a true believer. The UI consistency needs work, though. The feature list grew really really fast, and it shows. <!– end of entry 200801/21 –>


Chrome 下重载 pac 代理设置

目录 技术

Chrome 浏览器中设置 socks 代理前面介绍过了。如果修改代理的方式,比如换成“直接连接”等,Chrome 是能马上探测到这种变化从而用新的代理设置的;但是如果修改了 pac 文件中的内容,不重启 Chrome 的话,是不会重新加载最新的 pac 代理设置的,每次都要重启的话那还是太不方便了。

其实这个问题是可以解决的,也很简单,进入 chrome://net-internals 或是 about:net-internals, 会出现一个很多 Tab 页的配置,选中 Proxy,然后点 “Re-apply settings”,就可以立即让改动的代理生效了。

关于 chrome://net-internals 的文档在此,还是挺有意思的。有人说这是 Chrome 自带的抓包工具。一个浏览器带抓包的功能,似乎有点越俎代庖,但是如果从 Chrome OS 的角度来看,则顺理成章了。

在 Wireshark 抓包中显示 snmp mib 名

目录 技术

Wireshark 是最富盛名的开源抓包工具了,在电信网管开发的日常工作中是不可或缺的,经常需要抓包分析。那有没有办法可以在抓到的包中直接显示 snmp mib 的名字,而不是 OID 呢?办法当然是有的,也很简单,在官方的文档里面就有说明了。这里讲下实际配置步骤:

1. 把 mib 文件放到 “C:\Program Files\Wireshark\snmp\mibs” 目录下。

2. 打开 “%APPDATA%\Wireshark\smi_modules” 文件,在里面按原有的格式,添加mib名字。

3. 修改 Wireshark 的配置,选中 “Enable OID resolution”,”Suppress SMI errors”(如下图)。修改之后关闭再重新打开 Wireshark 就生效了。

配置 Wireshark

注意事项:

1. 如果看到的配置界面跟上面的不一样的话,是 Wireshark 版本太低了,升级到最新的版本即可。

2. 不是所有的 mib 文件都能被正确的解析,这是一个已知问题,因为其用的开源的 mib 解析模块 libsmi 有问题。如果发现加了某几个 mib 之后 Wireshark 就启动不了了,那就还是把改动回退吧。

参考阅读:123

另外,因为要求 mib 文件的名字必须是 mib 模块的名字,但是存在文件名和模块名不一致的情况,写了个 groovy 脚本,对指定目录下的 mib 文件进行重命名:

import java.util.regex.*
def dir = new File('''C:\Program Files\Wireshark\snmp\mibs''')
def pattern = ~/(?ms).*^\s*([\w\-]+)\s*DEFINITIONS ::= BEGIN\s*$.*/
dir.eachFileRecurse{ f ->
	if ( f.file && f.name.endsWith(".mib") ) {
		Matcher m = pattern.matcher( f.getText() );
		if (m.matches()) {
			f.renameTo( f.parentFile.path + "\\" + m[0][1] )
			println '"' + m[0][1] + '"'
		}
	}
}

通过 http 代理使用 subversion

目录 技术

在公司的环境下,因为种种限制,往往不能很顺利的直接使用 subversion 访问外面的资源,需要用代理,解决之道通常有两种,记录一下。

1. repository 是 http:// 协议的,比如 google code 上的项目

在 Windows 上的话,可以打开 %APPDATA%\Subversion\servers 文件,找到最后的 [global] 部分,添加 http-proxy-host, http-proxy-port 等来添加代理,其他也有一些参数,如 http-proxy-username, http-proxy-password, http-compression, 需要的话也可以添加上。配置如下:

http-proxy-host = xxx.xxx.xxx.xxx
http-proxy-port = xxxx

Linux 也同理,可以修改 ~/.subversion/servers 文件来添加代理。

2. repository 是 svn:// 协议的

这时候用上面的方法在 servers 文件中添加的参数是没有用的,而办法可以参考这篇文章

Ubuntu 的话,可以先运行 apt-get install libnet-proxy-perl 安装代理脚本,然后运行下面的命令:

connect-tunnel -P proxy.company.com:8080 -T 10234:svn.example.com:3690 &
svn checkout svn://localhost:10234/path/to/trunk

另外也可以参考 apache 网站上的这篇文章