digitalocean–不错的VPS

digitalocean–不错的VPS 512M RAM 一个月 5美元
https://cloud.digitalocean.com/billing

Manage Payments 然后用paypal 绑定银行卡就可以了 当然啦 最终还是经过了银联这王八蛋 ! 好啦 有空我写个教程出来

一次因为绑hosts 导致github不可用的故障

首先感谢 github.com ,当然不会感谢党和国家的哈哈,虽然党上次封了github 后来又开了
作为一个sa github.com对我们来说也起来起重要了 因为很多常用的软件代码都托管在上面呢
但是 今天

git clone https://github.com/saltstack/salt.git
老是提示失败

打开相对应的页面又跳到
https://help.github.com/articles/why-did-i-get-redirected-to-this-page

看到有一句
How do I fix this?
Please remove anything matching github.com from the file located at /etc/hosts.

sudo vim /etc/hosts

把里面有关github.com的全部删除就行了

sort 排序

sort 排序

有时 ls 一下 你会发现
html_s109
html_s11
怎么109 在11前面了呢 很明显这不是我们想要的结果
怎么办呢 ,就昨借助一下 sort

# -t ‘_’ 是用 _分隔 -k2.2 是 _分开的第二个 的第二列 -n 依照数值的大小排序
ls -alh |grep html|awk '{print $9}'|sort -t '_' -k2.2 -n

下面列出一些常用 的sort 参  数:
-b 忽略每行前面开始出的空格字符。
-c 检查文件是否已经按照顺序排序。
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-f 排序时,将小写字母视为大写字母。
-i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
-m 将几个排序好的文件进行合并。
-M 将前面3个字母依照月份的缩写进行排序。
-n 依照数值的大小排序。
-o<输出文件> 将排序后的结果存入指定的文件。
-r 以相反的顺序来排序。
-t<分隔字符> 指定排序时所用的栏位分隔字符。
+<起始栏位>–<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
–help 显示帮助。
–version 显示版本信息
-k, –key=POS1[,POS2] start a key at POS1, end it at POS2 (origin 1)

另一个例子

[root@vm6 ~]# cat 2
hd_s15_master_1 NULL
hd_s16 NULL
hd_s57 5453.21MB
hd_s4 15657.37MB
hd_s84 6819.89MB
hd_s90 7652.82MB
hd_s95 6483.36MB
hd_s124 4115.92MB
hd_s132 4728.20MB
hd_s134 3313.86MB
hd_s132 4728.20MB
hd_s134 3313.86MB
hd_s10001 0.99MB
[root@vm6 ~]# sort -n 2
hd_s10001 0.99MB
hd_s124 4115.92MB
hd_s132 4728.20MB
hd_s132 4728.20MB
hd_s134 3313.86MB
hd_s134 3313.86MB
hd_s15_master_1 NULL
hd_s16 NULL
hd_s4 15657.37MB
hd_s57 5453.21MB
hd_s84 6819.89MB
hd_s90 7652.82MB
hd_s95 6483.36MB
[root@vm6 ~]# sort -n 2 -t s -k 2
hd_s4 15657.37MB
hd_s15_master_1 NULL
hd_s16 NULL
hd_s57 5453.21MB
hd_s84 6819.89MB
hd_s90 7652.82MB
hd_s95 6483.36MB
hd_s124 4115.92MB
hd_s132 4728.20MB
hd_s132 4728.20MB
hd_s134 3313.86MB
hd_s134 3313.86MB
hd_s10001 0.99MB

参考资料
http://www.linuxso.com/command/sort.html
http://tonykorn97.itpub.net/post/6414/273539
http://linux.chinaunix.net/techdoc/system/2008/09/21/1033339.shtml

《sort帮你排序》-linux命令五分钟系列之二十六

招行信用卡

因为海淘的原因,近来办了个visa ,记下下

信用卡普卡和金卡的基本区别是信用额度(人民币)不同,基本功能基本一致。普卡3000-10000元;金卡为1-5万元。

年费减免规则 首年免年费刷卡次免次年年费

python的内置函数(built-in functions)

python的内置函数(built-in functions)

python的内置函数可以直接调用,无需import。有很多

那天在看salt 遇到 any

any(iterable)
Return True if any element of the iterable is true. If the iterable is empty, return False. Equivalent to:

说明:如果iterable的任何元素不为0、”、False,all(iterable)返回True。如果iterable为空,返回False。函数等价于:

我在平时常用到的,
int()将字符串或者小数转换成整数
str()将其他类型转换是字符型
len(X)返回X的长度。The argument may be a sequence (string, tuple or list) or a mapping (dictionary).
print()输出
type(X)返回X的数据类型
open(f)打开一个文件f并返回文件类型的对象。 和file()相似。

http://www.pythontab.com/html/2013/hanshu_0117/137.html
http://blog.sina.com.cn/s/blog_4d14fb2b0100wnoz.html
http://docs.python.org/2/library/functions.html

seafile

sudo dpkg -i seafile_2.0.8_amd64.deb
dpkg:依赖关系问题使得 seafile 的配置工作不能继续:
seafile 依赖于 libjansson4 (>= 2.0.1);然而:
未安装软件包 libjansson4。
dpkg:处理 seafile (–install)时出错:
依赖关系问题 – 仍未被配置
正在处理用于 bamfdaemon 的触发器…

自动安装上相关依赖就行了
sudo apt-get -f install
sudo dpkg -i seafile_2.0.8_amd64.deb

下面是介绍

Seafile 是第一个能够在产品功能上和稳定性上能与 Dropbox 相比的开源项目。 它同时提供了 Dropbox 所不具有的协作功能。Seafile 的创新特色包括:

群组功能,用户可以创建和加入群组, 在群组中共享文件。在 Dropbox 中,用 户一般是通过创建公共的账号来做多人协作。群组功能使得多人协作更加的直观流畅。
同步和协作结合更自然。Seafile 中,文件组织成资料库,每个资料库可以单 独共享到多个群组和多个用户。用户可以选择性的单独同步一个资料库到一台电脑上。
在线文件协作,包括文件在线预览、评论、推荐等等。 Markdown, text, 源代 码等文本格式可以直接在线编辑。
端到端数据加密,Seafile 中用户可以创建加密的资料库,密码不在服务器上 保存,这样甚至系统的管理员可无法读取私有数据。
分布式同步,用户可以同时使用多个服务器,比如把公司的资料放在企业内部 的服务器上,把对外交流的资料放在 Seafile 公共服务器上。
Seafile 采用了类似 GIT 的数据模型和分布式同步技术,但是针对自动同步和大文件管理做了优化。

同其他的开源项目 (SparkleShare, Owncloud) 相比,Seafile 有以下的优势:

有成熟和稳定的同步算法
并不是 Dropbox 克隆,Seafile 是一个针对团队协作设计的新产品。
目前客户端支持所有主流平台,包括 Windows, Linux, Mac,Andoird 和 iOS。服务器支持 Linux 平台,可以跑在 Raspberry Pi 平台上。

Seafile 项目最初是希望解决在没有服务器的情况下社团成员之间共享文件资料的 问题。所以 Seafile 项目包括了一个 Ccnet 子项目。Ccnet 是一个 P2P 的网络应用框架,实现了网络节点间的连接管理、消息通信、RPC 等功能。后来,Seafile 项目才逐步的演化成一个分布式的架构,并加入了文件同步的功能。

Seafile 目前的项目目标是成为团队文件资料管理、协作和共享的统一性的平台, 并成为一个世界级的一流产品。

format

format 格式字符串

符号 {} 是替换变量的占位符。若没有指定格式,则直接将变量值作为字符串插入

In [1]: print 'We are the {0} who say "{1}!"'.format('knights', 'Ni')
We are the knights who say “Ni!”

##salt moudle 常常遇见
qry = ‘CHECK TABLE `{0}`.`{1}`’.format(name, table)
括号内的字符(称为格式字段)被替换的对象。{}括号中的数字是指替换的位置,里面的数字,比如0,1表示替换元组的索引位置。

python 字符串(string) format介绍和代码
http://www.cnpythoner.com/post/291.html#

格式字符串(string formatter)
http://youngsterxyf.github.io/2013/01/26/python-string-format/

http://blog.csdn.net/xiaofeng_yan/article/details/6648493

subprocess

1. subprocess以及常用的封装函数
Python有很几个模块都可以创建进程。最终我选择使用subprocess模块,因为在Python手册中有这样一段话:
  This module intends to replace several other, older modules and functions, such as: os.system、os.spawn*、os.popen*、popen2.*、commands.*
  subprocess被用来替换一些老的模块和函数,如:os.system、os.spawn*、os.popen*、popen2.*、commands.*。可见,subprocess是被推荐使用的模块。

返回退出信息(returncode,相当于exit code,见Linux进程基础)

#eg
[root@master 11]# python 1
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda1 16G 3.6G 12G 25% /
tmpfs 298M 0 298M 0% /dev/shm
returncode: 0
[root@master 11]# cat 1
#!/usr/bin/python
import subprocess
returnCode = subprocess.call("df -h",shell=True)
print 'returncode:', returnCode

import subprocess
rc = subprocess.call(["ls","-l"])

import subprocess
out = subprocess.call("ls -l", shell=True)

我们使用了shell=True这个参数。这个时候,我们使用一整个字符串,而不是一个表来运行子进程。Python将先运行一个shell,再用这个shell来解释这整个字符串。

2. Popen

实际上,我们上面的三个函数都是基于Popen()的封装(wrapper)。这些封装的目的在于让我们容易使用子进程。当我们想要更个性化我们的需求的时候,就要转向Popen类,该类生成的对象用来代表子进程。

subprocess.PIPE
  在创建Popen对象时,subprocess.PIPE可以初始化stdin, stdout或stderr参数。表示与子进程通信的标准流。

subprocess.STDOUT
  创建Popen对象时,用于初始化stderr参数,表示将错误通过标准输出流输出

与上面的封装不同,Popen对象创建后,主程序不会自动等待子进程完成。我们必须调用对象的wait()方法,父进程才会等待 (也就是阻塞block):

#这个不错,mysql 导入就是用这个实现的呢
我们可以在Popen()建立子进程的时候改变标准输入、标准输出和标准错误,并可以利用subprocess.PIPE将多个子进程的输入和输出连接在一起,构成管道(pipe):

import subprocess
child1 = subprocess.Popen(["ls","-l"], stdout=subprocess.PIPE)
child2 = subprocess.Popen(["wc"], stdin=child1.stdout,stdout=subprocess.PIPE)
out = child2.communicate()
print(out)

[root@master 11]# python 2
(‘ 3 18 91\n’, None)
[root@master 11]# ls -l |wc
3 18 91

subprocess.PIPE实际上为文本流提供一个缓存区。child1的stdout将文本输出到缓存区,随后child2的stdin从该PIPE中将文本读取走。child2的输出文本也被存放在PIPE中,直到communicate()方法从PIPE中读取出PIPE中的文本。
要注意的是,communicate()是Popen对象的一个方法,该方法会阻塞父进程,直到子进程完成。

总结:

subprocess.call, subprocess.check_call(), subprocess.check_output()

subprocess.Popen(), subprocess.PIPE

Popen.wait(), Popen.communicate()

参考
http://www.cnblogs.com/vamei/archive/2012/09/23/2698014.html
http://blog.csdn.net/jgood/article/details/4498166
http://www.cnblogs.com/GODYCA/archive/2013/05/08/3066870.html

Device eth0 does not seem to be present,delaying initialization.的解决方法

因为平时要测试和 作集群什么的测试,用物理机可行性不大,我一般用proxmox作的kvm虚拟机, 方便好用 不过最近老是遇到点小问题
虚拟机用模板做linux的时候因为网卡配置信息(主要是MAC)也复制过去,但是虚拟服务器会分配另外的一个mac地址,启用的时候会出错,错误信息为:device “eth0” does not seem to be present, delaying initialization

#解决方法 今天这个是小胖的办法 还不错
#! /bin/bash

rm -rf /etc/udev/rules.d/70-persistent-net.rules
cat /etc/sysconfig/network-scripts/ifcfg-eth0 |grep -v "HWADDR" |grep -v "UUID" >/tmp/network
cat /tmp/network >/etc/sysconfig/network-scripts/ifcfg-eth0
rm rf /tmp/network

restart

mv /etc/sysconfig/network-scripts/ifcfg-eth0 sysconfig/network-scripts/ifcfg-eth1
vi /etc/sysconfig/network-scripts/ifcfg-eth1

修改DEVICE=”eth0″
为DEVICE=”eth1″

然后重启启动网卡尝试下,最后先 stop 然后再start
有时要注释掉HWADDR

当然 前提是要用 ifconfig -a 看是不是只看到eth1 而没有eth0

*****************我是分隔线***************************************************
改回eth0 好像有问题呢

然后把 eth1 改回eth0
里面的 HWADDR 改成 下面这命令看到的
[root@vm2-cenots6 network-scripts]# ifconfig
eth1 Link encap:Ethernet HWaddr BE:E8:F0:39:AD:6B

修改DEVICE=”eth1″
为DEVICE=”eth0″

参考资料
http://www.cnblogs.com/fbwfbi/archive/2013/04/29/3050907.html

VirtualBox中使用招行网银专业版

因为中国招商银行的网上银行专业版本目前不支持Linux。对于我们Linux用户来说,有两个选择,使用wine或者使用虚拟环境。 Wine并不稳定,在Wine上运行游戏是个不错的主意,但是网上银行还是算了。我选择虚拟机作为解决方案,安装虚拟并不难,这里就不详细讲解,而是讲解比较注意的怎么用加强包使用网银

安装Oracle VM VirtualBox Extension Pack
首先 下载加强包
http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html#extpack

依自己的版本选择下载

然后安装
第一:打开Oracle VirtualBox,在菜单栏中找到“管理”–>“全局设定”
第二:打开“全局设定”
第三:“Extension Packages”中添加下载的Oracle VM VirtualBox Extension Pack,根据提示安装即可

注意,你每次都应该在启动VirtualBox之前插入USB key。

参考
http://www.xiaojian.org/article/310.html

http://www.2cto.com/os/201208/146984.html