鸟哥的linux私房菜
第1章 linux是什么与如何学习
1.1 Linux是什么
Linux的核心是1991年由托瓦兹(Linus Torvalds)基于386的计算机开发的;
Linux就是一套操作系统,拥有操作系统的核心(Kernel)和系统呼叫(System Call)两层组成;
软件移植:同一套操作系统无法在不同的硬件平台上运行,x86架构上运行的windows如果放在IBM的Power cpu上运行,需要参考Power架构的硬件功能函数并修改Windows操作系统程序代码。我们将软件通过改版来适应不同平台的动作叫做软件移植;
2006年以前APPle公司请IBM公司开发计算机硬件,使用的是【Power 架构CPU】,Apple公司在此基础上发展自家的Mac,而Windows是基于x86架构开发的操作系统,因此Windows无法安装在苹果计算机上;2006年之后,Apple公司转而请Intel公司设计硬件架构,也就是苹果电脑的硬件架构已经转为【x86架构】,因此2006年之后的苹果计算机可能可以安装Windows操作系统,不过可能需要自己处理一些硬件的兼容性问题;
Windows是基于x86架构开发的操作系统,其他架构无法运行;而Linux是Open Source的操作系统,可以修改成适合各种架构的机器上,基于强大的【可移植性】;
1.1.2 Linux之前,Unix的历史
1960年代初期,麻省理工学院(MIT)发展了 兼容分时系统(CTSS,Compatible Time-Sharing System),可以多台终端机(terminal)利用主机资源,但是提供的终端机太少;
1965年前后,贝尔实验室(Bell)、麻省理工学院(MIT)、通用电器(GE)发起 Multics 计划用于扩大支持终端机的数量,后来由于Multics计划进度延后,贝尔实验室退出;
1969年,Ken Thompson用四个星期的时间,以汇编语言(Assembler)开发出了一组【核心程序】,同时包括一些【核心工具程序】,以及一个小小的【文件系统】,命名为 Unics,是Unix的雏形;但是Unics由于是汇编语言开发而不是高阶语言,安装到其他架构机器需要重新编写;
1973年,Thompson与Ritchie将Unics改用高阶程序语言撰写,现有B语言核心效能不好,Ritchie将B语言改写成C语言,以C语言改写和编译Unics的核心,发行了Unix正式版;
1977年,加州伯克利大学Bill Joy基于Unix原始代码发展适合自己机器的版本,并增加工具软件和编译程序,命名为Berkeley Software Distribution(BSD),BSD是Unix的重要分支,Bill Joy也是Unix业者【Sun公司】的创办者,Sun公司就是基于BSD发展的核心进行自己的商业Unix版本发展的,后来可以安装在x86硬件架构上面的FreeBSD就是BSD改版;
1979年,早先的Unix被各家厂商改写成适合自己机器的版本但仅能支持自家硬件,所以早先的Unix只能用于服务器(Server)或者是大型工作站(Workstation),1979年,贝尔实验室隶属于的美国电话电报公司(AT&T)推出基于Unix研发的System V第七版开始支持x86个人计算机,但是限制了Unix版权不能对学生提供原始码;
目前被称为 纯种Unix 指的就是AT&T公司的System V系统 和 加州伯克利大学的BSD系统;
1984年,Andrew Tanenbaum(谭振宁)为了Unix的教学,考虑到1979年Unix第七版在Intelx86架构上的移植,完全不看Unix核心原始码,撰写了Minix系统,但是谭宁邦教授认为Minix主要用于教育,很受欢迎但发展一般;
1984年,Richard Mathew Stallman(斯托尔曼,网络ID自称RMS)开始GNU计划,目的:建立一个自由开放的Unix操作系统(FreeUnix),创立了 自由软件基金会(FSF,Free Software Foundation),GNU的几个重要软件有:Emacs程序编辑器,GNU C Compiler(gcc)C语言编译程序,GNU C Library的C语言函数库,BASH shell,这些是在1990年左右完成;
1985年,Stallman与律师起草了 通用公共许可证(General Public License,GPL),称为copyleft;
1988年,鉴于 图形用户接口(Graphical User Interface,GUI)需求加重,MIT成立非营利组织XFree86,XFree86的GUI界面在Linux 1.0版本1994年发行时被整合与Linux中;
1991年,芬兰的赫尔辛基大学的Linus Torvalds在BBS发消息称,使用bash,gcc等GNU工具开发了一个小核心程序可以在Intel 386机器上运行;
1.1.3 关于GNU计划、自由软件、开放源代码
-
GNU与自由软件:
1984年Stallman创立GNU计划于自由软件基金会(FSF),并撰写通用公共证书GPL用于自由软件专利保护,GPL授权的软件修改后必须还要有GPL授权,自由软件不能单纯贩卖但是可以贩卖售后服务,如Linux光盘的售后服务以及自己推出的Linux版本上开发出的软件的使用权等;Free Software为自由软件而非免费软件;目前GPL授权已经发展到第三版GPLv3,但是使用最广泛的还是GPLv2,包括Linux核心还是使用的GPLv3;
-
开源软件
1988年,成立了【开放源代码促进会(Open Source Initiative)】,倡导开放源代码(Open Source),解决商业公司使用Free Software自由软件代码时必须还要GPL授权的问题,开源软件的代码可以作为商业软件的一部分而无需使用与原来开源代码相同的授权来发布;
-
专利软件与免费软件
专利软件也有免费使用的,授权模式有Freeware和Shareware两种:
(1)Freeware指免费软件,使用免费但不一定要公布源代码,可能存在却去用户信息等安全问题;
(2)Shareware指共享软件,使用初期免费,到试用期限后必须付费继续使用或者移除,通常这些共享软件自带失效程序,使用期限过后无法使用;
1.2 Torvalds的Linux发展
1.2.1 与Minix之间
Torvalds通过自己的Intel386接触学习了Minix系统;
1.2.2 对386硬件的多任务测试
早期的Intel x86架构计算机对于多任务处理不佳,但是386计算机有很大改善;
1.2.3 初次发布Linux 0.0.2
Minix虽然很棒但是谭宁邦不愿意进行功能加强;
利用BASH Shell 以及gcc编译程序等自由软件,编写了并公布了Linux 0.0.2;
修改Linux使其兼容Unix;
1.2.4 Linux的发展:虚拟团队的产生
单一个人维护阶段;
广大黑客志愿者加入阶段:先求能跑,再要改良,进步神速(要求虚拟内存一星期就推出新版Linux);逐渐发展成具有模块功能;
核心功能细节分工发展阶段:1994年完成了Linux核心正式版 Linux 1.0;
1.2.5 Linux 的核心版本
3.10.0 -123.e17.x86_64 主版本.次版本.释出版本-修改版本;
2.6.x版本之前,次版本为奇数:发展中版本,次版本为偶数:稳定版本;
3.0版本之后:
核心主要依据主线版本(MainLine)开发,旧版本会结束开发(End of Live,EOL)或者成为长期维护版本(Longterm),开发者最好选择长期支持版本;
Linux核心版本 与 Linux发行版本
Linux核心版本与centos 这个distribution(发行版)
1.2.6 Linux distribution
Linux是一个操作系统最底层的核心及其提供的核心工具,是GNU GPL授权模式;
Linux参考POSIX设计模式,所以兼容与Unix操作系统,是一种Unix Like;
-
可完全安装的Linux发布套件
Linux可谓是实现了GNU最初的梦想:建立一个自由开放的Unix操作系统,但是Torvalds开发的Linux只有Kernel和Kernel提供的工具,【Linux+各种软件】本来可以组成完整的操作系统,但是这就要求使用者自己的能力,许多公司团体将Linux Kernel(含tools)与可以运行的软件整合起来,加上自己具有创意的工具程序来安装管理Linux,形成自己的Linux distribution,也就是【Kernel + Tools + Softwares + 可完全安装程序】=Linux distribution;
-
各大Linux Distribution 的主要异同:支持标准!
各大Linux Distribution都是使用Linux的http://www.kernel.org所释出的kernel,不同的Linux Distributions在开发时也都有Linux Standard Base(LSB)、File system Hierarchy Standard(FHS)等标准规范开发者,所选择的软件也都是知名软件,如网页服务器的Apache、电子邮件服务器的Postfix/sendmail,文件服务器的Samba等,所以不同Linux distribution除了开发者自家开发出来的管理工具,以及套件管理的模式,其他差异不大,所以差异在架构的严谨度和选择的套件内容;
现在distribution主要有两大系统:
(1)使用【RPM方式】安装软件的系统,如Red Hat公司的RHEL,Fedora,SuSE,OpenSuSE等;
(2)使用【DPKG方式】安装软件的系统,如ubuntu,Debian,B2D等;
此外,还有考虑效能至上的Gentoo;
光盘开机进入Linux的Live CD版本,也就是KNOPPIX这个Linux distribution;
1.3 Linux 当前应用的角色
1.3.1 企业环境的利用
-
网络服务器:WWW,Mail Server,File Server等;硬件厂商支持比较广泛的是Red Hat以及SuSE两个大厂的Linux;
-
关键任务的应用(金融数据库):个人计算机性能大幅提高而且便宜,许多企业慢慢开始兼容x86环境,为了符合企业使用的Unix操作系统平台上的众多软件,转而开始符合Unix操作系统标准而且可以在x86架构硬件平台上运行的Linux;特别是企业的关键任务,例如金融企业的数据库;
-
学术机构的高效能运算任务:Linus Torvalds是一个性能癖,所以Linux运算能力强大,又因为具有支持度相当广泛的GCC编译软件,所以Linux广泛用于学术机构的高性能运算任务;
1.3.2 个人环境的使用
-
桌面计算机:Desktop计算机,用于上网浏览、实时通讯、收发电子邮件、Office、网络接口的公文处理系统,必须有窗口,Linux 1.0版本就已经与X Window System结合,X Window System是Linux上的一套软件;近年来美观的KDE与GNOME窗口接口,搭配可兼容微软Office的OpenOffice/LibreOffice,配合功能强大速度又快的Firefox浏览器,以及可下载信件的雷鸟(thunderbird)软件(类似微软的Outlook Express),可脸上多种实时通讯的Pidgin;
-
手持系统():iPhone 4在2010年面世之后,智能手机取代商务掌上电脑(PDA,personal digital Assistant),小笔记本电脑也被平板电脑(Pad)打败;2007年Google成立 开放手机联盟(Open Handset Alliance)推出安卓(Android)手机专用操作系统,Android就是基于Linux内核;
-
嵌入式系统:嵌入式系统是直接嵌入到硬件产品中,理论上不会更动到的操作系统;
1.3.3 云端应用
早期大型主机昂贵,主机集中运算分配到多个终端机;2010年前个人计算机运算能力增强,大部分运算可以在个人计算机上运算,不需要到大型主机取得运算资源;由于便携设备的发展,庞大的数据需要集中处理,产生云计算,集中管理信息资源,终端设备联机云设备取得运算资源随时随地办公;
-
云程序:公司自己内部的私有云;大型互联网服务提供商(ISP,Internet Service Provider)提供公有云给企业用户或个人用户使用ISP虚拟化产品,可以代管Web、Mail、系统开发环境等操作系统;
-
端设备:越来越轻量级,智能手机、平板、树莓派(Raspberry Pi)等;
1.4 linux 该如何学习
舍弃X Window环境,尽量使用指令模式学习Linux;例如Linux本身捉不到网络卡,该如何以X Window使用这个硬件呢;(X Window通常会吃掉很多系统资源)
1.4.1 从头学习Linux基础
(1)计算机概论和硬件基础知识;
(2)先从Linux的安装与指令学起;
(3)Linux操作系统的基础功能;
(4)务必学会vi文字编辑器:所有的Unix like系统都有vi,会被许多软件所呼叫;
(5)Shell和Shell Script的学习:正规表示法、管线命令、数据流重导向等,Shell Script以后用于便捷的管理服务器;
(6)一定要会软件管理员:Tarball / RPM / DPKG / YUM / APT等软件管理员的安装方式安装驱动和额外软件;
(7)网络基础的建立:IP、路由等;
计算机基础:http://www.study-area.org/compu/compu.htm
网络基础:http://www.study-area.org/network/network.htm
1.4.2 选择一本易读的工具书
http://linux.vbird.org/linux_basic/012howtolinux/0120howtolinux_1.php
1.4.3 实践实践实践
实践经验分享:http://www.study-area.org
1.4.4 发生问题怎么处理
(1)在自己的主机/网络数据库查询How-To或者FAQ(Frequently Asked Questions):
Linux 自己的文件数据:/usr/share/doc(自己的Linux系统中);
CLDP中文文件计划:http://www.linux.org.tw/CLDP/
The Linux Documentation Project:http://www.tldp.org/:TLDP几乎列出了所有Linux上面可以看到的文献数据,各种How-To,虽然是英文的;
鸟哥:http://linux.vbird.org/Searching.php/
(2)注意输出信息,自行解决疑难杂症
如果是网络服务的问题,请到/var/log/这个目录中查阅 log file(登陆文件);
(3)搜寻过后,整理讯息,讨论区询问
酷学园讨论区:http://phorum.study-area.org
鸟哥的私房菜讨论区:http://phorum.vbird.org
(4)Netman大大给的建议
-
Windows里出现问题,现将所有其他程序保存并结束,使用救命三连键(Ctrl + Alt + Delete)结束工作有问题的程序,不要动不动就直接关机或重启;
-
有系统的设计文件目录;
-
养成做记录的习惯,出问题后,把错误信息和引发状况以及解决方法记录,归类并定期整理;
-
网络上的好文章自己留一份copy,定好题目,归类存档;
-
使用者,要迁就机器;开发者,要机器迁就人;
-
Windows里面设定不好,骂他;Linux里面设定好设备,感激它;
1.4.5 鸟哥的建议(重点在solution的学习)
-
选择Shell深入玩一下,培养兴趣;(没有花时间去了解一下,不要说没兴趣)
-
多回答他人的问题;
-
多参加讨论【酷学园Study Area,SA】
-
不要有门户之见,认为某个产品某个公司产品不好,多接触,不排斥任何学习的机会:不同环境下,解决问题的方法有很多种,只要行得通,就是好方法;
1.5 重点回顾
-
操作系统(Operation System):只要在管理与驱动硬件,因此必须要能够管理内存、管理装置、负责进程管理以及系统呼叫等,只要能够让硬件准备妥当(Ready)就行;
-
Unix的前身是由贝尔实验室(Bell lab.)的Ken Thompson利用汇编语言携程的Unics,在1971-1973年间由Dennis Ritchie自创C语言,用C语言改写成的Unix;
-
1977年由Bill Joy释出BSD(Berkeley Software Distribution),是一个纯种的Unix like操作系统;
-
1984年由Andrew Tanenbaum开始制作Minix操作系统,提供原始码及软件,但是后期更新不好;
-
1984年由Richard Stallman提倡GNU计划,倡导自由软件(Free Software),强调其软件可以自由的取得、复制、修改与再发行,并规范出GPL授权模式,任何GPL(General Public License)软件均不可单纯仅贩卖其软件,也不可修改软件授权;
-
1991年芬兰人Linus Torvalds开发出了Linux操作系统,简而言之,Linux的成功之处在于:Minix(Unix),GNU,Internet,POSIX规范,虚拟团队;
-
符合Open Source理念的授权相当多,比较知名的有Apache / BSD / GPL / MIT等;
-
Linux本身只是个单纯的操作系统,其开发网站设立在http://www.kernel.org,我们亦称Linux操作系统最底层的数据位【核心(Kernel)】;
-
从Linux kernel 3.0开始,舍弃原来次版本奇数为发展版本,偶数为稳定版本的核心版本规划,新的规划使用主线版本(Mainline)为依据,并提供长期支持版本(Longterm)来加强某些功能的持续维护;
-
Linux distribution分类有社区、商业分类法,或者RPM、DPKG分类法;
-
学习Linux最好从头由基础学习,找一本适合自己的书籍,加强实践;
POSIX是一种标准规范,只要针对在Unix操作系统上跑的程序来进行规范,如果你的操作系统符合POSIX规范,那么符合POSIX规范的程序就可以用在你的操作系统上运行,Linux由于支持POSIX规范,因此许多Unix上的程序可以直接在Linux上面运行,因此程序的移植相当简易,也让大家容易转换平台,提高Linux的使用率;
相关阅读
Linux下出现permission denied的解决办法
Linux下经常出现permission denied,原因是由于权限不足,有很多文章通过chmod命令更改权限为777,但是很不方便也不适合新手,简单粗暴的
ll 命令列出的信息更加详细,有时间,是否可读写等信息 ll命令和ls -l命令结果区别:上面结果说明:ll会列出该文件下的所有文件信息,包括
阿里云ECS服务器Linux第一次登录 提示Login Incorrect
问题情景:1:第一次购买ECS服务器2:没有设置过系统root账户的Login密码(不是连接远程时提示需要输入的那个6位纯数字密码哈)3:在阿里云控
【概念】在这里我们只做简单理解,因为说得越多反而越不利于理解,具体理解参考点击打开链接。我们就把线程看成是在一个程序里的一个
终端编辑工具:vi/vim、emacs等,vim是vi的扩展 安装vim:yum install -y vim* 使用格式:vim filename 工作模式: 1.正常模式 (1)、若文