3.3k 3 分钟

# Linux 安全性 Linux 安全系统核心是用户账户,用户账户通过创建用户时分配的用户 ID(UID) 来跟踪。 /etc/password 文件将用户的登录名匹配到对应的 UID 的值 root 账户是 Linux 管理员,固定分配给的 UID 是 0。 Linux 会为各种各样的功能创建不同的用户账户,这些账户不是真正的用户,而是系统账户,是系统上运行各种服务进程访问资源用的特殊账户。所有运行在后台的服务都需要用一个系统用户账户登录到 Linux 系统上!!在意识到安全问题之前,许多服务都用 root 登陆,如果其中一个服务被攻陷, root 权限就会被入侵。 /etc/shadow...
532 1 分钟

# 简介 本文主要讲解索引的具体工作原理以及代价,如何正确的建立索引才能使查询变快。在阅读本文前,请一定保证对之前更新的内容(B + 树索引)理解明白。 现在我们先创建一个表,之后方便举例 create table single_table ( id int not null auto_increment key1 varchar(100), key2 int key3 varchar(100), key_part1 varchar(100), key_part2 varchar(100), key_part3 varchar(100), common_field...
3.5k 3 分钟

# 简介 以下是维基百科对 shell 的定义 普通意义上的 shell 就是可以接受用户输入命令的程序,Unix 操作系统下的 shell 既是用户交互的界面,也是控制系统的脚本语言。 所以我们可以理解,当你打开终端时,其实就是启动了一个 shell , shell 有很多种,如 bash,zsh,csh 等。 在 /etc/passwd 中列出了当前用户默认的 shell : cyan@cyan-virtual-machine:/etc$ cat...
3.6k 3 分钟

# 前言 在了解 Linux 的环境变量前,我们先了解一下变量。 在脚本中使用以下代码 cyan@cyan-virtual-machine:~/Templates$ cat test#!/bin/bashval=10while echo valdo echo " testing... "done#会循环打印:#val#testing...在脚本中我们直接定义一个变量,该怎么用呢?直接在终端定义变量,此时变量是什么? # 环境变量 划分为局部和全局变量,局部变量只对创建他们的 shell 可见,系统环境变量基本都是大写字母,区别于普通用户的环境变量,查看全局变量可以使用命令...
2k 2 分钟

# 前言 使用 Hexo+Github 搭建博客,因为涉及到部分插件或者安装包的下载,建议使用魔法上网。 推荐文章:https://zhuanlan.zhihu.com/p/26625249 推荐视频:https://www.bilibili.com/video/BV1mU4y1j72n?spm_id_from=333.337.search-card.all.click&vd_source=5acf5a7b23d28e7633e5a9b381c57c42 # 准备工作 # 下载 Node.js 简单的说 Node.js 就是运行在服务端的...
1.6k 1 分钟

# 简介 本文及后续文章都是基于 bash shell 讲解, Linux 发行版本为 Ubuntu 。本文指导读者快速入门 shell 脚本编程而刻意模糊化其他基本概念,本系列于 2022-07-28 开始更新,每天更新一个小节,直到结束,主要是讲解 shell 编程,其中也会涉及到相关的 Linux 知识。 整个 shell 系列不会讲解如何安装双系统,也不会讲解如何安装虚拟机以及 Linux 相关版本的镜像文件。如果你需要相关的虚拟机和 Linux...
2k 2 分钟

# 简介 我们使用 sql 语句查询某条记录时 select * from 表名 where 列名 = xxx; where 后面跟着的是查询条件,我们之前学的,页中的记录是根据主键排序的(如果没有主键,就根据不能为 NULL 的唯一的数据排序,如果这样的属性也没有,就按照 row_id 排序)。 那么在没有创建索引的情况下,如果我们的查询条件是根据主键查询,那么在页中就可以通过二分查找快速获取数据,但是如果 where 后面跟着的是一个非主键属性,那么在页中就只能从 Infimum 到 Supremum 一条一条的顺序查找,一下子就慢很多。 所以我们必须找到一种高效的搜索方法 ——...
4k 4 分钟

# 前言 之前说过,页是 InnoDB 管理磁盘空间的基本单位,一个页的大小基本上是 16KB。MySQL 规定一页至少存两条记录。我们从客户端写入表中的记录会被存在页中,其实还有一种记录,它存在于 B + 树的非叶子节点的页中,其头信息中的 record_type=1 。 目前你只需理解,页中存储的记录要么是我们从客户端写入的真实的记录 record_type=0 。这样的页称为索引页;另一个是 B + 树非叶子节点的目录项记录 record_type=1 。 # 页结构 本节内容主要是就要了解页的大致结构和其存储记录的方式,下图为一个页的基本结构。 之后我们会对其中的结构一...
3.7k 3 分钟

# 前言 MySQL 服务器中负责对表中数据进行读取和写入工作的部分是存储引擎,而服务器支持不同类型的存储引擎,如 InnoDB,MyISAM,MEMORY 等。真实数据在不同存储引擎的存放格式可能不同。因为 InnoDB 现在是 MySQL 默认的存储引擎,所以会介绍其相关特性。 在 MySQL 中,表中的一行数据被称为一条记录,记录保存在页中,页组成 B + 树,通过二分查找迅速找到记录。如果你还看不太懂,也没太大关系,这句话只是想告诉你 InnoDB 存储数据的本质。 # InnoDB...
5.8k 5 分钟

# 简介 计算机中存储的实际上是二进制数据,想要存储字符串,就要建立字符与二进制数据的映射关系。将字符映射为二进制数据的过程叫做编码,将二进制数据映射为字符的过程就是解码。 为了容易记忆,你需要知道,解码就是把看不懂的数据(二进制数据)解析为看得懂的数据(字符)。 因为每个字符实际上是二进制数据,所以他们是可以比较大小的,由此衍生出比较规则。以最经典的 ASCII 字符集为例,该字符集一共收录 128 个字符,每个字符由一个字节保存。字符 a 的二进制编码为 1100001 ,字符 b 的二进制编码为 1100010 ,通过比较就可以看出 a>b...