Linux入门

    Linux系统管理

    Linux服务及安全管理

    • httpd:是Apache超文本传输协议服务器的主程序。被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池。
    • lamp:linux+Apache=Mysql/MariaDB+Pert/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的web应用程序平台。
    • lnmp:是一个基于CentOS/Debian编写的Nginx、PHP、MySQL、phpMyAdmin、eAcceterator一键安装包。可以在VPS、独立主机上轻松的安装LNMP生产环境。
    • Apache:是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且通过简单的API扩充,将Pert/Python等解释器编译到服务器中。
    • Cache:

      • memcached:是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。
      • varnish:是一款高性能的开源HTTP加速器
    • DB:mysql(mariadb)

    Linux Cluster:集群

    • LB Cluster:

      • Nginx:是一个很强大的高性能Web和反向代理服务器,能够支持高达50000个并发连接数的响应
      • lvs:Linux Virtual Server linux虚拟服务器,是一个虚拟的服务器集群系统。
      • haproxy:提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。
    • HA Cluster;

      • Keeplived:是一个类似于layer3 4 7交换机制的软件,也就是沃恩平时说的第3层、第4层和第7层交换。
      • Corosync+pacemaker:Corosync是集群管理套件的一部分,它在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等 pacemaker是一个集群资源管理器。它利用集群基础构件(OpenAIS、heartbeat和corosync)提供的消息和成员管理能力来探测并从节点或资源级别的故障中恢复,以实现集群服务的最大可用性。

    Linux ops;

    • ansible:是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

    Linux monitoring:

    • zabbix:是一个基于Web界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种网络参数,保证服务器系统的安全运营,并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。

    分布式存储系统:

    • Mogilefs:是一套高效的文件自动备份组件
    • GlusterFS:是自由软件,主要应用在集群系统中,具有很好的可扩展性。可解决:网络存储、联合存储、冗余备份、大文件的负载均衡。还不适合应用于需要提供24小时不间断服务的产品环境。目前适合应用于大数据量的离线应用。

    数据库:

    • MySQL:HA Cluster、MHA、备份和回复、MySQL Replication、Read-Write splitting
    • NoSQL:redis,mongodb,HBase

    运维工具:

    • puppet:是一种linux、unix、windows平台的集中配置管理系统,使用自由的puppet描述语言,可管理配置文件、用户、cron任务、软件包、系统服务等。

    虚拟化:

    • linux操作系统原理:虚拟化技术原理:
    • kvm虚拟化应用详解:xen虚拟化
    • 虚拟化网络:SDN
    • OpenStack云栈
    • Docker:容器云:

    ELK Stack:

    • ElasticSearch
    • 搜索引擎
    • 日志
    • Logstash,Kibana

    大数据:

    • Hadoop v2,并行存储及分析平台:
    • HBase,Hive
    • Storm,Spark

    系统优化:

    Python编程:

    IT技术领域:

    • 研发:

      • 硬件:接口
      • CPU(运算器和控制器),内存,输入,输出
      • 机器语言:二进制指令,二进制数据
      • 软件:
      • 低级语言:汇编语言,汇编器
      • 写驱动:
      • 高级语言;

        • 系统级:C,C++
        • 操作系统,对性能要求较高的服务类程序
        • 应用级:Java,Python,ruby
      • 应用程序:ansible,puppet,….
      • 程序写的程序代码:
      • 编程语言:
    • 应用:

      • linux运维:linux生态圈中的各应用程序的应用,
      • shell脚本编程:让某些应用工作能自动完成:
      • Python:专业编程语言:

    DevOps:

    • Development 研发
    • Operations 运维

    计算机与操作系统

    • ENIARC

      • CPU:

        • 运算器(运算指令)
        • 控制器(协调各种器的指令)
        • 寄存器(指令指针寄存器)
        • 缓存(缓存越大命中率越大性能越好)
      • 存储器:cell(存储单元):8bits 8位 Bytes 字节 32位内 1024_1024_1024*4=4G内存 运行内存RAM 平面式分布 内存,RAM(Random Access Memory) 编址的存储单元
      • Input:下命令,提供数据等
      • Output:输出数据加工后的结果
    • 程序:指令+数据 全部在内存中 CPU先提取指令 根据指令在内存中寻找数据 算法+数据结构

      • 过程式编程语言:

        • 顺序执行:依次
        • 循环执行:将整个循环重复执行
        • 选择执行:仅执行其中的一个分支

    多任务:multitasks

    发展历史

    • Bell,MIT,GE = Multics 监控指令按照时间一个一个跑 稳定

    • Berkeley:加州的伯克利分校 Ken,Bill Joy:BSRG,1977,BSD(Berkeley System Distribution)

    • DEC:数倍数字公司 小型机PDP-11 VAX(VMS系统)

    • Ken Thompson:Space Travel 一款小游戏 PDP-7上:汇编语言

    • 1969:Unics=unix

    • 1971:Unix 为跑一个nroff的程序逐渐完善

    • 1972:Unix在bell实验室10台 B语言 :Dennis Ritch在B语言上加一个数据结构变成C语言

    • 1973:Unix 重新用C语言编译 能够运行在各种硬件上 高级语言 一个程序通过编译器来适应各种

    • 1974:《美国计算机通信》第一次公之于众 Bell属于AT&T 反垄断

    • 1979:System V7 版本

    • 1980:Microsoft XENIX=Unix DARPA,TCP/IP

    • 1981:Microsoft,Bill Gates SCP:QDOS(Quick and Dirty Operating System)

    • 1990:microsoft 还是在unix SUN:Bill Joy workstation

    • 1983:TCP/IP在BSD的unix上研发成功 Apple:XEROX:PARK(star 图形界面) 以太网和鼠标 Bill Gates在这个star上研发了windows 底层还是DOS 单任务操作系统经常蓝屏 将DEC人拉过来 windows nt(new technology)

    • 1985:Richard Stallman

      • GNU:GNU is Not Unix
      • GPL:Generall Public License
      • FSF:Free Software Foundation
      • X-Window:unix的图形软件 GPL
      • gcc:gnu c complier gun的c编译器
      • vi:visual interface ……一大堆好用的软件
      • free:freedom 自由软件
      • Unix:

        • SUN:Solaris
        • IBM:AIX
        • HP:HP-UX
      • Andrew:Minix,4000+行 很小的系统
      • System V Unix:BSD
    • 1990:microsoft 还是在unix SUN:Bill Joy workstation BSD:Jolitz,BSD,x86 1991夭折 1992:386-BSD

    • 1991.8:linus Torvalds宣布成立linux:GPL

    UINX就是把底层有限的计算资源切分成多个能够给应用程序的部分并监控这些程序如何使用这些资源的,如何使用这些资源如何监控这些资源也都是这么个监控程序的完成的,因此它获取到整个硬件的监控权,把一个硬件的面目虚拟成一个软件的面目,把cpu所提供的计算能力切割成N片并轮流使用。

    • Process 进程 一个活动单位 一个任务task 多任务tasks 就需要一个底层的监控程序 就叫做通用程序 操作系统
    • kernel 内核 驱动底层的硬件 把底层的硬件资源抽象为简单的抽象资源 管理各程序的运行 把有限的资源分配给各个运行中的程序 让各程序之间相安无事

    GNU:特定的具体的专用程序 核心内核还是uinx

    完整的OS操作系统:kernei+Application 内核和应用程序

    GNU/Linux 完整的linux 应用程序和内核

    MAC操作系统BSD

    OS的接口(应用程序)有两类:

    • GUI:Graphic User Interface 图形用户接口

      • GNome:c语言,gtk
      • KDE:c++,qt研发环境 研发库
    • CLI:Command Line Interface 命令行接口

      • TUI;Text User Interface 文本用户接口
      • bash zsh sh tcsh ksh 特定的应用程序 在内核之外提供一个特定的接口

    占据我的接口的叫前台,不占据接口的却能跑起来的叫后台

    操作系统的功能:

    • 驱动程序
    • 进程管理
    • 安全
    • 网络功能
    • 内存管理
    • 文件系统

    操作系统上的简单接口 system call 在往上将简单的接口合并成一些复杂的库 libraries (lib call) 程序员写程序可以直接调用系统接口或者库,直接调用库别系统接口快得多

    • API:Application Program Interface 程序员面对的编程接口 应用编程接口
    • POSIX:Portable Operatting System 可移植的操作系统(POS) windows和linux通用接口
    • ABI:Application Binary Interface 程序应用者面对运行程序的接口(程序转成二进制时候所需要用的二进制)

    源码:编译成为 二进制格式才能运行 非常不容易

    gcc,glibc,vi,linux全是源码 就需要先编译 通过编译器

    Redhat:见各种源码通过编译器编译成二进制然后制造在光盘中像windows一样安装操作系统,就是发行版,数百种之多:

    • 主:Debian—Ubuntu、Knopix(安全)
    • 主:SLS-Slackware-S.u.S.E-OpenSUSE(桌面华丽)
    • 主:RedHat—Centos、Fedors、Oracla基于radhat企业版二次开发

    RedHat 9.0之后

    • RedHat Enterprise Linux:RHEL
    • CentOS:Community ENTerprise OS RHEL的山寨版
    • Fedora Core(个人桌面版)

    Linux基础:

    • CPU架构:

    • 32位X86

    • x64(amd64)

    • m68000摩托罗拉早期生产的cpu

    • arm手持设备、移动设备cpu架构 三星 华为 低消耗

    • ultrasparc

    • power 性能和价格都极其强大

    • powerpc,ppc

    • 闭源:源代码—-加密—-二进制代码—-用户面对的巨难反编译

    • 开源:提供源代码:获利方式1、提供服务 修复bug 2、获得捐赠

    开源协定:

    • GPL:General Public License 程序只要使用GPL协定,其他程序员只要借用它(哪怕只有两行代码)就要遵循GPL 开放出代码 流毒无穷
    • LGPL:Lesser GPL 基于库接口调用的开发的代码可以不用开源
    • GPLv2,GPLv3
    • GNU组织:FSF:Free Software Foundation
    • BSD:

      • 1、如果二次发布的产品中包含源代码,则在源代码中必须有原来的代码中的BSD协定;
      • 2、如果二次发布产品是二进制格式的库或程序,则需要在发布的文档或版权说明中说明包含原来的代码中的BSD协定;
      • 3、不可以用开源代码的作者或组织,以及原来的产品的名字做市场推广;
    • Apache:ASF:Apache Software Foundation

    双线授权:

    • Community:遵循开源协定
    • Enterprise:商业授权:多了些上边没有的功能

    程序管理:

    • 程序的组成部分:

      • 二进制程序:最关键的
      • 配置文件:程序通常在内部给些接口方便用户有不同的选择,一般是配置文件实现的(例如:桌面主题)
      • 库文件:二次研发,调用库文件
      • 帮助文件:专门的文档开发人员,专门写使用说明
      • 二进制、库文件:可执行文件;
      • 库文件不能独立执行,只能被调用时执行
      • 配置文件:帮助文件:可被查看其内容的文件;
    • 程序包管理器:装X程序—程序的组成文件打包成一个或有限几个文件。安装操作,卸载:查询:

      • Debian:dpkg(deb文件后缀),apt-get
      • RedHat:rpm包管理器,yum包管理器的前端,要有新的dnf
      • S.u.S.E:rpm,zypper
      • ArchLinux:port—-刚出来就引到很多关注
      • Gentoo:
      • LFS:Linux From Scratch 最纯净的linux,kenal+操作指南
      • kali:各种渗透工具的linux发行版

    CentOS的镜像站点:

    终端设备:

    • 多任务、多用户
    • 物理终端:控制台:console
    • 虚拟终端:6个 ctrl+Alt+f(1-6) //笔记本键盘可能没有效果 tty
    • 图形终端:
    • 伪终端://ssh pty
    • 串行终端://ttys

    Linux的哲学思想:

    • 一切皆文件:把几乎所有资源统统抽象为文件形式;包括硬件设备;甚至通信接口等;open(),read(),write(),close(),delete(),create()….kennel中的文件调用,它是向文件系统发起了请求
    • 由众多功能单一的程序组成:一个程序只做一件事,并且做好;组合小程序完成复杂任务;
    • 尽量避免跟用户交互;目标:易于以编程的方式实现自动化任务;
    • 使用文本文件保存配置信息;因为文本文件是最实用性的底层数据接口表现形式,使用一款文本编辑器就能完成大多数的程序管理操作