I am LAZY bones? AN ancient AND boring SITE

分类: '经验技巧' 的归档

Shell脚本转化成二进制文件

工具名称: shc
安装方法: sudo apt-get install shc
使用方法: shc -f xx.sh ,就会生成一个 xx.sh.x 的二进制可执行文件,执行这个可执行文件的效果和执行原shell脚本的效果一样,另外还会生成一个 xx.sh.x.c 的C源文件,自己编译这个源文件成二进制文件也是可以的.
另外这个工具好像还可以设置过期时间,到了这个预设的时间后,再执行二进制文件的话,就会输出一行已过期的信息(当然这个信息也可以自定义),不过我想这个功能一般用不着吧 :)

什么是有衬线字体与无衬线字体(serif VS sans serif)

在西方國家的字母體系,分成兩大字族:serif 及 sans serif。其中 typewriter 打字機字體,雖然也是 sans serif,但由於他是等距字,所以另獨立出一個 Typewriter 字族出來。
serif 的意思是,在字的筆畫開始及結束的地方有額外的裝飾,而且筆畫的粗細會因直橫的不同而有不同。相反的,sans serif 就沒有這些額外裝飾,而且筆畫粗細大致上是差不多。
像 Times、Times New Roman 等都是屬於 serif 的字體,而 Arial、helvetica 則是屬於 sans serif 的字體。
serif 和 sans serif 的一般比較
serif 的字體較易辨識,也因此易讀性較高。反之 sans serif 則較醒目,但在走文閱讀的情況下,sans serif 容易造成字母辨識的困擾,常會有來回重讀及上下行錯亂的情形。
serif 強調了字母筆畫的開始及結束,因此較易前後連續性的辨識。
serif 強調一個 word,而非單一的字母,反之 sans serif 則較強調個別字母。
在很小字的場合,通常 sans serif 會較 serif 字體較為清晰。
適用於不同用途
通常文章的內文、正文使用的是易讀性較佳的 serif 字體,這可增加易讀性,而且長時間閱讀下因為會以 word 為單位來閱讀,較不容易疲倦。而標題、表格內用字則採用較醒目的 sans serif 字體,他需要顯著、醒目,但不必長時間盯著這些字來閱讀。
像 DM、海報類,為求醒目,他的短篇的段落也會採用 sans serif 字體。但在書籍、報章雜誌,正文有相當篇幅的情形下,應採用 serif 字體來減輕讀者閱讀上的負擔。
中文的情況
在中文的情形也是有相當於 serif 的字體,例如明(宋)體就是 serif 的,他通常是和 Times Roman 字族來搭配的。而黑體、圓體就相當於是 sans serif 的字體。
在中文直排的情況,比較不容易顯現 serif/sans serif 之間的差異性,但是在目前中文橫排相當的普遍的情形下,以上所述及的易讀性、醒目性也是適用於中文。
很常看到中文出版書籍、雜誌,內文使用了不易閱讀,但卻很醒目的黑體或圓體,這對讀者來說,在長期閱讀之下很容易就引起眼睛不舒服,似乎是應該盡量避免才是。
serif VS sans serif

摘自: http://forum.ubuntu.org.cn/viewtopic.php?t=88959

调整Eclipse中树状列表的显示密度(转)

发了点牢骚,结果有人给推荐了这篇文章,不错,转一下.不过我喜欢Verdana字体,所以把字体改了,哈哈.

如果你在Windows和Linux两个平台下都使用过Eclipse,那么你一定注意到Windows下Eclipse项目列表的显示要比Linux下 紧凑许多。对于做开发的朋友来讲,在屏幕上同时看到的信息总是希望尽可能多,尽可能全,在这一点上目前的GNOME并不能让我们十分满意,它的GTK+控 件本身和控件之间的间隙占掉了不少本来就很有限的屏幕空间,尤其当屏幕分辨率不是特别高的时候。

Linux版的Eclipse默认使用GTK+2.0的控件,所以在默认的情况下,会和其他GTK应用程序(如OpenOffice.org)一样给人一 种不够密实的感觉。当然,这和GNOME的设计哲学不无关系,不过这不是本文主旨,就不深入讨论了,进入正题讲讲如何调整Eclipse树状列表的显示密 度。

基于GTK+2.0的程序在启动时会到用户的home目录找GTK+2.0的配置文件,即~/.gtkrc-2.0,Ubuntu下默认没有这个文件,需要我们自己创建。打开你习惯的编辑器,加入如下代码:

下载: .gtkrc-2.0
  1. style "eclipse" {
  2. font_name="Verdana 8"
  3. GtkTreeView::vertical-separator=0
  4. GtkTreeView::horizontal-separator=0
  5. }
  6. class "GtkTreeView" style "eclipse"

重启Eclipse应该就能看到效果了。如果你想做得更彻底,对所有常用的GTK+2.0控件都开刀的话,可以这样写:

下载: .gtkrc-2.0
  1. style "gtkcompact" {
  2. font_name="Verdana 8"
  3. GtkButton::default_border={0,0,0,0}
  4. GtkButton::default_outside_border={0,0,0,0}
  5. GtkButtonBox::child_min_width=0
  6. GtkButtonBox::child_min_heigth=0
  7. GtkButtonBox::child_internal_pad_x=0
  8. GtkButtonBox::child_internal_pad_y=0
  9. GtkMenu::vertical-padding=1
  10. GtkMenuBar::internal_padding=0
  11. GtkMenuItem::horizontal_padding=4
  12. GtkOptionMenu::indicator_size=0
  13. GtkOptionMenu::indicator_spacing=0
  14. GtkPaned::handle_size=4
  15. GtkRange::trough_border=0
  16. GtkRange::stepper_spacing=0
  17. GtkScale::value_spacing=0
  18. GtkScrolledWindow::scrollbar_spacing=0
  19. GtkExpander::expander_size=10
  20. GtkExpander::expander_spacing=0
  21. GtkTreeView::vertical-separator=0
  22. GtkTreeView::horizontal-separator=0
  23. GtkTreeView::expander-size=8
  24. GtkTreeView::fixed-height-mode=TRUE
  25. GtkWidget::focus_padding=0
  26. }
  27. class "GtkWidget" style "gtkcompact"

ssh登录时的欢迎词

如果你用ssh登录ubuntu的主机,一般会显示一个类似这样的信息:

Linux LLY 2.6.20-16-lowlatency #2 SMP PREEMPT Sun Sep 23 19:54:02 UTC 2007 i686

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
Last login: Thu Nov 8 11:28:17 2007 from 211.*.*.*

但是这个是可以修改的,你可以试试 cat /etc/motd 看到了吧,上面的内容出了最后一行,都在这个文件里面呢.所以,如果你的服务器是公用的,又想让人家一登录进来就看到某些信息,就可以修改这个文件啦.甚至,你可以写个脚本,定时更新这个文件的内容,以反映服务器的当前状况,那人家登录进来,感觉会相当不错的.

winSCP中文乱码问题

家里的UBUNTU gutsy 的locale是zh_CN.UTF-8的,用winscp登陆后,发现中文居然是乱码,一时也没找到设置的地方,也是放狗搜索,把结果记录一下:

要在登陆界面,把高级选项钩上(刚才就是疏忽了这点,嘿嘿),然后把那个 “服务器不支持UTF-8″选成关闭,再登陆,就大功告成了!哈哈哈~

winSCP

使用lsof恢复误删的文件

参考: http://www.bitscn.com/linux/command/200612/85236.html

先介绍一些文件的基本概念, 文件实际上是一个指向inode的链接, inode链接包含了文件的所有属性, 比如权限和所有者, 数据块地址(文件存储在磁盘的这些数据块中). 当你删除(rm)一个文件, 实际删除了指向inode的链接, 并没有删除inode的内容. 进程可能还在使用. 只有当inode的所有链接完全移去, 然后这些数据块将可以写入新的数据.

proc文件系统可以协助我们恢复数据. 每一个系统上的进程在/proc都有一个目录和自己的名字: 里面包含了一个fd(文件描述符)子目录(进程需要打开文件的所有链接). 如果从文件系统中删除一个文件, 此处还有一个inode的引用:

/proc/进程号/fd/文件描述符

接下来, 你需要知道打开文件的进程号(pid)和文件描述符(fd). 这些都可以通过lsof工具方便获得, lsof的意思是”list open files, 列出(进程)打开的文件”. 然后你将可以从/proc拷贝出需要恢复的数据.

下面介绍在Fedora Core 5系统上使用lsof恢复误删的文件:

环境
主机: 使用微睦独立主机, 一台基于vmware的虚拟独立主机.
系统: Fedora Core 5
内核: 2.6.16-1.2122_FC5
lsof版本:
[zhaoke@fedora5 ~]$ /usr/sbin/lsof -v
lsof version information:
revision: 4.77

预备工作:
如果你的系统没有安装lsof, 可以从作者网站或pbone获得.
作者网站: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
Pbone: http://rpm.pbone.net/

恢复过程:
首先, 我们需要创建一个文本文件, 删除然后恢复:

[zhaoke@fedora5 ~]$ man lsof | col -b > myfile

然后看一下文件内容:

[zhaoke@fedora5 ~]$ less myfile

你可以看到lsof所有的文本帮助信息.

现在按Ctrl-Z退出less命令, 然后在shell提示符下查看文件属性信息:

[zhaoke@fedora5 ~]$ stat myfile
File: `myfile’
Size: 116549 Blocks: 240 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 492686 Links: 1
Access: (0664/-rw-rw-r–) Uid: ( 505/ zhaoke) Gid: ( 505/ zhaoke)
Access: 2006-11-20 12:59:38.000000000 +0800
Modify: 2006-11-20 12:59:34.000000000 +0800
Change: 2006-11-20 12:59:34.000000000 +0800

没问题, 继续下面工作:

[zhaoke@fedora5 ~]$ rm myfile
[zhaoke@fedora5 ~]$ ls -l myfile
ls: myfile: No such file or directory
[zhaoke@fedora5 ~]$ stat myfile
stat: cannot stat `myfile’: No such file or directory

myfile文件删除了.

这时候, 你不要终止仍在使用文件的进程. 因为一旦终止, 文件将很难恢复.

现在我们开始找回数据, 首先用lsof查看一下:

[zhaoke@fedora5 ~]$ lsof | grep myfile

less 9104 zhaoke 4r REG 253,0 116549 492686 /home/zhaoke/myfile (deleted)

第一个纵行是进程的名称(命令名), 第二纵行是进程号(PID), 第四纵行是文件描述符(r意思是普通文件), 现在你知道9104进程仍有打开文件, 文件描述符是4. 那我们开始从/proc里面拷贝出数据. 你可能会考虑使用cp -a, 但实际上没有作用, 你将拷贝的是一个指向被删除文件的符号链接:

[zhaoke@fedora5 ~]$ ls -l /proc/9104/fd/4
lr-x—— 1 zhaoke zhaoke 64 Nov 20 13:00 /proc/9104/fd/4 -> /home/zhaoke/myfile (deleted)
[zhaoke@fedora5 ~]$ cp -a /proc/9104/fd/4 myfile.wrong
[zhaoke@fedora5 ~]$ ls -l myfile.wrong
lrwxrwxrwx 1 zhaoke zhaoke 29 Nov 20 13:02 myfile.wrong -> /home/zhaoke/myfile (deleted)
[zhaoke@fedora5 ~]$ file myfile.wrong
myfile.wrong: broken symbolic link to `/home/zhaoke/myfile (deleted)’
[zhaoke@fedora5 ~]$ file /proc/9104/fd/4
/proc/9104/fd/4: broken symbolic link to `/home/zhaoke/myfile (deleted)’

然后, 使用cp拷贝出数据:

[zhaoke@fedora5 ~]$ cp /proc/9104/fd/4 myfile.saved

最后, 确认一下文件:

[zhaoke@fedora5 ~]$ ls -l myfile.saved
-rw-rw-r– 1 zhaoke zhaoke 116549 Nov 20 13:03 myfile.saved
[zhaoke@fedora5 ~]$ man lsof | col -b > myfile.new
[zhaoke@fedora5 ~]$ cmp myfile.saved myfile.new

cmp比较无任何显示, 表示两个文件完全相同, 恢复成功.

参考:
Bring back deleted files with lsof

awk手册 简体中文版

原文:应该是 http://phi.sinica.edu.tw/aspac/reports/94/94011/ 但是原文很乱.

说明:之前也是对awk几乎一无所知,无意中看到这篇文章,网上一搜,居然没有像样的简体中文版.有的也是不怎么完整,或者错误一大堆的.于是就顺手整理了下这篇文章.通过整理这篇文章,自己也渐渐掌握了awk的种种用法.

原文可能比较老,有些目前已经不适用的命令有所改动,文中所有命令均在ubuntu7.04下调试通过,用的awk是mawk.

由于本人能力有限,错误和不妥之处在所难免,欢迎多多指正.

html版:
http://linuxfire.com.cn/~lily/awk.html
http://bones.3322.org/awk.html (偶尔)

========20090729 update========
linuxfire的服务器也挂了,上面的地址都不能用了,只能传到本站给链接了…

at命令的用法

顺便也在这里记录一下吧.

法一:
命令行输入:
at 17:20 tomorrow 回车会出现:
warning: commands will be executed using /bin/sh
at> 这时候输入到时间后要执行的命令,可以输多行,输完了ctrl+d.
就可以了

法二:
将命令保存成文件再执行:
at -f 文件名 17:20 tomorrow 回车.
这个文件最好加个可执行权限.

更多信息 man at

搞定tty下的mplayer的中文字幕乱码问题

没有X,只在tty下用fbdev看电影的朋友适用.其他看情况.
ubuntu的话安装ttf-arphic-uming这个字体包就会有如下字体文件了,不然的话也可以用其他字体试试.
下面两句是自定义字幕的文字大小用的.

引用:
$ cat .mplayer/config
# Write your default config options here!
font=/usr/share/fonts/truetype/arphic/uming.ttf
subcp=cp936
subfont-autoscale=0
subfont-text-scale=20

用户管理(命令行)

添加一个xxx用户:

代码:
useradd xxx

添加一个xxx用户,指定家目录为/home/xxx :

代码:
useradd -m -d /home/xxx xxx

添加一个xxx用户,指定家目录为/home/xxx ,并指定用bash :

代码:
useradd -m -d /home/xxx -s /bin/bash xxx

添加一个xxx用户,指定家目录为/home/xxx ,并指定用bash,同时加入yyy和zzz组(默认的xxx组也是保留的) :

代码:
useradd -m -d /home/xxx -s /bin/bash -G yyy,zzz xxx

查看有xxx用户参与的组:

代码:
id xxx

将xxx用户加入yyy组和zzz组:

代码:
usermod -G yyy,zzz xxx

将xxx用户的默认shell改为dash:

代码:
usermod -s /bin/dash xxx

删除xxx用户:

代码:
userdel xxx

删除xxx用户,连同家目录一起删除:

代码:
userdel -r xxx

以上命令除 id xxx 外都需要root权限.