linux命令bind参数以及用法详解

bind作用: 显示或设置键盘配置 bind语法: bind [参数] bind参数: -f 文件 配置文件所在的位置 -l 列出所有的功能名称 -m 按键配置 按键配置包括emacs,vi等 -p 列出所有的功能 -P 列出所有的功能(较易阅读) -q 功能 查询功能名称 -r 删除正在使用的配置 -s 列出可被重复读取的宏与字符串 -S 列出正在使用的宏与字符串 -u 取消所有的按键配置 -v 列出变量名称与数值 -V 列出正在使用的变量名称与数值 bind示例: bind -l|grep kill bind -m vi -v ...

阅读全文 »

python闭包(closure)

python闭包(closure)其实并不是什么很复杂的东西,其定义是:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。它只不过是个“内层”的函数,由一个名字(变量)来指代,而这个名字(变量)对于“外层”包含它的函数而言,是本地变量。

简单的闭包例子:

def add(num):

   def add_inner(num_inner):

       return num+num_inner

   return add_inner

 

执行p=add(23)将会产生内层函数add_inner的一个闭包,这个闭包在内部引用了名字num,而num绑定到23上了。

test=add(20)

test1=add(20)

print test(100),test1(120)

 

阅读全文 »

python 菜谱(python cookbook) 1.8 判断一个字符集是否在另一个字符集中

挑战任务1:判断一个字符串是否在另外一个字符串中

对于处理一个字符串时候在另外一个字符串中,使用in是最简单的解决方案。

ast='a in b'

bst='this a in b only'

ast is in bst

挑战任务2:判断一个字符集是否在另一个字符集中

  • 简单的处理方法是判断每个出现在一个字符串的字符是否出现在一个字符串中

          for c in ast:

              if c in bst

                  ......

  • 另外set(集合)能很好的处理这个问题。

              set(ast).issubset(set(bst))

 

阅读全文 »

linux命令hdparm参数以及用法详解

hdparm作用: 显示与设定硬盘的参数。 hdparm语法: hdparm [-CfghiIqtTvyYZ][-a < 快取分区>][-A < 0或1>][-c ][-d < 0或1>][-k < 0或1>][-K < 0或1>][-m < 分区数>][-n < 0或1>][-p ][-P < 分区数>][-r < 0或1>][-S < 时间>][-u < 0或1>][-W < 0或1>][-X < 传输模式>][设备] hdparm参数: -a 快取分区 设定读取文件时,预先存入块区的分区数,若不加上 快取分区 选项,则显示目前的设定。 -A 0或1 启动或关闭读取文件时的快取功能。 -c I/O模式 设定IDE32位I/O模式。 -C 检测IDE硬盘的电源管理模式。 -d 0或1 设定磁盘的DMA模式。 -f 将内存缓冲区的数据写入硬盘,并清除缓冲区。 -g 显示硬盘的磁轨,磁头,磁区等参数。 -h 显示帮助。 -i 显示硬盘的硬件规格信息,这些信息是在开机时由硬盘本身所提供。 -I 直接读取硬盘所提供的硬件规格信息。 -k 0或1 重设硬盘时,保留-dmu参数的设定。 -K 0或1 重设硬盘时,保留-APSWXZ参数的设定。 -m 磁区数 设定硬盘多重分区存取的分区数。 -n 0或1 忽略硬盘写入时所发生的错误。 -p PIO模式 设定硬盘的PIO模式。 -P 磁区数 设定硬盘内部快取的分区数。 -q 在执行后续的参数时,不在屏幕上显示任何信息。 -r 0或1 设定硬盘的读写模式。 -S 时间 设定硬盘进入省电模式前的等待时间。 -t 评估硬盘的读取效率。 -T 评估硬盘快取的读取效率。 -u 0或1 在硬盘存取时,允许其他中断要求同时执行。 -v 显示硬盘的相关设定。 -W 0或1 设定硬盘的写入快取。 -X 传输模式 设定硬盘的传输模式。 -y 使IDE硬盘进入省电模式。 -Y 使IDE硬盘进入睡眠模式。 -Z 关闭某些Seagate硬盘的自动省电功能。 hdparm示例: hdparm -t /dev/sda #评估硬盘的读取效率 ...

阅读全文 »

linux命令eject参数以及用法详解

eject作用:

eject是远程控制光驱的命令,对于收回光驱的参数,有部分笔记本不支持。

eject语法:

eject [参数] [设备名称]

eject参数:

-a 参数         自动退出。若使用参数on或1,则在设备卸载时自动退出;反之,若使用off或0,则在设备卸载时不自动退出;

-c 光盘编号  选择光驱,编号依次是0,1,2.。。。

-h                   显示在线帮助信息

-p                   使用/proc/mounts,而不使用/etc/motd

-r                    退出光驱

-t                     收回光驱,但是可能不支持某些设备

-v                     显示完整信息

eject示例:

eject -t

eject /dev/cdrom1

 

阅读全文 »

python 菜谱(python cookbook) 1.7 反转字符或者按照单词反转

 

挑战任务1:反转单个字符

切片方法是最好解决这个问题的办法,步长为-1的切片方法就能解决,但是需要注意的是字符串是不能修改,所以通过赋值(拷贝):

value=astring[::-1]

挑战任务2:按照单词反转

列表有内置的反转函数,所以首先能把,接着反转列表,接着拼接列表中的元素就能解决问题:

words=astring.split()         #一段字符串放入列表

words.reverse()                 #反转列表

' '.split(words)                    #拼接列表中的元素

挑战任务3:按照单词反转,但是还需要保持原来的空格符原样  “this  a top”->"top a  this"

上面这种方法虽然能实现反转,但是无法保持原来空格符原样,如果需要保持原来空格符原样的话,需要记住空格符的个数,正则能很好的实现这个目的。
import re
words=re.split('\s+',astring)     #切割
words.reverse()                        #反转列表
''.split(words)                            #拼接列表中的元素
 
上面的解决方案都是最基本的,各位可以通过更简洁的方式去实现,这个挑战就交给各位自己了!

阅读全文 »

快速深入一门语言的绝招

1.hello, world

目标:屏幕上打印出hello, world。
原因:不解释。

进阶:当命令行给与不同参数的时候,打印hello, 名字。给与开关的时候,打印hello, 123。

2.正则提取

目标:写一个正则表达式(或者类似的东西),从一段网页源码中找到某个标签的内容,去掉前后空格,显示。
原因:测试字符串处理能力。
进阶:支持正则扩展

3.扫描排重
目标:将某个目录和子目录下的所有文件扫描,排除重复的文件。
原因:测试文件系统操作能力。
进阶:多线程处理,注意吞吐颠簸。

4.做24点自动计算程序
目标:写一个程序,能够计算24点。要求能够自定义扩展算符。
原因:检查深度优先搜索,栈,结构设计,抽象处理能力等等。
进阶:做并发处理。有数种语言可能无法实现并发,或并发实现难度大,不美观,例如python。

5.做一个计算器
目标:做一个计算器,要求能计算1+2*3=7,并支持()。
原因:表达式解析和处理需要用到程序的方方面面,字符串处理等等。

进阶:做一个本语言的eval函数出来。

7.抓网页
目标:实现一个服务,定期下载符合规则的一批网页,解析,获得格式化的数据,并存入数据库。
原因:测试系统开发能力,基础网络库,字符串处理能力。
进阶:分布化抓取。

8.留言板
目标:设计一个留言板,将所有人提交的话保存起来,能一并展示。提交不需验证,展示不需分页。
原因:测试网络服务能力,数据库支持和多国语言支持。
进阶:防止XSS攻击。

9.异步大并发服务器
目标:设计一个异步http服务器,能对请求做出响应,添加,删除,修改数据库中的数据。不得使用现有的http框架和容器。
原因:集成性测试
进阶:不使用现有数据库,自己写一个。。。

 

 

 

 

转载自 shell's home

阅读全文 »

python科普(转自 潘俊勇)

python科普(转自 潘俊勇) 软件业的特点,就是层出不穷的新东东涌现。Windows早就革了DOS的命,浏览器差不多革了桌面软件的命,云计算准备再革所有软件的命,最后还追上个乔布斯说一切听他的。 动荡的软件界,让人眼花缭乱。这一切的后面,是失落的编程族:好容易才精通的东西,随之变得一钱不值。曾经的人才,如同数码产品般的迅速贬值。乃至好多人怀疑,编程是吃青春饭的行当。 在我前10年的编程经历里,重复着同样的杯具。Turbo C学完了,用Borland C,Visual C++太麻烦,开始用PowerBuilder快速开发,接上去Delphi、C++Builder、JBuilder,十八般武艺都学完了,结果又蹦出个新时髦。哪天有个终结?在软件的浪潮里,程序员太渺小了。我们害怕自己,会同过气的语言一样昙花一现,成为过眼烟云。 不是我见异思迁,而是潮流不可阻挡。但直至Python出现,故事开始转折。 起源于上世纪80年代末的Python语言(http://python.org),是一种开放源代码的解释型高级动态类型语言,语法简练、类库丰富,以开发效率高著称。 20多年的发展时间,Python是愈久弥香,经历住了时间的考验。Python是Goolge的三大语言之一;全球最大的视频网站YouTube,以及国内的豆瓣网也是采用Python开发;最新最热的行当中,python是往往web game的首选开发语言之一,谷歌和国内的易度云计算开发平台也都选择了Python语言。 这就是神奇的Python,在交错的语言大战中,Python却成为一颗长青树,不断焕发新的光彩。 而Python也成为我最近8年的编程生涯的主体,或许这将是我作为程序员的归属,一直走下去。让我们一起分享下这不一样的Python。 简单是硬道理 ==================== php被很多严肃的开发人员诟病,太简单、太脏了。然而php却被企业所喜欢,连yahoo和facebook都选择了php, php不断在发展,生命力异常旺盛。 为什么?因为简单。 程序语言,从机器语言到汇编,到高级语言,不就是简单在驱动吗?程序员也是人,需要更容易使用的语言。时髦点的话,就是语言也要多为咱程序员服务了,人机接口、用户体验要好。 因为简单,所以开发效率高;因为简单,所以容易阅读和维护;因为简单,所以不怕没人接手;因为简单,重构下也无妨;因为简单,项目经理就不必写伪代码了,直接Coding出框架代码吧. 简单带来的优势,是成指数级别增长。简单省了钱,加快的进度,减少的项目风险,首先老板会喜欢。简单是硬道理。.net同样是靠简单占领了不小的市场份额。 python语言最早设计指导思想之一,就是想提高代码的可读性。Python语言采用缩进来标识代码块,而Java采用的是配对的大括号来标识。不仅仅是排版更漂亮,Python的数据结构非常简单和统一,Python自带非常庞大的类库,很多东西拿来即可。这样,相同的逻辑,使用python可能只需要java五分之一的代码量。 很多软件爱拿自己 数百万行代码 出来说事,表明自己很强大。而在Python的世界里,人们在炫耀相同的功能后,喜欢说我只有几千行代码(比如Python上的对象数据库系统ZODB就只有不到5千行代码)。背后的意思是,放心用吧,有问题你也很容易维护这个系统;或者如果有时间,你自己也可以接管这个代码。 Pythonic之美 ====================== php靠一个 简单 占领了市场,php的哲学是quick and dirty;Python同样简单,但Python的哲学是Pythonic。Pythonic是什么?Pythonic是quick and not dirty,也就是quick and beautiful. 这个Pythonic之美,代表了程序员的素养和品味。什么是好的代码?什么是漂亮的代码?有一本书,叫做《unix编程艺术》,实际上一本对编程审美进行洗脑的经典书籍。而Python语言的设计理念,正符合了这种编程审美。因此,Python深受高端开发人员的喜欢,Python和他们有相同的文化。这如同,很多人将拥有Mac机作为自己审美品味的象征一样。 让我们再一次领略下Pythonic的禅意,它作为一个彩蛋隐藏在python的this模块:: import this 下面是我基于赖勇浩先生的首译,稍作更改后的翻译:: (让我们来说说该如何写代码:) 优美胜于丑陋, 清晰明了胜于晦涩, 简洁胜于复杂, 而复杂又胜于杂乱。 扁平胜于多层嵌套, 适当空行、错落有致胜于拥挤不堪, 可读性很重要。 虽然实用主义往往和上述规则矛盾, 但所有特例都不足以打破他们。 绝不要忽略异常(不写 except:pass), 除非你进行精准地捕获。 当你遇到含糊不清,不要尝试猜测可能, 一定有一种,而且绝对是唯一的一种明显的处理方法。 虽然你可能一开始很难找到这条路,除非你是 Python 之父。 现在就动手好过永远不做, 虽然不做通常好于蛮干。 实现方法如果难以表述,那这思路就肯定不对; 反之如果容易表述,那可能是个好想法。 命名空间是一个值得叫好的想法,我们应当多加利用。 Python宝库 =================== Python号称自带电池(Battery Included),也就是有强大的类库。 Python内建的类库就已经非常全面了。从web抓取,到xml解析,到嵌入式数据库,到压缩包的处理,到邮件协议,到json解析,而且不断在增长。 如果你还觉得不够,可到http://pypi.python.org上去找,这里有1万多种第三方的类库。从图片处理、到加密算法,到excel文件解析生成,到pdf文件转换,可谓应有尽有,无所不能。探访这里的乐趣,就如同海边拾贝,如同山间采菌,那种惊喜,那种 大国大民 的优越感,让你在心底涌现出投身Python的幸福,进而归属感倍增。 更重要的是,所有的这些宝贝,全部开源,而且大都是类 BSD协议的开源,您直接用于商业。有了这些,我会经常为自己选择了Python而庆幸,这使得我们像易度这样庞大的应用快速构建起来。 Python自带强大的包管理机制,简简单单一个easy_install命令,您就可以在线安装升级、卸载这些包。这类似debian/ubuntu的apt包管理机制一般方便。 全能选手 =============== 可能是因为Python语言练就了动态语言的以柔克刚、借力打力的太极推手功夫,加上Python简单导致的生产力指数级增长效应,Python应该是应用最全面的一种语言了。 从脚本、到web开发、到嵌入使用、到客户端、到云计算,python都干得不错。你只需要学会Python这一门语言,老板给你什么任务你几乎都能完成。让我们随着时间的年轮滚进,看看Python应乎潮流的72变。 操作系统脚本 ------- ...

阅读全文 »

linux命令dmesg参数以及用法详解

dmesg作用: dmesg用来显示开机信息,kernel会将开机信息存储在ring buffer中。您若是开机时来不及查看信息,可利用dmesg来查看 dmesg语法: dmesg [ -c ] [ -n level] [ -s buffer ] dmesg参数: -c 当完成打印显示后清除环缓冲内的内容。 -s buffer 大小 定义一个大小为 缓冲区大小 的缓冲区用于查询内核 环缓冲区。默认大小为 8196(此大小与 2.0.33 和 2.1.103 内核的默认syslog 缓冲区大小一致),如果你设置了一个大于默认值的环缓冲区,那你就可以用这个选项定义一个相当的缓冲区来查看完整的环缓冲区内容。 -n级别 设置级别为记录控制台启动信息的级别。比如,-n 1指的就是将此级别设为最低级,除了内核恐慌信息之外不会向控制台显示信息。所有级别的启动信息还将记录到/proc/kmsg,文件中,因此,syslogd(8)同样可以用来对信息的输出进行控制。当使用-n选项时,dmesg将不会 清除内核环缓冲区中的内容。当同时使用以上两个选项时,只有最后一个选项才会产生效果。 dmesg举例: $ sudo dmesg | tail -f ...

阅读全文 »

linux命令lsusb参数以及用法详解

lsusb作用:

列出所有usb设备

lsusb语法:

lsusb [参数]

lsusb参数:

-D 设备路径 不扫描/proc/bus/usb,而以指定的设备路径取代

-p 内核路径 使用其他USB设备在内核的路径,默认为/proc/bus/usb

-t 将USB设备以树状架构输出

-v 列出较详细的运行过程

-vv 列出完整的运行过程

-V 显示版本信息

lsusb举例:

#lsusb

阅读全文 »