Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4584478
  • 博文数量: 1214
  • 博客积分: 13195
  • 博客等级: 上将
  • 技术积分: 9105
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-19 14:41
个人简介

C++,python,热爱算法和机器学习

文章分类

全部博文(1214)

文章存档

2021年(13)

2020年(49)

2019年(14)

2018年(27)

2017年(69)

2016年(100)

2015年(106)

2014年(240)

2013年(5)

2012年(193)

2011年(155)

2010年(93)

2009年(62)

2008年(51)

2007年(37)

分类:

2008-11-23 16:10:10

http://blog.chinaunix.net/u/33031/showart_503561.html

20060612


eix是个方便的工具,可以索引并快速搜索您的portage树。最新稳定版本为0.55,兼容Portage 2.1中新的元数据后端。

首先安装软件包,然后建立索引:

代码 5.1: Installing eix

# emerge eix 
# update-eix

除了主portage目录树,update-eix也将会对你的PORTDIR_OVERLAY目录的ebuild建立索引。

完成之后,你就可以进行搜索了。可以用eix foo来搜索程序包,或者用eix -S bar来搜索程序包的简介。如果要搜索一个特定的程序包,可以使用eix -e packagename。默认的,你也可以在搜索的参数中使用正则表达式。

eix输出显示软件包的每个可用版本号。有~前缀的版本号表示该版本不稳定,!则表示该版本被完全屏蔽。

代码 5.2: eix firefox

$ eix firefox 
* www-client/mozilla-firefox
Available versions: 1.0.7-r4 ~1.0.8 ~1.5-r9 ~1.5-r11 ~1.5.0.1-r2 ~1.5.0.1-r3 ~1.5.0.1-r4 1.5.0.2 ~1.5.0.2-r1 1.5.0.3 1.5.0.4
Installed: none
Homepage:
Description: Firefox Web Browser

* www-client/mozilla-firefox-bin
Available versions: 1.0.7 ~1.0.8 1.5.0.2 1.5.0.3 1.5.0.4
Installed: 1.5.0.3
Homepage:
Description: Firefox Web Browser

Found 2 matches

最后一点提示,如果你希望一次执行emerge --syncupdate-eix这两个命令,运行eix-sync就好了。




20060619

新的Portage 2.1版本带来了许多特性和改进。尽管其中的大多数都在make.conf例样和portage手册页中有说明,但大多数用户可能还不太明白。所以我们将展示如何使用其中的一些特性。

所有的特性都要在/etc/make.conf中设置。

Portage现能够在编译的同时下载其他软件包了,这在安装多个软件包时能节省很多时间。不必在正常emerge时另外运行emerge --fetchonly了,您只需要添加如下选项:

代码 5.1: Setting parallel-fetch in /etc/make.conf

FEATURES="parallel-fetch"

这个特性在某些Portage 2.1版本里失效,但是很快就会修复。

另一个可以进一步缩短安装时间的新选择是confcache。利用这一新特性,portage可以缓存很多配置脚本所做测试的结果,使得执行更加快 速。这也带来了小小的风险,有可能缓存错误值。提醒您注意,这项特性有一些bug。目前这个软件包已在大多数架构中有关键字,启用的必要步骤为:

代码 5.2: Enabling confcache

将其加入/etc/make.conf 
FEATURES="confcache"
在安装之前先要解除屏蔽
echo "=dev-utils/confcache-0.4.2-r1 ~arch" >> /etc/portage/package.keywords
安装confcache
emerge -av confcache
在以后的安装中,您将看到类似如下内容:
checking for i686-pc-linux-gnu-gcc... (cached) i686-pc-linux-gnu-gcc
checking whether we are using the GNU C compiler...(cached) yes
checking whether i686-pc-linux-gnu-gcc accepts -g... (cached) yes

另外一个很重要的新特性是记录ebuild打印的所有信息。要记录的信息内容以及如何处理记录都是可配置的。比如,我们可以将安装某个软件包时的警告以及错误信息保存到一个特定文件,添加配置如下:

代码 5.3: Configuring logging features in /etc/make.conf

此处设置记录的内容 
PORTAGE_ELOG_CLASSES="warn error log"
此处显示如何处理记录
PORTAGE_ELOG_SYSTEM="save"


还有许多的选项设置,比如通过电子邮件发送消息记录。请查看make.conf.example以获得更多的信息。




20060717

改变虚拟终端在标准Linux系统中已经是一件非常容易的事情了。如果你在X中,你会使用Ctrl+Alt加上要去的那个终端的代表功能键,要返回图形界面也很容易,Ctrl+Alt+F7即可。如果不在X环境中,你需要更少的组合键就可以达到目的 - Alt+F2。

就像许多Unix类的环境中一样,达到目的的方法通常有许多种。同样的,sys-apps/kbd ebuild安装一个chvt二进制文件让你能够用一条命令转换去不同的终端中去。而唯一的参数就是一个代表你指定终端的整数。

代码 4.1: Changing terminals with chvt

# chvt 1

如果在X环境下,您只能以root执行此命令,否则无效。但是在X之外可以以任何用户运行。如果您需要解决这个问题,可以使用app-admin/sudo来允许您的用户在X会话内使用chvt

代码 4.2: Adding sudo access to chvt

$ echo "%users $HOSTNAME=/usr/bin/chvt" >> /etc/sudoers

警告: 当修改sudo权限的时候请确定您知道自己在做什么,因为您是在允许某些命令以root权限运行。



20060918

当终端使用白色背景并且portage以黄色显示某些字(比如,用"%"标记的新useflag)的时候,那些字会很难辨认。要把emerge输出里的黄颜色(一致且全局的)改成某些更可读的颜色,只需要创建这个文件/etc/portage/color.map,其中包含一下内容:

代码 3.1: /etc/portage/color.map

yellow=0xAA00AA 
WARN=0xAA00AA
MERGE_LIST_PROGRESS=0xAA00AA

一些可以在黑色和白色背景上都清晰可辨的颜色有:紫色:0xAA00AA 暗黄色:0xAA5500(看上去像棕色/橙色)

更多信息可以在下面这个论坛帖子里找到。




20060925

是一个非常有用的程序,特别是对于程序员和系统管理员来说。它有很多选项,而且要想在它长篇大论的man page里找到你想要使用方式不是那么容易。下面有一些有用的选项,你应该放到你的~/.screenrc里。

其中一个有用的选项目的是为了取代主screen键。不用“ctrl-A”,而改用“ctrl-O”。这是因为“ctrl-A”在很多程序里都另有他用,比如emacs、bash和links,这样就会产生冲突。

另外一个很炫的选项可以在底部设置一个标题栏。它能够显示当前已经打开的窗口的序号和标题,当前窗口被标为白字蓝底。还有一些状态信息显示在底部右侧。

代码 3.1: ~/.screenrc设置

# 使用视觉铃
vbell on
# 用ctrl-O替换ctrl-A
escape ^Oo
# 设置一个大的滚动缓冲区
defscrollback 5000
# 设置底行的标题栏
caption always "%{= kw}%-w%{= BW}%n %t%{-}%+w %-= @%H - %LD %d %LM - %c"

以下是设置了标题栏(caption line)的效果图


图示 3.1: 启用了底行标题的GNU screen

Fig. 1: screen



20061002

您有过这样的经历吗?当您更新system或world的时候,离开几个小时回来后却发现仅因为某个包失败而导致更新没有完成。

下列简单的命令和bash的“until”命令可以让您更新world或system至完成并跳过那些失败的软件包:

代码 3.1: 使用until来略过有问题的包

# sudo emerge -Du world ||
# until sudo emerge --resume --skipfirst; do
# sudo emerge --resume --skipfirst; done

一旦命令执行完毕,您可以用以下命令找出哪些软件包更新失败:

代码 3.2: 检查安装失败的包

# emerge -Dup world

警告: 在某些情形下,这将导致系统不稳定。使用此技巧前请务必检查emerge -Dup world的输出结果。



20061106

面对着社区里现存的这么多不同的overlay,人们可能面临的一个问题是,怎样才能找到含有想要的那个包的overlay。不幸的是, portage默认的搜索能力只能搜已经装在系统里的overlay。Stefan Schweizer本周在他的Gentoo星球blog里写了一篇非常好的文章,文章里详细写了一个工具的使用方法,它可以使搜索远程overlay这项 任务比以往任何时候都简单。

完成这项任务的包是app-portage/eix。你需要解除它的屏蔽来获得所有最新的最强大的功能:

代码 4.1: 安装app-portage/eix

# echo app-portage/eix >> /etc/portage/package.keywords
# emerge eix

然后,为了确保eix拥有它所需要的有关可用overlay的所有信息,你可以执行下面的命令来更新它:

代码 4.2: 更新eix的全局overlay列表

# update-eix
# update-eix-remote update

eix现在既可以在官方portage树中查找软件包,也可以在layman所列的所有overlays中查找。

代码 4.3: 搜索包

# eix -e xmms

[D] media-sound/xmms
Available versions: [M]1.2.8-r5[2] [M]1.2.10-r6[2] [M]1.2.10-r8[2]
[M]1.2.10-r14 [M]1.2.10-r14[3] [M]1.2.10-r15 [M]1.2.10-r15[3]
[M]1.2.10-r16 [M]1.2.10-r16[3] [M]20101010[1]
Installed: 1.2.10-r15[01:54:46 08/29/06][nls esd mmx
vorbis 3dnow mikmod -directfb alsa oss arts -jack -sndfile -lirc
-flac mad mp3]
Homepage:
Description: X Multimedia System

[1] (layman/fluidportage)
[2] (layman/gentoojp)
[3] (layman/zugaina)

想了解更多信息,请查看eix的手册页,以及下述博客链接。

amd64系统上,要播放需32位编解码器(win32codecs)解码的多媒体文件,你可以使用media-video/mplayer-bin, 不过它看起来没有原生版本(译注:native version,专门为amd64编译的版本)好,且和系统整合不佳。KDE用户可以安装kmplayer──一个基于KDE的“前端”。如果你有 konqueror,kmplayer还会为它添加一个播放插件。这一技巧的步骤如下,首先如果有的话请先卸载原生版本的mplayer。然后,装上 kmplayer,并创建/usr/bin/mplayer符号链接:

代码 4.4: 创建mplayer link

ln -sf /usr/bin/mplayer-bin /usr/local/bin/mplayer

这样,原生版本的kmplayer就可以播放wmv文件,且可以在konqueror中“预览”它们了。




20061204

毫无疑问,Gentoo最好的特性之一就是她的软件包管理系统,Portage。Portage使得更新整个系统只需要一条简单的命令。可惜的是,有时候事情不会像想像中的那么顺利。几乎每一个Gentoo用户都有过这样的经历,睡前敲入命令emerge -uD world,然后钻进被窝满心希望早晨醒来的时候看到一个崭新的系统。但不幸的是,醒来的时候发现200个软件包安装到第三个的时候就失败而中断了。然后就需要排除故障并且开始emerge --resume

输入update-world来省下你宝贵的时间。Update-world是一个bash脚本,是count_zero写的并于最近在论坛中。这个脚本控制更新的过程并且强制portage跳过失败的包继续编译余下的包直到完成。最后编译失败的软件包将被加入一个列表中方便以后查阅。

注意: 这个脚本需要用到“equery”命令,也就是说需要app-portage/gentookit这个软件包。

显然在使用之前需要先下载,把它放到某个path路径下,加上执行权限。

代码 3.1: 获得脚本

# wget -O /usr/bin/update-world 
# chmod +x /usr/bin/update-world

现在我们准备好了,可以开始使用这个脚本了。

代码 3.2: 运行update-world

# update-world --prepare

这条命令通过创建一个将要emerge的软件包列表(像emerge -uD --newuse world那样的)来开始升级过程。(或者您可以用update-world --empty创建系统上所有软件包的列表,和emerge -e world一样。)此命令在~/.update-world/下创建一个名叫“emergelist”列表。现在,您可以用最喜欢的编辑器随便修改这个列表——移除软件包,修改版本等等。当您觉得满意的时候,请继续下一步:

代码 3.3: 运行update-world(续)

# update-world --install

这条命令启动编译过程,就像emerge -uD world那样。两者的不同之处在于,如果某个软件包由于某些原因编译失败,它将被加入~/.update-world/下的“failedlist”列 表。同时,将为那个包的portage日志文件(通常在/var/log/portage)建立一个链接,放在 ~/.update-world/[date]/log/。当升级结束时,您将一次得到所有编译失败的软件包列表,省去了不少时间。如果您需要中途停止, 只需要“Control-C”。升级可以在任何时候恢复,并且从上次停止的地方开始,只需要再次输入update-world --install




20070319

MOTD(Message Of The Day)意为“今日讯息”。在多数系统上,当有人登录时,系统会使用/etc/motd会输出一些信息。在本期的心得技巧中我们来学习如何使用fortunecowsay创建精美的MOTD。

首先需要安装两个包:

代码 4.1: 安装cowsay和fortune

# emerge fortune-mod cowsay

接下来需从以下选项中选择一个字符:

代码 4.2: 选择你的字符

# ls /usr/share/cowsay-3.03/cows/
# cowsay -f ren "foo"

最后,更新/etc/motd文件:

代码 4.3: 更新/etc/motd

# fortune | cowsay -f ren > /etc/motd

您也可以在/etc/cron.daily中创建一个如下文件以便每日都可生成一个新的motd。

代码 4.4: 设定cron任务

# echo '#!/bin/sh' >> /etc/cron.daily/motd
# echo '/usr/bin/fortune | /usr/bin/cowsay -f ren > /etc/motd' >> /etc/cron.daily/motd
# chmod +x /etc/cron.daily/motd
如果您想把motd变得更有意思,请阅读启发了本周的心得技巧的这个




20070409

您是否曾经在安装某软件的时候同时安装很多依赖关系?您是否想过在删除那些软件包的同时也希望删除所有的依赖关系?直觉告诉我们可以使用emerge --depclean,但这儿有一种不同的,或许更好的方法。

让我们来打个比方,比较OpenOffice.org和koffice。我们的计划是两个都装,都尝试一下,然后删除其中一个。首先:

代码 2.1: 创建.deps文件

# emerge openoffice -p | sed -ne \
'/^\[ebuild[^]]*N[^]]*\]/{s/^\[ebuild[^]]\+\] \([^[:space:]]\+\).*$/=\1/;p}' \
> openoffice.deps
# emerge koffice-meta -p | sed -ne \
'/^\[ebuild[^]]*N[^]]*\]/{s/^\[ebuild[^]]\+\] \([^[:space:]]\+\).*$/=\1/;p}' \
> koffice.deps

这将保证不会记录下任何需要升级的软件包。然后进行安装并尝试运行。当您决定保留其中的某个时,只要简单的执行以下命令:

代码 2.2: 移除没有用的包/依赖关系

# emerge -aC $(

本周的心得技巧受论坛中以下帖子启发整理而来:





20070716

您可以分析系统的emerge.log文件来获知编译某个软件包所需要的时间,当然也可以用来估计编译任务的耗时,或者您可以使用专门设计的genlop命令。

代码 4.1: genlop运行示例:

  # genlop -nt kdelibs
Tue May 8 18:26:59 2007 >>> kde-base/kdelibs-3.5.6-r8
merge time: 38 minutes and 6 seconds.

该信息可以用于估算升级需要耗费的时间。该工具可以用于计算许多软件包集的emerge耗时,比如全局系统升级,通过以下命令:

代码 4.2: emerge world示例:

  # emerge -uDp world | genlop -p
These are the pretended packages: (this may take a while; wait...)
[ebuild U ] app-office/openoffice-2.2.1 [2.2.0]
[ebuild U ] media-libs/netpbm-10.39.0 [10.37.0]
Estimated update time: 5 hours, 50 minutes.

此时,如果有一个新的软件包你没有安装,比如你希望在一台没有安装X的机器上安装fluxbox

代码 4.3: 应用于没有安装的软件的示例:

  # emerge -p fluxbox | genlop -p
...
[ebuild N ] x11-libs/libXmu-1.0.3 USE="-debug -ipv6"
[ebuild N ] x11-apps/xmessage-1.0.1 USE="-debug -xprnt"
...
!!! Error: couldn't get previous merge of xmessage; skipping...
!!! Error: couldn't get previous merge of fluxbox; skipping...
...
!!! Error: fluxbox never merged; estimated time unknown.

Genlop只会查询已知的软件包。如果你使用-q选项(genlop版本>=0.307),程序将会根据用户的CPU型号从在线数据库gentoo.linuxhowtos.org中查询编译耗时。

代码 4.4: 前面查询的结果是:

  # emerge -p fluxbox | genlop -p -q
These are the pretended packages: (this may take a while; wait...) ...
Estimated update time: 38 minutes.

时间并不是100%准确;因为它没有考虑USE及内存速度,硬盘速度,或者别的因素。但通过多次取不同用户的平均值,这些因素变得不是那么重要。





20070723

早在12月4日的GWN的心得技巧一节就提到了一个很棒的更新脚本。12月后,开发者新锐们贴出了更多的更新脚本。其中一个被简单地称作update

Update发端于guenther的和count_zero的。自2007年1月中旬已进入测试阶段。有个测试者夸口说它完美无瑕。

那这个脚本到底是用来干什么的呢?Update与其他更新脚本类似之处在于它能自动跳过安装失败的包,继续emerge列表中其他的包。此外,它还 有自动调用revdep-rebuild、自动挂载tmpfs以加快emerge、先同步、先下载文件、通过cron任务更新服务器等功能。另一个极佳的 特性是它自动隐藏了编译软件时打印出绝大部分无关信息,使得查看einfo和ewarn更容易,虽然在有了最新版的portage的情况下这个功能已不再 重要。你还能通过使用-q和-v选项来进一步减少或增加日志输出。

这里有来自gcc编译的一些。

代码 3.1: 获得此脚本

# wget -O /sbin/updatescript.sh 
# chmod +x /sbin/updatescript.sh

大多数用户将会发现用这个脚本来更新系统还是满容易的。

代码 3.2: 用起来就是这么简单:

# updatescript.sh
(or, if you want to sync the portage tree first)
# updatescript.sh -s

最初的论坛贴子和这个脚本的下载链接在。感谢steveL提供这个脚本。





20070827

Linux下最伟大的事情是仅仅需要一个命令提示符,您就可以完成许多工作。当然,这是在牺牲你的手指肌肉前提下。真的是这样吗?这儿有一些小技巧来保护你可怜的手指头。

有时候,你已经厌倦了一次又一次输入相同的命令。

代码 2.1: 非常长的ls命令

$ ls -loBh --author --color=always --group-directories-first ~
$ ls -loBh --author --color=always --group-directories-first /var/log

使用别名命令来方便输入

代码 2.2: 让别名来帮你一把

$ alias ls='ls -loBh --author --color=always --group-directories-first'

或者更好的选择是在你的.bashrc文件中输入别名,来永久保存。

代码 2.3: 永久保存

$ echo "alias ls='ls -loBh --author --color=always --group-directories-first'" >> ~/.bashrc

现在,使用“ls”就会有如同“ls -loBh --author --color=always --group-directories-first”的效果。所以,现在您可以把一些长的命令用短得多的命令来代替。

有时使用别名可能还没有搜索历史来得快。绝大多数人都知道我们可以通过使用上下键来翻看最近在命令提示符中使用的命令。但是,你知道吗还有一种更快速的方法来获取最近的命令。

假设你要更新系统的环境变量并输出配置。你知道命令'env-update && source /etc/profile'大概在最近30个左右。

您可以按向上方向键大约30次,直到你找到命令后然后按回车,但是您记起了近期GWN里的一个很酷的窍门,于是您按下ctrl - r然后敲“env”。在您敲字母的同时,整行“env-update && source /etc/profile”魔法般地跳了出来。

代码 2.4: 反向搜索

(reverse-i-search)`env': env-update && source /etc/profile

下一步,您按下回车键执行命令。如果您想在执行前编辑命令,您可以按向左或向右方向键,这样命令就放到提示符处,您就可以编辑了。对那些下了功夫精通vi的人,可以使用vi键位绑定。

代码 2.5: 打开vi键位绑定

$ set -o vi

现在您可以键入“/”并输入搜索串。按“n”键滚动显示以前的条目,如果您意外翻过了想运行的命令,“N”键可以向前滚动。

有时候别名和命令历史没有任何帮助,因为您以前没有输入过那个命令。这时候Bash的命令行补全功能就派上了用场。在命令行里的大多数位置您都可以按“Tab”键来让Bash为您补全单词。命令甚至有时是命令参数都适用。当您想看很长的路径的目录内容时,这招极其好用。

下面命令只需27次击键而不是60次,包括按回车键。

代码 2.6: Tab补全

$ ls /usr/portage/profiles/default-linux/amd64/2007.0/desktop/

注意: 有些包可以加上“bash-completion”USE标志来增强对命令行补全的支持。

当您在修改重要文件之前作备份的时候,还有最后一招节省击键的好办法。多数人喜欢在做重大修改之前备份文件。下次,除了敲入如下:

代码 2.7: 备份文件

$ cp /etc/X11/xorg.conf /etc/X11/xorg.conf.bak

还可以利用Bash的大括号展开功能,输入以下命令得到同样的效果。

代码 2.8: 备份文件——精简版

$ cp /etc/X11/xorg.conf{,.bak}

现在您知道如何利用大括号展开来备份文件了,您可以方便地使用以下命令查看修改:

代码 2.9: 快速查看修改

$ diff /etc/X11/xorg.conf{.bak,}

当然,这只是Bash众多技巧中的冰山一脚。您可以看看以前GWN中关于Bash的心得技巧,如果您需要更多有用的Bash技巧,加入#bash或者查看这个有用的。

以前的GWN Bash技巧

阅读(2317) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~