Xen

Xen Xen 是一个开放源代码虚拟机监视器,由剑桥大学开发。它打算在单个计算机上运行多达100个满特征的操作系统。操作系统必须进行显式地修改 ("移植") 以在Xen上运行 (但是提供对用户应用的兼容性) 。这使得Xen无需特殊硬件支持,就能达到高性能的虚拟化. IBM经常在其主机和服务器上使用虚拟机来尽可能发挥其性能,并类似chroot监禁那样将程序置于隔离的虚拟OS中以增强安全性。除此之外,它还能使不同和不兼容的OS运行在同一台计算机上。Xen对虚拟机活跃迁移的支持允许工荷平衡和避免停时。 与其它虚拟机的比较 Denali使用准虚拟化技术来提高x86电脑上虚拟机的性能。Denali的虚拟机为因特网服务专门支持了最小化的操作系统。系统可以运行上千个虚拟机。Xen与Denali不同,因为它试图运行适当数量的完整操作系统,而非大量轻量级操作系统。 VMware为x86提供虚拟机,这些虚拟机可以运行未修改的PC操作系统。所涉及的技术极为复杂,也导致了性能的 (有时相当显著) 下降。Xen牺牲了完全的二进制兼容,换取相对的简易性和改善的性能。 Xen的准虚拟化 Xen通过一种叫做准虚拟化的技术获得高性能,甚至在某些与传统虚拟技术极度不友好的架构上 (x86) ,Xen也有上佳的表现。与那些传统通过软件模拟实现硬件的虚拟机不同,在Intel VT-X支持下3.0版本之前的Xen需要系统的来宾权限,用来和Xen API进行连接。到目前为止,这种技术已经可以运用在NetBSD, GNU/Linux, FreeBSD和Plan 9系统上。在Brainshare 2005会议上,Novell展示了NetWare与 Xen的连通。与Windows XP连通的技术曾在Xen开发初期进行,但微软的协议未能允许它发布。Sun公司也正在积极地将Solaris移植到Xen平台之上。 Xen的半虚拟化 Xen通过一种叫做半虚拟化的技术获得高效能的表现(较少的效能损失, 典型的情况下大约损失 2%, 在最糟的情况下会有 8% 的效能耗损; 与其它使用完全的虚拟化却造成最高到 20% 损耗的其他解决方案形成一个明显的对比),甚至在某些与传统虚拟技术极度不友好的架构上 (x86) ,Xen也有极佳的表现。与那些传统通过软件模拟实现硬件的虚拟机不同,在3.0版本及在Intel VT-X支援前的Xen需要让客户操作系统 (guest operating systems) 与Xen API进行连接。到目前为止,这样连结已经可以运用在NetBSD, GNU/Linux, FreeBSD和贝尔实验室的Plan 9系统上。在Brainshare 2005会议上,Novell展示了NetWare与 Xen的连通。与Windows XP连通的技术曾在Xen开发初期进行,但微软的协议未能允许它发布。Sun微系统公司也正积极研究Solaris与Xen的连结,使其能在Xen平台上运作。 Xen的完全虚拟化 Intel对Xen贡献修改以支持其VT-X Vanderpool架构扩展。如果主系统支持Vanderpool或者Pacifica扩展 (Intel和AMD对本地支持虚拟化的扩展) ,这项技术将允许未修改的客作业系统运行在Xen虚拟机中。事实上,那意味著性能的提升,并且你可以在没有进行任何协议不允许的修改的情况下对Windows进行虚拟。 虚拟机的迁移 Xen虚拟机可以在不停止的情况下在局域网内多个物理主机之间实时迁移。在操作过程中,虚拟机在没有停止工作的情况下内存被反复的复制到目标机器。虚拟机在最终目的地开始执行之前,会有一次60-300毫秒秒的非常短暂的暂停以执行最终的同步化,给人无缝迁移的感觉。类似的技术被用来暂停一台正在运行的虚拟机到磁盘,并切换到另外一台,第一台虚拟机在以后可以恢复。 平台支持 Xen目前可以运行在x86系统上,并正在向x86_64、IA64、PPC移植。移植到其他平台从技术上是可行的,未来有可能会实现。

2011-11-26 · 1 min · 58 words · -

LFS

LFS LFS──Linux from Scratch,就是一种从网上直接下载源码,从头编译LINUX的安装方式。它不是发行版,只是一个菜谱,告诉你到哪里去买菜(下载源码),怎么把这些生东西( raw code) 作成符合自己口味的菜肴──个性化的linux,不单单是个性的桌面。 Linux from Scratch 存在的原因 LFS 存在的一个重要原因是可以帮助人们学习 linux 系统的内部是如何工作的。构建一个 LFS 系统会帮助演示是什么使 linux运转,各种组件如何在一起互相依赖的工作。最好的事情之一,是这种学习的经历给予的是一种能力,能够定制满足您自己需要的 linux。 好处优势 LFS 的一个关键的好处是它让用户对于系统有更多的控制,而不是依赖于某些人的 linux 实现。在 LFS 的世界里,你是坐在司机的位置,掌控系统的每一个细节,比如目录层次和启动脚本配置。你也能掌控程序在哪里,为何,以及怎样被安装。 LFS 的另一个好处是可以创建一个非常紧凑的 linux系统。当安装一个常规的发行版时,人们经常要被迫安装一些可能永远不会用到的程序。这些程序浪费宝贵的磁盘空间,或更糟的是占用CPU资源。要构建一个少于100兆(MB)的 LFS系统不是一件难事,这相比较目前大多数的发行版要小很多。这听起来是不是仍然占许多空间?我们中一些人的工作是创建一个非常小的嵌入式的 LFS系统。我们成功的构建了一个系统,在只运行 Apache服务器的情况下,大约占8MB磁盘空间。进一步的缩减能够减至5MB或更少。你用一个常规的分发版本试试?这也只是设计你自己的 linux所带来的好处之一。 我们可以拿 linux 发行版与快餐店出售的汉堡打比喻,您不能决定您应该吃什么。相反,LFS没有给您一个汉堡。而是给您一张制作汉堡的配方。用户可以查阅配方,减掉不想要的配料,增加你自己的配料以增强汉堡的口味。当你对配方满意的时候,开始去做准备。您可以采用确定的方式: 或烤,或烘,或炸,或焙。 另外一个比方是把 LFS 与建筑房子比较。LFS 提供房子的框架蓝图,但是需要您去建筑它。LFS 包含了在这过程中调整计划的自由,定制满足用户的需要和参考。 用户定制的 linux 系统的另一个好处是安全性。通过从源码编译整个系统,您能够审查任何东西,打上所有的安全补丁,而不需要等待别人去编译好修补了安全漏洞的二进制包。除非是您发现并制作的补丁,否则您得不到任何的保证,新的二进制包是否正确编译或修正了问题。

2011-11-26 · 1 min · 45 words · -

linux

linux Linux 是一种自由和开放源码的类Unix操作系统。目前存在着许多不同的Linux,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,从手机、平板电脑、路由器和视频游戏控制台,到台式计算机、大型机和超级计算机。Linux是一个领先的操作系统,世界上运算最快的10台超级计算机运行的都是Linux操作系统。严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。Linux得名于计算机业余爱好者Linus Torvalds。 创始人 Linus Torvalds 林纳斯·本纳第克特·托瓦兹 (Linus Benedict Torvalds) 出生于芬兰赫尔辛基市。父亲尼尔斯·托瓦兹 (Nils Torvalds) 是一名活跃的共产主义者及电台记者。托瓦兹家族属于在芬兰占6%的少数民族芬兰瑞典人。他毕业于赫尔辛基大学计算机科学系,1997年至2003年在美国加州硅谷任职于全美达公司 (Transmeta Corporation) 参与该公司芯片的code morph技术研发。后受聘于开源码发展实验室 (OSDL : Open Source Development Labs, Inc) ,全力开发Linux内核。现任职于Linux基金会。 象征物 Tux Tux (一只企鹅,全称为tuxedo,NCIT 90916P40 Joeing Youthy的网络ID) 是Linux的标志。将企鹅作为Linux标志是由林纳斯·托瓦兹提出的。 大多数人相信,"Tux"这个名字来源于Torvalds UniX,而不是因为它看起来像是穿着一件黑色小礼服 (tuxedo) 。 这个企鹅图案在最佳Linux图标竞赛中被选中。其他一些图案可以在Linux图标大赛网站中找到。Tux的设计者是Larry Ewing,他于1996年,利用GIMP软件设计出了这个企鹅。 Tux已经成为Linux和开源社区的象征。 历史发展 Linux 操作系统是UNIX 操作系统的一种克隆系统。它诞生于1991 年的10 月5 日 (这是第一次正式向外公布的时间) 。以后借助于Internet 网络,并经过全世界各地计算机爱好者的共同努力下,现已成为今天世界上使用最多的一种UNIX 类操作系统,并且使用人数还在迅猛增长。 Linux 操作系统的诞生、发展和成长过程始终依赖着以下五个重要支柱: UNIX 操作系统、MINIX 操作系统、GNU 计划、POSIX 标准和Internet 网络。 下面主要根据这五个基本线索来追寻一下Linux 的开发历程,它的酝酿过程,最初的发展经历。首先分别介绍其中的四个基本要素(UNIX、MINIX、GNU 和POSIX,Internet 的重要性显而易见,所以不用对其罗嗦),然后根据Linux 的创始人Linus Torvalds 从对计算机感兴趣而自学计算机知识,到心里开始酝酿编制一个自己的操作系统,到最初Linux 内核0.01 版公布,以及从此如何艰难地一步一个脚印地在全世界hacker 的帮助下最后推出比较完善的1.0 版本这段时间的发展经过,也即对Linux 的早期发展历史进行详细介绍。 UNIX 操作系统的诞生 肯·汤普逊 (左) 和丹尼斯·里奇 (右) Linux 操作系统是UNIX 操作系统的一个克隆版本。UNIX 操作系统是美国贝尔实验室的肯·汤普逊Ken.Thompson和丹尼斯·里奇Dennis Ritchie 于1969 年夏在DEC PDP-7 小型计算机上开发的一个分时操作系统。当时Ken Thompson 为了能在闲置不用的PDP-7 计算机上运行他非常喜欢的星际旅行 (Space travel) 游戏,在1969 年夏天乘他夫人回家乡加利福尼亚渡假期间,在一个月内开发出了unix 操作系统的原型。当时使用的是BCPL 语言 (基本组合编程语言) ,后经Dennis Ritchie 于1972 年用移植性很强的C 语言进行了改写,使得UNIX 系统在大专院校得到了推广。 ...

2011-11-26 · 7 min · 1324 words · -

Gentoo

Gentoo Gentoo是一个基于Linux的自由操作系统,它能为几乎任何应用程序或需求自动地作出优化和定制。追求极限的配置、性能,以及顶尖的用户和开发者社区,都是Gentoo体验的标志特点。 Gentoo的哲学是自由和选择。得益于一种称为Portage的技术,Gentoo能成为理想的安全服务器、开发工作站、专业桌面、游戏系统、嵌入式解决方案或者别的东西——你想让它成为什么,它就可以成为什么。由于它近乎无限的适应性,可把Gentoo称作元发行版 简介 Gentoo已经停止发布新的编译版,最近一次发布的是10.0,之所以发行是为了纪念发行十周年。之所以不发行编译版,是因为没有这个必要,Gentoo不提供传统意义的安装程序,他的安装CD只是提供一个Linux环境,从分区,挂载硬盘,下载编译内核,书写Grub等等都需要手动命令行一步步来。复杂的安装过程往往会让很多新手觉得沮丧,但是它确实能更好的帮你了解Linux的构建。 当然,Gentoo的意义不仅仅在于它所提供的软件。它是围绕着一个发行版建立起来的社区,由300多名开发人员和数以千记的用户共同驱动。发行版项目为用户提供各种途径来享用Gentoo: 文档、基础设施 (邮件列表、站点、论坛……) 、版本发布工程、软件移植、质量保证、安全跟进、强化等等。 为了商讨和协助Gentoo的全局开发,每年推选出一个7人议会,对Gentoo项目中的全局性问题、方针政策和发展进步做出决定。 核心 Portage是Gentoo的核心,履行许多关键的职责。其一,Portage是Gentoo的软件发行系统。Gentoo 下要获取最新的软件,打一个命令: emerge-sync。这个命令告诉Portage从网上更新你本地的"Portage树"。本地Portage树包含一份完整的脚本集合,Portage以之创建和安装最新的Gentoo软件包。当前,我们的Portage树中拥有超过10000个软件包,软件包更新和新软件包每时每刻都在加入中。Portage也是一个软件包构建和安装系统。当你想安装一个软件包时,你输入"emerge 软件包名",此时Portage按照你作的具体配置自动构建一个软件包的定制版本。请根据自己的硬件优化配置,确保启用了软件包中你想要的一些可选特性——同时确保未启用那些你不想要的。 Portage还使系统保持在持续更新状态。输入emerge -uDN world——一个命令——能确保系统中你想要的所有软件包得到自动更新。 优点 与大多数GNU/Linux发行版本不同,Gentoo Linux为用户提供了大量的应用程序源代码。Gentoo Linux的每一部分都可以在最终用户的系统上重新编译建造,甚至包括最基本的系统库和编译器自身。 通过依赖关系描述和源代码镜像的形式提供软件,Gentoo Linux提供了大量软件供用户选择。 标准的源代码镜像包括30G的数据。 选择不仅在软件整体方面,也存在于软件的内部。由于可以在本地编译软件,参数和变量的选择可以由用户自己指定。 指定参数的优势不仅在于用户了解了设置,更多是增加了针对硬件进行性能提升的余地。 而且用户可以使用自己喜欢的补丁或插件对软件功能进行调整,比如当前的Gentoo Linux内核发布包括35种。 由于系统及应用软件的安装方法差异显著,Gentoo Linux社区对安装内容的探讨相当深入。即便不使用 Gentoo Linux的用户也可以通过了解参数选择明白软件内部的设定。应用软件的配置设定都记录在ebuild文件中,由ebuild、emerge命令管理。 gentoo mount /dev/sda3 /mnt/gentoo mount /dev/sda1 /mnt/gentoo/boot chmod 1777 /mnt/gentoo/tmp mount -t proc proc /mnt/gentoo/proc mount -rbind /sys /mnt/gentoo/sys mount -make-rslave /mnt/gentoo/sys mount -rbind /dev /mnt/gentoo/dev mount -make-rslave /mnt/gentoo/dev mount -t tmpfs -o nosuid,nodev,noexec shm /dev/shm chmod 1777 /dev/shm chroot /mnt/gentoo /bin/bash source /etc/profile export PS1="(chroot) $PS1" the minimal install cds have the ability to run isohybrid on them and then you can dd that image to a removable device. ...

2011-11-26 · 2 min · 412 words · -

slackware

slackware Slackware Linux http://baike.baidu.com/view/10899.htm Slackware Linux是由Patrick Volkerding制作的GNU/Linux发行版,它是世界上依然存活的最久的Linux发行版,在它的辉煌时期,曾经在所有发行版中拥有最多的用户数量。但是,随着 Linux商业化的浪潮,Redhat、Mandrake 和Suse 这些产品通过大规模的商业推广,占据了广大的市场;Debian作为一个社区发行版,也拥有很大的用户群。相比之下,Slackware的不事声张,使得它从许多人(尤其是使用Linux的新用户)的视野中消失了。 Slackware是Patrick Volkerding制作的Linux发行版本。Slackware 走了一条同其他的发行版本 (Red Hat、Debian、Gentoo、SuSE、 Mandriva、Ubuntu等) 不同的道路,它力图成为"UNIX风格"的Linux发行版本。它的方针是只吸收稳定版本的应用程序,并且缺少其他linux版本中那些为发行版本定制的配置工具。 Slackware的历史 第一个 Slackware 的版本1.00 在1993年 Slackware 7月16日由创立者和开发领导者Patrick Volkerding发布。 它是基于SLS Linux并以软盘为镜像在匿名FTP上发行。Slackware是现存的最古老的发行版本,在2003年度过了它的十周年纪念。 "Slackware"这个名字借用自Church of the SubGenius中的术语"Slack"。 在早期的发布版本中,发行版本带有三个用户帐号: "satan", "gonzo" 和 "snake"。它们是作为示例被提供,但是后来的版本中去除了这些帐号,因为它们有潜在的安全漏洞。 在1999年,Slackware的发布版本号从4一下子跨越到了 7。Patrick Volkerding 作出解释 : 这是出于市场推广的考虑,为了告诉人们 Slackware 和别的 Linux 发行版本一样"新" (up-to-date) ,当时许多其他发行版本的版本号为 6 。 在2004年,Patrick Volkerding 得了严重的疾病,Slackware 未来的开发变得不可预测。 在他痊愈后很快恢复了Slackware 的开发。 在2005年,GNOME桌面环境被从待发布的版本中删除,移交给了社群进行支持。GNOME的删除被Linux社群中的一些人认为是一个警讯,因为GNOME在各种Linux发行版本中都可以找到,一些由社群建立的支援计划也因此诞生。 贯穿Slackware的历史,出现一些在Slackware基础上制作的发行版本和LiveCD。一些流行的发行版本就起源于 Slackware ,包括SUSE, College Linux 和 Slax。 Slackware X86发布名称 Slackware 主要为x86 PC 开发。然而曾经存在一些官方的移植 ,像针对DEC Alpha 和 SPARC 架构的。从2005年起,开始出现针对System/390架构的官方移植。同时也存在一些非官方的移植,ARM,Alpha,SPARC,PowerPC 和 x86-64。 Slackware 13.0,官方首次提供64位的版本下载。 Slackware 最新稳定发布的版本是 13.37 (直到2011年4月27日) ,其中包括了2.6.37.6和2.6.38.4版本内核, Slackware的测试/开发版本称为 '-current' ,这是为了可以使用更多超前的配置。 KISS, 代表"保持简洁,笨拙" (Keep it Simple, Stupid) ,是一个可以解释很多Slackware中设计选择的概念。在这个文本中,"简洁" ('simple') 指系统设计的观点,而不是指易用性。与大多数其他的发行版不同,KISS(Keep it simple,stupid)是Slackware一贯坚持的原则,尽量保持系统的简洁,从而实现稳定、高效和安全。在KISS哲学里面,简单(Simple)指的是系统设计的简洁性,而不是用户友好(User friendly)。这可能会在一定程度上牺牲了系统的易用性,但却提高了系统的透明性和灵活性。 正是一直以来对KISS原则的坚持,Slackware赢得了简洁、安全、稳定、高效的名声,也赢得了一大批的忠实用户。 启动脚本 Slackware 使用BSD风格的初始化脚本,其他的Linux发行版本大多使用 System V 风格的初始化脚本。基本上 System V 风格的每个运行级都是存放初始化脚本的子目录,而BSD 风格仅为每个运行级提供一个脚本。BSD 风格的拥护者认为这样更佳,因为系统可以更容易找到,读取,编辑,和维护脚本。System V的拥护者认为System V 的结构强大和灵活。 但这些都无关紧要,System V初始化兼容在7.0版本之后被引入了 Slackware 中。 软件套件管理 Slackware的软件套件管理系统很独特。它的软件套件管理系统和别的发行版本一样可以很容易的安装、升级、移除包。但是它不会试着去追踪或者管理涉及哪些依赖关系 (也就是保证系统拥有所有的安装包内的程序需要的系统库) 。如果所需要的先决条件不能满足,在程序执行之前不会有提醒和指示。 包都经过gzip压缩和tarball打包,但文件扩展名是.tgz,而不是.tar.gz。他们的结构是这样的: 当在根目录下解压缩和释放,其中的文件会放置于它们的安装位置。因此可以不使用 Slackware的包工具来安装包,而仅仅使用 tar 和 gzip命令,如果包中有doinst.sh脚本,一定要运行它。 相对的,Red Hat的RPM是CPIO档案,Debian的.deb文件是ar档案。他们都包括一些依赖关系的信息,包管理器工具可以使用这些信息来寻找和安装先决条件。他们在先决条件满足前是不会安装新包的 (虽然可以强制进行) 。 关于追踪或者无视依赖关系孰优孰劣的争论并不很热闹,这多少让人想起了持续甚久的"vi 对 Emacs" 的"宗教战争"。 Slackware解决问题的方法被技巧熟练的用户群很好的接受了。 简单灵活的软件包管理机制 Slackware在软件包管理上的独树一帜也是KISS原则的体现。 Slackware的tgz安装包实际上是经过用tar打包、gzip压缩的文件,和常见的tar.gz 在格式上完全一致,所不同的是tgz包额外包含了软件描述文件和脚本文件。安装软件时, Slackware的包管理工具将安装包解压到指定的目录(默认为根目录), 解压完之后, 如若存在脚本文件, 则运行此脚本文件。 需要特别指出的是,Slackware的软件包管理系统,并没有提供自动的检测依赖机制,用户需要手动检测软件的依赖性问题。Slackware的理由则是: 系统管理员应该知道自己系统里有什么东西,也应该知道要安装什么东西。既然各种软件包管理工具都不可能从根本上杜绝dependency hell的恶梦,不如干脆由用户自己来决定。 由于tgz格式的软件相对来说比较少,使用Slackware时经常需要从源代码自行编译软件。但有趣的是,尽管在软件包管理上Slackware基本上采取的是"放任自流"的方式,但编译软件时极少遇到缺这个库、少那个库的问题,大多数情况下是非常顺利的。 从Slackware-13.0版本开始, Slackware的安装包开始改为txz格式, 即用tar打包、经过xz压缩的文件。但Slackware的管理器也同时兼容以前的tgz格式。 为了满足一些用户对自动解决软件依赖性的需求, 目前已出现了Swaret、Slapt-get和SlackUpdate等等第三方项目。 Slackware 的中文化支持 能否很好地支持中文,是中文用户选择Linux发行版的一个重要标准。 在很多人的印象中,Slackware对中文的支持不好,这也是Slackware的中文用户比较少的原因之一。实际上, Slackware系统中包含了所有Linux国际化支持的内容,只不过默认安装时,Slackware并没有提供针对国际化内容进行设置的选项。这需要用户手动配置符合自己语言的桌面环境。 历史上,Slackware确实存在对中文支持不太好的问题,但这是在Linux国际化程度比较差的大环境下,几乎所有发行版都存在的普遍问题。在当时,这促成市场上涌现出了几种以中文处理为优势的"国产"Linux。 为了方便解决中文处理的问题,海峡对岸的同胞发起了对Linux进行汉化的Chinese Linux Extension(CLE) 项目,把一些零散的中文处理技术整合成一个比较完整的解决方案。CLE的工作成果移植到Slackware之后,确实大大方便了中文用户。但是,随着 glibc、X Window对国际化支持的进步,系统及应用程序的国际化支持程度也大幅度提高,几乎所有的中文化支持都可以在系统默认配置的基础上通过较为简单的设置而实现,不再需要像过去那样安装特殊的中文应用程序。 Slackware的当前版本已经可以做到通过安装中文字体、修改配置文件、安装中文输入法这几个简单的步骤,就很容易地实现中文显示和输入。系统级的中文打印和LaTeX的中文支持,也能够用比较简单的步骤实现。 总结 在历史上, Slackware曾经对中文支持方面较差, 结果是Slackware的中文用户数量远远低于其他名气大的发行版。国内 的用户数量少,使得Slackware被蒙上了一层神秘的面纱,直至今日, 一些不准确的传言,如难安装、中文支持不好、易用性差等等,依然让很多用户不敢轻易尝试。 但实际上,Slackware一直以来是以简洁、安全和稳定所著称的,在世界范围内拥有广大的忠实用户,其地位在各大发行版中始终保持着稳定的排名。 在软件包的选择上,Slackware不贪多求全,只安装一些常用的软件。软件版本不一定选最新的,而是对安全性和稳定性的考虑更多一些,目的也是减轻系统管理工作的负担。 在系统的配置方面, Slackware 不遮掩内部细节, 它将系统"真实"的一面毫不隐藏的呈现给用户,让人们看到"真正的"Linux。 这要求用户需要拥有一定量的基础知识, 才能跨过使用Slackware的门槛, 否则难以驾驭此系统。 对此, 批评者认为, 这让很多事做起来太费劲;而支持者回应到这提高了系统的灵活性和透明性, 使得系统趋向于简洁。在一些人眼中,Slackware似乎没有对Linux社区做出什么贡献,它只是把现有的软件绑在一起。但是,Slackware既然能成为目前存活时间最长的发行版,拥有一批忠实的用户,是它一直坚持KISS原则、保持自己独特的风格的结果,这种坚持给用户带来一个简洁、高效和稳定的系统。 Slackware打包时,对内核和软件的改动尽可能少,除非发现安全漏洞才会打补丁,最大限度地保持了内核和应用软件的原汁原味。 由于Slackware在系统管理上的简单、透明,以及"不太友好"的配置工具,用户在进行系统管理时,需要对系统有更加深入的了解,更容易真正理解Linux的运行机制。 正是由于上述的原因,从Slackware入手学习Linux,虽然门槛稍为有点高,但是更容易接触到Linux系统的本质。在Slackware社区,最经常被引用的一句话就是: "When you know Slackware you know Linux. When you know Red Hat, all you know is Red Hat."

2011-11-26 · 1 min · 207 words · -

Hostname, 主机名

Hostname 主机名里不能用 ., 遇到 . 会被截断, 也不能用下划线, 下划线会被忽略掉. hostnamectl, 查看主机信息, 查看主机名, 查看机器名, 查 hostname # 查看 hostnamectl hostnamectl status # 设置主机名 sudo hostnamectl set-hostname host0 hostnamectl -static hostnamectl -transient hostnamectl -pretty sudo hostnamectl set-hostname new-host-name redhat 改主机名 /etc/sysconfig/network NETWORKING=yes NETWORKING_IPV6=no HOSTNAME=YOURHOSTNAME /etc/hosts 127.0.0.1 YOURHOSTNAME localhost # 在linux下查看主机名的命令 hostname http://soft.zdnet.com.cn/software_zone/2007/0831/481970.shtml 什么是主机名: 无论在局域网还是INTERNET上,每台主机都有一个IP地址,是为了区分此台主机和彼台主机,也就是说IP地址就是主机的门牌号。但IP地址不方便记忆,所以又有了域名。域名只是在公网 (INtERNET)中存在(以实验为目的的局域网域网实验性除外) ,每个域名都对应一个IP地址,但一个IP地址可有对应多个域名。域名类型 Linuxsir.org 这样的; 主机名是用于什么的呢?在一个局域网中,每台机器都有一个主机名,用于主机与主机之间的便于区分,就可以为每台机器设置主机名,以便于以容易记忆的方法来相互访问。比如我们在局域网中可以为根据每台机器的功用来为其命名。 主机名相关的配置文件: /etc/hosts; 主机名配置文件; 主机名的配置文件大多是/etc/hosts ; hosts – The static table lookup for host name (主机名查询静态表) ; ...

2011-11-26 · 2 min · 327 words · -

generate delete sql

generate delete sql select ‘delete from ’ || ut.table_name || ‘;’ from user_tables ut;

2011-11-25 · 1 min · 14 words · -

Go Synchronization, 同步

Go Synchronization, 同步 Go语言在设计上对同步 (Synchronization,数据同步和线程同步)提供大量的支持,比如 goroutine和channel同步原语,库层面有 sync:提供基本的同步原语 (比如Mutex、RWMutex、Locker)和 工具类 (Once、WaitGroup、Cond、Pool、Map) sync/atomic:提供变量的原子操作 (基于硬件指令 compare-and-swap)

2011-11-24 · 1 min · 13 words · -

linux shutdown

’linux shutdown' shutdown是最安全的关机和重启命令,平时使用时推荐使用shutdown命令关机和重启。 shutdown 【语法】shutdown [选项] [参数] 【详解】shutdown是最安全的关机和重启命令,平时使用时推荐使用shutdown命令关机。而且该命令支持定时操作。 【选项】 选项 相应功能 -a 指定权限 -r 重启计算器 (和reboot) 命令一样 -k 模拟关机 (只向用户发出警告信息,但不关机) -h 关闭计算机并关闭电源 (常用) -n 不调用init进程关闭计算机 (不推荐) -c 取消正在执行的关机命令 -f 重启计算机,但不进行磁盘检测 -F 重启计算机,进行磁盘检测 -t(秒) 指定发出警告信息与删除信息时要延迟的秒数 【附加参数】 参数 相应介绍 时间 指关闭计算机的时间。 可以为详细时间,如22: 00,晚上10点关闭计算机 也可以作为详细分钟,如"+5",则5分钟后关机。 警告信息 可以是任意文本,信息,需要引号括起来才能使用。 例子: (1)、通过shutdown命令重启计算机 (加now则是立即重启) shutdown -r now (2)、设置1分钟以后关闭计算机,并在SSH中提示"1 minute after shutdown" shutdown -h +1 “1 minute after shutdown” shutdown1.jpg (3)、取消关机 若需要取消关机、重启操作,在SSH中可按Ctrl+C快捷键取消正在执行的命令。当然若重新登陆了SSH或其它情况,可通过一下代码取消 (定时) 关机。 http://www.kwx.gd/LinuxBase/Linux-shutdown.html http://blog.csdn.net/aloie/article/details/3141336 有点linux基础知识的,或者是系统的学习过计算机知识的人,没用过也能猜到,关机命令十有八九可能是shutdown。没错,实际上shutdown确实是liunx的关机命令,再配合各种选项,实现不同的关机效果。 然而在此之前,我却从没成功运行过shutdown。我是用普通用户登录,在终端下输入shutdown命令,结果显示 command not found。这就奇怪了,难道我的linux不支持这个命令?man了一下shutdown,大篇幅的说明告诉我,我的linux中是有这个命令的。但是什么执行无效呢? ...

2011-11-24 · 1 min · 91 words · -

ssh-keygen

ssh-keygen, linux 生成 ssh 密钥 ssh-keygen 是用于为 SSH 创建新的身份验证密钥对的工具。此类密钥对用于自动登录,单点登录和验证主机。 目前广泛的用在 linux 服务验证、git 身份验证上。 执行 ssh-keygen 可以生成一个密钥对, 这个密钥对称为公钥文件和私钥文件 ,例如: 使用 rsa 算法:id_rsa(私钥), id_rsa.pub(公钥) 使用 dsa 算法:id_dsa(私钥), id_dsa.pub(公钥) 在 ~/.ssh 目录下生成私钥 id_rsa 和公钥 id_rsa.pub 文件 # 优先使用 ed25519 # 默认的密钥目录 /home/user_0/.ssh, .ssh 目录不存在的话会自动创建. ssh-keygen -t ed25519 -C "foo" ssh-keygen -t ed25519 -C "foo" -f ~/tmp/foo # RSA 算法 ssh-keygen -t rsa -C "foo" ssh-keygen -t rsa -C "foo" -f ~/tmp/foo ssh-keygen -t ed25519 -f foo -C "bar" # -t 选择加密算法, -t ed25519 使用加密算法 ed25519, 可选值: ed25519, rsa, dsa # -f foo, 生成的密钥文件名, 不指定文件名的话, ed25519 算法默认的文件名是 id_ed25519, 也可以指定完整的路径, 如 /home/user_0/tmp/foo # -C "bar" 在公钥文件中添加注释,即为这个公钥“起个别名”(不是 id,可以更改)。 # 公钥放到服务器的这个文件里 vim ~/.ssh/authorized_keys # 打印公钥指纹, The -l option instructs to show the fingerprint in the public key # while the -f option specifies the file of the key to list the fingerprint for. ssh-keygen -l -f id_ed25519 # 从私钥生成公钥 # -y This option will read a private OpenSSH format file and print an OpenSSH public key to stdout. ssh-keygen -y -f id_ed25519 > id_ed25519.pub ssh-keygen -t rsa ssh-keygen -t rsa -b 4096 ssh-keygen -t ecdsa -b 521 # -t type 指定要创建的密钥类型。可以使用: "rsa1"(SSH-1) "rsa"(SSH-2) "dsa"(SSH-2) ssh-keygen -t rsa -C "Michael Ledin" -b 4096 -m "PEM" # -C comment # -b key 长度 # -t 类型: dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa scp /root/.ssh/id_rsa.pub root@192.168.10.184:/root ssh 192.168.10.184 cat /root/id_rsa.pub >> /root/.ssh/authorized_keys # ok,you will login 192.168.10.184 without input password. 推送公钥到服务器 ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.1.0.2 print SHA256 fingerprint # retrieve the SHA256 fingerprint ssh-keygen -lf /path/to/ssh/key # GitHub (MD5) fingerprint format ssh-keygen -E md5 -lf <fileName> ssh-keygen -A public key file: authorized_keys ...

2011-11-24 · 3 min · 543 words · -

initcwnd

initcwnd initial congestion window parameter (initcwnd) Changing initcwnd Adjusting the value of the initcwnd setting on Linux is simple. Assuming we want to set it to 10: Step 1: check route settings. sajal@sajal-desktop:$ ip route show 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100 metric 1 169.254.0.0/16 dev eth0 scope link metric 1000 default via 192.168.1.1 dev eth0 proto static sajal@sajal-desktop:$ Make a note of the line starting with default. ...

2011-11-22 · 1 min · 140 words · -

linux 运行级, runlevel

linux 运行级, runlevel 作为默认,REDHAT Linux 9.0在启动时会自动启动X-Window进入图形化操作界面。而许多Linux铁杆玩家已经习惯了在Console字符界面工作,或是有些玩家嫌X-Window启动太慢,喜欢直观快速的Console操作。 1.进入字符界面 为了在Linux启动时直接进入Console界面,我们可以编辑/etc/inittab文件。找到 id:5:initdefault: 这一行,将它改为 id:3:initdefault: 后重新启动系统即可。我们看到,简简单单地将5改为3,就能实现启动时进入X-Window图形操作界面或Console字符界面的转换,这是因为Linux操作系统有六种不同的运行级 (run level) ,在不同的运行级下,系统有着不同的状态,这六种运行级分别为: 0: 停机 (记住不要把initdefault 设置为0,因为这样会使Linux无法启动 ) 1: 单用户模式,就像Win9X下的安全模式。 2: 多用户,但是没有 NFS 。 3: 完全多用户模式,标准的运行级。 4: 一般不用,在一些特殊情况下可以用它来做一些事情。 5: X11,即进到 X-Window 系统。 6: 重新启动 (记住不要把initdefault 设置为6,因为这样会使Linux不断地重新启动) 。 其中运行级3就是我们要进入的标准Console字符界面模式。 2.自由转换字符界面和X-Window图形界面 在了解了启动自动进入X-Window图形操作界面和Console字符操作界面的转换后,也许你会想,这两种操作界面各有各的好处,我能不能"贪心"一点,同时拥有这两种操作界面呢?在无所不能的Linux操作系统中,这个要求当然是可以得到满足的。 在X-Window图形操作界面中按"Alt+Ctrl+功能键Fnn=1~6"就可以进入Console字符操作界面。这就意味着你可以同时拥有X-Window加上6个Console字符操作界面,这是一件多么令人振奋的事情啊! 在Console字符操作界面里如何回到刚才的X-Window中呢?很简单,按"Alt+Ctrl+F7"即可。这时Linux默认打开7个屏幕,编号为tty1tty7。X-Window启动后,占用的是tty7号屏幕,tty1tty6仍为字符界面屏幕。也就是说,用"Alt+Ctrl+Fn"组合键即可实现字符界面与X Window界面的快速切换。 Linux的老用户们都知道,X-Window是一个非常方便地图形界面,它能使用户用鼠标最简单的进行操作,但是它也有不少缺点: 比如启动和运行速度慢、稳定性不够、兼容性差、容易崩溃等。但是一旦X-Window系统出了问题,并不会使整个Linux系统的崩溃而导致数据丢失或系统损坏,因为当X-Window由于自身或应用程序而失去响应或崩溃时,我们可以非常方便地退出X-Window进入Console进行故障处理,要做的只是按"Alt+Ctrl+Backspace"键,这意味着只要系统没有失去对键盘的响应,X-Window出了任何问题,都可以方便地退出。

2011-11-21 · 1 min · 47 words · -

Closure Tools

Closure Tools Google已经基于Apache License 2.0把Closure Stylesheets开源,这种工具属于Closure Tools包之内,在处理CSS的时候很有用。Closure Stylesheets是一个Java程序,它向CSS中添加了变量、函数、条件语句以及混合类型,使得我们更易于处理大型的CSS文件。开发者可以使用Google stylesheets (GSS)这种工具来生成web应用程序或者网站所使用的真正的CSS文件。 http://www.infoq.com/cn/news/2011/11/Google-Closure-Stylesheets

2011-11-21 · 1 min · 11 words · -

观察者模式, Observer pattern

观察者模式, Observer pattern 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 观察者模式 (Observer)又称发布-订阅模式 (Publish-Subscribe:Pub/Sub)。它是一种通知机制,让发送通知的一方 (被观察方)和接收通知的一方 (观察者)能彼此分离,互不影响。 观察者模式 (有时又被称为发布-订阅模式、模型-视图模式、源-收听者模式或从属者模式) 是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过调用各观察者所提供的方法来实现。此种模式通常被用来实作事件处理系统。 此模式完美的将观察者和被观察的对象分离开。举个例子,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上。面向对象设计的一个原则是: 系统中的每个类将重点放在某一个功能上,而不是其他方面。一个对象只做一件事情。观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性。 观察者模式有很多实现方式,从根本上说,该模式必须包含两个角色: 观察者和被观察对象。在刚才的例子中,业务数据是被观察对象,用户界面是观察者。观察者和被观察者之间存在"观察"的逻辑关联,当被观察者发生改变的时候,观察者就会观察到这样的变化,并且做出相应的响应。如果在用户界面、业务数据之间使用这样的观察过程,可以确保界面和数据之间划清界限,假定应用程序的需求发生变化,需要修改界面的表现,只需要重新构建一个用户界面,业务数据不需要发生变化。 实现观察者模式的时候要注意,观察者和被观察对象之间的互动关系不能体现成类之间的直接调用,否则就将使观察者和被观察对象之间紧密的耦合起来,从根本上违反面向对象的设计的原则。无论是观察者"观察"观察对象,还是被观察者将自己的改变"通知"观察者,都不应该直接调用。 实现观察者模式有很多形式,比较直观的一种是使用一种"注册——通知——撤销注册"的形式。 classDiagram class Subscriber { <<interface>> } Publisher o-- Subscriber Subscriber <|.. ConcreateSubscriber Client ..> ConcreateSubscriber Client --> Publisher classDiagram class EventListener { <<interface>> } note for Editor "发布者 Publisher\n被观察对象 Subject" note for EventListener "订阅者 Subscriber\n观察者 Observer" note for EmailNotificationListener "具体订阅者" Demo --> Editor Editor o-- EventManager EventManager o-- EventListener EventListener <|.. EmailNotificationListener Demo ..> EmailNotificationListener EventListener <|.. LogOpenListener Demo ..> LogOpenListener 发布者, Publisher, 被观察对象, Subject 发布者 (Publisher) 会向其他对象发送值得关注的事件。 事件会在发布者自身状态改变或执行特定行为后发生。 发布者中包含一个允许新订阅者加入和当前订阅者离开列表的订阅构架。 ...

2011-11-20 · 3 min · 622 words · -

Gradle basic, command

Gradle basic, command create project structure gradle init --type java-application --dsl kotlin command gradle build install # archlinux sudo pacman -S gradle # mac brew install gradle windows install gradle scoop install main/gradle-bin download latest version of gradle from http://www.gradle.org/downloads.html extract the gradle package sudo emacs ~/.bashrc add the gradle to path. set PATH=$JAVA_HOME/bin:/home/wiloon/program/gradle-1.0-milestone-3/bin:$PATH export PATH restart the system # 更新依赖包 gradle build --refresh-dependencies # publish to maven gradle publish # create project structure mkdir java21 gradle init \ --type java-application \ --dsl kotlin \ --test-framework junit-jupiter \ --package com.wiloon.java21 \ --project-name java21 \ --no-split-project \ --java-version 21 gradle init --type java-library --project-name jvm-library --dsl kotlin gradle init --type java-library gradle init --type java-application #check module dependency gradle dependencies --configuration compileClasspath gradle :core:dependencies #specifies the build file. gradle -b xxx/xxx/build.gradle #The Application Plugin #apply plugin: 'application' # 打包-tar gradle distTar gradle distZip # 安装到本地 gradle installDist #convert maven project to gradle project gradle init --type pom #eclipse gradle eclipse gradle cleanEclipse #idea gradle idea gradle cleanIdea #skip test gradle build -x test #load local jars compile files('libs/jfx-2.3.8.jar') // project dependency dependencies { compile project(":project-name") } ...

2011-11-20 · 1 min · 212 words · -

STDIN STDOUT, STDERR

STDIN STDOUT, STDERR Unix/Linux/BSD 都有三个特别文件,分别 标准输入 即 STDIN , 在 /dev/stdin , 一般指键盘输入, shell里代号是 0 标准输出 STDOUT, 在 /dev/stdout, 一般指终端(terminal), 就是显示器, shell里代号是 1 标准错误 STDERR, 在 /dev/stderr 也是指终端(terminal), 不同的是, 错误信息送到这里 shell里代号是 2 stdout和stderr 有人说stdio是带缓冲的,stderr是不带缓冲的,这并不是指fd=1和fd=2这两个设备文件,这两个设备是字符设备,本身没有缓存。并且你看一个进程的1和2两个fd指向的其实是同一个终端设备文件 ls -l /proc/8669/fd/ total 0 lrwx------ 1 root root 64 4月 25 20:57 0 -> /dev/pts/7 lrwx------ 1 root root 64 4月 25 20:57 1 -> /dev/pts/7 lrwx------ 1 root root 64 4月 25 20:57 2 -> /dev/pts/7 所以,细想一下就知道,向1或2两个fd写东西,在内核里走的是完全相同的路径,不可能存在一会儿缓存一会儿不缓存的情况。 ...

2011-11-19 · 1 min · 169 words · -

TimeUnit

TimeUnit http://chenjumin.iteye.com/blog/2182171 //关于秒的常用方法 TimeUnit.SECONDS.toMillis(1) 1秒转换为毫秒数 TimeUnit.SECONDS.toMinutes(60) 60秒转换为分钟数 TimeUnit.SECONDS.sleep(5) 线程休眠5秒 TimeUnit.SECONDS.convert(1, TimeUnit.MINUTES) 1分钟转换为秒数 //TimeUnit.DAYS 日的工具类 //TimeUnit.HOURS 时的工具类 //TimeUnit.MINUTES 分的工具类 //TimeUnit.SECONDS 秒的工具类 //TimeUnit.MILLISECONDS 毫秒的工具类 http://www.importnew.com/7219.html TimeUnit是什么 TimeUnit是java.util.concurrent包下面的一个类,TimeUnit提供了可读性更好的线程暂停操作,通常用来替换 Thread.sleep(),在很长一段时间里 Thread的sleep() 方法作为暂停线程的标准方式,几乎所有Java程序员都熟悉它,事实上sleep方法本身也很常用而且出现在很多面试中。如果你已经使用过 Thread.sleep(),当然我确信你这样做过,那么你一定熟知它是一个静态方法,暂停线程时它不会释放锁,该方法会抛出 InterrupttedException 异常 (如果有线程中断了当前线程) 。但是我们很多人并没有注意的一个潜在的问题就是它的可读性。Thread.sleep() 是一个重载方法,可以接收长整型毫秒和长整型的纳秒参数,这样对程序员造成的一个问题就是很难知道到底当前线程是睡眠了多少秒、分、小时或者天。看看下面这个Thread.sleep()方法: Thread.sleep (2400000) 粗略一看,你能计算出当前线程是等待多长时间吗?可能有些人可以,但是对于大多数程序员来说这种写法的可读性还是很差的,你需要把毫秒转换成秒和分,让我们来看看另外一个例子,这个例子比前面那个例子可读性稍微好一点: Thread.sleep(4_60_1000); 这比前面那个例子已经好多了,但是仍然不是最好的,你注意到睡眠时间用毫秒,不容易猜出当前线程将等待4分钟。TimeUnit类解决了这个问题,通过指定DAYS、HOURS、MINUTES,SECONDS、MILLISECONDS和NANOSECONDS。java.utils.concurrent .TimeUnit 是Java枚举应用场景中最好的例子之一,所有TimeUnit都是枚举实例,让我们来看看线程睡眠4分钟用TimeUnit是如何使用的。 TimeUnit.MINUTES.sleep(4); // sleeping for 4 minutes 类似你可以采用秒、分、小时级别来暂停当前线程。你可以看到这比Thread的sleep方法的可读的好多了。记住TimeUnit.sleep()内部调用的Thread.sleep()也会抛出InterruptException。你也可以查看JDK源代码去验证一下。下面是一个简单例子,它展示如果使用TimeUnit.sleep()方法。 public class TimeUnitTest { public static void main(String args[]) throws InterruptedException { System.out.println("Sleeping for 4 minutes using Thread.sleep()"); Thread.sleep(4 * 60 * 1000); System.out.println("Sleeping for 4 minutes using TimeUnit sleep()"); TimeUnit.SECONDS.sleep(4); TimeUnit.MINUTES.sleep(4); TimeUnit.HOURS.sleep(1); TimeUnit.DAYS.sleep(1); } } 除了sleep的功能外,TimeUnit还提供了便捷方法用于把时间转换成不同单位,例如,如果你想把秒转换成毫秒,你可以使用下面代码: ...

2011-11-19 · 1 min · 93 words · -

commons-logging Log4J

commons-logging Log4J commons-logging vs Log4J Log4J是一个功能很强大的日志记录组件,它提供了丰富的日志记录功能,它本身和commons-logging没有什么关系,也就是说一个项目中可以单独使用Log4J来记录日志,而不需要引入commons-logging包,这样也能实现记录日志的功能,但是这样有一个不太好的地方就是如果你想使用其他的Logging组建,比如jdk1.4自带的logging框架,就不得不修改原有文件中所有使用了Log4J组建的代码。 这时,commons-logging就派上用场了,说白了commons-logging就是一个记录日志的统一接口,它定义了一套抽象的记录日志的接口,用户可以通过配置,来使用任何一个符合该接口的Logging组建。而commons-logging组建本身仅仅提供了一个很简单的记录日志的类SimpleLog,这个类的记录日志功能很有限。因此,通常情况下,会将Log4J组建与commons-logging组建一块儿使用,在程序代码中,使用commons-logging的接口方法来记录日志,而后台实际使用的是Log4J组建。 commons-logging组建使用具体的Log组建的顺序如下 如果定义了org.apache.commons.logging.Log系统参数,则使用指定的Logging实现; 如果在CLASSPATH里发现了Log4J,则使用Log4J; 如果使用的是JDK1.4,则使用JDK1.4内置的Logging框架; 如果都没有找到,则使用Commons Logging内置的简单Log实现。 我们在做项目时,日志的记录是必不可少的一项任务,而我们通常是使用 apache 的 log4j 日志管理工具。然而,在项目中,我们经常会看到两个 jar 包: commons-logging.jar 和 log4j.rar。为什么我们在使用 log4j 的同时还要引入 commons-logging.jar 呢,或者说不用 commons-logging.jar 可不可以,这两者之间到底是怎么的一种关系呢? 作为记录日志的工具,它至少应该包含如下几个组成部分(组件): Logger 记录器组件负责产生日志,并能够对日志信息进行分类筛选,控制什么样的日志应该被输出,什么样的日志应该被忽略。它还有一个重要的属性 - 日志级别。不管何种日志记录工具,大概包含了如下几种日志级别: DEBUG, INFO, WARN, ERROR 和 FATAL。 Level 日志级别组件。 Appender 日志记录工具基本上通过 Appender 组件来输出到目的地的,一个 Appender 实例就表示了一个输出的目的地。 Layout Layout 组件负责格式化输出的日志信息,一个 Appender 只能有一个 Layout。 我们再来看看 log4j.jar,打开 jar 包,我们可以看到 Logger.class(Logger),Level.class(Level), FileAppender.class(Appender), HTMLLayout.class(Layout)。其它的我们先忽略不看,这几个字节码文件正好是记录日志必不可少的几个组件。 接下来看看 commons-logging 中的 org.apache.commons.logging.Log.java 源码: Java代码 package org.apache.commons.logging; public interface Log { ...

2011-11-18 · 2 min · 331 words · -

Debian/Ubuntu 系统 Update-rc.d

Debian/Ubuntu 系统 Update-rc.d https://wangyan.org/blog/ubuntu-update-rc-d.html Ubuntu或者Debian系统中update-rc.d命令,是用来更新系统启动项的脚本。这些脚本的链接位于/etc/rcN.d/目录,对应脚本位于/etc/init.d/目录。在了解update-rc.d命令之前,你需要知道的是有关Linux 系统主要启动步骤,以及Ubuntu中运行级别的知识。 一、Linux 系统主要启动步骤 读取 MBR 的信息,启动 Boot Manager。 加载系统内核,启动 init 进程, init 进程是 Linux 的根进程,所有的系统进程都是它的子进程。 init 进程读取 /etc/inittab 文件中的信息,并进入预设的运行级别。通常情况下 /etc/rcS.d/ 目录下的启动脚本首先被执行,然后是/etc/rcN.d/ 目录。 根据 /etc/rcS.d/ 文件夹中对应的脚本启动 Xwindow 服务器 xorg,Xwindow 为 Linux 下的图形用户界面系统。 启动登录管理器,等待用户登录。 二、运行级别 Ubuntu中的运行级别 0 (关闭系统) 1 (单用户模式,只允许root用户对系统进行维护。) 2 到 5 (多用户模式,其中3为字符界面,5为图形界面。) 6 (重启系统) 切换运行级别 init [0123456Ss] 例如: init 0 命令关机; init 6 命令重新启动 启动项管理工具 sudo apt-get install sysv-rc-conf //或者使用带gui的工具bum sudo sysv-rc-conf 三、update-rc.d命令详解 ...

2011-11-18 · 1 min · 119 words · -

分布式ID, 雪花算法

分布式ID, 雪花算法 https://zhuanlan.zhihu.com/p/85837641 雪花算法这一在分布式架构中很常见的玩意,但一般也不需要怎么去深入了解,一方面一般个人项目用不到分布式之类的大型架构,另一方面,就算要用到,市面上很多ID生成器也帮我们完成了这项工作。 分布式ID的特点 全局唯一性 不能出现有重复的ID标识,这是基本要求。 递增性 确保生成ID对于用户或业务是递增的。 高可用性 确保任何时候都能生成正确的ID。 高性能性 在高并发的环境下依然表现良好。 分布式ID的常见解决方案 UUID Java自带的生成一串唯一随机36位字符串 (32个字符串+4个“-”)的算法。它可以保证唯一性,且据说够用N亿年,但是其业务可读性差,无法有序递增。 SnowFlake 今天的主角雪花算法,它是Twitter开源的由64位整数组成分布式ID,性能较高,并且在单机上递增。 具体参考: https://github.com/twitter-archive/snowflake UidGenerator UidGenerator是百度开源的分布式ID生成器,其基于雪花算法实现。 具体参考: https://github.com/baidu/uid-generator/blob/master/README.zh_cn.md Leaf Leaf是美团开源的分布式ID生成器,能保证全局唯一,趋势递增,但需要依赖关系数据库、Zookeeper等中间件。 具体参考: https://tech.meituan.com/MT_Leaf.html 雪花算法的概要 SnowFlake是Twitter公司采用的一种算法,目的是在分布式系统中产生全局唯一且趋势递增的ID。 组成部分 (64bit) 1.第一位 占用1bit,其值始终是0,没有实际作用。 2.时间戳 占用41bit,精确到毫秒,总共可以容纳约69年的时间。 3.工作机器id 占用10bit,其中高位5bit是数据中心ID,低位5bit是工作节点ID,做多可以容纳1024个节点。 4.序列号 占用12bit,每个节点每毫秒0开始不断累加,最多可以累加到4095,一共可以产生4096个ID。 SnowFlake算法在同一毫秒内最多可以生成多少个全局唯一ID呢:: 同一毫秒的ID数量 = 1024 X 4096 = 4194304

2011-11-12 · 1 min · 49 words · -