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

软件包管理:应用程序和底层的cpu架构有非常大的关系
- C语言--源代码--编译成--二进制文件
- 脚本:解释器转换为二进制文件
- 源代码-编译-链接(静态库和动态库)-运行
- 程序包的命名:名称-版本-发行号-架构-rpm
- 主版本号:重大改进
- 次版本号:子功能改进
- 发现号:修正bug
- 架构:x86_64 i686 no.arch(平台无关)
- 静态库:被编译进程序本身
- 动态库:只有一个指针,需要时被调用出来编译执行,使用动态库的软件移植性差。
- 程序的组成部分:
- 二进制程序
- 库(如glibc核心库)
- 配置文件
- 帮助文件
- 程序包之间的依赖关系:x--> y-->z-->x
- Linux 安装软件包的工具:
- yum install自动分析依赖关系,下载并安装程序,使用repo文件定义安装源。
- rpm 可以查询安装卸载升级。
- Make安装3步骤:
- 运行软件包的配置文件。/configure
- make
- make install
- 循环结构1:repeat 动作until条件
- 循环结构2:for x在y内的值,循环动作
- 循环结构3:while 条件do
- 选择结构:if 条件 then 动作 elseif 条件 then 动作 else 动作 fi
- 流程:命令堆积。
Bash的特点
- 用户登录后启动bash,图形界面其实调用的也是bash。
- 每个进程只能看到内核和自己。
- 允许用户多次登录,迭代登录。
- 支持命令历史,管道,别名,命令行编辑,命令行展开,文件名通配,使用变量。
- 区分大小写,命令多为小写字母。
- 文件名长度不得超过255,不可以以/为文件名。