I am LAZY bones? AN ancient AND boring SITE

分类: 'CLI软件' 的归档

vditool ── Vbox的磁盘文件工具

之前发的帖在这里,是说VBox的磁盘镜像文件比真实的虚拟系统的文件大很多,而且试过了用 VBoxManage modifyvdi 压缩过,几乎没有效果.看了一些文章,也试过很多方法,终于找到比较有效的了.
原理差不多是这样:VBox的动态扩展磁盘镜像,在虚拟系统要添加个文件的时候,镜像就跟着动态扩展;但是虚拟系统删除文件时,由于并不是把文件所占的空间全部清零(如果是的话,那些数据恢复公司就惨了),而是只修改了某些标志位,标明该已经删除,所以对应镜像来说,并不会自动减少.所以,为了压缩镜像文件,要做的事情也很明确,先在虚拟系统里面清零已经删除的文件,再重建镜像.
具体方法如下:
1.虚拟系统(我的是XP)里下载这个工具: http://www.microsoft.com/technet/sysinternals/Security/SDelete.mspx ,然后执行: sdelete -c c: 处理C盘,我的虚拟机就一个C盘.执行完了以后,就清零了,不过执行过程中会占光所有C盘的空间,当然vdi镜像文件也会增大设置的最大值.
这步也有看到有人用 eraser 这个软件的,但是我试了一下,这个软件不管用,不知道是不是我选错选项了.
2.真实系统里面,下载这个工具: http://www.virtualbox.org/download/testcase/vditool ,给足可执行权限,然后执行 vditool SHRINK XXX.vdi 稍等片刻,vdi文件的大小就成了虚拟系统的真实用量了.哈哈

bash下esc键的妙用

看到ee在他blog里说按两下 esc键,可以和tab一样补全.于是想到了还有写 esc 的小技巧,可以大家分享一下:
1.
最有用的用过是这个:你要建立一个文件夹,然后cd到里面去,而这个文件夹名字很长的时候,你只需要这样:
mkdir ThisIsAVeryLongDirectoryName 回车 cd {esc}{点号} 就会补全那一串 ThisIsAVeryLongDirectoryName 了.
其实这个是这样的,esc以后按个点点,意思是在当前光标所在位置,补上上一个命令的最后一个参数,也就是那个目录名了,这样是不是方便多了?当然这招也可以用在其他地方,另一个例子是: 可能上一个命令执行了 apt-cache show XXX软件包,了解了他的信息之后,下一步要安装/卸载了,就可以执行 apt-get install/remove {esc}{点号} 了.
2.
{esc}{<} 可以移到历史命令的第一个
{esc}{>} 可以到最后一个历史命令.这个可以用在,你想在历史里面找某个命令,结果按了若干下向上箭头后,没找到,快速回去的话,就不用一直按向下箭头了.
{esc}{backspace} 快速清除当前行输入,上面这种情况也可以用这招.或者用于命令输到一半的时候,却不想执行该命令了,就不用一个个字符删了.
3.
输入重复字母:如果要输入 ee ,可以这么按:{esc}{2}{e},如果要输入100个e,就可以这样: {esc}{1}{0}{0}{e},哈哈.
4.
{esc}{t} 可以瞬间大挪移,比如现在已经输入了 ab cd efg 然后光标停留在最后面,按下{esc}{t}之后,得到的是 ac efg cd,光标所在处的单词,会往前一个,哈哈,好玩吧.
5.
补全类:
除了按多次{esc}可以补全以外,还有更好玩的:
{esc}{~}可以补全本机上的用户名
{esc}{/}可以补全文件名
{esc}{@}可以补全主机名,localhost可以方便地用 lo补全.
还有很多,可以参考man bash 的readline一节.

调整了下PS1变量

.bashrc里面是这么写的:

  1. PS1='{$?}\[\e[01;31;44m\]\u\[\e[00;33;44m\]@\[\e[01;31;44m\]\h\[\e[00m\]:\[\e[04;34;47m\]\w\[\e[00m\]$ '

在原来的基础上,前面加了个上条命令的返回值,而且放在一行里面,反正不会很占地方,嘿嘿.
效果预览:
bash

========20090723 update========
现在的PS1已经更新为:

  1. PS1='`a=$?;if [ $a -ne 0 ]; then echo -n -e "\[\e[01;32;41m\]{$a}"; fi`\[\e[01;31;44m\]\u\[\e[00;33;44m\]@\[\e[01;31;44m\]\h\[\e[00m\]:\[\e[04;34;47m\]\w\[\e[00m\]$ '

HOWTO:ubuntu下刻录VCD

下载的动画片,想给邻居的小孩子刻录成VCD,好在他家的VCD机上播放,倒还真费了我不少功夫.为了避免后人走弯路,写点经验出来给大家分享.
其实最繁的倒不是刻录本身,而是视频格式的转换上.
刻录工具,搜索一下源,基本定位在 mkvcdfs(包含在vcdtools这个包里)和 cdrdao(包含在cdrdao包里).但是mkvcdfs命令需要的mpg格式,我下载的视频是avi格式的,于是一开始用 mencoder 转了N次,不管怎么转,mkvcdfs都不认,呵呵,就在我觉得没希望的时候,突然想到了ffmepg,man了一下,居然有 -target vcd 这样的参数,哈哈,真是 踏破铁鞋无觅处,得来全不费功夫啊.
现在知道mencoder转应该也是可以的,但是VCD对视频/音频编码方式,帧率,分辨率等都有非常严格的要求,所以mencoder的参数很难配.而ffmpeg的 -target vcd 参数,则可以一次性设置这所有的参数,很是方便.
现在贴上步骤:

工具安装:都是apt搞到: sudo apt-get install ffmepg vcdtools cdrdao

ffmpeg -i 1.avi -target vcd 1.mpg #转换第一个视频
ffmpeg -i 2.avi -target vcd 2.mpg #转换第二个视频
mkvcdfs 1.mpg 2.mpg #将视频合成,生成镜像文件,此命令会在当前目录生成一个 vcd_image.bin 文件(二进制镜像),和一个 vcd.toc 文件.后面的命令要用到后者.
sudo cdrdao scanbus #扫描刻录机在哪个接口上,这里输出:

  1. $ sudo cdrdao scanbus
  2. [sudo] password for lily:
  3. Cdrdao version 1.2.2 - (C) Andreas Mueller
  4.   SCSI interface library - (C) Joerg Schilling
  5.   Paranoia DAE library - (C) Monty
  6.  
  7. Check http://cdrdao.sourceforge.net/drives.html#dt for current driver tables.
  8.  
  9. Using libscg version 'ubuntu-0.8ubuntu1'
  10.  
  11. 1,0,0 : MATSHITA, DVD-RAM UJ-850S , 1.20

注意最后面一行的 1,0,0 的字样,最后一步就用这个命令刻录:
sudo cdrdao write –device 1,0,0 vcd.toc
这里的 –device 后面要用上面的输出代替.执行完了,就OK了,拿到VCD机上试试看吧!

遗留问题:
1.刻出来的盘到VCD机上播放,画面的最上方和最下方会有一块区域丢失,比如原本正常的字幕,只看到半行字了,而且画面有点轻微的倾斜.不知道是不是那VCD机的问题.
2.刻录出来的视频码率太高了,比我avi的源还高,导致一张VCD只能放两集,能不能降低码率,多放几集?
3.谁知道怎么刻录DVD?
有谁知道遗留问题的答案的话,千万不吝赐教哦~谢谢…

powertop

PowerTop是一个用来找出哪个程序频繁地使CPU脱离空闲(省电)状态的linux小程序,会根据结果实时给出合理建议,以使你的电池发挥最大的效能.intel开发的,不知道是否对AMD的CPU有效.
主页: http://www.linuxpowertop.org/
截图:
powertop

iptraf 命令行的网络监视软件

今天在找一个命令行下的网络监视软件,发现有个叫 iptraf 的,很不错,功能也很全面.
ubuntu下安装可以直接 apt-get install iptraf
截两个图:
screenshot-iptraf2.png
screenshot-iptraf4.png

[转]用gettext实现shell脚本国际化.

$ cat test.sh
#!/bin/bash
export TEXTDOMAINDIR=/usr/share/locale
export TEXTDOMAIN=test.sh
echo “$(gettext -s hello)”

编辑一个po文件:
$ cat test.sh.po
msgid “hello”
msgstr “你好!”

编译成mo文件:
$msgfmt -o test.sh.mo test.sh.po

复制到/usr/share/locale/zh_CN/LC_MESSAGES/
$sudo cp test.sh.mo /usr/share/locale/zh_CN/LC_MESSAGES/

中文:
$ export LANG=zh_CN.UTF-8
$ ./test.sh
你好!

英文:
$ export LANG=en_US.UTF-8
$ ./test.sh
hello

这里可以看到,gettext在locale是 zh_CN的时候,会去 TEXTDOMAINDIR 下面的 zh_CN/LC_MESSAGES 里面找mo文件,所以,TEXTDOMAINDIR也可以放在当前目录,只要里面有zh_CN这目录,并且里面的内容是正确的,这样就可以避免放文件到 /usr/share/local 时候所需的root权限.
参考: http://forum.ubuntu.org.cn/viewtopic.php?t=105507

[转]手把手教你把Vim改装成一个IDE编程环境(图文)

自己的vim一直是”丑陋”地在用着,很羡慕人家漂亮的VIM,今天看到一篇比较不错的文章.还来不及看完,记一下,以后再看:

http://blog.csdn.net/wooin/archive/2007/10/31/1858917.aspx

By: 吴垠

ssh反向连接

先介绍一下我这里的情况: 公司的电脑是在内部网里面,不可能有公网地址;家里的电脑是adsl拨号,有动态的公网IP,动态绑定到域名 xxx.xxx.org
如果现在想从家里ssh到公司的电脑,直接连接肯定是不行的,不过可以用以下方法:
1. 在公司电脑上执行: ssh -f -N -R 12121:localhost:22 xxx@xxx.xxx.org
2. 然后在家里的电脑上执行: ssh xxxx@localhost -p 12121 就可以成功连上公司的电脑了.

上面命令里面的 12121 是任一个本地端口(上面例子里面是家里电脑的端口),可以在合理的范围内任意指定.我的理解是这样的: 前一个命令相当于把公司机器的22端口(localhost:22) 映射到 家里机器的12121端口. 然后在家里电脑上直接ssh 本机的 12121 端口,数据就会被转发到公司机器了.就这么简单.

参考此文和 man ssh

刚又学了一招

以前一直用locate查找文件,也没想过它的工作原理,知道我那恢复过的gentoo系统里面出现了这种状况:
locate xxx
locate: warning: database /var/lib/slocate/slocate.db’ is more than 8 days old
什么都查找不了,google了一下,发现需要updatedb一下,嘿嘿,原来这个也有数据库的啊…以前见过updatedb这个进程,还在纳闷是什么进程呢,呵呵.