찾다
웹 프론트엔드JS 튜토리얼JavaScript 기반 운영 체제에 대한 자세한 설명을 안내합니다.

JavaScript 기반 운영체제에 대한 자세한 설명을 이해하세요:

대부분의 사람들이 Node.js에 대해 들어본 적이 있을 것 같지만, NodeOS를 들어보셨나요? 맞습니다. Node.js로 작성된 운영체제인 NodeOS입니다. 글쎄요, 솔직히 말해서 NodeOS는 하드웨어 통신 등 다양한 하위 수준 작업을 처리하기 위해 Linux 커널을 사용하지만 그 외에는 Node.js를 사용합니다. NodeOS 개발은 2년 전부터 시작됐다. 단지 'Node.js만으로 운영체제를 만드는 게 가능할까?'라는 호기심이 생겼을 뿐이었다. >

Node.js만으로 운영체제를 만드는 것이 가능한가요?

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

이 아이디어는 어떻습니까?

지난 몇 년 동안 Node.js가 엄청나게 발전하는 것을 보아왔는데, Node.js를 더욱 멋지게 만들어 보는 것은 어떨까요? 예를 들어, 이를 사용하여 운영 체제를 만듭니다.

사용자 자율적인 독립 파일 시스템

NodeOS에는 흥미로운 기능이 도입되었습니다. 모든 사용자는 독립적인 파일 시스템을 가지며 간단한 파일 시스템에서 다양한 작업을 완료합니다. "홈 디렉터리"는 실제로 자체 파일 시스템의 루트이기 때문에 슈퍼 권한 없이 시스템에 소프트웨어 패키지를 설치할 수 있으며 소프트웨어 패키지가 기본적으로 설치되므로 아무것도 구성할 필요가 없습니다. 자신의 홈 디렉토리. 또한, 이는 해커가 계정에 침입하면 사용자가 있는 부분에만 접근할 수 있어 전체 시스템에 영향을 미칠 수 없습니다.

Node.js와 NPM

생각해 볼 수 있는 운영 체제가 Node.js를 사용한다면 NPM에서 사용 가능한 모든 패키지도 NodeOS 패키지라는 의미입니다. 이 글을 쓰는 시점에는 210,000개 이상의 패키지가 있으며 매초마다 증가하고 있습니다. NodeOS가 몇 년 안에 백만 개의 애플리케이션을 갖게 된다면 놀라운 일이 아닐 것입니다.

리눅스 커널을 기반으로

별거 아닌 것 같지만 대부분의 서버에서 사용하는 운영체제는 리눅스이다. NodeOS는 Linux 커널을 기반으로 하기 때문에 최소한의 수정만으로 다른 Linux 배포판용으로 개발된 애플리케이션을 사용할 수 있습니다.

나쁜 소식

NodeOS가 완제품이 되었으면 좋겠지만 아직은 아닙니다. 여전히 서버 운영 체제에 필요한 일부 주요 기능이 부족합니다. 예를 들어 ps, tail, nano, grep 등을 포함한 전체 BASH 도구 세트가 누락되었습니다. 설상가상으로 GUI가 없기 때문에 데스크톱 운영 체제로 사용할 수 없습니다. 물론 약간의 JavaScript만으로 누락된 기능 중 일부를 구현할 수 있지만 현재로서는 그 기능 중 어느 것도 기본적으로 제공되지 않는다는 점은 아쉽습니다.

그럼 NodeOS를 사용해봐도 될까요?

Docker를 사용하여 경험

NodeOS를 경험하는 가장 쉽고 빠른 방법은 다음과 같습니다.

Mac OSX 또는 Linux, 아마도 Windows를 실행하는 컴퓨터 그것도 작동하지만 시도하지 않았습니다.

  1. 도커.

  2. Docker를 설치하고 나면 NodeOS 인스턴스를 실행하는 것은 쉽습니다. 다음 명령만 실행하면 Docker가 이 모든 마법을 완료합니다.

    sudo docker run -t -i nodeos/nodeos

NodeOS를 경험하는 가장 쉽고 빠른 방법은 Docker를 통해서입니다.

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

위 명령을 실행하면 Docker는 자동으로 웨어하우스에서 NodeOS 이미지를 다운로드하여 가상 환경에 설치합니다. 설치되면 SSH 세션이 NodeOS에 열립니다.

도커가 필요하지 않다면 어떻게 하나요?

어떤 경우에는 Docker를 사용하여 체험할 수 없거나 최신 버전의 NodeOS를 체험하고 싶을 수도 있습니다. 이 글을 작성하는 시점에서는 NodeOS 이미지가 2개월 전에 생성되었고, 개발 버전은 6일 전에 업데이트되었습니다. 따라서 최신 버전을 사용하려면 소스코드부터 시작해야 합니다. 이것은 그리 어렵지는 않지만 시간이 좀 걸립니다. 필요한 것:

Linux를 실행하는 컴퓨터. OS X에서 컴파일할 수 있지만 크로스 플랫폼 컴파일에는 시간이 많이 걸리고 Windows에서도 마찬가지입니다.

  1. Linux 컴파일 및 빌드 관련 도구(make, g++, gcc, autoconf).

  2. 큐무.

  3. 정말 시간이 많이 걸립니다.

  4. 모든 것이 준비되면 소스 코드에서 컴파일을 시작할 수 있습니다.

프로젝트 소스 코드 다운로드: bash git clone git@github .com:NodeOS/NodeOS.git.

  1. cd NodeOS 및 npm install 명령을 사용하여 컴파일합니다.

  2. 我逐字引用了其官方文档的话:“拿上爆米花去看场电影吧,不开玩笑,真的。”,是的,它需要很多时间,做些有意思的事情去吧。

  3. 执行 bash npm start 来在 Qemu 中运行 NodeOS。

可以工作了吗?

当安装完成后,我们可以通过在 NodeOS 的 shell 中执行  ls命令来看看它是否工作了。输出类似如下:

[ 'etc', 'lib', 'lib64', 'root', 'bin', 'sys', 'usr', 'share', 'proc' ]

如果显示如上,说明一些基本的命令可以工作了。但是如果我们想要知道网卡地址呢?在 Linux 下,这个命令是  ifconfig ,让我们试试:

command not found: ifconfig

看起来没有 ifconfig 命令。这是因为 NodeOS 默认没有  ifconfig命令。现在怎么办?很简单,NodeOS 有一个集成的包管理器(类似 apt 或 yum) ,叫做 npkg,它是基于 Node 的 NPM 的,很容易使用。可以通过如下命令很方便的安装 ifconfig :

npkg install bin-ifconfig

如果一切正常, ifconfig 命令现在就可以在 shell 中使用了。我们再次试着执行一下,输出类似如下:(我替换了其中的 MAC 地址):

eth0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
  ether 01:23:45:67:89:ab 
  inet6 f0cd::ef01:0203:0405:181%en1 prefixlen 64 scopeid 0x5 
  inet 192.168.0.21 netmask 0xffffff00 broadcast 192.168.0.21
  nd6 options=1<PERFORMNUD>
  media: autoselect
  status: active

如果你的输出也类似如上,那说明它可以工作了。你已经成功地安装了你的第一个 NodeOS 应用: ifconfig。

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

如果我们只能拿这个用 Node.js 写的操作系统做到你在 Ubuntu 或其它 Linux 发行版上一样的(或更少的)事情,那它有什么价值?其实,整个事情中最有趣的地方是所有的东西都是 Node.js 开发的。这意味着我们可以只需要使用 Node.js 就可以开发我们的应用了。比如,NodeOS 里没有默认实现的 man 命令,它用于显示其它命令的帮助信息。不用担心,实现它很简单。

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

使用 Node.js 构建一个 NodeOS 应用

首先让我们来安装一个叫做 Hipster 的文本编辑器,以便我们可以创建和编辑文件。执行如下命令: npm install -g hipster@0.15.0。这个文本编辑器很简单,除了用作文本编辑之外啥也干不了,不过对于我们来说足够了。

用 Hipster 创建文件很简单,运行 hip filename即可,如: hip package.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/groundwater/node-bin-man",
  "author": "groundwater",
  "license": "MIT",
  "dependencies": {
    "blessed": "~0.0.22"
  }
}

这些参数 name、version、 author、 repository、 license和 description 是其意自明的。这个 bin 集合是一个 JSON 的键值对对象,包含了命令名及其关联的 JavaScript 文件。在我们的例子中, man 命令关联到  man.js文件。而  dependencies集合包含了这个应用所需要的 NPM 包的列表。在我们的例子中,代码的作者包含了 Blessed 包,这是一个类 curses 的库,可以让 Node.js 支持高级终端界面的 API。

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

#!/usr/bin/env node

这个部分叫做释伴(shebang)。NodeOS 实际上并不需要它,但是它用于告诉操作系统如何执行下面的代码。在这里的意思是,它告诉系统下面的每行代码都需要通过  /usr/bin/env node命令来解释执行。

var fs = require(&#39;fs&#39;);
var blessed = require(&#39;blessed&#39;);

像在 Node.js 中一样, require() 函数加载选定的包到内存中,并将其保存为特定的变量。

var arg = process.argv[2] || &#39;bin-man&#39;;

man 命令的标准行为是如果没有指定要查看的命令时,就显示它自己的帮助信息。在我们的代码示例中也一样:如果没有给出第二个参数(第一个参数是 man 本身),那么该参数的默认值是 bin-man。

var path = process.env.HOME + "/lib/node_modules/" + arg + "/README.md";

try{
  var readme = fs.readFileSync(path, &#39;utf-8&#39;);
}catch(e){
  console.log(&#39;No README.md for Package &#39;,arg);
  process.exit(-1);
}

在这里,程序检查给定的应用是否有一个 readme 文件。在 NodeOS 中,每个应用的安装路径是其主目录(/)下的 lib/node_modules。如果 README.md 文件存在,就将其内容保存到 readme变量中。否则,显示一个错误信息并退出。

// Create a screen object.
var screen = blessed.screen();

var box = blessed.box({
  content: readme,
  alwaysScroll:true,
  scrollable: true,
});

// Append our box to the screen.
screen.append(box);

Blessed 有一个非常简单的 API,要显示一个文件的内容很容易,只需要创建一个  box ,然后载入内容即可。

screen.key([&#39;escape&#39;, &#39;q&#39;, &#39;C-c&#39;], function(ch, key) {
  return process.exit(0);
});

现在,让我们找个退出  man 应用的方法。我们组合了  escape、 q 或 emacs 风格的 C-c 来退出应用。

screen.key([&#39;space&#39;,&#39;f&#39;,&#39;j&#39;,&#39;n&#39;], function(ch, key) {
  box.scroll(box.height);
  screen.render();
});

screen.key([&#39;down&#39;], function(ch, key) {
  box.scroll(1);
  screen.render();
});

screen.key([&#39;up&#39;], function(ch, key) {
  box.scroll(-1);
  screen.render();
});

screen.key([&#39;b&#39;,&#39;k&#39;,&#39;p&#39;], function(ch, key) {
  box.scroll(-box.height);
  screen.render();
});

我们使用方向键来上滚和下滚,用 space、 f、 j 或 n 向下翻页,b、 k 或 p 向上翻页。

box.focus();
screen.render();

最后,我们让应用将输入焦点放到  box ,我们在这里创建和渲染所有内容。

把上面编辑的这个文件存放到  /lib/node_modules/bin-man 目录下(名字是 man.js),并加一个简单的  README.md ,类似如下:

# Man

Author: @groundwater

## Install

npkg install bin-man

## Usage

"
Usage: man PKGNAME

Display a packages README.md file
"

我们已经基本完成了我们的第一个 NodeOS 定制应用。最后剩下一小步了,我们需要创建一个 NodeOS 应用需要的配置文件。很简单,把它创建到 /etc/bin-man/config.json ,内容只是一个空的 JSON 对象: {}。

现在我们可以试试我们的新应用了。在 NodeOS 中运行 man ,它将展示我们之前创建的 readme 文件。

总结

如你所见,在 NodeOS 中实现任何东西都很简单,你只需要懂得 Node.js 即可。

NodeOS 很有潜力,我认为当实现了更多的功能之后它会成为一个伟大的操作系统。目前仍然需要很多工作,但是在整个Node.js 生态系统兴盛发展的形势下,万一哪天它很快地成为一个流行的操作系统也没什么好惊奇的。

你怎么看?发表你的评论让我们知道。

위 내용은 JavaScript 기반 운영 체제에 대한 자세한 설명을 안내합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
JavaScript의 진화 : 현재 동향과 미래 전망JavaScript의 진화 : 현재 동향과 미래 전망Apr 10, 2025 am 09:33 AM

JavaScript의 최신 트렌드에는 Typescript의 Rise, 현대 프레임 워크 및 라이브러리의 인기 및 WebAssembly의 적용이 포함됩니다. 향후 전망은보다 강력한 유형 시스템, 서버 측 JavaScript 개발, 인공 지능 및 기계 학습의 확장, IoT 및 Edge 컴퓨팅의 잠재력을 포함합니다.

Demystifying JavaScript : 그것이하는 일과 중요한 이유Demystifying JavaScript : 그것이하는 일과 중요한 이유Apr 09, 2025 am 12:07 AM

JavaScript는 현대 웹 개발의 초석이며 주요 기능에는 이벤트 중심 프로그래밍, 동적 컨텐츠 생성 및 비동기 프로그래밍이 포함됩니다. 1) 이벤트 중심 프로그래밍을 사용하면 사용자 작업에 따라 웹 페이지가 동적으로 변경 될 수 있습니다. 2) 동적 컨텐츠 생성을 사용하면 조건에 따라 페이지 컨텐츠를 조정할 수 있습니다. 3) 비동기 프로그래밍은 사용자 인터페이스가 차단되지 않도록합니다. JavaScript는 웹 상호 작용, 단일 페이지 응용 프로그램 및 서버 측 개발에 널리 사용되며 사용자 경험 및 크로스 플랫폼 개발의 유연성을 크게 향상시킵니다.

Python 또는 JavaScript가 더 좋습니까?Python 또는 JavaScript가 더 좋습니까?Apr 06, 2025 am 12:14 AM

Python은 데이터 과학 및 기계 학습에 더 적합한 반면 JavaScript는 프론트 엔드 및 풀 스택 개발에 더 적합합니다. 1. Python은 간결한 구문 및 풍부한 라이브러리 생태계로 유명하며 데이터 분석 및 웹 개발에 적합합니다. 2. JavaScript는 프론트 엔드 개발의 핵심입니다. Node.js는 서버 측 프로그래밍을 지원하며 풀 스택 개발에 적합합니다.

JavaScript를 어떻게 설치합니까?JavaScript를 어떻게 설치합니까?Apr 05, 2025 am 12:16 AM

JavaScript는 이미 최신 브라우저에 내장되어 있기 때문에 설치가 필요하지 않습니다. 시작하려면 텍스트 편집기와 브라우저 만 있으면됩니다. 1) 브라우저 환경에서 태그를 통해 HTML 파일을 포함하여 실행하십시오. 2) Node.js 환경에서 Node.js를 다운로드하고 설치 한 후 명령 줄을 통해 JavaScript 파일을 실행하십시오.

Quartz에서 작업이 시작되기 전에 알림을 보내는 방법은 무엇입니까?Quartz에서 작업이 시작되기 전에 알림을 보내는 방법은 무엇입니까?Apr 04, 2025 pm 09:24 PM

쿼츠 타이머를 사용하여 작업을 예약 할 때 미리 쿼츠에서 작업 알림을 보내는 방법 작업의 실행 시간은 CRON 표현식에 의해 설정됩니다. 지금...

JavaScript에서 생성자의 프로토 타입 체인에서 함수의 매개 변수를 얻는 방법은 무엇입니까?JavaScript에서 생성자의 프로토 타입 체인에서 함수의 매개 변수를 얻는 방법은 무엇입니까?Apr 04, 2025 pm 09:21 PM

JavaScript 프로그래밍에서 JavaScript의 프로토 타입 체인에서 함수 매개 변수를 얻는 방법 프로토 타입 체인의 기능 매개 변수를 이해하고 조작하는 방법은 일반적이고 중요한 작업입니다 ...

Wechat Mini 프로그램 웹 뷰에서 Vue.js 동적 스타일 변위가 실패한 이유는 무엇입니까?Wechat Mini 프로그램 웹 뷰에서 Vue.js 동적 스타일 변위가 실패한 이유는 무엇입니까?Apr 04, 2025 pm 09:18 PM

WeChat 애플릿 웹 뷰에서 vue.js를 사용하는 동적 스타일 변위 실패가 vue.js를 사용하는 이유를 분석합니다.

TamperMonkey에서 여러 링크에 대한 동시 GET 요청을 구현하고 순서대로 반환 결과를 결정하는 방법은 무엇입니까?TamperMonkey에서 여러 링크에 대한 동시 GET 요청을 구현하고 순서대로 반환 결과를 결정하는 방법은 무엇입니까?Apr 04, 2025 pm 09:15 PM

동시 링크에 대한 요청을 여러 링크와 순서대로 판단하여 결과를 반환하는 방법은 무엇입니까? 탬퍼 몬키 스크립트에서는 종종 여러 체인을 사용해야합니다 ...

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.