bones7456 all linux

Archive for the '精华' Category

临时增加swap的方法

我的机子物理内存是1G,当时装系统的时候,以为也不会运行很多程序,于是只分了500M左右的swap.
但是后来,因为种种原因,导致系统缓存不够(主要是因为开了VBox和eclipse两大东东,加上ff和compiz之类的),又不想去动分区结构,怎么办呢?办法当然是有的:

  1. lily@LLY:/home$ sudo dd if=/dev/zero of=swapfile bs=1024 count=655360
  2. 记录了 655360+0 的读入
  3. 记录了 655360+0 的写出
  4. 671088640 字节 (671 MB) 已复制,18.6445 秒,36.0 MB/秒
  5. lily@LLY:/home$ file swapfile
  6. swapfile: data
  7. lily@LLY:/home$ sudo mkswap swapfile
  8. Setting up swapspace version 1, size = 671084 kB
  9. no label, UUID=789730ee-9dcb-4143-8a5c-bbdff938c5a6
  10. lily@LLY:/home$ file swapfile
  11. swapfile: Linux/i386 swap file (new style) 1 (4K pages) size 163839 pages
  12. lily@LLY:/home$ sudo swapon swapfile
  13. lily@LLY:/home$ free -m
  14.              total       used       free     shared    buffers     cached
  15. Mem:          1002        982         19          0          3        250
  16. -/+ buffers/cache:        728        273
  17. Swap:         1126        486        639

解释一下,dd那命令其实就是新建一个约640M的空白文件,注意这里不推荐用其他方法建立文件,因为作为swap的文件不能有空洞(应该就是所谓的碎片吧).
mkswap是在那个空白文件的基础上,建立swap的文件系统,可以看到之后的file命令输出就不一样了.
然后在用swapon命令激活,一切都是那么简单.
另外,如果想让更改永久有效的话,还需要修改一下 /etc/fstab 文件,否则重启后就要再执行swapon命令激活一次.

(++i)+(++i)+(++i)+(++i)

今天,看到一个面试题,居然无聊到这种地步,看这代码:

下载: test.c
  1. #include
  2. main()
  3. {
  4.         int i=1,j;
  5.         j=(++i)+(++i)+(++i)+(++i);
  6.         printf("%d\n",j);
  7. }

问输出的j是多少。。。虽然知道这个很无聊,但是反正闲着也是闲着嘛,就研究了下,执行

lly@LLY:~/test$ gcc test.c
lly@LLY:~/test$ ./a.out
15

这我就不懂了。。。再看看objdump的结果:

lly@LLY:~/test$ objdump -d a.out
...省略若干
 8048385:       c7 45 f4 01 00 00 00    movl   $0x1,0xfffffff4(%ebp)
 804838c:       83 45 f4 01             addl   $0x1,0xfffffff4(%ebp)
 8048390:       83 45 f4 01             addl   $0x1,0xfffffff4(%ebp)
 8048394:       8b 45 f4                mov    0xfffffff4(%ebp),%eax
 8048397:       03 45 f4                add    0xfffffff4(%ebp),%eax
 804839a:       83 45 f4 01             addl   $0x1,0xfffffff4(%ebp)
 804839e:       03 45 f4                add    0xfffffff4(%ebp),%eax
 80483a1:       83 45 f4 01             addl   $0x1,0xfffffff4(%ebp)
 80483a5:       03 45 f4                add    0xfffffff4(%ebp),%eax
 80483a8:       89 45 f8                mov    %eax,0xfffffff8(%ebp)
...省略若干

里面的0xfffffff4 是变量i,0xfffffff8是j,可以看出现在是先把i自加2次,再取出两个i的值相加(这时候两个i的值都是3),再执行后面的,也就是 3+3+4+5 = 15。不解,于是用了另一个编译器(小型的tcc)编译,执行,结果就不一样了:

lily@LLY:~/test$ tcc test.c
lily@LLY:~/test$ ./a.out
14

也看看关键的汇编代码:

....
 80481ed:       b8 01 00 00 00          mov    $0x1,%eax
 80481f2:       89 45 fc                mov    %eax,-0x4(%ebp)
 80481f5:       8b 45 fc                mov    -0x4(%ebp),%eax
 80481f8:       83 c0 01                add    $0x1,%eax
 80481fb:       89 45 fc                mov    %eax,-0x4(%ebp)
 80481fe:       8b 4d fc                mov    -0x4(%ebp),%ecx
 8048201:       83 c1 01                add    $0x1,%ecx
 8048204:       89 4d fc                mov    %ecx,-0x4(%ebp)
 8048207:       01 c8                   add    %ecx,%eax
 8048209:       8b 4d fc                mov    -0x4(%ebp),%ecx
 804820c:       83 c1 01                add    $0x1,%ecx
 804820f:       89 4d fc                mov    %ecx,-0x4(%ebp)
 8048212:       01 c8                   add    %ecx,%eax
 8048214:       8b 4d fc                mov    -0x4(%ebp),%ecx
 8048217:       83 c1 01                add    $0x1,%ecx
 804821a:       89 4d fc                mov    %ecx,-0x4(%ebp)
 804821d:       01 c8                   add    %ecx,%eax
 804821f:       89 45 f8                mov    %eax,-0x8(%ebp)
...

可以看到这里面的-0x4(%ebp) 是i,而 -0x8(%ebp)是j。而之前的两次自加操作分别是在 %eax 和 %ecx 上执行的,第一次相加操作就是直接把这两个寄存器里面的值加在一起了。所以最终的效果相对于 2+3+4+5 = 14 。
这样的结果说明了同样的C代码,在不同的编译器下,会产生完全不同的可执行文件,当然如果你的源代码写得不好,完全有可能产生不同的执行结果。另外也再一次说明了这样一个面试题的无聊性,作为反面教材还差不多,嘿嘿。

BTW: 有兴趣的朋友还可以自行研究一下 (++i)+(++i)+(i++)+(i++)+(++i) 的执行结果。

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 (偶尔)

新的百度mp3下载脚本

老版本在这里,由于百度改了代码,不能下载了,所以修改了下脚本.
由于这里不能传附件,只能帖上代码了...

代码:
#!/bin/bash
#Copyright (c) 2006 bones7456 (bones7456@gmail.com)
#License: GPLv2
#非常感谢ubuntu社区和oneleaf老兄
#强烈建议安装axel(多线程下载工具)和mid3v2(包含在python-mutagen里,用于修改歌曲的id3信息)#mp3的地址
SOURCE="http://list.mp3.baidu.com/list/newhits.html"
#SOURCE="http://list.mp3.baidu.com/topso/mp3topsong.html" 改成这个地址可以下载歌曲top500

#保存mp3的目录
SAVE="${HOME}/baidump3"

#下载重试次数
TRYCOUNT=2

#用axel下载时的线程数
AXELNUM=7

#临时目录
TMP="/tmp/baidump3-${USER}"

#是否需要暂停
PAUSE=0

if [ x`which axel` = x"" ];then
PAUSE=1
cat << EOF
您的系统中没有安装axel多线程下载工具,这将导致只能使用wget进行单线程下载,将会影响下载速度。
如果是ubuntu用户,可以直接使用 sudo apt-get install axel 进行安装,其他系统请访问axel主页:http://wilmer.gaast.net/main.php/axel.html 进行下载、安装。

EOF
fi
if [ x`which mid3v2` = x"" ];then
PAUSE=1
cat << EOF
您的系统中没有安装mid3v2工具,使用该工具可以修改mp3歌曲的标签信息(如歌手、歌名等),并去掉可能包含于其中的广告信息。
如果是ubuntu用户,可以直接使用 sudo apt-get install python-mutagen 进行安装,其他系统请访问其主页:http://www.sacredchao.net/quodlibet/wiki/Development/Mutagen 进行下载、安装。

EOF
fi
if [ "$PAUSE" = 1 ];then
echo "是否继续(y|n)?"
read KEYVAR
case "$KEYVAR" in
"Y" | "y" )
echo 略过。
;;
* )
exit 0
;;
esac
fi

#创建下载目录
if [ ! -d "${SAVE}" ];then
mkdir -p "${SAVE}"
fi

#创建临时下载目录
if [ -d "${TMP}" ];then
rm -rf "${TMP}"
fi
mkdir -p "${TMP}"

echo "开始下载百度最新100首歌曲列表"
wget -O ${TMP}/mp3.html ${SOURCE}
echo "下载百度最新100首歌曲列表完成。"

#转换网页编码
iconv -f gbk -t utf8 ${TMP}/mp3.html |\

grep " href=\"http://mp3.baidu.com/m" |\

#将mp3list.txt所有开头的空格去掉
sed -e 's/ *//' |\

#将mp3list.txt所有开头的tab去掉
sed -e 's/\t*//' |\

#将mp3list.txt所有全角空格去掉
sed -e 's/ //g' |\

#将所有的回车符去掉
sed ':a;N;$!ba;s/\n/,/g' |\

#在td>,后面加上回车符,一行表示一个mp3文件。
sed -e 's/,<td/\n<td/g' |\
sed -e 's/td>,/td>\n/g' |\

#删除<td width="30%"> <td> </td> <td...FFFFFF"> <p> </p>
sed -e 's/<td width="30%">//g' |\
sed -e 's/<td>//g' |\
sed -e 's/<\/td>//g' |\
sed -e 's/<p>//g' |\
sed -e 's/<\/p>//g' |\
sed -e 's/<td.*"border">//g' |\

#删除</a>..."_blank">
sed -e 's/<\/A>\/<A.*_blank>/、/g' |\
sed -e 's/<\/A>/<\/a>/g' |\
sed -e 's/<\/a>.*_blank>/-/g' |\
#sed -e 's/<\/a>.*_blank">/-/g' |\
#删除)
sed -e 's/<\/a>)/<\/a>/g' |\

#删除&
sed -e 's/\&\;/\//g' >${TMP}/mp3list.txt

#得到:<a href="http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=2&word=Baby%20Baby%20tell%20me%20%CD%F5%D0%C4%C1%E8" target="_blank">Baby ,Baby tell me-王心凌</a>

#取得行号,循环
line=$(awk 'END{print NR}' ${TMP}/mp3list.txt)
i=1;
while((i<=line));do
downed=0;
mpline=`awk 'NR=='"$i"'' ${TMP}/mp3list.txt`
url=`echo $mpline | sed -e 's/<a href="//g' | sed 's/\ target.*//g' | sed 's/"//g' | cat`
name=`echo $mpline | sed -e 's/.*_blank">//g' | sed -e 's/.*_blank>//g' | sed -e 's/<\/b>//g' |sed -e 's/<b>//g' |\
sed -e 's/<\/a>//g' | sed -e 's/\//-/g' | sed -e 's/:/-/g' | sed -e 's/"/'\''/g' | cat`
title=`echo $name | sed -e 's/-.*//g'`

#检查是否已经下载过这首歌,如果下载过,放弃
if [ -e "${SAVE}/${name}.mp3" ] || [ -e "${SAVE}/${name}.wma" ]; then
echo -e "\e[1;6m\e[1;31m发现 ${name} 下载过,忽略,继续下一首。\e[1;6m\e[00m"
((i++))
continue;
fi

echo "开始通过 $url 下载 $name";
wget -O ${TMP}/down.html $url
echo "获取 $name 下载列表完成。";

#down.txt为有效的下载地址
iconv -f gbk -t utf8 -c ${TMP}/down.html | grep "onclick=\"return ow(event,this)\"" |\
sed -e 's/.*<a href="//g' | sed -e 's/" target="_blank".*//g' > ${TMP}/down.txt

#size.txt为有效的下载文件大小
iconv -f gbk -t utf8 -c ${TMP}/down.html | grep "M<\/td>" |\
sed -e 's/<td>//g' | sed -e 's/ M<\/td>//g' > ${TMP}/size.txt

#down.txt与size.txt合并而在的down_size.txt文件中字段之间以"`"作为分隔符
paste -d '`' ${TMP}/size.txt ${TMP}/down.txt > ${TMP}/down_size.txt

#排序
sort -n -r ${TMP}/down_size.txt > ${TMP}/down_size_sort.txt

#去掉后面的尺寸
sed 's/.*`//' ${TMP}/down_size_sort.txt > ${TMP}/temp.txt

##### 析取出mp3 的下载地址或 wma的下载地址 ##############
grep -i "word=mp3" ${TMP}/temp.txt | grep "$title" > ${TMP}/down_mp3.txt
grep -i "word=wma" ${TMP}/temp.txt | grep "$title" > ${TMP}/down_wma.txt

downline_mp3=$(awk 'END{print NR}' ${TMP}/down_mp3.txt);
downline_wma=$(awk 'END{print NR}' ${TMP}/down_wma.txt);
echo -e "\e[1;6m\e[1;31m发现 ${downline_mp3} 个名为 ${name}.mp3 下载地址。\e[1;6m\e[00m"
echo -e "\e[1;6m\e[1;31m发现 ${downline_wma} 个名为 ${name}.wma 下载地址。\e[1;6m\e[00m"
# 初始化计数器
j=1;
# 优先下载mp3格式的歌曲
while((j<=downline_mp3)); do
mp3=`awk 'NR=='"$j"'' ${TMP}/down_mp3.txt | sed -e 's/ /\\ /g'`
echo -e "\e[1;6m\e[1;31m正在下载${name}.mp3\e[1;6m\e[00m"
#echo -e "\e[1;6m\e[1;31m中转页面地址为${mp3}\e[1;6m\e[00m"
wget -O "${TMP}/transit.html" "$mp3"
realURL=`iconv -f gbk -t utf8 -c ${TMP}/transit.html | grep "<li class=\"li\" style=\"margin-right:10px;\">" | sed 's/.*href="//' | sed 's/" target="_blank">.*//'`
#echo -e "\e[1;6m\e[1;31m真实下载地址为${realURL}\e[1;6m\e[00m"
if [ x`which axel` != x"" ];then
axel -n $AXELNUM -a -o "${TMP}/${name}.mp3" "${realURL}"
else
#wget太慢了。但是如果没有安装axel,可以把上面一行注释掉,用下面一行代替
wget -c --tries=$TRYCOUNT $realURL -O "${TMP}/${name}.mp3"
fi
if [ "$?" = 0 ]; then
if [ `file -ib "${TMP}/${name}.mp3" | sed -e 's/\/.*//g'` = "audio" ]; then
if [ x`which mid3v2` != x"" ];then
title=`echo $name | sed -e 's/-.*//g'`
artist=`echo $name | sed -e 's/.*-//g' | sed -e 's/.mp3//g' | sed -e 's/.wma//g'`
mid3v2 -D "${TMP}/${name}.mp3"
mid3v2 -t "${title}" -a "${artist}" "${TMP}/${name}.mp3"
fi
mv "${TMP}/${name}.mp3" "${SAVE}/${name}.mp3"
downed=1;
break;
else
echo -e "\e[1;6m\e[1;31m下载 ${name}.mp3 文件无效,正在删除重新下载\e[1;6m\e[00m"
rm "${TMP}/${name}.mp3";
((j++))
fi
else
echo -e "\e[1;6m\e[1;31m下载 ${name}.mp3 文件无效,正在删除重新下载\e[1;6m\e[00m"
rm "${TMP}/${name}.mp3";
((j++))
fi
done

#如果下载成功继续下其余的歌
#continue用于跳过循环体中的后续命令
if [ "$downed" = 1 ] ; then
((i++))
echo -e "\e[1;7m\e[1;41m下载 $name 成功\e[1;7m\e[00m"
continue;
fi

# 如果没有mp3格式的则下载wma格式的歌
j=1;
while((j<=downline_wma)); do
wma=`awk 'NR=='"$j"'' ${TMP}/down_wma.txt`
echo -e "\e[1;6m\e[1;31m正在下载${name}.wma\e[1;6m\e[00m"

#echo -e "\e[1;6m\e[1;31m中转页面地址为${mp3}\e[1;6m\e[00m"
wget -O "${TMP}/transit.html" "$wma"
realURL=`iconv -f gbk -t utf8 -c ${TMP}/transit.html | grep "<li class=\"li\" style=\"margin-right:10px;\">" | sed 's/.*href="//' | sed 's/" target="_blank">.*//'`
#echo -e "\e[1;6m\e[1;31m真实下载地址为${realURL}\e[1;6m\e[00m"
if [ x`which axel` != x"" ];then
axel -n $AXELNUM -a -o "${TMP}/${name}.wma" "${realURL}"
else
#wget太慢了。但是如果没有安装axel,可以把上面一行注释掉,用下面一行代替
wget -c --tries=$TRYCOUNT $realURL -O "${TMP}/${name}.wma"
fi
if [ "$?" = 0 ]; then
if [ `file -ib "${TMP}/${name}.wma" | sed -e 's/\/.*//g'` = "application" ]; then
#title=`echo $name | sed -e 's/-.*//g'`
#artist=`echo $name | sed -e 's/.*-//g' | sed -e 's/.mp3//g' | sed -e 's/.wma//g'`
#mid3v2 -D "${TMP}/${name}.wma"
#mid3v2 -t "${title}" -a "${artist}" "${TMP}/${name}.wma"
mv "${TMP}/${name}.wma" "${SAVE}/${name}.wma"
downed=1;
break;
else
echo -e "\e[1;6m\e[1;31m下载 ${name}.wma 文件无效,正在删除重新下载\e[1;6m\e[00m"
rm "${TMP}/${name}.wma";
((j++))
fi
else
echo -e "\e[1;6m\e[1;31m下载 ${name}.wma 文件无效,正在删除重新下载\e[1;6m\e[00m"
rm "${TMP}/${name}.wma";
((j++))
fi
done

((i++))
if [ "$downed" = 1 ] ; then
echo -e "\e[1;7m\e[1;41m下载 $name 成功\e[1;7m\e[00m"
else
echo -e "\e[1;7m\e[1;41m下载 $name 失败\e[1;7m\e[00m"
fi
done
rm -fr ${TMP}
exit 0

Perfect Console 计划

转自 http://www.linuxsir.org/bbs/showthread.php?t=245239
=================================================

目的:
提供 X , DirectFB 下的图形界面程序在纯控制台(最好是FrameBuffer的,VGA的驱动屏幕太小)下的替代品.
使用户在不装 X , DirectFB 等图形界面的情况下,也能有很好的体验.

内容:
尽量提供 软件简介, 主页, 安装方法, 截图, 依赖

大多数软件从 Freshmeat -> Environment -> Console (Text Based) -> Curses 找到.

如没有主页和下载地址, 请善用搜索:
1. www.freshmeat.net/projects/软件名
2. www.freshmeat.net 最大的开源软件库,几乎所有软件都能找到, 在这里搜索
3. rpmfind.net 也是很大的软件源, 下来的 src.rpm 可以解压后使用, 其中的 patch 也可以用.
4. www.google.com

有一些软件本人还未试验, use at your own risk .

欢迎提供适合本计划的软件, 要求某个功能的软件也可以提出, 但不保证有人帮你找到.

0. 基础软件
基本上,下面的软件都需要的, 下面就不提了.
Linux kernel with Framebuffer :
GPM : 鼠标驱动
ncurses : 基础图形库
S-lang : 基于 ncurses 的库, 有的软件需要
newt : 另一个图形库, 有的软件需要

screen : 让一个 console 同时运行多个图形程序 ,我写的 screen 的用法, 以及在 lfs 当中的应用 , 还有人说用screen可以实现gpm的跨控制台复制粘帖 这是gentoo的帮助文件: http://gentoo-wiki.com/TIP_Using_screen

1. 中文支持
zhcon : 在LFS5.0+kernel2.6.3里安装zhcon0.2.3
主页: zhcon.sf.net 现已升级到 0.2.6 ,从 0.2.5 开始部分支持 utf8 , 推荐.
cce : cce + gcc4 问题基本解决 (Final)

2. 文件管理
midnightcommander, mc : 见 BLFS Book
Midnight Commander MP : 改版的 mc http://freshmeat.net/projects/mcmp/

3. 上网浏览
lynx , w3m , links 在 BLFS book 里有
lynx : 基本的浏览器,在 cce/zhcon 下支持中文,不支持中文utf8网页(比如 本页 )

w3m : 较好的浏览器,支持表格,在 cce/zhcon 下完美支持中文, utf8 的网页也支持,新的 w3m 直接支持 fb 图象。

links : 功能比 w3m 还强大, 支持后台下载,但是完全不支持中文.
links -g 可以开启图形,高级布局

elinks : links 改版,功能比 links 还强大, 支持多Tab页,但是完全不支持中文.
据说 sir 上某人曾经 links 的中文码表,可以支持中文, 我还没找到,若有人找到,请给我一个地址. 否则, 我来试试自己写(抄袭?) 一个码表,不过肯定是 elinks 的.

4. 上网聊天
centericq : An ncurses-based client for ICQ, Yahoo!, AIM, IRC, Jabber, MSN, and LiveJournal.
http://freshmeat.net/projects/centericq/

Licq : An advanced graphical ICQ clone.
http://freshmeat.net/projects/licq/

5. 收发邮件
Mutt : A small but very powerful text-based mail client.
http://freshmeat.net/projects/mutt/

gnus+fetchmail+procmail
http://www.gnus.org/
http://fetchmail.berlios.de/
http://www.procmail.org/
教程:
PROCMAIL QUICK START http://www.ii.com/internet/robots/procmail/qs/
procmail 软件包包含一个自动的邮件处理器,可以很好的过滤和排序邮件。 http://lfs.linuxsir.org/htdocs/blfsc.../procmail.html
使用fecthmail http://doc.chinahtml.com/Manual/free...fetchmail.html
http://learn.tsinghua.edu.cn:8080/20...nt-backup/gnus
.html
http://learn.tsinghua.edu.cn:8080/20...up/gnus-1.html

Pine 不逊于 mutt 的 email 客户端
http://www.washington.edu/pine/

6. 音乐欣赏
mp3blaster : mepgsound 解码 http://mp3blaster.sourceforge.net/

MOC console audio player for Linux/UNIX
http://moc.daper.net/

mpg123 + playmp3list : mpg123 解码 http://rucus.ru.ac.za/~urban/projects/playmp3list/
mplay + mplayer : mplayer 的 console 前端

cmus : mad 解码 , 看起来比 mp3blaster 还好 http://onion.dynserv.net/~timo/cmus.html
为了支持更多格式,需要一下库:
flac : http://flac.sourceforge.net/
mp3 , mad : http://www.underbit.com/products/mad/
ogg , libogg, http://www.vorbis.com/
libao : http://www.xiph.org/ao/

下面不清楚,可能没有什么用
http://modplug.sourceforge.net/
http://www.musicpd.org/mpc.shtml
http://www.musicpd.org/

7. 视频播放
mplayer :
xine :
这两个在输出驱动为 fb 的情况下,可以完美播放各种格式视频.

8. 集成开发
motor : http://freshmeat.net/projects/motor/
http://thekonst.net/motor
ftp://rpmfind.net/linux/Mandrake/9.2...4-3mdk.src.rpm

有人可能更喜欢用 vi 或 emacs .

9. 上传下载
wget : http://www.gnu.org/software/wget/
curl : http://curl.haxx.se/
prozilla : 多线程 http://prozilla.genesys.ro/
lftp : 命令行 http://lftp.yar.ru/
ncftp : 命令行 http://www.ncftp.com/ncftp/
yafc : 命令行 + 彩色 http://yafc.sourceforge.net/
mc : mc 用来ftp是很方便的

10.图形图像
fbgrab : 在 framebuffer 下截图, http://hem.bredband.net/gmogmo/fbgrab/
我的截图都是 fbgrab 做的, 依赖于 libpng .
编译时不要用 make ,它的 Makefile 调用了一个检查程序,一般都没装,也没什么用.
看一下 Makefile ,把 gcc ........... 粘帖下来直接用.

fbv : 看图软件,可以在console 下看 png gif jepg ,依赖于 libpng, libungif ,libjepg
http://freshmeat.net/projects/fbv/

iiview : 看图, 还可显示缩略图, 可以在console 下看 png gif jepg tiff,依赖于 libpng, libungif ,libjepg, libtiff
http://freshmeat.net/projects/iiview/

fbview : 看图, 不推荐,依赖太多, 除图形库外,还有imagemagick , oFBis library

fbi 系列 : http://linux.bytesex.org/fbida/ 有用的有:
fbi : 看图软件,可以在console 下看 png gif jepg
fbgs: 脚本, 用 ghostscript 把 ps , pdf 转成图像, 再用 fbi 看
exiftran : 在保留 exif 的同时转换 jpeg

11. 其他工具
htop : 进程管理器, 更好的 top http://htop.sourceforge.net/

sysvconfig : 系统设置, http://sysvconfig.sf.net ,用处不大, 不推荐

12.CD烧录
核心软件 cdrdao cdrtools dvd+rw-tools ,gui 的也要用到, distro 一般都有,很好找

bashburn ,ncurse 界面,菜单选择烧录cd
http://bashburn.sourceforge.net/

cdw ,另一个 ncurse 界面烧录软件
http://sourceforge.net/projects/cdw

rz sz ZModem协议的文件传输工具

rz、sz是古老的ZModem协议的文件传输工具。

linux的服务器装上rz、sz,如果是ubuntu可以用audo apt-get install lrzsz进行安装。
然后用win下的SecureCRT通过ssh连上来,执行服务器端的rz、sz就可以用了
执行sz filename ,就会把filename拷贝到win下的指定目录(此目录可在SecureCRT中设定)
执行rz,win下会弹出个文件选择对话框,选了文件以后,就在linux服务器的当前目录下了。
超方便啊。
想必有人会问为什么不用scp或者sftp啊?但是这些还是没rz、sz方便,比如你ssh到主机A,再通过A ssh 到B,想把B的文件传到本地,不是得先scp到A,再到本地呢?用sz就可以一次搞定~
但是目前支持ZModem的telnet/ssh客户端好像只找到SecureCRT、AbsoluteTelnet和TigerTerm等,都是win下的共享软件(就是要付钱滴),而且客户端也是linux的时候还不知道该怎么用起来,知道的千万告知一声 Very Happy

以下来自:http://www.linuxpk.com/178.html

引用:
  我想还有很多人没有听说过ZModem协议,更不知道有rz/sz这样方便的工具。
  好东西不敢独享。以下给出我知道的一点皮毛。
  下面一段是从SecureCRT的帮助中copy的:
  ZModem is a full-duplex file transfer protocol that supports fast data transfer rates and effective error detection. ZModem is very user friendly, allowing either the sending or receiving party to initiate a file transfer. ZModem supports multiple file ("batch") transfers, and allows the use of wildcards when specifying filenames. ZModem also supports resuming most prior ZModem file transfer attempts.

  rz,sz是便是Linux/Unix同Windows进行ZModem文件传输的命令行工具
  windows端需要支持ZModem的telnet/ssh客户端,SecureCRT就可以用SecureCRT登陆到Unix/Linux主机(telnet或ssh均可)
  O 运行命令rz,即是接收文件,SecureCRT就会弹出文件选择对话框,选好文件之后关闭对话框,文件就会上传到当前目录
  O 运行命令sz file1 file2就是发文件到windows上(保存的目录是可以配置) 比ftp命令方便多了,而且服务器不用再开FTP服务了
  PS:Linux上rz/sz这两个小工具安装lrzsz-x.x.xx.rpm即可,Unix可用源码自行 编译,Solaris spac的可以到sunfreeware下载执行码

一个天气预报的脚本

闲来无事,写了天气预报的脚本,与大家分享。
本人菜鸟,如有任何问题或建议,欢迎指正。谢谢。

数据来自 http://weather.265.com

#!/bin/bash
#Copyright (c) 2007 bones7456 (bones7456@gmail.com)
#License: GPLv3
#version 20080524
 
#城市代码,留空可自动检测(自动检测不一定精确),城市代码可在 http://weather.265.com 上查询,是个5位的数字
#city=58457
 
if [ -n "$city" ] ;then
	wid=${city}
else
	wget -q -O /tmp/weather.html 'http://www.265.com/lookupcity';
	wid=`awk -F "'" '{print $2}' /tmp/weather.html`;
fi
#echo ${wid};
wget -q -O /tmp/weather.html "http://www.265.com/weather/${wid}.htm";
str=`iconv -f gbk -t utf8 /tmp/weather.html | grep 'show_weather' | sed -e 's/show_weather("//g'|sed -e 's/),\ "hd\.htm.*//g' | sed -e 's/new Array(//g' | sed -e "s/[\"|\ ]//g" | sed -e "s/,'/ /g" |sed -e "s/'//g"`;
#echo ${str};
AnArray=( ${str} );
time=`date +%k`;
if [ ${time} -gt 18 ] ; then
	echo ${AnArray[0]}${AnArray[1]} 今晚:${AnArray[4]};明天:${AnArray[6]}
elif [ ${time} -gt 12 ] ; then
	echo ${AnArray[0]}${AnArray[1]} 下午:${AnArray[3]};晚上:${AnArray[4]}
else
	echo ${AnArray[0]}${AnArray[1]} 上午:${AnArray[2]};下午:${AnArray[3]}
fi
rm -f /tmp/weather.html;
exit 0;

vim中文在线帮助。

ee发的好东西:这里

顺便贴个

还有vi入门——巧表单方法

邮件里面收到winmail.dat附件的解决办法- tnef

不知广大ubuntuer有没有收到过带个winmail.dat的邮件,我想在公司用ubuntu办公的一定收到过不少这种麻烦邮件。而你完全不知道这个附件如何打开,甚至更惨的是原本附件在邮件中的文件也不幸被这个winmail.dat吃掉了。你也许会询问这封邮件的发件人,这个时候对方多半也是一头雾水,因为人家用Outlook用的好好的,从来没有听说过这个问题,说得直白一点,就是完全不知道你在说什么。
那么winmail.dat到底是个啥东西呢?是M$的工具在编码打包你的邮件进行发送时,如果按照默认指定的RTF格式,会把格式信息按照MS自己的一套标准存放在邮件体中(在此,强烈BS M$的这种做法),造成非Outlook客户端不认识,无法正确解析。
你当然可以要求你的发件人不要用Outlook,或者不要用rtf格式,纯文本或HTML均可。但是如果你做不到这点,也还是有办法的。那就是使用 tnef。
安装:

代码:
sudo apt-get install tnef

使用:

代码:
tnef winmail.dat

你也可以先用tnef -t winmail.dat 来看看包含的文件。
由于发件人用的大多是windows,一般这样得到的附件在utf8的linux下,文件名都会是乱码,无奈再用convmv转一下文件名的编码:

代码:
convmv -f gbk -t utf8 --notest *

至此大功告成。

再用一行总结一下以上过程:

代码:
tnef winmail.dat && tnef -t winmail.dat | xargs convmv -f gbk -t utf8 --notest

再写点关于ssh的

一、gnome终端ssh登录服务器时提示密码慢的解决办法:
原帖:http://forum.ubuntu.org.cn/viewtopic.php?t=47794&highlight=

原先用gnome终端ssh登录服务器时,输入ssh命令到提示可以输入密码大概要等20多秒,后来查到说是由于

引用:
IP地址反向解析
禁用掉就好了

解决办法就是:

引用:
系统->系统管理->网络->常规,把自动服务探测关闭

验证有效~
而且那选项本来就标着“这是一个潜在的安全隐患”估计还是实验性的东东吧!
二、用 RSA 密钥代替密码验证身份,无须每次连接都输密码的办法
1.再本机执行

代码:
ssh-keygen -t rsa

先会提示密钥对保存位置,默认为(~/.ssh/id_rsa),接受默认选项。
然后会提示输入一个短语用于代替密码,这里如果以后不想每次都输密码的话,就直接回车,留空。
会再次让你输入上面的内容,继续回车留空。
这时候密钥对就生成好了,文件在~/.ssh/id_rsa和~/.ssh/id_rsa.pub
2.将本机刚才生成的~/.ssh/id_rsa.pub文件里面的内容添加到远程机的登录用户的~/.ssh/authorized_keys文件下面,如果该文件不存在,可以手工创建一个。
3.完成,现在ssh远程机的话,就直接登录了 Very Happy
不过要保证本机的~/.ssh/id_rsa文件的安全哦~万一这个文件被盗,后果将是很严重滴~~~