shell里的/dev/null 2>&1详解

shell中可能经常能看到:>/dev/null 2>&1

命令的结果可以通过%>的形式来定义输出

分解这个组合:“>/dev/null 2>&1” 为五部分。

1:> 代表重定向到哪里,例如:echo "123" > /home/123.txt
2:/dev/null 代表空设备文件
3:2> 表示stderr标准错误
4:& 表示等同于的意思,2>&1,表示2的输出重定向等同于1
5:1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于 "1>/dev/null"

因此,>/dev/null 2>&1
也可以写成“1> /dev/null 2> &1”

那么本文标题的语句执行过程为:
1>/dev/null :首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
2>&1 :接着,标准错误输出重定向 到 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

最常用的方式有:
    
command > file 2>file  与command > file 2>&1

它们有什么不同的地方吗?
      首先command > file 2>file 的意思是将命令所产生的标准输出信息,和错误的输出信息送到file 中.command  > file 2>file 这样的写法,stdout和stderr都直接送到file中, file会被打开两次,这样stdout和stderr会互相覆盖,这样写相当使用了FD1和FD2两个同时去抢占file 的管道。
      而command >file 2>&1 这条命令就将stdout直接送向file, stderr 继承了FD1管道后,再被送往file,此时,file 只被打开了一次,也只使用了一个管道FD1,它包括了stdout和stderr的内容。
      从IO效率上,前一条命令的效率要比后面一条的命令效率要低,所以在编写shell脚本的时候,较多的时候我们会command > file 2>&1 这样的写法。
 

标签: linux, NULL, shell, 定向

Python内置的字符串处理函数整理

收集常用的Python
内置的各种字符串处理
函数的使用方法

str='python String function'

  1. 生成字符串变量str='python String function'
     
  2. 字符串长度获取:len(str)
    例:print '%s length=%d' % (str,len(str))
     
  3. 字母处理
    全部大写:str.upper()
    全部小写:str.lower()
    大小写互换:str.swapcase()
    首字母大写,其余小写:str.capitalize()
    首字母大写:str.title()
    print '%s lower=%s' % (str,str.lower())
    print '%s upper=%s' % (str,str.upper())
    print '%s swapcase=%s' % (str,str.swapcase())
    print '%s capitalize=%s' % (str,str.capitalize())
    print '%s title=%s' % (str,str.title())
  4. 格式化相关
    获取固定长度,右对齐,左边不够用空格补齐:str.ljust(width)
    获取固定长度,左对齐,右边不够用空格补齐:str.ljust(width)
    获取固定长度,中间对齐,两边不够用空格补齐:str.ljust(width)
    获取固定长度,右对齐,左边不足用0补齐
    print '%s ljust=%s' % (str,str.ljust(20))
    print '%s rjust=%s' % (str,str.rjust(20))
    print '%s center=%s' % (str,str.center(20))
    print '%s zfill=%s' % (str,str.zfill(20))

  5. 字符串搜索相关
    搜索指定字符串,没有返回-1:str.find('t')
    指定起始位置搜索:str.find('t',start)
    指定起始及结束位置搜索:str.find('t',start,end)
    从右边开始查找:str.rfind('t')
    搜索到多少个指定字符串:str.count('t')
    上面所有方法都可用index代替,不同的是使用index查找不到会抛异常,而find返回-1
    print '%s find nono=%d' % (str,str.find('nono'))
    print '%s find t=%d' % (str,str.find('t'))
    print '%s find t from %d=%d' % (str,1,str.find('t',1))
    print '%s find t from %d to %d=%d' % (str,1,2,str.find('t',1,2))
    #print '%s index nono ' % (str,str.index('nono',1,2))
    print '%s rfind t=%d' % (str,str.rfind('t'))
    print '%s count t=%d' % (str,str.count('t'))

  6. 字符串替换相关
    替换old为new:str.replace('old','new')
    替换指定次数的old为new:str.replace('old','new',maxReplaceTimes)
    print '%s replace t to *=%s' % (str,str.replace('t', '*'))
    print '%s replace t to *=%s' % (str,str.replace('t', '*',1))

  7. 字符串去空格及去指定字符
    去两边空格:str.strip()
    去左空格:str.lstrip()
    去右空格:str.rstrip()
    去两边字符串:str.strip('d'),相应的也有lstrip,rstrip
    str=' python String function '
    print '%s strip=%s' % (str,str.strip())
    str='python String function'
    print '%s strip=%s' % (str,str.strip('d'))

  8. 按指定字符分割字符串为数组:str.split(' ')
    默认按空格分隔
    str='a b c de'
    print '%s strip=%s' % (str,str.split())
    str='a-b-c-de'
    print '%s strip=%s' % (str,str.split('-'))

  9. 字符串判断相关
    是否以start开头:str.startswith('start')
    是否以end结尾:str.endswith('end')
    是否全为字母或数字:str.isalnum()
    是否全字母:str.isalpha()
    是否全数字:str.isdigit()
    是否全小写:str.islower()
    是否全大写:str.isupper()
    str='python String function'
    print '%s startwith t=%s' % (str,str.startswith('t'))
    print '%s endwith d=%s' % (str,str.endswith('d'))
    print '%s isalnum=%s' % (str,str.isalnum())
    str='pythonStringfunction'
    print '%s isalnum=%s' % (str,str.isalnum())
    print '%s isalpha=%s' % (str,str.isalpha())
    print '%s isupper=%s' % (str,str.isupper())
    print '%s islower=%s' % (str,str.islower())
    print '%s isdigit=%s' % (str,str.isdigit())
    str='3423'
    print '%s isdigit=%s' % (str,str.isdigit())

还有其他常见的Python字符串处理
函数的话不定期更新。

Magento添加新到产品在CMS Page(带分页)

在Magento我们经常有的做法是建立一个可以调用新产品的block,然后通过:

{{block type="catalog/product_new" column_count="6" products_count="100" name="home.catalog.product.new" alias="product_homepage" template="catalog/product/new.phtml"}}

调用,这样就可以在Magento首页显示新到产品
或者其他位置调用,前提要有添加新产品并设置新产品期间了。

现在是要让Magento创建一个带分页功能的新到产品展示Page,自动展示有设置了“Set Product as New from Date - Set Product as New to Date”的新到产品。

话入正题。Magento在CMS Page添加带分页功能的新到产品页面步骤如下;

  1. 创建路径:app/code/local/Mage/Catalog/Block/Product
     
  2. 创建文件:app/code/local/Mage/Catalog/Block/Product/New.php

    New.php将盖掉magento core里的New.php,所以如果原来New.php有在使用的话local的这个文件另外命名区分开。
     
  3. 添加以下内容到New.php
    <?php
    //chen@sjolzy.cn
    class Mage_Catalog_Block_Product_New extends Mage_Catalog_Block_Product_List
    {
       function get_prod_count()
       {
          //unset any saved limits
          Mage::getSingleton('catalog/session')->unsLimitPage();
          return (isset($_REQUEST['limit'])) ? intval($_REQUEST['limit']) : 12;
       }// get_prod_count

       function get_cur_page()
       {
          return (isset($_REQUEST['p'])) ? intval($_REQUEST['p']) : 1;
       }// get_cur_page

       /**
        * Retrieve loaded category collection
        *
        * @return Mage_Eav_Model_Entity_Collection_Abstract
       **/
       protected function _getProductCollection()
       {
          $todayDate  = Mage::app()->getLocale()->date()->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);

          $collection = Mage::getResourceModel('catalog/product_collection');
          $collection->setVisibility(Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds());

          $collection = $this->_addProductAttributesAndPrices($collection)
             ->addStoreFilter()
             ->addAttributeToFilter('news_from_date', array('date' => true, 'to' => $todayDate))
             ->addAttributeToFilter('news_to_date', array('or'=> array(
                0 => array('date' => true, 'from' => $todayDate),
                1 => array('is' => new Zend_Db_Expr('null')))
             ), 'left')
             ->addAttributeToSort('news_from_date', 'desc')
             ->setPageSize($this->get_prod_count())
             ->setCurPage($this->get_cur_page());

          $this->setProductCollection($collection);

          return $collection;
       }// _getProductCollection
    }// Mage_Catalog_Block_Product_New
    ?>
  4. 保存后,创建CMS里的新到产品列表Page。添加后,设置Design的内容为以下内容:
    <reference name="content">
       <block type="catalog/product_new" name="product_new" template="catalog/product/list.phtml">
          <action method="setCategoryId"><category_id>10</category_id></action>
          <action method="setColumnCount"><column_count>6</column_count></action>
          <action method="setProductsCount"><count>0</count></action>
          <block type="catalog/product_list_toolbar" name="product_list_toolbar" template="catalog/product/list/toolbar.phtml">
             <block type="page/html_pager" name="product_list_toolbar_pager" />
             <action method="setDefaultGridPerPage"><limit>12</limit></action>
             <action method="addPagerLimit"><mode>grid</mode><limit>12</limit></action>
             <action method="addPagerLimit"><mode>grid</mode><limit>24</limit></action>
             <action method="addPagerLimit"><mode>grid</mode><limit>36</limit></action>
             <action method="addPagerLimit"><mode>grid</mode><limit>48</limit></action>
             <action method="addPagerLimit" translate="label"><mode>grid</mode><limit>all</limit><label>All</label></action>
          </block>
          <action method="addColumnCountLayoutDepend"><layout>one_column</layout><count>6</count></action>
          <action method="setToolbarBlockName"><name>product_list_toolbar</name></action>
       </block>
    </reference>

这样就可以保存查看效果了。以下简要备记几点说明:

  • <block type="catalog/product_new" name="product_new" template="catalog/product/list.phtml">

    设置块的类型和使用的模版文件,这个文件也是产品列表页用的。“catalog/product_new” 这个就是更换了的New.php。
     
  • <action method="setCategoryId"><category_id>10</category_id></action>

    setCategoryId 设置目录ID,可以是网站的根目录ID,或者某目录。
  • <action method="setColumnCount"><column_count>6</column_count></action>

    setColumnCount 新到产品的Page产品每页产品数为6
  • <action method="setProductsCount"><count>0</count></action>

    setProductsCount 设为0的话就是该指定目录的所有产品,否者按限定数
  • <block type="catalog/product_list_toolbar" name="product_list_toolbar" template="catalog/product/list/toolbar.phtml">
             <block type="page/html_pager" name="product_list_toolbar_pager" />

    为新到产品列表页面添加目录页的工具条和分页
  • <action method="setDefaultGridPerPage"><limit>12</limit></action>

    setDefaultGridPerPage 配置工具栏的产品显示数
  • <action method="addPagerLimit"><mode>grid</mode><limit>12</limit></action>

    配置分页的产品数
  • <action method="addColumnCountLayoutDepend"><layout>one_column</layout><count>6</count></action>

    one_column 布局定为6列
  • <action method="setToolbarBlockName"><name>product_list_toolbar</name></action>

    工具条的命名

Page的Design部分设置好后,Content部分随便设下,保存,就能查看效果了。

这篇Magento添加新产品在CMS Page
是翻译老外
的,经实际操作完全可行。

漂亮的后台模版|50个漂亮的后台管理界面模板

这次看到的比较完善的后台模版
收集。。之前用了几个,收集下次备用。

后台管理虽然一般由内部人员使用的平台,更侧重于功能而非美观,但拥有一个漂亮的后台管理界面,工作起来心情更加愉悦,而且很多客户也对后台管理界面有先入为主的印象。

下面是 50 个很漂亮、专业的后台管理界面风格,不知道有没有你喜欢的,以供参考:

1. Simpla Admin – Flexible & User Friendly Admin skin

后台模版

View Live Demo

2. Constellation complete admin skin

后台模版

View Live Demo

3. Complete Liquid Admin Control Panel
后台模版

View Live Demo

4. Admintasia-Powerful backend admin user interface
后台模版

View Live Demo

5. Adminus – Beautiful admin panel interface

后台模版

View Live Demo

6. Boxie Admin

后台模版

View Live Demo

7. Profi Admin – Administration for the professionals

后台模版

View Live Demo

8. Cleanity Complete Admin / CMS Skin

后台模版

View Live Demo

9. Wide Admin – Powerful Backend Interface

后台模版

View Live Demo

后台模版
10. Administry Admin Template

后台模版

View Live Demo

11. UltraAdmin Full Control Panel 4 Skins

后台模版

View Live Demo

12. eManager 1.0

后台模版

View Live Demo

13. Smart Admin High End CMS Theme
后台模版

View Live Demo

14. Slate Admin

后台模版

View Live Demo

15. TERMINATOR – 13 different Admin Backend pages

后台模版

View Live Demo

16. Flexy – liquid admin skin – 7 in 1

后台模版

View Live Demo

17. Smooth Admin

后台模版

View Live Demo

18. Admin Base – Stylish Admin Template

后台模版

View Live Demo

19. WeAdmin

后台模版

View Live Demo

20. AdminTheme – Ultimate Admin Panel Solution

后台模版

View Live Demo

21. FreshCMS an almost complete CMS skin

后台模版

View Live Demo

22. Quik v1 Admin Skin
后台模版

View Live Demo

23. Element – Backend Admin Template
后台模版

View Live Demo

24
Meta Admin v1
后台模版

View Live Demo

25. Admin Control Panel
后台模版

View Live Demo

26. AdminNano
后台模版

View Live Demo

27. AP Administration Panel
后台模版

28. See Admin Interface
后台模版

View Live Demo

29. FULLADMIN – web + mobile admin template
后台模版

View Live Demo

30. ProManager v2.0 Customized Admin CMS Skin!
后台模版

View Live Demo

31. Visual Admin
后台模版

View Live Demo

32. Silky Admin
后台模版

View Live Demo

33. Broom Cupboard Admin Skin
后台模版

View Live Demo

34. Streamlined – Content Management/CRM Template
后台模版

View Live Demo

35. Clean CSS Admin Multiskin Black White Red Blue
后台模版

View Live Demo

36. Titanium
后台模版

View Live Demo

37. Magneto Admin Skin
后台模版

View Live Demo

38. eziCMS an almost complete fresh CMS skin
后台模版

View Live Demo

39. Sleek Admin Clean CSS Admin Skin
后台模版

View Live Demo

40. Ninja Admin
后台模版

View Live Demo

41. Evolution – Advanced Admin Theme
后台模版

View Live Demo

42. Sharp Admin Template
后台模版

View Live Demo

43. UniAdmin – Flexible, Universal & Easy to implement
后台模版

View Live Demo

44. Magic Admin. Beautiful Professional Admin Template
后台模版

View Live Demo

45. Reality Admin
后台模版

View Live Demo

46. iAdmin
后台模版

View Live Demo

47. Control Admin
后台模版

View Live Demo

48. Hello! Admin – Beautiful & Powerful Backend UI
后台模版

View Live Demo

49. proAdmin Template
后台模版

View Live Demo

50. Black Admin v2
后台模版

View Live Demo

这些漂亮的后台模版
文章来自:http://www.oschina.net/news/18007/50-best-premium-admin-templates?from=20110522

P, 看了下发现这些漂亮的模板要收费的~~ ?第一款模板我手头有~ 要的留言。

//sjolzy.cn/uploads/201105/admin-templates.zip

.htaccess禁止IP或IP段访问

连续半个月了。。受够了几个IP段的流氓留言,决定把几个IP端拉入禁止访问列表

可以通过.htaccess作用来设置禁止访问的IP和IP段。

Order Allow,Deny
Deny from 92.241.169
Allow from all

.htaccess禁止IP
的话直接某个IP,禁止IP段
的话就是:Deny from 92.241.169。(92.241.169.1-92.241.169.254)

效果就是访问显示:

Forbidden

You don't have permission to access / on this server.

Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.

VMWare虚拟机报错:Unable to open kernel device "\\.\vmci": 系统找不到指定的文件

VMware Workstation 7 汉化精简版,新建虚拟机项要启动后报错:

Unable to open kernel device "\\.\vmci": 系统找不到指定的文件. Did you reboot after installing VMware Workstation?
Module DevicePowerOn power on failed.

解决方法一:

找到对应的虚拟机的*.vmx文件进行编辑修改。

找到这一行: vmci0.present = "TRUE",将 TRUE 改为 FALSE,直接删除也可以。

保存此虚拟机的.vmx文件后重新运行虚拟机。

解决方法二:

在VMWare虚拟机的软件界面上,编辑虚拟机设置。

在 虚拟机设置 -> 选项 -> 客户机隔离 ->VM通信接口(VMCI),把启用VMCI的钩去掉,确定保存。

重新运行虚拟机。