老曹眼中的Linux基础

Linux 几乎无处不在,不论是服务器构建,还是客户端开发,对操作系统的基本理解和基础技能的掌握对全栈来说都是必备的。

系统的选择

Linux发行版本大体分为两类,一类是商业公司维护的发行版本,一类是社区维护的发行版本,前者以著名的Redhat(RHEL)为代表,后者以Debian为代表。

Redhat,可称为Redhat系列,包括RHEL、Fedora、CentOS(RHEL的社区克隆版本,免费)。Ubuntu严格来说不能算一个独立的发行版本,Ubuntu是基于Debian加强而来,一个拥有Debian所有的优点,以及自己所加强优点的近乎完美的Linux桌面系统。Ubuntu社区认为实用性和创新性高于一切。

如果你需要一个比较稳定的服务器系统而已,那么最好的选择就是CentOS了,安装完成后,经过简单配置就能提供非常稳定的服务了。但是对云计算而言,unbantu也许不错,hadoop最早就是在ubantu上开发的。

体系结构

了解体系结构,可以有一个较好的方向感。

Linux 的分层体系

Linux 有kernel和user两种模式,内核、shell和文件系统一起形成了基本的操作系统结构,Linux 内核由如下几部分组成:内存管理、进程管理、设备驱动程序、文件系统和网络管理等。

Linux内核

了解linux内核,可以充分利用资源,在系统调优时有目标感。

Linux 将内存划分为容易处理的内存页,提供了对 4KB 缓冲区的抽象,例如 slab 分配器。进程实际是某特定应用程序的一个运行实体,进程调度来控制进程对CPU的访问。Linux 中常见的进程间通讯机制有信号、管道、共享内存、信号量和套接字等。 内核通过 SCI 提供了一个API来创建一个新进程(fork、exec 或 POSⅨ),停止进程(kill、exit),并在它们之间进行通信和同步(signal 或者 POSⅨ 机制)。Linux 操作系统将独立的文件系统组合成了一个层次化的树形结构,并且由一个单独的实体代表这一文件系统。由于 Linux 支持许多不同的文件系统,并且将它们组织成了一个统一的虚拟文件系统.设备驱动程序提供一组操作系统可理解的抽象接口完成和操作系统之间的交互,而与硬件相关的具体操作细节由设备驱动程序完成。Linux内核的网络部分由BSD套接字、网络协议层和网络设备驱动程序组成。 网络设备驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。

linux 文件系统

Linux系统能支持多种目前流行的文件系统,推荐用EXT4。Linux的文件类型主要有:

1) 普通文件,分为纯文本和二进制。
2) 目录文件,存储文件的地方。
3) 链接文件,指向同一个文件或目录的的文件。
4) 设备文件,分为块设备和字符设备。
5)管道文件,提供进程间通信
6)套接字文件,与网络通信有关

Linux使用标准的目录结构,安装程序已经为用户创建了文件系统和完整而固定的目录组成形式,并指定了每个目录的作用和其中的文件类型。

Linux Shell 及命令

shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。shell接收用户输入的命令并把它送入内核去执行,是一个命令解释器。shell 有很多类型,这里推荐BASH。BASH是GNU的Bourne Again Shell,是GNU操作系统上默认的shell,大部分linux发行套件使用的都是这种shell。

Linux 的命令很多,下面给出了一个简单的分类。

常用命令

在shell 中组织linux 命令来完成一系列的任务,就是shell 编程了。Shell,Perl和Python 是Linux 上最常用的脚本语言,我还是推荐使用Python。

Linux 应用

标准的Linux系统一般都有一套都有称为应用程序的程序集,它包括文本编辑器、编程语言、X Window、Internet工具和数据库等。

对于文本编辑而言,Emacs 和vim 各有千秋,通过插件配合甚至可以作为IDE使用。 个人感觉,VIM 还应该是必备技能。vim的命令也很多,整理如下:

vi命令集

就应用的管理而言,ubantu 需熟知apt命令,centos 则是yum命令。当然了,源代码编译安装是必须的,makefile的写法,configure/autoconfig/make 的用法要手到擒来才好。

(0)

相关推荐

  • 想读懂Linux内核,这一份书单足够!

    Linux内核长什么样?这幅漫画是以一个房子的侧方刨面图来绘画的.使用这样的一个房子来代表 Linux 内核.你能给这幅漫画分析一下读图路径吗? 题图来自: http://TurnOff.us 的漫画 ...

  • 什么是Linux内核?有什么功能?

    之前给大家介绍过很多关于Linux的知识,最近经常有人问小编说:什么是Linux内核?Linux内核什么功能呢?今天整理了一下,我们一起来看看吧. Linux是一种开源电脑操作系统内核.它是一个用C语 ...

  • rootkit

    rootkit Rootkit是指其主要功能为:隐藏其他程序进程的软件,可能是一个或一个以上的软件组合:广义而言,Rootkit也可视为一项技术.在今天,Rootkit一词更多地是指被作为驱动程序,加 ...

  • 老曹眼中的网络编程基础

    我们是幸运的,因为我们拥有网络.网络是一个神奇的东西,它改变了你和我的生活方式,改变了整个世界. 然而,网络的无标度和小世界特性使得它又是复杂的,无所不在,无所不能,以致于我们无法区分甚至无法描述. ...

  • 老曹眼中的CRM 图解

    CRM 是企业"以客户为中心"价值观的核心体现之一, 各种2B的应用都无可避免,而企业应用具有一定的复杂性,理解CRM系统也不是轻而易举的事情.在老码农的眼中,CRM 系统可能是这 ...

  • 老曹眼中研发管理二三事

    关于管理,必然会谈到业界先贤德鲁克先生对管理的定义. 管理就是界定企业的使命,并激励和组织人力资源去实现这个使命.界定使命是企业家的任务,而激励与组织人力资源是领导力的范畴,二者的结合就是管理. 这是 ...

  • 老曹眼中的敏捷开发

    世界上不存在这样一种方法: 只要套用,就可以写出完美的软件,无论使用的哪种设计模式: 但确实可能存在一种开发方式,可以帮助我们一步步构造出需要的软件和架构--这有可能就是敏捷开发. 相对于软件开发流程 ...

  • 老曹眼中的面向数据架构

    数据是系统的核心,在面向服务的架构之外,也可以考虑一下面向数据的架构方式.面向数据的服务架构需要支持多数据源异构,支持动态数据和静态数据,既支持公有云部署又支持私有云部署,提供多种数据应用和数据产品, ...

  • 老曹眼中的开发学习环境

    "工其事必先利其器",对于一个全栈而言,一个与自己匹配的开发和学习环境,能够极大地提高个人的工作效率,很多时候都可以做到事半而功倍.环境也是一个外延很广的概念,这里我所涉及的包括硬 ...

  • 老曹眼中的Git

    为什么使用Git Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件.大神就是大神,在开发了Linux之后,Git 是又一抗鼎之作.这是唯一 ...

  • 老曹眼中的负载均衡

    什么是负载均衡 负载(load)一词起源于典型系统,指连接在电路中消耗电能的装置,负载(用电器)的功能是把电能转变为其他形式能.引申出来,一个是实体,一个转化. 于是,对于实体,有了通信帧或者报文中数 ...

  • 老曹眼中的缓存技术

    Cache: a collection of data duplicating original values stored elsewhere on a computer, usually for ...