邢栋博客

邢栋博客,Action博客,记录工作和生活中的点点滴滴

Linux 中查看文件第n行内容的命令
Linux 中查看文件第n行内容的命令

方法1:
head -m filename | tail -1                    //查看filename文件的第m行(tail -1 是数字1)
例子:head -100 data.txt | tail -1          //查看data.txt文件的第100行

方法2:
 nl filename | sed -n 'mp'                     //查看filename文件的第m行
例子:nl data.txt | sed -n '100p'             //查看data.txt文件的第100行

方法3:
sed -n 'mp' filename                            //查看filename文件的第m行
例子:sed -n '100p 'data.txt                   //查看data.txt文件的第100行

方法4:
awk 'NR==m' filename                        //查看filename文件的第m行
例子:awk 'NR==100 'data.txt               //查看data.txt文件的第100行
mongodb日志太大问题

MongoDB的日志文件在设置 logappend=true 的情况下,会不断向同一日志文件追加的,时间长了,自然变得非常大。
解决如下:(特别注意:启动的时候必须是--logpath指定了log路径的)
用mongo连接到服务端

use admin  //切换到admin数据库
db.runCommand({logRotate:1})

这样会使mongo关闭当前日志文件,重启一个新的日志文件,不需要停止mongodb服务。

如果感觉之前的log日志文件无用,可以删除掉,这样能节省很大的硬盘空间。
php的mcrypt加密类
<?php
    class McryptModel
    {
        protected $td = '';
        protected $iv = '';
        protected $key = '';
        private static $instance = null;

        private function __construct($cipher,$mode,$key)
        {
            $this->cipher = $cipher;
            $this->mode = $mode;
            $this->key = $key;
        }

        public static function getInstance($cipher=MCRYPT_RIJNDAEL_128,$mode=MCRYPT_MODE_CBC,$key='xingdong365')
        {
            if(self::$instance === null){
                self::$instance = new self($cipher,$mode,$key);
            }
            return self::$instance;
        }

        public function encrypt($str)
        {
            $td = mcrypt_module_open($this->cipher,'',$this->mode,'');//打开算法模块
            $this->td = $td;
            $iv_size = mcrypt_enc_get_iv_size($td);//获取向量大小
            $iv = mcrypt_create_iv($iv_size,MCRYPT_RAND);//初始化向量
            $this->iv = $iv;
            $num = mcrypt_generic_init($td,$this->key,$iv);//初始化加密空间
            $encrypt = mcrypt_generic($td,$str);//执行加密
            mcrypt_generic_deinit($td);//结束加密,执行清理工作
            return base64_encode($encrypt);
        }

        public function decrypt($str)
        {
            $str = base64_decode($str);
            $td = $this->td;
            mcrypt_generic_init($td,$this->key,$this->iv);
            $decrypt = mdecrypt_generic($td,$str);
            mcrypt_generic_deinit($td);
            mcrypt_module_close($td);//关闭算法模块
            return $decrypt;
        }
    }

    $m = McryptModel::getInstance();
    echo $e = $m->encrypt('hello');
    echo "<hr>";
    echo $m->decrypt($e);

    //des加密
    function des_encrypt($encrypt, $key='xingdong365'){
        $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_DES,MCRYPT_MODE_ECB),MCRYPT_RAND);
        $passcrypt = mcrypt_encrypt(MCRYPT_DES ,$key, $encrypt, MCRYPT_MODE_ECB, $iv);
        $resturn = base64_encode($passcrypt);
        return $resturn;
    }

    //des解密
    function des_decrypt($decrypt, $key='xingdong365'){
        $decoded = base64_decode($decrypt);
        $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_DES,MCRYPT_MODE_ECB),MCRYPT_RAND);
        $resturn = mcrypt_decrypt(MCRYPT_DES ,$key, $decoded, MCRYPT_MODE_ECB, $iv);
        return $resturn;
    }
php使用redis替换文件存储session(session_set_save_handler)
<?php
class MySessionHandler implements SessionHandlerInterface
{
    private $redis;
    private $sessionsavepath;
    private $sessionname;
    public function __construct()
    {
        $this->redis = new Redis();
        $this->redis->connect('127.0.0.1',6379);
    }
    public function close()
    {
        return true;
    }
    public function destroy($session_id)
    {
        if($this->redis->delete($session_id)){
            return true;
        }
        return false;
    }
    public function gc($maxlifetime)
    {
        return true;
    }
    public function open($sessionsavepath, $name)
    {
        return true;
    }
    public function read($session_id)
    {
        if($value = $this->redis->get($session_id)){
            return $value;
        }else{
            return false;
        }
    }
    public function write($session_id, $session_data)
    {
        if($this->redis->set($session_id,$session_data,60)){
            return true;
        }else{
            return false;
        }
    }

}

$handler = new MySessionHandler();
session_set_save_handler($handler, true);
session_start();

//$_SESSION['sess_name'] = 'xd';
var_dump($_SESSION);
php生成随机验证码
<?php
    function getVerifyCode($num){
        $content = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $content = str_shuffle($content);
        return substr($content,-$num);
    }

    echo getVerifyCode(4);
python的beautifulsoup4简单测试
# -*- coding:utf8 -*-

# 测试基于 python2.7
# 安装pip 如果没有安装的话
# sudo easy_install pip
# 安装 beautifulsoup4
# pip install beautifulsoup4

from bs4 import BeautifulSoup
import re

html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>

<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>

<p class="story">...</p>
"""

soup = BeautifulSoup(html_doc,'html.parser',from_encoding='utf-8')

print '获取所有的链接'
links = soup.find_all('a')
for link in links:
    print link.name,link['href'],link.get_text()

print '获取Lacie的链接'
link_node = soup.find('a',href='http://example.com/lacie')
print link_node.name,link_node['href'],link_node.get_text()

print '正则匹配'
link_node = soup.find('a',href=re.compile(r"ill"))
print link_node.name,link_node['href'],link_node.get_text()

print '获取p段落文字'
p_node = soup.find('p',class_="title")
print p_node.name,p_node.get_text()

php运行机制和原理

php由内核Zend引擎和扩展成组成,php内核负责处理请求、完成文件流错误处理等操作,Zend引擎可以将php程序文件转换成可以在虚拟机上运行的机器语言,扩展层提供一些应用层操作需要的函数类库等,比如数组和mysql数据库的操作等。

Zend引擎是用C语言实现的,将php代码通过词法语法解析成可执行的Opcode并实现相应的处理方法和基本的数据结构进行内存分配和管理等,对外提供相应的可供调用的API方法。Zend引擎是php的核心,所有的外围功能都是围绕他实现的。扩展层通过组件的方式提供各种基础服务、内置函数,标准库都是通过它来实现的。用户也可以编写自己的扩展来实现特定的需求。服务端应用编写接口(Server Application Programming Interface,SAPI),通过一系列钩子函数使得php可以和外围交互数据。我们平时编写的php程序就是通过不同的SAPI方式得到不同的应用模式,如通过WebServer实现的Web应用和在命令行下运行的脚本等。

一段php程序被执行的时候会被解析成opcode命令,然后在虚拟机中按照顺序执行,由于php本身是C语言开发的,所以在执行的时候调用的都是C的函数。Opcode是php程序执行的基本单位。


Mac下Operation not permitted问题

之前把php-fpm命令复制到/usr/sbin目录中,现在想删除却提示
Operation not permitted
原来苹果系统在某版本后加入了Rootless机制,很多系统目录不再能够随心所欲的读写了,即使设置 root 权限也不行。

以下路径无法写和执行
/System
/bin
/sbin
/usr (except /usr/local)

关闭
重启按住 Command+R,进入恢复模式,打开终端
csrutil disable
reboot 

开启
重启按住 Command+R,进入恢复模式,打开终端
csrutil enable
reboot 


优惠券
最新微语