basic02

基本概念
  1. 变量:命名的内存空间。
    • Bash变量的类型
      1. 环境变量
      2. 本地(局部)变量
      3. 位置变量
      4. 特殊变量,内置也叫系统变量
  2. 内存:编址的存储单元
  3. 逻辑运算有4种:与,或,非,异或(其实就是+)
  4. 字符类型的隐式转换和显式转换。
  5. 终端类型:
    1. Console-直接连到服务器主机
    2. pty:物理终端(还没有用户时)很多时候等同于使用VGA
    3. tty:虚拟控制台,通常附着在物理终端上。通过软件模拟出来。
    4. ttys:串行终端,非常古老的终端,无需VGA。
    5. pts/#:伪终端,计算机模拟的终端。
  6. 随机数的生成方法:熵池,计算机任务人敲入键盘的间隔是随机的。所以熵池中的随机数是由键盘和其它的随机事件生成。生成随机数的软件从熵池中取随机数,如果随机数不够,计算机会让你继续敲击键盘以产生随机数。这个是由/dev/random产生,更安全。urandom则由软件模拟,更好用。
  7. 静态语言:编译型-使用编译器-强类型语言
    1. C
    2. C++
    3. Java
    4. C#
  8. 动态语言:解释型-使用解释器-弱类型语言
    1. ASP
    2. ASP.NET
    3. PHP
    4. SHELL
    5. PYTHON
    6. PERL
进程管理:
  1. 进程和内存的关系:线性内存--物理内存(内存映射表task struct)
    1. 内存分两段,用户空间和内核空间,用户只能访问自己的空间,内核可以访问全部内存。
    2. 进程如果直接访问内存会造成:内存的泄漏,内存溢出,内存碎片。
    3. 通过内核,将物理内存映射为虚拟内存(把内存封装)。每个进程只知道它自己和内核。
    4. MMU:内存管理单元是CPU中子芯片专门负责物理内存框和虚拟内存页的转换。
    5. 保存现场:有内核负责记录每个进程的退出状态以便下次加载。
    6. 环境切换:context switch
    7. 工作:由多个进程组成
    8. 进程:可以由多个线程组成
    9. 线程:同进程的线程之间可以共享内存和文件。
    10. 原语:在内核空间执行的特殊程序段
      1. 创建
      2. 撤销
      3. 阻塞
      4. 唤醒
    11. 进程创建:父进程创建子进程的系统调用:fork()
    12. 进程撤销:祖先进程撤销子进程的系统调用:exit()
    13. 僵尸进程:结束后不释放内存的进程。内存泄漏。
    14. 不可中断:在等待特定任务,如磁盘读写等待
    15. 可中断:事情完成的空闲状态,随时可以被唤醒
    16. 进程优先级:高0-139低,0-99内核,100-139用户控制.
    17. NIce值:-20~19值越小,优先越高。默认是0.
    18. 进程控制块:
      1. 进程名:
      2. 用户名和组名:控制对资源的访问。
      3. 家族关系:进程可以创建子进程,需要记录进程的家族位置。
      4. 进程当前状态
      5. 进程优先级
      6. 执行程序开始地址
      7. 各种计时信息:进程占用系统资源的情况
      8. 通信信息:进程间交换信息
      9. 占用内存大小及管理用数据结构指针
      10. 共享程序段大小及起始地址
      11. 输入输出设备号。
      12. 指向文件系统的指针和有关标志。
      13. 进程上下文:是进程的静态描述
        1. 上文:已执行过的进程指令和数据在相关寄存器和stack中的内容
        2. 正文:正在执行的指令和数据
        3. 下文:带执行指令和数据
      14. 进程状态:执行,就绪,等待
软件包管理:应用程序和底层的cpu架构有非常大的关系
  1. C语言--源代码--编译成--二进制文件
  2. 脚本:解释器转换为二进制文件
  3. 源代码-编译-链接(静态库和动态库)-运行
  4. 程序包的命名:名称-版本-发行号-架构-rpm
    1. 主版本号:重大改进
    2. 次版本号:子功能改进
    3. 发现号:修正bug
    4. 架构:x86_64   i686  no.arch(平台无关)
  5. 静态库:被编译进程序本身
  6. 动态库:只有一个指针,需要时被调用出来编译执行,使用动态库的软件移植性差。
  7. 程序的组成部分:
    1. 二进制程序
    2. 库(如glibc核心库)
    3. 配置文件
    4. 帮助文件
  8. 程序包之间的依赖关系:x--> y-->z-->x
  9. Linux 安装软件包的工具:
    1. yum install自动分析依赖关系,下载并安装程序,使用repo文件定义安装源。
    2. rpm 可以查询安装卸载升级。
    3. Make安装3步骤:
      1. 运行软件包的配置文件。/configure
      2. make
      3. make install
程序结构控制:

  1. 循环结构1:repeat 动作until条件
  2. 循环结构2:for x在y内的值,循环动作
  3. 循环结构3:while 条件do
  4. 选择结构:if 条件 then 动作 elseif 条件 then 动作 else 动作 fi
  5. 流程:命令堆积。

Bash的特点
  1. 用户登录后启动bash,图形界面其实调用的也是bash。
  2. 每个进程只能看到内核和自己。
  3. 允许用户多次登录,迭代登录。
  4. 支持命令历史,管道,别名,命令行编辑,命令行展开,文件名通配,使用变量。
  5. 区分大小写,命令多为小写字母。
  6. 文件名长度不得超过255,不可以以/为文件名。