本章基本为复制粘贴出一些点
目录
第一章 linux 是什么
1.1 linux 是什么
1.1.1 linux 是什么
1.Linux就是一套操作系统!Linux就是核心与系统呼叫接口那两层,应用程序不算哦
2.每种操作系统都是在他专门的硬件机器上面运行的喔! 这点得要先了解。 不过,Linux由于是Open Source的操作系统,所以他的程序代码可以被修改成适合在各种机器上面运行的, 也就是说,Linux是具有『可移植性』
3.Linux提供了一个完整的操作系统当中最底层的硬件控制与资源管理的完整架构, 这个架构是沿袭Unix良好的传统来的,所以相当的稳定而功能强大
1.1.2 linux 之前 unix的历史
1.兼容分时系统CTSS——>1969 ken Ehompson Unix原型(unics)
(Thompson 的这个文件系统有两个重要的概念,分别是:
所有的程序或系统装置都是档案
不管建构编辑器还是附属档案,所写的程序只有一个目的,且要有效的完成目标 )
2.unix正式诞生 Ritchie 用c 写出第一个正式核心
3.重要的unix——bsd的诞生 1977
4. 1979 重要的system V架构与版权宣告
1979 年时,AT&T推出 System V 第七版 Unix 后,这个情况就有点改善了。 这一版最重要的特色是可以支持x86架构的个人计算机系统,也就是说 System V 可以在个人计算机上面安装与运作了
因为AT&T由于商业的考虑,以及在当时现实环境下的思考,于是想将Unix的版权收回去。 因此, AT&T在1979年发行的第七版Unix中,特别提到了 『不可对学生提供原始码』的严格限制! 同时,也造成Unix业界之间的紧张气氛,并且也引爆了很多的商业纠纷
5.1984X86架构的minix操作系统于两年后诞生
6.GNU计划
Richard Mathew Stallman(史托曼) 分享 使用Unix开发 GNU的通用公共许可证
7.1988年:图形接口XFree86计划 1991年:芬兰大学生Linus Torvalds的一则简讯
1.1.3关于GNU计划、自由软件与开放原始码
Open Source就是,软件在发布时,同时将作者的原始码一起公布的意思!
自由的真谛(互利,相互学习)
自由软件的版权GNU GPL(通用公共许可证 )
1.自由软件商业行为:
目前自由软件工作者,他们所赖以维生的,几乎都是在『服务』这个领域呢! 毕竟自由软件并不是每个人都会撰写,有人有需要你的自由软件时,他就会请求你的协助, 此时,你就可以透过服务来收费了! 这样来说,自由软件确实还是具有商业空间的喔
2.开放原始码:
GPL 也是合乎 Open source 所定义的授权之一,只是它更着重于保护自由软件本身的学习与发展就是了! 那如果你想要开发开源软件时, 到底使用哪种授权比较好呢? 其实跟妳对这个软件的未来走向的定义有关啦! 简单的来说,如果你的软件未来你允许它用于商业活动中, 可以考虑 BSD 之类的授权,如果你的软件希望少一些商业色彩,GPLv2 大概是不二选择啰! 那如果你的软件允许分支开发, 甚至可以考虑分成两种版本分别授权哩! ^_^
3.专属软件/专利软件(close source)
Close source的程序则仅推出可执行的二进制程序(binary program)而已。 这种软件的优点是有专人维护,你不需要去更动他;缺点则是灵活度大打折扣,用户无法变更该程序成为自己想要的样式! 此外,若有木马程序或者安全漏洞,将会花上相当长的一段时间来除错! 这也是所谓专利软件(copyright)常见的软件出售方式
- Freeware:
http://en.wikipedia.org/wiki/Freeware
不同于Free software, Freeware为『免费软件』而非『自由软件! 』虽然它是免费的软件,但是不见得要公布其原始码, 端看释出者的意见啰! 这个东西与Open Source毕竟是不太相同的东西喔! 此外,目前很多标榜免费软件的程序很多都有小问题! 例如假藉免费软件的名义,实施用户数据窃取的目的! 所以『来路不明的软件请勿安装! 』
- Shareware:
http://en.wikipedia.org/wiki/Shareware
共享件这个名词就有趣了! 与免费软件有点类似的是,Shareware在使用初期,它也是免费的,但是, 到了所谓的『试用期限』之后,你就必须要选择『付费后继续使用』或者『将它移除』的宿命~ 通常,这些共享件都会自行撰写失效程序, 让你在试用期限之后就无法使用该软件
1.2 Torvalds的Linux发展
1.2.1 托瓦兹
1.2.2 对386硬件的多任务测试
探索386的硬件性能
1.2.3 初次释出Linux 0.02
为了让自己的Linux能够兼容于Unix系统,于是托瓦兹开始将一些能够在Unix上面运作的软件拿来在Linux上面跑。 不过,他发现到有很多的软件无法在Linux这个核心上运作。 这个时候他有两种作法,一种是修改软件,让该软件可以在Linux上跑, 另一种则是修改Linux,让Linux符合软件能够运作的规范! 由于Linux希望能够兼容于Unix,于是托瓦兹选择了第二个作法『修改Linux』! 为了让所有的软件都可以在Linux上执行,于是托瓦兹开始参考标准的POSIX规范
POSIX是可携式操作系统接口(Portable Operating System Interface)的缩写,重点在规范核心与应用程序之间的接口, 这是由美国电器与电子工程师学会(IEEE)所发布的一项标准喔!
1.2.4 Linux 的发展:虚拟团队的产生
1.单一个人维护阶段 广大黑客志工加入阶段
核心是一组程序,如果这组程序每次加入新的功能都得要重新编译与改版的话会变成如何? 想象一下,如果你只是换了显示适配器就得要重新安装新的Windows操作系统,会不会傻眼? 模块化之后,原本的核心程序不需要更动,你可以直接将他想成是『驱动程序』即可! ^_^
2.核心功能细部分工发展阶段
特别值得注意的是,这些托瓦兹的Linux发展副手,以及自愿传送修补程序的黑客志工, 其实都没有见过面,而且彼此在地球的各个角落,大家群策群力的共同发展出现今的Linux, 我们称这群人为虚拟团队! 而为了虚拟团队数据的传输,于是Linux便成立的核心网站: http://www.kernel.org!
1.2.5 Linux的核心版本
1.Linux的核心版本编号有点类似如下的样子:
3.10.0-123.el7.x86_64 主版本.次版本.釋出版本-修改版本 |
虽然编号就是如上的方式来编的,不过依据 Linux 核心的发展期程,核心版本的定义有点不太相同喔
2.主、次版本为奇数:发展中版本(development
主、次版本为偶数:稳定版本(stable) Linux核心是使用GPL的授权
3.主线版本、长期维护版本(longterm version)
不过,这种奇数、偶数的编号格式在 3.0 推出之后就失效了。 从 3.0 版开始,核心主要依据主线版本 (MainLine) 来开发,开发完毕后会往下一个主线版本进行
而旧的版本在新的主线版本出现之后,会有两种机制来处理,一种机制为结束开发 (End of Live, EOL),亦即该程序代码已经结束,不会有继续维护的状态。 另外一种机制为保持该版本的持续维护,亦即为长期维护版本 (Longterm)! 例如 3.10 即为一个长期维护版本,这个版本的程序代码会被持续维护,若程序代码有 bug 或其他问题, 核心维护者会持续进行程序代码的更新维护喔
4. Linux 核心版本与 Linux 发布商版本
Linux核心版本与distribution (下个小节会谈到) 的版本并不相同,很多朋友常常上网问到:『我的Linux是7.x版,请问....』之类的留言, 这是不对的提问方式,因为所谓的Linux版本指的应该是核心版本, 而目前最新的核心版本应该是4.0.0(2015/04) 才对,并不会有7.x的版本出现的。
妳常用的Linux系统则应该说明为distribution才对! 因此,如果以CentOS这个distribution来说, 妳应该说:『我用的Linux是CentOS这个 distribution,版本为7.x 版,请问....』才对喔
1.2.6 Linux distributions
好了,经过上面的说明,我们知道了Linux其实就是一个操作系统最底层的核心及其提供的核心工具。 他是GNU GPL授权模式,所以,任何人均可取得原始码与可执行这个核心程序,并且可以修改。 此外,因为Linux参考POSIX设计规范,于是兼容于Unix操作系统,故亦可称之为Unix Like的一种
1.可完全安装的Linux发布套件
Linux + 各种软件』就可以完成一个相当完整的操作系统了 。 不过,要完成这样的操作系统...... 还真难~ 因为Linux早期都是由黑客工程师所开发维护的,他们并没有考虑到一般用户的能力
为了让用户能够接触到Linux,于是很多的商业公司或非营利团体, 就将Linux Kernel(含tools)与可运行的软件整合起来,加上自己具有创意的工具程序, 这个工具程序可以让用户以光盘/DVD或者透过网络直接安装/ 管理Linux系统。 这个『Kernel + Softwares + Tools + 可完全安装程序』的咚咚,我们称之为Linux distribution, 一般中文翻译成可完全安装套件,或者Linux发布商套件
由于GNU的GPL授权并非不能从事商业行为,于是很多商业公司便成立来贩卖Linux distribution。 而由于Linux的GPL版权宣告,因此,商业公司所贩卖的Linux distributions通常也都可以从Internet上面来下载的
为了让所有的Linux distributions开发不致于差异太大,且让这些开发商在开发的时候有所依据,还有Linux Standard Base (LSB)等标准来规范开发者,以及目录架构的 File system Hierarchy Standard (FHS)标准规范! 唯一差别的,可能就是该开发者自家所开发出来的管理工具,以及套件管理的模式吧!
鸟哥认为distributions主要分为两大系统,一种是使用RPM方式安装软件的系统,包括Red Hat, Fedora, SuSE等都是这类; 一种则是使用Debian的dpkg方式安装软件的系统,包括Debian, Ubuntu, B2D等等
RPM 软件管理 | DPKG 软件管理 | 其他未分类 | |
商业公司 | RHEL (Red Hat 公司) SuSE (Micro Focus) | Ubuntu (Canonical Ltd.) | |
社群单位 | Fedora CentOS OpenSuSE | Debian B2D | Gentoo |
1.3 Linux当前应用的角色
1.3.1 企业环境的利用
1.网络服务器:
袭了Unix高稳定性的良好传统,Linux上面的网络功能特别的稳定与强大! 此外,由于GNU计划与Linux的GPL授权模式,让很多优秀的软件都在Linux上面发展, 且这些在Linux上面的服务器软件几乎都是自由软件
2.关键任务的应用(金融数据库、大型企业网管环境)
举例来说,金融业最重要的就是那些投资者、帐户的数据了,这些数据大多使用数据库系统来作为存取接口, 这些数据很重要吧! 很多金融业将这么重要的任务交给了Linux了! 你说Linux厉不厉害啊
3.学术机构的高效能运算任务
1.3.2 个人环境的使用
1. 桌面计算机:
上网浏览+实时通讯(Skype, FB, Google, Yahoo...) ;
字处理;网络接口之公文处理;办公室软件(Office Software)处理数据;收发电子邮件;
2. 手持系统(PDA、手机):
Google 成立了开放手机联盟 (Open Handset Alliance),并且推出 Android 手机专用操作系统! 而 Android 其实就是 Linux 核心的一支,只是专门用来针对手机/平板这类的 ARM 机器所设计的
3. 嵌入式系统
而要让硬件系统顺利的运作就得要撰写合适的操作系统才行。 那硬件系统除了我们常看到的计算机之外, 其实家电产品、PDA、手机、数字相机以及其他微型的计算机配备也是硬件系统啦! 这些计算机配备也都是需要操作系统来控制的! 而操作系统是直接嵌入于产品当中的,理论上你不应该会更动到这个操作系统, 所以就称为嵌入式系统啦
包括路由器、防火墙、手机、IP分享器、交换器、机器人控制芯片、家电用品的微计算机控制器等等,都可以是Linux操作系统喔! 酷学园内的Hoyo大大就曾经介绍过如何在嵌入式设备上面加载Linux! 你桌面上用来备份的 NAS 说不定内部也是精简化过的 Linux 系统啊
1.3.3 云端运用
现在(3)由于行动装置的发达,产生的庞大数据需要集中处理,因而产生云端系统的需求! 让信息/资源集中管理!
1.云程序
云程序的底层就是 Linux ,而云程序搭建出来的虚拟机,内容也是 Linux 操作系统哩! 用的越来越多啊!
所谓的『虚拟化』指的是:在一部实体主机上面仿真出多个逻辑上完全独立的硬件,这个假的虚拟出来的硬件主机,可以用来安装一部逻辑上完全独立的操作系统! 因此,透过虚拟化技术,你可以将一部实体主机安装多个同时运作的操作系统 (非多重引导),以达到将硬件资源完整利用的效果。 很多 ISP 就是透过贩卖这个虚拟机的使用权来赚钱的喔
2.端设备
既然运算资源都集中在云里面了,那我需要联机到云程序的设备应该可以越来越轻量吧? 当然没错! 所以智能型手机才会这么热门啊! 很多时候你只要有智能型手机或者是平板,联机到公司的云里面去,就可以开始办公了哩
1.4 Linux 该如何学习
1.4.1 从头学习Linux基础
网络基础与安全也很重要,例如TCP/IP的基础知识,网络路由的相关概念等等
1.计算器概论与硬件相关知识:
2.先从Linux的安装与指令学起:
3.Linux操作系统的基础技能:
4.务必学会vi文书编辑器:
5.Shell与Shell Script的学习:
6.一定要会软件管理员:
7.网络基础的建立:
8.如果连网络基础都通过了,那么网站的架设对你来说,简直就是『太简单啦!
计算机基础 (http://www.study-area.org/compu/compu.htm)
网络基础 (http://www.study-area.org/network/network.htm)
1.4.2 选择一本易读的工具书
1.4.3 实作再实作
1.4.4 发生问题怎么处理啊? 建议流程是这样..
1.在自己的主机/网络数据库上查询How-To或FAQ
2.注意讯息输出,自行解决疑难杂症:
呵呵! 所以啰,请注意,发生错误的时候,请先自行以屏幕前面的信息来进行 debug(除错)的动作,然后,如果是网络服务的问题时,请到/var/log/这个目录里头去查阅一下 log file(登录档),这样可以几乎解决大部分的问题了!
3.搜寻过后,注意网络礼节,讨论区大胆的发言吧:
4.Netman大大给的建议:
在Windows里面,程序有问题时,如果可能的话先将所有其它程序保存并结束,然后尝试按救命三键 (Ctrl+Alt+Delete),将有问题的程序(不要选错了程序哦)『结束工作』,看看能不能恢复系统。 不要动不动就直接关机或reset。
有系统地设计档案目录,不要随便到处保存盘案以至以后不知道放哪里了, 或找到档案也不知道为何物。
养成一个做记录的习惯。 尤其是发现问题的时候, 把错误信息和引发状况以及解决方法记录清楚,同时最后归类及定期整理。 别以为您还年轻,等你再弄多几年计算机了, 您将会非常庆幸您有此一习惯。
如果看在网络上看到任何好文章,可以为自己留一份copy,同时定好题目,归类存盘。 (鸟哥注:需要注意知识产权! )
作为一个用户,人要迁就机器;做为一个开发者,要机器迁就人。
学写 script 的确没设定 server 那么好玩,不过以我自己的感觉是:关键是会得『偷』, 偷了会得改,改了会得变,变则通矣。
在Windows里面,设定不好设备,您可以骂它;在Linux里面,如果设定好设备了,您得要感激它
1.4.5 鸟哥的建议(重点在solution的学习)
﹗