Monday, August 31, 2009

Linux

/ is where everything goes. It is like C:

/home is user files. It is like C:\Documents and Settings

/tmp is temporary files. This is sometimes mounted as a virtual filesystem in RAM. It is like C:\WINDOWS\Temp

/var is files that change a lot. This is sometimes mounted as a virtual filesystem in RAM. There isn't really a Windows equivalent.

/usr is for non-essential programs and libraries. It is like C:\Program Files

/boot is Linux itself, as well as the bootloader.

/bin is essential programs

/lib is essential libraries

/dev gives files for most of the devices plugged into your computer. It is like the special Windows files NUL, COM0, COM1, etc.

/etc is system-wide configuration.

/media is for storage media. It is like "My Computer".

/mnt is used as a temporary mount moint where putting in it /media will clutter things up.

/opt is for third-party binary packages. It is like C:\Program Files

/root is the Administator (root)'s home directory

/proc is a virtual filesystem with files detailing the operation of the system, some of which you can change.

/sbin is for essential administration programs

/sys is like proc but newer (and different).

Friday, August 21, 2009

Linux系统下Mp3标签乱码问题

相信很多朋友在Linux里 播放mp3的时候,不论使用何种mp3播放器,或多或少都会遇到mp3标签乱码的问题。我一般在遇到mp3标签显示乱码的时候都是使用Ex Falso(Quod Libet自带的一个mp3标签编辑器)来编辑一下标签,使我的播放器Quod Libet能够正常识别mp3标签。遇到转换歌曲少的时候,这样做没有什么问题,但是很多刚从Windows转到Linux上来的朋友就头大了,很多在 Windows下显示正常的mp3标签在Linux下全都乱套了。

我们先来看看一些关于mp3的标签和编码的概念再来解决这个问题,大家就会比较清晰一些了。

mp3的标签类型和编码,现在主要存在这几种标准,ID3v1、ID3v2 2.3、ID3v2 2.4、APEv2。它们分别支持的编码为

ID3v1:只支持ISO--8859-1

ID3v2 2.3:ISO--8859-1、UTF-16

ID3v2 2.4:ISO--8859-1、UTF-16、UTF-8

APEv2:UTF-8

我们可以从上面的列表看出,mp3的标签类型和编码是多种多样,没有任何的规范可言的。ID3v1只支持ISO-8859-1这一种编码,它是不支持中文的,所以一般来说只有ID3v1标签的mp3在Linux上 基本上也都是乱码的命,而ID3v2 2.3支持的格式增加了UTF-16,直到ID3v2 2.4版才开始支持UTF-8,但是 ID3v2的两个版本标准并没有统一标签内容的编码。这里值得一提的是APEv2,它拥有最好的扩展性,它把编码格式统一为UTF-8,这样一来只要支持 APEv2读取的播放器播放带有APEv2标签的mp3就不会存在乱码问题。可惜的是现在在国内的网站上下载的mp3基本上都没有APEv2标签,而且 Linux下也没有几个播放器支持APEv2标签的读取。(目前Gnome里的Rhythmbox是支持APEv2标签读取的,包括Quod Libet都不可以。)

一首mp3的标签是可以包含多种类型的,当一首mp3同时含有ID3v1、 ID3v2 2.3、ID3v2 2.4、APEv2这4种类型中两种以上的时候,播放器对mp3标签的读取顺序一般是由上往下的,APEv2(前提是播放器支持此编码的读 取)---ID3v2---ID3v1。所以有时候会出现同一文件Rhythmbox显示标签正常(读取APEv2标签),其他播放器不正常的情况(读取 了ID3的标签)。

接着我们说说在Linux系 统里,为什么所有的mp3播放器都会有乱码的问题,这是因为这些mp3播放器都是依赖系统内的libid3tag库完全按照ID3的标准来读取标签内容 的。它不论mp3是采取何种的标准的标签(ID3v1、ID3v2、APEv2),只要mp3的标签的内容是Unicode编码存储的,那么显示肯定是正 常的 (ID3v1的ISO-8859-1严格说是不支持中文,但是并不是代表它不能存储中文)。如果遇到是以gbk、gb18030、big5等编码的中文内 容时,它还是会把它当成ISO-8859-1来读取,乱码就成了必然。

说了这么多,现在问题就变得简单了,似乎我们只需要把mp3标签里面用gbk、gb18030、big5等编码存储的中文内容修改为Unicode编码,那么基本上所有Linux下的播放器都能正常识别mp3标签了。

关于mp3编码的转换,这里介绍一个工具----Mutagen,假如你安装了Quod Libet,那么这个包已经安装上去了。如果没有,执行下列命令就可以了。

sudo apt-get install python-mutagen

工具的使用方法

mid3iconv -e gbk *.mp3 #转换当前目录的mp3文件

mid3iconv -e GBK */*.mp3 #转换当前目录下所有mp3文件(包括子目录)

find . -iname "*.mp3" -execdir mid3iconv -e gbk {} ; #转换当前目录下所有mp3文件(包括子目录)

因为现在在网上下载的mp3绝大多数采用的都是gbk/gb18030编码,-e gbk 参数是代表把gbk编码的标签转换为Unicode编码,假如mp3标签本身是Unicode编码的就不转换。如果需要转换其他编码的文件可以自行修改 gbk参数,比如改为gb18030、big5。转换后为的mp3标签类型为ID3v2 2.4,编码格式为UTF-16。

到了这一步之后,在Linux下使用所有播放器估计都没有什么问题了。