欢迎光临
我们一直在努力

Linux技巧

适合新手了解的GNU/Linux起源

阅读(315)评论(0)

新手入门Linux总是对Linux的起源似懂非懂,大部分网上现有的资料都比较片面的,本文很综合的讲述了从计算机的起源到Linux的发展,适合新手再入门前对Linux文化有个较为全面的了解。
一、计算机的发明

世上本无路,走的人多了,就有了路。世上本无计算机,琢磨的人多了……没有计算机,一切无从谈起。

三个人对计算机的发明功不可没,居功至伟。阿兰·图灵(Alan Mathison Turing)、阿塔那索夫(John Vincent Atanasoff)、和冯·诺依曼(John von Neumann)。

图灵从理论上证明了计算机的可行性;阿塔那索夫实践了图灵的理论;冯·诺依曼奠定了现代计算机的体系结构。

图灵说这玩意儿应该可以做,已经被证明了;阿塔那索夫二话不说动手就做了一个;冯·诺依曼说应该这么做才更好。

适合新手了解的GNU/Linux起源

艾伦·麦席森·图灵

图灵功劳很大,死得很惨,只因他是同性恋。他的最后时刻是吃了一个沾有氰化钾的苹果。有人说苹果公司的Logo是为了纪念图灵,不实。确定纪念图灵的是“图灵奖”,计算机研究领域的最高奖项,由美国计算机协会于1966年设立。

阿塔那索夫名气不大,享年较长。世界上第一台计算机是阿塔那索夫领导发明的ABC计算机,并非我们很多书上说的ENIAC。

冯·诺依曼长得帅,聪明,研究领域广,故事很多。今天我们使用的计算机都被打上了一个的深深的烙印,这个烙印就叫冯·诺依曼体系结构。

关于计算机之父有很多说法,版本不一,这三个人都可以称为计算机之父。曾有人奉冯·诺依曼为计算机之父,冯·诺依曼说不敢当,殊荣当归图灵。

早年全世界的计算机中心在美国普林斯顿大学,群星闪耀,璀璨夺目。冯·诺依曼曾在此工作,图灵曾在此学习,他俩在普林斯顿的花园里聊过天。冯·诺依曼想让图灵给他当助手,被拒绝了。

适合新手了解的GNU/Linux起源

冯·诺依曼

二、最初的Unix和C语言

早期计算机个头大,电子元器件多,开动一次电费都不少,使用起来也很不方便。别的不说,一次只能干一件事就让人受不了。先煮粥,半小时之后粥煮好了再炒菜。花老多钱雇的厨师,明明煮粥的时候可以炒菜好不好?一次做一件事,就叫单任务,比较笨。

受不了就要想办法,就有人提出了操作系统的想法。操作系统就是想让计算机用起来更方便,能发挥更大的作用。

1965年,MIT、贝尔实验室和美国通用电气公司合作准备搞个超级操作系统,取了个霸气的名字:Multics (Multiplexed Information and Computing System),多路复用信息和计算机系统。能让多个人可以同时干很多事,也叫多用户多任务操作系统。

Multics名字挺好,事没干成,目标过于庞大,结果壮志未酬。

1969年,Multics项目进展缓慢,被迫停止,参与项目的两个人Ken Thompson和Dennis Ritchie也闲了下来。他们都是贝尔实验室的人。没活干了,就打游戏。他们俩找了一台破电脑准备玩以前开发的一个游戏。

把游戏移植到一台闲置机器(PDP-7)的过程中,实现了一个简单的操作系统。到了 1970年,这个简单的系统已经可以使用,但只能同时两个人使用。有人调侃他们,说你们这个破玩意离Multics差远了,就叫Unics(UNiplexed Information and Computing Service)吧。Unics是Multics的反义,与其说调侃他俩,不如说在调侃Multics。Ken Thompson稍微把名字修改了一下,叫Unix。

自此,Unix纪元开始。1970年是为Unix元年,今年已经是Unix46年。Unix时间戳从1970年1月1日开始计算和Unix诞生的时间有莫大关系。

早年的操作系统最早是用汇编语言写的,汇编语言低级落后,写起来很痛苦。开发Unix过程中,Thompson发明了B语言,Ritchie在B语言基础做了改进,称之为C语言。

C语言发明后,Ritchie和贝尔实验室的同事Brian W. Kernighan合著一本C语言的书,后来被称为K&R。Kernighan名气没Ritchie大,但并非凡人,Unix命令Awk中的K就是Kernighan。

接下来Thompson和Ritchie用C语言重新编写了Unix系统。结果相当满意,Unix可以见人了。1974年,Dennis M. Ritchie和Ken Thompson发表了第一篇关于UNIX的论文《The UNIX Time Sharing System》,从此Unix广为人知。

这几年世界计算机的中心到了贝尔实验室,Thompson、Ritchie、Kernighan还有好多。Thompson和Ritchie后来都获得了图灵奖。

有心栽花花不活,无心插柳柳成荫。Multics目标宏伟,没干成,Unix和C语言刚开始并没想那么多,而且还是业余时间的作品,终成伟业!

Unix和C语言是计算机领域的常青树,历久弥新。从发明至今一直保持着旺盛的生命力,从发明至今都基本保持原貌,足见伟大!

适合新手了解的GNU/Linux起源

Unix

适合新手了解的GNU/Linux起源C语言

三、混乱的Unix发展过程

Unix一经出现,引起了众人的关注,很多人找Thompson和Ritchie要Unix的源代码。那是个开放的时代,那是个相互学习研究的时代,把程序的源码分享给别人是很平常的事。一份份的Unix源码被流传到各个实验室、学校、公司。

加州大学伯克利分校有一帮热衷于Unix的人,他们拿到源码后不断研究,不断改进,大大推进了Unix的发展。

这个阶段Unix发展有两条主线,一条在贝尔实验室内部,另一条就在伯克利分校。伯克利分校的成果很辉煌,著名的TCP/IP协议在Unix上的实现就是他们搞出来的。后来把他们搞的这套Unix称为BSD(Berkeley Software Distribution)。

伯克利分校一时风光无两,最杰出的一位是Bill Joy。Bill Joy,Vi、Csh等等一系列软件的作者,Sun公司的创始人。没有Sun公司,就没有今天的Java语言。

Unix刚诞生的时候,贝尔实验室受反垄断法所限,不能从事计算机业务。其实也并没想到Unix发展势头如此之好。

等到1983年,贝尔实验室的母公司AT&T已经被强制拆分为几个小公司,不再受反垄断法的限制。这时,AT&T发布了Unix最新版System V,宣布从此Unix只能商业使用,不再开放源代码。AT&T想用Unix赚大钱。

BSD那边受到了很大影响,他们不想急着赚钱,他们想开放源码。没办法,伯克利分校决心把BSD当中受到影响的源码重新写过。从伯克利分校出来的几位同学成立了一家公司,专门开发BSD项目。直到有一天,他们宣布BSD当中再没有最初来自贝尔实验室的源码。AT&T不买账,告你,起诉,打官司。

这是一场漫长的官司,官司尚未打完,Unix版权就被倒卖了好几次。买版权的好几家公司继续和BSD打官司,几家公司相互也打官司。

等到硝烟散尽,BSD终究推出了完全属于自己的Unix,因为版权的问题,不能再叫Unix,只能叫类Unix系统。

BSD的类Unix系统是FreeBSD、MacOS的前身。今天使用的苹果电脑,iPhone手机上的操作系统都是从BSD这一支上发展而来。

漫长的官司耗尽了人们对BSD的热情,也让BSD错过了最好的发展机会。后来的FreeBSD、NetBSD、OpenBSD都是从BSD分化而来,免费,开源,优秀,但再没挽回曾经的荣光,因为已经有了Linux。

适合新手了解的GNU/Linux起源

Unix发展过程图
四、斯托曼博士的GNU计划

AT&T想靠Unix赚钱的时候,不止是AT&T,很多商业公司都希望通过软件赚钱。不再免费,不再开放源代码,不再相互通过源代码学习研究。

曾经是多么好的时代,怎么现在就变得只认钱了呢?这一切让一个人很不满意。他曾经看到一个系统有问题,想要一份源码拿来帮修改一下,别人冷笑以对。

世风日下,他要向这个令人沮丧的时代挑战,他要还一个开源、免费的系统与人世间。请记住这个人的名字,理查德·斯托曼(Richard Matthew Stallman)博士。

斯托曼是老牌黑客,Emacs的作者。Emacs和前面提到的Vi是计算机领域中两大强悍的编辑工具,Emacs和Vi哪个更强是最容易引起争议的话题之一。为了少吵架,千万别和宝马车主说奔驰好。

斯托曼博士长头发,大胡子,不修边幅,一直单身。他一心投入自由软件运动,他创建了自由软件基金会(FSF)。他雄心勃勃地提出了一项伟大的计划,GNU(GNU's not Unix)计划。Not Unix,不是Unix,是自由的、免费的、开源的、像Unix一样好用的系统。

适合新手了解的GNU/Linux起源

理查德·斯托曼博士

GNU起初进展很顺利,GLibc、GCC、GDB,这一系列的操作系统必备软件都有条不紊地在进展。所有的“G”来自Gnu的首字母。为什么叫“G”,斯托曼博士说当时他觉得好玩,而且他小时候听过一首歌,很喜欢,歌名是《The Gnu》。

完全搞个操作系统看来也并非易事,GNU完成了一大堆软件的时候才意识到遇到了大麻烦。GNU系统的内核项目Hurd迟迟不能令人满意。内核之于操作系统,就像发动机之于汽车,必不可缺。

五、Linux出世记

1991年,Linus Torvalds尚是芬兰赫尔辛基大学的一名学生,他在学校学操作系统的课程,他也想搞个操作系统玩玩。他当时已经在使用Gnu项目的Bash、GCC等软件。受GNU的影响,把他自己开发的一个简陋的操作系统内核放到了互联网上。

这个内核系统就是Linux,Linus's Unix,Linus的Unix。名字并非Linux所取,他一贯的风格是取个调侃的名字,但当时管理员说Linux挺好,名字就这么定了。

Linux放到网上后引起了很多人的兴趣,他们陆续通过互联网加入到Linux开发过程中。1993年,大约有100多名程序员参与了Linux内核代码。这时已经是互联网的时代,他们不用相识,不用谋面,通过网络讨论,通过网络协作,推进着Linux。

1994年3月,Linux1.0发布,Linux已经成为一个基本可用的内核。从此Linux就一直没有踩过刹车,一步步从幼苗长成参天大树。

Linus小时候被企鹅攻击过,他给Linux定Logo的时候选中了企鹅,真不知道这是什么逻辑。长得像企鹅的除了QQ,还有Linux。

Linux开创了一种前所未有的软件开发模式。多人协作,代码随时提交,有问题及时修改,所有参与人员并非精英,而是一群狂热的支持者。前前后后无数人参与了Linux项目的开发,组织不太严谨,有很多的争吵和讨论。Linus经常写代码,偶尔扮演仲裁的角色,而非传统意义上的领导。

后来开源运动的吹鼓手Eric Raymond写了一篇文章《大教堂与集市》来分析Linux的开发模式。大教堂要设计好图纸,动用优秀的工匠,有序的工程计划才能修筑,闹哄哄无序如菜市场的一拨人能不能修一座大教堂?答案是可以的,因为他们建成了。

Linus后来坦言,他开发Linux时不了解还有FreeBSD等项目,如果知道了可能他就不会动手写Linux了。那时各种BSD系统正在官司的阴影笼罩下,某种程度了也促进了Linux的发展。

他们一开始也没什么图纸,一边修建,一边请人参观,出了问题随时修复,有的地方干脆推倒重来。他们没有严密的组织,只有大体的分工。随时有人在使用教堂,给他们提出各种意见。他们建的教堂已经足够好,他们建的教堂一直没有竣工,会一直修建下去。

Eric Raymond这个人不得不提,早年和斯托曼博士一起共事,还帮斯托曼博士修改过Emacs的代码。他比写程序更擅长的是演讲和写文章。《大教堂与集市》是开源文化的扛鼎之作。斯托曼博士是开源运动的精神领袖,Raymond是开源运动的布道师和理论家。

适合新手了解的GNU/Linux起源

六、Linux各种发行版

一边GNU项目为内核苦苦挣扎,一边Linux内核项目横空出世,这不天作之合么?不错,手快的人来不及同情斯托曼博士的痛苦,把GNU一大堆项目和Linux攒在一起搞了个新系统,GNU/Linux。

好了,终于大家可以拿去用了,可以用一个完全免费、源码开放的系统了。

今天很多人把使用的系统叫Linux,很不公平,是对GNU工作的漠视。正确的叫法是GNU/Linux。

有了GNU/Linux还不是一切,只能是一个基础的操作系统,要想用得更好还缺很多软件。就像有了Windows系统,没有Word,没有Excel,没有浏览器,没有游戏,可干的事并不多。

所幸的是GNU/Linux诞生的年代,已经有了很多优秀的开源项目,他们和GNU无关,有的是个人开发,有的是组织开发,都遵循免费开源的理念。这些开源项目有Apache、Perl、Python、Vim、TeX等等。

攒系统的人干脆一股脑攒了起来,就是所谓的GNU/Linux的发行版。最早攒GNU/Linux系统的公司是Redhat,后来陆续一大堆GNU/Linux的发行版,Slackware、Mandrake、Gentoo、Debian、Ubuntu等等。有的已经死了,有的还活得挺好。

所谓GNU/Linux发行版,就是攒好的一套GNU/Linux。选用GNU项目中的基础软件,加上Linux内核,再找一堆开源免费,版权协议许可的软件,最后做个安装程序,就齐活了。更好的发行版大体就是考虑的更周全些,软件包的更新、安装、卸载更方便些。

能不能自己动手攒一个GNU/Linux的发行版?当然可以,Linux From Scratch,网上的一个项目,教你一步一步从头打造一个属于自己的GNU/Linux发行版。

2002年,南非商人Mark Shuttleworth花了两千万美金,搭乘俄罗斯的宇宙飞船去了一趟太空。次年,他成立了Canonical公司,致力于开源文化的推广,推出了GNU/Linux发行版Ubuntu。有钱人办事就是不一样,Ubuntu做得太好了,GNU/Linux用户纷纷投靠,Ubuntu基本一统GNU/Linux发行版的江湖。

五、GNU/Linux和开源文化的背后

GNU/Linux来了虽然没成为大多数人电脑里的系统,但每个人都离不开它。诸多互联网公司的服务器里都跑着GNU/Linux,名单不完全确认,Google、Facebook、淘宝、百度、腾讯、小说阅读网等等。

大多人使用的安卓手机的系统也是基于Linux内核。

GNU/Linux的繁荣有宏伟的规划,有个人的努力,也有很多无形的力量在起着作用。

没有Unix就没有GNU/Linux,是Unix给予了伟大的启示。

没有C语言就有没有GNU/Linux,C语言简单,优雅,介于高级语言和低级语言之间,开发系统软件的首选编程语言。

没有一系列Unix标准的制定就没有GNU/Linux的繁荣。标准就是“车同轨、书同文、统一度量衡”,秦始皇可算最早的标准制订者。遵循Posix标准为GNU/Linux发展铺平了道路。

没有互联网就没有GNU/Linux,GNU/Linux不是一个人在开发,是全球无数人协作的结果。如果没有互联网实在不可想象。当然,GNU/Linux也反哺了互联网,无数互联网公司采用GNU/Linux搭建服务器,GNU/Linux也促进了互联网的繁荣。

没有斯托曼博士的努力,就没有GNU/Linux。他的功劳不仅是创建GNU组织,也不仅是编写Emacs、GCC、GDB,他的精神感召着无数人为开源运动做贡献。

当然还有Raymond的振臂高呼,摇旗呐喊。

还有GNU/Linux诞生之前就开发开源项目的人和组织。Larry Wall因为懒,整天被报表搞得焦头烂额,发布了Perl语言;高德纳教授因为对排版工人不满意,十年时间停止重要工作,发明了伟大的排版软件TeX;Guido为了打发圣诞节的无聊,编写了新的脚本语言Python……

GNU/Linux发布之后,在前辈们的感召下无数人接受了开源的思想和理念,接受了开源文化的洗礼,兴起了开源文化运动。无数为开源项目做出贡献的人和组织,他们发布了PHP、MySQL、Ruby、Node.js、X.Org、Gnome、KDE……他们丰富了GNU/Linux,他们进一步推动了开源文化运动,他们继续感召着别人。

KDE(Kool Desktop Environment)的初衷是想开发一套易用的桌面系统。Windows系统就是一种桌面,使用方便,不是像程序员整天对着黑乎乎的屏幕工作。桌面系统要有浏览器,他们就分了一个小组KHTML来开发浏览器。全世界能开发浏览器核心的也没几家,KDE做到了。后来苹果公司和微软闹别扭,想自己开发浏览器,就是在KHMTL的基础之上开发了自己的浏览器Safari。KHTML的浏览器核心模块叫Webkit。Google推出安卓手机时浏览器也是基于Webkit开发的。

今天的iPhone手机和安卓手机的浏览器都是Webkit内核。

各种版权许可协议的制订也为GNU/Linux的发展铺平了道路,其中就有GNU的GPL、LGPL,还有Apache License、BSD协议。不可能每个人都有一套自己开源协议项目的版权协议,已经制订好的版权许可协议使得软件更好地传播。

其实开源并非自由,有人说GPL是用自由抹杀自由。GPL许可要求任何含有GPL许可的软件发布时必须开放源码。BSD和Apache License相对比较宽松,算是准自由软件。

版本管理软件对GNU/Linux的发展和开源文化运动也功不可没。Linux内核开发起初使用的是商用版本管理软件,某天Linus Torvalds先生不开心了,就自己动手搞了一个。他好取自嘲调侃的名字,命名为Git,意为没什么用的东西。

Git可不是没什么用,太好用了,Linux内核源码从此都用Git管理。Git免费、开源,Git成就了一家伟大的网站github.com,伟大的源码项目托管网站。很多开源项目纷纷把源码托管到了Github上。

GNU/Linux不朽,开源运动不朽!

如何在 Linux 中安装和使用 duf 命令

阅读(269)评论(0)

该命令显示磁盘空间的利用率,显示方式如下图所示:

如何在 Linux 中安装和使用 duf 命令

​duf 命令是 du 命令和 ​​​df 命令​​​​的一个结合,且结果输出是以更加易读的结构化方式,来检查系统空间。

其显示跟易读,对不?今天我们来分享一下如何在 Linux 中安装和使用 duf 命令。

安装 duf

如果你使用的是 Ubuntu 22.04 或者 Debian 开发版或测试版,可以使用 apt 包管理器直接安装:

sudo

如果使用的是 Arch,可以使用 pacman 命令进行安装:

sudo

如果使用的是 Debian 稳定版,或比较旧版本的 Ubuntu,则可以使用预构建的 deb 包来安装duf:

wget https://github.com/muesli/duf/releases/download/v0.8.1/duf_0.8.1_linux_amd64.deb

然后使用如下命令安装 deb 包:

sudo apt install ./duf_0.8.1_linux_amd64.deb

另外,也可以按照其说明手册进行安装,地址为:

​​https://github.com/muesli/duf​​

使用 duf 检查磁盘使用情况和可用空间

可以不添加任何选项,直接使用 duf 命令,这将显示已安装设备列表:

dnf

如何在 Linux 中安装和使用 duf 命令

查看指定设备

可以使用 duf 同时列出一个或多个设备。您只需指定安装端口或设备的路径即可:

duf

看下面例子:

duf

如何在 Linux 中安装和使用 duf 命令

过滤驱动装置

duf 实用程序提供了各种选项,以便您可以过滤输出并获得预期的结果。

例如,可以使用 --only 选项仅显示特定设备:

duf

比如,假如我们想要列出本地设备,可以使用如下命令:

duf --only local

如何在 Linux 中安装和使用 duf 命令

如果想要查看某个文件系统,可以使用 --only-fs 选项。比如,查看 tmpfs(临时文件系统)可使用如下命令:

duf

如何在 Linux 中安装和使用 duf 命令

排序输出

可以使用 --sort 选项对输出结果根据大小、使用率等进行排序。比如:

duf
获取JSON输出

如果喜欢 json 格式的输出,可以使用 --json 选项:

duf

如何在 Linux 中安装和使用 duf 命令

如果想要将结果保存在文本文件中,可以将结果重定向:

duf --json > duf.json

CentOS7服务器安装SolusVM被控端硬盘分区方法

阅读(225)评论(0)

前言:
众所周知,安装SolusVM被控端(Slave),在分区上的步骤非常繁琐,所以本教程采用在安装CentOS7时便使用安装过程的分区工具进行分区,这样方便且快捷。
本教程配合安装过程图文介绍,帮助您完成最终的安装。

开始安装

先使用IPMI工具远程连接服务器,挂载镜像什么的不多赘述,进入CentOS7安装界面。
安装界面点击”安装位置” (INSTALLATION DESTINATION)来手动配置分区。CentOS7服务器安装SolusVM被控端硬盘分区方法CentOS7服务器安装SolusVM被控端硬盘分区方法CentOS7服务器安装SolusVM被控端硬盘分区方法

/boot,/,swap这几个分区为例,剩余空间创建VG以供虚拟机使用。只需要注意文件系统为ext4即可。以下是我创建的分区信息。创建分区时不输入容量大小即为剩余容量。设备类型选择LVM,Volume Group选择”创建新volume group”设置妥当后保存更改,完成系统安装过程。

分区设置

安装完毕后进入系统,设置分区。
df -hT查看分区情况,找到我们的/vg_solusvm分区挂载点。

  1. [root@localhost ~]# df -hT
  2. 文件系统 类型 容量 已用 可用 已用% 挂载点
  3. devtmpfs devtmpfs 877M 0 877M 0% /dev
  4. tmpfs tmpfs 887M 0 887M 0% /dev/shm
  5. tmpfs tmpfs 887M 9.0M 878M 2% /run
  6. tmpfs tmpfs 887M 0 887M 0% /sys/fs/cgroup
  7. /dev/sda2 ext4 118G 1.3G 111G 2% /
  8. /dev/sda1 ext4 740M 113M 574M 17% /boot
  9. /dev/mapper/vg_solusvm-vg_solusvm ext4 370G 69M 351G 1% /vg_solusvm
  10. tmpfs tmpfs 178M 0 178M 0% /run/user/0

使用umount命令卸载挂载点Code
使用umount命令卸载挂载点Code

  1. umount /vg_solusvm

编辑/etc/fstab文件删除/vg_solusvm所在行

  1. vi /etc/fstab

使用vgdisplay查看VG分区名称,我这里是vg_solusvm

  1. [root@localhost ~]# vgdisplay
  2. --- Volume group ---
  3. VG Name vg_solusvm
  4. System ID
  5. Format lvm2
  6. Metadata Areas 1
  7. Metadata Sequence No 2
  8. VG Access read/write
  9. VG Status resizable
  10. MAX LV 0
  11. Cur LV 1
  12. Open LV 0
  13. Max PV 0
  14. Cur PV 1
  15. Act PV 1
  16. VG Size <375.25 GiB
  17. PE Size 4.00 MiB
  18. Total PE 96063
  19. Alloc PE / Size 96063 / <375.25 GiB
  20. Free PE / Size 0 / 0
  21. VG UUID 66564J-eFy1-mhdP-r3dm-ZbMg-Yiuy-VmRZEk

使用vgremove删除分区

  1. [root@localhost ~]# vgremove vg_solusvm
  2. Do you really want to remove volume group "vg_solusvm" containing 1 logical volumes? [y/n]: y
  3. Do you really want to remove active logical volume vg_solusvm/vg_solusvm? [y/n]: y
  4. Logical volume "vg_solusvm" successfully removed
  5. Volume group "vg_solusvm" successfully removed

使用fdisk -l查看LVM分区设备名称,可以看到在sda5上

  1. [root@localhost ~]# fdisk -l
  2.  
  3. 设备 Boot Start End Blocks Id System
  4. /dev/sda1 * 2048 1574911 786432 83 Linux
  5. /dev/sda2 1574912 253233151 125829120 83 Linux
  6. /dev/sda3 253233152 286787583 16777216 82 Linux swap / Solaris
  7. /dev/sda4 286787584 1073741823 393477120 5 Extended
  8. /dev/sda5 286789632 1073741823 393476096 8e Linux LVM

用vgcreate重新创建VG分区。

  1. vgcreate -s 128M vg_solusvm /dev/sda5

创建完成后查看VG分区情况,如下即可

  1. [root@localhost ~]# vgdisplay
  2. --- Volume group ---
  3. VG Name vg_solusvm
  4. System ID
  5. Format lvm2
  6. Metadata Areas 1
  7. Metadata Sequence No 1
  8. VG Access read/write
  9. VG Status resizable
  10. MAX LV 0
  11. Cur LV 0
  12. Open LV 0
  13. Max PV 0
  14. Cur PV 1
  15. Act PV 1
  16. VG Size 375.12 GiB
  17. PE Size 128.00 MiB
  18. Total PE 3001
  19. Alloc PE / Size 0 / 0
  20. Free PE / Size 3001 / 375.12 GiB
  21. VG UUID UmeAx2-iJFo-IJyH-eRn4-c9jw-l9Gd-IeWReH

至此,硬盘分区工作已完成,可以开始安装部署SolusVM了。

解析arrify 转数组实现示例源码

阅读(239)评论(0)

这篇文章主要为大家介绍了arrify 转数组实现示例源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
学习目标
  • 分析 arrify 函数的源码
  • 通过测试用例调试源码
  • 学习 Symbol.iterator 的使用场景
  • 其它的可迭代对象
拉取源码

进入到 arrify 仓库下,使用 CodeSpace 克隆一份项目。

项目目录如图:

忽略掉一些配置文件,各个文件的功能如下:

  • index.js是整个项目的入口,负责对外导出arrify函数
  • index.d.ts是arrify函数的TS类型描述文件
  • test.js是测试用例
分析源码

arrify函数可以接受一个值,并返回一个包含该值的数组,根据传入不同类型的值返回不同的结果。

export default function arrify(value) {
        // 如果传入的值是 null 或 undefined,函数会返回一个空数组。
    if (value === null || value === undefined) {
        return [];
    }
        // 如果传入的值本身就是一个数组,函数会直接返回这个数组
    if (Array.isArray(value)) {
        return value;
    }
        // 如果传入的值是一个字符串,函数会返回一个包含该字符串的数组。
    if (typeof value === 'string') {
        return [value];
    }
        // 如果传入的值是一个可迭代对象,函数会返回一个包含该对象所有元素的数组。
    if (typeof value[Symbol.iterator] === 'function') {
        return [...value];
    }
        // 如果传入的值既不是 null/undefined,也不是一个数组/字符串/可迭代对象,函数会返回一个包含该值的数组。
    return [value];
}
Symbol.iterator 的使用场景

Symbol.iterator 是 JavaScript 中的一个内置 Symbol,它用于定义一个对象的默认迭代器。当一个对象被用于 for...of 循环或者解构赋值时,会自动调用它的 Symbol.iterator 方法。

举个例子,假设你有一个数组,你可以使用 Symbol.iterator 方法来定义如何遍历这个数组:

const numbers = [1, 2, 3];
numbers[Symbol.iterator] = function() {
  let i = 0;
  return {
    next: function() {
      return {
        value: numbers[i] + 1,
        done: i++ === numbers.length
      };
    }
  };
};
for (const num of numbers) {
  console.log(num);
}

上面的代码定义了一个数组 numbers,并为它定义了一个 Symbol.iterator 方法,这个方法返回一个迭代器对象,这个对象的 next 方法返回数组的下一个元素。然后我们使用 for...of 循环来遍历这个数组,循环会自动调用 numbers 的 Symbol.iterator 方法来获取每个元素+1后的值。

上面代码执行的执行结果:

可见我们更改了 array 的默认迭代器。

具有默认的迭代器函数的对象

这些对象能够被 for...of 循环遍历

  • 数组
  • 字符串
  • Map(Map)
  • Set(Set)

总之,一个数据结构如果具有Symbol.iterator属性,这个对象就可以被for...of遍历它的成员。我们理解iteration的原理可以更好使用js提供的数据结构,必要时还可以改造不可迭代的数据结构。

goland中npm无法使用的问题及解决方法

阅读(273)评论(0)

这篇文章主要介绍了goland中npm无法使用的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
goland中npm无法使用

明明已经成功安装且配置了环境到windows上,而且goland上的配置也丝毫无错,但是就是不能使用npm,让人苦恼,如果你也遇到了这样的问题,希望这篇文章可以帮到你。

出现的错误代码是这样的

PS C:\Users\Lenovo\GolandProjects\shop_client1> npm install
npm WARN logfile could not be created: Error: EPERM: operation not permitted, open 'D:\AAA\nodejs\node_cache\_logs\2022-04-19T11_00_18_499Z-debug-0.log'
npm ERR! code EPERM
npm ERR! syscall mkdir
npm ERR! path D:\AAA\nodejs\node_cache\_cacache\index-v5\7b\bf
npm ERR! errno -4048
npm ERR! Error: EPERM: operation not permitted, mkdir 'D:\AAA\nodejs\node_cache\_cacache\index-v5\7b\bf'
npm ERR!  [Error: EPERM: operation not permitted, mkdir 'D:\AAA\nodejs\node_cache\_cacache\index-v5\7b\bf'] {        
npm ERR!   errno: -4048,
npm ERR!   code: 'EPERM',
npm ERR!   syscall: 'mkdir',
npm ERR!   path: 'D:\\AAA\\nodejs\\node_cache\\_cacache\\index-v5\\7b\\bf'
npm ERR! }
npm ERR!
npm ERR! The operation was rejected by your operating system.
npm ERR! It's possible that the file was already in use (by a text editor or antivirus),
npm ERR! or that you lack permissions to access it.
npm ERR!
npm ERR! If you believe this might be a permissions issue, please double-check the
npm ERR! permissions of the file and its containing directories, or try running
npm ERR! the command again as root/Administrator.
npm ERR! Log files were not written due to an error writing to the directory: D:\AAA\nodejs\node_cache\_logs
npm ERR! You can rerun the command with `--loglevel=verbose` to see the logs in your terminal

.npmrc文件,就是npm的配置文件所在位置。

当然,寻找这个文件的目的,多数是为了修改.npmrc文件内容。

但npm提供了方便快捷的修改方式,不知道这个文件的位置,其实也是可以修改的。

于是,配置之间就产生了冲突,找到他删掉它就可以了

默认位置是在 C:\Users\Lenovo 它是隐藏的

之后就可以继续我们的项目了,拜拜

logfile could not be created: Error: EPERM: operation not permitted, open 'D:\AAA\nodejs\node_cache\_logs\2022-04-19T11_02_14_336Z-debug-0.log'
[..................] | : WARN logfile could not be created: Error: EPERM: operation not permitted, open 'D:\AAA\node 
> mintshop-client@1.0.0 dev
> webpack-dev-server --inline --progress --config build/webpack.dev.conf.js
npm ERR!无法安装任何包的解决
npm config set proxy false
npm cache clean

并发编程ConcurrentLinkedQueue使用示例详解

阅读(290)评论(0)

这篇文章主要为大家介绍了并发编程ConcurrentLinkedQueue使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
ConcurrentLinkedQueue

ConcurrentLinkedQueue是非阻塞线程安全的队列,适用于高并发的场景。是一个基于链接节点的无界线程安全队列,按照 FIFO(先进先出)原则对元素进行排序。队列元素中不可以放置null元素(内部实现的特殊节点除外)

ConcurrentLinkedQueue原理
  • ConcurrentLinked是由链表结构组成的线程安全的先进先出无界队列。
  • 当多线程要共享访问集合时,ConcurrentLinkedQueue是一个比较好的选择。
  • 不允许插入null元素
  • 支持非阻塞地访问并发安全的队列,不会抛出ConcurrentModifiationException异常。
  • size方法不是准确的,因为在统计集合的时候,队列可能正在添加元素,导致统计不准。
  • 批量操作addAll、removeAll、retainAll、containsAll、equals和toArray不保证原子性(操作不可分割)
  • 添加元素happen-before其他线程移除元素。
ConcurrentLinkedQueue类继承AbstractQueue抽象类

具有队列的功能;实现了Queue接口,可作为队列使用。

  • ConcurrentLinkedQueue继承于AbstractQueue。
  • ConcurrentLinkedQueue内部是通过链表来实现的。同时包含链表的头节点head和尾节点tail。
  • ConcurrentLinkedQueue按照 FIFO(先进先出)原则对元素进行排序。元素都是从尾部插入到链表,从头部开始返回。
  • ConcurrentLinkedQueue的链表Node中的next的类型是volatile,而且链表数据item的类型也是volatile。ConcurrentLinkedQueue就是通过volatile来实现多线程对竞争资源的互斥访问的。
  • 其中head节点存放链表第一个item为null的节点,tail则并不是总指向最后一个节点
ConcurrentLinkedQueue操作方法
private transient volatile Node head;
private transient volatile Node tail;
public ConcurrentLinkedQueue() {
    head = tail = new Node(null);
}

构造函数中,新建了一个“内容为null的节点”,并设置表头head和表尾tail的值为新节点。 head和tail是volatile类型,具有volatile赋予的含义:“即对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入”。

private static class Node {
    volatile E item;
    volatile Node next;
    Node(E item) {
        UNSAFE.putObject(this, itemOffset, item);
    }
}

Node是单向链表节点,next指向下一个Node,item用于存储数据。Node中操作节点数据的API,是通过Unsafe机制的CAS函数实现的;例如casNext()是通过CAS函数“比较并设置节点的下一个节点”。

1、添加

以add(E e)为例对ConcurrentLinkedQueue中的添加

public boolean add(E e) {
  return offer(e);
}

add()实际上是调用的offer()来完成添加操作的;offer(E e)的作用就是将元素e添加到链表的末尾。

2、删除

poll():在链表头部获取并且移除一个元素

poll()的作用就是删除链表的表头节点,并返回被删节点对应的值。

3、peek操作

peek操作是获取链表头部一个元素(只读取不移除)。

适用于 Linux 的五大流媒体直播应用

阅读(346)评论(0)

现在是为你的业务纳入在线视频内容的最佳时机。为什么?因为研究表明,全球在线视频市场正以每年约 20% 的速度增长。

而且,由于开发者们提供的一些优秀软件,任何人都可以轻松地创建视频内容,并在 YouTube 和 Twitch 等几个流行的平台上传播。如果你仔细想想,你会发现如今你在网上观看的视频内容比基于文本的内容更多。

因此,在这篇文章中,我们将列出一些适用于 Ubuntu 和其他 Linux 的免费软件,这些软件很容易用于为你和你的企业创建超级有趣的流媒体内容。

Linux 的五大流媒体直播应用

OBS Studio

本列表中的第一个免费应用程序是 OBS Studio(即 Open Broadcaster Software)。它是一个具有屏幕广播功能的流媒体直播应用程序,可用于 Linux、Windows 和 macOS。

出于几个原因,OBS Studio 是这个名单上最好的一个。它内置了编码,支持 RTMP 广播、多源、网络摄像头、绿屏、捕捉卡和你的应用程序窗口。

其用户界面相当简单明了,功能丰富。你可以从第三方开发的插件中获得帮助,以扩展其功能,例如,在直播时将 Twitter 上的实时推文混入你的流媒体。不过,OBS 不支持多比特率流媒体。

适用于 Linux 的五大流媒体直播应用

OBS Studio - 适用于Linux的直播应用程序

如何安装:

OBS Studio 可以在所有 Linux 发行版的官方软件库中找到。详细的安装说明见下面的链接。

下载 OBS Studio

更多信息:

VokoscreenNG

我们将在这个列表中介绍的第二个应用程序是 VokoscreenNG。它复刻了已停止的 Vokoscreen 项目。这个新的应用程序完全用 Qt 和 GStreamer 库编写。它可以记录你的屏幕,并接受多个音频源和视频源。VokoscreenNG 的工具箱也相当引人注目。它包括一个放大镜、计时器、系统托盘插件,可以简化你的工作流程。

它可以免费用于 Linux 和 Windows。

适用于 Linux 的五大流媒体直播应用

vokoscreenNG - 适用于Linux的流媒体直播应用程序

如何安装:

你可以从下面的链接下载用于 Linux 系统的压缩可执行文件。下载后,将其解压,然后执行二进制文件来启动该应用程序。

记住,这个应用程序需要在你的 Linux 系统中安装 X11、PulseAudio 和 GStreamer 插件才能工作。如果你使用的是带有 Wayland 和 Pipewire 声音服务器的现代 Linux 系统(例如 Fedora),这个应用程序可能无法工作。

下载 VokoscreenNG

更多信息:

Restreamer

Restreamer 应用程序可以让你直接在你的网站上直播视频和截屏,而无需任何流媒体服务商。也可以用这个应用程序使用流行的流媒体解决方案,如 YouTube、Twitch等。

这个应用程序功能丰富,有一个不错的功能列表。下面是对其功能的快速介绍:

  • 支持 H.264 流媒体
  • 内置 HTML5 视频播放
  • 可用于 Linux、macOS、Windows 和 Docker 镜像
  • 支持你自己的网站和 YouTube、Twitchm、Facebook、Vimeo、Wowza 等。
  • 支持多个视频源:​​网络摄像机​​、USB 摄像机或任何 H.2645 流媒体
  • 编码和音频源支持
  • 支持 JPEG 形式的定期快照
  • 通过 JSON HTTP API 访问流状态,以便进行额外的编程

适用于 Linux 的五大流媒体直播应用

Restreamer

如何安装:

安装 Restreamer 有点麻烦,因为它是通过 Docker 镜像发布的。你可以在下面的链接中找到在 Linux、Windows 和 MacOS 安装的说明。

下载 Restreamer

ffscreencast

ffscreencast 是一个使用 ffmpeg 库的命令行流媒体应用程序。它利用了 ffmpeg 的强大功能,并作为它的一个封装器。尽管它是以命令行的形式出现的,但你可以直接通过终端使用其强大的功能,如多源和录音设备。它也支持多种显示设置。你还可以在你的桌面截屏上叠加你的摄像机画面。

如何安装:

要安装这个应用程序,你需要克隆它的 Git 代码库,然后将其内容复制到 ​​/bin​​目录,以便全局执行 ​​ffscreencast​​ 命令。

git clone https://github.com/cytopia/ffscreencastcd ffscreencastsudocp bin/ffscreencast /usr/local/bin
  • 1.

你可以在终端用 ​​ffscreencast​​ 命令来运行这个应用程序。

源代码和主页

Open Streaming Platforms

本列表中的最后一个应用是 Open Streaming Platforms(OSP),这是一个开源的 RTMP 流媒体软件,可以作为 YouTube LIVE、​​Twitch.tv​​ 等的自托管替代品。

适用于 Linux 的五大流媒体直播应用

Open Streaming Platforms

如果使用得当,这个应用程序功能丰富且强大。因为它有以下的基本功能:

  • 从 Open Broadcast Software(OBS)等输入源进行 RTMP 直播。
  • 每个用户有多个频道,允许一个用户同时广播多个流,而不需要多个账户。
  • 视频流记录和按需播放。
  • 手动上传来源于 OSP 之外的 MP4 视频。
  • 视频剪辑,为值得注意的时刻创建更短的视频。
  • 频道所有者的实时聊天管理(禁止/解禁)。
  • 管理员控制的自适应流媒体。
  • 受保护的频道,只允许你想要的观众访问。
  • 实时频道,当流媒体没有直播时,继续聊天和闲逛。
  • Webhooks:通过完全可定制的 HTTP 请求将 OSP 连接到其他服务,这可以传递信息。
  • 将你的流媒体或视频直接嵌入到另一个网页中,很容易。
  • 通过 Facebook 或 Twitter 快速分享频道或视频。
  • 能够将用户界面定制为你自己的个人外观的主题

如何安装:

要安装 Open Streaming Platform,请按照以下页面的详细说明进行。

下载 Open Streaming Platform

更多信息:

总结

可用于 Linux 的自由开源的流媒体应用程序不多。然而,有几个商业性的流媒体应用程序,它们可能会给你更多的选择、质量和支持。但正如我所说,它们可能要花费你一些钱。所以,如果你是流媒体世界的新手,你可能想从上面列出的用于 Linux 系统的免费流媒体应用程序开始。我希望这篇文章能给你一些想法,让你根据自己的需要使用,并让你开始使用。

如何在 Linux 命令行中比较两个目录

阅读(225)评论(0)

Linux 中如何比较两个文件的差异?答案是使用 diff 命令。

那么,如何比较两个文件夹呢?仍然使用 diff 命令。

另外,使用 GUI 工具也可以更容易的以可视化界面来查看两个目录之间的差异。

今天我们分享一下如何使用 diff 命令来比较目录。

使用​​ tree 命令​​​可查看我们今天的例子中使用的两个目录的结构:

自动草稿

使用 diff 命令比较目录

使用 diff 命令,可参照如下语法结构:

diff -qr Directory-1 Directory-2
  • 1.

-q 选项,用于查找差异。当两个目录中发现差异的时候,会有输出报告:

diff -q LHB-1 LHB-2
  • 1.

自动草稿

但是,大家仔细看输出结果,diff 命令只查看第一层目录结构。默认情况下,它不会查找子目录中的文件。

要执行递归查找,需要使用 -r 选项:

diff -qr LHB-1 LHB-2
  • 1.

自动草稿

但是,另外的情况,如果想要查找类似的文件呢?

查找类似的文件可以使用 -s 选项。如果同时使用 -q 和 -s,将会同时显示相同和不同的目录文件:

diff -qrs LHB-1 LHB-2
  • 1.

自动草稿

diff 命令显示目录中不同的文件。要查看差异,可以再次对文件运行 diff 命令,以查看其内容的差异。

使用 GUI 工具来比较目录

如果不想使用命令行工具,只想以最简单的方式比较两个目录,可以使用 Meld。

Meld 是一个可以检查和合并差异的 GUI 工具。当然,使用前需要安装。如果使用的是 Ubuntu/Debian 系统,使用如下命令:

sudo
  • 1.

安装完成后,使用 Meld,可执行以下三个简单的步骤:

1)选择目录比较(directory comparison);

2)选择需要比较的目录;

3)点击比较(compare)按钮。

自动草稿

点击比较按钮后,它将显示所选目录中的匹配文件和不同文件:

自动草稿

标注星号的是完全匹配的文件,而用绿色突出显示的文件名仅可用于相应的目录。

lnav: 用于 Linux 的高级日志文件浏览器

阅读(262)评论(0)

如果你想调试或排除任何问题,你需要一个像 lnav 这样的高级日志文件查看器。它在任何 Linux 系统的终端都能创造奇迹。

 

lnav: 日志文件查看器

​lnav​​ 可以即时解压缩所有的压缩日志文件,并将它们合并在一起进行漂亮的显示。显示是根据错误/警告的类型进行解析和格式化的,这有助于快速浏览成千上万的日志,特别是在服务器中。

在分析日志的时候,时间戳是非常重要的。所以 ​​lnav​​ 会根据时间戳合并多个日志,这对追踪系统问题很有帮助。

大多数重要的日志文件格式检测都是内置的,包括如下:

  • 通用网络访问日志Common Web Access Log格式
  • CUPS page_log
  • Syslog
  • Glog
  • VMware ESXi/vCenter 日志
  • dpkg.log
  • uwsgi
  • “通用”:任何以时间戳开头的信息
  • Strace
  • sudo
  • GZIP、BZIP

这还不是全部,​​lnav​​ 还能实现以下功能,使其成为 Linux 系统的重要应用:

  • 根据正则表达式过滤消息
  • 错误日志的时间轴视图
  • 漂亮的打印视图,这有助于重新格式化
  • 使用 SQL 查询日志
  • 在搜索时,日志会实时更新
  • 通过正则表达式高亮显示语法(比如你想在整个日志中找出一个 IP 地址)
  • 显示的日志中任何单词的 Tab 补全!!

lnav: 用于 Linux 的高级日志文件浏览器

lnav 在 ubuntu 中运行

要查看上述功能的截图和了解更多信息,请访问 ​​本页面​​ 。

如何安装

这个程序在 Ubuntu、Debian 的官方仓库中可以找到。使用以下命令安装它。

sudo apt install lnav
  • 1.

而对于 Fedora、RHEL 用户,使用下面的命令:

sudo dnf install lnav
  • 1.

另外,开发者还提供了一个离线的独立可执行文件,你不需要安装。你可以从 ​​GitHub 发布页​​ 下载压缩包,然后按以下方式执行:

./lnav
  • 1.

注意:它也可用于 macOS,你可以在上述 GitHub 页面找到。

lnav: 如何使用(基础)

简单的命令语法是:

lnav [options] [logfile1 logfile2 …]
  • 1.

如果你直接运行 ​​lnav​​​ 命令,它会显示你系统中的所有日志(​​/var/log/messages​​​ 和 ​​/var/log/syslog​​)

lnav
  • 1.

要查看任何特定的日志文件,在命令行中输入:

lnav /var/log/syslog
  • 1.

使用 ​​-t​​ 参数在你的日志输出中添加时间戳:

lnav -t /var/log/syslog
  • 1.

以下是 ​​lnav​​ 的一些关键开关:

  • ​-d file​​:将调试信息写入给定的文件。
  • ​-a​​:加载所有最新的日志文件类型。
  • ​-r​​:也加载较早的轮转的日志文件。
  • ​-t​​:在标准输入中读入的数据行上预加时间戳。
  • ​-w file​​:将标准输入的内容写入该文件。
  • ​-c cmd​​:在文件加载后执行命令。
  • ​-f path​​:执行给定文件中的命令。
  • ​-n​​:不使用 curses UI 运行(无头模式)。

lnav: 用于 Linux 的高级日志文件浏览器

lnav 在 Ubuntu 22.04 中运行

要进一步阅读和探索,请访问 ​​官方文档​​。

Fedora 38发布Budgie与Sway定制版

阅读(232)评论(0)

两款新的 Fedora 定制版将在 Fedora 38 发布时首次亮相。

自动草稿

我们期待着它们在 Fedora 37 时出现,但在 Fedora 38 中终于来了!

早在 2022 年 5 月,Budgie 项目的主要开发者 Joshua Strobl ​​宣布​​,Budgie 已被提交到 Fedora 中。

遗憾的是,在那之后不久,我们并没有看到任何官方 ​​Fedora 定制版​​ 发布的迹象,尽管它在 ​​Fedora 37 发布​​ 期间进入了 Fedora 软件库。

但现在有了。

随着 Fedora 38 的发布,看起来我们会得到一个 ​​Budgie​​ 的官方定制版,同时还有一个 ​​Sway​​ 窗口管理器的定制版。

Fedora Budgie 和 Sway

在 ​​最近的一次会议​​ 上,Fedora 工程和指导委员会(FESCo)投票决定将 Budgie 和 Sway 窗口管理器的 Fedora 官方定制版纳入 Fedora 38 的发布中。

根据 Budgie 和 Sway 的初步修改建议,我们可以期待很多变化。

对于 Budgie:

    Fedora 38 将提供 Budgie 桌面环境,包含一套核心应用程序,如用于更新/软件包管理的 GNOME “软件”应用、一个文本编辑器、一个网页浏览器和一个终端。
    它还将使用​​Materia GTK​​ 和​​Papirus​​ 图标主题,整个系统采用 GTK 主题设计。
    Budgie 定制版还将采用 lightdm + slick-gtk-greeter,以获得更直观的用户问候体验。

对于 Sway 定制版:它旨在提供一个极简体验,只包括默认配置之上的一些元素。

预期时间:随着 Fedora 38 的开发在未来几个月内的加快,你可以期待这些定制版在 2023 年 4 月期间出现。当然,会有预装了 Budgie 和 Sway 的单独 ISO 文件。

因此,我认为看到 Budgie 与 Fedora 的体验会非常吸引人,特别是当 Budgie 的开发似乎正在发生一些有趣的变化。

登录

忘记密码 ?