存档

  • SSH无密码登录

    一直都有用到这个,但是每次用都要去查一下,干脆现在记下来。 除了通过交互式的方式输入用户名和密码以为,SSH中还可以通过一种“公私钥”的方式进行登录,具体的原理为: 首先在客户端上创建一对公私钥 (公钥文件:~/.ssh/id_rsa.pub; 私钥文件:~/.ssh/id_rsa) 然后把公钥放到服务器上(~/.ssh/authorized_keys), 自己保留好私钥 当ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配.如果匹配成功就可以登录了 具体的实现方法如下: user@ubuntu:~$ ssh-keygen -t rsa -P “” Generating public/private rsa key pair. Enter file in which to save the key (/home/user/.ssh/id_rsa): Created directory ‘/home/user/.ssh’. Your identification has been saved in /home/user/.ssh/id_rsa. Your public key has been saved in /home/user/.ssh/id_rsa.pub. The key fingerprint is: 9b:82:ea:58:b4:e0:35:d7:ff:19:66:a6:ef:ae:0e:d2 hadoop@ubuntu The key’s [...]

    1,183 次查看 | 1 条评论
    2011年5月18日 | 归档于 Linux
    标签: , , ,
  • 使用Grub4DOS引导Ubuntu 11.04

    Ubuntu 11.04发布以后,就第一时间把我的笔记本从10.10升级了过来,升级的过程很顺利,就是耗时稍微长了一些,要不是觉得不想把开发环境重新配置一遍,就进行全新安装了。我没有把Grub2安装到/dev/sda上,这样的话,将覆盖掉Windows 7的Loader(这个稍微有些强迫症,一直觉得Grub的引导界面太丑了),而是把Grub2装到了/dev/sda8上(/boot所在的单独的分区),然后把bootsector导出来放在Windows下新建一个引导项,用Windows 7的Loader加载Grub2,具体的作法我曾经写过一篇博文,在这里可以找到。 但是这次,升级完成的以后,重新导出了一份bootsector,重启无法进入Grub2,好吧,我也不知道是什么原因,怀疑跟Grub2本身有关,我也没有深究这件事件,以后有精力的时候再搞搞吧!可是我总得想办法引导进去啊,我首先是试了用LiveCD引导进入系统,重新安装Grub2,这件事情本身就存在着一些问题,没有成功。最后无奈,选择用Grub4DOS引导,成功。 上面有Grub4DOS的下载,具体怎么添加Grub4DOS的启动项,可以参考这篇文章。不过那篇文章没有给出menu.lst的参考,我这里给一个可以引导Grub2的menu.lst timeout 30 default 0 title GNU/Linux GRUB2 find –set-root –ignore-floppies –ignore-cd /grub/core.img kernel /grub/core.img 完毕!发现现在的Grub2还是挺漂亮的,考虑下次就直接把Grub2装到/dev/sda上得了,mbr覆盖就覆盖掉吧!省得麻烦。

    1,352 次查看 | 没有评论
    2011年5月5日 | 归档于 Linux, Ubuntu, 技术, 软件
  • 在C++里写一个不能被继承的类

    这是最近看到的一道面试题,最近是看了不少道面试题,C++里各种变态的问法。这道题算是比较正常的吧。在C++语言里,是没有类似Java里final class的概念的,但是学C++的人心里一定要相信,C++是万能的。于是有人给出了一种解法。 代码我在下面再贴一下吧,不过著作权归原作者所有,向原作者表示敬意。 template <typename T> class MakeFinal {       friend T; private :       MakeFinal() {}       ~MakeFinal() {} }; class FinalClass: virtual public MakeFinal<FinalClass> { public :       FinalClass() {}       ~FinalClass() {} }; 这个方法行不行,行!请注意红色的部分,由于声明了T是友元类,所以可以访问自己的私有成员函数,当然也包括构造和析构函数;但是由于FinalClass是虚继承自MakeFinal,所以当有一个类ChildClass: public FinalClass时,会先调用虚基类MakeFinal的构造函数,由于调用者是ChildClass,所以无法调用。上述代码要是把virtual去调,则可以有ChildClass: public FinalClass,因为普通的继承是由子类调用父类的构造函数,向上调用,ChildClass的父类FinalClass是可以调用MakeFinal的构造函数的,所以这里虚继承是必须的。不然就无法实现一个不能被继承的类。 这个方法有没有局限,答案是有。上述代码第一个红色的部分,只要在支持c++0x标准的编译器里才能编译通过,GCC 4.4就算是加上-std=c++0x也不能通过,因为4.4只是部分支持了c++0x的标准。是不是就不能做出一个在GCC 4.4里可以用的FinalClass了?非也,C++是万能的。嗯,你在friend后面直接加个class后,GCC会报有编译错误,此路是不通的。客官就别试了。 我们定义另一个结构体: template<typename T> struct Clazz {       typedef T Type; }; [...]

    2,244 次查看 | 2 条评论
    2010年9月13日 | 归档于 C++, Linux
  • 在Godaddy的主机上配置CodeIgniter

    之前在CodeIgniter上部署过一个小的CodeIgniter的应用,参考了这篇文章,当时顺利的完成了部署运行的任务。主要是因为在Godaddy的虚拟主机上使用rewrite模块产生的问题,原因不知道,只知道一种解决问题的办法。主要的步骤为: 在config.php里修改配置,使用QUERY_STRING的方式来解析URL $config['uri_protocol'] = "QUERY_STRING"; 然后,修改.htaccess文件,使其内容为如下所示: RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?$1 [L] 这样,某个请求,如http://www.example.com/blog/view/123 ,实际上会被解析成http://www.example.com/index.php?blog/view/123 ,但是,假如我使用的请求必须通过GET方法传参数呢?这种解决方案就不能解决问题了。如http://www.example.com/index.php?blog/view/123?from=1009&author=bbiao ,这个时候就无法通过parse_str($_SERVER['QUERY_STRING'], $_GET);的方法来获得GET的数据了。但是我们可以观察到$_SERVER['REQUEST_URI']里保存了blog/view/123?from=1009&author=bbiao的值,OK,解析一下这个数据就可以了。代码如下: $arr = explode(‘?’, $_SERVER['REQUEST_URI']); parse_str($arr[1], $_GET); 另外说一句,由于CI里是把$_GET的数据清空的,所以才有了以上的这些说法,CI本身是不推荐使用GET来传递参数的,但有时候又不得不用,比如使用OAuth的时候,别人回调你的接口的时候都是这样传的,你能怎么办呢?事情总有解决办法的,现在我的程序在Godaddy上跑的一切正常。

    1,867 次查看 | 没有评论
    2010年6月2日 | 归档于 CodeIgniter, Linux, opensource
  • Xen Cloud Platform 0.1.1

    Xen Cloud Platform 是一个基本Xen虚拟化技术的云计算基础平台,这半年一直在使用另外一个商业版本XenServer,少对XCP有所关注,今天看了它的官方主页,XCP今年有一个新的版本发布,版本号是0.1.1,我去年使用XCP的时候,其版本还是0.1,这里对新版本做一个简单的介绍。 版本0.1.1发布于今年1月18号(汗,现在才知道),新增加的功能包括: Openvswitch XCP Console Documentation VNC Console Proxy and Web Front-End Standalone Front-End – *openxencenter* VM Lifecycle Queuing Deadlock Fixed Rare Post-Fork() Spinning XAPI Process Fixed Active Directory Authentication Fixes Memory Ballooning Fixes 其中描述的单独的前端就是XenCenter的一个开源Python实现,试用了一下,与XenCenter 5.5还是有一定差距的,但是总算是有一个前端可以选择了,之前用xe cli和Web管理太痛苦了,详细信息和下载,可以到XCP的主页查看。

    1,785 次查看 | 没有评论
    2010年5月22日 | 归档于 Linux, opensource, 云计算, 虚拟化
  • 使用JDK进行Performance Tuning

    JDK里有三个很好用的工具,jmap,jconsole和jvisualvm,三个工具都各有所侧重,但是如果你的系统遇到性能瓶颈(内存不足或是CPU占用率过高),你可以通过这三个工具来发现应用里的hot spot。我今天只记一下大概的用法,给自己做个备忘,详细的使用说明,等忙完了这段时间,整理一下。 先介绍一个小工具,jps,这也是jdk自带的工具之一,可以列出系统里所有的java进程。 jmap可以查看程序中堆的使用情况,具体的用法是: jmap –histo:live <pid>; 以及可以将堆dump到一个文件,命令是: jmap –dump:format=b,file=heap.bin <pid>; 请在<pid>处填入相应的进程的id。 jconsole可以查看某个java进程的内存使用、CPU占用率等, 如果想要远程查看某一java程序,则需要在该程序启动参数里加下如下参数: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9001 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false 上文使用的9001是监听的端口号,你可以指定其他的值。然后在你的终端键入jconsole,选择连接远程进程,并填入相应的主机名和端口即可。如果无法连接,请修改/etc/hosts里的内容,将localhost绑定到机器的外部ip地址。 相应的数据可以导出为一个csv文件,这个很方便。 jvisualvm功能与jconsole的基本类似,但是可以做性能分析。 即可以分析出CPU时间被哪些线程所占用了,等等,并且它支持jmx,这东西我只听说过没用过,先放一边不表。 配置jvisualvm不需要改动原程序的启动参数,只需要在远程主机上运行jstatd即可。 新建一个叫jstatd.all.policy的文件,内容是: grant codebase "file:${java.home}/../lib/tools.jar" {     permission java.security.AllPermission; }; 然后使用如下命令启动jstatd, jstatd -J-Djava.security.policy=jstatd.all.policy 然后在jvisualvm里选择添加远程主机即可。如果无法连接,请修改/etc/hosts里的内容,将localhost绑定到机器的外部ip地址。

    1,993 次查看 | 2 条评论
    2010年4月12日 | 归档于 Java, Linux, 技术, 软件
  • CentOS配置vsftpd遇到550错误的解决办法

    安装vsftpd很简单:yum install vsftpd 启动vsftpd也很简单:service vsftpd start 默认情况下用root是无法连接的,你可以创建一个非root帐户登录,但是登录是可以登录,却没有办法创建或是上传文件。有人说,可以把SELinux关掉,可是这样未免也有点尺度太大了,其实是SELinux里的设置问题,只要修改相应的配置就可以了。 发现问题的方法: # getsebool -a | grep ftp allow_ftpd_anon_write –> off allow_ftpd_full_access –> off allow_ftpd_use_cifs –> off allow_ftpd_use_nfs –> off ftp_home_dir –> off httpd_enable_ftp_server –> off tftp_anon_write –> off 将红色字体部分的值改成on就可以了,设置的方法如下: # setsebool -P ftp_home_dir 1 然后就可以上传文件,做你想做的事情了。

    1,715 次查看 | 没有评论
    2010年1月27日 | 归档于 Linux, 技术, 软件
  • Python and RRD

    RRD是Round Robin Database的意思,RRDTool是用来管理RRD的一个工具。RRDTool的主页在这里,Wikipedia的页面在这里。RRD其实就是一个时序数据库,使用一个固定大小的环型buffer,适用于存储一些统计性的信息,如CPU负载呀,气温变化呀。我为什么要说这个东西呢,因为XenServer里的性能统计是用的RRD,你可以访问诸如http://xenserver-host/rrd_updates?cf=AVERAGE&interval=5&start=123131321形式的网址来获取统计信息。XenServer将返回一个XML文件,这个XML文件其实就是用rrdtool里的export工具导出的。 好,下载完成了这个文件以后,我们假设文件名是data.xml,你可以使用rrdtool restore data.xml data.rrd的方式将数据重新恢复成rrd的格式,然后就可以使用rrdtool进行一系列操作。rrdtool的操作可以写十篇博客,这不是我今天想说的重点。 我今天想说的是,当我把rrdtool跟Python集成的时候,发现Python提供了若干封装的工具,比如Python-PyRRD,Python-rrd,Python-rrdtool,我想没几个人能搞明白这几者之间的关系吧。我来说一下。 Python-rrdtool,这个就是rrdtool的一个Python封装,调用方式与rrdtool里命令的格式是一致的。 Python-rrd,这个据说应该是rrdtool的前身,命名方式不符合Python的命名策略,所以改名成了Python-rrdtool,但是debian和ubuntu的源里还保留了一个过渡性质的傀儡包(transitional dummy package),其实就是Python-rrdtool Python-PyRRD,这个是OO化的rrdtool封装,个人比较推荐用这个包,方便,代码也更容易让人理解。 另外,Java也提供了两个rrdtool的封装,一个是JRobin,一个是rrd4j,后者是在前者的基础上做的,提供了更好的OO的支持和性能。但是这两个项目似乎更新得很慢,XenServer导出的rrd数据(version 0003)他们现在不支持(只支持到version 0001)。所以想用Java分析XenServer的性能,还是自己去解析那个xml文件吧。

    2,695 次查看 | 5 条评论
    2010年1月8日 | 归档于 Java, Linux, Python, Unix, 技术, 数据库
  • Linux\Unix性能测试

    最近在做云计算,接触到一些虚拟化的技术,所以想测试一下虚拟机的性能到底如何,这里给出一个方法,利用UnixBench来为服务器做性能测试。 1: wget http://byte-unixbench.googlecode.com/files/unixbench-5.1.2.tar.gz 2: tar -xzvf unixbench-5.1.2.tar.gz 3: cd unixbench-5.1.2.tar.gz 4: make 5: ./Run 如果你不想做图形化测试,或是编译的时候遇到问题,那么你可以修改Makefile 1: #GRAPHIC_TESTS = defined 把该句注释掉即可。

    897 次查看 | 没有评论
    2009年12月18日 | 归档于 Linux, Unix
  • Windows 7 引导信息修复方法

    bootsect /nt60 SYS /mbr 你可以使用win7安装盘(非OEM安装盘)启动系统,并选择修复系统。然后选择命令行,敲入以上命令。一般可以修复由于安装Linux失误,或是先装Windows XP再装Windows 7造成的引导信息错误。

    2,472 次查看 | 没有评论
    2009年12月16日 | 归档于 Linux, Windows
‘Linux’ 分类的存档