1965 年之前的时候,电脑并不像现在一样普遍,它可不是一般人能碰的起的,除非是军事或者学院的研究机构,而且当时大型主机至多能提供30台终端(30个键盘、显示器),连接一台电脑。
为了解决数量不够用的问题
1965 年左后由 贝尔实验室 加入了 麻省理工学院 以及 通用电气 合作的计划 —— 该计划要建立一套 多使用者(multi-user)、多任务(multi-processor)、多层次(multi-level) 的 MULTICS 操作系统,想让大型主机支持 300 台终端。
1969 年前后这个项目进度缓慢,资金短缺,贝尔实验室退出了研究。
1969 年从这个项目中退出的 Ken Thompson 当时在实验室无聊时,为了让一台空闲的电脑上能够运行 “星际旅行(Space Travel)” 游行,在 8 月份左右趁着其妻子探亲的时间,用了 1 个月的时间,使用汇编写出了 Unix 操作系统的原型。
1970 年,美国贝尔实验室的 Ken Thompson,以 BCPL 语言为基础,设计出很简单且很接近硬件的 B 语言(取BCPL的首字母),并且他用 B 语言 写了第一个 UNIX 操作系统。
1971 年,同样酷爱 “星际旅行(Space Travel)” 的 Dennis M.Ritchie 为了能早点儿玩上游戏,加入了 Thompson 的开发项目,合作开发 UNIX,他的主要工作是改造 B 语言,因为B 语言 的跨平台性较差。
1972 年,Dennis M.Ritchie 在 B 语言 的基础上最终设计出了一种新的语言,他取了 BCPL 的第二个字母作为这种语言的名字,这就是 C 语言。
1973 年初,C 语言的主体完成,Thompson 和 Ritchie 迫不及待地开始用它完全重写了现在大名鼎鼎的 Unix 操作系统。
在把 UNIX 移植到其他类型的计算机上使用时,C 语言强大的移植性(Portability)在此显现。
机器语言和汇编语言都不具有移植性,为 x86 开发的程序,不可能在 Alpha,SPARC 和 ARM 等机器上运行。
而 C 语言程序则可以使用在任意架构的处理器上,只要那种架构的处理器具有对应的 C 语言编译器和库,然后将 C 源代码编译、连接成目标二进制文件之后即可运行。
1991 年 林纳斯(Linus) 就读于赫尔辛基大学期间,对 Unix 产生浓厚兴趣,尝试着在Minix 上做一些开发工作。因为 Minix 只是教学使用,因此功能并不强,林纳斯 经常要用他的终端 仿真器(Terminal Emulator) 去访问大学主机上的新闻组和邮件,为了方便读写和下载文件,他自己编写了磁盘驱动程序和文件系统,这些在后来成为了 Linux 第一个内核的雏形,当时,他年仅 21 岁!林纳斯利用GNU 的 bash 当做开发环境,gcc 当做编译工具,编写了 Linux 内核,一开始 Linux 并不能兼容 Unix。即 Unix 上跑的应用程序不能在 Linux 上跑,即应用程序与内核之间的接口不一致。一开始 Linux 只适用于 386,后来经过全世界的网友的帮助,最终能够兼容多种硬件。
内核(kernel是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序,它提供了一个在裸设备与应用程序间的抽象层。
Linux 内核版本又分为 稳定版和开发版,两种版本是相互关联,相互循环。
稳定版具有工业级强度,可以广泛地应用和部署。新的稳定版相对于较旧的只是修正一些 bug 或加入一些新的驱动程序。
开发版由于要试验各种解决方案,所以变化很快。
内核源码网址:内核源码网址链接
所有来自全世界的对 Linux 源码的修改最终都会汇总到这个网站,由 Linus 领导的开源社区对其进行甄别和修改最终决定是否进入到 Linux 主线内核源码中。
目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等。
Linux 在服务器领域的应用是其重要分支。
Linux 免费、稳定、高效等特点在这里得到了很好的体现。
早期因为维护、运行等原因同样受到了很大的限制。
近些年来 Linux 服务器市场得到了飞速的提升,尤其在一些高端领域尤为广泛。
近些年来 Linux 在嵌入式领域的应用得到了飞速的提高。
Linux 运行稳定、对网络的良好支持性、低成本,且可以根据需要进行软件裁剪,内核最小可以达到几百 KB 等特点,使其近些年来在嵌入式领域的应用得到非常大的提高。
主要应用:机顶盒、数字电视、网络电话、程控交换机、手机、PDA、等都是其应用领域,得到了 Google、三星、摩托罗拉、NEC 等公司的大力推广。
此领域是传统 Linux 应用最薄弱的环节。
传统 Linux 由于界面简单、操作复杂、应用软件少的缺点,一直被 Windows 所压制。
近些年来随着 Ubuntu、Fedora 等优秀桌面环境的兴起,同时各大硬件厂商对其支持的加大,Linux 在个人桌面领域的占有率在逐渐的提高。
目前国内 Linux 更多的是应用于服务器上,而桌面操作系统更多使用的是 Windows。主要区别如下:
登录系统后,在当前命令窗口下输入命令:ls /
你会看到如下图所示:
以下是对这些目录的解释:
1.bin:
bin是Binary的缩写, 这个目录存放着最经常使用的命令。
2.boot:
这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
3.dev :
dev是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
4.etc:
这个目录用来存放所有的系统管理所需要的配置文件和子目录。
5.home:
用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
6.lib:
这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
7.lost+found:
这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
8.media:
linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
9.mnt:
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
10.opt:
这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
11.proc:
这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:
**12.root:**系统管理员root的家目录
**13./sbin、/usr/sbin、/usr/local/sbin:**放置系统管理员使用的可执行命令,如 fdisk、shutdown、mount 等。与 /bin 不同的是,这几个目录是给系统管理员 root 使用的命令,一般用户只能"查看"而不能设置和使用
**14./tmp:**一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下
**15./srv:**服务启动之后需要访问的数据目录,如 www 服务需要访问的网页数据存放在 /srv/www 内
**16./usr:**应用程序存放目录
**17.var:**放置系统执行过程中经常变化的文件
/var/log:随时更改的日志文件
/var/spool/mail:邮件存放的目录
/var/run:程序或服务启动后,其 PID 存放在该目录下
Linux 刚面世时并没有图形界面,所有的操作全靠命令完成,如 磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。在职场中,大量的服务器维护工作都是在远程通过 SSH 客户端 来完成的,并没有图形界面,所有的维护工作都需要通过命令来完成。
在职场中,作为后端程序员,必须要或多或少的掌握一些 Linux 常用的终端命令。
Linux 发行版本的命令大概有 200 多个,但是常用的命令只有一二十个而已。
学习终端命令的技巧:
不需要死记硬背,对于常用命令,用的多了,自然就记住了。
不要尝试一次学会所有的命令,有些命令是非常不常用的,临时遇到,临时百度就可以。
1.ctrl + shift + = 放大终端窗口的字体显示.
2.ctrl + - 缩小终端窗口的字体显示.
3.在敲出 文件/目录/命令 的前几个字母之后,按下 tab 键,如果输入的没有歧义,系统会自动补全,如果还存在其他 文件/目录/命令,再按一下 tab 键,系统会提示可能存在的命令.
4.按 上/下 光标键可以在曾经使用过的命令之间来回切换。
5.如果想要退出选择,并且不想执行当前选中的命令,可以按 ctrl + c。
1 --help
command --help
说明:显示 command 命令的帮助信息。
2 man
man command
man 是 manual 的缩写,是 Linux 提供的一个 手册,包含了绝大部分的命令、函数的详细使用说明。
先写到这里,后期会继续更新Linux相关基础知识,学习在路上,一路走来,初心不改。