手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:linux

【科普贴】话说回车和换行

有意思的文章,大多数时候,我们都是知道\r,\n,\r\n,但为什么是这样的呢,居然找到了一篇科普贴。
来吧,看看为什么吧。
原文来自:【科普贴】话说回车和换行
看xml的时候发现这样的一段话:

XML 以 LF 存储换行

在 Windows 应用程序中,换行通常以一对字符来存储:回车符 (CR) 和换行符 (LF)。这对字符与打字机设置新行的动作有相似之处。在 Unix 应用程序中,新行以 LF 字符存储。而 Macintosh 应用程序使用 CR 来存储新行。

让我对这三个(win,unix,mac)苦逼的主产生了兴趣,为啥你们不一样呢,难道你们认识“回车”和“换行”的时间有先有后吗?为啥没统一或者说为啥产生了CR和LF这两个玩意?说说历史吧!

为什么会有两个貌似一样功能的东西?

潜台词:很多时候敲击enter就是换行了呀,还回啥个车,回车就是换行吗?

在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。

于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做"回车",告诉打字机把打印头定位在左边界;另一个叫做"换行",告诉打字机把纸向下移一行。

-http://www.ruanyifeng.com/blog/2006/04/post_213.html

 

为啥windows,unix,mac不统一呢?

可能是基于成本和效率的考虑,我认为都统一成一个“回车”就够了,可是当年正是这种想法导致了现在的问题,至于这三家互不相同,我也不知道,各有各的考虑吧,反正蛋疼的是用户,比起现在浏览器的兼容性问题,这算不上问题。

以下是他们表示“下一行”的方式:

    OS          表示                              C语言表示    16进制表示

    windows  回车+换行(CR/LF)        \r\n             0x0d0a

    UNIX       换行符(LF)                   \n               0x0a

    MAC        回车符(CR)                   \r               0x0d

 

看一下在一份xml文件里的情况吧,我没钱买苹果,所以下面不包括MAC OS,果粉别砍我!

抱怨之余,我们还能干啥呢?

至少你知道这是怎么回事了,至少在不同平台之间传送文件时别傻傻的骂别人没整理文件格式,至少...,这还不够吗?

-------------
在用PHP写文件的时候,一般我们都是用\n来解决断行。但这时候,如果用windows下的记事本打开这个文件,你会发现一堆黑框,并且处在一行里。
因此,看了上面的文章后,你会知道怎么办了。突然想到以前的str_replace(array("\r\n","\r","\n"),"<br />",$str), 这种烂代码。当然nl2br就解决这样的功能了。然后再转回来?哎。纠结啊。。

Tags: 回车, 换行, windows, linux, mac

服务器启动memcache

服务器为了性能,已经启用了几个扩展,今天早上,又重新为它加上了memcache这个扩展。
其实以前memcached我早就装了,但memcache扩展我一直没有启用,如果用那个纯PHP的接口,也还是可以使用的。现在用上自带的标准接口,是为了未来的yii框架做打算(不过我也只开了很少的64M的缓冲区,对于我这样的小网站,足够了)

在ubuntu上安装memcache扩展是非常方便的。apt一下就全回来了。只是apache+php+mysql是单独配置的。所以还得象网上那些教程一样按顺序操作

1、wget http://pecl.php.net/get/memcache-2.2.3.tgz
2、tar zxvf memcache-2.2.3.tgz 到一个目录里
3、运行/software/php/bin/phpize 会得到一个环境变量(您的系统可能是/usr/local/bin/phpize)
4、./configure –enable-memcache –with-php-config=/usr/local/bin/php-config –with-zlib-dir
如果没有中断,可以直接执行第五步,如果有中断情况,则检查原因
5、make && make install (查看最后输出的路径)
6、到php.ini里查看一下你的Extension指向的路径,把第5步里的路径中的文件copy到extension指向的目录
     同时加上extension="memcache.so";
7、/etc/init.d/apachectl restart
OVER

Tags: linux, memcache

转+收藏:LINUX书架

在做PHP开发的同时,不可避免的会使用linux。好吧,即使你不精通linux,你怎么着也得会一些常见的命令吧,不说高深的东西,最起码你要会cp,mv,chmod,chown,tar之类的,否则,你连文件都无法移动位置。

国内在02~03年左右,鸟哥的私房菜大概是影响了很多人吧,由于我一直是在win下,所以LINUX接触不多,但也确实听说了这个。这次看到这篇博客,里面介绍了好多的书籍,所以复制了一下(自己也有过LINUX的书籍,被人抢走了。。。。)

来,上菜了。。原文来自:http://www.cnblogs.com/wwang/archive/2011/01/27/1944406.html

入门类

一直认为,在一个系统上学习开发之前,首先需要熟悉这个系统的使用。鉴于天朝的国情,绝大部分人第一个接触的操作系统就是Windows,因此对于这绝大部分人来说,如果要学习Linux开发,学会使用这个系统都是必不可少的一个环节。
现在的Linux初学者是幸福的,随着Linux桌面环境越来越易用,入门一个新的系统是非常容易的事情。虽然命令行对于提高工作效率更加有 效,但我们完全可以把熟悉命令的过程放到日常使用中进行。无论学习什么知识,在实践中学习都是高效而且有趣的。在这个阶段,我们也未必一定需要书籍。现在 很多Linux发行版的Wiki写得都非常详细,在使用某一种发行版时找到相应的Wiki阅读查询就可以了。而且,桌面环境变化太快,关于桌面的介绍类书 籍几乎都没有必要看,这类书籍大多刚一出版就过时了。
那入门类书籍里哪些比较有价值呢?我比较推荐涉及的技术相对比较稳定的书。比如,Linux基本的体系结构和命令一般都是经久不变的,甚至从上古时期的Unix开始就没太多变化,这类书籍讲解的知识也是以后大幅提高我们的生产力的基础。比如《鸟哥的Linux私房菜》,比如《Unix Power Tools》(中译名是“UNIX超级工具”),或者是为Linux+认证考试准备的《Linux+ Study Guide》。当然,这一类书籍其实都不必精读,快速浏览之后作为工具书备查就可以了。

编程类

类Unix系统的编程书籍里,最经典的莫过于简称为APUE的《Advanced Programming in the UNIX Environment》(中 译名是“Unix环境高级编程”),这本书被广大Unix程序员(包括Linux)捧为“圣经”。借用葛大爷的广告词:“这就像进馆子一样,一条街上,哪 家人多我进哪家”。APUE对类Unix系统的编程接口讲解的非常全面详细,对于这本书,我们不仅要精读,还应该放在案头常备。
但是,APUE对于Linux编程初学者似乎稍深了一点,而且很多细节在Linux中并不会用到。讲述Linux编程的书籍里,《Advanced Linux Programming》应该更加适合初学者。不要被书名中的“Advanced”吓到,书里的内容还是很容易理解的。看完这本书再看APUE应该效果会更好。
如果要开发GUI程序,上面两本书就无能为力了。在Linux世界里,最常用的GUI Toolkit是GTK+和QT。
GTK+的书籍并不多,在线文档只适合查阅,并不是一个完整的学习体系。《Foundations of GTK+ Development》是其中很不错的一本书,喜欢GTK+的开发者可以拿来作为入门书籍。
相对来说,QT的书籍就很丰富了,这和QT具有良好的跨平台能力有很大关系,QT的书籍并不只是写给Linux程序员看的,在Windows和MAC OSX下同样可以使用QT开发程序。比较值得一看的QT类书籍有《C++ GUI Programming with QT4》、《Foundations of QT Development》、《The Art of Building QT Applications》,这三本都比较适合QT初学者阅读。另外,《Advanced Qt Programming》会介绍到QT一些比较高级的用法,适合有一定QT基础的读者阅读。

内核类

对于Linux内核或者设备驱动的开发者,最全面最直接的学习资料一定是Linux内核代码及其文档。Linux内核的发布周期很短,相关书籍 的出版完全跟不上脚步。但随着内核代码的日益庞大,学习曲线越来越陡峭,入门者又非常需要书籍来作为指导,这确实是非常矛盾的事情。所幸,很多Linux 内核技术作家也是很勤奋的,经常会更新自己的作品。就像Robert Love,以2.6内核为蓝本的《Linux Kernel Development》已经更新到第三版了。LKD是非常适合内核初学者阅读的一本好书,对它的评价可以引用陈莉君老师的译者序:
相对于 Daniel P. Bovet 和 Marco Cesati 的内核巨著《 Understand the Linux Kernel 》,它少了五分细节,相对于实践经典《 Linux Device Drivers 》,它多了五分说理。可以说,本书填补了 Linux 内核理论和实践之间的鸿沟,“一桥飞架南北,天堑变通途”。
谢谢陈老师,她的译者序帮我引出了另外要谈到的两本经典书籍,对,就是《Understanding the Linux Kernel》和《Linux Device Drivers》。对于这两本书,如果要挑它们的缺点,我只能说,内容有点老,很多知识点都需要更新了,除此之外,我要说的是,是它们把我带上了内核驱动开发这条路上来,当然,还有LKD。
最近,我又发现一本分析Linux内核的优秀书籍,就是《Professional Linux Kernel Architecture》。这本书我目前正在读,写得非常好,而且因为此书相对较新(只是相对,2.6.24内核在现在看来也很老了),没有看过ULK的同学可以直接看这本书。

工具类

工欲善其事,必先利其器。进行Linux开发,相关工具还是需要熟练使用的。比如,GNU Tool Chain、自动构建工具、编辑器、版本控制工具等等。
这里有一本包罗万象的书,叫做《Handbook of Open Source Tools》,书中介绍了各种各样的开源工具,可称之为开源技术的总决式。这本书试图面面俱到,因此并不深入,粗读即可。
GNU Tool Chain参考Redhat的《The GNUPro Toolkit》已经足够了,如果单独把makefile拎出来,还可以参考《Managing Projects with GNU Make》。
自动构建工具可以参考《Autotools》。如果您准备使用cmake,推荐cjacker的《Cmake实践》。《Mastering CMake》据说是cmake的权威书籍,但一直无缘得见啊。
说到编辑器,在Linux里最著名的莫过于Vim和Emacs,关于这两者的背景,可以去看看《为何Emacs和Vim被称为两大神器》。我几乎没用过Emacs,曾经在当当做活动时花9块钱买了一本《学习GNU Emacs》,有这本书作为Emacs的入门我想应该够了。Vim是我经常使用的编辑器之一(另一个是Kate,最初喜欢上Kate的原因之一就是它提供了Vim编辑模式),相关的书籍有两本值得一读:《A Byte of Vim》和《Hacking Vim 7.2》,但是对于初学者,首先跟着Vim自带的vimtutor练习效果会更好。
Linux下的版本控制工具很多,有传统的Subversion,也有现在非常流行分布式工具如Git等。Subversion可以参考这本《Version Control with Subversion》,Git可以参考《Version Control with Git》或者《Git Internals》或者《Pro Git》。

其它

除了以上几个类别,还有一些书籍值得推介。
比如《The Art of Unix Programming》,主要介绍了Unix系统领域中的设计开发哲学、思想文化体系以及社群文化等,覆盖面非常广。书中的一些内容和Revolution OS》有相似之处,大家可以自己印证一下。对于这本书,我们也完全可以把它当做小说或者历史书来看,可以躺在床上看,也可以瘫在沙发上看,或者像怪怪那样坐在马桶上看,总之,不必一定要端坐在书桌前。
Computer Systems: A Programmer's Perspective》 很多人都推荐过,这是一本非常经典的计算机体系方面的教材。CSAPP的内容基础全面,讲解简明扼要,易于理解,仔细读完之后对理清计算机体系结构甚至是 Linux内核都非常有帮助的。虽然中文名被译为《深入理解计算机系统》(这个译名很不贴切),但相比之下,为什么会让人感觉国内的同类教材更加“深奥” 呢?也许,这就是作者功力的差距吧。
注:这里列出的书大多都可以在library.nu上下载到,注册登录之后会有搜索框,用书名搜索即可。

Tags: linux, 鸟哥

RabbitVCS 用后感

自从我的开发环境换成ubuntu后,对于SVN总感觉不象以前那样痛快。毕竟习惯了windows下的小乌龟了,于是找了很多资料,然后在某篇博客里发现了这个rabbitvcs,兴冲冲的装上去。

然后,就开始我的rabbitvcs之旅了,只是这段旅行并不快乐,在我写这篇文章的时候,它已经被我remove掉了。

先简单介绍一下rabbitvcs吧,它是一个GUI的SVN client,界面和操作方法都有点类似于小乌龟,所以,上手度极高。配置起来也挺方便,如果你装的是中文版的ubuntu,菜单中还有部分会被汉化。如果你用过小乌龟,那么我就不多说了。如果你没有用过,那我说了也白说。

剩下的就是我说缺点了,它有一个最大的缺点,那就是,SVN目录如果稍微过大,它就会在打开目录的时候,几乎停止响应。OK,你停止响应也就算了,你不能影响到所有打开的目录吧,只要是涉及到目录打开的,都会停止响应,时间比较长。

还有一个缺点就是,无论你怎么设置保存密码,它都记不住,我靠,你都记不住,你把那个复选框放出来干啥。真受不了。

所以,我卸载了,当然,最主要的原因,还是因为它卡死了目录。

现在我还是到SVN目录下,直接执行:svn update --username=xxx --password=xxx,速度超快,看来以后还是这样比较好。

Tags: rabbitvcs, svn, svn client, linux, ubuntu

linux filename xss攻击

看到这篇文章的时候是在晚上,然后就觉得好郁闷,不过也挺佩服淘宝QA那些人的奇思怪想,看看他们是怎么说的吧。

一、关于文件名
大家都知道在 windows 下面文件名是有规则,定义了一些保留的字符,他们分别是:

< (less than)
> (greater than)
: (colon)
" (double quote)
/ (forward slash)
\ (backslash)
| (vertical bar or pipe)
? (question mark)
* (asterisk)

而linux下面是没有对这些大部分字符进行限制的,可以随意定义的,那么,我们就可以将 XSS Pyload 存储在文件名中,如图所示:
大小: 13.74 K
尺寸: 318 x 231
浏览: 1572 次
点击打开新窗口浏览全图
我们可以看到可以成功将 xss pyload 存储在文件名当中了。
二、利用攻击
很多时候,由于代码的各种环境,让我们的攻击成为可能,查看以下PHP上传文件代码:

PHP代码
  1. <?php  
  2. if ($_FILES["file"]["error"] > 0)  
  3.   {  
  4.   echo "Error: " . $_FILES["file"]["error"] . "<br />";  
  5.   }  
  6. else  
  7.   {  
  8.   echo "Upload: " . $_FILES["file"]["name"] . "<br />";  
  9.   echo "Type: " . $_FILES["file"]["type"] . "<br />";  
  10.   echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";  
  11.   echo "Stored in: " . $_FILES["file"]["tmp_name"];  
  12.   }  
  13. ?>  
  14. <html>  
  15. <body>  
  16. <form action="" method="post" enctype="multipart/form-data">  
  17. <label for="file">Filename:</label>  
  18. <input type="file" name="file" id="file" />  
  19. <br />  
  20. <input type="submit" name="submit" value="Submit" />  
  21. </form>  
  22. </body>  
  23. </html>  
当文件上传成功,程序将文件信息进行输出。而此时没有对文件名进行任何处理,那么,如果将我们定义好的特殊字符的文件名进行上传,然后经过程序输出,就可以攻击了,如图所示:

大小: 39.65 K
尺寸: 500 x 226
浏览: 1623 次
点击打开新窗口浏览全图

可以看到,我们确实可以攻击成功了!那么,并不是所有的上传地方都存在,要满足以下条件才可以:
1、文件上传后保存前进行了一次原样输出。
2、直接按原文件名进行存储。
3、其他特定环境,看程序逻辑。
4、web server 为 linux。
5、上传攻击机器为 linux。
示例代码:http://code.google.com/p/madal-example-project/source/browse/trunk/controllers/image_uploader.php?r=2
更多的:http://code.google.com/query/#q=$_FILES[%22file%22][%22name%22]
线上攻击测试:http://www.woyigui.cn/fileupload.php

三、防范
1、存储时以随机文件名保存。
2、任意时候对文件名进行处理后输出,可以进行 html 编码后输出。

参考:

http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx

--EOF——

原文来自:http://qa.taobao.com/?p=10139,虽然这个条件很苛刻,但毕竟还是存在被注入的可能啊,而且这种注入真的很妖。

Tags: linux, xss, php

Records:351234567