基础知识

Computing

ENIARC

CPU: 运算器,控制器,寄存器
Memory: RAM
I/O:Input, Output

加法器:

bit, Byte
8bits = 1Byte

1024Bytes = 1KB
1024KB = 1MB
1024MB = 1GB
4 * 1GB

程序:指令+数据

指令:add

多道处理程序 --> time sharing
    分时系统

内存:分段 --> 分页

CTSS --> 

GE, BELL, MIT ==> Mutlics

Ken, Space Travell

小型机:DEC,
    VAX
    PDP
        PDP-11

        PDP-7:汇编语言
            Unics --> Unix

        Dennis Ritche

        B语言:--> C语言

        C语言 --> 

    Bell : AT&T

    Ken

    BSRG: Bill Joy
        BSD: Bekerley System Distribution

    MicroSoft: Basic
        Xenix

    PC: x86, CTSS

    DOS: Disk Operation System

    Apple: Jobs,

    Xexos: PARK, mouse GUI

SystemV, BSD

SysV
    IBM: Power, PowerPC, AIX
    SUN: Sparc, SunOS --> Solaris, OpenSolaris
    HP: Alpha, HP-UX

CPU常见平台:
    m68000, m68k
    Power
    PowerPC
    Sparc, UltraSparc
    Alpha
    x86
    x86_64
        amd64
    MIPS
    ARM:知本主义

二进制代码:指令
    add: --> 汇编器 --> 二进制格式的指令
    芯片:汇编语言
    微码编程:

    C语言
        预处理、编译、汇编、链接

    调用:库
        基本库:标准库

DOS --> Windows 

DEC: VAX: vms, PDP

WindowsNT

IBM, OS/2 --> Vista

BSD-->SysV
BSD Lite
    FreeBSD --> MAC OS, ios
    NetBSD
    OpenBSD

Minix

MIT: Stallman, Freedom
    GNU: Gnu is Not Unix.
    GPL: General Public License
        emacs, vi, bash

    Linus: Linux (核心) 

    版本号:major.minor.release
        2.1.4, 3.10.18

    GNU/Linux

源代码 --> 机器代码

发行版:

发行商:
slackware
s.u.s.E
Debian
Ubuntu
Redhat

redhat 9 --> Fedora

RHEL: RedHat Enterprise Linux 3

redhat: GPL, GNU

CentOS: 
    Community ENTerprise OS

LFS: Linux From Scratch
    书:

API:Application Programming Interface
ABI:Application Binary Interface

Linux: 
    API:
        syscall
        libcall
    ABI:


so: Shared Object
dll: Dynamic Link Labraries

POSIX API
    Portable OS

x86
    32bits linux: p1
    64bits linux: p1

自由软件:
FSF:Free Software Fundation
ASF:Apache Software Fundation

    自由学习、自由修改源代码
    可以出于任何目的获取源代码
    自由分发源代码
    自由创建衍生版

开源许可协议:开源协定
    GPLv2, GPLv3
    LGPL: Lesser
    BSD:
        1、如果二次发布的产品中包含源代码,则在源代码中必须带有原来的代码中的BSD协议;
        2、如果二次发布的只是二进制格式的库或程序,则需要在发布的文档或版权声明中说明包含原来的代码中的BSD协议;
        3、不可以用开源代码的作者/组织和原来的产品名字做市场推广;
    Apache License:

    Copyright
    Copyleft

发行版: 开源程序 + Linux内核
    GPL, LGPL, BSD, APL

Android:
    Linux + jvm + java程序

IOS:
    FreeBSD + Object-C (swift)

Linux基本法则:
    一切皆文件(包括硬件)
    由从多单一目的小程序组成
    组合小程序完成复杂任务
    尽可能避免捕获用户接口,为了方便脚本编程以实现自动化执行;
    使用文本文件保存程序的配置数据:使用一个文本编辑器即可完成系统及服务配置工作;

Linux系统层次:

    运行程序:通过内核把某应用程序调度至硬件执行其执行;

    用户接口:是一种独特的应用程序,能够为用户提供启动其它应用程序的机制;
        CLI:
            命令提示符,用户输入要执行的命令即可;
            shell: 外壳
                sh, csh, ksh, bash, zsh, tcsh
        GUI:
            通过点击操作来启动应用程序;
            Gnome, c, gtk
            KDE, c++, qt
            xfce, 轻量级

终端:
    虚拟终端(程序)
        Ctrl-Alt-F[1-6]
        表示:/dev/tty#
    图形终端
        Ctrl-Alt-F7
    伪终端
        使用ssh远程连接
        在图形界面下打开的命令提示符
        表示:/dev/pts/#
    物理终端(控制台console)
        表示:/dev/console
    串行终端:
        表示:/dev/ttyS#


    设备文件:

此前未启动X window:
    startx &
    startx -- :2 &

总结命令:
    ifconfig, tty, ls, startx, echo 

知识框架:
Linux基础知识
系统管理
shell脚本编程
Linux服务管理
openssl, web, ftp, samba, nfs, dhcp, dns
MySQL数据库系统
Linux集群:
LB:lvs, nginx, haproxy
HA: heartbeat, corosync, rhcs, keepalived
分布式应用:
MogileFS
MongoDB (NoSQL)
HDFS,
MapReduce
缓存系统:varnish
虚拟化:xen, kvm, openstack
监控和自动化:
zabbix, puppet, cobbler, ansible
Python

RedHat:
RHCSA
RHCE
RHCA

回顾:
五大部件:CPU、内存、I/O

Linux: 
    Debian, ubuntu
    slackware, s.u.S.E
    RedHat, CentOS, Fedora
        CentOS: 社区版的RHEL
        Fedora: 
    ArchLinux
    Gentoo
    LFS

    编译过程:源代码
        P2 -- Core 2

    GNU/Linux

Linux哲学思想:
    1、一切皆文件(硬件设备亦表现为文件)
    2、由众多目的单一的小程序组成;一个程序只做一件事,并且要做好;
    3、组合小程序完成复杂任务;
    4、尽可能避免跟用户交互;
    5、使用文本文件保存配置信息;
    6、提供机制,而非策略;

自由软件:
    自由使用
    自由学习和修改
    自由分发
    自由创建衍生版

shell:
    CLI
        sh, csh, tcsh, bash, ksh, zsh
    GUI
        Gnome, KDE, xfce

终端类型:设备文件路径
    虚拟终端:/dev/tty#
    伪终端:/dev/pts/#
    控制台:/dev/console
    串行终端:/dev/ttyS#

G, T, P, E, Z, Y

总线:
    地址总线:寻址
    控制总线:
    数据总线:

AMD:    HT
INTEL: QPI

cache, buffer

mkdir: 创建目录

中断:interrupt

poll
interrupt
    hi
    si
DMA: Direct Memory Access

Metadata;元数据

io:controller, device
    adapter

协议:
    SATA:
    IDE:

OS的功能:
    进程调度
    文件系统
    网络协议栈
    内存管理
    驱动程序
    安全功能

生产能力:
    应用程序

Linux用户:
    管理员:拥有所有权限
    普通用户:使用非特权资源

Linux程序:
    管理命令
    普通命令

命令提示符:prompt
    管理员:#
    普通用户:$

用户使用环境:
    通过改变环境变量的值来实现
        变量:有名称的内存空间
        变量赋值:
            格式:变量名=值
                ''
                ""
                ``
        PS1:
            \u: 当前用户名
            \h: 主机名
            \H: FQDN,完整格式的主机名
            \W:当前工作目录的基名
            \w: 当前工作目录绝对路径
            \$: 提示符

    Linux的文件系统:
        Linux严格区分字符大小写

        层次化结构表示文件路径
            倒置的树

        一个目录:就是一个名称空间

        相对路径:从非顶级,缺省路径时从当前路径开始
        绝对路径:从顶级名称空间起始标记的路径
            rootfs

    登录系统:
        工作目录:working directory,当前目录,current directory
        家目录:

命令的语法格式:
    COMMAND OPTIONS ARGUMENTS

    命令:
        命令
        应用程序
        脚本文件

        命令的类型:
            内建命令: 由shell程序自带的命令
                查找方式:shell内建
            外部命令: 本身是一个独立的可执行程序文件,命令名即为程序文件名
                查找方式:通过shell的内置的环境变量PATH中指定的路径进行查找; 

            如何区分:type COMMAND

    选项:调整命令的作用方式
        短选项:-char, 例如,-l, -d, -h
            多个选项间要使用空白分隔:-l -d -h
            合并使用:-ldh
        长选项:--word, 例如:--long, --directory, --human-readable
            长选项一般不能合并使用

        注意:有些选项需要带参数,称为选项参数
            mkfs -t ext4 

    参数:
        命令的作用对象

    cd: change directory
        cd 
        cd ~
        cd ~USERNAME
        cd -: 在前一个目录和当前目录之间反复切换

        两个独特的路径:
            .: 当前目录
            ..:上一级目录

    pwd: print working directory

    命令历史:bash的特性之一
        history

        保存的条数:
            环境变量:HISTSIZE

        用户退出时的持久保存位置:
            环境变量:HISTFILE,通常默认为用户家目录下的.bash_history

            此文件中可保存的最大数目:
                环境变量:HISTFILESIZE

        用法:
            history N: 显示最近的N条,包括当前命令自身;
            history -c: 清空命令历史
            history -d offset: 删除指定的偏移处的命令条目
            history -a [/path/to/some_history_file]: 将当前会话中的命令历史写入指定文件

        bash调用命令历史列表中的命令:
            !#: 执行命令历史中的第#条命令
            !!: 执行上一条命令
            !string: 执行命令历史中最近一次以string开头的命令;

            !$: 调用上一条命令的最后一个参数
            ESC, .:功能同上

如何获取命令帮助:
    内置命令:help COMMAND
        例如:help history
    外部命令:
        1、COMMAND --help
        2、手册:manual

            手册:有章节之分,1-9
            man [#] COMMAND

            如何查看指定命令在哪些章节下有帮助:
            whatis COMMAND

                注意:whatis根据数据库执行查找操作,此库为系统定期更新;可使用makewhatis手动更新;

            手册的段落:
                NAME: 命令名称
                DESCRIPTION: 命令功能的详细描述
                OPTIONS: 所有选项
                SYNOPSIS: 使用格式
                EXAMPLES: 使用示例
                FILES: 与当前命令相关的配置文件
                SEE ALSO: 可参考的其它手册

            帮助中的格式字串:
                []:可省略
                <>: 不可省略
                |: 二选一或多选一
                ...: 同类内容可以出现多个

            man的使用机制:
                翻屏:
                    空格键:向文件尾部翻一屏
                    b: 向文件首部翻一屏
                    回车键:向文件尾部翻一行
                    k: 向文件首部翻一行
                    Ctrl+d: 向文件尾部翻半屏
                    Ctrl+u: 向文件首部翻并屏

                字串搜索:
                    /keyword: 从文件首部向尾部进行搜索
                    ?keyword: 从文件尾部向首部进行搜索
                        n: 显示找到的下一个
                        N:显示找到的上一个

                退出:
                    q

            注意:man能够为除命令之外的配置文件、系统调用、库调用等都能提供帮助手册,它们分别位于不同的章节中;
                1: 用户命令
                2: 系统调用
                3: 库调用
                4: 设备文件
                5: 配置文件
                6: 游戏
                7:杂项
                8:管理命令

        3、info命令:获取在线文档
            仅在man手册无法获取到足够信息,或想了解程序的开发历史时才使用info

        4、很多应用程序都自带有帮助文档:/usr/share/doc/
            ChangeLog: 程序版本升级的变动情况
            INSTALL: 安装方法说明
            README:程序说明信息

        5、主流发行版官方文档
            redhat, suse, debian

            RedHat: http://www.redhat.com/docs/

        6、google

练习:获取下面命令的使用方法
    shutdown, date, hwclock, ntpdate, reboot, halt, who, whoami, which, hash

    如何关机,如何重启,如在指定时间上重启

    shutdown -h
             -r
             -c

        时间格式
             now
             +m
             hh:mm

    终止当前命令的执行:Ctrl+c

    Linux中所有以点号开头的文件名均为隐藏文件:
        ls -a
        ls -A

Linux的国际化:
    internationalization

    # export LANG=en

知识回顾:
    bash查找命令的方式:
        外部命令查找:$PATH
            第一次执行真正的查找操作;查找结果会缓存;
                查看此缓存使用hash命令
                    -d: 清除指定名称的缓存内容
                    -r: 清空缓存

bash的重要特性之一:命令补全
    根据内建命令或外部命令的查找方式查找以用户指定的字符串开头的命令
        如果用户指定的开头字符串能惟一标识某命令,则tab键可补全此命令
        否则,则两次tab键可显示所有以指定字串开头的命令

Linux文件系统的基础特性:
    1、文件名严格区分大小写
    2、所有文件都们于根目录下,FHS
    3、路径以/做为分隔符
    4、每个文件的名称可使用除/以外任意字符,单个名称最长不能超出255个字符;

bash重要特性之一:路径补全
    以用户指定的起始路径进行文件名补全查找

    每个绝对路径都可以切割为两部分
        基名
            basename  /path/to/somewhere
                结果为somewhere
        目录名
            dirname /path/to/somewhere
                结果为/path/to

bash的命令历史:
    HISTSIZE
    HISTFILE
    HISTFILESIZE

    HISTCONTROL:
        ignoredups: 忽略重复的命令,连续的相同命令才会为重复
        ignorespace: 忽略以空白字符打头的命令
        ignoreboth: 以上二者同行生效;


练习:获取下面命令的使用方法
    shutdown, date, hwclock, ntpdate, reboot, halt, who, whoami, which, hash

    reboot: 重启
    halt: 关机
    poweroff: 关机

date: 日期和时间
    date [options] [+FORMAT]
        %s: 时间戳计时法,从Unix元年(1970-01-01 00:00:00)到此刻所经过的秒数
        %F, %D
        %T
        %Y
        %m
        %d
        %H
        %M
        %S

    date [MMDDhhmm[[CC]YY][.ss]]

    Linux有两个时钟:系统时钟和硬件时钟
        硬件时钟:
        系统时钟:Linux

    hwclock
        -s: 以硬件为准
        -w:以系统为准

ntp: Network Time Protocol
    通过网络同步系统时间

    C/S: Server, Client

ntpdate SERVER

who: 登录至当前系统的所有用户
whoami: 当前终端上登录的用户

which: 显示指定命令的完整路径
    --skip-alias: 路过命令别名

FHS:
/bin, /sbin: 系统自身启动和运行时可能会用户的核心二进制命令
/lib: 共享库文件和内核模块
/lib64:
/etc: 配置文件
/usr:
/usr/bin, /usr/sbin: 系统运行中,用户为完成某些操作可能用到的命令
/usr/lib, /usr/lib64: 库文件
/usr/share/man, /usr/share/doc
/dev: devices的简写,所有设备的设备文件都存放于此处;设备文件通常也称为特殊文件(仅有元数据,而没有数据)
/proc: 伪文件系统,内核和进程信息的虚拟文件系统接口
/sys: 伪文件系统,硬件设备信息虚拟文件系统接口
/boot: 系统引导加载时用到的静态文件,内核和ramdisk(CentOS5:initrd, CentOS6:initramfs), grub(bootloader)

/home/USERNAME
/root

/mnt
/media

/srv: 服务所用到的数据

/tmp: 临时文件存储位置

/var: 经常发生变化的文件
    /var/log

/misc: 备用目录

/opt: 第三方应用程序的安装目录
/usr/local: 

/selinux
    Security Enhanced Linux: 安全加强的Linux



应用程序的组成部分:
    二进制程序
    库文件
    配置文件
    帮助文件

文件管理类命令:
文件类型
文件信息查看
用户和权限
bash的一些特性
管道和重定向
文件本编辑器
正则表达式
文件查找

文件类型:
    普通文件:-, f
    目录文件: d
    符号链接文件:l
    设备文件:
        字符设备:c (线性设备)
        块设备:b (随机设备)
    命名管道:p
    套接字文件:s (unix sock文件)

文件内容的类型:
    file /path/to/somefile

目录管理:
    cd, pwd, ls

    mkdir: make directory
        -p: 当指定的目标目录的父目录不存在时,则先创建之

    rmdir: remove directory
        -p: 删除单传目录路径中各目录

    bash的工作特点:没有返回信息通常最好的信息
        每个命令执行结束后,会有一个“执行状态返回值”,有效范围0-255
            0: 执行成功
            1-255: 执行失败

        使用特殊变量$?可以获取最近一条命令的状态返回值
            # echo $?

    bash特性之一:命令行展开
        ~: 用户家目录
        ~USERNAME: 指定用户的家目录

        {}: 
            /tmp/{x,y}
                /tmp/x, /tmp/y

            /tmp/{x,y}/z
                /tmp/x/z, /tmp/y/z

        创建/tmp/x/z, /tmp/y/z, /tmp/x/m, /tmp/y/m

        练习1:创建/tmp/ 
            a_b, c_b, a_d, c_d

        练习2:创建/tmp/mylinux/
            boot
                grub
            bin
            sbin
            etc
                rc.d
                    init.d
                sysconfig
                    networking-scripts
            lib
                modules
            lib64
            usr
                local
                    bin
                    sbin
                    lib
                    lib64
                bin
                sbin
                lib
                lib64
            proc
            sys
            dev
            var
                log
                run
                lock
            tmp

# mkdir -pv /tmp/mylinux/{boot/grub,bin,sbin,etc/{rc.d/init.d,sysconfig/networking-scripts},lib/modules,lib64,usr/{bin,sbin,lib,lib64,local/{bin,sbin,lib,lib64}},proc,sys,dev,var/{log,run,lock},tmp}

如何安装tree:
    # cd /etc/yum.repos.d/
    # wget http://172.16.0.1/centos6.5.repo
    # rm CentOS-Base.repo
    # yum -y install tree

ls命令:
    list简写

    ls [option] [file]

        常用选项:
            -l: long,长格式显示文件的详细属性信息
                drwxr-xr-x.  2 root root  4096 Feb 12 09:55 account
                    左起第一位:文件类型
                    后面的9位:权限,常称为mode
                        r: 读,Read
                        w: 写, Write
                        x:执行, eXcute
                    .: 表示文件有隐藏属性
                        lsattr命令可以查看
                    数字:此文件被硬链接的次数
                    属主:owner, 文件的拥有者
                    属组:group, 文件的所属的组
                    4096: 文件大小,单位是字节
                        -h: human-readable,自动做单位换算
                    文件最近一次被修改的时间
                    文件名
            -a: 显示所有文件
            -d: 通常和-l一起使用,用于仅显示目录自身属性
            -r: reverse, 逆序显示
            -R: recursive, 递归显示,显示子目录中的内容

文件管理类的命令:
    查看:cat, tac, head, tail, less, more
    时间戳管理:touch
    复制:cp
    移动:mv
    查看元数据属性:stat
    文本编辑器:nano, vi

stat: 显示文件的元数据
    时间戳:
        atime
        mtime
        ctime

touch:改变文件的atime和mtime
    touch [option]... FILE
        如果FILE不存在,默认会创建一个空文件

        -a: 仅改变atime
        -m: 仅改变mtime
        -c: 不创建空文件
        -t [[CC]YY]MMDDhhmm[.ss]

文件查看类命令:
    cat: 连接并显示文本文件内容

    数据流:stream

        -E:显示行结束符
        -n: 显示行号

    tac: 逆序显示文件内容

        Shift+PageUp/PageDown: 翻屏

    分屏显示:
        more 和 less

    查看首部或尾部的部分内容:
        head
        tail
            -n #: 指定的行数

        tail -f

命令总结:shutdown, date, reboot, halt, poweroff, which, who, man, info, help, whatis, makewhatis, whoami, hwclock, ntpdate, touch, stat, file, cat, tac, more, less, head, tail, mkdir, rmdir, cd, pwd, ls, type, hash

回顾:
文件类型:
f, d, l, c, b, p, s

    file

文件timestamp:
    atime
    mtime: 数据的改变
    ctime: 元数据的改变

    stat

    ls -l

文本查看:cat, tac, more, less, head, tail

bash特性之命令别名和命令引用:
alias
alias ALIAS=COMMAND

别名与命令同名时:
    绝对路径
    \COMMAND

    生效范围:命令行定义的别名,其生效范围为当前会话;

unalias [ALIAS]
    -a: 撤消所有别名

bash支持的引用:
    ''
    ""
    ``:引用一个命令的执行结果
        $()

bash特性之文件名通配(globbing):
: 任意长度的任意字符
p
d, pad, pbd, pd
abc
?: 匹配任意单字符
[]: 匹配指定范围内的任意单字符
[abc], [a-z], [0-9], [0-9a-z]
[^]:匹配指定范围以外的任意单字符
[^0-9a-z]

    字符集合:
        [:space:] : 所有空白字符
        [:punct:] : 所有标点符号
        [:lower:] :所有小写字母
        [:upper:]
        [:digit:]
        [:alnum:]
        [:alpha:]

·

你可能感兴趣的