残剑

Stop walking today and you'll have to run tomorrow!

Linux下批量将md文件转换为html文件

| Comments

要将markdown文件转换成html文件,可以用discount或python-markdown软件包提供的markdown工具。

1
$ sudo apt-get install discount

1
$ sudo apt-get install python-markdown

用discount提供的markdown工具转换:

1
$ markdown -o Release-Notes.html Release-Notes.md

用python-markdown提供的markdown_py工具转换:

1
$ markdown_py -o html4 Release-Notest.md > Release-Notes.html

如果要生成PDF,可以用python-pisa提供的xhtml2pdf转换:

1
2
$ sudo apt-get install python-pisa
$ xhtml2pdf --html Release-Notes.html Release-Notes.pdf

Grub Rescue修复方法

| Comments

在笔记本电脑上安装了两个Linux系统,有一个几乎不用,所以决定把它给删除了,在网上看到OS-Uninstaller(操作系统卸载)——轻松删除电脑中多余的操作系统一文可以操作成功,就决定试试了。本着学习的态度,边操作边作笔记,把它记录在了这里。可天公并不眷恋我这个爱折腾的孩子,操作并没有成功,开机显示如下信息:

1
2
3
4
5
GRUB loading

error:unknow filesystem

grub rescue>

下面几种操作会导致这种问题:

  • 想删除Ubuntu,于是直接在Windows下删除/格式化了Ubuntu所在的分区。
  • 调整磁盘,利用工具合并/分割/调整/删除分区,使磁盘分区数目发生了变化。
  • 重新安装系统,把Linux安装到了新分区,原有分区已经格式化,但是没有重新安装grub2。
  • 用Ubuntu备份工具/衍生版制造工具等,把主分区恢复成了8.X的老版本,结果老版本的grub是grub1,于是把grub2破坏掉了。

总归是由于操作者不知道grub2分为两部分,一部分(一般情况下)写在了mbr上,另一部分写在了某个分区的/boot/grub目录(如果/boot单独分区,则直接写在对应分区的/grub目录)里面。由于上述操作,致使grub2的mbr里面的那一部分找不到/grub目录里面的那一部分了(或者另一部分已经删除了)。

彻底删除grub2,让这个提示不再出现

适用于已经不想再使用Ubuntu,要转回Windows的人。只要有Windows启动盘(非Ghost),用它启动,至选择安装位置,不用真正安装,退出重启就可以。或者用它启动到故障修复台,运行fixboot或者fixmbr都可以。 win7命令行下,则是执行:

1
BootRec.exe /fixmbr

/fixmbr修复mbr,/FixBoot修复启动扇区,/ScanOs检测已安装的win7,/RebuildBcd重建bcd。

Ubuntu系统清理缓存、垃圾、多余内核

| Comments

Linux不会产生无用垃圾文件,但是在升级后它不会自动删除缓存中的文件,比较占系统硬盘资源。

删除缓存

清理升级缓存以及无用包的

1
2
3
$ sudo apt-get autoclean              清理旧版本的软件缓存
$ sudo apt-get clean                  清理所有软件缓存
$ sudo apt-get autoremove             删除系统不再使用的孤立软件

清理opera/firefox的缓存文件

1
2
$ ls ~/.opera/cache4
$ ls ~/.mozilla/firefox/*.default/Cache

清理Linux下孤立的包

1
$ sudo apt-get install deborphan -y

卸载tracker

tracker不仅会产生大量的cache文件,而且还会影响开机速度,所以在新得立里面删掉就行。

操作系统卸载软件:OS-Uninstaller

| Comments

OS-Uninstaller提供了一个图形化的界面,可以清除Windows, MacOS, Ubuntu以及其它的操作系统,可谓是强大又好用。

Ubuntu下通过添加PPA安装,打开终端输入:

1
$ sudo add-apt-repository ppa:yannubuntu/boot-repair

然后输入以下内容回车:

1
$ sudo sed 's/trusty/saucy/g' -i /etc/apt/sources.list.d/yannubuntu-boot-repair-trusty.list

执行以下命令安装:

1
$ sudo apt-get update; sudo apt-get install -y os-uninstaller && os-uninstaller

安装完之后,软件会自己启动。

也可以直接下载包含有OS-Uninstaller的镜像刻录使用,点击这里下载。

进程优先级控制:nice和renice

| Comments

Linux进程调度的目标:

  1. 高效性:高效意味着在相同的时间下要完成更多的任务,调度程序会被频繁的执行,所以调度程序要尽可能的高效;
  2. 加强交互性能:在系统相当的负载下,也要保证系统的响应时间;
  3. 保证公平和避免饥渴;
  4. SMP调度:调度程序必须支持多处理系统;
  5. 软实时调度:系统必须有效的调用实时进程,但不保证一定满足其要求。

Linux给予进程一个优先运行序 (priority, PRI), 这个PRI值越低代表优先级越高。不过这个PRI值是由核心动态调整的,使用者无法直接调整PRI值。

由于PRI是核心动态调整的,使用者无权去干涉。如果想要调整进程的优先运行序,就要透过Nice值了。一般来说, PRI与NI的相关性如下:

1
PRI(new) = PRI(old) + nice

GCC编译选项

| Comments

GCC的使用方法:

1
2
3
4
5
6
7
gcc [-c│-S│-E] [-std=standard]
    [-g] [-pg] [-Olevel]
    [-Wwarn...] [-pedantic]
    [-Idir...] [-Ldir...]
    [-Dmacro[=defn]...] [-Umacro]
    [-foption...] [-mmachine-option...]
    [-o outfile] infile...

常用选项

  • —help
  • —target-help:显示gcc帮助说明,是显示目标机器特定的命令行选项。
  • —version:显示gcc版本号和版权信息 。
  • -o outfile:输出到指定的文件。
  • -x language:指明使用的编程语言,允许的语言包括:c、c++、assembler、none,none意味着恢复默认行为,即根据文件的扩展名猜测源文件的语言。
  • -v:打印较多信息,显示编译器调用的程序。
  • –###:与-v类似,但选项被引号括住,并且不执行命令。
  • -E:仅作预处理,不进行编译、汇编和链接。
  • -S:仅编译到汇编语言,不进行汇编和链接。
  • -c:编译、汇编到目标代码,不进行链接。
  • -pipe:使用管道代替临时文件。
  • -combine:将多个源文件一次性传递给汇编器。

其它选项

  • -l library/-llibrary:进行链接时搜索名为library的库。
  • -Idir:把dir加入到搜索头文件的路径列表中。
  • -Ldir:把dir加入到搜索库文件的路径列表中。
  • -Dname:预定义一个名为name的宏,值为1。
  • -Dname=definition:预定义名为name,值为definition的宏。
  • -ggdb
  • -ggdblevel:为调试器gdb生成调试信息,level可以为1~3,默认值为2。
  • -g
  • -glevel:生成操作系统本地格式的调试信息,-g和-ggdb并不太相同,-g会生成gdb之外的信息,level取值同上。
  • -s:去除可执行文件中的符号表和重定位信息,用于减小可执行文件的大小。
  • -M:告诉预处理器输出一个适合make的规则,用于描述各目标文件的依赖关系。对于每个源文件,预处理器输出一个make规则,该规则的目标项(target)是源文件对应的目标文件名,依赖项(dependency)是源文件中#include引用的所有文件。生成的规则可以是单行,但如果太长,就用\换行符续成多行。规则显示在标准输出,不产生预处理过的C程序。
  • -C:告诉预处理器不要丢弃注释,配合-E选项使用。
  • -P:告诉预处理器不要产生#line命令,配合-E选项使用。
  • -static:在支持动态链接的系统上,阻止连接共享库。
  • -nostdlib:不连接系统标准启动文件和标准库文件,只把指定的文件传递给连接器。

CentOS安装SVN

| Comments

安装ssh服务器和subversion服务器

1
2
3
# yum update      
# yum install openssh-server     
# yum install subversion      

创建登陆svn的用户

1
2
3
# useradd test // 添加test用户     
# groupadd svn // 添加svn用户组     
# usermod -a -G svn test // 将test用户添加到svn用户组   

另外,如果test用户不存在,则可以用以下语句完成:

1
# useradd -g svn test     

建立用户存储

1
2
# mkdir -p /home/test/svn/trunk        
# svnadmin create /home/test/svn/trunk      

为svn用户组赋予权限

1
2
3
# chown -R root:svn /home/test/svn/trunk      
# chmod -R g+rws /home/test/svn/trunk    /*给svn组赋予读写权限,可以根据需要更改相应权限*/     
# chmod -R o-rwx /home/test/svn/trunk    /*删除其他无关人员的读、写、执行权限,默认情况下可能其他人有读权限*/       

Scrapy入门简略教程(二)

| Comments

What just happened under the hood?

Scrapy为爬虫中的start_urls属性中每个URL创建了一个scrapy.http.Request对象 ,并把parse方法作为回调函数指定给爬虫。

这些Request会被调度,执行,scrapy.http.Response对象被返回,结果也被反馈给爬虫,之后通过parse()方法解析。

Extracting Items

Introduction to Selectors

有很多方法从网站中提取数据。Scrapy使用一种叫做Scrapy Selectors的机制,它基于XPath或者是CSS表达式。如果想了解更多selectors和其它机制,可查阅Selectors documentation

以下是XPath表达式的例子和它们的含义:

  • /html/head/title: 选择HTML文档<head>元素下面的<title>标签。
  • /html/head/title/text(): 选择前面提到的<title>元素下面的文本内容。
  • //td: 选择所有 <td>元素。
  • //div[@class="mine"]: 选择所有包含class="mine"属性的div标签元素。

这只是几个使用XPath的简单例子,但是实际上XPath非常强大。如果你想了解更多XPATH的内容,我们向你推荐这个XPath教程

为了方便使用XPaths,Scrapy提供XPathSelector类, 有两种方式可以选择,HtmlResponse(HTML数据解析) 和XmlResponse(XML数据解析)。

使用XPath选择器,Scrapy提供了一个Selector类,它实例化一个HtmlresponseXmlresponse对象作为第一个参数。

你可以看到selectors作为对象表示在文档结构节点。所以,第一个实例化selectors是与根节点相关联,或整个文档。

Selectors有四种基本方法(具体的使用请查看API文档):

  • path():返回selectors列表, 每一个select表示一个xpath参数表达式选择的节点。
  • css(): 返回selectors列表, 每一个select表示一个CSS参数表达式选择的节点。
  • extract():返回一个unicode字符串,该字符串为XPath选择器返回的数据。
  • re(): 返回unicode字符串列表,字符串作为参数由正则表达式提取出来。