页面

显示标签为“linux”的博文。显示所有博文
显示标签为“linux”的博文。显示所有博文

2011/03/17

CMMusic: 小巧而实用的 MPlayer 音乐播放前端

文章來自:http://linuxtoy.org/archives/cmmusic.html

CMMusic 是一个不错的 MPlayer 音乐播放前端,感兴趣的朋友不妨试试。
Author: Jiqing (jiqingwu@gmail.com)
home:http://hi.baidu.com/jiqing0925
create:2011-03-10
update:2011-03-10

为啥用cmmusic

mplayer是元老级的媒体播放器,到现在依然强大,因为它的“全能”, 一直拥有大量的用户。 但我们主要用mplayer看电影,其实用mplayer播放音乐也很不错: 占用资源很少,而且支持的格式非常多。
如果用xmms2或者mpd听音乐,如果想听wma什么的还要装额外的解码器。 而只要装了mplayer,看电影和听音乐只用它就够了。 无奈,mplayer没有个好用的前端。 不过,现在,小巧的cmmusic来了,为mplayer提供了一个简单实用的 音乐播放前端。
作者是咱中国人,可以从 这个网页 看到更多的信息。 大家有什么问题或建议可以用中文给他写信啊,方便交流。 感谢作者,向作者致敬。
cmmusic是用ncurse库的终端下运行的程序。 虽然界面不华丽,但功能全面,很实用,先看个截图吧。

安装cmmusic

现在,cmmusic似乎还没加到各发行版的仓库中。 可以从 https://sourceforge.net/projects/cmmusic/ 下载源码编译安装。
因为依赖ncurses,所以编译前请安装ncurses的开发库。 最好装libncursesw,支持宽字符,这样能支持中文显示。:
sudo apt-get install libncursesw5-dev
应该差不多了,如果提示缺什么库,就安装libxxx-dev吧。 然后使出程咬金的三板斧::
./configure
make
sudo make install
安装的文件如下:
  • cmmusic 核心程序,位于 /usr/local/bin
  • cmmusicx 其实是一个脚本,自动打开一个终端运行cmmusic, 位于 /usr/local/bin
  • cmmusic.xpm 用于在菜单中显示的图标,位于 /usr/local/share/pixmaps
  • cmmusic.desktop 程序菜单中显示的项目,位于 /usr/local/share/applications/

使用

  • l 载入或存储播放列表lst文件,也用于指定添加音乐文件的目录
  • + 添加音乐文件,会给出刚才用 l 指定的目录下的文件列表, 空格选中,按回车添加到播放列表
  • - 移除播放列表中的项目。
  • ] 增加音量
  • [ 减小音量
  • , 上一首
  • . 下一首
  • p 播放/暂停
  • s 停止
  • m 静音
  • q 退出
  • d 切换播放模式。
    • SING 表示只播放一遍当前选中的文件
    • SILP 重复播放当前选中的文件
    • MULT 顺序播放一遍当前列表中的文件
    • MULP 重复按顺序播放列表中的文件
    • RAND 乱序播放列表中的文件
  • r 设置歌词(只支持lrc文件)搜索目录。 默认lrc为GBK,如果为UTF8,请使用选项``-lrc UTF-8``
另外,cmmusic同样可以用于播放电影,有播放列表,看电视剧很方便。 最后,再次为国人的精彩作品喝彩!

2010/08/24

使用grep恢复被删文件内容

在Unix/Linux下,最危险的命令恐怕就属rm命令了,每次在root下使用这个命令的时候,我都要盯着命令行看上几分钟才敢把回车敲下去。以前,看到同事在脚本中使用rm命令 —— rm {$App_Dir}/* 。因为脚本没有判断变量$App_Dir是否为空,结果,在一次用root操作的时候,整个操作系统一下就不见了,还好只是开发机。从此,我们大家都再也不敢使用rm命令了。
这里给大家介绍一个小技巧用来恢复一些被rm了的文件中的数据。我们知道,rm命令其实并不是真正的从物理上删除文件内容,只过不把文件的inode回收了,其实文件内容还在硬盘上。所以,如果你不小删除了什么比较重要的程序配置文件的时候,我们完全可以用grep命令在恢复,下面是一个恢复示例:
1grep -a -B 50 -A 60 'some string in the file' /dev/sda1 > results.txt
说明:
  • 关于grep的-a意为–binary-files=text,也就是把二进制文件当作文本文件。
  • -B和-A的选项就是这段字符串之前几行和之后几行。
  • /dev/sda1,就是硬盘设备,
  • > results.txt,就是把结果重定向到results.txt文件中。
如果你幸运的话,你就可以看到被恢复的内容了。这正是Unix的简单哲学(详见《Unix传奇下篇》)—— 所有的设备都是文件
当然,我还是建议你把root用户的rm的命令用alias换成别一个脚本,那个脚本会帮你把删除的文件放到某个地方。

2010/04/09

在Linux下挂载U盘,硬盘,光驱及自动化挂载管理

1. Linux挂载U盘:
插入u盘到计算机,如果目前只插入了一个u盘而且你的硬盘不是scsi的硬盘接口的话,那它的硬件名称为:sda1。 在mnt目录下先建立一个usb的目录:
(如:[root@localhost root]# mkdir /mnt/usb)

挂 载U盘:mount -t vfat /dev/sda1 /mnt/usb
卸载U盘:umount /mnt/usb
删除usb目 录:rm -rf /mnt/usb

2. Linux挂载硬盘:

挂载FAT32文件系统最简单的用法
mount /dev/hda6 /mnt/wine

/dev/hda6是Windows的E盘,/mnt/wine是目录加挂点。Linux会识 别到/dev/hda6分区的文件系统类型是什么,然后加挂的。当然也可以指定分区的文件系统类型,命令如下:
mount -t vfat /dev/hda6 /mnt/wine

在实际中操作中,直接加挂一个windows的分区,中文的文件名和目录名会出现乱码,为了避免 这种情况可以指定字符集,命令如下:
mount /dev/hda6 /mnt/d -o codepage=936,iocharset=cp936
mount -t vfat /dev/hda6 /mnt/d -o codepage=936,iocharset=cp936
mount -t vfat -o iocharset=cp936,codepage=936 /dev/hda6 /mnt/wine

注意:cp936是指简体中 文,cp950是指繁体中文。

卸载所挂的硬盘 umount /mnt/wine
删除所挂的硬盘 rm -rf /mnt/wine

挂载NTFS文件系统
在目前多数的Linux版本上,需要重编译Linux核心才能,加挂NTFS分区(编译 方法请参阅其它文章)。核心支持NTFS后,可以用以下命令加挂:
mount -t ntfs /dev/hda2 /mnt/c

同 样对于中文的文件名和目录名会出现乱码的问题可以指定字符集,不过和加挂vfat分区不同,实际中用以下命令是可行的:
mount -t ntfs -o iocharset=cp936 /dev/hda2 /mnt/c -r
mount -t ntfs -o iocharset=cp936,rw /dev/hda2 /mnt/c

注意:cp936是指简体中文,cp950是指繁体中文。
卸 载删除同上。

3. Linux自动挂载硬盘

打开/etc找到里面的fstab文件进行编辑,如果你是以管理员身份登入的 话,可以直接右键->打开方式->gedit,可以直接在后面追加行:
/dev/hda6 /mnt/wine vfat codepage=936,iocharset=cp936,defaults,umask=0 0 0
/dev/hda5 /mnt/wind vfat codepage=936,iocharset=cp936 0 0


4. Linux挂载光驱:
命令: mount -t iso9660 /dev/hdc /mnt/cdrom
卸载删除同上。


原文:http://aolinux.blogspot.com/2009/04/linuxu.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+aolinux+%28%E5%99%A2%EF%BC%81Linux%29

mplayer-wrapper:自动从射手网下载字幕的 MPlayer 脚本

mplayer-wrapper是Mplayer的一个简单的命令行前端。能实现如:自动视频,从上次结束的位置继续播放,自动字幕下载等功能。
地址:http://gosubi.me/adow/mplayer-wrapper

2009/12/10

Nessus 4.2开源漏洞扫描工具发布


NessusLogo-9e60aec32eb934b1Nessus是一款非常优秀的开源漏洞扫描工具,被认为是目前全世界最多人使用的系统漏洞扫描与分析软件。该软件的4.2版本发布,这个新版本是有史以来发动最大的一次,首先就是增加了一个基于Web的用户界面,界面的美工做到极致,让人赞叹,可以见系统截屏。这个Web界面的推出,意味着是一个新的客户端,用户可以通过浏览器来管理设置系统。
详细功能请查看官方功能描述下载文档插件

转载自Osss.cn 开源社区

Musca + Xfce4-panel:接近完美

{ 撰文/吴吉庆 }
我上篇讲 Musca 配置的文章中所说的用 Conky 显示窗口列表,效果并不是很好,文本经常显示不全。而且也不能像真的任务栏那样操作。
PyPanel 也不行,根本不能显示窗口列表。
我一开始还以为是 Musca 不符合 MWM 规范呢,但看到一个网友用 Tint2 可以显示窗口列表。 他告诉我说,就 PyPanel 不行,别的 panel 都可以。 原来这样,看来 Musca 都可以嵌入到 GNOME 中用了,真的很不错啊。
我试用了 Tint2,基本满意,但是有两个问题:
  1. 它对系统托盘程序的支持并不好。它对方形的托盘图标显示没问题,但是对于 Workrave 这样的长矩形托盘也只能显示个方形,显示不全。
  2. 用鼠标激活窗口时,任务栏上的窗口才显示被激活的状态,用快捷键激活窗口时,任务栏上所有的窗口都没有被激活的状态。
我于是试了下 Xfce4-panel,效果几乎完美。Tint2 的那两个问题都解决了。 而且对工作区的显示非常棒,你看截图右下角的工作区显示。 可能美中不足的就是它是 Xfce4 的组件,不能独立安装,也不能独立调节它的显示外观。希望朋友们提出更好的方案。

《SED 单行脚本快速参考》的 awk 实现

sed 和 awk 都是 Linux 下常用的流编辑器,他们各有各的特色,本文并不是要做什么对比,而是权当好玩,把《SED 单行脚本快速参考》这文章,用 awk 做了一遍~ 至于孰好孰坏,那真是很难评论了。一般来说,sed 的命令会更短小一些,同时也更难读懂;而 awk 稍微长点,但是 if、while 这样的,逻辑性比较强,更加像“程序”。到底喜欢用哪个,就让各位看官自己决定吧!
文本间隔:
# 在每一行后面增加一空行
sed G
awk '{printf("%s\n\n",$0)}'
# 将原来的所有空行删除并在每一行后面增加一空行。
# 这样在输出的文本中每一行后面将有且只有一空行。
sed '/^$/d;G'
awk '!/^$/{printf("%s\n\n",$0)}'
# 在每一行后面增加两行空行
sed 'G;G'
awk '{printf("%s\n\n\n",$0)}'
# 将第一个脚本所产生的所有空行删除(即删除所有偶数行)
sed 'n;d'
awk '{f=!f;if(f)print $0}'
# 在匹配式样“regex”的行之前插入一空行
sed '/regex/{x;p;x;}'
awk '{if(/regex/)printf("\n%s\n",$0);else print $0}'
# 在匹配式样“regex”的行之后插入一空行
sed '/regex/G'
awk '{if(/regex/)printf("%s\n\n",$0);else print $0}'
# 在匹配式样“regex”的行之前和之后各插入一空行
sed '/regex/{x;p;x;G;}'
awk '{if(/regex/)printf("\n%s\n\n",$0);else print $0}'
编号:
# 为文件中的每一行进行编号(简单的左对齐方式)。这里使用了“制表符”
# (tab,见本文末尾关于’\t’的用法的描述)而不是空格来对齐边缘。
sed = filename | sed 'N;s/\n/\t/'
awk '{i++;printf("%d\t%s\n",i,$0)}'
# 对文件中的所有行编号(行号在左,文字右端对齐)。
sed = filename | sed 'N; s/^/     /; s/ *\(.\{6,\}\)\n/\1  /'
awk '{i++;printf("%6d  %s\n",i,$0)}'
# 对文件中的所有行编号,但只显示非空白行的行号。
sed '/./=' filename | sed '/./N; s/\n/ /'
awk '{i++;if(!/^$/)printf("%d %s\n",i,$0);else print}'
# 计算行数 (模拟 “wc -l”)
sed -n '$='
awk '{i++}END{print i}'
文本转换和替代:
# Unix环境:转换DOS的新行符(CR/LF)为Unix格式。
sed 's/.$//'                     # 假设所有行以CR/LF结束
sed 's/^M$//'                    # 在bash/tcsh中,将按Ctrl-M改为按Ctrl-V
sed 's/\x0D$//'                  # ssed、gsed 3.02.80,及更高版本
awk '{sub(/\x0D$/,"");print $0}'
# Unix环境:转换Unix的新行符(LF)为DOS格式。
sed "s/$/`echo -e \\\r`/"        # 在ksh下所使用的命令
sed 's/$'"/`echo \\\r`/"         # 在bash下所使用的命令
sed "s/$/`echo \\\r`/"           # 在zsh下所使用的命令
sed 's/$/\r/'                    # gsed 3.02.80 及更高版本
awk '{printf("%s\r\n",$0)}'
# DOS环境:转换Unix新行符(LF)为DOS格式。
sed "s/$//"                      # 方法 1
sed -n p                         # 方法 2
DOS环境的略过
# DOS环境:转换DOS新行符(CR/LF)为Unix格式。
# 下面的脚本只对UnxUtils sed 4.0.7 及更高版本有效。要识别UnxUtils版本的
# sed可以通过其特有的“–text”选项。你可以使用帮助选项(“–help”)看
# 其中有无一个“–text”项以此来判断所使用的是否是UnxUtils版本。其它DOS
# 版本的的sed则无法进行这一转换。但可以用“tr”来实现这一转换。
sed "s/\r//" infile >outfile     # UnxUtils sed v4.0.7 或更高版本
tr -d \r outfile        # GNU tr 1.22 或更高版本
DOS环境的略过
# 将每一行前导的“空白字符”(空格,制表符)删除
# 使之左对齐
sed 's/^[ \t]*//'                # 见本文末尾关于'\t'用法的描述
awk '{sub(/^[ \t]+/,"");print $0}'
# 将每一行拖尾的“空白字符”(空格,制表符)删除
sed 's/[ \t]*$//'                # 见本文末尾关于'\t'用法的描述
awk '{sub(/[ \t]+$/,"");print $0}'
# 将每一行中的前导和拖尾的空白字符删除
sed 's/^[ \t]*//;s/[ \t]*$//'
awk '{sub(/^[ \t]+/,"");sub(/[ \t]+$/,"");print $0}'
# 在每一行开头处插入5个空格(使全文向右移动5个字符的位置)
sed 's/^/     /'
awk '{printf("     %s\n",$0)}'
# 以79个字符为宽度,将所有文本右对齐
# 78个字符外加最后的一个空格
sed -e :a -e 's/^.\{1,78\}$/ &/;ta'
awk '{printf("%79s\n",$0)}'
# 以79个字符为宽度,使所有文本居中。在方法1中,为了让文本居中每一行的前
# 头和后头都填充了空格。 在方法2中,在居中文本的过程中只在文本的前面填充
# 空格,并且最终这些空格将有一半会被删除。此外每一行的后头并未填充空格。
sed  -e :a -e 's/^.\{1,77\}$/ & /;ta'                     # 方法1
sed  -e :a -e 's/^.\{1,77\}$/ &/;ta' -e 's/\( *\)\1/\1/'  # 方法2
awk '{for(i=0;i<39-length($0)/2;i++)printf(" ");printf("%s\n",$0)}'  #相当于上面的方法二
# 在每一行中查找字串“foo”,并将找到的“foo”替换为“bar”
sed 's/foo/bar/'                 # 只替换每一行中的第一个“foo”字串
sed 's/foo/bar/4'                # 只替换每一行中的第四个“foo”字串
sed 's/foo/bar/g'                # 将每一行中的所有“foo”都换成“bar”
sed 's/\(.*\)foo\(.*foo\)/\1bar\2/' # 替换倒数第二个“foo”
sed 's/\(.*\)foo/\1bar/'            # 替换最后一个“foo”
awk '{gsub(/foo/,"bar");print $0}'   # 将每一行中的所有“foo”都换成“bar”
# 只在行中出现字串“baz”的情况下将“foo”替换成“bar”
sed '/baz/s/foo/bar/g'
awk '{if(/baz/)gsub(/foo/,"bar");print $0}'
# 将“foo”替换成“bar”,并且只在行中未出现字串“baz”的情况下替换
sed '/baz/!s/foo/bar/g'
awk '{if(/baz$/)gsub(/foo/,"bar");print $0}'
# 不管是“scarlet”“ruby”还是“puce”,一律换成“red”
sed 's/scarlet/red/g;s/ruby/red/g;s/puce/red/g'  #对多数的sed都有效
gsed 's/scarlet\|ruby\|puce/red/g'               # 只对GNU sed有效
awk '{gsub(/scarlet|ruby|puce/,"red");print $0}'
# 倒置所有行,第一行成为最后一行,依次类推(模拟“tac”)。
# 由于某些原因,使用下面命令时HHsed v1.5会将文件中的空行删除
sed '1!G;h;$!d'               # 方法1
sed -n '1!G;h;$p'             # 方法2
awk '{A[i++]=$0}END{for(j=i-1;j>=0;j--)print A[j]}'
# 将行中的字符逆序排列,第一个字成为最后一字,……(模拟“rev”)
sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'
awk '{for(i=length($0);i>0;i--)printf("%s",substr($0,i,1));printf("\n")}'
# 将每两行连接成一行(类似“paste”)
sed '$!N;s/\n/ /'
awk '{f=!f;if(f)printf("%s",$0);else printf(" %s\n",$0)}'
# 如果当前行以反斜杠“\”结束,则将下一行并到当前行末尾
# 并去掉原来行尾的反斜杠
sed -e :a -e '/\\$/N; s/\\\n//; ta'
awk '{if(/\\$/)printf("%s",substr($0,0,length($0)-1));else printf("%s\n",$0)}'
# 如果当前行以等号开头,将当前行并到上一行末尾
# 并以单个空格代替原来行头的“=”
sed -e :a -e '$!N;s/\n=/ /;ta' -e 'P;D'
awk '{if(/^=/)printf(" %s",substr($0,2));else printf("%s%s",a,$0);a="\n"}END{printf("\n")}'
# 为数字字串增加逗号分隔符号,将“1234567”改为“1,234,567”
gsed ':a;s/\B[0-9]\{3\}\>/,&/;ta'                     # GNU sed
sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta'  # 其他sed
#awk的正则没有后向匹配和引用,搞的比较狼狈,呵呵。
awk '{while(match($0,/[0-9][0-9][0-9][0-9]+/)){$0=sprintf("%s,%s",substr($0,0,RSTART+RLENGTH-4),substr($0,RSTART+RLENGTH-3))}print $0}'
# 为带有小数点和负号的数值增加逗号分隔符(GNU sed)
gsed -r ':a;s/(^|[^0-9.])([0-9]+)([0-9]{3})/\1\2,\3/g;ta'
#和上例差不多
awk '{while(match($0,/[^\.0-9][0-9][0-9][0-9][0-9]+/)){$0=sprintf("%s,%s",substr($0,0,RSTART+RLENGTH-4),substr($0,RSTART+RLENGTH-3))}print $0}'
# 在每5行后增加一空白行 (在第5,10,15,20,等行后增加一空白行)
gsed '0~5G'                      # 只对GNU sed有效
sed 'n;n;n;n;G;'                 # 其他sed
awk '{print $0;i++;if(i==5){printf("\n");i=0}}'
选择性地显示特定行:
# 显示文件中的前10行 (模拟“head”的行为)
sed 10q
awk '{print;if(NR==10)exit}'
# 显示文件中的第一行 (模拟“head -1”命令)
sed q
awk '{print;exit}'
# 显示文件中的最后10行 (模拟“tail”)
sed -e :a -e '$q;N;11,$D;ba'
#用awk干这个有点亏,得全文缓存,对于大文件肯定很慢
awk '{A[NR]=$0}END{for(i=NR-9;i<=NR;i++)print A[i]}'
# 显示文件中的最后2行(模拟“tail -2”命令)
sed '$!N;$!D'
awk '{A[NR]=$0}END{for(i=NR-1;i<=NR;i++)print A[i]}'
# 显示文件中的最后一行(模拟“tail -1”)
sed '$!d'                        # 方法1
sed -n '$p'                      # 方法2
#这个比较好办,只存最后一行了。
awk '{A=$0}END{print A}'
# 显示文件中的倒数第二行
sed -e '$!{h;d;}' -e x              # 当文件中只有一行时,输出空行
sed -e '1{$q;}' -e '$!{h;d;}' -e x  # 当文件中只有一行时,显示该行
sed -e '1{$d;}' -e '$!{h;d;}' -e x  # 当文件中只有一行时,不输出
#存两行呗(当文件中只有一行时,输出空行)
awk '{B=A;A=$0}END{print B}'
# 只显示匹配正则表达式的行(模拟“grep”)
sed -n '/regexp/p'               # 方法1
sed '/regexp/!d'                 # 方法2
awk '/regexp/{print}'
# 只显示“不”匹配正则表达式的行(模拟“grep -v”)
sed -n '/regexp/!p'              # 方法1,与前面的命令相对应
sed '/regexp/d'                  # 方法2,类似的语法
awk '!/regexp/{print}'
# 查找“regexp”并将匹配行的上一行显示出来,但并不显示匹配行
sed -n '/regexp/{g;1!p;};h'
awk '/regexp/{print A}{A=$0}'
# 查找“regexp”并将匹配行的下一行显示出来,但并不显示匹配行
sed -n '/regexp/{n;p;}'
awk '{if(A)print;A=0}/regexp/{A=1}'
# 显示包含“regexp”的行及其前后行,并在第一行之前加上“regexp”所在行的行号 (类似“grep -A1 -B1”)
sed -n -e '/regexp/{=;x;1!p;g;$!N;p;D;}' -e h
awk '{if(F)print;F=0}/regexp/{print NR;print b;print;F=1}{b=$0}'
# 显示包含“AAA”、“BBB”和“CCC”的行(任意次序)
sed '/AAA/!d; /BBB/!d; /CCC/!d'   # 字串的次序不影响结果
awk '{if(match($0,/AAA/) && match($0,/BBB/) && match($0,/CCC/))print}'
# 显示包含“AAA”、“BBB”和“CCC”的行(固定次序)
sed '/AAA.*BBB.*CCC/!d'
awk '{if(match($0,/AAA.*BBB.*CCC/))print}'
# 显示包含“AAA”“BBB”或“CCC”的行 (模拟“egrep”)
sed -e '/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d    # 多数sed
gsed '/AAA\|BBB\|CCC/!d'                        # 对GNU sed有效
awk '/AAA/{print;next}/BBB/{print;next}/CCC/{print}'
awk '/AAA|BBB|CCC/{print}'
# 显示包含“AAA”的段落 (段落间以空行分隔)
# HHsed v1.5 必须在“x;”后加入“G;”,接下来的3个脚本都是这样
sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;'
awk 'BEGIN{RS=""}/AAA/{print}'
awk -vRS= '/AAA/{print}'
# 显示包含“AAA”“BBB”和“CCC”三个字串的段落 (任意次序)
sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;/BBB/!d;/CCC/!d'
awk -vRS= '{if(match($0,/AAA/) && match($0,/BBB/) && match($0,/CCC/))print}'
# 显示包含“AAA”、“BBB”、“CCC”三者中任一字串的段落 (任意次序)
sed -e '/./{H;$!d;}' -e 'x;/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d
gsed '/./{H;$!d;};x;/AAA\|BBB\|CCC/b;d'         # 只对GNU sed有效
awk -vRS= '/AAA|BBB|CCC/{print "";print}'
# 显示包含65个或以上字符的行
sed -n '/^.\{65\}/p'
cat ll.txt | awk '{if(length($0)>=65)print}'
# 显示包含65个以下字符的行
sed -n '/^.\{65\}/!p'            # 方法1,与上面的脚本相对应
sed '/^.\{65\}/d'                # 方法2,更简便一点的方法
awk '{if(length($0)<=65)print}'
# 显示部分文本——从包含正则表达式的行开始到最后一行结束
sed -n '/regexp/,$p'
awk '/regexp/{F=1}{if(F)print}'
# 显示部分文本——指定行号范围(从第8至第12行,含8和12行)
sed -n '8,12p'                   # 方法1
sed '8,12!d'                     # 方法2
awk '{if(NR>=8 && NR<12)print}'
# 显示第52行
sed -n '52p'                     # 方法1
sed '52!d'                       # 方法2
sed '52q;d'                      # 方法3, 处理大文件时更有效率
awk '{if(NR==52){print;exit}}'
# 从第3行开始,每7行显示一次
gsed -n '3~7p'                   # 只对GNU sed有效
sed -n '3,${p;n;n;n;n;n;n;}'     # 其他sed
awk '{if(NR==3)F=1}{if(F){i++;if(i%7==1)print}}'
# 显示两个正则表达式之间的文本(包含)
sed -n '/Iowa/,/Montana/p'       # 区分大小写方式
awk '/Iowa/{F=1}{if(F)print}/Montana/{F=0}'
选择性地删除特定行:
# 显示通篇文档,除了两个正则表达式之间的内容
sed '/Iowa/,/Montana/d'
awk '/Iowa/{F=1}{if(!F)print}/Montana/{F=0}'
# 删除文件中相邻的重复行(模拟“uniq”)
# 只保留重复行中的第一行,其他行删除
sed '$!N; /^\(.*\)\n\1$/!P; D'
awk '{if($0!=B)print;B=$0}'
# 删除文件中的重复行,不管有无相邻。注意hold space所能支持的缓存大小,或者使用GNU sed。
sed -n 'G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P'  #bones7456注:我这里此命令并不能正常工作
awk '{if(!($0 in B))print;B[$0]=1}'
# 删除除重复行外的所有行(模拟“uniq -d”)
sed '$!N; s/^\(.*\)\n\1$/\1/; t; D'
awk '{if($0==B && $0!=l){print;l=$0}B=$0}'
# 删除文件中开头的10行
sed '1,10d'
awk '{if(NR>10)print}'
# 删除文件中的最后一行
sed '$d'
#awk在过程中并不知道文件一共有几行,所以只能通篇缓存,大文件可能不适合,下面两个也一样
awk '{B[NR]=$0}END{for(i=0;i<=NR-1;i++)print B[i]}'
# 删除文件中的最后两行
sed 'N;$!P;$!D;$d'
awk '{B[NR]=$0}END{for(i=0;i<=NR-2;i++)print B[i]}'
# 删除文件中的最后10行
sed -e :a -e '$d;N;2,10ba' -e 'P;D'   # 方法1
sed -n -e :a -e '1,10!{P;N;D;};N;ba'  # 方法2
awk '{B[NR]=$0}END{for(i=0;i<=NR-10;i++)print B[i]}'
# 删除8的倍数行
gsed '0~8d'                           # 只对GNU sed有效
sed 'n;n;n;n;n;n;n;d;'                # 其他sed
awk '{if(NR%8!=0)print}' |head
# 删除匹配式样的行
sed '/pattern/d'                      # 删除含pattern的行。当然pattern可以换成任何有效的正则表达式
awk '{if(!match($0,/pattern/))print}'
# 删除文件中的所有空行(与“grep ‘.’ ”效果相同)
sed '/^$/d'                           # 方法1
sed '/./!d'                           # 方法2
awk '{if(!match($0,/^$/))print}'
# 只保留多个相邻空行的第一行。并且删除文件顶部和尾部的空行。
# (模拟“cat -s”)
sed '/./,/^$/!d'        #方法1,删除文件顶部的空行,允许尾部保留一空行
sed '/^$/N;/\n$/D'      #方法2,允许顶部保留一空行,尾部不留空行
awk '{if(!match($0,/^$/)){print;F=1}else{if(F)print;F=0}}'  #同上面的方法2
# 只保留多个相邻空行的前两行。
sed '/^$/N;/\n$/N;//D'
awk '{if(!match($0,/^$/)){print;F=0}else{if(F<2)print;F++}}'
# 删除文件顶部的所有空行
sed '/./,$!d'
awk '{if(F || !match($0,/^$/)){print;F=1}}'
# 删除文件尾部的所有空行
sed -e :a -e '/^\n*$/{$d;N;ba' -e '}'  # 对所有sed有效
sed -e :a -e '/^\n*$/N;/\n$/ba'        # 同上,但只对 gsed 3.02.*有效
awk '/^.+$/{for(i=l;i
# 删除每个段落的最后一行
sed -n '/^$/{p;h;};/./{x;/./p;}'
#很长,很ugly,应该有更好的办法
awk -vRS= '{B=$0;l=0;f=1;while(match(B,/\n/)>0){print substr(B,l,RSTART-l-f);l=RSTART;sub(/\n/,"",B);f=0};print ""}'
特殊应用:
# 移除手册页(man page)中的nroff标记。在Unix System V或bash shell下使
# 用’echo’命令时可能需要加上 -e 选项。
sed "s/.`echo \\\b`//g"    # 外层的双括号是必须的(Unix环境)
sed 's/.^H//g'             # 在bash或tcsh中, 按 Ctrl-V 再按 Ctrl-H
sed 's/.\x08//g'           # sed 1.5,GNU sed,ssed所使用的十六进制的表示方法
awk '{gsub(/.\x08/,"",$0);print}'
# 提取新闻组或 e-mail 的邮件头
sed '/^$/q'                # 删除第一行空行后的所有内容
awk '{print}/^$/{exit}'
# 提取新闻组或 e-mail 的正文部分
sed '1,/^$/d'              # 删除第一行空行之前的所有内容
awk '{if(F)print}/^$/{F=1}'
# 从邮件头提取“Subject”(标题栏字段),并移除开头的“Subject:”字样
sed '/^Subject: */!d; s///;q'
awk '/^Subject:.*/{print substr($0,10)}/^$/{exit}'
# 从邮件头获得回复地址
sed '/^Reply-To:/q; /^From:/h; /./d;g;q'
#好像是输出第一个Reply-To:开头的行?From是干啥用的?不清楚规则。。
awk '/^Reply-To:.*/{print;exit}/^$/{exit}'
# 获取邮件地址。在上一个脚本所产生的那一行邮件头的基础上进一步的将非电邮地址的部分剃除。(见上一脚本)
sed 's/ *(.*)//; s/>.*//; s/.*[:<] *//'
#取尖括号里的东西吧?
awk -F'[<>]+' '{print $2}'
# 在每一行开头加上一个尖括号和空格(引用信息)
sed 's/^/> /'
awk '{print "> " $0}'
# 将每一行开头处的尖括号和空格删除(解除引用)
sed 's/^> //'
awk '/^> /{print substr($0,3)}'
# 移除大部分的HTML标签(包括跨行标签)
sed -e :a -e 's/<[^>]*>//g;/<[^>]*>/,"",$0);print}'
# 将分成多卷的uuencode文件解码。移除文件头信息,只保留uuencode编码部分。
# 文件必须以特定顺序传给sed。下面第一种版本的脚本可以直接在命令行下输入;
# 第二种版本则可以放入一个带执行权限的shell脚本中。(由Rahul Dhesi的一
# 个脚本修改而来。)
sed '/^end/,/^begin/d' file1 file2 ... fileX | uudecode   # vers. 1
sed '/^end/,/^begin/d' "$@" | uudecode                    # vers. 2
#我不想装个uudecode验证,大致写个吧
awk '/^end/{F=0}{if(F)print}/^begin/{F=1}' file1 file2 ... fileX
# 将文件中的段落以字母顺序排序。段落间以(一行或多行)空行分隔。GNU sed使用
# 字元“\v”来表示垂直制表符,这里用它来作为换行符的占位符——当然你也可以
# 用其他未在文件中使用的字符来代替它。
sed '/./{H;d;};x;s/\n/={NL}=/g' file | sort | sed '1s/={NL}=//;s/={NL}=/\n/g'
gsed '/./{H;d};x;y/\n/\v/' file | sort | sed '1s/\v//;y/\v/\n/'
awk -vRS= '{gsub(/\n/,"\v",$0);print}' ll.txt | sort | awk '{gsub(/\v/,"\n",$0);print;print ""}'
# 分别压缩每个.TXT文件,压缩后删除原来的文件并将压缩后的.ZIP文件
# 命名为与原来相同的名字(只是扩展名不同)。(DOS环境:“dir /b”
# 显示不带路径的文件名)。
echo @echo off >zipup.bat
dir /b *.txt | sed "s/^\(.*\)\.TXT/pkzip -mo \1 \1.TXT/" >>zipup.bat
DOS 环境再次略过,而且我觉得这里用 bash 的参数 ${i%.TXT}.zip 替换更帅。
下面的一些 SED 说明略过,需要的朋友自行查看原文。
{ Source. Thanks bones7456. }

基于 GTK+ 和 Curl 的下载软件 -- Uget

依赖很少,功能完整。这就是我对 Uget 的感受。
希望在 Linux 下使用像 FlashGet 一样的下载程序,怎奈 wxDownloadFast 和 D4x 许久不更新(还记得开发奔流的作者开发过一款下载软件?名字忘了),Gwget 需要一些 GNOME 库,kget需要一些 QT 库。而 Uget 进入了我的视野。



Uget 过去曾命名为 urlgfe,更名的同时增强了很多,个人喜欢的特点:像 FlashGet 一样的基于通配符的批量下载;每个下载分类都可有自定义的配置;下载后的内容通过右键可以方便的打开,删除(记录或连带删除数据);有回收站管 理;Firefox 的 Flashgot 内置支持。
今天看 Gentoo 的更新,发现 Uget 1.5 已经进入了 Portage,就在此推荐一下,若正在使用 Gentoo 又恰好已经有了 GTK+, Uget 是个不错的下载管理器。
{ Thanks guest. }

2009/11/12

Uzbl: 极度简约的网络浏览器


Uzbl 是一个很新的网络浏览器,目前正在活跃开发中,虽然眼下它连 Alpha 阶段都没达到,但通过笔者这些天的试用来看,它已经具有一定的可用性,且也足够稳定,感兴趣的同学大可一试。我推荐 Uzbl,主要因为以下几个方面令我产生兴趣:
  • 遵循 Unix 哲学开发而成,Uzbl 专注于浏览本身,包括书签、历史、下载等在内的功能通过外部脚本来完成。
  • 从 Vi/Vim/Vimperator 身上借鉴了许多,比如:命令/插入模式、Vi/Emacs 风格的键盘绑定、访问链接的 hints 模式等。
  • 界面极度简约,没有菜单栏/工具栏/地址栏这些元素,除了内容渲染区外,仅包含状态行(也可隐藏)。
  • 完全可配置,配置文件及数据文件基于 plaintext。
  • 渲染核心为 WebKit,速度相当快。
  • 获取并安装 Uzbl 可参考其官网的 Get 页面。

Tilda —— 嵌入桌面的透明终端


Tilda ,是一个第三方的 系统终端工具,相比ubuntu自带的终端,最大的特点就是:它能够完全嵌入桌面,嘿嘿,这点,对于一个系统美化疯子,比如我这样的,非常具有诱惑力喔~除此之外,它还具有如下一些功能:

* 可以自定义呼出热键。这能够让你若用即显,不用则隐,非常方便。
* 能够嵌入桌面。我曾让其他的终端程序达到同样的目的,但往往无法直接实现,需要借助于第三方的工具。
* 背景透明。这个特性连同上一个特性,能够使你的终端与整个桌面融为一体。
* 动画效果。在显示或隐藏终端窗口时有个过渡的动画效果,不会突然弹出来把人吓一跳。
* 具有标签功能。这可以让你不必同时启动多个终端实例程序,一个不够,再开标签即可。
* 窗口大小可定制。对于窗口的大小、位置都可以定制
如果你也想体验下这个嵌入桌面的终端,就跟我一起来吧。配置,就分2部分:安装,设置
一. 软件安装
简单到姥姥家了,源里面就有,直接: sudo apt-get install tilda,安装完了就退出好了。
如果万一你终端提示找不到包,那就去“新立德软件包管理器”里面搜索,也能找到的。
二. 简单设置
从“应用程序”—“附件”,来运行 Tilda 吧。这里不用截图吧
首次运行,就会直接弹出软件设置对话框,如图:
2009年6月9日 - East - eastnux

这里,我们需要根据自己的情况,进行写简单的设置。我以自己的配置为例,来简单讲解下。
1. 常规
(1) 让这个终端,在所有的桌面上显示,选中:“在所有工作空间上显示
(2) 为了编辑使用方便,我选中了“置顶”,这样每次调出终端后,它就位于其他窗口的上面,直接可以输入东西了。
(3) 因为我后面,要把 Tilda 加为系统启动,所以,如果它每次开机启动,都显示透明的背景,就比较麻烦了,因此,我选中了:“Tilda启动后隐藏”。
其实我觉得大家都应该选中这个,因为我建议大家把Tilda设置为开机启动启动,这样开机后,tilda就在后台运行着呢,每次想用,可以用快捷键自动调用(快捷键的设置后面会说到)
(4) 字体。毕竟是要嵌入到桌面的,有可能因为你的壁纸太花哨,终端里面的字就看不清了,因此,如果你看不清字,就自己设置个字体吧,我设置了一个粗体,看着比较舒服了,字大小设置成了12。
2。外观
这里是设置Tilda终端窗口,在桌面上的具体位置的。大家可以直接按照我的图,进行设置,我的图设置好,是处于桌面“中央”的。
(1)高度  宽度,是设置终端窗口的“大小”;位置,是设置终端窗口在桌面的具体位置。
(2)启用透明,嘿嘿,我是美化狂人,当然要“启用透明”了,透明度,自己选择吧,数值越大,越透明,最大值是 90。(但还不是完全彻底透明,这个有点郁闷。。。。。)
(3) 动画方向。刚才说了你按快捷键弹出终端窗口的时候,是有个小小的动画过渡效果的,从“上下左右”,4个方向弹出,我喜欢从“左边”弹出。自己都试试看效果吧~
2009年6月9日 - East - eastnux

3. 颜色
这里没什么特别的,可以自己设置下“终端文字的颜色”和“终端背景颜色”(如果你透明了,这个背景颜色就没用了,不需要管它)。
4. 键绑定。这个就是快捷键设置拉。按下“捕捉键绑定”后,自己按个组合键位吧,用来呼出Tilda。我设置的是alt-Q
行了,基本的设置就这些了,已经可以用了,透明的嵌入桌面的,随叫随到的终端,嘿嘿~看看图吧~
2009年6月9日 - East - eastnux

三. 设置成开机启动启动
方法:打开“系统”-“首选项”-“启动程序”,点击:“添加”,名称随便输入,命令,就输入:tilda,就行了,描述写不写随便。看图吧~,很简单的。
2009年6月9日 - East - eastnux

2009/11/08

dhcp的高级配置应用


最近在搞dhcp服务器,多网段,还有option的几个选项,成功后贴出我的配置,和大家分享,不足之处还请大家多多指点。
红帽系(包括fedora)的dhcpd配置文件一般都是/etc/dhcpd.conf ,其租约文件一般是/var/lib/dhcpd/dhcpd.leases
启动命令/etc/init.d/dhcpd restart 或 service dhcpd restart,再基础点的东西我就不说了,大家可以自己看书或上网搜资料。以下是我的/etc/dhcpd.conf 配置:
[root@ zeyark]# more /etc/dhcpd.conf
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.sample
ddns-update-style interim; # ddns-update-style (none|interim|ad-hoc):定义所支持的DNS动态更新类型,该参数 #必选且必须放在第一行且只能在全局配置中使用。
allow client-updates; #允许/忽略客户机更新DNS记录
option classless-static-routes code 121 = array of unsigned integer 8; #定义能根据option 121 (RFC 3442)下发路由
set vendor-string = option vendor-class-identifier; #使能在租约文件下看到设备标识(option 60)
shared-network DHCPnet { #定义广域共享的DHCP网络
subnet 192.168.1.0 netmask 255.255.255.0 {} #这个子网是你启用dhcpd服务网卡的IP地址所在的子网 例如,你服务器 上网 #卡配的IP地址为192.168.1.121 掩码24,192.168.1.0为这个子网的网络地址 #不配这个启动DHCP服务会有问题,会提示错误,不知 subnet 192.168.1.0 #netmask 255.255.255.0 {}这个网段,这个其实是你服务器网卡地址的网段 #划分子网(变长子网)请自行学习,这里不多讲。
option domain-name “zeyark.net”; #定义一个域名
option domain-name-servers 192.168.1.65 ; # 域名服务器的地址
default-lease-time 86400; #默认租约时间
max-lease-time 172800; #最大租约时间
subnet 172.20.0.0 netmask 255.255.255.0 { #定义多子网地址池这是其中的一个
option routers 172.20.0.1; #下发IP地址的时候的子网地址池网关
option subnet-mask 255.255.255.0; #地址池的子网掩码
option broadcast-address 172.20.0.255; #地址池的广播地址
option classless-static-routes 24,192,168,0, 172,20,0,1, #静态路由中的一种,option121,表示方法比较变态 28,59,52,114,96, 172,20,0,1, 29,59,52,114,120, 172,20,0,1; #其中24,192,168,0, 24是掩码,192,168,0,是网段
} #注意,这里都是逗号,不是点号。我说的变态就是说这个
subnet 172.11.0.0 netmask 255.255.255.0 { #定义另一个地址池
range 172.11.0.2 172.11.0.127;
option routers 172.11.0.1;
option subnet-mask 255.255.255.0;
option broadcast-address 172.11.0.255;
option classless-static-routes 24,192,168,0, 172,11,0,1,
28,59,52,114,96, 172,11,0,1, 29,59,52,114,120, 172,11,0,1;
}
subnet 172.21.0.0 netmask 255.255.255.0 { #定义另一个地址池
range 172.21.0.2 172.21.0.127;
option routers 172.21.0.1;
option subnet-mask 255.255.255.0;
option broadcast-address 172.21.0.255;
option classless-static-routes 24,192,168,0, 172,21,0,1,
28,59,52,114,96, 172,21,0,1, 29,59,52,114,120, 172,21,0,1;
}
subnet 172.16.11.0 netmask 255.255.255.0 { #定义另一个地址池
class “foo” {
match if substring (option vendor-class-identifier, 0, 31) = “H3C. H3C ICG2000,\”dslforum.org\”";
} #定义一个类,按设备标识下发IP地址,即传说中的option 60
pool { #定义一个池,允许设备属于class “foo”这个类的设备获取range #172.16.11.2 172.16.11.127;的地址
allow members of “foo”;
range 172.16.11.2 172.16.11.127;
}
pool { #定义一个池,禁止设备属于class “foo”这个类的设备获取range #172.16.11.128 172.16.11.254里的地址
deny members of “foo”;
range 172.16.11.128 172.16.11.254;
}
option routers 172.16.11.1;
option subnet-mask 255.255.255.0;
option broadcast-address 172.16.11.255;
option classless-static-routes 24,192,168,0, 172,16,11,1,
28,59,52,114,96, 172,16,11,1, 29,59,52,114,120, 172,16,11,1;
}
}

作者:猪8戒 下凡  来自:http://www.ownlinux.cn/

2009/10/31

学会使用文献管理工具


为了学习如何搜集与整理文献,我在网上查了许多资料,它们大多是经验之谈,其中不乏真知灼见,但是鲜有涉及文献管理软件的选择与使用的。我也看过一些博士写的科研心得,谈及有关文献管理方面的内容时,给出了一些较为低效的方式,譬如:
  • 下载电子版文献时(caj,pdf,html),把文章题目粘贴为文件名。
  • 不同主题存入不同文件夹。文件夹的题目要简短。
  • 看过的文献归入子文件夹,最起码要把有用的和没用的分开。
  • 重要文献根据重要程度在文件名前加001, 002, 003 之类的编号,然后按名称排列图标,最重要的文献就排在最前了。
  • ... ...
其实,有许多种文献管理软件,譬如 EndNote、NoteExpress、Biblioscape 等,可以让它们成为我们搜集与整理参考文献的好帮手。选择一款称手的文献管理软件,并积极地在文献管理中使用它,这是研究人员必做的一项功课,它们可以让你深刻感知文献的搜集与整理是一件严肃的事情。
具体有哪些文献管理软件可供你选择,由于我大部分时间是在 Linux 平台上工作,下面只介绍几款 Linux 下可供选择的文献管理软件(在 Windows 平台也可运行)。
  • JabRef: 这是一款使用 JAVA 开发的文献管理软件,可以输出BibTeX格式的文献信息。BibTeX 格式的参考文献信息文档可以由 TeX 文档中进行引用并处理生成可阅读的 PDF 文档。即使你不使用 TeX 来写论文,仅仅使用 JabRef 来管理文献也是可以的,另外借助一些工具可以将 BibTeX 格式文件转化为 MS Word 文献管理格式。
  • Bibus: 用Python写的,使用MySQL或SQLite(任选其一)数据库储存参考文献数据。它能在 OpenOffice及MS Word中直接插入引文,而无需安装宏或插件,并自动生成参考文献目录。其功能目前已与商业软件Endnote,RM接近,支持 Unicode,支持中文。
  • Zotero:这是 Firefox 的一个扩展,可以帮助你收集、管理和引用文献资料。它的主要特色就是与网页浏览器高度集成,可以很方便地保存、管理你所浏览的网页,也很容易添加阅读笔记。当然,Zotero 也可胜任一般性的文献管理,可以导出各类文献数据,并且目前已支持文献数据网络共享。
其实无论采取哪一款文献管理软件,它们通常都具备将文献信息存导出为 BibTeX 数据文件的功能,利用 BibTeX 数据文件并结合你所使用的排版软件,即可实现在文档中引用文献。这一流程如下图所示:



最后再推荐一个在线文献管理网站——新科学(http://www.xinkexue.com/) 可以进行在线文献管理,还可以撰写读书笔记,并且支持在线评论等功能。

2009/10/30

Linux/Unix 速查表 (Cheat sheet) 集锦

TechieBlogger 为 Linux/Unix 用户收集了 27 份速查表(Cheat sheet),涵盖 Linux 命令行、Linux 安全、Linux 管理、GNOME/KDE、sed/awk/vim 等内容,非常全面。



这些速查表可从 TechieBlogger 网站获取。



来自linuxtoy

BlueProximity: 通过探测蓝牙设备的距离来锁住屏幕



BlueProximit通过探测一个蓝牙设备到笔记本的距离来执行一些命令,比如锁住屏幕等。



这个软件安装好第一次执行的时候,出现一个界面,设置好蓝牙设备的 Mac 地址和频道,以及要执行的命令。比如通过探测你的手机和你电脑的距离。当你的手机离你的电脑超过 7 米,时间超过 6 秒,就执行命令锁住屏幕。当你的手机距离你电脑 4 米以内,就解锁屏幕。

来自:http://linuxtoy.org/archives/blueproximity.html

2009/10/24

configure命令详解

–cache-file=FILE’configure’会在你的系统上测试存在的特性(或者bug!).为了加速随后进行的配置,测试的结果会存储在一个cache file里.当configure一个每个子树里都有’configure’脚本的复杂的源码树时,一个很好的cache file的存在会有很大帮助.

–help
输出帮助信息.即使是有经验的用户也偶尔需要使用使用’–help’选项,因为一个复杂的项目会包含附加的选项.例如,GCC包里的’configure’脚本就包含了允许你控制是否生成和在GCC中使用GNU汇编器的选项.
–no-create
’configure’中的一个主要函数会制作输出文件.此选项阻止’configure’生成这个文件.你可以认为这是一种演习(dry run),尽管缓存(cache)仍然被改写了.
–quiet
–silent
当’configure’进行他的测试时,会输出简要的信息来告诉用户正在作什么.这样作是因为’configure’可能会比较慢,没有这种输出的话用户将会被扔在一旁疑惑正在发生什么.使用这两个选项中的任何一个都会把你扔到一旁.(译注:这两句话比较有意思,原文是这样的:If there was no such output, the user would be left wondering what is happening. By using this option, you too can be left wondering!)
–version
打印用来产生’configure’脚本的Autoconf的版本号.
–prefix=PEWFIX
’–prefix’是最常用的选项.制作出的’Makefile’会查看随此选项传递的参数,当一个包在安装时可以彻底的重新安置他的结构独立部分. 举一个例子,当安装一个包,例如说Emacs,下面的命令将会使Emacs Lisp file被安装到”/opt/gnu/share”:
$ ./configure –prefix=/opt/gnu
–exec-prefix=EPREFIX
与’–prefix’选项类似,但是他是用来设置结构倚赖的文件的安装位置.编译好的’emacs’二进制文件就是这样一个问件.如果没有设置这个选项的话,默认使用的选项值将被设为和’–prefix’选项值一样.
–bindir=DIR
指定二进制文件的安装位置.这里的二进制文件定义为可以被用户直接执行的程序.
–sbindir=DIR
指定超级二进制文件的安装位置.这是一些通常只能由超级用户执行的程序.
–libexecdir=DIR
指定可执行支持文件的安装位置.与二进制文件相反,这些文件从来不直接由用户执行,但是可以被上面提到的二进制文件所执行.
–datadir=DIR
指定通用数据文件的安装位置.
–sysconfdir=DIR
指定在单个机器上使用的只读数据的安装位置.
–sharedstatedir=DIR
指定可以在多个机器上共享的可写数据的安装位置.
–localstatedir=DIR
指定只能单机使用的可写数据的安装位置.
–libdir=DIR
指定库文件的安装位置.
–includedir=DIR
指定C头文件的安装位置.其他语言如C++的头文件也可以使用此选项.
–oldincludedir=DIR
指定为除GCC外编译器安装的C头文件的安装位置.
–infodir=DIR
指定Info格式文档的安装位置.Info是被GNU工程所使用的文档格式.
–mandir=DIR
指定手册页的安装位置.
–srcdir=DIR
这个选项对安装没有作用.他会告诉’configure’源码的位置.一般来说不用指定此选项,因为’configure’脚本一般和源码文件在同一个目录下.
–program-prefix=PREFIX
指定将被加到所安装程序的名字上的前缀.例如,使用’–program-prefix=g’来configure一个名为’tar’的程序将会使安装的程序被命名为’gtar’.当和其他的安装选项一起使用时,这个选项只有当他被`Makefile.in’文件使用时才会工作.
–program-suffix=SUFFIX
指定将被加到所安装程序的名字上的后缀.
–program-transform-name=PROGRAM
这里的PROGRAM是一个sed脚本.当一个程序被安装时,他的名字将经过`sed -e PROGRAM’来产生安装的名字.
–build=BUILD
指定软件包安装的系统平台.如果没有指定,默认值将是’–host’选项的值.
–host=HOST
指定软件运行的系统平台.如果没有指定,将会运行`config.guess’来检测.
–target=GARGET
指定软件面向(target to)的系统平台.这主要在程序语言工具如编译器和汇编器上下文中起作用.如果没有指定,默认将使用’–host’选项的值.
–disable-FEATURE
一些软件包可以选择这个选项来提供为大型选项的编译时配置,例如使用Kerberos认证系统或者一个实验性的编译器最优配置.如果默认是提供这些特性,可以使用’–disable-FEATURE’来禁用它,这里’FEATURE’是特性的名字.例如:
$ ./configure –disable-gui
-enable-FEATURE[=ARG]
相反的,一些软件包可能提供了一些默认被禁止的特性,可以使用’–enable-FEATURE’来起用它.这里’FEATURE’是特性的名字.一个特性可能会接受一个可选的参数.例如:
$ ./configure –enable-buffers=128
`–enable-FEATURE=no’与上面提到的’–disable-FEATURE’是同义的.
–with-PACKAGE[=ARG]
在自由软件社区里,有使用已有软件包和库的优秀传统.当用’configure’来配置一个源码树时,可以提供其他已经安装的软件包的信息.例如,倚赖于Tcl和Tk的BLT器件工具包.要配置BLT,可能需要给’configure’提供一些关于我们把Tcl和Tk装的何处的信息:
$ ./configure –with-tcl=/usr/local –with-tk=/usr/local
‘–with-PACKAGE=no’与下面将提到的’–without-PACKAGE’是同义的.
–without-PACKAGE
有时候你可能不想让你的软件包与系统已有的软件包交互.例如,你可能不想让你的新编译器使用GNU ld.通过使用这个选项可以做到这一点:
$ ./configure –without-gnu-ld
–x-includes=DIR
这个选项是’–with-PACKAGE’选项的一个特例.在Autoconf最初被开发出来时,流行使用’configure’来作为Imake 的一个变通方法来制作运行于X的软件.’–x-includes’选项提供了向’configure’脚本指明包含X11头文件的目录的方法.
–x-libraries=DIR
类似的,’–x-libraries’选项提供了向’configure’脚本指明包含X11库的目录的方法.
在源码树中运行’configure’是不必要的同时也是不好的.一个由’configure’产生的良好的’Makefile’可以构筑源码属于另一棵树的软件包.在一个独立于源码的树中构筑派生的文件的好处是很明显的:派生的文件,如目标文件,会凌乱的散布于源码树.这也使在另一个不同的系统或用不同的配置选项构筑同样的目标文件非常困难.建议使用三棵树:一棵源码树(source tree),一棵构筑树(build tree),一棵安装树(install tree).这里有一个很接近的例子,是使用这种方法来构筑GNU malloc包:
$ gtar zxf mmalloc-1.0.tar.gz
$ mkdir build && cd build
$ ../mmalloc-1.0/configure
creating cache ./config.cache
checking for gcc… gcc
checking whether the C compiler (gcc ) works… yes
checking whether the C compiler (gcc ) is a cross-compiler… no
checking whether we are using GNU C… yes
checking whether gcc accepts -g… yes
checking for a BSD compatible install… /usr/bin/install -c
checking host system type… i586-pc-linux-gnu
checking build system type… i586-pc-linux-gnu
checking for ar… ar
checking for ranlib… ranlib
checking how to run the C preprocessor… gcc -E
checking for unistd.h… yes
checking for getpagesize… yes
checking for working mmap… yes
checking for limits.h… yes
checking for stddef.h… yes
updating cache ../config.cache
creating ./config.status
这样这棵构筑树就被配置了,下面可以继续构筑和安装这个包到默认的位置’/usr/local’:
$ make all && make install
一个软件包通过编译源代码安装后,如何完全的卸载??
如果原先的source还在的话,很多source的Makefile都有写uninstall规则,直接在Souce里make uninstall就可行,不过碰到无良作者没写的,那一句一句看Makefile里install部分他都干了些什么,然后挨个删除。
如果source没了…..那就一边郁闷吧
到目前为止, 我装的都可以make uninstall…….
(因为总是不小心装错地方, 结果就make uninstall&&make clean,然后重新configure……)
linux下软件的基本安装和卸载
Linux软件的安装和卸载一直是困扰许多新用户的难题。在Windows中,我们可以使用软件自带的安装卸载程序或在控制面板中的“添加/删除程序”来实现。与其相类似,在Linux下有一个功能强大的软件安装卸载工具,名为 RPM。它可以用来建立、安装、查询、更新、卸载软件。该工具是在命令行下使用的。在Shell的提示符后输入rpm,就可获得该命令的帮助信息。
软件的安装
Linux下软件的安装主要有两种不同的形式。第一种安装文件名为xxx.tar.gz;另一种安装文件名为xxx.i386.rpm。以第一种方式发行的软件多为以源码形式发送的;第二种方式则是直接以二进制形式发送的。
对于第一种,安装方法如下:
1 .首先,将安装文件拷贝至你的目录中。例如,如果你是以root身份登录上的,就将软件拷贝至/root中。
#cp xxx.tar.gz /root
2 .由于该文件是被压缩并打包的,应对其解压缩。命令为:
#tar xvzf filename.tar.gz 如果是filename.tar.bz2格式的,应该是tar jxvf filename.tar.bz2来解压
3. 执行该命令后,安装文件按路径,解压缩在当前目录下。用ls命令可以看到解压缩后的文件。通常在解压缩后产生的文件中,有“Install”的文件。该文件为纯文本文件,详细讲述了该软件包的安装方法。
4.执行解压缩后产生的一个名为configure的可执行脚本程序。它是用于检查系统是否有编译时所需的库,以及库的版本是否满足编译的需要等安装所需要的系统信息。为随后的编译工作做准备。命令为: #./configure
如果您想把软件安装到指定目录,应该用#./configure –prefix=/您自己指定的目录,比如我想把一个mlterm安装到/opt/mlterm目录中,应该如下输入
#./configure –prefix=/opt/mlterm
5.检查通过后,将生成用于编译的MakeFile文件。此时,可以开始进行编译了。编译的过程视软件的规模和计算机性能的不同,所耗费的时间也不同。命令为: #make。
6.成功编译后,键入如下的命令开始安装:
#make install
7.安装完毕,应清除编译过程中产生的临时文件和配置过程中产生的文件。键入如下命令:
#make clean
#make distclean
至此,软件的安装结束。
对于第二种,其安装方法要简单得多。
同第一种方式一样,将安装文件拷贝至你的目录中。然后使用rpm来安装该文件。命令如下:
#rpm -i filename.i386.rpm
rpm将自动将安装文件解包,并将软件安装到缺省的目录下。并将软件的安装信息注册到rpm的数据库中。参数i的作用是使rpm进入安装模式。
软件的卸载
1.软件的卸载主要是使用rpm来进行的。卸载软件首先要知道软件包在系统中注册的名称。键入命令:
#rpm -q -a
即可查询到当前系统中安装的所有的软件包。
2. 确定了要卸载的软件的名称,就可以开始实际卸载该软件了。键入命令:
#rpm -e [package name]
即可卸载软件。参数e的作用是使rpm进入卸载模式。对名为[package name]的软件包进行卸载。由于系统中各个软件包之间相互有依赖关系。如果因存在依赖关系而不能卸载,rpm将给予提示并停止卸载。你可以使用如下的命令来忽略依赖关系,直接开始卸载:
#rpm -e [package name] -nodeps
忽略依赖关系的卸载可能会导致系统中其它的一些软件无法使用
如果想知道rpm包安装到哪里了呢?
应该用 #rpm -ql [package name]
3.如何卸载用源码包安装的软件?
最好是看README和INSTALL ;一般的情况下都有说,但大多软件没有提供源码包的卸载方法;我们可以找到软件的安装点删除。主要看你把它安装在哪了。
比如:
如果安装软件时,指定个目录。这个问题也不会难;
比如用源码包安装gaim 的
#./configure –prefix=/opt/gaim
#make
#make install
如果安装mlterm
#./configure –prefix=/opt/mlterm
#make
#make install
把源码包安装的软件,都指定安装在 /opt目录中,这样不就知道了??
如果删除,就删除相应的软件目录;
有些软件要在解压安装目录中执行 make uninstall ,这样就卸载掉了.

原载: OwnLinux.cn

2009/10/19

CPU-G: CPU-Z for Linux


CPU-Z 是 Windows 平台上一款比较有名的获取 CPU 相关信息的软件,CPU-G 与之相似,不过它是为咱们 Linux 用户而准备的。利用 CPU-G,你可以了解 CPU、主板、内存等方面的硬件信息。

CPU-G 使用 Python 语言写成,在下载并解包后,可通过以下指令执行:


./cpu-g
你可以从 CPU-G 的项目主页下载其 Tarball 包。

2009/05/11

Audacious



Audacious 是一款轻量级的音乐播放器,基于GTK2,这使得其对多语言环境支持更好, Audaicous致力于提升音乐品质,并且支持广泛的音频编码格式.Audacious是大名鼎鼎的BMP(Beep Media Player)的衍生版,后者又是XMMS的衍生版, Audacious的回放引擎要比ubuntu默认的GStreamer强大的多,而且可以通过插件获得更强大的解码/功能.废话不多说,let’s begin~

1:安装Audacious:

1)Ubuntu 的软件源中一般都有Audacious, 你所需要做的就是打开终端:

[sudo apt-get install audacious] //这里是安装audacious主程序

[sudo apt-get install audacious-plugins audacious-plugins-extra]

//这里是安装audacious的插件/解码器

2)如果你的源里面没有,也可以选择编译安装:

在官网下载源码包:

http://audacious-media-player.org/downloads

和上面apt-get安装的一样的道理,需要下载两个包包:) ~~

audacious-1.5.1.tgz和audacious-plugins-1.5.1.tgz

下载完成之后解压出来,可以双击解压或者终端 tar -xvvf 压缩包名

3)如果你很熟悉编译安装的流程,可以跳过这里:

~终端cd 到你解压出来的目录

~特殊情况下需要做这一句: [chmod 755 configure]来给configure文件加可以执行的权限

~执行[./configure CFLAGS=-O2]:注意:如果是很少编译软件,可能在这里遇到很多问题,

先确保安装了最基本的编译环境: [sudo apt-get install build-essential]

这里举例说明一个问题:cofigure时遇到:

checking for GLIB… no

configure: error:

Cannot find Glib2! If you are using binary packages based system, check that you

have the corresponding -dev/devel packages installed.

于是可以按照给出的提示,在新利得里面搜索glib2,或者[aptitude search] 等等方法,总而言之

会找到这样一个东东:libglib2.0-dev,定睛一看介绍,这不就是你要找的么?安装之~~ 然后继续 configure, 遇到警告的话可以忽略的,遇到下一个error?如法炮制即可

~好了,能看到这里,我假设你前面已经通过了,现在在终端执行[make], 这一步执行的时间取决于你的 机器速度了,好在audacious是个很小的软件,最长不过几分钟就可以编译完成

notice:在做下一步前,确保configure和make你已经通过,不然hn安装失败,后果自负哦

~OK,历经千辛万苦,终于编译完成了,继续在终端输入[sudo make install] 就安装完成了

~不要忘了安装audacious-plugins,步骤同上:configure->make->make install

2:配置Audacious:

不会吧?又要配置?为什么每个软件装完都要折腾折腾才能用的顺手?汗…本地化一直是linux的伤..

继续努力吧~~

你可能遇到的问题:

1)播放列表乱码(这大概是你使用这个系统以来最头疼的问题了)

没问题,这样设置一下:

首选项->播放列表->元数据: (Preferences->Playlist->Petadata)

使用自動编码检测器:chinese (Auto character encoding detected for)

备用字符编码cp936 (Fallback character encoding)

2)音量很小:

首选项->重放增益->默认增益改为0.00(Preferences->Replay Gain->Default Gain)

也可以设置为大于0,但可能会产生失真

3)想要最小化到托盘,就像千千静听那样么?

首选项->插件->常规,选上Status Icon. (Preferences->Plugins->General)

点击托盘图标即可

3:恭喜恭喜,终于大功告成了, 享受Audacious给你带来的快乐吧!~~

本文原作者:OWNLINUX团队->坠落de咾鼠

Audacious

2009/05/10

Weather wallpaper




Weather wallpaper 是一款蛮有趣的软件,它可以根据你所在位置的天气情况实时创建墙纸并自动设置到你的 Linux 桌面。
在启动 Weather wallpaper 后,它将显示预设位置的天气信息。你需要点击状态栏的图标,并到首选项中将位置更改为你实际所在的地方
Weather wallpaper 提供有 Debian/Ubuntu 源、Archlinux 用的 PKGBUILD、Gentoo 用的 ebuild,另外也包含源码包可以下载。
Weather wallpaper

2009/03/01

JMPlayer:正在开发中的音乐播放器


jmplayer这是一款由Ubuntu中文论坛的zshxiong在业余时间开发的播放器。

虽然Linux下播放器已经有很多了,但是依然没一款播放器能像Windows平台的千千一样集听歌、歌词又对中文支持良好的播放器。

而JMplayer似乎朝着这个方向在努力。

此前我们介绍过一款同样由国人开发的YOYOPlayer(见此),不过它是基于Java的,而且已经停止开发很久了。

而JMPlayer虽然以J开头,但是它是用C++(WxWidgets)开发,不仅跨平台,而且在Linux下拥有原生的GTK+主题。

JMPlayer的全称是:Joy Music Player。

让我们来看看zshxiong对它的简介(原贴在此

http://code.google.com/p/joymplayer/

基于wxWidgets的媒体播放器,运行于Linux平台。目前支持外观皮肤更换,支持歌词同步滚动显示,支持mp3、ogg音频格式;支持 ID3v1/v2标签,支持UTF-8、GB18030、GBK、GB2312等中文编码;支持自定义歌词文件夹,支持自定义歌词、播放列表字体、颜色 等。更多功能正在不断开发中……
需要自行安装gstreamermm
ubuntu8.04下开发

因为需要自行编译gscreamermm才能正常运行该软件,步骤有点多而且麻烦。

所以为了方便大家测试,我将zshxiong的软件包重新打包,现在大家只需要点击下面的链接下载,解压后运行start-jmplayer即可:

http://code-of-tualatrix.googlecode.com/files/JMPlayer.tar.bz2

下面是软件运行的截图:

jmplayer1

jmplayer-preferences

非常期待这款软件的后续发展!

来自于:http://linuxdesktop.cn/2009/02/23/jmplayer.html

jpdftweak——用于调整 PDF 文档的瑞士军刀

jpdftweak  (jPDF Tweak) 是采用 Java 开发的用于调整 PDF 文档的小工具,它可以实现 PDF 文档的合并、分割、页面旋转、页面重新排序、水印、加密、签名以及添加附件等操作。

像 jpdftweak 这类工具,在 MS Windows 中可以找到很多,但是在 Unix-like 中却很稀缺,再认真去找,也只能寻到 pdftk。 由于 pdftk 不支持中文的文件名,另外因为 JAVA 早已开源,现在非常不想安装 gcj 去编译它;还有就是好久都未有更新了,“最新”的版本是 2006 年发布,不支持较新的 PDF  文档版本。所以,当未有发现 jpdftweak 之前,我一直都在 VirtualBox + WinXP 环境中使用 acrobat “偷偷地”修改 PDF 文档,现在终于可以对 acrobat 说 "good bye" 了。

jpdftweak 使用 iText 库操作 PDF 文档,使用 SWing 库 (jGoodies 外观) 开发用户界面。在安装 jpdftweak 软件包时,请确认系统中已安装  jre (>=1.5.0)。另外,jpdftweak 项目针对用户的系统环境中是否已经安装 iText 与 jgoodies-forms 库,分别提供了相应的二进制版本:

Binary download, compact version (Version 0.9, 724 KB)

Binary download, normal version (Version 0.9, 2699 KB)

Download without libraries (Version 0.9, 168 KB)

对于 Gentoo 用户,由于 portage 已经收录了该软件包,可以直接 emerge 安装。若基于 jpdftweak 源码包进行编译安装,请确认系统中已安装以下软件包:

  1. jdk (>=1.5)
  2. itext
  3. jgoodies-forms
  4. dev-java/ant-core-1.7.1-r2

如果你还不是很清楚究竟拿 jpdftweak 来做什么,下面我举个例子。我们经常从网络中获得以 pdf 文档形式发布的电子书,由于书的正文页面之前存在着封面、前言、目录之类的页面,导致书的页码与阅读器的页码往往不对应。这时,我们可以使用 jpdftweak 将封面至目录之间的页码设为空,将目录与正文页面之间的页码设为小写的罗马数字,将正文起始页面设置为阅读器的第 1 页,如下图所示:

关于 jpdftweak 更为详细的信息,请访问其项目主页:http://jpdftweak.sourceforge.net/.

本文来自于:http://www.linuxgem.org/posts/7233