Archive for 七月, 2010

5个漂亮的GNOME(GTK)主题

1. Elegant Gnome

Elegant GNOME Theme

The Elegant GNOME 主题可通过脚本安装, 其中包括:图标主题、GTK+ 主题、Cursor 主题和壁纸。
Download (script)

2. Small Victory

Small Victory theme

Small Victory是Victory主题的修改版,面板为深色,布局紧凑。
Download

3. Impression / Night Impression

Impression

(Impression)

Night Impression

(Night Impression)

更多的截图  & download

4. Zuki

Zuki GTK theme

Zuki 的面板很特别,你还可以通过 GIMP 来修改主题。 
Download

5. Anatomica

Anatomica theme

Download

 

文章来源:YeeYan网

9张漂亮的lynx主题壁纸

MadeInKobaia制作了一些 Ubuntu 10.04 Lucid灵感的壁纸。

 

126247-1

这些壁纸有不同分辨率的,包括宽屏,照一张你喜欢的做桌面吧!

Download

http://gnome-look.org/content/show.php/Variations+on+Lucid+Lynx?content=126247&PHPSESSID=3105fad53e40d6beb1aa4ec4f6cad0d1

下载Ubuntu和Fedora的所有官方壁纸

下载 Ubuntu / Fedora 壁纸: Mirror 1 | Mirror 2

壁纸里包括所有的Ubuntu官方壁纸和Fedora Core 5以前的官方壁纸。官方壁纸只安装系统时内置的壁纸,不包括扩展的壁纸。这些壁纸有适合宽屏的,也有适合4:3屏幕的。

文章来源于:YeeYan网

GNOME 3.0 跳票到 2011 年 3 月

GNOME 基金会在官方网站刊文宣告,经过多方讨论,GNOME 基金会决定 GNOME 3.0 延期到 2011 年 3 月。

文章大致说明了跳票的原因,GNOME 3.0 虽然很多组件都已经完成,但是在代码的稳定性和性能上还有很多提高的空间。特别是 GNOME Shell,很多人试用了都感觉很卡。至于Zeigeist的风波,或多或少影响了 GNOME 3.0 的进度。而 Zeigeist 迟迟不愿意并入 GNOME 的主干代码库也让部分 GNOME 开发者感到十分烦躁。毕竟 Zeigeist 是 GNOME 3.0 的核心组件。或许 GNOME 真的会用 C 或者 Vala 重新写一个类似 Zeigeist 的组件替代。也有人指出,GNOME 3.0 也有不少组件从 CConf2 移植到 dConf/GSettings,至少得到 9 月份之前都没法完成。即使完成了也没有足够的时间进行测试。

无论怎样,跳票已成事实。9 月份准时推出的将会是 GNOME 2.32,作为一个 GNOME 3.0 的预览版本依然能够看到大量 GNOME 3.0 的组件。至于 GNOME 3.0 版本,等到下一年吧。

MySQL手记: 视图的使用

很多时候不少人像我一样不明白既然有了强大的表查询工具视图就没有用处了。

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。通过视图进行查询没有任何限制,通过它们进行数据修改时的限制也很少。

视图是存储在数据库中的查询的 SQL 语句,它主要出于两种原因:安全原因, 视图可以隐藏一些数据,如:社会保险基金表,可以用视图只显示姓名,地址,而不显示社会保险号和工资数等,另一原因是可使复杂的查询易于理解和使用。

视图本质上还是一个基本表,创建一个视图就像创建一个表一样:

CREATE VIEW DS_VIEW AS SELECT * FROM Departments;

DS_VIEW是视图的名称。以下又是另外一个例子:

CREATE VIEW Employee_view(EmployeeID, Name,RealIncome) AS SELECT Employees, EmployeeID, Name, Income-Outcome FROM Employees, Salary WHERE Employees.EmployeeID=Salary.EmployeeID WITH CHECK OPTION;

WITH CHECK POINT 的意思就是要在更新视图时要符合创建视图所设定的条件。CREATE VIEW 还有一个 ALGORITHM 子句,此子句是 MySQL 对 SQL 标准的扩展,规定了MySQL的算法,而算法影响 MySQL 处理视图的方式。默认是 UNDEFINED。若是 MERGE,视图的行需要和基表的行一一对应。ALGORITHM=TEMPTABLE 则是视图置于临时表之上。。

查询视图,则和查询表一样使用SELECT语句:

SELECT DepartmentName FROM DS_VIEW WHERE Department='3';

更新视图也是 INSERT 和 UPDATE,删除数据显然少不了 DELETE:

INSERT INTO DS_VIEW VALUE('6','广告部','广告业务');
UPDATE DS_VIEW SET DepartmentName='生产车间' WHERE DepartmentID='5';
DELETE FROM DS_VIEW WHERE DepartmentID='1';

最后就是删除视图,就一个语句可以了:

DROP VIEW DS_VIEW;

KVM Huge Page 回收内存

Huge Page,巨页是一个很热门的话题,很多大型服务器软件都逐步开始支持使用巨页以减轻内存的开销。在 Fedora 12 之际,KVM 也引入了 Huge Page,以增强 KVM 的性能。

援引自 KVM Huage Page Backed Memory 的简介,x86 CPU 通常使用用 4KB 页面放置内存,但实际上它们有能力使用巨页完成这个任务(x86_32 可以使用 4MB 页面,x86_64 和 x86_32 PAE 可以使用 2MB 的页面)。通过把巨页应用在 KVM Guest 的内存上,页表会使用更少的内存和 TLB 损耗也会被减少,从而提升了 KVM 的性能。在 KVM Guest 的内存上使用巨页确实会有缺点,然而你不再需要交换和 Balloon Guest 的内存。

应用 Huge Page 十分简单,首先挂在 hugetlbfs 文件系统:
<blockquote>mount -t hugetlbfs hugetlbfs /dev/hugepages</blockquote>
通过 sysctl 保留内存给巨页使用,需要搞清楚的这里设定的数字并不是真正的内存容量,而是巨页数量。对应的关系是1 hugepage=2MB RAM,比如:

sysctl vm.nr_hugepages=768

此时系统会划分 1536MB 内存给巨页使用。然后启动 qemu-kvm 的时候添加 -mem-path/dev/hugepages 参数。比如:

qemu-kvm -m 1024 -drive file=test.img -mem-path /dev/hugepages

使用 libvirt 和 virt-manager 管理的 KVM 虚拟机同样可以巨页,把以下内容加入到 /etc/libvirt/qemu 虚拟机对应的 xml 配置文件即可:

<memoryBacking>
<hugepages/>
</memoryBacking>

本人简单地测试了使用巨页和不使用巨页的性能差别,在 Windows XP Guest 跑了 Super Pi 和 wPrime,性能上没有任何区别。但是测试内存的性能时每一次的数据都会跟上一次出入很大。所以没有再测试下去。

如果是打算把电脑作为 KVM 虚拟化服务器使用的话,甚至可以把 hugetlbfs 放在 /etc/fstab 挂载表上,让电脑启动的时候就直接挂载。而 sysctl 参数也可以直接添加到 /etc/sysctl.conf 上。

cat "sysctl vm.nr_hugepages=768"  &gt;&gt; /etc/sysctl.conf

当不再需要巨页的时候,卸载了 hugetlbfs 和把保留给巨页使用的内存量设置为 0 即可。

sysctl vm.nr_hugepages=0
umount hugetlbfs

最牛B的Linux Shell命令 系列连载:(二)

编者按

本文编译自commandlinefu.com的系列文章Top Ten One-Liners from CommandLineFu Explained。作为一个由用户推荐最有用shell命令的网站,其记录了数以万计的各色shell命令,其中不乏相当实用和有趣的,本文就要细数当中获投票最高的一些命令,从其中取材并加以细释,希望读者能从中受益。

编辑:@BOYPT BOYPT

本系列文章:

1.用你最喜欢的编辑器来敲命令

1
command <CTRL-x CTRL-e>

在已经敲完的命令后按<CTRL-x CTRL-e>,会打开一个你指定的编辑器(比如vim,通过环境变量$EDITOR指定),里面就是你刚输入的命令,然后爱怎么编辑就怎么编辑吧,特别是那些参数异常复杂的程序,比如mencoder/ffmpeg,一个命令动辄3、4行的,要修改其中的参数,这个方法最合适不过了,保存退出后自动执行这个程序。

实际上这是readline库的功能,在默认情况下,bash使用的是emacs模式的命令行操作方式,<CTRL-x CTRL-e>是调用这个功能的一个绑定。如果你习惯使用vi模式,按<ESC v>可以实现同样功能。

如果你喜欢别的编辑器,可以在~/.bashrc里面放上比如export EDITOR=nano的命令。

另外一个修改命令的方法是使用fc命令(Fix Command),在编辑器里面打开上一句命令。我们的第一辑连载提过一个^foo^bar^命令可以用fc来实现:fc -s foo=bar

2.清空或创建一个文件

1
> file.txt

>在shell里面是标准输出重定向符,即把(前部个命令的)命令行输出转往一个文件内,但这里没有“前部命令”,输出为空,于是就覆盖(或创建)成一个空文件了。

有些脚本的写法是:>file.txt,因为:是bash默认存在的空函数。

单纯创建文件也可以用$touch file.txt,touch本来是用作修改文件的时间戳,但如果文件不存在,就自动创建了。

3.用ssh创建端口转发通道

1
ssh -N -L2001:remotehost:80 user@somemachine

这个命令在本机打开了2001端口,对本机2001端口的请求通过somemachine作为跳板,转到remotehost的80端口上。

实现效果跟术语反向代理是相似的,实际上就是端口转发,注意上面的描述涉及了3台主机,但当然somemachine可以变成localhost。

这个命令比较抽象,但有时候是很有用的,比如因为众所周知的原因国内的IP的80端口无法使用,又或者公司的防火墙只给外网开了ssh端口,需要访问内部服务器一个web应用,以及需要访问某些限定了来源IP的服务,就可以用上这个方法了。

举一个具体例子,运行:

1
2
ssh -f -N -L 0.0.0.0:443:twitter.com:443 shell.cjb.net
ssh -f -N -L 0.0.0.0:80:twitter.com:80 shell.cjb.net

然后在/etc/hosts里面添加127.0.0.1 twitter.com,好吧剩下的你懂的。

当然通常做这个功能的反向代理,应该要用squid、nginx之类,ssh就算是轻量级的尝试吧!

4.重置终端

1
reset

如果你试过不小心cat了某个二进制文件,很可能整个终端就傻掉了,可能不会换行,没法回显,大堆乱码之类的,这时候敲入reset回车,不管命令有没有显示,就能回复正常了。

实际上reset命令只是输出了一些特殊字符,我们看BusyBox里面最简单的reset程序的实现:

1
printf("\033c\033(K\033[J\033[0m\033[?25h");

输出的这些字符对Shell是有特殊意义的:

  • \033c: “ESC c” – 发送重置命令;
  • \033(K: “ESC ( K” – 重载终端的字符映射;
  • \033[J: “ESC [ J” – 清空终端内容;
  • \033[0m: “ESC [ 0 m” – 初始化字符显示属性;
  • \033[?25h: “ESC [ ? 25 h” – 让光标可见;

其中字符显示属性经常用来设定打印字符的颜色等,可参考这个博文

5.在午夜的时候执行某命令

1
echo cmd | at midnight

说的就是at这个组件,通常跟cron相提并论,不过at主要用于定时一次性任务,而cron定时周期性任务。

at的参数比较人性化,跟英语语法一样,可以tomorrow, next week之类的,详细的查看手册man at

6.远程传送麦克风语音

1
dd if=/dev/dsp | ssh username@host dd of=/dev/dsp

没错就是实现一个喊话器的功能。

/dev/dsp是Linux下声卡的文件映射(Digital Signal Proccessor),从其中读数据就是录音,往里面写数据就是播放,相当简单!

dd是常用的数据拷贝程序,如果不同时指定if、of,就直接使用stdin/stdout来传输。

如果你没有远程主机,可以试试这样:

1
dd if=/dev/dsp of=/dev/dsp

直接回放麦克风的声音,只是有一点延时。

但是如果有别的程序正在使用声卡,这个方法就不凑效了,因为一般的声卡都不允许多个音频流同时处理,可以借用alsa组件的工具,arecord跟aplay:

1
arecord | ssh username@host aplay

本地回放就是:

1
arecord | aplay

如果你想吓吓别人:

1
cat /dev/urandom | ssh username@host aplay

7.映射一个内存目录

1
mount -t tmpfs -o size=1024m tmpfs /mnt/ram

这个命令开了一块1G内存来当目录用。不过放心,如果里面没文件,是不会占用内存的,用多少占多少。

不过一般来说没必要手动挂载,因为多数发行版都会在fstab内预留了一个内存目录,挂载在/dev/shm,直接使用即可;

最常见的用途是用内存空间来放Firefox的配置,可以让慢吞吞的FF快很多,参见Shellex的博文:用tmpfs让Firefox在内存中飞驰,以及后来的改进:用tmpfs让Firefox在内存中飞驰II,其中提到的脚本来自speeding up firefox with tmpfs and automatic rsync

那个破烂LinuxQQ也可以用这个方法,减少因为大量磁盘IO导致的问题。

8.用diff对比远程文件跟本地文件

1
ssh user@host cat /path/to/remotefile | diff /path/to/localfile -

diff通常的用法是从参数读入两个文件,而命令里面的-则是指从stdin读入了。

善用ssh可以让web开发减少很多繁琐,还有比如sshfs,可以从编辑-上传-编辑-上传的人工循环里面解脱出来。

9.查看系统中占用端口的进程

1
netstat -tulnp

Netstat是很常用的用来查看Linux网络系统的工具之一,这个参数可以背下来:

  • -t: 显示TCP链接信息
  • -u: 显示UDP链接信息
  • -l: 显示监听状态的端口
  • -n: 直接显示ip,不做名称转换
  • -p: 显示相应的进程PID以及名称(要root权限)

如果要查看关于sockets更详细占用信息等,可以使用lsof工具。