Linux命令之 chmod(改变文件存取模式)

命令格式

chmod [options] mode files

只有文件属主或特权用户才能使用该功能来改变文件存取模式。mode可以是数字形式或以who opcode permission形式表示。who是可选的,默认是a(所有用户)。只能选择一个opcode(操作码)。可指定多个mode,以逗号分开。

options:

-c,--changes
只输出被改变文件的信息
-f,--silent,--quiet
当chmod不能改变文件模式时,不通知文件的用户
--help
输出帮助信息。
-R,--recursive
可递归遍历子目录,把修改应到目录下所有文件和子目录
--reference=filename
参照filename的权限来设置权限
-v,--verbose
无论修改是否成功,输出每个文件的信息
--version
输出版本信息。

HTTPS 初步介绍

背景:

非对称加密:

基于数学方法,生成一个公钥-密钥对,来对数据做加密-解密,被公钥加密的数据只能被私钥解密,
同样,被私钥加密的数据也只能被公钥解密。所以可以用别人公开的公钥加密一段信息然后发送出去,
只有拥有对应密钥的那个人才能解密。但是缺点是加密-解密的计算成本高,比较占用cpu资源

对称加密:

和非对称加密相比,只生成一个密钥,加密-解密都用这个密钥,所以需要通信双方都拥有该密钥才能正常加/解密,
优点是计算成本低,加/解密速度比非对称加密快很多

HTTPS:

HTTP+SSL/TLS,本质上就是将原本由HTTP发送的明文通信内容,通过加密后发送,从而保证通信安全

CA:

全称:certification authority ,证书颁发机构。是权威、可信的机构,可以视作是HTTPS可靠性的基石

HTTPS连接建立过程:

* 客户端先预置CA的公钥(CA-pub.key),一般会是各浏览器自带,用户不关心

* 服务器生成公钥(SRV-pub.key),并将公钥和各种信息(公司、地址、国家、邮箱等)发送给CA做认证,CA认证通过之后会用CA自己的私钥(CA-pri.key)加密这些信息以及证书的hash值(hash-A),生成完整证书,返回给服务器,服务器自行保存。

Yii2中配置Redis并启用安全验证

1. 安装php-redis扩展:

下载phpredis扩展安装包:

wget http://pecl.php.net/get/redis-3.0.0.tgz 

安装phpredis:

tar zxvf redis-3.0.0.tgz  #解压
cd redis-3.0.0  #cd到解压后目录
/xxxx/phpize  #执行phpize
./configure  
make
make install

在php.ini中添加如下代码,启用redis扩展:

extension=redis.so


2. 安装yii2的Redis扩展:

cd /www/html/basic #cd到工程根目录下
PHP composer.phar require --prefer-dist yiisoft/yii2-redis #使用composer安装扩展


redis各类型实现&命令

比较基础的命令不做过多赘述(例如string的set、get等),主要讲述一下各类型的大概实现方式和需要费力记忆的命令,帮助理解和更好地运用Redis,解决工作中的问题。

需要注意的是:redis中各数据类型是不能嵌套的。不像编程语言中A类可以拥有成员属性B类。

  • string:

string类型是二进制安全的,因为在redis底层的实现中,string类型是一个结构体,内容如下:

1
2
3
4
5
struct sdshdr{
long len; //记录总长度
long free; //记录buf剩余可用长度
char buf[];//实际存储字符串
}

因为使用len记录了总长度,使用free记录了buf数组中剩余可用长度,所以不需要使用nil字符作为结束,从而实现二进制安全

在redis中,也使用string类型保存数字,从而拥有incr、decr等方法,具体实现细节隐藏在底层,不细表了。

mset命令:一次set多个key的值,但若失败一个,则整个命令失效(类似于事务机制,要么都成功,要么都不成功),不会出现部分成功部分失败的情况。

msetnx 命令:参考mset,但比mset多一个限制条件:若其中一个key已存在,则也视为事务失败

什么是跨域?怎么解决跨域问题?

什么是跨域?

跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。

所谓同源是指:域名,协议,端口均相同,不明白没关系,举个栗子:

redis高级特性

一、数据失效方式:

因为Redis是基于内存的,而由于内存的昂贵,注定它的大小是有限的,所以当数据量较大、内存被占满的时候,再插入新数据,就要涉及到如何进行调度了。

调度方式主要分为四类:

  1. 不删除
  2. LRU(最近最久未使用)
  3. 随机删除
  4. 删除剩余过期时间最短

再考虑到部分key存在过期的特性,所以分为一下具体6类:

  1. noeviction:达到内存限额后返回错误,不删除已有内容。
  2. allkeys-lru:使用LRU算法(针对所有数据)
  3. volatile-lru:使用LRU算法(针对设置有过期时间的数据)
  4. allkeys-random:随机删除(针对所有数据)
  5. volatile-random:随机删除(针对设置有过期时间的数据)
  6. volatile-ttl:对设置有过期时间的数据中,删除即将失效的。

PHP 正则表达式

正则表达式十分强大,作用非常多。所以特地记下以下内容,可作为速查手册。

  • \w是数字+大小写字母+下划线

  • \d是数字

  • \s是空白符(\n、\t等)

  • . 可以匹配任意字符(除了换行符\n)

python GIL

经常我们会听到老手说:“python下多线程是鸡肋,推荐使用多进程!”,但是为什么这么说呢?

要知其然,更要知其所以然。所以有了下面的深入研究:

首先强调背景:

1、GIL是什么?GIL的全称是Global Interpreter Lock(全局解释器锁),来源是python设计之初的考虑,为了数据安全所做的决定。

####2、每个CPU在同一时间只能执行一个线程(在单核CPU下的多线程其实都只是并发,不是并行,并发和并行从宏观上来讲都是同时处理多路请求的概念。但并发和并行又有区别,并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。)