宝哥软件园

你听说过基于JavaScript的操作系统吗?

编辑:宝哥软件园 来源:互联网 时间:2021-09-17

我想大多数人都听说过Node.js,但是你听说过NodeOS吗?是的,NodeOS,用Node.js编写的操作系统.好吧,说实话,NodeOS是用Linux内核来处理各种底层任务的,比如硬件通信,但除此之外,它用的是Node.js,NodeOS的开发从两年前就开始了,创建者的目的很简单。他只是好奇,“有没有可能只用Node.js创建一个操作系统?”

有没有可能只用Node.js创建一个操作系统?

这个想法怎么样?

我们看到了Node.js这几年的快速发展,为什么不把它做得更酷一些呢?比如用它做操作系统。

用户拥有的独立文件系统。

NodeOS引入了一个有趣的特性:所有用户都有一个独立的文件系统,他们可以在一个简单的文件系统中做各种工作。因为他们的“主目录”实际上是自己文件系统的根目录,所以他们可以在没有任何超级权限的情况下将软件包安装到系统中,并且不需要配置任何东西,因为软件包默认安装在自己的主目录中。此外,这也提供了良好的安全性。如果黑客闯入一个账户,他只能访问用户所在的部分,最终的结果是黑客无法影响整个系统。

Node.js和NPM。

你可以想想,如果一个操作系统使用Node.js,那就意味着NPM所有可用的包也是NodeOS的软件包。在写这篇文章的时候,已经有超过21万个软件包,而且每分钟都在增加。如果几年后,NodeOS有一百万个应用,也就不足为奇了。

基于Linux内核。

好像不多。Linux是大多数服务器使用的操作系统。因为NodeOS是基于Linux内核的,所以您可以使用为其他Linux发行版开发的应用程序,只需很少的修改。

讨厌鬼;坏消息

我非常希望NodeOS是一个完成的作品,但是现在还没有。它仍然缺少服务器操作系统所必需的一些关键功能。例如,缺少完整的BASH工具集,包括ps、tail、nano和grep。更糟糕的是,您不能将其用作桌面操作系统,因为它没有GUI。当然,您可以实现一些缺失的函数,只需使用一点JavaScript,但默认情况下,这些函数还不可用,这太糟糕了。

好的,我可以试试NodeOS吗?

使用Docker体验节点操作系统最简单快捷的方法如下:

1.一台运行Mac OSX或Linux电脑,也许Windows可以做到,但我还没试过。2、码头工人.安装Docker后,运行NodeOS实例就很容易了。你只需要执行下面的命令,Docker就会为你做这个神奇的事情:

9501.163.com

体验NodeOS最简单快捷的方法就是通过Docker。

当您运行上述命令时,Docker将自动从仓库下载NodeOS的映像,并将其安装在虚拟环境中。安装后,将打开一个SSH会话来连接到节点操作系统。

不,码头工人在哪?在某些情况下,您可能无法使用Docker来体验它,或者您可能希望体验NodeOS的最新版本。在写这篇文章的时候,NodeOS的映像是两个月前生成的,而开发版本是六天前更新的。所以,如果你想使用最新的版本,你应该从源代码开始。这不太难,但需要一些时间。你需要:

1.运行Linux的计算机。您可以在OS X上编译它,但是跨平台编译需要很多时间,即使是Windows也是如此。2.Linux编译和构建相关工具(make、g、gcc、autoconf)。3、Qemu .4.时间真的需要很多。如果一切就绪,您可以从源代码开始编译:

1.使用以下命令编译:cd NodeOS和npm install。2.我逐字引用了官方文件:“拿着爆米花去看电影,不开玩笑,真的。”是的,这需要很多时间。做点有趣的事。执行bash npm开始在Qemu中运行NodeOS。你准备好工作了吗?安装完成后,我们可以通过在NodeOS的shell中执行ls命令来查看它是否工作。输出如下所示:

['etc ',' lib ',' lib64 ',' root ',' bin ',' sys ',' usr ',' share ',' proc']如果显示如上,则表示一些基本命令可以工作。但是如果我们想知道网卡地址呢?在Linux下,这个命令是ifconfig,让我们试试:

命令发现: ifconfig似乎没有ifconfig命令。这是因为默认情况下,NodeOS没有ifconfig命令。现在怎么办?很简单,NodeOS有一个名为npkg的集成包管理器(类似于apt或yum),它基于Node的NPM,易于使用。您可以使用以下命令轻松安装ifconfig:

Npkg安装bin-ifconfig如果一切正常,现在可以在shell中使用ifconfig命令。让我们再次尝试执行它,输出如下所示:(我在其中替换了MAC地址):

eth 0: flags=8863 MTU 1500 ether 01:233:45:67336089: ab inet 6 f0d 33603360 ef 0133600203:0405:181% en1 prefix len 64 scope Eid 0 X5 inet 192 . 168 . 21 neth 0333: flags=88863 MTU 1500 ether 03333:404053360181您已经成功安装了第一个NodeOS应用程序:ifconfig。

它可以工作,但是我们能用这个操作系统做什么呢?

如果我们只能使用这个用Node.js编写的操作系统来做和你在Ubuntu或者其他Linux发行版中做的一样(或者更少)的事情,它的价值是什么?其实整件事最有意思的是,所有的东西都是Node.js开发的,这意味着我们只能用Node.js来开发我们的应用。比如NodeOS中没有默认实现的man命令,用来显示其他命令的帮助信息。别担心,很容易实现。

使用Node.js构建一个NodeOS应用程序。

首先,让我们安装一个名为Hipster的文本编辑器,这样我们就可以创建和编辑文件。执行以下命令:npm install -g [emailprotected]。这个文本编辑器非常简单。它除了编辑文本什么也做不了,但对我们来说已经足够了。

用Hipster创建一个文件非常简单,只需运行hip filename,比如hippackage.json .要保存文件,按Ctrl s退出,按Ctrl q.

在这里,我们使用了由NodeOS的主要开发人员开发的代码,但是我自己并没有真正开发这个应用程序。我们示例中的原始代码可以在node-bin-man Git存储库中找到。

让我们返回来创建我们的第一个NodeOS应用程序。像每个Node.js应用程序(或NPM包)一样,我们从创建一个package.json文件开始,如下所示:

{ 'name': 'bin-man ',' version': '0.0.1 ',' description ' : ' Format and display manual pages ',' bin': { 'man': 'man.js' },' repository ' : ' https://github.com/地下水/node-bin-man ',' author ' : '地下水',' license': 'MIT ',' Dependencies ' 3: { ' blended ' blended '这个bin集合是一个JSON键值对对象,它包含命令名及其相关的JavaScript文件。在我们的例子中,man命令与man.js文件相关联。依赖项集包含该应用程序所需的NPM包列表。在我们的例子中,代码的作者包括了有福包,这是一个类似于诅咒的库,使Node.js能够支持高级终端接口的API。

现在我们已经进入了主要部分,实际代码。

#!/usr/bin/env节点称为shebang。NodeOS并不是真的需要它,而是用来告诉操作系统如何执行下面的代码。这里的意思是,它告诉系统下面的每一行代码都需要通过/usr/bin/env node命令来解释和执行。

var fs=require(' fs ');var有福=require('有福');与Node.js中一样,require()函数将选定的包加载到内存中,并将其保存为特定的变量。

var arg=process . argv[2]| | ' bin-man ';man命令的标准行为是,如果没有指定要查看的命令,则显示自己的帮助信息。在我们的代码示例中也是如此:如果没有给出第二个参数(第一个参数是man本身),那么这个参数的默认值就是bin-man。

var path=process . env . home '/lib/node _ modules/' arg '/readme . MD ';请尝试{ var readme=fs.readFileSync(路径,‘utf-8’);} catch(e){ console . log(' Package '无README.md,arg);process . exit(-1);}在这里,程序检查给定的应用程序是否有自述文件。在NodeOS中,每个应用程序的安装路径是其主目录(/)下的lib/node_modules。如果README.md文件存在,将其内容保存到README变量中。否则,将显示一条错误消息并退出。

//创建屏幕对象. var screen=有福. screen();var box=有福. box({ content: readme,alwaysScroll:true,scrollable: true,});//将我们的框附加到屏幕上。有福有一个非常简单的API。显示文件的内容很容易,只需创建一个框,然后加载内容。

screen.key(['escape ',' q ',' C-c'],function(ch,key){ return process . exit(0);});现在,让我们想办法退出man应用程序。我们结合了转义、Q或emacs风格的C-c来退出应用程序。

screen.key(['space ',' f ',' j ',' n'],function(ch,key){ box . scroll(box . height);screen . render();});screen.key(['down'],function(ch,key){ box . scroll(1);screen . render();});screen.key(['up'],function(ch,key){ box . scroll(-1);screen . render();});screen.key(['b ',' k ',' p'],function(ch,key){ box . scroll(-box . height);screen . render();});我们用箭头键上下滚动,用空格、f、j或n翻页,用b、k或p翻页。

box . focus();screen . render();最后,我们让应用程序将输入焦点放在框上,在这里我们创建并呈现所有内容。

将上面编辑的文件保存在目录/lib/node_modules/bin-man(名称为man.js)中,并添加一个简单的README.md,如下所示:

# man author: @地下水# # installnpkg install bin-man # #用法` ` usage 3360 man pkgname display a packages readme . mdfile ` `我们已经基本完成了我们的第一个NodeOS定制应用。只剩下一个小步骤,我们需要为NodeOS应用程序创建一个配置文件。很简单,创建到/etc/bin-man/config.json,内容只是一个空的json对象:{}。

现在我们可以尝试我们的新应用程序。NodeOS中的Run man,它将显示我们之前创建的自述文件。

摘要

如您所见,在NodeOS中实现任何东西都很容易,您只需要知道Node.js.

NodeOS的潜力很大,我认为当更多的功能实现后,它会成为一个很棒的操作系统。目前还有很多工作要做,但在整个Node.js生态系统蓬勃发展的情况下,很快就会成为流行的操作系统也就不足为奇了。

更多资讯
游戏推荐
更多+