Linux介绍

什么是Linux

Linux系统是一套免费使用自由传播类UNIX操作系统(主要用在服务器上),是一个基于POSIXUNIX多用户多任务支持多线程多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了UNIX以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

Linux产生背景

  • UNIX:操作系统,是美国AT&T公司贝尔实验室于1969年完成的操作系统,最早由肯·汤普逊(Ken Thompson),丹尼斯·里奇(Dennis Ritchie)开发。在1971年首次对外发布,刚好在1971,丹尼斯·里奇(Dennis Ritchie)发明了C语言,后来在1973,Unix被他用C语言重新编写。Unix前身源自于MultiCS,叫UniCS,后来改名叫Unix。

  • POSIX:可移植操作系统接口(英语:Portable Operating System Interface of UNIX,缩写为POSIX),是IEEE(电气和电子工程师协会)为要在各种UNIX操作系统上运行软件,而定义API的一系列互相关联的标准的总称。

  • GNU:1983年,Richard Stallman(理查德·马修·斯托曼)创立GNU计划。一套完全自由的操作系统,其内容软件完全以GPL方式发布。这个操作系统是GNU计划的主要目标(发展出一套完整的开放源代码操作系统来取代Unix),名称来自GNU’s Not Unix!的递归缩写。

  • GPL:一种GNU通用公共许可协议,为保证GNU软件可以自由的使用、复制、修改和发布,所有的GNU软件都有一份在禁止其他人添加任何限制的情况下授权所有权利给任何人的协议条款,是一个被广泛使用的自由软件许可协议条款,保证终端用户运行、学习、分享(复制)及编辑软件之自由,GPL是自由软件和开源软件的最流行许可证,特色表现:

    • 取得软件与原始码:您可以根据自己的需求来执行这个自由软件
    • 复制:您可以自由的复制该软件
    • 修改:您可以将取得的原始码进行程序修改工作,使之适合您的工作
    • 再发行:您可以将您修改过的程序,再度的自由发行,而不会与原先的撰写者冲突
    • 回馈:您应该将您修改过的程序代码回馈于社群

  • 1985年,Richard Stallman又创立了自由软件基金会(Free Software Foundation,FSF)来为GNU计划提供技术、法律以及财政支持。1990年,GNU计划开发主要项目有Emacs(文本编辑器)、GCC(GUN Compiler Collection,GNU编译器集合)、Bash等,GCC是一套GNU开发的编程语言编译器。还有开发一些UNIX系统的程序库和工具。

  • Linux操作系统诞生于1991年10月5日(这是第一次正式向外公布时间),与UNIX兼容,并在GPL条款下发布。现在,Linux产生了许多不同的Linux发行版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。

  • 1992年,Linux与其他GUN软件结合,完全自由的GNU/Linux操作系统正式诞生,简称Linux

Linux特点

  1. 分时的多用户、多任务操作系统
  2. 多数网络协议支持、方便的远程管理
  3. 强大的内存管理和文件系统管理
  4. 大量的可用的软件和免费的软件
  5. 优良的稳定性和安全性
  6. 良好的可移植性和灵活性
  7. 可供选择的厂商多

Linux操作系统架构

补充:linux内核必须加上一个“界面”软件,才能让用户去使用

  • “界面”分两类:
    • 命令行界面CLI SHELL(有很多种,最流行的一种是bash shell)
    • 图形界面GUI SHELL(也有很多种,目前最流行的有两种:gnome和kde)

Linux内核

  • 严格来讲,Linux不是一个操作系统,Linux只是一个操作系统中的内核。

  • 内核建立了计算机软件与硬件之间通讯的平台,内核提供系统服务,比如文件管理、虚拟内存、设备I/O、进程管理等。

  • 内核官网:http://www.kernel.org/。目前最新的内核版本:4.13.5

  • 要注意区分linux发型版本和linux内核版本。两者不是同一个事物

常见发行版

  • 红帽企业系统(RedHat Enterprise Linux, RHEL)

    全球最大的开源技术厂商,全世界内使用最广泛的Linux发布套件,

    提供性能与稳定性极强的Linux套件系统并拥有完善的全球技术支持。

    官网:http://www.redhat.com

  • 社区企业操作系统(CentOS)

    最初是将红帽企业系统“重新编译/发布”给用户免费使用而广泛使用,

    当前已正式加入红帽公司并继续保持免费(随RHEL更新而更新)。

    官网:http://www.centos.org/

  • 红帽用户桌面版(Fedora [Linux])

    最初由红帽公司发起的桌面版系统套件(目前已经不限于桌面版),

    用户可免费体验到最新的技术或工具,而功能成熟后加入到RHEL中。

    官网:http://fedora.redhat.com

  • 国际化组织的开源操作系统(Debian)

    提供超过37500种不同的自由软件且拥有很高的认可度,

    对于各类内核架构支持性良好,稳定性、安全性强更有免费的技术支持。

    官网:http://www.debian.org/

  • 基于Debian的桌面版(Ubuntu)

    Ubuntu是一款基于Debian派生的产品,对新款硬件具有极强的兼容能力。

    普遍认为Ubuntu与Fedora都是极其出色的LINUX桌面系统。

    官网:http://www.ubuntulinux.org/

  • 当然还有国内的国防科技大学发行 麒麟kylin 和 中科院发行 红旗RedFlag。

Linux的文件系统和目录结构

硬盘分区管理

  • linux系统的硬盘分区管理相关概念:

    • 对于分区表通常有MBR分区表和GPT分区表
    • 对于磁盘大小小于2T的磁盘,我们可以使用fdisk和parted命令工具进行分区
  • 对于MBR分区表的特点(通常使用fdisk命令进行分区)

    • 所支持的最大磁盘大小:2T
    • 最多支持4个主分区或者是3个主分区加上一个扩展分区
  • 对于GPT分区表的特点(使用parted命令进行分区)

    • 支持最大卷:18EB(1EB=1024TB)
    • 最多支持128个主分区,所以对于GPT的分区表来说,基本就没有什么主分区和逻辑分区的区别了。
  • 可以分为主分区、扩展分区、逻辑分区

    分区 说明
    主分区 一个硬盘最多只能有4个主分区,主分区采用hdXN的格式,hdX为硬盘,N是1-4的数字,分别表示4个主分区,第一个硬盘的第一个主分区,表示为hda1,以此类推
    扩展分区 扩展分区作为特殊的主分区需要占用硬盘分区表中4个分区记录中的1个记录
    逻辑分区 逻辑分区只能建立在扩展分区中,可以建立文件系统。逻辑分区同样采用了hdXN 的格式,区别在于,逻辑分区的N是从5开始算的,第一个硬盘的第2个逻辑分区就为hda6
    IDE设备 hda2, hdb3等等
    SCSI设备/SATA设备 sda2, sdb3等等
  • 硬盘采用hdX格式表示,X代表a.b.c.d

  • 系统最多只有4个IDE设备,其中第一个IDE设备名称为hda,第4个为hdd

    类型 说明
    IDE 一种较老的接口技术,价格低廉,兼容性强,传输速度可达133MB/s
    SCSI 主要应用于中、高端服务器中,支持热拔插,价格较高,其中UltraSCSI可达320MB/S,UltraSCSI640可达640MB/S
    SATA 主要用于PC上,串口硬盘,可达6gbps
    SAS 是一种串行链接的SCSI接口技术,向下兼容SATA,速度快
    USB 一种便携的存储设备,USB3.0理论最大传输速度可达500MB/s,现在最新的USB3.1Gen 2最高可达10Gbps
    并口 同一线缆可以接多块设备,IDE和SCSI为并口硬盘;
    串口 同一线缆只可以接一个设备,SATA、SAS和USB为串口,抗干扰能力强

文件系统

  • EXT2和EXT3都是Linux操作系统默认使用的文件系统,EXT3属于日志文件系统,比较出色。

  • swap文件系统在Linux系统的交换分区中使用,也是Linux系统默认支持的,一般设置为主机系统内存的2倍大小。其他的文件系统包裹 xfs、jfs 等,这些大多使用与商业的UNIX系统。

  • FAT文件系统Linux可以读写,NTFS中能读,不能写

  • Linux操作系统最经典的分配方案:

    • /boot:启动分区
    • swap:交换分区
    • / :根分区
  • Linux操作系统和windows操作系统使用的文件系统是不一样的。

    • CentOS是EXT4格式 // 查询方式:cat /etc/fstab

    • Windows一般是NTFS

linux文件系统介绍

  • Linux根据文件形式主要将文件分为目录和普通文件,如下图:

    • Directory表示目录

    • Ordinary File表示普通文件

  • 如果像上图一样把Linux的文件系统看做是一棵树,那么:

    • 所有的Ordinary File都是叶子节点
    • 含有子节点的节点都一定是目录,因为只有目录下才有子目录或者普通文件,普通文件下是没有子级目录的,还是很好理解吧
  • 普通文件和目录名称要求:文件和目录是区分大小写的

    1. Uppercase letters (A-Z)

    2. Lowercase letters (a-z)

    3. Numbers (0-9)

    4. Underscore (_)

    5. Period(.)

    6. Comma(,)

  • Linux对文件的扩展名是没有强制要求的,甚至可以说没有扩展名之类的概念。但是通常我们创建文件或者保存文件的时候都还是最好给弄一个文件扩展名,这样非常有利于理解文件的内容,方便管理

CentOS的目录结构

  • 系统启动必须:

    • /boot:存放的启动Linux 时使用的内核文件,包括连接文件以及镜像文件。

    • /etc:存放所有的系统需要的配置文件子目录列表,更改目录下的文件可能会导致系统不能启动。

    • /lib:存放基本代码库(比如c++库),其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。

    • /sys: 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中

    • /proc:此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的目录有/proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/*等process

  • 指令集合:

    • /bin:存放着最常用的程序和指令

    • /sbin:只有系统管理员能使用的程序和指令。

  • 外部文件管理:

    • /dev :Device(设备)的缩写, 存放的是Linux的外部设备。注意:在Linux中访问设备和访问文件的方式是相同的。

    • /media:类windows的其他设备,例如U盘、光驱等等,识别后linux会把设备放到这个目录下。

    • /mnt:临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。

  • 临时文件:

    • /run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。

    • /lost+found:一般情况下为空的,系统非法关机后,这里就存放一些文件。

    • /tmp:这个目录是用来存放一些临时文件的。任何人都可以访问,重要数据不可放置在此目录下

  • 账户:

    • /root:系统管理员的用户主目录。

    • /home:用户的主目录,以用户的账号命名的。

    • /usr:用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。

    • /usr/bin:系统用户使用的应用程序与指令。

    • /usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。

    • /usr/src:内核源代码默认的放置目录。

  • 运行过程中要用:

    • /var:存放经常修改的数据,比如程序运行的日志文件(/var/log 目录下)。

    • /proc:管理内存空间!虚拟的目录,是系统内存的映射,我们可以直接访问这个目录来,获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件来做修改。

  • 扩展用的:

    • /opt:默认是空的,我们安装额外软件可以放在这个里面。

    • /srv:存放服务启动后需要提取的数据(不用服务器就是空)如www服务需要访问的网页数据存放在/srv/www

  • 软件安装

    • /selinux:selinux软件目录,用于保证系统安全
    • /opt:给主机额外安装软件所摆放的目录。
    • /usr:应用程序存放目录,
      • /usr/bin 存放应用程序
      • /usr/share 存放共享数据
      • /usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件
      • /usr/local:存放软件升级包
      • /usr/share/doc: 系统说明文件存放目录
      • /usr/share/man: 程序说明文件存放目录,使用man ls时会查询/usr/share/man/man1/ls.1.gz的内容建议单独分区,设置较大的磁盘空间
  • 使用建议:

    1. 用户应该将文件存储在自己的主目录及其子目录下
    2. 系统绝大多数设置都在/etc目录下
    3. 不要修改/或者/usr目录下的任何内容,除非你真的清楚你在做什么,也就是说/目录最好和安装好系统之初保持一致
    4. 大多数工具和应用软件程序都安装在/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin
    5. 文件或者目录都有唯一的绝对路径,没有盘符的概念