Intelligence without ambition is a bird without wings.

2015-06-18
sort

工作流程

sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

常用选项

  • -b

    忽略前导空白

  • -d

    用来排序目录,只考虑空白符和字符?

  • -n

    根据字符串形式对应的数字排序

  • -h

    根据易读格式排序,也就是使用了B,K,M等

  • -r

    结果逆序输出

  • -s

    稳定排序

  • -u

    去除键重复的记录

  • -o FILENAME

    输出到指定文件,避免重定向到同一文件时造成的内容截断

  • -t, –field-separator=SEP

    使用指定分隔符来分割记录

  • -k, –key=KEYDEF

    指定排序键,可以多次指定

实例

  • 按第3字段的数字值排序输出

    cat /etc/passwd|sort -t':' -n -k3,3 |less
    
阅读此文

2015-06-17
centos-安装virtualbox增强功能

环境

  • CentOS-7.0.1

  • VirtualBox-4.3.28

步骤

  1. 更新内核

    yum update kernel
    reboot

  2. 安装依赖

    rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
    yum install gcc kernel-devel kernel-headers dkms make bzip2 perl
    
  3. 在虚拟机控制器中,添加VBoxGuestAdditions.iso

  4. 挂载光盘

    mkdir /mnt/cdrom
    mount /dev/cdrom /mnt/cdrom
    
  5. 编译安装

    cd /mnt/cdrom && ./VBoxLinuxAdditions.run
    
  6. 重启生效

    reboot
    

参考

  1. http://www.if-not-true-then-false.com/2010/install-virtualbox-guest-additions-on-fedora-centos-red-hat-rhel/comment-page-7/
阅读此文

2015-06-17
grub2-修改配置

步骤

  1. 修改配置文件

    vi /etc/default/grub
    /etc/grub.d/
    
  2. 更新配置

    grub2-mkconfig -o /boot/grub2/grub.cfg
    

参考

  1. https://help.ubuntu.com/community/Grub2/Setup
阅读此文

2015-06-17
muduo-编译安装

环境

  • CentOS-7.0.1

  • muduo-2.5

步骤

  1. 下载

    wget https://github.com/chenshuo/muduo/archive/master.zip
    
  2. 解压

    unzip master.zip
    
  3. 编译

    cd muduo-master && sh build.sh
    
阅读此文

2015-06-16
C++-智能指针之boost.scroped_ptr

功能

  • 提供一种垃圾回收机制,当变量(new分配的)离开其作用域,自动执行delete

缺陷

  • noncopyable,意味着不能存放到容器,或多次引用

结论

当不需要传递所有权时,可使用

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>

#include <boost/scoped_ptr.hpp>

class A {
public:
A(int id): id_(id)
{
std::cout << __PRETTY_FUNCTION__ << std::endl;
}

~A()
{
std::cout << __PRETTY_FUNCTION__ << std::endl;
}

int id_;

};

int main(int argc,char* argv[])
{

boost::scoped_ptr<A> i(new A(1));

std::cout << i->id_ << std::endl;

return 0;
}
阅读此文

2015-06-16
C++-智能指针之auto_ptr

功能

  • 提供一种简单的垃圾回收机制,当变量(new分配的)离开其作用域,自动执行delete

原理

基于RAII(资源申请即初始化),利用C++确定性析构,保证变量当离开作用域时,自动执行析构函数来释放内存

缺陷

  • 不能将同一个对象存储到多个auto_ptr,会导致多次析构,从而崩溃

    A *p = new A();
    std::auto_ptr<A> a(p);
    std::auto_ptr<A> b(p);
    
  • 不能管理数据对象,因为~auto_ptrdelete而不是delete []

    int *p=new int[10];
    auto_ptr<int>ap(p);
    

结论

C++11已经抛弃它,boost也有更好的替代品,决不使用!

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <memory>

class A {
public:
A()
{
std::cout << __PRETTY_FUNCTION__ << std::endl;
}

~A()
{
std::cout << __PRETTY_FUNCTION__ << std::endl;
}

private:
};


int main(int argc,char* argv[])
{

std::auto_ptr<A> a(new A());

return 0;
}

参考

  1. http://www.cplusplus.com/reference/memory/auto_ptr/?kw=auto_ptr
  2. http://baike.baidu.com/view/3511189.htm
阅读此文

2015-06-16
C++-智能指针之boost.scroped_ptr

功能

  • 提供一种强大的垃圾回收机制

  • copyable,可存放到容器中,可多次引用

  • 当引用计数为0时,自动析构

使用误区

  • 不能使用同一个对象指针来构造

    A *a = new A(1);
    
    boost::shared_ptr<A> p1(a);
    boost::shared_ptr<A> p2(a);
    // 应该这样
    // boost::shared_ptr<A> p1(new A(1));
    // boost::shared_ptr<A> p2(p1);
    

结论

非常强大,多多使用!

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>

#include <boost/shared_ptr.hpp>

class A {
public:
A(int id): id_(new int(id))
{
std::cout << __PRETTY_FUNCTION__ << std::endl;
}

~A()
{
std::cout << __PRETTY_FUNCTION__ << std::endl;
delete id_;
}

int *id_;

};

int main(int argc,char* argv[])
{

A *a = new A(1);

boost::shared_ptr<A> p1(a);
boost::shared_ptr<A> p2(p1);

std::cout << *(p1->id_) << std::endl;

return 0;
}
阅读此文

2015-06-16
查看boost版本号

vi /usr/include/boost/version.hpp
阅读此文

2015-06-15
apache-建立虚拟站点

阅读此文

2015-06-15
mysql-安装

ubuntu(ubuntu-14.04, mysql-5.5)

  • [删除原有]

    sudo apt-get remove –purge mysql-server-5.5 mysql-client-5.5
    sudo apt-get purge mysql-common
    sudo apt-get autoremove
    sudo apt-get clean

  • 安装

    apt-get install mysql-server-5.5 mysql-client-5.5
    

centos

sudo yum install mariadb-server

sudo systemctl start mariadb

常见错误

  1. mysql ERROR: 1050 Table 'plugin' already exists

    没有卸载干净,执行上面清理命令

    参考:

    1.  <http://askubuntu.com/questions/86939/error-while-installing-mysql-server-5-1>
    
阅读此文