zoukankan      html  css  js  c++  java
  • Linux 基础入门一

    操作系统
    1、简介
    OS: Operating System,通用目的的软件程序
    操作系统的内核(kernel)
      操作系统其实也是一组程序。这组程序的重点在于管理计算机的所有活动及驱动系统中的所有硬件;
      总之硬件的所有操作都必须要通过这个操作系统来完成;
      内核主要在于管理硬件与提供相关的能力。因此,内核程序放置到内存当中的区块是受保护的,并且开机后就一直常驻在内存当中。

    内核的功能:系统调用接口、程序管理、内存管理、文件系统管理、设备驱动

    操作系统(OS)分类:
      服务器OS:RHEL、CentOS、WindowsServer、AIX
      桌面OS:Windows 10、Windows 7、Mac OS、Fedora
      移动设备OS:Andriod、IOS、YunOS

    开发接口标准
      ABI:Application Binary Interface(应用程序二进制接口)
        ABI描述了应用程序与OS之间的底层接口,允许编译好的目标代码在使用兼容ABI的系统中无需改动就能运行。
      软件要想在操作系统上运行,必须要符合此操作系统兼容的ABI接口
      ABI接口由操作系统决定,不同的操作系统ABI接口是不相同的

      API:Application Programming Interface(应用程序编程接口)
        API定义了源代码和库之间的接口,因此同样的源代码可以在支持这个API的任何系统中编译。

      POSIX: Portable Operating System Interface(可移植操作系统接口)
        IEEE在操作系统上定义的一系列API标准
        POSIX兼容的程序可在其它POSIX操作系统编译执行

      运行程序格式:
        Windows: EXE、.dll(dynamic link library)、.lib
        Linux: ELF、.so(shared object)、.a

    注意:
      Unix-like:Unix类的操作系统
      Linux、BSD、AIX...Unix类的操作系统ABI和API是兼容的

    2、库、系统调用、操作系统和硬件之间的关系
    硬件设备与操作系统(OS)
      操作系统的一部分功能就是管理硬件设备,它拥有硬件设备的所有权限,并且把硬件设备包装隐藏起来。完成所有硬件设备的资源管理和驱动
      资源切割,为每个程序提供一个虚拟的,独有访问的一块硬件资源,如:内存块,CPU的时间片和磁盘空间等
      而运行在这块资源上的程序除了知道监控它的操作系统外,不会知道其实还有其它的程序在运行,这就是多任务操作系统
      运行在操作系统上面的程序,不用管硬件是怎么驱动和管理的
      如果每写一个程序都要把驱动硬件的功能写上会是一种什么概念,所以,为了使人们能够以更方便、更容易理解的方式提供给程序使用硬件的目的,出现了系统调用。

    操作系统与系统调用接口
      操作系统会把一些内核指令通过一些函数(接口)分享出来, 而这个接口就叫作系统调用。 程序只要调用这个接口就可以执行某些硬件动作
      操作系统掩盖了硬件特性,而以更简便的方式把使用硬件的方式向上提供给程序, 怎么向上提供呢, 就是用系统调用接口
      但是这些接口功能简单,很底层,还需要程序员来为这些功能简单的接口通过编程来组合出来复杂的功能,而这个很难,很复杂,而且程序每个都必须要这样作,那就更难了。关键是这些程序可能需要实现的调用接口的功能都是一样的。 所以就引出来了库。

    系统调用接口与库
      这个库就是系统调用接口之上的再次封装来实现某些特殊的复杂的功能的接口。
      简单的说:库就是把各个系统调用的接口的单一的功能,组合起来,来实现一些复杂的,有趣的功能。而它还制作了一个接口,可以被其它程序调用。 库就是一个程序。
      库接口也被称为API(Application Programming Interface,应用程序编程接口)

    总结:
      因为不能每一个程序都要来驱动硬件设备,所以有了操作系统这个中间层;操作系统提供系统调用接口供程序员编程。而程序也是通过这个接口来达到使用硬件的目地,而不用管操作系统是怎么操作硬件的。
      因为系统调用接口提供的的功能单一,数量少,需要程序员繁杂的操纵和组合这些接口来实现功能。而且要实现的这个功能,不止就一个程序要用,所以就有了库, 库就是实现了这个功能的程序,而这个库提供了一个接入点接口, 这个接入点就是API。程序员要想使用这个库的功能,只要按照库的说明来接入就可以了。程序通过库来达到目的, 而不用管库是怎么工作的。

    一个模块一个模块的对接,复杂功能分层化;附图:

    分层结构图:

    3、编程语言
    低级语言:
      机器语言:0和1
      汇编语言:和机器语言一一对应,与硬件相关的特有代码、驱动程序开发

    中级语言:C
      系统级应用、驱动程序

    高级应用:java、Objective-C、C#、python、php
      应用级程序开发

    Linux起源及哲学思想
    1、服务器操作系统
    Windows、Linux(GNU/Linux)、Unix

    2、Linux起源及发行版本
    Linux起源
      1984年:Richard Stallman发起GNU项目和自由软件基金会
      创建开源的UNIX实用工具版本
      创建通用公共许可证(GPL)开源软件许可实施原则

      1991年:Linus Torvalds发布Linux
      创建开放源码,类Unix的内核,在GPL下发布
      下载:www.kernel.org

      Linux操作系统:
      Linux内核 + GNU工具集 = 完整的类UNIX操作系统
      如:CentOS、Ubuntu、Android

    Linux发行版本
      Slackware:SUSE Linux Enterprise Server (SLES)
        OpenSUSE桌面
      Debian
        Ubuntu、mint
      RedHat
        RHEL: RedHat Enterprise linux 每18个月发行一个新版本
        CentOS:兼容RHEL的格式
        中标麒麟:中标软件
        Fedora:每6个月发行一个新版本
      ArchLinux:轻量简洁
      Gentoo:极致性能,不提供传统意义的安装程序
      LFS:Linux From scratch 自制Linux
      Android:kernel+busybox(工具集)+java虚拟机

    软件程序版本号
      软件程序版本:major.minor.release (主版本号.次版本号.发型号或者修正号)
      Linux内核版本:0.99/2.4/2.6/3.0/4.0

    Linux系统发行版版本号:
      如:RHEL:5.x、6.x、7.x

    开源open source
      软件的源代码提供给所有人,可以自由分发软件和源代码、能够修改和创建衍生作品、作者的代码完善

      开源协定:
        GPL协定:LGPL,GPLv2,GPLv3
        BSD协定:
        Apache协定:

    软件分类:商业,共享,自由
      Community:社区版,遵循开源协定
      Enterprise:商业版

    3、Linux哲学思想
      一切都是一个文件(包括硬件)
     小型单一用途的程序
     连接组合各小程序共同完成复杂的任务
     避免令人困惑的用户界面
     配置数据存储在文本中

    4、Linux获取发行版国内镜像站点
      https://opsx.alibaba.com/mirror
      https://mirrors.163.com/

    Linux基础入门
    1、操作系统与硬件
      无论Linux、OSX、Windows操作系统,他们都是有以下部分组成(分层结构):
        最底层:硬件
        硬件之上:将硬件接口抽象成系统调用(kernel)
        系统调用上:将系统调用封装成更高级的功能就是库
        库之上:应用程序

      程序的运行有两种方式
        开机自动运行
        用户通过交互式接口登录或者连接系统上去,来手动运行程序
      用户可以通过交互式接口对系统及程序进行操作、配置管理

    扩展知识:
    Linux发行版本
      发行版    衍生发行版       包管理格式
      Redhat   CentOS、Fedora   RPM
      SUSE    OpenSUSE         RPM
      Debian   Ubuntu、Mint     Dpkg
      Gentoo
      LFS(Linux From Scratch)从零开始构建一个Linux系统

    为什么32位CPU只能支持4G的内存:
      因为CPU在读取内存时,通过地址总线去寻址,才能找到相应的数据在内存中的位置,32位的CPU与内存相连的32根针脚(2^32种变化),能表示的地址是2^32个,换算出来是4G的地址数;地址总线和数据总线是复用的,CPU一次能处理位长为32

    CPU的指令集:
     指的CPU能支持什么样的功能,一个功能就是一个指令,所有的指令就是指令集
     我们要解决的问题叫问题空间,芯片能完成的操作叫解空间

    操作系统:
     在原始的计算机CPU一次只能执行一个任务(执行的是批处理的流程,处理完一个任务在处理下一个任务);操作系统的目的集中分配硬件资源,达到处理多任务的目的,上层软件只跟操作系统交互,不会直接操作硬件,操作系统就需要提供能使用硬件功能的接口给上层软件调用;

    CPU指令运行级别:
     X86 CPU指令级别分为4个级别(4个环),最里面的环(环0)为特权指令(特权环),只有操作系统能运行环0中的指令,上层软件只能运行最外层的环3(用户指令),有些软件要用特权指令,就需要通过操作系统来访问(环1和环2没用)

    操作系统的模式空间:
     用户模式:只能执行环3中的指令
     内核模式:操作系统才能执行环0中的指令

    系统调用:
     任何只有内核才能执行的操作,通过接口的形式表现出来,这些接口称之为系统调用;凡是一个用户模式要操作内核模式中的指令时,就通过内核提供的系统调用来操作

    库:
     把系统调用封装成更复杂的程序,以供别人使用,称之为库(又称重复造轮子);把系统调用封装成更高级的功能
     API:Application Progrming Interface(应用编程接口)开发以后编译之前
     ABI:Application Binary Interface(应用二进制接口)编译以后运行之前

    硬件控制器:
     北桥上连接的是高速总线,南桥上连接的是低速总线
     每个总线都有控制器,将接入的IO设备的电器信号转换为主板上的数字信号,这样CPU才能控制;每个总线控制器起来后都会向桥设备注册IO端口

    适配器:
     独立网卡或独立显卡也叫网卡适配器或显卡适配器,就是为了电器信号和数字信号转换

    进程(process):
     进程是程序的实例,是程序的子集;一个程序可以打开多个进程
     单核CPU在处理进程的时候一次只能处理一个(CPU是分时间片的),在没处理完时,其它高优先级进程要处理,就会保存没处理完的状态(叫保存现场),在恢复处理叫还原现场;进程之间的相互切换叫进程切换(上下文切换)

    2、终端(terminal)
      物理终端:是直接在主机之上,是本机自带的,直接连入的,也称之为物理控制台(console)
      表示:/dev/console
      只有在特殊情况下才会用到,如:单用户模式

      虚拟终端:Linux提供给我们6个虚拟终端,这些虚拟终端是附加在物理终端之上的,用软件方式虚拟实现的终端,CentOS默认启用6个虚拟终端,可以通过快捷键来切换。
      表示:/dev/tty# [1,6]
      切换方式:Ctrl+Alt+F[1-6]

      图形终端:也是附加在物理终端之上,用软件方式虚拟实现的终端,但额外会提供桌面环境,也是虚拟终端的一种
      切换方式:
        CentOS 6 :Ctrl+Ait+F7
        CentOS 7:在哪个虚拟终端启动,即位于哪个虚拟终端
        命令切换方式:~]# chvt 1...
      启动GUI:在某一虚拟终端接口运行命令:startx &

      伪终端(模拟终端):图形界面下打开的命令行接口,还有基于ssh协议和telent协议等远程打开的命令行界面。
        表示:/dev/pts/#

      查看当前的终端设备命令:
      [root@CentOS6 ~]#tty
      /dev/pts/0
    注意:
      在启动设备之后,在其上关联一个用户接口程序,即可实现与用户交互;
      终端实际上是一个设备,一个设备要想与系统进行交互,必须有交互接口,当我们开启一个终端时,系统会自动的在终端上运行(附加)一个交互式shell程序

    扩展知识:
      物理终端: /dev/console
     在Linux 系统中,直接接入计算机显示器通常被称为物理终端,也叫做控制台终端(Console)。物理终端只有在系统还没起来之前会显示启动加载信息,一但系统起来显示登陆界面就显示的是虚拟终端/dev/tty1,所以虚拟终端是附加在物理终端之上的;
     并且有一些设备特殊文件与之相关联:tty0、tty1、tty2等。当你在控制台上登录时,使用的是tty1。使用Ctrl+Alt+[F1—F6]组合键时,我们就可以切换到tty2、 tty3等上面去。tty1—tty6等称为虚拟终端,而tty0则是当前所使用虚拟终端的一个别名,系统所产生的信息会发送到该终端上。因此不管当前正在使用哪个虚拟终端,系统信息都会发送到控制台终端上。你可以登录到不同的虚拟终端上去,因而可以让系统同时有几个不同的会话期存在。只有系统或超级用户root可以向 /dev/tty0进行写操作

      虚拟终端:/dev/tty[1-6]
     虚拟终端附加在物理终端之上的,是以软件方式虚拟实现的终端。系统开机后会启动6个虚拟终端,默认使用tty1登录,可以使用快捷键 Ctrl+Alt+F[1-6]切换虚拟终端;或者通过chvt命令切换chvt [1-6]。  

      图形终端:/dev/tty0
     图形终端也是以软件方式虚拟实现的终端,但会额外提供桌面环境,使用快捷键 Ctrl+Alt+F7可以切换图形终端tty7。图形终端也是虚拟终端的一种。

      模拟终端:/dev/pty/#  (/dev/pts/#)
     模拟终端是纯粹的软件方式实现,而且不会附加在本地物理终端上。模拟终端是附加在图形终端或其他远程终端之上,用软件方式模拟出来的。例如,在图形界面下打开的命令行工具,在windows上使用的ssh远程连接工具打开终端等。这种远程连接用软件模拟的终端,叫做模拟终端或叫伪终端(Pseudo Terminal)。

      串行端口终端:/dev/ttyS[1-6]
     串行端口终端(Serial Port Terminal)是使用计算机串行端口连接的终端设备。计算机把每个串行端口都看作是一个字符设备。有段时间这些串行端口设备通常被称为终端设备,因为那时它的最大用途就是用来连接终端。这些串行端口所对应的设备名称是/dev/tts/0(或/dev/ttyS0)、/dev/tts/1(或 /dev/ttyS1)等,设备号分别是(4,0)、(4,1)等,分别对应于DOS系统下的COM1、COM2等。若要向一个端口发送数据,可以在命令行上把标准输出重定向到这些特殊文件名上即可。例如,在命令行提示符下键入:echo test > /dev/ttyS1会把单词”test”发送到连接在ttyS1(COM2)端口的设备上。

    3、交互式程序的接口
      交互式程序有两类:GUI和CLI
        GUI:图形化界面,是基于X协议实现的窗口管理器
        Linux桌面系统有:
          GNOME(C程序开发,gtk开发库)
          KDE (C++程序开发,qt开发库)
          XFCE (轻量级桌面)

      CLI:命令行界面,对应的叫做shell程序,用户要想与系统交互,必须通过shell,不同的程序员开发的程序不一样但是都可以实现同样的功能(就是交互式功能),所以说shell程序也有很多种,如:Sh,csh,Ksh,Bash,zsh;Shell又被称为Linux的命令解释器;
      获取当前环境使用的shell是那种shell
      # echo $SHELL
      显示当前环境所使用的所有的shell
      # cat /etc/shells


    演示:
      # 获取当前环境使用的shell
      [root@CentOS6 ~]# echo $SHELL
      /bin/bash

      #显示所有的shell
      [root@CentOS6 ~]# cat /etc/shells
      /bin/sh
      /bin/bash
      /sbin/nologin
      /bin/dash
      /bin/tcsh
      /bin/csh

  • 相关阅读:
    关于php配置文件
    修改范围PHP_INI_SYSTEM与PHP_INI_ALL的区别
    mysql索引常见问题
    K-D TREE算法原理及实现
    Matlab K-means聚类
    Matlab 聚类分析
    Zbar 大图像分析
    Zbar -- 源码分析
    ZBar在Windows上的使用 -- ImageMagick and OpenCV
    Zbar算法流程介绍
  • 原文地址:https://www.cnblogs.com/Link-Luck/p/9848288.html
Copyright © 2011-2022 走看看