Archive for the '精华' Category
临时增加swap的方法
我的机子物理内存是1G,当时装系统的时候,以为也不会运行很多程序,于是只分了500M左右的swap.
但是后来,因为种种原因,导致系统缓存不够(主要是因为开了VBox和eclipse两大东东,加上ff和compiz之类的),又不想去动分区结构,怎么办呢?办法当然是有的:
- lily@LLY:/home$ sudo dd if=/dev/zero of=swapfile bs=1024 count=655360
- 记录了 655360+0 的读入
- 记录了 655360+0 的写出
- 671088640 字节 (671 MB) 已复制,18.6445 秒,36.0 MB/秒
- lily@LLY:/home$ file swapfile
- swapfile: data
- lily@LLY:/home$ sudo mkswap swapfile
- Setting up swapspace version 1, size = 671084 kB
- no label, UUID=789730ee-9dcb-4143-8a5c-bbdff938c5a6
- lily@LLY:/home$ file swapfile
- swapfile: Linux/i386 swap file (new style) 1 (4K pages) size 163839 pages
- lily@LLY:/home$ sudo swapon swapfile
- lily@LLY:/home$ free -m
- total used free shared buffers cached
- Mem: 1002 982 19 0 3 250
- -/+ buffers/cache: 728 273
- Swap: 1126 486 639
解释一下,dd那命令其实就是新建一个约640M的空白文件,注意这里不推荐用其他方法建立文件,因为作为swap的文件不能有空洞(应该就是所谓的碎片吧).
mkswap是在那个空白文件的基础上,建立swap的文件系统,可以看到之后的file命令输出就不一样了.
然后在用swapon命令激活,一切都是那么简单.
另外,如果想让更改永久有效的话,还需要修改一下 /etc/fstab 文件,否则重启后就要再执行swapon命令激活一次.
(++i)+(++i)+(++i)+(++i)
今天,看到一个面试题,居然无聊到这种地步,看这代码:
- #include
- main()
- {
- int i=1,j;
- j=(++i)+(++i)+(++i)+(++i);
- printf("%d\n",j);
- }
问输出的j是多少。。。虽然知道这个很无聊,但是反正闲着也是闲着嘛,就研究了下,执行
lly@LLY:~/test$ ./a.out
15
这我就不懂了。。。再看看objdump的结果:
...省略若干
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$ ./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的目录 #下载重试次数 #用axel下载时的线程数 #临时目录 #是否需要暂停 if [ x`which axel` = x"" ];then EOF EOF #创建下载目录 #创建临时下载目录 echo "开始下载百度最新100首歌曲列表" #转换网页编码 grep " href=\"http://mp3.baidu.com/m" |\ #将mp3list.txt所有开头的空格去掉 #将mp3list.txt所有开头的tab去掉 #将mp3list.txt所有全角空格去掉 #将所有的回车符去掉 #在td>,后面加上回车符,一行表示一个mp3文件。 #删除<td width="30%"> <td> </td> <td...FFFFFF"> <p> </p> #删除</a>..."_blank"> #删除& #得到:<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> #取得行号,循环 #检查是否已经下载过这首歌,如果下载过,放弃 echo "开始通过 $url 下载 $name"; #down.txt为有效的下载地址 #size.txt为有效的下载文件大小 #down.txt与size.txt合并而在的down_size.txt文件中字段之间以"`"作为分隔符 #排序 #去掉后面的尺寸 ##### 析取出mp3 的下载地址或 wma的下载地址 ############## downline_mp3=$(awk 'END{print NR}' ${TMP}/down_mp3.txt); #如果下载成功继续下其余的歌 # 如果没有mp3格式的则下载wma格式的歌 #echo -e "\e[1;6m\e[1;31m中转页面地址为${mp3}\e[1;6m\e[00m" ((i++)) |
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的时候还不知道该怎么用起来,知道的千万告知一声
以下来自: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文件传输的命令行工具 |
一个天气预报的脚本
闲来无事,写了天气预报的脚本,与大家分享。
本人菜鸟,如有任何问题或建议,欢迎指正。谢谢。
#!/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;
邮件里面收到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远程机的话,就直接登录了 ![]()
不过要保证本机的~/.ssh/id_rsa文件的安全哦~万一这个文件被盗,后果将是很严重滴~~~