centos 6.2 yum 升级时提示no module named yum

很怪的问题,同一个iso镜像,昨天安装好好的,这次安装后,运行yum update时,报错了 no module named yum

消息内容说是python的问题,看网上别人是使用过程中突然出现了 no module named yum 这样问题,而我是刚安装就被报 no module named yum,难道是人品问题?

参考网上的说法,把iso镜像挂上,到里面的rpm目录里,把rpm-xxxxxx.rpm的几个包重新安装一遍,rpm -ivh xxxxxxx,然后再运行yum update 就好了。

很是怪异的问题。

从最小化centos6.2下安装centos桌面系统gnome

一台旧电脑,比较老了一点,拿来用来做linux测试用,硬件有点问题,不能从U盘启动;也没有CentOS安装光盘,以前下载的centos6.0的DVD安装镜像似乎也有问题,于是整个安装过程相当麻烦;要先最小安装,然后在线安装gnome桌面环境。

从网易镜像站点http://mirrors.163.com/centos/6.2/isos/i386/上下载了一个minial的centos6.2安装上了,自然是没有图形界面的。接下来是安装图形界面等,直接在线yum安装,大概半个小时基本安装成功,这得益于10M的光纤,不然这个安装过程不知道要花多久。

下面是minial centos6.2安装后安装gnome桌面环境的主要过程:

1.添加一个普通用户,设置密码

useradd -Um feng
passwd feng

2. 查看网络状态并启用有线网络eth0,通过dhcp获取地址,并检查获取到的ip地址

ifconfig eth0
dhclient eth0
ifconfig eth0

3. 进行一次在线升级

yum update

4. 导出并查看yum组 grouplist (可选,只是为了方便查看需要哪些包/组)

yum grouplist > group.txt
less group.txt

5. 安装桌面系统

yum groupinstall Desktop
yum groupinstall "X Window System"

5. 安装中文支持

yum groupinstall "Chinese Support [zh]"
yum groupinstall chinese-support

6. 进入图形化桌面

[注意] 安装minial centos时,是使用的默认语言为中文,如果默认选择的是英文,则

修改/etc/sysconfig/i18n,将LANG修改为LANG="zh_CN.UTF-8" (网上说法,个人未证实)

init 5

7. 登录,设置用户家目录标准文件标准夹名

登录后,将出现用户家目录文件名改名的提示界面,推荐“不再问我” “保留旧名称”;当然看个人习惯,改成中文也可以。个人是习惯使用英文文件名。

8. 去掉一些gnome自动启用项

进入 系统 - 启用应用程序,取消对“用户文件夹更新”的勾选。另外的一些启用项目,也酌情取消。

9. 下面就可以在gnome终端里操作了。根据实际需要安装一些有用的组,当然也可以一个一个包的安装。

yum groupinstall "Desktop Platform"
yum groupinstall "Development tools"
yum groupinstall "Base" "Fonts" "Emacs" .....

按下来,加个第三方yum源吧,不然是没有多媒体应用程序的,推荐RPMforge, 很不错的centos RPM/yum源(参看 http://blog.path8.net/archives/4707.html)

enjoy your gnu/linux

bash shell下按文件夹快速合并文件

要求:很N个文件夹,每个文件夹下都是N个文本文件,要把每个文件夹下文件合并成一个文件。

如果windows下,除非使用第三方工具,否则这是个无法想像的工作。更不要说使用文本编辑工具打开、然后手工拼合了。在linux下,简单的使用命令,那是一件相当优雅的事情:如下

$ for f in `ls`; do cd $f; cat `ls` >../${f}.txt ;cd .. ; done

(注:行首的美元符$是bash命令提示符)

这条命令执行完,就把每个文件夹下的文件合并起来,文件名就是 文件夹的名字+.txt

 

centos6.x下安装libreOffice最新版本/替代openoffice

centos6.2自带的openoffice,实在差劲,版本太老;没办法,centos为了稳定,没有新软件;尤其是openoffice被oracle捣腾得...

不多说,放弃openoffice,安装libreoffice,是一个正确的选择。首先下载:http://www.libreoffice.org/download/

libreoffice下载

libreoffice下载

选择 Linux x80(rpm), zh-CN-中文(简体),下载下面列出的三个包,第一个是程序包,后面是中文语言包及中文帮助包。

文件有140+M, 耐心等待。写本文时(2012-02-14)最新版本是3.4.5.

先解压缩140+M的软件包,里面有两个目录readmes,RPMS,  在终端下进入RPMS,su切换为root身份,这里文件比较多,rpm包都是lib开头的; 全部安装

# rpm -ivh lib*

当前RPM目录下还有一个目录desktop-integration 进入,这是在主菜单里加入liberoffice启用项的包,不安装就没有libreoffice的启动项目,centos属于redhat系列,安装

# rpm -ivh libreoffice3.4-redhat-menus-3.4-502.noarch.rpm

同法,解压缩语言包LibO_3.4.5_Linux_x86_langpack-rpm_zh-CN.tar.gz及帮助文件LibO_3.4.5_Linux_x86_helppack-rpm_zh-CN.tar.gz,这两个压缩包里也是readmes及RPMS两个子目录,推荐安装RPM目录里的包全部安装。

即可。

[feng@fsc RPMS]$ ls
desktop-integration
libobasis3.4-base-3.4.5-502.i586.rpm
......(略)
libreoffice3.4-writer-3.4.5-502.i586.rpm
[feng@fsc RPMS]$ su
密码:
[root@fsc RPMS]# rpm -ivh lib*
Preparing...                ########################################### [100%]
1:libreoffice3.4-ure     ########################################### [  2%]
2:libobasis3.4-core01    ########################################### [  4%]
.......(略)
52:libobasis3.4-testtool  ########################################### [ 98%]
53:libobasis3.4-xsltfilter########################################### [100%]
[root@fsc RPMS]# cd desktop-integration
[root@fsc desktop-integration]# ls
libreoffice3.4-freedesktop-menus-3.4-502.noarch.rpm
libreoffice3.4-mandriva-menus-3.4-502.noarch.rpm
libreoffice3.4-redhat-menus-3.4-502.noarch.rpm
libreoffice3.4-suse-menus-3.4-502.noarch.rpm
[root@fsc desktop-integration]# rpm -ivh libreoffice3.4-redhat-menus-3.4-502.noarch.rpm
Preparing...                ########################################### [100%]
1:libreoffice3.4-redhat-m########################################### [100%]

几个重要的技术学习/培训点

如何定位错误(现象入手,分析问题,代码折半删除法)

解决问题思路,目的性,拆解,实施进行过程中及时发现问题、反思、返工,

搜索引擎的使用(关键词选取,语法)

常用工具软件使用,ultra edit/ue studio, edit plus, dreamweaver, firefox/add on,

数据库应用

http协议,cookie, session, http header, http server

web相关,bs架构,服务器/客户端、相对性,web server,动态语言解析引擎/php解析器,数据库连接库/bs关系

本文内容原本是很久以前打算在公司里给技术人员做培训而初拟的内容提纲。在草稿箱里放了4年多,最近整理博客看其更新时间为 2011年12月26日 @ 23:05,这么久都没有继续写,大概以后也不会续写,直接发出来算了(2016-10-10 15:29)

【补记】这只是个拟提纲的过程,一直没有完成,后面自然就荒废了。现在来看,果然是非常初级的内容,适用于在草根团队里的草根出身的开发人员。而且很多东西过时了

linux下使用Image Magick批量处理图片

使用Image Magick这个命令行图像处理软件批量处理图片,最有用的是批量缩放照片。举例:

目录photo中放置待缩小的图片,缩小后图片放置于small目录,缩小为原图片的50%。

进入photo目录,执行命令

feng@fscu:~/photo$ for img in `ls`; do convert -resize 50%x50% $img ../small/$img; done

即可。

--------------------------------------------------------------------------------------------------------

下面是转自http://www.5dlinux.com/article/1/2007/linux_7598.html的imagemagick使用说明。

mage MagicK 是一个强大的图象处理工具包。它提供了几个非常方便的命令行命令: display, animate,import, montage,mogrify,identify等,可以进行图象的显示,缩放,旋转,调色,加框,加注释等,还能制作GIF动画,图象索引,能自动生 成图象.

1. 制作索引图和动画

!/bin/bash
montage -bordercolor red -borderwidth 3 -label "%f" -tile 5x3 *.JPG montage.jpg
mogrify -format gif *.JPG
display montage.jpg
animate *.JPG

2. 缩放 convert -sample 80x40 input.jpg output.jpg #注意:缩放后图像保持原来的长宽比例 convert -sample 25%x25% input.jpg output.jpg
3. 为当前目录的所有图像生成缩略图

for img in `ls *.jpg`
do
convert -sample 25%x25% $img thumb-$img
done

4. 获取文件信息 libtiff

tiffinfo filename.tiff
pnginfo filename.png

5. 可以使用 ImageMagick 的 identify

identify -verbose sample.png
identify -format "%wx%h" sample.png

6. 旋转图像

convert -rotate 90 input.jpg output.jpg

7. 更改文件类型

convert input.jpg output.png

8. 为图像增加注释文字

convert -font helvetica -fill white -pointsize 36 \
-draw 'text 10,50 "Floriade 2002, Canberra, Australia"' \
floriade.jpg comment.jpg
convert -font fonts/1900805.ttf -fill white -pointsize 36 \
-draw 'text 10,475 "stillhq.com"' \
floriade.jpg stillhq.jpg

9. 特殊效果

convert -charcoal 2 input.jpg output.jpg #炭笔
convert -colorize 255 input.jpg output.jpg #着色 可以指定三种颜色 red/green/blue
convert -implode 4 input.jpg output.jpg #内爆效果
convert -solarize 42 input.jpg output.jpg #曝光,模拟胶片曝光
convert -spread 5 input.jpg output.jpg #随机移动,参数是位移大小

10. 一次执行多个操作

convert -sample 25%x25% -spread 4 -charcoal 4 input.jpg output.jpg

php函数代码:以表格形式输出二维数组

已于2012-01-16更新:对于元素为数组的,也以表格输出(否则将数组子元素显示为array)

直接上代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>以表格形式输出二维数组</title>
</head>

<body>
<?php
$comment[100]=array('id'=>100,'parent'=>0,'content'=>'AAAAAAAAAA');
$comment[101]=array('id'=>101,'parent'=>100,'content'=>'BBBBBBBBB');
$comment[102]=array('id'=>102,'parent'=>100,'content'=>'CCCCCCCCCC');
$comment[103]=array('id'=>103,'parent'=>0,'content'=>'DDDDDDDDDDd');
$comment[104]=array('id'=>104,'parent'=>102,'content'=>'EEEEEEEE');
$comment[105]=array('id'=>105,'parent'=>101,'content'=>'FFFFFFFFF');
$comment[106]=array('id'=>106,'parent'=>0,'content'=>'GGGGGGGG');
$comment[107]=array('id'=>107,'parent'=>0,'content'=>'HHHHHHHHH');
$comment[108]=array('id'=>108,'parent'=>101,'content'=>'IIIIIIIIIIII');
$comment[109]=array('id'=>109,'parent'=>105,'content'=>'JJJJJJJJJJ');
$comment[110]=array('id'=>110,'parent'=>103,'content'=>'KKKKKKKKKK');
$comment[111]=array('id'=>111,'parent'=>108,'content'=>'LLLLLLLLL');
$comment[112]=array('id'=>112,'parent'=>105,'content'=>'MMMMMMMMMM');

$data=$comment;

array_table_view($data);

function array_table_view($data)
{
?>
<table width="95%" border="1" cellspacing="0" cellpadding="4"><?php 
    if(!sizeof($data)){
?>
  <tr>
    <td>empty array.</td>
  </tr><?php 
    }else{
        foreach($data as $item){
?>
  <tr><?php 
          foreach($item as $key => $val){ ?>
    <th><?php echo $key; ?></th><?php 
            } ?>
  </tr>
<?php 
            break;
        }

        foreach($data as $item){

?>
  <tr><?php 
          foreach($item as $key => $val){ ?>
    <td><?php 
        if(is_array($val)){
            array_table_view($val);
        }else{
            echo $val;
        }
        ?></td><?php 
            } ?>
  </tr>
<?php
        }
    } ?>
</table>
<?php
}
?>
</body>
</html>

代码下载 array_table_view

代码下载 (请“复制-粘贴-保存”以上代码)

php安装xdebug后,让var_dump()函数输出完整的变量内容

php开发环境里,安装了xdebug模块后,var_dump()输出的结果将比较易于查看,但默认情况下,var_dump() 输出的结果将有所变化:过多的数组元素不再显示,字符串变量将只显示前N个字符,较深的数组元素也被显示成省略号。这点会带来一些不便,我们修改配置文件,设置这些。

在php.ini里的xdebug节点中,加入如下

xdebug.var_display_max_children=128
xdebug.var_display_max_data=512
xdebug.var_display_max_depth=5

含义从名字上看就可看懂。

其实这里有三条配置,正好与本文上述的三点“变化”一一对应嘀 ^..^

从phpinfo()里的xdebug节点里可以看到更多的配置变量,多半也是可以通过php.ini修改的

数据库入门

数据库是什么,从字面上理解,就是存储数据的系统。

日常学习工作生活中,经常会见到“数据库”这一概念,如,公安系统的居民身份证数据库,银行储户信息数据库,某某论文数据库,基因数据库,等等。这些例子里的数据库并非本文所要讲述的“数据库”的概念,它们是 依据一定的手段存储的、可以快速检索的海量数据。而本文中所讲的数据库,则是能够对数据实现方便存储、快速检索、易于更新维护的软件,注意了,我们所讲的数据库实际是计算机软件,而并不关心存储具体数据是银行存款、还是家庭收支账单、或者是邂逅美女的记录。严格的说,本文所讲的数据库,是“关系型数据库”,而不是当下在sns时代火爆的NoSQL数据库。

关系型数据库软件,有很多种,应用广泛的有MySQL, PostgreSQL, Oracle, DB2,MS sql server等。

数据拆分

数据库是对数据“格式化”存储的工具,这里的格式化,指的是对数据分类另,分条目,分栏目,按实际需求把数据拆分成小的单元,并存储在数据库中。

举个例子类比一下,以便对数据库有个初步理解。Excel文件(电子表格),大家应该都知道。

  1. 一个excel文件,它里面在可以存储多个工作表,新建一个excel文件默认会有Sheet1,Sheet2,Sheet3这三个工作表。
  2. 每个工作表,都是一个“表格”,可以有很多行。
  3. 每一行,都分为多列,每列是一个单元格,可以存储一定的内容。

[注] 工作表,对于excel本身,一般理解成一个工作表有行与列垂直交错形成格子,每个格式就是单元格。但为了类比理解数据库,不能这样理解,而是按html(超文本标记语言)里对表格(table)的划分,表格先分成行(<tr>.....</tr>),对每行再分列(<td>...</td>).

数据库可以与excle作类比,一个excel文件对应类比一个数据库,excel工作表类比数据库的表,工作表的行对应数据库里表的行。

数据库的数据一般正是拆分为这三个层次的,即表,行,字段 这三个层次。

数据表

数据库里的表,即数据表,简称表;可以与excel文件里的一个工作表类比。注意,这里说用来类比的excel表,是没有“合并单元格”存在的,不管是按行或是按列合并的。

通常,我们的excel表里,会有一个标题行。类似上图中所示,这是个简单的人员联系信息表,第一行,"name gender company address phone"那一行,它分为多列,每列都是对本列的说明、或者说是该列的名称,对于数据库列,也有这样的一列,称为列名,也称为字段名。不同的是,在excel表里,列名是占据一行的,而在数据库里,它并不占据任何一行;这一点,有点类似于excel里本身的列名的,如 列A、列B、列C... 这是固定的列名,不能修改的;而数据库里列名都是我们自己定义的。

多列数据,每列数据都放

行/记录

数据表里的数据是分为多行的,每行的格式都是一致的,如上图中所示,

本文内容原本是很久以前在公司里给非技术人员培训时的演示文稿。在草稿箱里放了几乎5年,最近整理博客看其更新时间为 2011年12月26日 @ 23:05,这么久都没有继续写,大概以后也不会续写,直接发出来算了(2016-10-10 15:29)

MySQL函数 GROUP_CONCAT,相当有用

一直想找这个函数,今天终于找到了,属于聚合函数,也正是猜测可能是个函数函数、才通过“MySQL 聚合函数” google到的。

使用过程中可能会遇到1260错误,如下:

#1260 - %d line(s) were cut by GROUP_CONCAT()

这是因为group_concat()有最大长度限制,该限制值默认为1024,可以从mysql环境变量里可以查看。如需修改该值,可以在mysql配置文件里指定:

group_concat_max_len = 102400

也可以在mysql运行时动态指定,执行语句:

SET GLOBAL group_concat_max_len=102400;

参考该链接http://www.fuchaoqun.com/2008/12/mysql-trap-of-group-concat/,或者mysql手册(推荐)。