LINCKS 简介
LINCKS 是一个多用户、客户端-服务器、以对象为中心的数据库系统,构建于名为 NODE 的存储服务器之上。存储服务器为 LINCKS 提供了一个仅追加、以对象为中心的数据库和对象开发历史记录(“此对象是从哪个对象创建的?”)、时间历史记录(对象之间的关系)和可选的命令历史记录(默认情况下未启用)。一个对象由一个图像部分组成,其中可以存储任何内容(文本、图像、声音等);一组属性,在某种意义上,对对象进行类型化;以及一组指向其他对象的链接。
当前的主要用户界面 xlincks 是一个 X11 应用程序,它允许您以超文本方式编辑和浏览 LINCKS 数据库,使用类似 Emacs 的命令。xlincks 为工作组环境中的文档编辑提供了基本环境,但目前仅提供有限的标记功能。LINCKS 的超文本性质,以及高级视图支持,允许轻松共享信息和重用文档的部分内容(节、子节或段落),只需创建指向要使用的部分的链接即可。
视图是关于如何向用户呈现数据的定义。您可以定义自己的视图,这些视图像数据库中的任何其他对象一样被存储和编辑。您可以定义逻辑结构(部分及其顺序)、从数据库中检索不同部分的位置以及对象的格式属性。通过将不同的视图应用于相同的对象,您可以查看文档,例如,作为“完整文档”、“文档概述”,或仅作为最高级别,即目录。在一个视图中对对象执行的任何编辑都会自动传播到从同一对象构建(包含)的所有视图。
此外,当多个用户在数据库中编辑同一文档时,当发生同一对象(节、子节、段落等)的并行编辑时,LINCKS 会发出警告。因此,您可以使用辅助渠道(电子邮件、talk、电话等)进行同步,与与您一起工作的其他人协调工作。
LINCKS 起源于瑞典林雪平大学智能信息系统实验室开发的科研数据库系统。我们在 1993 年秋季根据 GNU GPL 发布了 LINCKS,以获得外部研究人员和用户的反馈。从那时起,我们将 LINCKS 移植到 SunOS 4.1.x、SunOS 5.x、Ultrix、AIX、Dynix、Linux、HP-UX、IRIX、SCO、4.3BSD Reno 和 DEC OSF/1 Alpha。它在 X11R5、X11R6 和 OpenWindows(甚至 X11R4,但功能不完整)下运行。我们将 LINCKS 移植到 Linux,以便我们能够在便携式 unix 机器上运行演示。
要运行 LINCKS,您必须运行 RPC 端口映射器(通常从 /etc/rc.d/rc.inet2 启动)、带有 TCP/IP 的内核以及用于 xlincks 的 X11。此外,您至少需要 8MB 的 RAM 才能在同一台机器上运行数据库服务器和 X11 应用程序界面 xlincks。
要安装 LINCKS 二进制发行版 (lincks2x.ybin.tgz),您首先应该创建一个新用户来拥有数据库,可能称为 “lincks”(以 “root” 身份安装 LINCKS 不是一个好主意)。
以 root 用户身份,cd / 并解压压缩的 tar 存档。
如果您创建了一个特殊的 LINCKS 用户,请通过键入 chown -R lincks /usr/local/lincks 更改 /usr/local/lincks/ 目录中所有文件的所有者。
然后通过键入 chown lincks /usr/local/bin/dbpasswd 和 chmod +s /usr/local/bin/dbpasswd 将 /usr/local/bin/dbpasswd 设置为 set-user-id “lincks”,以允许用户修改自己的密码,即使文件由 “lincks” 拥有。
最后,以用户 “lincks” 身份运行,通过键入 lincks -s /usr/local/lincks/DB 启动数据库服务器。
下一步是继续阅读本文或运行交互式教程。要启动在线教程,您可以使用 xlincks/usr/local/lincks/DB 调用 xlincks。系统将提示您输入 LINCKS 登录名和密码;输入用户名 “demo” 和密码 “demo”。
以下是 LINCKS 目录层次结构
usr/local/man/{manl,catl} 用于格式化和预格式化手册页
usr/local/bin/ 用于 LINCKS 程序
usr/local/lincks/ 是主 LINCKS 目录,其中 DB 子目录中包含 “即用型” 数据库、postscript 文档、FAQ、README 等。bitmaps 子目录包含 X11 位图,这些位图可能在少数系统上丢失。
LINCKS 由十一个不同的程序组成,可以分为三个不同的类别:数据库服务器(monitor、netserv 和 dbs);通用实用程序(dbpasswd、dbdump、dbroot、t2lincks 和 cutoff,它们是普通客户端)和主应用程序(xlincks)。
应用程序和实用程序都将最后一个参数作为 LINCKS 数据库文件的目录路径。如果您只运行一个数据库服务器,或者如果您厌倦了键入数据库目录的路径,只需设置环境变量 LINCKSDBDIR 以指向此目录并省略路径。一个典型的数据库目录可能如下所示
-r--r--r-- 1 lincks iislab 33554 Aug 23 01:27 .fonttrans -rw-r--r-- 1 lincks iislab 18 Sep 18 19:30 .indexfile.lock -rw-r--r-- 1 lincks iislab 158 Aug 23 01:28 .lincksrc -rw-r--r-- 1 lincks iislab 592883 Aug 23 02:07 1.dat -rw-r--r-- 1 lincks iislab 82368 Aug 23 02:07 1.mol -rw-r--r-- 1 lincks iislab 6 Aug 23 01:56 data.names -rw------- 1 lincks iislab 494 Aug 23 01:27 groups -rw-r--r-- 1 lincks iislab 61944 Aug 23 02:07 index -rw-r--r-- 1 lincks iislab 6 Aug 23 01:56 molecule.names -rw-r--r-- 1 lincks iislab 305 Jun 28 17:08 passwd
.lincksrc 是配置文件,它告诉 LINCKS 软件在哪里找到数据库目录、日志文件目录、可执行文件、TCP/IP 端口等。passwd 文件包含每个用户的用户名、用户 ID 和加密密码。访问保护由 groups 文件和可选的 wrgroups 文件定义。dbs 进程在 1.dat 和 1.mol 文件中处理、存储和检索对象及其内容。monitor 进程使用 index 文件来存储每个对象的对象标识。*.names 文件包含保存实际数据的所有 *.dat 和 *.mol 文件的名称。
每当 LINCKS 程序访问 index 文件时,它都必须创建一个 .indexfile.lock 文件,其中包含程序名称、其进程 ID 和当前主机名。有关更多信息,请参阅 LINCKS 系统管理手册。
monitor 进程序列化对象创建、实施访问控制并提供并行编辑通知。monitor 允许您通过 group 文件和可选的 wrgroups 文件定义特定用户对哪些对象具有 读取 和 写入 访问权限。
netserv 进程处理来自所有客户端的连接。在根据 passwd 文件(使用 dbpasswd 更改)验证用户名和密码后,netserv 会派生并为每个连接的客户端创建 dbs 进程。
每个 dbs 进程都与一个客户端交互。它使用 monitor 在 *.dat 和 *.mol 文件中检索和存储对象,以确保唯一的对象标识符并同步对公共数据库文件的访问。当客户端进程关闭连接时,dbs 进程会死亡。
lincks 程序用于启动 LINCKS 数据库服务器。如果数据库服务器因系统崩溃而中断,则 .indexfile.lock 文件存在,但没有 LINCKS 软件正在运行。您将收到警告消息。只需删除锁定文件(请先检查是否有正在运行的进程!)并重新执行 lincks 命令。
dbstat 实用程序用于检查正在运行的数据库服务器(monitor 和 netserv)。dbstat 连接到 netserv 和 monitor 进程并返回一些状态信息,如图 1,dbstat 所示
您可以使用 dbpasswd 添加或更改用户的密码。它安装了 suid,以使每个用户都能够修改自己的密码,默认情况下密码是加密的。当您添加新用户时,您必须手动编辑 passwd、groups 以及(如果使用)wrgroups 文件。完成编辑后,重新启动数据库服务器,以使 monitor 能够重新读取保护文件。
要导出或转储 LINCKS 数据库,请使用 dbdump 程序,该程序以文本格式导出整个 LINCKS 数据库。如果您在数据库中存储了任何二进制对象(图像、声音、对象代码等),dbdump 将为每个二进制对象创建一个文件。您可以使用 t2lincks 导入导出的数据库。当然,t2lincks 也可用于将对象或任何信息导入数据库——例如,寄存器或文章——只要它采用正确的格式(请参阅 t2lincks 手册页)。
最后两个实用程序不常用——dbroot 创建一个完全空的数据库(如果数据库中已存在任何对象,它将销毁所有现有对象)。您仅在设置新数据库时运行 dbroot。要对 LINCKS 数据库进行垃圾回收,请运行 cutoff,它会删除所有未被任何其他对象引用的对象。
要编辑和浏览 LINCKS 数据库,您必须使用 X11 界面应用程序 xlincks。如果您使用的是小屏幕,您可能需要按照 LINCKS.FAQ 中的描述更改 .Xdefaults。此外,您还可以安装 lincks2x.ydb.tgz,其中包含使用较小字体的数据库。如果您从源代码发行版安装 LINCKS,请参阅脚本 DB/scalefonts。
启动后,xlincks 将创建一系列窗口。对于每个窗口,使用鼠标将其放置在您想要的位置,然后单击鼠标左键。(在这些说明中,如果未另行指定鼠标按钮,请使用鼠标左键。)其中一个窗口应该是 xlincks 命令菜单(参见图 2,“以 emptyuser4 身份登录”)。
数据库中的大部分信息都是分层组织的。当您启动 xlincks 时,您应该获得一个或多个窗口,这些窗口是您进入数据库的入口点。在图 2 中,我们以用户 emptyuser4 身份登录。要查看更多数据库内容,请“展开”(请参阅下面的“展开”)窗口中的某些项目,从而将其用作新窗口的根。
通常使用以下约定:<<xxx>> 通常表示 “xxx” 是占位符。占位符表示视图要求此位置包含 “xxx” 类型的内容。然后,编辑占位符将在数据库中创建 “xxx” 类型的内容。项目周围的框(框架)通常表示它是可以展开的内容。然而,这仅仅是某些视图使用的一种约定。
有两种类型的在线帮助:与命令菜单中特定按钮关联的帮助文本和在线文档。您可以通过使用鼠标右键单击您想了解更多信息的按钮来获得按钮帮助文本。
当您登录时,您应该会看到一个名为 “Help!” 的窗口。所有在线文档都组织在这个窗口下。您可以 “展开” 相应的项目以查看文档。教程帐户并非如此,但在命令菜单中有一个名为 “Help Window ...” 的按钮,如果您单击它,将弹出 “Help!” 窗口。
要展开某些内容,请在按住 “Control” 按钮的同时,用鼠标左键单击要展开的内容。这将打开一个新窗口。按键命令 meta-l meta-e 具有相同的效果。或者,您可以在按住 Control 按钮的同时,用鼠标中键单击要展开的内容;这将展开项目并重用窗口。按键命令 meta-l meta-E(注意大写 E)具有相同的效果。
上一段描述了如何使用默认视图或 LINCKS 术语中的 GPD(通用演示描述符)展开某些内容。要使用非默认视图展开某些内容,请单击 “Expand ...” 命令菜单按钮,这将弹出一个 GPD 菜单。接下来,单击您要展开的项目,然后单击(在菜单中)您要使用的 GPD。例如,如果您希望在 “node view”(整个数据库对象)中查看某些内容,请单击您要查看的项目,弹出菜单,然后单击菜单项 “node”。
使用 xlincks,使用用户名 emptyuser4 和密码 emptyuser4 登录。您应该会看到如图 2 所示的窗口。
首先,我们将在 “Empty User 4” 窗口中添加一个指向 “Help!” 窗口的链接
单击您希望链接到的项目(源),在本例中为 “Help!” 窗口中的 “Things You Can Do In xlincks in the ”Help!“ window” 行,然后
单击我们希望放置链接的项目之后(目标),即 “Empty User 4” 中的 <<item>>。
最后,单击命令菜单中的 “Add Link” 按钮。
现在,“Empty User 4” 窗口应如图 3 “添加链接后” 所示。为了好玩,尝试展开 “Simon Says”,看看您是否真的得到了 “Help!” 窗口。
现在我们将开始为 Linux Journal 撰写即将发表的关于 “Linux on the Road” 的文章。我们更喜欢将文章存储在我们的主目录(“Empty User 4” 窗口)中。首先,将光标移动到 “Empty User 4” 窗口中的 “Simon Says.” 行。然后,通过给出命令 meta-l meta-i (insert closest plural) 在文件夹视图中插入一个新项目,这将创建当前项目的同级项目。(有关更多信息,请参阅 “The xlincks User” 手册或本系列的下一部分。)
现在,将图 4 “插入复数项目后” 中显示的 “item” 替换为 “Linux on the Road”。
然后,移动到 “Linux on the Road” 并使用 meta-l meta-e(或者如果您喜欢,可以使用 control-left-button)展开它,从而产生图 5 中的结果。
现在,将 “empty: GPD name” 替换为 “full document”,这是我们将使用的视图 (GPD) 的名称。展开 “full document” 行,这将为我们提供如图 6 所示的文档完整视图。(您可能需要移出该行才能使更改生效,然后再展开它。)
现在我们可以开始使用常规的类似 Emacs 的命令进行编辑,并使用 meta-l 前缀命令插入和删除结构项目。
当文档变得很长时,我们往往会失去对不同部分的概览——我们不再能够见树不见林。要获得我们的文档 “Linux on the Road” 的顶级目录,只需
选择 “Linux on the Road” 文档的标题。
按下命令菜单上的 “Expand ...” 按钮。
在展开菜单中选择/按下 “document contents”。
我们应该得到如图 7 所示的内容。
现在,在一个窗口中更改标题或作者字段。然后移出该字段并观察会发生什么。更改会传播到从同一内容对象构建的所有其他视图。
最后,我们从主目录中删除 “Help!” 项目。移动到 “Empty User 4” 中的 “Help!” 项目,键入 meta-l meta-r(用于删除最接近的复数)以删除它。
我们必须保存到数据库服务器以使我们的更改永久生效,因为到目前为止,我们所有的编辑都是在客户端完成的。要保存窗口的内容,我们只需按下 “Store” 按钮或键入 control-x、control-s。
在下一篇文章中,我们将更详细地介绍如何通过构建一个非常小的应用程序来定义您自己的视图 (GPD) 及其不同的部分(结构、访问、展开、格式和自动链接)。
有关更多信息,请发送电子邮件至 lincks@ida.liu.se 或作者。欢迎将错误报告发送至 lincks-bugs@ida.liu.se。要订阅 LINCKS 用户邮件列表 lincks-users@ida.liu.se,请发送电子邮件至 lincks-users-request@ida.liu.se,该邮件列表由人工处理。
Martin Sjolin 目前在瑞典林雪平大学计算机与信息科学系攻读人工智能领域的博士学位。当他不浏览网络时,他负责 LINCKS 的支持和开发。每当他不破解 LINCKS 或 Linux/Mac 时,他都喜欢烹饪、背包旅行、滑雪、帆板运动、划独木舟和阅读!