2011年8月1日星期一

man yum 翻译

名称
          yum - 黄狗更新器,修改版
概要
          yum 【选项】 【命令】 【软件包……】
描述
          yum 是一个交互性的,基于 rpm 的,软件包管理器。通过" repository(软件库)"的元数据,它能够自动完成系统更新,包括依赖性分析与过时包处理。它也能够新软件包的安装、旧软件包的卸载,还能完成对已安装的 和/或 可安装的软件包的查询,以及其他 命令/服务 (见下)。 yum 与其他高级软件包管理器(比如 apt-get 与 smart)是相似的。


       有许多 yum 代码的图形界面,近来更多的图形界面开发工作在 PackageKit 与 gnome-packagekit 中。


       命令为如下之一:
        * install package1 [package2] [...]                    (安装        软件包1 【软件包2】 【……】)


        * update [package1] [package2] [...]                (更新      【软件包1】 【软件包2】 【……】)


        * check-update                                                   (检查更新)


        * upgrade [package1] [package2] [...]             (升级      【软件包1】 【软件包2】【……】)


        * distribution-synchronization [package1] [package2] [...]    (发行版同步 【软件包1】 【软件包2】 【……】)


        * remove | erase package1 [package2] [...]       (卸载|清除  软件包1 【软件包2】 【……】)


        * list [...]                            (列表      【……】)


        * info [...]                           (信息      【……】)


        * provides | whatprovides feature1 [feature2] [...]        (提供|何者提供 特性1 【特性2】 【……】)


        * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]    (清理 【软件包|元数据|过期缓存|rpm数据库|插件|全部】)


        * makecache                      (生成缓存)


        * groupinstall group1 [group2] [...]                (安装组      组1 【组2】  【……】)


        * groupupdate group1 [group2] [...]               (更新组      组1 【组2】 【……】)  


        * grouplist [hidden] [groupwildcard] [...]       (列举组    【隐藏的】 【组通配式】 【……】)


        * groupremove group1 [group2] [...]               (卸载组      组1 【组2】 【……】)


        * groupinfo group1 [...]                                    (组信息      组1 【组2】 【……】)


        * search string1 [string2] [...]                          (搜索        字符串1 【字符串2】 【……】)


        * shell [filename]                                               (外壳      【文件名】)


        * resolvedep dep1 [dep2] [...]                          (推解依赖    依赖1 【依赖2】 【……】)


        * localinstall rpmfile1 [rpmfile2] [...]               (本地安装    rpm文件1 【rpm文件2】 【……】


           (maintained for legacy reasons only - use install)            保留只为兼容缘故-请用安装)


        * localupdate rpmfile1 [rpmfile2] [...]                (本地更新    rpm文件1 【rpm文件2】【……】


           (maintained for legacy reasons only - use update)            保留只为兼容缘故-请用更新)  


        * reinstall package1 [package2] [...]                     (重装        软件包1 【软件包2】 【……】)


        * downgrade package1 [package2] [...]                (降级        软件包1 【软件包2】 【……】)


        * deplist package1 [package2] [...]                       (依赖列表    软件包1 【软件包2】)


        * repolist [all|enabled|disabled]                            (仓库列表  【全部|启用的|禁用的】)


        * version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ] (版本    【全部|安装的|可用的|某组的|非某组的|组列表|组信息】)


        * history [info|list|packages-list|summary|redo|undo|new|addon-info]            (历史    【信息|列表|软件包列表|摘要|重做|撤销|附加组件信息】)


        * check                                         (检查)


        * help [command]                        (帮助      【命令】)


    必须给出上面命令之一,除非使用 --help 或 -h 选项。
    在所有操作中要求软件库正确配置。


    install    (安装)
        用来安装一个软件包或软件组的最新版本,保证满足所有依赖关系。(更多见指定软件包的名字)如果所给名字不与任何软件包匹配,则将被视为通配式 ,然后所有匹配项将被安装。如果名字以 @ 字母开始,则名字其余部分将如同传递给 groupinstall (组安装) 命令。如果名字以 - 字符开始,则在执行中进行搜索,匹配项将取出。如果名字为文件,则 install 将像 localinstall 那样工作。如果名字不匹配软件包,则将其作为文件列表去搜索"提供"它的软件包。(如 "_sqlitecache.so()(64bit)" 或 "/usr/bin/yum")。还请注意对于文件列表的情况,通配符将匹配多个软件包。


    update    (更新)
        如果不带任何软件包, update 将更新所有当前安装的软件包。如果指定了一个或多个软件包或通配式的软件包, Yum 将只更新所列软件包。更新软件包的过程中,yum 将保证满足所有依赖关系。(更多见指定软件包的名字)如果软件包或通配式所匹配的在当前并未安装,那么 update 将不会安装他们。如同 "install" 命令一样, update 操作于组,文件,提供,以及文件列表。
        如果主过时配置选项为真(默认情况)或者有 --obsoletes (过时) 旗标, yum 将在其计算中包括过时软件包——这适用于发布版本变化,比如升级 *nix 8.0 到 *nix 9.0。


    check-update    (检查更新)
        此命令使你能以非交互方式的得知你的机器是否有需要应用的更新。如果有可用更新软件包返回的退出值为100。同时以列表形式返回需更新的软件包列表。如果没有可用更新返回0。如果有错误出现返回1。在详情模式下也显示过时软件包。


    upgrade        (升级)
        与带 --obsoletes (过时)旗标的 update 命令相同,详见 update 。


    distributionn-synchronaization 或 distro-sync        (同步发布版本)
        以最新的可用软件包同步已安装软件,在此过程中将涉及过时标记,升级或降级。在"一般"情况下,将与 update 命令作用相同。但如果你已安装某个名为 FOO 版本为4的软件,而最新可用版本只是3,该命令将会将 FOO 版本降级为3。


    remove (卸载)或 erase (清除)
        用来卸载系统中指定软件包,同时卸载依赖这些软件包的软件包。remove 操作于组,文件,提供,以及文件列表,与 install 命令相同。(更多内容见 指定软件包的名字 )
        注意,默认情况下,"yum" 是包含在受保护的设置中的。这使你不会意外卸载 yum 自身。


    list    (列表)
        用列表来显示可用软件包的各种信息;更完整细节见下面 List Options (选项 列表)一节。


    provides (提供) 或 whatprovides (何者提供)
        用来查看那个软件包提供对应某特性,或某文件。使用指定名字或文件、通配式来得到可用软件包的列表,或者安装之。


    search    (搜索)
        当你对所需软件包有所了解但仍不能确定其名字的时候,使用此命令。默认情况下,将在软件包的名字与摘要中进行搜索,若"失败"则将尝试在描述与网址中进行搜索。
        Yum 记录搜索结果的精确度,匹配更多项的软件包将出现在前面。
        你可以通过指定 "all" (所有)作为其第一个参数来强制其在所有信息中进行搜索。


    info    (信息)
        用列表来显示可用软件包的描述与摘要信息;其参数同见下面 List Options (选项 列表)一节。


    clean    (清理)
        用来清理随时间流逝而逐渐在 yum 缓存目录中累积的各项内容。更完整信息见下面 Clean Options (选项 清理)一节。


    makecache    (生成缓存)
        用来从当前可用的 yum 仓库中下载元数据并令之可用。


    groupinstall    (安装组)
        用来安装一个组中的所有个别软件包,在给定的类型中的(这如同你取出所有软件包名,然后将之置于 "yum install" 命令之后)。
        group_package_types (组软件包类型)配置选项指定了所要安装的类型。


    groupupdate    (更新组)
        只是 groupinstall (安装组) 的别名,因为如果软件包/组 X 已安装,命令 "yum install X" 与 "yum update X" 所做的事情是相同的。


    grouplist    (列举组)
        用来列举所有 yum 仓库中的可用组。所有必备软件包都已安装的组将显示为"已安装"。如果一个组没有必备软件包,那么只要有可选或默认软件包被安装,则组将显示为"已安装"。可选参数 "Hidden" (隐藏)会将那些没有标记为"用户可见"的组也列举出来。如果你加了 -v 选项以启用详情模式,会显示组 id 。


    groupremove    (卸载组)
        用来卸载一个组中的所有软件包。与 groupinstall (安装组)不同,它将无视 group_package_types (组软件包类型)而卸载全部。需要指出的是,一个软件包可以属于不同的组,因此在 "groupinstall X Y" (安装组 X、Y)之后用 "groupremove" (卸载组 Y)得到的结果与 "groupinstall X" (安装组 X)是不同的。


    groupinfo    (组信息)
        用来给出组的描述与软件包列表(以及这些软件包的标记类型)。注意,你可以用插件 yum-filter-data 与 yum-list-data 来用其他方式来 得到/使用 这些数据(比如那些组里用需要更新的软件包)。如果你加了 -v 选项以启用详情模式,包名将按照 已安装/可安装 进行匹配,类似于 list 命令。


    shell        (外壳)
        用来进入 "yum shell" (yum 外壳)。如果指定了一个文件,则将以 yum外壳 模式来执行文件中的内容。更多见 yum-shell(8)。


    resolvedep    (推解依赖)
        用来列举提供指定依赖的软件包,每个依赖最多列举一个软件包。


    localinstall    (本地安装)
        用来安装本地 rpm 文件。如果要求的话,可以启用仓库来推解依赖关系。注意此 install 命令将执行本地安装,如果给出一个文件名的话。保留此选项只为兼容的缘故。


    localupdate    (本地更新)
        用来通过指定本地 rpm 文件来更新系统。只有当已安装过旧版本,指定的 rpm 文件才会安装;其余的指定包都将被忽略。如果要求的话,可以启用仓库来推解依赖关系。注意,此 update 命令将执行本地更新,如果给出文件名的话。保留此选项只为兼容的缘故。


    reinstall    (重装)
        将重新安装当前已安装的软件包的完全相同的版本。对于 "installonly" (只可安装)软件包无效,比如内核。像 "install" (安装)命令一样,reinstall (重装)操作于组,文件,提供以及文件列表。


    downgrade    (降级)
        将试图把一个软件包从当前安装版本降级到之前的最高版本(或者指定的版本)。依赖推解器未必会参与过程,但如果你指定所有的软件包的话,它将有效工作(所有的简单情形都是可行的)。对于 "installonly" (只可安装)的软件包无效,比如内核。像 "install" (安装)命令一样,downgrade (降级)操作于组,文件,提供以及文件列表。


    deplist        (依赖列表)
        生成对于给定软件包的所有依赖以及何软件包提供该依赖的列表。


    repolist    (仓库列表)
        生成已配置仓库的列表。默认情形是列出所有已启用仓库。如果你加了 -v 来启用详情模式,将列出更多信息。如果第一个参数为 "enabled" (启用的) "disabled" (禁用的)或者 "all" (所有的),那么将列出对应类型的仓库。


        你可以使用仓库的 id 或名字作为参数,或者用在使用时用通配符。然而如果 id 或名字严格匹配,那么即使它被禁用而你是在列举已启用仓库,它还是会出现。


        在非详情模式,如果一个仓库有非本地的元链接数据与最新元数据,它将在第一列以一个星号(*)开始。对于非详情模式,将在最后一列现实仓库的软件包数目以及(如果用用户指定的排除)排除包的数目。


        仓库列表的最后一个特别性质是,如果你在非详情模式,那么 yum 将忽略任何仓库错误,只输出它所得的信息(比如,"yum clean all";"yum -C repolist"将有所输出,即使包的 数目/其他 为零。)。


    version        (版本)
        生成 rpmdb (rpm数据库)的"版本",以及已启用仓库的版本,如果 "all" (所有的)作为命令的第一个参数给出。你也可在 version-groups (版本组)配置文件中指定版本组。如果你使用 -v 已启用详情模式,将得到更多信息。利用排序后的软件包与 yumdb 中的条目的 checksum_type/checksum_data,计算其 sha1 hash 来得到版本。注意,此 rpmdb (rpm数据库)版本现在也在 yum 中大量使用(特别是在 yum 历史中)。


        version (版本)命令不会显示软件包的"组",所以请使用如下子命令:


        "version grouplist"(版本 组列表) - 列出定义的版本组。


        "version groupinfo"(版本 组信息) - 得到一个或几个版本组组的全部软件列表。


        "version installed"(版本 安装的) - 默认情形,只显示已安装软件包的版本信息。


        "version available"(版本 可用的) - 只显示可用软件包的版本信息。


        "version all"      (版本 全部)   - 现实已安装和可用的软件包的信息。


        "version nogroups | no groups-*"(版本 非组的| 非某组的)  - 只显示主要版本信息。


        "version groups-*" (版本 某组)  - 只显示组内的版本信息,如果根除更多参数则只现实这些组的数据。


    history        (历史)
        history (历史)命令使用可以查看在过去的操作中发生的事情(假定有 history_record (历史记录)配置文件)。你可以用 info/list/summary (信息/列表/摘要)来查看发生的事;用 undo/redo (撤销/重做)依据信息而操作;用 new (新)来开始一个新的历史文件。


        info/list/summary (信息/列表/摘要)命令以操作 id 或软件包或带通配符的软件包为参数,也可以没有参数。list (列表)命令可以加关键字 "all" (所有的)来列出所有操作。


        undo/redo (撤销/重做)命令以操作 id 或关键字 last (最后)以及最后操作的偏移量(举个例子,如果你已作过250次操作, "last" 指第250次操作,而 "last-4" 指第246次操作)。


        addon-info (附加组件信息)命令以操作 id 为参数;packages-list (包列表)命令以(带通配符)软件包为参数。


        如果在诸操作中有并非十分顺利的情形,在 "history list" (历史 列表)命令的输出的 Alter (更改)一列会有额外的信息标注。packages-list (包列表)命令也会在最后一列显示这样的额外标注。


        > - 操作完成后,rpmdb (rpm数据库)在 yum 之外被更改。
        < - 操作发生前,rpmdb (rpm数据库)在 yum 之外被更改。
        * - 操作在完成之前被中断。
        # - 操作完成,但返回值非零。
        E - 操作正常完成,但在操作中有 警告/错误 消息输出。
        P - 操作正常完成,但在 rpmdb 中仍然存在问题。
        s - 操作正常完成,但启用了 --skip-broken 选项,因而略过了一些软件包。


    check        (检查)
        检查本地 rpmdb (rpm数据库),汇报任何所发现的问题。你可以在 check (检查)命令后加 "dependencies" (依赖)或"duplicates" (重复)参数,来限制检查所施行的范围(默认是包含两者的 "all" (全部))。


        info (信息)命令能够以操作 id 的区间作为参数,形式为 "start..end" (起点..终点)。这样将显示一个归并后的历史,仿佛这个区间内的操作是同时进行的。
        比如,"history info 1..4" 将归并最初4个操作,将它们显示为单一操作。


    help        (帮助)
        生成帮助。或者是针对所有命令的;或者给出命令的名字,生成针对那个命令的帮助。


一般选项
    大多数命令行选项可以也可通过配置文件进行设置。以下描述针对必要的配置选项。


    -h, --help    (帮助)
        帮助;现实帮助信息然后退出。
    -y, --assumeyes    (假定同意)
        以默认作同意;假定对于任何 "确认/拒绝" 的问题,都已"确认"作为回答。
        配置选项:assumeyes (假定同意)
    -c, --config=[config file]    (配置 =【配置文件】)
        指定配置文件的位置——可以是 HTTP 与 FTP 的网址,也可以是本地文件路径。
    -v,--verbose    (逐字,详尽)
        运行时包含大量调试信息。
    -q,--quiet    (安静,无消息)
        运行时无输出。注意,这时你很可能还想用 -y。
    -d,--debuglevel=[number]    (调试级别 =【数字】)
        设置调试级别为【数字】——增加或减少打印消息的量。实际范围:0-10
        配置选项:debuglevel (调试级别)
    -e, --erroelevel=[number]    (错误级别 =【数字】)
        设置错误级别为【数字】。实际范围:0-10。10意味这只打印你必须知道的重大错误。1意味着打印所有错误,即使并不特别重要。1+意味着打印更多错误(如果错误存在的话)。-e 0 适用于 cron jobs(指由系统定期执行的任务).
        配置选项:erroelevel (错误级别)
    -rpmverbosity=[name]    (rpm详情 =【名字】)
        设置 rpm 小脚本的调试级别为【名字】。默认为 "info" (信息),其他的选择为:"critical"(重要),"emergency"(紧急),"error"(错误),"warn"(警告) 与 "debug"(调试)。
        配置选项:rpmverbosity (rpm详情)
    -R, --randomwait=[time in minutes] (随机等待=【以分钟表示的时间】)
        设置 yum 在施行一个命令之前所等待的最长时间——它在此范围内随机变化。
    -C, --cacheonly    (仅用缓存)
        告知 yum 完全依靠系统缓存运行——不去下载或更新任何头文件,除非不这样就不能完成所要求的任务。如果你以用户身份做此操作,yum 不会使用此用户的临时缓存,而是去使用系统缓存目录中的系统缓存。
    --version    (版本)
        报告 yum 的版本号,并依照 history_record_packages (历史记录软件包)(可通过插件添加)安装软件包版本。
    --showduplicates (显示重复)
        不以 info (信息), list(列表) 和 search (搜索)命令中的最新版本限制软件包(这也会影响使用了 doPackageLists() API 的插件)。
    --installroot=root    (安装的根=【根】)
        指定另外的安装根目录,所有软件包将相对于此目录而安装。
        配置选项:installroot    (安装根)
    --enablerepo=repoidglob    (启用仓库=【id 或 通配式】仓库)
        以 id 或通配式启用指定的(在配置文件中以 "enabled=0" (启用=假)而禁用的)仓库。
        配置选项:enabled (启用的)
    --disablerepo=repoidglob    (禁用仓库=【id 或 通配式】仓库)
        以 id 或通配式禁用指定的仓库。
        配置选项:enabled (启用的)
    --obsoletes
        此选项只对更新有影响,它启用 yum 的过时处理的逻辑。更多信息见上面的 update (更新)命令。
        配置选项:obsoletes (过时)
    -x, --exclude=package    (排除 =【软件包】)
        用名字或通配式排除一个指定软件包,更新时将不涉及此软件包,对所有仓库有效。
        配置选项:exclude (排除)
    --color=[always|auto|never] (颜色=总是|自动|绝不)
        是否要有颜色的输出。自动(依赖于输出终端)、总是(用 ANSI 码)还是绝不。注意,有的命令——比如 list (列表) 和 info (信息)——在启用颜色后会有额外的任务。
        配置选项:color (颜色)
    --disableexcludes=[all|main|repoid] (禁用排除=全部|主|仓库 id)
        禁用在你的配置文件中定义的排除。选项为下面三者之一:
        all    (全部)  - 禁用所有排除
        main   (主)    - 禁用 yum.conf 文件中在主部分定义的排除
        repoid (仓库id)- 禁用对某一仓库定义的排除
    --disableplugin=plugin (禁用插件=【插件】)
        运行时禁用一个或多个插件,参数为由逗号分隔的去匹配插件名字的通配式。
    --noplugins (无插件)
        运行时禁用所有插件。
        配置选项:plugins (插件)
    --nogpgcheck (无gpg检查)
        运行时禁用 GPG (GNU Privacy Guard, GNU隐卫)签名检查。
        配置选项:gpgcheck
    --skip-broken (略过破缺)
        在推解依赖遇到问题时,只是卸载操作中产生问题的软件包。
        配置选项:skip_broken
    --releasever=version (系统版本=【版本】)
        假装给定字串就是当前版本。与 --installroot (安装的根)一起使用十分有用。注意,若是仍是默认的上游缓存目录,即 /var/cache/yum, 使用这个选项将破坏你的缓存(你可以在缓存目录配置中使用 $releasever 来阻止这件事的发生)。
    -t, --tolerant
        此选项目前不做任何事。
    --setopt=option=value    (设置选项=【选项】=【值】)
        设置 yum 配置或仓库文件中的任何配置选项。对于全局配置选项,使用: --setopt=option=value (设置选项=【选项】=【值】);对于仓库选项,使用: --setopt=repoid.option=value (设置选项=【仓库id.选项】=【值】)。


列表选项
    下面是如何调用 yum 的列表模式的方法。注意,所有列表命令都包含软件包的版本信息。
    输出
        yum 列表的输出格式为:


            name.arch [epoch:]version-release  repo or @installed-from-repo
        (名字.架构【纪念号】版本号-发行号   仓库 或 @安装自仓库 )


    yum list [all | glob_exp1] [glob_exp2] [...]    (yum 列表 【全部|正规通配式1】 【正规通配式2】 【……】)
        列出所有可安装的和已安装的软件包。


    yum list available [glob_exp1] [...]    (yum 列表 可安装 【正规通配式1】 【……】)
        列出 yum 仓库中所有可安装的软件包。


    yum list aupdate [glob_exp1] [...]    (yum 列表 可安装 【正规通配式1】 【……】)
        列出 yum 仓库中所有可更新的软件包。


    yum list installed [glob_exp1] [...]    (yum 列表 已安装 【正规通配式1】 【……】)
        列出参数指定的软件包。如果某个参数不匹配一个可用软件包,则被视作 shell 风格的通配串然后打印出其匹配项。


    yum list extras [glob_exp1] [...]    (yum 列表 额外 【正规通配式1】 【……】)
        列出配置文件中的仓库里没有但在系统中却已然安装了的软件包。


    yum list obsoletes [glob_exp1] [...]    (yum 列表 过时 【正规通配式1】 【……】)
        列出目前系统中已然安装但被某个配置文件中的仓库标以过时标志的软件包。


    yum list recent (yum 列表 最近)
        列出最近添加到仓库中的包。这往往并非有益,你真正想要的也许是用 yum 安全插件中的 "yum list-updateinfo new"(yum 更新信息列表 新)。


指定软件包的名字
    软件包可以被安装、更新、卸载、列举、查询、等等,按照以下格式或者以下格式的通配式:
      
             name            (名字)
             name.arch            (名字.架构)
             name-ver            (名字-版本号)
             name-ver-rel        (名字-版本号-发行号)
             name-ver-rel.arch        (名字-版本号-发行号.架构)
             name-epoch:ver-rel.arch    (名字-纪念号:版本号-发行号.架构)
             epoch:name-ver-rel.arch    (纪念号:名字-版本号-发行号.架构)


         举例: yum remove kernel-2.4.1-10.i686  (yum 卸载 内核-2.4.1-10.i686)
        将卸载指定的 内核-版本号-发行号.架构。


         再如: yum list available 'foo*' (yum 列举 可用 '傻*')
        将列出所有匹配 '傻*' 的可安装软件包。(此处单引号将阻止你的 shell 展开此通配式)。


清理选项
    下面是如何调用 yum 的清理模式的方法。注意,以下"所有文件"的含义是"当前启用仓库的所有文件"。如果你还要(临时地)清理某被禁用的仓库,你需要用 --enablerepo='*' (启用仓库=全部)选项。


       yum clean expire-cache    (yum 清理 过期缓存)
        清除本地数据,如果每个仓库的元数据和镜像列表都已下载。这意味这你将为下次使用仓库而重新激活了它们的缓存。然而如果缓存本来就有效,并不会删除什么。


       yum clean packages    (yum 清理 软件包)
        清除系统缓存中的软件包。注意,软件包下载之后是不会自动删除的。


       yum clean headers    (yum 清理 头文件)
        清除所有头文件,防止 yum 作依赖推解时用到这些旧版本。


       yum clean metadata    (yum 清理 元数据)
        清除所有 yum 用来计算远程软件包可用性的文件。用此选项将令 yum 在下次运行的时候下载所有元数据。


       yum clean dbcache    (yum 清理 数据缓存)
        清除用来更快得到元数据的 sqlite 缓存。用此选项将令 yum 在下次运行的时候下载 sqlite 元数据,或者重建 sqlite 元数据,如果用很老的仓库的话。


       yum clean rpmdb        (yum 清理 rpm数据库)
        清除本地 rpm数据库 的所有缓存数据。


       yum clean plugins    (yum 清理 插件)
        使启用插件清除它们的缓存数据。


       yum clean all        (yum 清理 全部)
        执行以上所有命令。


插件
    yum 可以通过使用插件来扩展功能。插件是一个 Python ".py" 文件。但需要安装在由 yum.conf 文件中 pluginpath (插件路径)选项中所指定的某个目录中。一个插件要工作,必须满足以下条件:


    1. 插件模块文件必须安装在如上所述的插件路径中。


    2. /etc/yum.conf 中的全局插件选项必须设置为 "1"。


    3. 插件的配置文件必须存在于 /etc/yum/plugin-conf.d/<plugin_name>.conf (/等等/yum/插件配置目录/【插件名字】.配置),此文件的启用设定必须设为 "1"。这样一个配置文件的最小内容为:


    [main]        【主】
    enabled = 1     启用 = 真


    插件相关配置选项的更多内容见手页 yum.conf(5)。


文件
       /etc/yum.conf            /等等/yum.配置
       /etc/yum/version-groups.conf    /等等/yum/版本-组.配置
       /etc/yum.repos.d/        /等等/yum.仓库.目录/
       /etc/yum/pluginconf.d/        /等等/yum/插件配置.目录/
       /var/cache/yum/            /变动/缓存/yum/


参见
       pkcon (1)
       yum.conf (5)
       yum-updatesd (8)
       package-cleanup (1)
       repoquery (1)
       yum-complete-transaction (1)
       yumdownloader (1)
       yum-utils (1)
       yum-security (8)
       http://yum.baseurl.org/
       http://yum.baseurl.org/wiki/Faq
       yum search yum


作者
       见此程式包含的作者文件。




BUGS(虫虫)
       这里当然没有任何虫虫,但若你发现,请先咨询上已提及的FAQ,然后电邮至: yum@lists.baseurl.org 或提交到 bugzilla。




Seth Vidal                                                              yum(8)

2011年7月30日星期六

死生亦大矣

       高铁撞车事件发生这么久了。几十条人命。但是,我自看到这条新闻却没有那么激动。在我们国家,发生个意外,死几十条人命,再正常不过了。每年煤矿下恐怕要死亡几千人吧,也许我有点空口说大话,但至少一千人我相信总是有的吧。我依稀记得零八年大概奥运结束不久,当时襄汾"由于下雨而发生泥石流",死亡人数从几人、几十人、最后变成两百人,还只是官方报道。泥石流?当时我正在临汾,临汾下了几滴雨,地面几乎都是干的。我无法想象距离十几公里的地方会发生泥石流。而当你在新闻里看到清理现场的图片时,你无法想象,就是推土机在清理一片沼泽。人,就像沼泽中的垃圾一般。不要想还有丝毫的尊严。谁为这几百人讨还公道?真相?大家都知道真相。因为真相太简单,而且也许那些还没有人狂妄到认为可以隐瞒真相,老百姓很快就能够知道真相。撤官入监结尾。

       但是,这死去的几百冤魂呢?

       还有在汶川地震死去的十几万人呢?

       这次高铁撞车事件,我想我之所以比较冷漠,是因为我感到这些人之所以被怀念,是因为他们是坐得起高铁的人。我们这个时代的发声者,焦虑的青年们,一方面痛恨不公,另一方面又拼命削尖脑袋向上挤,追求披着理想主义外衣的真物质主义,在这些死去的乘客身上看到自己的危险,看到自己的死亡,因而那些人就成了令人挽怀的牺牲者。

       生命不能以数目来计算,我知道。我不能说几万人、几千人的死亡就是大事,几十人、几个人的死亡就是小事。我不是这个意思,真的不是。一个人的死亡也是大事。就比如离这次高铁撞车事件的地方不远处的,钱云会。

       钱云会的死亡,真的所有疑点都解开了么?不是,疑点不是越来越少,而是越来越多。然而这一切已经成为羅生門。我们的肩负时代精神的青年们怎么说?我不能说全部,但是我至少看到过吧,说这就是因为征地不公,老百姓就希望把这个事情闹大。那些"独立调查团"呢?一个担心民变撤了,另外两个在"重重困难"之下,接受、同意和维护官方的解释。当他们面对质疑时,他们是怎么说的?不是原话,但他们的回答与这个"不管你相信不相信,我反正是信了",如出一辙:"你们可以质疑,但是我们最后得到的结论就是这样,我们相信我们这个结论。"时代的精英们,以及精英的拥趸们,绝不可能真正考虑农民和老百姓的,不会愿意站在老百姓的立场;他们不会试图理解老百姓的苦难和心愿,而他们要的只是听话、不闹事的老百姓,如果老百姓能够形成制衡和挑战北京的力量,那就是好老百姓;如果老百姓来要这要那,要把他们那些"落后愚昧"的东西带到这个社会公共空间里,那他们是大错特错了。

       我曾一直认为我们的父辈欠我们,他们一直对我们隐瞒,他们欠我们太多真相。然而,我感到对于我们的下一代,我们更欠他们的。我们也欠他们真相,我们给不了他们真相。因为我们太多的时候,根本就不在乎真相!我们只在乎自己的 Ego ,只在乎自己的情绪能够得到发泄,或者得到满足。我们没有寻找真相的愿望和能力。我们只想着以血还血以牙还牙,却完全忘记我们所声称的目的————让这个社会变得更好。我们交给我们的下一代的,只有愤怒和不满。也许很久之后的人会认为我们现在活在一个"万恶的旧社会",就像我们提起"新中国成立之前的历史"一样。

       所有死去的人们啊,你们知道,我们是健忘的。跟你们一样。我们马上就会忘记所有这些。我们之所以怀念你们,完全是为了我们自己。

2011年7月20日星期三

东方快车谋杀案:2010

       我个人非常喜欢这部电影。也许只是因为它很对我的胃口。

       与二十几年前的那部相比,在故事情节上,稍微做了些细节上的变动,有的是为了让故事更加合理,相当于给原著小说打上补丁。比如,为何一个黑手党杀手会要杀柯赛蒂,原先的解释是不知原因的黑手党火并;而在此则是,柯赛蒂犯下阿姆斯特朗案后,他被抓获被起诉被审判,黑手党通过威胁检察官使柯赛蒂得以逃脱法律惩罚,但是此案使得美国警方意识到黑手党的危险,此案之后大力打击黑手党。黑手党最终迁怒于柯赛蒂,于是派下杀手。这个解释比原先要完整而且有说服力。

     但是,更多的情节上的增改,是为了导演新的目的。这部电影不是侦探片,不是出题解迷,让你最后恍然大悟的影片,如果只是这个意义,没有必要在二十年后重拍。这部电影的目的是让人重新思考正义。所以这部电影的时间更短,但是却让观者压力更大。这部电影不是要表现聪明、洒脱、浪漫、牛逼,而是反对这些,要撕去这些表象,还原真正的现实。

     首先,现实是,列车上的乘客只有很少是英国人,有法国人、德国人、俄国人、比利时人、匈牙利人、希腊人、意大利人、瑞典人。虽然在故事的时代,英语可能已经有了很高的地位,但是法语还不像现在这么没落,在欧洲大陆还是很有影响;而且这辆列车公司是法国人开的,老板、乘务员都是法国人。所以这部影片的一个突出特点就是,大部分人的英语有明显的法国味,而且有彻底的法语。虽然原著小说是由欣赏新大陆的岛国人写的,但是这部电影是欧洲的。所以在这部影片里,你很少会听到别人称波洛 (Poirot) 为 "泼弱",而是 "布瓦霍"。

      在影片一开头就是一个咆哮的波洛:"谎言!一个又一个谎言!"被斥责的军士开枪自杀。血溅在波洛脸上,但他依然是坚定的表情。送波洛的士兵对波洛说他觉得那自杀的军士是个好人。他只是没有选择。而波洛说,这都是他自己的选择,他可以选择不撒谎,他也可以选择不自杀。影片的开头就让人非常紧张。而在开头另外添加的一个情节,妻子怀上了别人的孩子,丈夫要求正义,于是几十个男人用石头将那个女人砸死。看到这个场景,便可以猜测到整个影片的主旨————如果你之前知道故事情节的话————东方列车上杀死柯赛蒂的十二人,多么像这些石刑杀死通奸女人的那些土耳其人。

      镜头会随着火车摇晃,画面色彩也稍显黯淡。东方列车并不浪漫,虽然是豪华车厢,毕竟是那个时代的火车。经理布赫先生得意地说,你看我们的车厢里,整个西方的上流社会。但是镜头打过去,你发现这些人就外貌而言没什么了不起的。影片是要剥离原作的浪漫色彩而还原以真实。

      故事的更改,柯赛蒂的私人秘书,不再是阿姆斯特朗夫人的崇拜者,而是当初的柯赛蒂案的检察官的儿子。他的父亲无法执行的正义,他要来参与执行。阿姆斯特朗夫人的妹夫和妹妹,即安德烈公爵和公爵夫人,由于公爵夫人的身体不适————幽闭恐惧症?也许不是,也许只是因为恐惧————而未直接参与谋杀。那么,如何凑够十二人?抱歉,希腊医生,牺牲你了。原先清白的助手希腊医生,在这里变成曾经去过美国,知晓和关心阿姆斯特朗案的一个产科医生。因此原先的助手,在这部影片里的任务是不断地误导波洛。这也更增加了这个故事的残酷程度。

      这个希腊医生有特别的含义。他只是阿姆斯特朗案的观众,他没有亲人和朋友在阿姆斯特朗案中受伤害。他也不是那个当时爱上女仆的侦探。阿姆斯特朗案对他没有影响,他本是在事件外的。但是他关心这个案件,他有"强烈的正义感"。于是他也参与到审判当中。妻子怀上他人的孩子,丈夫要求"正义"。而这个正义,是石刑。丈夫是受害者,丈夫的亲人,丈夫的兄弟和朋友,会义愤填膺,会举起石头。但是,不止他们,仅仅是过路人,仅仅是知晓事件,而同样怀有"正义感"的男人,也会举起石头。而希腊医生正是这一形象。你认为你有正义感,你认为的正义感可以让你有权利去做审判官,有权利去做执法者。于是你就去杀人,就自己走过去宣判他人的死刑,而且把尖刀插进他人的心脏。(反观我们的现实中,我们可有把自己自封为审判者和执法者,以正义之名而行暴力之实呢?)

      这部影片具有强烈的陀斯妥耶夫斯基的色彩。任何原因都无法使杀人合法化。

      同样类似的,影片中的波洛具有虔诚的宗教信仰,不过这里是天主教(而不是东正教),与瑞典的女传教士有额外的交锋。欧尔森夫人说:天主教的信仰是错的,因为他们认为一切罪行都是可以原谅的;这个世界上有的罪行是绝不可原谅的。而波洛并不去反驳。同样类似的,影片中要表现杀人者的虚伪、脆弱和可怜。杀人者必定要强调,存在法律之上的正义;必定要强调,我们希望法律能带来正义,但是法律不给我们正义,所以我们就自己去寻找正义。德贝汉小姐哀求:耶稣说过,只要你没有罪,你就可以举起石头;我们当时是无罪的,我当时是无罪的。(I was not sinful.) 这是多么可怜的逻辑:难道要另外一个清白的人向你举起石头,然后再把他自己变的不清白么?而阿巴斯诺特上校,则紧张地马上要掏出枪来杀死波洛,"我们已经杀了一个人,再杀一个也没什么了不起的。"俄国的老贵族德拉戈米罗夫公主央求:"放过他们,把我带走,反正我已经老了。"牺牲自己、保护他人是高尚的。但是正义呢?如果抓捕你们是不正义的,非法的,那你为何为他们担心,为何他们需要保护?况且你有何尝有保护的资格?你自己就是凶手。你们要执行正义,却不敢光明正大,而要阴谋诡计;而"正义"既已执行,又怯怯懦懦,不敢宣扬,唯恐为外人所知;而一旦为外人所知,又央求、恐惧,甚至要杀人灭口。你怎么能说自己所执行的是正义呢?

      从某种意义上说,甚至还不如那些执行石刑的土耳其人。因为他们坚信他们是正义的,因为他们的穆斯林律法就是这样,他们不怕为人所知,他们在光天化日之下执行他们的律法。而这些西方的文明人,甚至其中有贵族,有外交官,有知名演员、有陆军上校、有侦探、有检察官的儿子、甚至有传教士。这些文明人,为了他们的"正义",则是不惜大费周折和阴谋诡计。

      结局,波洛没有把这些人交出去。原因是,德贝汉小姐对他说,当时那些男人用石头砸死那个女人时,您当时不是说那些人也有他们的道理么?波洛虽然马上反驳道:您当时可是那么同情那个女人的啊。但是他无疑也感到,自己当时还是过于无情了。德贝汉小姐当时面对那个女人的同情,让他感到希望;而德贝汉小姐当时的无助,他也印象深刻。德贝汉小姐哭泣着倾诉道:我希望正义,当我觉得我在做正义的事,我感到自己升华了,变得伟大了。这又让他感到,人性本身就是这样啊。所以,他为何最后还是没有把这些凶手交出去?因为他的天主教信仰。最后他痛苦地一边走,一边握紧手中的十字架:这世界上没有什么事情是无法饶恕的。看到人的卑劣和脆弱,但是饶恕;因为他们杀掉柯赛蒂后不会再去杀人了,他们不会去做恶了,相反他们还要做很多好的事情。所以宽恕。

      所以,尽管整个故事与原著差别很小。但是讲述的内容和表达的主题则大大不同。这部影片超越了原作。

      "如果法律倒下,你们把它捡起来,而且更要把它高高举起!因为没有法律,我们的社会就会毁灭!"

2011年7月14日星期四

       文本界面启动 Linux 后,会简单地提示输入用户名和密码。这里目的是让系统除了显示发行版、日期、时间、内核号码等之外,加上某个可变的东西。希望的是每次登录都显示由 fortune 命令产生的随机的谚语。

       这里的提示是由文件 /etc/issue 决定。因此需要的是在每次登录前生成新的 /etc/issue 文件。登录壳程序 (Login Shell) 在每次启动前需要先从配置文件 /etc/profile 读取设置。而 /etc/profile 文件会寻找目录 /etc/profile.d/ 下的所有脚本文件。因此在这个目录下新建一个脚本文件,比如 custome.sh,凭此每次生成新的 /etc/issue 文件。具体做法是:

       对于原先设置好的 /etc/issue 文件,保留其备份。这里我保留在原目录下,需要管理员权限:sudo cp /etc/issue /etc/issue.stable ,备份的名字自然是任意的。

       在 custome.sh 中写(此处不需要#!/bin/sh):

fortune > /tmp/delta
cat /etc/issue.stable /tmp/delta > /etc/issue
rm /tmp/delta

       解释是,用 fortune 命令生成谚语,然后把它拼在原先的备份之后形成新的 /etc/issue 文件。最后只是删除临时文件,意义不大,可以省略。

       但是,仅仅是到这里是仍然达不到目标,障碍在于 /etc/issue 文件的权限要求。这使得第二句命令实际上并不能执行。这里通过 sudo chmod a+w /etc/issue 取消这一限制。需要强调的是,这一做法有违系统安全的要求,只是现实来说其实关系并不大。这样我们的任务就完成了。每次注销后重新登录,系统都会提出一句不同的谚语来。

       类似地,登录成功后,系统的提示由文件 /etc/motd 决定。如果你认为一句谚语应该出现在登录之后而不是之前,那你可以采取类似的做法。事实上,做法是完全一样的。当然,主要的目的是在每次登录获得不同的提示,得到一点新鲜感,也大可以采用其他的手段,而不是简单地使用 fortune 命令。

       总结,简单,生硬,暴力,而且意思不大。

2011年7月12日星期二

陀思妥耶夫斯基:《地下室手记》

        《地下室手记》篇幅很短,可以算是稍长的中篇小说。而且,从某种程度上,让人想起鲁迅的《狂人日记》(当然水平比《狂人日记》要高得多)。第一人称,一个蜷缩于地下室的人所写的手记。它不是要通过一个狂人的视角来说明这个社会上正常人所看不到或看到却不愿承认的东西。而是要说,在目前的社会中(当然是指当时的俄罗斯,尤其是圣彼得堡),一定会存在许多这样的"地下室的人",然后把这样的人推至极端表现出来,以此来重新认识社会,重新认识人本身。

        《地下室手记》是陀思妥耶夫斯基早期的作品。它有助于人了解《卡拉马佐夫兄弟》中的老卡拉马佐夫和德米特里——尤其是老卡拉马佐夫。它充分地解释了为何会有,"我在你面前出丑,我为此而感到羞耻,但我同时又感到快乐,而且我会因在你面前羞愧而恨你,而找一切机会进行报复。"

        《地下室手记》首先提出的重要论断就是:否认理性。陀思妥耶夫斯基不相信理性,看到理性也要排斥它。在他看来,理性使人的自由、人的自我的意识都无存身之处;让人变成了不去怀疑的公牛:要么不假思索地勇往直前,要么撞到墙便掉头。但他还有更重要的原因,他认为:理性不是生命的本质,理性只能是生命的一部分,理性只是生命的"二十分之一"。他问道,人类何时有过所谓的理性?从人类历史,到每个人平常的行为,有哪一点可以用理性来解释?他说道,并不是存在一个总利益,人一旦认识到这个最高利益,一切行为就都是为了达到这个总利益。人往往会明知自己的利益何在,而仍然有意做出违背自己利益的事情。这说明什么?陀思妥耶夫斯基说,这说明人的愚蠢的、忘恩负义的,或者你所谓的总利益在统计列表中忽略了最重要的一项,而漏掉这一项足以使你的所有计算失去任何意义。

         应当说,陀思妥耶夫斯基的论证在逻辑上是不充分的。人类曾经一百多万年不穿衣服生活,这不能证明穿衣服是错的,不能证明赤身裸体才是人的本性。人类曾经互相残杀了一百多万年,直到今天还有人在互相残杀,还有人在准备互相残杀,但这不能证明和平、友爱、和睦相处是错误。人类从古至今很少有理性的表现,并不能作为否认理性的证明,并不能说理性是错误的。

        但是即使这样,即使你否定他的论证,也很难拒绝他的结论(这正是他伟大之处):理性在人的生命中只是(很小的)一部分。因而要真正认识人本身,就不能从理性出发。陀思妥耶夫斯基在《地下室手记》中对人的评述是,人是愚蠢的,反叛的,忘恩负义的;人宁可做出种种不合理的事情,而这明知错误却不能拒绝自己的原因是,人就是要不顾一切证明自己的存在,证明自己的意义和自尊;生命的本质就是要宣誓自己的存在,而并不考虑一切是否合乎理性、或者甚至合乎道德。这样我们也就可以理解,在陀思妥耶夫斯基看来,人是易谬的、荒唐的、甚至卑劣的,因此人必须上升和超越,因而必须走上宗教之路,以避免彻底地堕落、避免走向罪恶和犯罪。

        如果接受,说生命的本质就是宣誓和维护自身的存在,我们也许就可以这样地解释一些问题。比如说人类几千年来对于死亡的思考;比如杞人忧天。比如幽闭恐惧症和旷地恐惧症,都是因为人害怕孤独,而孤独带着毁灭的危险。又比如,在社会中处于上等的、有地位有财产的人,就不会强调自己的尊严,因为他们的财产和地位已经是自身存在的宣誓,赚更多的钱、谋取更高的地位是他们宣誓自己生命的方式;而社会中的弱势群体,没有财产和地位、因而不能通过已有的财产和地位去谋求更多的财产和地位的人,才会强调自己的生命的尊严,因为另一条路被堵死了,他们只有通过强调自尊来宣誓自己的存在,因为他们的生命除了自尊,已经一无所有,因而他们更多的会表现出不满、反叛、暴力。而这两者本质上是一样的。而有时,人会把自己的生命扩展出去,作为某个整体的一部分。比如人会有爱好(惺惺惜惺惺,好汉识好汉),会有归属感,甚至超越感。所以人会把自己一部分存在交给某个抽象的东西,而这也是生命本身的扩充;比如某个圈子的交流会,比如老乡会、校友会,比如某某明星的粉丝团,比如自以为献身于某个高尚的事业,比如自以为与上帝或者与历史上伟大人物灵魂相通。这些本质上都一样,都是一个生命将自己扩展到更大的领域,而这正是生命的欲望。

        把话题收回来。因为生命的本质没那么高尚,所以人需要限制以防止人堕落,防止人伤害自己。正如小孩子虽然可爱机灵,但需要大人看着它,以防止它的好奇让它爬到什么地方摔坏自己,或是在哪里划伤自己,或是吞了什么不该吞的东西。陀思妥耶夫斯基认为,人必须相信上帝,否则人将堕落。我是认为,伦理、道德、法律的推演其实也可以脱离上帝的假设。当然,世界上还是有太多用道德和法律都不太顶用的东西。但是也许随着人们对自身的认识的加深,可以通过心理学或社会学或其他等等不断前进。上帝总是个说服力不充足的概念,不只是因为说服不了我,而是:首先说服不了十几亿中国人,而且似乎也说服不了西方人,而且似乎到处都不可行。

2011年7月1日星期五

再谈 "Inception"

        之前那篇谈《盗梦空间》的文章,现在来看,情绪太冲动。然而说的东西基本全部是对的。《盗梦空间》讲的故事,是 Cobb 在回家的飞机上做了一个半清醒的梦 "Lucid Dream",然后醒来回到现实,回到家里,看到自己的两个孩子与父亲。而在这个梦中,他所编造的有同行的人、她的妻子、随身携带的妻子的遗物,以及梦世界的规则。

        杀妻,与杀妻后的愧疚,没有勇气面对现实,这才是在激烈的动作场面与光怪陆离的梦世界规则之下的,躲在角落里的真实。同样的主题出现于导演诺兰的第一部成名作《记忆碎片》 "Memento" ,以及 Leonardo DiCaprio 稍早于《盗梦空间》的影片《禁闭岛》 "The Shutter Island" 。这也应该是导演选择他的一个重要原因。《盗梦空间》并没有明确地说出杀妻,但是基本毫无疑问。《盗梦空间》回答的问题是,如果《记忆碎片》中的 Leonard 恢复了清醒,开始面对现实;如果《禁闭岛》中 Andrew Laeddis 终于不再自我保护,接受现实而从禁闭岛释放出来;如果他们开始要回归正常的生活,要回家,他们会怎样?他们会做一个梦,来清扫自己的罪恶感。要清除掉负罪感,他们才能回到现实中。

       《禁闭岛》、《致命id》 "Identity" 、《穆赫兰道》 "Muholland Drive" ,甚至包括《搏击俱乐部》,这些影片之所以不能胜过《盗梦空间》,就在于观众一看就知道这是个谜题。而作为谜题,必须可解,所以到影片最后的时候,导演必须给出钥匙。依靠导演的习惯,可能会有或详细或简略的解题过程,大多数导演索性都把答案直接给出来。所以这些影片最多需要看两遍。但是《盗梦空间》,你很难发现它是一个谜题。其他导演打破现实,让你发现种种不可解释之处,于是你费劲力气去寻找答案,让这一切可以解释,把碎片重新拼成一个整体。而《盗梦空间》本身就是一个整体,它直接告诉观众新奇的规则,给你钥匙;然后在观看影片的过程中,观众不断地用这些规则去解释、去将情节合理化。钥匙是迷雾。观众的注意力被转移了,观众需要不断的提醒自己当前的梦是第几层,因而就忽视了明显两个重要事实:首先, Cobb 的意识投影 Mal,可以出现于任意人的梦中,而没有人感到不自然;其次,所有梦世界的规则都是 Cobb 所说的,其他人只有听从。最后的伪开放式结局更是骗倒了所有人:所有人都去讨论这个结局。注意力被转移了。导演转移你的注意力,让你认为这只是一步新奇的想像的动作商业片,满足了大量人的虚伪自尊:"没什么难理解的,就是进栈出栈。""最后就是一个开放式结局,你怎么想都可以。"

         其实一般人看《盗梦空间》,总会有稍稍感到不自然、说不通的地方。你需要意识到开始 Saito 所说的"你是想说,我们都只是在一个梦中?"是有双重含义的;你需要意识到结尾 Cobb 醒来的一幕是有双重含义的(这一点来自之前讲《盗梦空间》那篇文章中 SteamedFish 的评论)。你需要意识到 Eames 在谈策略时所说的,"要用渲泄,让他在最后一刻释放出来。"是有双重含义的。小 Fischer 本来就有放手之意,但随着 inception 的进行,对父亲积攒起仇恨,决意经营生意证明自尊,然而在最后一刻,将所有仇恨和不满彻底释放。这也是自指,你需要在同时意识到 Cobb 对他的妻子 Mal 的感情,不断地容忍和愧疚,不断地积累下去,而到最后一刻他决意面对 Mal ,释放掉所有的罪恶感和愧疚。

       《盗梦空间》之所以胜过其他,在于你甚至很难发现它是一道需要解答的谜题。你完全可以把它看作一步快餐片,而依旧很欣赏。而如果你发现它其实是谜题,你也将发现,解谜题的钥匙早已包含在谜题本身当中,线索是足够的。这个谜题是可解的。而且正因为钥匙在谜题之中,所以来看快餐片的观众不会看到一把意外的钥匙。这个谜题是可以不解的。而且相对于其他影片,这个谜题的难度是不低的。当然,这个谜题不如《穆赫兰道》那么繁琐。

2011年6月10日星期五

托尔斯泰:《安娜·卡列尼娜》

       需要首先声明的是,我对托尔斯泰一直持反面态度。主要原因在于,我一直对贵族之类的东西持反感态度,我认为一个贵族不能够了解真正的世界。(比如高尔夫球或网球,我认为这是贵族艺术,李娜获得法网冠军,只是她个人的成功。她根本都不意识到我们的存在,也并非为我们而奋斗,我也没有从她的成功中看到我的某个理想或希望得以实现。所以我丝毫不高兴,只是因为我不关心。)如果一部小说里全部都是贵族、地主、官员,年收入几千几万卢布,这在我看来跟拍一部电视剧里面全是美女帅哥、富家公子小姐、财团继承人、影视明星,富二代官二代等等,没什么差别。即使这个艺术家真的生活在这个圈子,因而真的要用这个故事背景来讲他的艺术,他的艺术也注定是有缺陷的,因为他的思想世界离不开这个世界。这也是我对托尔斯泰一直的看法,而且,直到现在,也没有太大变化。

       如果由开篇的名言"幸福的家庭都是相似的,不幸的家庭缺各有各的不幸。"所引导,在看完开头的部分,容易得到这样的看法:幸福的家庭之所以幸福,在于能够以虚伪和忍受得以弥合;如果你要把直率的感情表达出来,就注定不幸。幸福的家庭之所以幸福,是因为能够符合这个社会对于家庭的要求,这个要求是标准的、唯一的;而不论以何种不同的方式偏离这个这个社会对家庭的要求,则必不幸。所以奥布隆斯基一家是幸福的,因为虽然多莉的丈夫不爱她,不顾家,多莉最终都决定忍受,而且忍受他的虚伪;而安娜之所以不幸,就是因为因为她要追求真正的幸福,她决定不再忍受没有感情的婚姻。以真诚和直率对抗社会的虚伪,对抗这个社会体系,但是这样的对抗注定失败、注定不幸、注定悲剧。

       但是,似乎不是这样。作者不是这个意思,至少不完全是。在两条线索中,列文的部分明显超过了安娜的部分。而且,最终来看,作者所指的幸福的家庭,应该是列文一家而不是奥布隆斯基一家。但是以列文一家幸福来说,就难以说明,为何他们幸福,而同他们不同的家庭不幸。这个原因很难概括。托尔斯泰的思想是比较复杂的,或者也许是因为这部作品重写过太多次,以至于不同的思想搅在一起。他要揭露和责骂这个社会,因为这个社会的虚伪和肤浅;但另一方面他又要接纳和热爱这个世界。对于安娜和渥伦斯基,他既有深刻的同情,又有严厉的惩罚。这是好的,平衡的。但问题是他同情的部分和惩罚的部分是否得当,是否颠倒了。我感到的是,他一直都给予了过多的同情,直到最后发现同情得太多了,需要用过分的惩罚来平衡;所以,仅以被社会排斥不够,精神失常也不够,安娜必须死。这是让我不太接受的,这个故事的安排不能让我信服。

       不能让我信服的另一重要的原因是,安娜这个人物,性格变动太剧烈,太频繁,而这些变动的发生没有合理的解释。列文的意识流是足够多的,因为这是托尔斯泰以自己为原型创造的人物。他的意识流足够多,他总会像强迫症似的不断对自己的思想和感情进行评价。基蒂,列文的妻子,意识流没有那么多,但足够了。但是安娜的意识流,几乎是空的,除了在自杀前。因此你可以通过他人的眼睛来了解她,你可以听到她说话,但你不能知道她的心理活动。我们知道她是美的,她征服众人,她气质出众;但是我们不知道她的相貌,只知道她的眼睛是黑色的,只能从别人的思想知道被她感动,但是只有结果没有过程,我们无法知道是怎么感动的。我们说,安娜能够劝和自己的兄嫂,让奥布隆斯基一家重归和平,但是不能拯救自己的家庭,真是不幸。但是你看,她是如何劝和的?言辞少,且闪烁不详,这个劝和的过程是神秘的。而且,我们连她对自己的哥哥的出轨行为是如何看待都不知道!因自己的哥哥而悔恨和羞耻么,甚至,她认为她的哥哥是错误的么?我们无法知道。

       在与渥伦斯基第一次见面的时候,空白;在舞会上冷淡闪躲的时候,空白;但马上被基蒂看到她与渥伦斯基在幸福的跳舞时,空白;她如何爱自己的儿子,空白;她直言无法忍受虚伪的丈夫,有的,但是她如何忍受这八年的,空白(八年不是个很短的时间);在分娩时由于生命垂危,处于癫狂,称丈夫宽容而自己有罪,可以理解,充分;但是一旦病好,便放弃儿子,与情人出国,空白;之后又爱起自己儿子。不错,女人是冲动善变的,但是这种冲动善变更多地是表现在心理活动而不是行动上。对于作为标题的主人公,我们期待她的心理描写能够达到基蒂的水平,让我们能够理解她的内心的痛苦,理解她发生重大变化的原因,这不应该是一个奢望。但是,对于安娜,我们得到的几乎全部是侧面描写。她是作为一个抽象的概念而存在,因抽象而美,却也因抽象而不合理。应当说,卡列宁和渥伦斯基这两个人物还是比较自然的,有他们各自的性格,但是正因为安娜这个人物的抽象性,使得卡列宁和渥伦斯基也需要有不自然的迅速的变化来适应她。

       托尔斯泰对于虚伪的反对是坚持的。按照他的思想,如果人与人的关系不是和谐的,社会就会有各种疾病。而人与人应当以真诚和直率来取代虚伪。但是,这种真诚与直率具体是什么。按照托尔斯泰的想法,是不虚伪,不隐瞒,不说与自己的真实想法相反的话。如果内心厌恶,便不说喜欢。但是在实际中,往往是"我知道是我不对,但这不是我的错,所以你必须宽恕我!"因为不爱妻子,所以去找别的女人,这是真诚吗?明知自己的丈夫不爱自己,明知他欺骗自己,但仍然去原谅他,这是真诚么?当已犯过错,掩饰固然是虚伪,但是大胆承认难道就是真诚么?并且因为大胆承认,因此自己是这样"真诚",所以必须得到宽恕,道理是这样么?如果对方明明心里不能宽恕,却处于为了自身名誉或其他原因而不得不宽恕(比如妻子宽恕出轨的丈夫,因为害怕离婚,因为仍然爱他,害怕丈夫出轨的事被尽人皆知),是否陷入了必错的悖论?倘若宽恕便是对自己不真诚;倘若不宽恕便是不珍惜对方的"真诚"。

       这个社会的虚伪,并非完全由于人性的虚伪。如果每个人都是美的,而且全知全能,虚伪就没有存在的空间。如果所有夫妻都终生相亲相爱,那么丈夫也不会需要欺骗妻子,妻子也不需要抛弃家庭去追逐真正的幸福。如果每个人的观点都是正确的,也就不用隐瞒对他人的质疑和反对。这个体系有这个体系的道理,很多不合理的道理。但这些不合理的道理的最终原因,是现实的缺憾,不足,和落后。

       结尾是妥斯陀耶夫斯基式的,我是欣赏的,但是喜欢托尔斯泰本人而不是妥斯陀耶夫斯基的读者来说,恐怕会大为反感。列文的形象是非常真实和充分的。但是即使这个形象,我还是要吹毛求疵地说,他隐瞒了很多真正的自己去塑造更好的人物。列文在婚礼前一天给基蒂看自己的日记,基蒂知道自己不是他的第一个女人而大哭一场。我们从列文的各个方面来看,要想像这样一个忠诚保守而单纯的人也是有婚前行为,稍显不太自然,书中其他地方均无类似线索。这是为了说明他的忠诚,而且把托尔斯泰自己婚前给未婚妻看日记的这一幕映射过去。但是托尔斯泰就不敢说,列文其实曾有数不清的女人,而且自己的一个农奴还为生下了一个私生子,谁能接受这样的列文呢?这样的列文,还是列文么?托尔斯泰认为自己把日记给未婚妻看的行为是真诚的,不欺骗的。但是,这种真诚难道不也是那种"我知道是我不对,但(我的性欲特别旺盛,我控制不了,)这不是我的错,所以你必须宽恕我!"