十一 05

让CentOS中vi和vim显示行号

本次显示行号
vi(或vim)打开某文件,输入命令 :set number

本次不显示行号
vi(或vim)打开某文件,输入命令 :set nonumber

使用以上方法,在下次打开时还是恢复了原来的状态,如果想第次打开不恢复原状态,那么我们就要修改vi(或vim)的配置文件了,如下:

vi(或vim)的配置文件地址: /etc/virc(或/etc/vimrc)

显示行号:使用vim打开/etc/virc(或/etc/vimrc),在文件的最末尾换行输入 set number,保存并退出。

不显示行号:使用vim打开/etc/virc(或/etc/vimrc),在文件的最末尾换行输入 set nonumber,保存并退出。

我个人还是喜欢显示行号的。

修改vi缩进或vim缩进的请到这里

十一 04

linux各文件夹的作用

linux下的文件结构,看看每个文件夹都是干吗用的
/bin二进制可执行命令
/dev设备特殊文件
/etc系统管理和配置文件
/etc/rc.d启动的配置文件和脚本
/home用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示
/lib标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件
/sbin系统管理命令,这里存放的是系统管理员使用的管理程序
/tmp公用的临时文件存储点
/root系统管理员的主目录(呵呵,特权阶级)
/mnt系统提供这个目录是让用户临时挂载其他的文件系统。
/lost+found这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里
/proc虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息。
/var某些大文件的溢出区,比方说各种服务的日志文件
/usr最庞大的目录,要用到的应用程序和文件几乎都在这个目录。其中包含:
/usr/x11r6存放xwindow的目录
/usr/bin众多的应用程序
/usr/sbin超级用户的一些管理程序
/usr/doclinux文档
/usr/includelinux下开发和编译应用程序所需要的头文件
/usr/lib常用的动态链接库和软件包的配置文件
/usr/man帮助文档
/usr/src源代码,linux内核的源代码就放在/usr/src/linux里
/usr/local/bin本地增加的命令
/usr/local/lib本地增加的库 Continue reading

十一 04

Python读写文件

Python读写文件
1.open
使用open打开文件后一定要记得调用文件对象的close()方法。比如可以用try/finally语句来确保最后能关闭文件。

 

注:不能把open语句放在try块里,因为当打开文件出现异常时,文件对象file_object无法执行close()方法。

2.读文件
读文本文件
input = open('data', 'r')
#第二个参数默认为r
input = open('data')

 

读二进制文件
input = open('data', 'rb')

读取所有内容

 

读固定字节

 

读每行
list_of_all_the_lines = file_object.readlines( )

如果文件是文本文件,还可以直接遍历文件对象获取每行:

 

3.写文件
写文本文件
output = open('data', 'w')

写二进制文件
output = open('data', 'wb')

追加写文件
output = open('data', 'w+')

写数据
file_object = open('thefile.txt', 'w')
file_object.write(all_the_text)
file_object.close( )

写入多行
file_object.writelines(list_of_text_strings)

注意,调用writelines写入多行在性能上会比使用write一次性写入要高。

在处理日志文件的时候,常常会遇到这样的情况:日志文件巨大,不可能一次性把整个文件读入到内存中进行处理,例如需要在一台物理内存为 2GB 的机器上处理一个 2GB 的日志文件,我们可能希望每次只处理其中 200MB 的内容。
在 Python 中,内置的 File 对象直接提供了一个 readlines(sizehint) 函数来完成这样的事情。以下面的代码为例:

Continue reading

16

Python程序中如何设置HTTP代理

urllib2/urllib 代理设置

urllib2是Python标准库,功能很强大,只是使用起来稍微麻烦一点。在Python 3中,urllib2不再保留,迁移到了urllib模块中。

urllib2中通过ProxyHandler来设置使用代理服务器。

也可以用install_opener将配置好的opener安装到全局环境中,这样所有的urllib2.urlopen都会自动使用代理。

在Python 3中,使用urllib

Continue reading

16

Python生成随机数的方法

在Python生成随机数与random模块中最常用的几个函数的关系实例

random.random()
用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。如果a > b,则生成随机数

 

用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,Python生成随机数

 

下限必须小于上限。
random.randrange
从指定范围内,按指定基数递增的集合中 ,这篇文章就是对python生成随机数的应用程序的部分介绍。

随机整数:
>>> import random
>>> random.randint(0,99)
21
随机选取0到100间的偶数:
>>> import random
>>> random.randrange(0, 101, 2)
42
随机浮点数:
>>> import random
>>> random.random()
0.85415370477785668
>>> random.uniform(1, 10)
5.4221167969800881
随机字符:
>>> import random
>>> random.choice(‘abcdefg&#%^*f’)
‘d’
多个字符中选取特定数量的字符:
>>> import random
random.sample(‘abcdefghij’,3)
['a', 'd', 'b']
多个字符中选取特定数量的字符组成新字符串:
>>> import random
>>> import string
>>> string.join(random.sample(['a','b','c','d','e','f','g','h','i','j'], 3)).r
eplace(” “,”")
‘fih’
随机选取字符串:
>>> import random
>>> random.choice ( ['apple', 'pear', 'peach', 'orange', 'lemon'] )
‘lemon’
洗牌:
>>> import random
>>> items = [1, 2, 3, 4, 5, 6]
>>> random.shuffle(items)
>>> items
[3, 2, 5, 6, 4, 1]

15

Python格式化字符 %s %d %f等

格式     描述
%%      百分号标记 #就是输出一个%
%c       字符及其ASCII码
%s       字符串
%d       有符号整数(十进制)
%u       无符号整数(十进制)
%o       无符号整数(八进制)
%x       无符号整数(十六进制)
%X       无符号整数(十六进制大写字符)
%e       浮点数字(科学计数法)
%E       浮点数字(科学计数法,用E代替e)
%f        浮点数字(用小数点符号)
%g       浮点数字(根据值的大小采用%e或%f)
%G       浮点数字(类似于%g)
%p       指针(用十六进制打印值的内存地址)
%n       存储输出字符的数量放进参数列表的下一个变量中
%格式化符也可用于字典,可用%(name)引用字典中的元素进行格式化输出。
负号指时数字应该是左对齐的,“0”告诉Python用前导0填充数字,正号指时数字总是显示它的正负(+,-)符号,即使数字是正数也不例外。
可指定最小的字段宽度,如:”%5d” % 2。也可用句点符指定附加的精度,如:”%.3d” % 3。

例: Continue reading

15

python中的*和**参数传递机制

python的参数传递机制具有值传递(int、float等值数据类型)和引用传递(以字典、列表等非值对象数据类型为代表)两种基本机制以及方便的关键字传递特性(直接使用函数的形参名指定实参的传递目标,如函数定义为def f(a,b,c),那么在调用时可以采用f(b=1,c=2,a=3)的指定形参目标的传递方式,而不必拘泥于c语言之类的形参和实参按位置对应)

除此之外,python中还允许包裹方式的参数传递,这为不确定参数个数和参数类型的函数调用提供了基础:

 

包裹参数传递的实现是在定义函数时在形参前面加上*或**,*所对应的形参(如上面的args)会被解释为一个元组(tuple,而**所对应的形参(如上面的kwargs)会被解释为一个字典。具体调用时参数的传递见下面的代码:

上面代码的运行结果是:

(3, 4)
{‘n’: 2, ‘m’: 1}
可见,对于不使用关键字传递的变量,会被作为元组的一部分传递给*args,而使用关键字传递的变量作为字典的一部分传递给了**kwargs。

同时有个tricky的地方,python中规定非关键字传递的变量必须写在关键字传递变量的前面,所以混合使用*和**时肯定时*形参在**形参的前面。

此外,在进行函数调用时,与之配套的就有个被称为解包裹的方式:

上面代码的输出与前面一致。

把元组或字典作为参数传入时,如果要适配包裹形式的形参定义(如上面将h传给*args,k传给**kwargs),按照元组用*,字典用**的方式“解包裹”传递即可。

实际上,在调用f时使用*,是为了提醒Python:我想要把实参h拆成分散的2个元素c和d,进行分别传递(所有上面代码中的f定义成def f(args1,args2,**kwargs)也是可以的,这样args1会获得3这个值而args2会获得4这个值)。**同理类似。另外,解包裹时*对于列表([]定义的为列表,()定义的为元组)也适用。

 

 

上面的输出是

3
4
1
2

与前面所述相符,因此要注意,对于**k这种字典的解包裹,要求函数的形参名和字典中的key值对应,

上面的例子中如果把def f(c,d,n,m)中的n改为其它的字母就会报错

 

有了包裹传递后,调用函数时就可以传递任意数量的参数,而由于元组和字典都是有__len__方法可以获得其元素个数的,所以在编写函数时可根据这一信息对不同的参数数目进行不同处理。

27

Python所有特殊方法、魔术方法、 钩子

C.__init__(self[, arg1, ...]) 构造器(带一些可选的参数)

C.__new__(self[, arg1, ...]) 构造器(带一些可选的参数)通常用在设置不变数据类型的子类。

C.__del__(self) 析构器

C.__str__(self) 可打印的字符输出;内建str()及print 语句

C.__repr__(self) 运行时的字符串输出 内建repr() 和‘‘ 操作符

C.__unicode__(self) Unicode 字符串输出;内建unicode()

C.__call__(self, *args) 表示可调用的实例

C.__nonzero__(self) 为object 定义False 值 内建bool() (从2.2 版开始)

C.__len__(self) “长度”(可用于类) 内建len()

Continue reading

26

Node入门–一本全面的Node.js教程

关于

本书致力于教会你如何用Node.js来开发应用,过程中会传授你所有所需的“高级”JavaScript知识。本书绝不是一本“Hello World”的教程。

状态

你正在阅读的已经是本书的最终版。因此,只有当进行错误更正以及针对新版本Node.js的改动进行对应的修正时,才会进行更新。

本书中的代码案例都在Node.js 0.6.11版本中测试过,可以正确工作。

读者对象

本书最适合与我有相似技术背景的读者: 至少对一门诸如Ruby、Python、PHP或者Java这样面向对象的语言有一定的经验;对JavaScript处于初学阶段,并且完全是一个Node.js的新手。

这里指的适合对其他编程语言有一定经验的开发者,意思是说,本书不会对诸如数据类型、变量、控制结构等等之类非常基础的概念作介绍。要读懂本书,这些基础的概念我都默认你已经会了。

然而,本书还是会对JavaScript中的函数和对象作详细介绍,因为它们与其他同类编程语言中的函数和对象有很大的不同。

本书结构

读完本书之后,你将完成一个完整的web应用,该应用允许用户浏览页面以及上传文件。

当然了,应用本身并没有什么了不起的,相比为了实现该功能书写的代码本身,我们更关注的是如何创建一个框架来对我们应用的不同模块进行干净地剥离。 是不是很玄乎?稍后你就明白了。

本书先从介绍在Node.js环境中进行JavaScript开发和在浏览器环境中进行JavaScript开发的差异开始。

紧接着,会带领大家完成一个最传统的“Hello World”应用,这也是最基础的Node.js应用。

最后,会和大家讨论如何设计一个“真正”完整的应用,剖析要完成该应用需要实现的不同模块,并一步一步介绍如何来实现这些模块。

可以确保的是,在这过程中,大家会学到JavaScript中一些高级的概念、如何使用它们以及为什么使用这些概念就可以实现而其他编程语言中同类的概念就无法实现。 Continue reading

24

Linux下权限设置中的数字与字符含义解释

linux系统文件夹644、755、777等权限设置详解 ,从左至右,第一位数字代表文件所有者的权限,第二位数字代表同组用户的权限,第三位数字代表其他用户的权限。

r 代表读(read),w 代表写(write),x 代表执行(execute)

读取(r):权限是二进制的100,十进制是4:
写入(w):权限是二进制的010,十进制是2;
执行(x):权限是二进制的001,十进制是1;

即:
r: 对应数值4 读取
w: 对应数值2 写入
x: 对应数值1 执行
-: 对应数值0 无权限

通过4、2、1的组合,得到以下几种权限:
若要 rwx 则 4+2+1=7 (读取+写入+执行)
若要 rw- 则 4+2=6 (读取+写入)
若要 r-x 则 4+1=5 (读取+执行)
若要 r– 则 =4 (读取)
若要 -wx 则 2+1=3 (写入+执行)
若要 -w- 则 =2 (写入)
若要 –x 则 =1 (执行)
若要 — 则 =0 (没有权限)

例如数字 755
第一位7等于4+2+1,rwx,所有者具有读取、写入、执行权限;
第二位5等于4+1+0,r-x,同组用户具有读取、执行权限但没有写入权限;
第三位5,同上,也是r-x,其他用户具有读取、执行权限但没有写入权限。

例如字符串 -rwxrw-r–
Linux下使用字符表示权限分成四段。
第一个表示文件类型,字符“-”表示普通文件;这个位置还可能会出现“l”链接;“d”表示目录
第二三四个字符“rwx”表示当前所属用户的权限。 数值表示为4+2+1=7,二进制是111
第五六七个字符“rw-”表示当前所属组的权限。 数值表示为4+2=6,二进制是110
第八九十个字符“r–”表示其他用户权限。 数值表示为4,二进制是100

Linux下的文件类型如下:
- 普通文件
d 目录(文件夹)
l 链接文件
b 块设备
c 字符设备

常用的linux文件权限数字代码与字符代码:
444 r–-r–-r–-
600 rw-------
644 rw-r–r–--
666 rw-rw-rw-
700 rwx------
744 rwxr–-r–-
755 rwxr-xr-x
777 rwxrwxrwx

linux下rwx权限数字解释
chmod也可以用数字来表示权限如 chmod 777 file
语法为:chmod abc file
其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。
r=4,w=2,x=1
若要rwx属性则4+2+1=7;
若要rw-属性则4+2=6;
若要r-x属性则4+1=7。
范例:
chmod a=rwx file

chmod 777 file
效果相同
chmod ug=rwx,o=x file

chmod 771 file
效果相同
若用chmod 4755 filename可使此程序具有root的权限

想一次修改某个目录下所有文件的权限,包括子目录中的文件也要修改权限,要使用参数-R表示启动递归处理。
chmod -R 777 /home/user