find 命令用法记录

Posted on 2016-4-25 in Linux • Tagged with linux, commandLeave a comment

find 命令在 Linux 中是一个经常使用的命令,被用于在目录层次结构中搜索文件。

它最简单的使用是,搜索一个或多个目录。比如说,输出家目录及子目录的列表:
$ find ~

常见用法

  1. 查找当前文件夹及子文件夹里有文件名为“aaa”的文件
    $ find . -name "abc"
    -name:表示要根据名称查找,我们也可以指定 “*.py” 来表示要查找所有的 Python 脚本文件。

  2. 查找当前文件夹及子文件夹里有没有“bbb”目录
    $ find . -type d -name bbb
    -type:表示设定查找类型,d表示文件夹,f表示普通文件,l表示链接文件。

  3. 查找当前文件夹及子文件夹中属于用户“tntc4stl3”的文件
    $ find . -user tntc4stl3
    -user:设定所属用户的名称,还可以指定-group ...

Continue reading

利用 Docker 搭建多节点 Mesos 集群

Posted on 2016-3-9 in Others • Tagged with mesos, dockerLeave a comment

在上一篇文章中我们已经简单介绍了 Mesos 的背景,那么为了更好的学习 Mesos,我们需要搭建一个测试环境。我选择搭建一个三节点的 Mesos 集群,这样也能顺便测试一下 leader 选举以及容错情况。

准备工作

  • 三台 server
  • Docker(版本>1.10,不然之后测试在mesos-slave中运行 Docker 容器会有问题)

开始部署

设置环境变量

我们需要在每台 server 上设定好有关 IP 的环境变量,提供给后续步骤使用。假定我们三台 server 的 IP 分别是 192.168.85.109,192.168.85.115 和 192.168.85.119 ...

Continue reading

一个简单的 Web 服务器

Posted on 2016-3-8 in Code • Tagged with python, 500LLeave a comment

本文是 500 Lines or Less 一书的早期章节,该书是 Architecture of Open Source Applications 系列的第四本。阅读时碰到的任何问题,你都可以来我们的 GitHub tracker 报告。想获取新章节的发布信息,或者有关最终出版图书的计划,请关注 AOSA 博客 或者 Twitter

介绍

在过去的二十年间,Web 已经改变了人类社会的方方面面,但它的核心却几乎没有变动。大多数系统依旧遵循 Tim Berners-Lee 在25年前制定的规则。特别是,大多数 web 服务器仍以过去同样的方式来处理同一类信息。

本章将探索它们是如何运作的。同时,我们将学习开发人员如何开发出不需要为了增加新功能而改写的软件系统。

背景

几乎每个在 web 上运行的程序都会使用名为网际协议 (Internet Protocal) 的通信标准。网际协议是 ...

Continue reading

Mesos 简单介绍

Posted on 2016-3-1 in Others • Tagged with mesosLeave a comment

Apache Mesos 是一个集群管理工具,它为集群中的工作节点提供资源隔离和管理。

Apache Mesos 架构

Mesos 架构图

一个 Mesos 集群由主要由四个部分组成:

  • Zookeeper
  • Mesos masters
  • Mesos slaves
  • Frameworks

对各个部分作一个简单的说明。

Zookeeper
Apache Zookeeper 是一个集中配置管理工具。
Mesos 使用 Zookeeper 来选举 master leader 以及添加 slave 节点到集群中。

Mesos master
Mesos master 是 Mesos 中控制集群的节点。
一个集群通常会有多个 Mesos master 来容错,但只有一个节点会被选为领袖节点(leading master)。

Mesos slave
Mesos slave 是 Mesos ...

Continue reading

Docker 默认配置文件不生效

Posted on 2016-2-28 in Docker • Tagged with docker, linuxLeave a comment

最近的工作需要跟 Docker 打交道,并且搭建了一个私有仓库在本地环境存储相应的 Docker 镜像,但是在往私有仓库(非HTTPS)推镜像的时候,出现了 x509: certificate signed by unknown authority 的错误,Google 后得知解决方法是在 Docker 运行的时候添加 --insecure-registry 选项,或者修改 /etc/default/docker 文件增加一个配置项。

我选择 option 2。于是诡异的事情发生了。

我的系统是 Ubuntu 15.04,Docker 版本是 1.10.2(写本文的时候是最新的稳定版)。

按照网上的解决方案,我在 /etc/default/docker 中增加了一行 DOCKER_OPTS="--insecure-registry ...

Continue reading

New blog powered by Pelican

Posted on 2016-2-26 in OthersLeave a comment

心中还是更爱 Python,于是找来 Pelican 替换掉现在的 Jekyll。

get start的话可以参考官方文档,很简单,至于使用 Github 来 host 站点,可以参考 Full Stack Python 作者 Matt Makai 的一篇文章:Getting Started With Pelican and GitHub Pages

最后,博客的主题来自 Alexandre Vicenzi 的 Flex

Continue reading

Virtualenvwrapper 简单介绍

Posted on 2016-2-22 in Code • Tagged with pythonLeave a comment

virtualenvwrapper 包装了一系列的命令,使得使用虚拟环境(virtual environment)变得更加容易。并且它会将所有的虚拟环境都放在一个目录以便于管理。

安装:

$ pip install virtualenvwrapper

.bashrc加入以下两行:

export WORKON_HOME=$HOME/PyEnvs
source /usr/local/bin/virtualenvwrapper.sh

重新加载Shell启动文件(source ~/.bashrc)

基本用法:

  1. 创建一个虚拟环境:
    $ mkvirtualenv venv
    这将在 ~/PyEnvs 目录下创建一个 venv 文件夹。

  2. 进入虚拟环境工作:
    $ workon venv
    workon 可以停止当前工作的虚拟环境,所以你能很快的在环境之间切换。

  3. 停用虚拟环境:
    $ deactivate

  4. 删除:
    $ rmvirtualenv venv

Continue reading

理解dict.copy() - shadow 还是 deep?

Posted on 2015-3-11 in Code • Tagged with pythonLeave a comment

最近在重新设计一段代码的时候,发现有一行使用dict.copy()的方式复制一个字典,第一反应是会和list一样,对新dict的任何操作都会影响原有的dict,结果实验了一下并不是这样。

>>> a = {'a':111, 'b':222}
>>> b = a.copy()
>>> b['c'] = 333
>>> del b['a']
>>> print a
>>> {'a': 111, 'b': 222}
>>> print b
>>> {'c': 333, 'b': 222}

这让我很困惑,为什么浅复制(shadow copy)的情况和list不一样。。。

StackOverflow上找到了一个回答,解答了我的疑惑,大致描述一下:

对于浅复制,意味着字典的内容不是对值的拷贝,而是创建了新的引用:

>>> a = {1: [1,2 ...
Continue reading

dmidecode 硬件信息查看

Posted on 2015-3-9 in Linux • Tagged with linux, commandLeave a comment

在新东家工作的期间,接触了很多以前没见过的硬件和 Linux 命令,准备抽空整理一下,做个备忘。

先说说 dmidecode

在此之前呢,先介绍一下DMI。所谓DMI,即 Desktop Management Interface,DMI 表是一张包含有系统的硬件组件描述,以及序列号、BIOS版本这类有用的信息的表,以人类可读的样式展示出来。DMI 表的意义在于,让我们在不接触实体硬件的情况家探测硬件信息,方便了用户,同时这也意味着展示出来的信息可能是不可靠的。

最简单的方法将显示dmidecode能显示的全部 DMI 信息:

$ sudo dmidecode

但是有时候我们只需要找出我们关注的信息。

1. 常用参数

  • -q 或 --quiet:
    少显示一些信息,未知或者OEM指定的信息讲不会显示,为了得到简要的信息,这一条比较有用。

  • -t 或者 --type TYPE: 指定要显示信息的类型。

  • -s 或者 --string KEYWORD ...

Continue reading