CentOS系统安装完毕可能需要做的事情 (一想到就补充)

1 安装运行 WordPress 所必需的 MySQL 扩展.

# yum install *php*mysql*

2 安装运行NTFS-3G + Ntfsprogs,以便能挂在ntfs分区.

源码包网址:http://www.tuxera.com/community/ntfs-3g-download/

3 安装Adobe Flash Player,以便能在网页中看视频.

CentOS 64位安装:
# su -
# rpm -ivh http://linuxdownload.adobe.com/adobe-release/adobe-release-x86_64-1.0-1.noarch.rpm
# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-adobe-linux
# yum check-update
# yum install flash-plugin nspluginwrapper alsa-plugins-pulseaudio libcurl

4 安装stardict及其词典,以便能顺利阅读英文.

# su -
# yum install espeak
# rpm -ivh stardict-3.0.1-22.puias6.x86_64.rpm
# tar jxvf stardict-xiangya-medical-2.4.2.tar.bz2 -C /usr/share/stardict/dic
# tar jxvf stardict-oxford-gb-2.4.2.tar.bz2 -C /usr/share/stardict/dic
# tar jxvf stardict-ncce-ec-2.4.2.tar.bz2 -C /usr/share/stardict/dic
# tar jxvf stardict-langdao-ec-gb-2.4.2.tar.bz2 -C /usr/share/stardict/dic
# tar jxvf stardict-kdic-computer-gb-2.4.2.tar.bz2 -C /usr/share/stardict/dic
# tar jxvf stardict-cedict-gb-2.4.2.tar.bz2 -C /usr/share/stardict/dic

5 安装virtualbox,以便你能使用虚拟机.

以virtualbox4.2.4为例
# wget http://dlc.sun.com.edgesuite.net/virtualbox/4.2.4/VirtualBox-4.2-4.2.4_81684_el6-1.x86_64.rpm
# rpm -ivh VirtualBox-4.2-4.2.4_81684_el6-1.x86_64.rpm
# wget http://dlc.sun.com.edgesuite.net/virtualbox/4.2.4/Oracle_VM_VirtualBox_Extension_Pack-4.2.4-81684.vbox-extpack
# virtualbox Oracle_VM_VirtualBox_Extension_Pack-4.2.4-81684.vbox-extpack

6 安装lm_sensors,以便能查看机器的传感器数值.

# yum install lm_sensors
# sensors

Perl函数集(转)

一、进程处理函数

1、进程启动函数

函数名 eval

调用语法 eval(string)

解说 将string看作Perl语句执行。

正确执行后,系统变量$@为空串,如果有错误,$@中为错误信息。

例子 $print = "print (\"hello,world\\n\");";

eval ($print);

结果输出 hello, world

函数名 system

调用语法 system(list)

解说 list中第一个元素为程序名,其余为参数。

system启动一个进程运行程序并等待其结束,程序结束后错误代码左移八位成为返回值。

例子 @proglist = ("echo", "hello,world!");

system(@proglist);

结果输出 hello, world!

函数名 fork

调用语法 procid = fork();

解说 创建程序的两个拷贝--父进程和子进程--同时运行。子进程返回零,父进程返回非零
值,此值为子程序的进程ID号。

例子 $retval = fork();

if ($retval == 0) {

# this is the child process

exit; # this terminates the child process

} else {

# this is the parent process

}

结果输出 无

函数名 pipe

调用语法 pipe (infile, outfile);

解说 与fork合用,给父进程和子进程提供通信的方式。送到outfile文件变量的信息可以
通过infile文件变量读取。步骤:

1、调用pipe

2、用fork将程序分成父进程和子进程

3、一个进程关掉infile,另一个关掉outfile

例子 pipe (INPUT, OUTPUT);

$retval = fork();

if ($retval != 0) {

# this is the parent process

close (INPUT);

print ("Enter a line of input:\n");

$line = <STDIN>;

print OUTPUT ($line);

} else {

# this is the child process

close (OUTPUT);

$line = <INPUT>;

print ($line);

exit (0);

}

结果输出 $

program

Enter a line of input:

Here is a test line

Here is a test line

$

函数名 exec

调用语法 exec (list);

解说 与system类似,区别是启动新进程前结束当前程序。常与fork合用,当fork分成两个
进程后,子进程用exec启动另一个程序。

例子

结果输出

函数名 syscall

调用语法 syscall (list);

解说 调用系统函数,list第一个元素是系统调用名,其余为参数。

如果参数是数字,就转化成C的整型数(type int)。否则传递字符串的指针。详见UNIX的帮助Perl文档。

使用syscall必须包含文件syscall.pl,即:

require ("syscall.ph");

例子

结果输出

2、进程终止函数

函数名 die

调用语法 die (message);

解说 终止程序并向STDERR输出错误信息。message可以为字符串或列表。如果最后一个参
数不包含换行符,则程序文件名和行号也被输出。

例子 die ("Cannot open input file");

结果输出 Cannot open input file at myprog line 6.

函数名 warn

调用语法 warn (message);

解说 与die类似,区别是不终止程序。

例子 warn("Danger! Danger!\n");

结果输出 Danger! Danger!

函数名 exit

调用语法 exit (retcode);

解说 终止程序并指定返回值。

例子 

exit(2);

结果输出 无

函数名 kill

调用语法 kill (signal, proclist);

解说 给一组进程发送信号。

signal是发送的数字信号,9为杀掉进程。

proclist是进程ID列表。详见kill的UNIX帮助。

例子

结果输出

3、进程控制函数

函数名 sleep

调用语法 sleep (time);

解说 将程序暂停一段时间。time是停止的秒数。返回值为实际停止的秒数。

例子 sleep (5);

结果输出 无

函数名 wait

调用语法 procid = wait();

解说 暂停程序执行,等待子进程终止。

不需要参数,返回值为子进程ID,如果没有子进程,返回-1。

例子

结果输出

函数名 waitpid

调用语法 waitpid (procid, waitflag);

解说 暂停程序执行,等待特定的子进程终止。procid为等待的进程ID

例子 $procid = fork();

if ($procid == 0) {

# this is the child process

print ("this line is printed first\n");

exit(0);

} else {

# this is the parent process

waitpid ($procid, 0);

print ("this line is printed last\n");

}

结果输出 $ program

this line is printed first

this line is printed last

$

4、其它控制函数

函数名 caller

调用语法 subinfo = caller();

解说 返回调用者的程序名和行号,用于Perl Debugger。

返回值为三元素的列表:

1、调用处的包名

2、调用者文件名

3、调用处的行号

例子

结果输出

函数名 chroot

调用语法 chroot (dir);

解说 改变程序的根目录,详见chroot帮助。

例子

结果输出

函数名 local

调用语法 local($variable);
解说 在语句块(由大括号包围的语句集合)中定义局域变量,仅在此语句块中起作用,对其
的改变不对块外同名变量造成影响。

千万不要在循环中使用,否则每次循环都定义一个新的局域变量!

例子

结果输出

函数名 times

调用语法 timelist = times

解说 返回该程序及所有子进程消耗的工作时间。

返回值为四个浮点数的列表:

1、程序耗用的用户时间

2、程序耗用的系统时间

3、子进程耗用的用户时间

4、子进程耗用的系统时间

例子

结果输出

二、数学函数

函数名 sin

调用语法 retval = sin (value);

解说 参数为弧度值。

函数名 cos

调用语法 retval = cos (value);

解说 参数为弧度值。

函数名 atan2

调用语法 retval = atan2 (value1, value2);

解说 运算并返回value1除以value2结果的arctan值,单位为弧度,范围在-PI~PI。

应用例:

角度转化成弧度子程序。 sub degrees_to_radians {

local ($degrees) = @_;

local ($radians);11:

$radians = atan2(1,1) * $degrees / 45;

}

函数名 sqrt

调用语法 retval = sqrt (value);

解说 平方根函数。value为非负数。

函数名 exp

调用语法 retval = exp (value);

解说 返回e的value次方。

函数名 log

调用语法 retval = log (value);

解说 以e为底的自然对数。

函数名 abs

调用语法 retval = abs (value);

解说 绝对值函数。(Perl 4中没有)

函数名 rand

调用语法 retval = rand (num);

解说 随机数函数,返回0和整数num之间的一个浮点数。

函数名 srand

调用语法 srand (value);

解说 初始化随机数生成器。保证每次调用rand真正随机。

三、字符串处理函数

函数名 index

调用语法 position = index (string, substring, position);

解说 返回子串substring在字符串string中的位置,如果不存在则返回-1。参数position
是可选项,表示匹配之前跳过的字符数,或者说从该位置开始匹配。

函数名 rindex

调用语法 position = rindex (string, substring, position);

解说 与index类似,区别是从右端匹配。

函数名 length

调用语法 num = length (string);

解说 返回字符串长度,或者说含有字符的数目。

函数名 pos

调用语法 offset = pos(string);

解说 返回最后一次模式匹配的位置。

函数名 substr

调用语法 substr (expr, skipchars, length)

解说 抽取字符串(或表达式生成的字符串)expr中的子串,跳过skipchars个字符,或者
说从位置skipchars开始抽取子串(第一个字符位置为0),子串长度为length,此参数可
忽略,意味着取剩下的全部字符。

当此函数出现在等式左边时,expr必须为变量或数组元素,此时其中部分子串被等式右边
的值替换。

函数名 study

调用语法 study (scalar);

解说 用一种内部格式提高变量的访问速度,同一时刻只对一个变量起作用。

函数名 lc/uc

调用语法 retval = lc(string);

retval = uc(string);

解说 将字符串全部转换成小/大写字母。

函数名 lcfirst/ucfirst

调用语法 retval = lcfirst(string);

retval = ucfirst(string);

解说 将第一个字母转换成小/大写。

函数名 quotameta

调用语法 newstring = quotemeta(oldstring);

解说 将非单词的字母前面加上反斜线(\)。

语句 : $string = quotemeta($string);

等效于:$string =~ s/(\W)/\\$1/g;

常用于模式匹配操作中,确保字符串中没有字符被看作匹配操作符。

函数名 join

调用语法 join (joinstr, list);

解说 把字符串列表(数组)组合成一个长的字符串,在每两个列表元素间插入串joinstr。

函数名 sprintf

调用语法 sprintf (string, fields);

解说 与printf类似,区别是结果不输出到文件,而作为返回值赋给变量。

例子 $num = 26;

$outstr = sprintf("%d = %x hexadecimal or %o octal\n",$num, $num, $num);

print ($outstr);

结果输出 26 = 1a hexadecimal or 32 octal

四、标量转换函数

函数名 chop

调用语法 $lastchar = chop (var);

解说 var可为变量或数组,当var为变量时,最后一个字符被删除并赋给$lastchar,当va
r为数组/列表时,所有元素的最后一个字符被删除,最后一个元素的最后一个字母赋给$l
astchar。

函数名 chomp

调用语法 result = chomp(var);

解说 检查字符串或字符串列表中元素的最后一个字符是否为由系统变量$/定义的行分隔符
,如果是就删除。返回值为实际删除的字符个数。

函数名 crypt

调用语法 result = crypt (original, salt);

解说 用DES算法加密字符串,original是将要加密的字符串,salt是两个字符的字符串,
定义如何改变DES算法,以使更难解码。返回值为加密后的串。

函数名 hex

调用语法 decnum = hex (hexnum);

解说 将十六进制数(字符串形式)转化为十进制数。

函数名 int

调用语法 intnum = int (floatnum);

解说 将浮点数舍去小数部分转化为整型数。

函数名 oct

调用语法 decnum = oct (octnum);

解说 将八进制数(字符串形式)或十六进制数("0x.."形式)转化为十进制数。

函数名 ord

调用语法 asciival = ord (char);

解说 返回单个字符的ASCII值,与PASCAL中同名函数类似。

函数名 chr

调用语法 $char = chr (asciival);

解说 返回ASCII值的相应字符,与PASCAL中同名函数类似。

函数名 pack

调用语法 formatstr = pack(packformat, list);

解说 把一个列表或数组以在实际机器存贮格式或C等编程语言使用的格式转化(包装)到
一个简单变量中。参数packformat包含一个或多个格式字符,列表中每个元素对应一个,
各格式字符间可用空格或tab隔开,因为pack忽略空格。

除了格式a、A和@外,重复使用一种格式多次可在其后加个整数,如:

$twoints = pack ("i2", 103, 241);

把同一格式应用于所有的元素则加个*号,如:

$manyints = pack ("i*", 14, 26, 11, 83);

对于a和A而言,其后的整数表示要创建的字符串长度,重复方法如下:

$strings = pack ("a6" x 2, "test1", "test2");

格式@的情况比较特殊,其后必须加个整数,该数表示字符串必须的长度,如果长度不够
,则用空字符(null)补足,如:

$output = pack ("a @6 a", "test", "test2");

pack函数最常见的用途是创建可与C程序交互的数据,例如C语言中字符串均以空字符(n
ull)结尾,创建这样的数据可以这样做:

$Cstring = pack ("ax", $mystring);

下表是一些格式字符与C中数据类型的等价关系:

字符 等价C数据类型

C char

d double

f float

i int

I unsigned int (or unsigned)

l long

L unsigned long

s short

S unsigned short

完整的格式字符见下表。

格式字符 描述

a 用空字符(null)补足的字符串

A 用空格补足的字符串

b 位串,低位在前

B 位串,高位在前

c 带符号字符(通常-128~127)

C 无符号字符(通常8位)

d 双精度浮点数

f 单精度浮点数

h 十六进制数串,低位在前

H 十六进制数串,高位在前

i 带符号整数

I 无符号整数

l 带符号长整数

L 无符号长整数

n 网络序短整数

N 网络序长整数

p 字符串指针

s 带符号短整数

S 无符号短整数

u 转化成uuencode格式

v VAX序短整数

V VAX序长整数

x 一个空字节

X 回退一个字节

@ 以空字节(null)填充

函数名 unpack

调用语法 @list = unpack (packformat, formatstr);

解说 unpack与pack功能相反,将以机器格式存贮的值转化成Perl中值的列表。其格式字符
与pack基本相同(即上表),不同的有:A格式将机器格式字符串转化为Perl字符串并去掉
尾部所有空格或空字符;x为跳过一个字节;@为跳过一些字节到指定的位置,如@4为跳过
4个字节。下面看一个@和X合同的例子: $longrightint = unpack ("@* X4 L", $pac
kstring);

此语句将最后四个字节看作无符号长整数进行转化。下面看一个对uuencode文件解码的
例子:#!/usr/local/bin/perl

open (CODEDFILE, "/u/janedoe/codefile") ||
die ("Can't open input file");

open (OUTFILE, ">outfile") ||
die ("Can't open output file");

while ($line = <CODEDFILE>) {
  $decoded = unpack("u", $line);
  print OUTFILE ($decoded);
  }

close (OUTFILE);
close (CODEDFILE);

当将pack和unpack用于uuencode时,要记住,虽然它们与UNIX中的uuencode、uudecode
工具算法相同,但并不提供首行和末行,如果想用uudecode对由pack的输出创建的文件进
行解码,必须也把首行和末行输出(详见UNIX中uuencode帮助)。

函数名 vec

调用语法 retval = vec (vector, index, bits);

解说 顾名思义,vec即矢量(vector)函数,它把简单变量vector的值看作多块(维)数据,
每块含一定数目的位,合起来即一个矢量数据。每次的调用访问其中一块数据,可以读取
,也可以写入。参数index就象数组下标一样,提出访问哪一块,0为第一块,依次类推,
要注意的是访问次序是从右到左的,即第一块在最右边。参数bits指定每块中的位数,可
以为1,2,4,8,16或32。

例子 #!/usr/local/bin/perl

$vector = pack ("B*", "11010011");
$val1 = vec ($vector, 0, 4);
$val2 = vec ($vector, 1, 4);

print ("high-to-low order values: $val1 and $val2\n");

$vector = pack ("b*", "11010011");
$val1 = vec ($vector, 0, 4);
$val2 = vec ($vector, 1, 4);

print ("low-to-high order values: $val1 and $val2\n");

结果 high-to-low order values: 3 and 13

low-to-high order values: 11 and 12

函数名 defined

调用语法 retval = defined (expr);

解说 判断一个变量、数组或数组的一个元素是否已经被赋值。expr为变量名、数组名或一
个数组元素。

如果已定义,返回真,否则返回假。

函数名 undef

调用语法 retval = undef (expr);

解说 取消变量、数组或数组元素甚至子程序的定义,回收其空间。返回值始终为未定义值
,此值与空串等效。

五、数组和列表函数

函数名 grep

调用语法 @foundlist = grep (pattern, @searchlist);

解说 与同名的UNIX查找工具类似,grep函数在列表中抽取与指定模式匹配的元素,参数p
attern为欲查找的模式,返回值是匹配元素的列表。

例子 @list = ("This", "is", "a", "test");

@foundlist = grep(/^[tT]/, @list);

结果 @foundlist = ("This", "test");

函数名 splice

调用语法 @retval = splice (@array, slipelements, length, @newlist);

解说 拼接函数可以向列表(数组)中间插入元素、删除子列表或替换子列表。参数ski
pelements是拼接前跳过的元素数目,length是被替换的元素数,newlist是将要拼接进来
的列表。当newlist的长度大于length时,后面的元素自动后移,反之则向前缩进。因此,
当length=0时,就相当于向列表中插入元素,而形如语句

splice (@array, -1, 0, "Hello");

则向数组末尾添加元素。而当newlist为空时就相当于删除子列表,这时,如果length为空
,就从第skipelements个元素后全部删除,而删除最后一个元素则为:splice (@array,
-1);这种情况下,返回值为被删去的元素列表。

函数名 shift

调用语法 element = shift (@arrayvar);

解说 删去数组第一个元素,剩下元素前移,返回被删去的元素。不加参数时,缺省地对@
ARGV进行操作。

函数名 unshift

调用语法 count = unshift (@arrayver, elements);

解说 作用与shift相反,在数组arrayvar开头增加一个或多个元素,返回值为结果(列表)
的长度。等价于splice (@array, 0, 0, elements);

函数名 push

调用语法 push (@arrayvar, elements);

解说 在数组末尾增加一个或多个元素。等价于slice (@array, @array, 0, elements);

函数名 pop

调用语法 element = pop (@arrayvar);

解说 与push作用相反,删去列表最后一个元素,并将其作为返回值,当列表已空,则返回
“未定义值”(即空串)。

函数名 split

调用语法 @list = split (pattern, string, maxlength);

解说 将字符串分割成一组元素的列表。每匹配一次pattern,就开始一个新元素,但patt
ern本身不包含在元素中。maxlength是可选项,当指定它时,达到该长度就不再分割。

函数名 sort

调用语法 @sorted = sort (@list);

解说 按字母次序给列表排序。

函数名 reverse

调用语法 @reversed = reverse (@list);

解说 按字母反序给列表排序。

函数名 map

调用语法 @resultlist = map (expr, @list);

解说 此函数在Perl5中定义,可以把列表中的各个元素作为表达式expr的操作数进行运算
,其本身不改变,结果作为返回值。在表达式expr中,系统变量$_代表各个元素。

例子 1、@list = (100, 200, 300);

@results = map ($_+1, @list);

2、@results = map (&mysub($_), @list);

结果 1、(101, 201, 301)

2、无

函数名 wantarray

调用语法 result = wantarray();

解说 Perl中,一些内置函数的行为根据其处理简单变量还是数组有所不同,如chop。自定
义的子程序也可以定义这样两种行为。当子程序被期望返回列表时,此函数返回值为非零
值(真),否则为零值(假)。

例子 #!/usr/local/bin/perl

@array = &mysub();
$scalar = &mysub();

sub mysub {
  if (wantarray()) {
    print ("true\n");
  } else {
    print ("false\n");
  }
}

结果 $program

true

false

$

六、关联数组函数

函数名 keys

调用语法 @list = keys (%assoc_array);

解说 返回关联数组无序的下标列表。

函数名 values

调用语法 @list = values (%assoc_array);

解说 返回关联数组无序的值列表。

函数名 each

调用语法 @pair = each (%assoc_array);

解说 返回两个元素的列表--键值对(即下标和相应的值),同样无序。当关联数组已空,
则返回空列表。

函数名 delete

调用语法 element = delete (assoc_array_item);

解说 删除关联数组中的元素,并将其值作为返回值。

例子 %array = ("foo", 26, "bar", 17");

$retval = delete ($array{"foo"});

结果 $retval = 26;

函数名 exists

调用语法 result = exists (element);

解说 在Perl5中定义,判断关联数组中是否存在某元素,若存在,返回非零值(真),否则
返回零值(假)。

例子 $result = exists ($myarray{$mykey});

wordpress的安装

今天发现wordpress对于写blog是个非常优秀的软件,于是将之安装到服务器上。安装过程如下:

1. 下载wordpress

$ wget -c http://cn.wordpress.org/wordpress-3.4.1-zh_CN.zip

2. 将wordpress-3.4.1-zh_CN.zip上传到服务器的 /var/www/html/ 文件夹中并解压

# cd  /var/www/html/
# unzip wordpress-3.4.1-zh_CN.zip
# mv wordpress wordpress_chenlianfu

3. 安装 php-devel 和 php-mysql 等插件

# yum install -y php php-devel php-mysql

4. 创建 wordpress 数据库

$ mysql -u root -p
mysql> create database wordpress

5. 在/etc/httpd/conf/httpd.conf中加入下一行,并重启httpd服务

Alias /chenlianfu_blog "/var/www/html/wordpress_chenlianfu"
# /etc/init.d/httpd  restart

6. 安装并配置wordpress

在浏览器输入http://www.hzaumycology.com/chenlianfu_blog/wp-admin/install.php,进入安装界面,按提示进行,将生成的config文件内容写入到配置文件中。

vim /var/www/html/wordpress_chenlianfu/wp-config.php

 

KVM安装虚拟机

自CentOS 6开始,虚拟化平台已经从xen转向KVM,所以在CentOS 6安装KVM还是非常的简单的。

CentOS 6安装配置KVM

1、安装KVM

#yum groupinstall Virtualization 'Virtualization Client'

2、安装api支持

#yum install libvirt
#service libvirtd start

3、验证是否已经载入KVM模块

$ lsmod | grep kvm

4、使用virt-manager安装guest

virt-manager是一个api gui工具,可以很方便的管理虚拟机。下面简单介绍使用virt-manager安装虚拟机系统。

1)打开virt-manager,Add-connection,hypervisor选择QEMU/KVM,点击connect。
2)在连接localhost(QEMU)右键-NEW,输入guest名称,还有选择安装方式,我这里选择
iso文件安装,点击forword。
3)选择iso文件路径,点击forword。
4)定义分配内存及cpu个数。
5)定义磁盘映像大小。
6)下一步就是常规的系统安装了。

5、使用virt-install安装guest

当你的CentOS没有桌面环境时,可以使用virt-install命令安装,如:

1、输入虚拟机名称
2、分配多少内存
3、定义虚拟机磁盘映像的位置
4、此步可以直接输入iso的位置或是url
5、进行系统常规安

 

Configuring_@INC_of_perl

Perl uses by default the array @INC as include path when searching for modules to load. This path is compiled into the perl binary when building it from source and can be printed by running perl -V, which will show something like:

$ perl -V
...
Compiled at Jun 22 2012 13:27:28
@INC:
    /usr/local/lib64/perl5
    /usr/local/share/perl5
    /usr/lib64/perl5/vendor_perl
    /usr/share/perl5/vendor_perl
    /usr/lib64/perl5
    /usr/share/perl5

1. Using the module lib

The standard module lib can be used to specify an explicit path to include. It must be stated at the top of the script:

#!/usr/bin/perl
#
use lib "/opt/special/plib";
use strict;
use warnings;
..

2. Using the switch ­I at the command line

The switch ­I can be used to specify additional library locations when invoking the interpreter.

perl -I /opt/special/plib script.pl

3. Using the switch ­I in the first line of the script

The same ­I switch can be added to the interpreter specification.

#!/usr/bin/perl -I /opt/special/plib
#
use strict;
use warnings;
..

4. Manipulating @INC directly

The array @INC can be manipulated directly using array operations

#!/usr/bin/perl
#
BEGIN {
unshift(@INC, "/opt/special/plib");
}
use strict;
use warnings;

This is the same as using the module lib, which in fact does something like this.

5. Using the environment variable PERL5LIB

The environment variable PERL5LIB can be used to specify additional include directories when running a perl script.

> export PERL5LIB=/opt/special/plib  #Adding this sequnce to 
/etc/profile, then the @INC would be changed persistently.
> /path/to/script.pl

6. Changing @INC at compile time

CentOs配置OpenSSH无密码登陆

1 配置服务器/etc/ssh/sshd_config文件。

去掉以下内容的注释符“#”或修改成如下方式。

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys
PermitRootLogin no    #不允许root用户登陆ssh,目的是为了系统安全。
Protocol 2    #选择第二种协议,目的是为了系统的安全。

2 在客户端生成一对公私钥,将公钥复制到服务器的user/.ssh/authorized_keys文件中。

$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ scp ~/.ssh/id_dsa.pub user@Sever's_IP:/home/user/.ssh/
$ ssh user@Sever's_IP
$ cat /home/user/.ssh/id_dsa.pub >> /home/user/.ssh/authorized_keys

3 修改远程服务器/home/user/.ssh/authorized_keys的权限为600,即可通过OpenSSH远程无密码登陆服务器。

$ chmod 600 ~/.ssh/authorized_keys

4.添加id_rsa到ssh-agent。如果连接服务器返回“Agent admitted failure to sign using the key”。

$ ssh-add
再次连线就正常了。

5. 设置 selinux

若没有关闭 selinux,则依然不能无密码登录,关闭即可。

$ sudo setenforce 0

此外,若用户的家目录权限过大,比如为777,则也会导致即使正确进行以上设置后,任然需要输入密码登录。

CentOS搭建GTK

1. GTK+的安装

如果系统中已经安装有 GTK+,要安装新版本的 GTK+ 时,最好使用新的安装目录/opt/gtk,GTK+ 及其依赖库都将安装在这个目录下。

原因为:在 Linux 系统上使用的很多软件都是在 GTK+ 库的支持下运行的(比如 GNOME桌面)。如果相关的 GTK+ 库发生损坏,或者库的版本发生了变化,轻微的可造成某些程序不能正常运行,严重的可能会给系统运行带来障碍(比如进入不了桌面环境,等等。)因此,新版本的 GTK+ 的安装应该避免对原来的 GTK+ 造成影响,以保证系统的正常运行。

1.1 配置重要的环境变量

$ export PKG_CONFIG_PATH=/opt/gtk/lib/pkgconfig:$PKG_CONFIG_PATH
$ export LD_LIBRARY_PATH=/opt/gtk/lib64:/opt/gtk/lib:$LD_LIBRARY_PATH

一些程序的运行需要依赖于此环境变量,可以将其加入.bashrc配置文件中。

1.2 按顺序下载源码包并安装

最好各个选择稳定版本,参考:http://www.gtk.org/download/linux.php

根据依赖关系的要求,库的安装大致按照这样的先后顺序进行:libffi(3.0.13)GLib(2.34.3)Atk(2.6.0)、[optional: poppler]、[optional:libspectre,需要libgs(ghostscript)]、cairo(1.10.2)Pango(1.32.6)TIFF librarygdk-pixbuf(2.26.5)Gtk+(3.6.0)

其中TIFF library可以使用‘yum install libtiff*’进行安装。

安装Pango的时候,提示错误:
configure: error: *** Could not enable any backends.
*** Must have at least one backend to build Pango.
此时,需要安装:
HarfBuzz(old-master),需要安装老版本的。
fontconfig(2.10.93),需要安装最新版的。
FreeType(2.4.9)

在安装gtk+-3.6 configure的时候,提示错误:
configure: error: Package requirements (atk atk-bridge-2.0) were not met
则需要安装 at-spi2-core-2.6.3at-spi2-atk-2.6.2

花费了近一晚上,终于搞定了,真是不简单啊…
其实,可以按如下顺序安装:

libxml2-2.9.1   ftp://xmlsoft.org/libxml2/libxml2-2.9.1.tar.gz
DocBook-utils-0.6.14    ftp://sources.redhat.com/pub/docbook-tools/new-trials/SOURCES/docbook-utils-0.6.14.tar.gz
libxslt-1.1.28  ftp://xmlsoft.org/libxslt/libxslt-1.1.28.tar.gz
SGMLSpm-1.1     http://search.cpan.org/CPAN/authors/id/R/RA/RAAB/SGMLSpm-1.1.tar.gz
libffi-3.0.13   ftp://sourceware.org/pub/libffi/libffi-3.0.13.tar.gz
xcb-proto-1.8   http://xcb.freedesktop.org/dist/xcb-proto-1.8.tar.bz2
FreeType-2.4.12 ftp://mirror.ovh.net/gentoo-distfiles/distfiles/freetype-2.4.12.tar.bz2
expat-2.1.0     http://downloads.sourceforge.net/expat/expat-2.1.0.tar.gz
libXau-1.0.8    ftp://ftp.x.org/pub/individual/lib/libXau-1.0.8.tar.bz2
libXdmcp-1.1.1  ftp://ftp.x.org/pub/individual/lib/libXdmcp-1.1.1.tar.bz2
Fontconfig-2.10.2       http://fontconfig.org/release/fontconfig-2.10.2.tar.bz2
GLib-2.34.3     ftp://ftp.gnome.org/pub/gnome/sources/glib/2.34/glib-2.34.3.tar.xz
Pixman-0.30.0   http://cairographics.org/releases/pixman-0.30.0.tar.gz
libxcb-1.9.1    http://xcb.freedesktop.org/dist/libxcb-1.9.1.tar.bz2
libpng-1.6.2    http://downloads.sourceforge.net/libpng/libpng-1.6.2.tar.xz
Cairo-1.12.14   http://cairographics.org/releases/cairo-1.12.14.tar.xz
Graphite2       http://projects.palaso.org/attachments/download/384/graphite2-1.2.3.tgz
ASM-2.10.07     http://www.nasm.us/pub/nasm/releasebuilds/2.10.07/nasm-2.10.07.tar.xz
D-Bus-1.6.10    http://dbus.freedesktop.org/releases/dbus/dbus-1.6.10.tar.gz
ICU-51.2        http://download.icu-project.org/files/icu4c/51.2/icu4c-51_2-src.tgz
Intltool-0.50.2 http://launchpad.net/intltool/trunk/0.50.2/+download/intltool-0.50.2.tar.gz
gobject-introspection-1.34.2    ftp://ftp.gnome.org/pub/gnome/sources/gobject-introspection/1.34/gobject-introspection-1.34.2.tar.xz
GTK-Doc-1.18    ftp://ftp.gnome.org/pub/gnome/sources/gtk-doc/1.18/gtk-doc-1.18.tar.xz
libjpeg-turbo-1.3.0     http://downloads.sourceforge.net/libjpeg-turbo/libjpeg-turbo-1.3.0.tar.gz
LibTIFF-4.0.3   ftp://ftp.remotesensing.org/libtiff/tiff-4.0.3.tar.gz
at-spi2-core-2.6.3      ftp://ftp.gnome.org/pub/gnome/sources/at-spi2-core/2.6/at-spi2-core-2.6.3.tar.xz
Harfbuzz-0.9.18 http://www.freedesktop.org/software/harfbuzz/release/harfbuzz-0.9.18.tar.bz2
ATK-2.6.0       ftp://ftp.gnome.org/pub/gnome/sources/atk/2.6/atk-2.6.0.tar.xz
at-spi2-atk-2.6.2       ftp://ftp.gnome.org/pub/gnome/sources/at-spi2-atk/2.6/at-spi2-atk-2.6.2.tar.xz
gdk-pixbuf-2.26.5       ftp://ftp.gnome.org/pub/gnome/sources/gdk-pixbuf/2.26/gdk-pixbuf-2.26.5.tar.xz
Pango-1.32.5    ftp://ftp.gnome.org/pub/gnome/sources/pango/1.32/pango-1.32.5.tar.xz
GTK+-3.6.4              ftp://ftp.gnome.org/pub/gnome/sources/gtk+/3.6/gtk+-3.6.4.tar.xz

以上安装中需要注意的是:1. 在安装DocBook-utils-0.6.14的时候,configure后需要接参数–disable-docs,否则fontconfig的安装会报错。 2. 若提示错误:glib-compile-schemas: command not found,则表示在root用户中没有该命令,于是make install不成功,需要使root用户的$PATH中含有/opt/gtk/bin目录。

学习 Linux LVM

1,首先,了解相关的术语,参考下表:

*************************** 1. row ***************************
英文简称: LVM
中文名称: 逻辑卷管理
英文全称: Logic Volume Management
    解释: LVM能将不同的物理卷(即类型为8E,无文件系统的LVM分区)整合到一起,合并
成一个大分区(无论这些小的LVM分区是否在一个磁盘上),这个大分区称为卷组。然后在这个
大分区上创建逻辑卷。这样做的好处是可以随时并入新的物理卷,增加大分区,然后随时扩增
LVM下的逻辑卷大小而不需要重启系统。
*************************** 2. row ***************************
英文简称: PV
中文名称: 物理卷
英文全称: Physical Volume
    解释: 硬盘上的分区
*************************** 3. row ***************************
英文简称: LG
中文名称: 逻辑卷
英文全称: Logic Volume
    解释: 将一个大区再进行分区所得的分区,为逻辑卷。在LVM中将很多物理卷(PV)合并
成卷组(VG),在对这个大的卷组进行分区得到逻辑卷(LV)。逻辑卷才可以被格式化,挂载进
行数据读写。
*************************** 4. row ***************************
英文简称: VG
中文名称: 卷组
英文全称: Volume Group
    解释: 卷组包含单个或多个物理卷

2, 接着掌握相关命令,参考下表:

*************************** 1. row ***************************
      command: cfdisk
     parmeter: 磁盘分区工具,图形化界面,注意Type选项,选择8E即为LVM分区
usage_example: 图形化界面,看之即懂
*************************** 2. row ***************************
      command: pvcreate
     parmeter: 将现有的分区初始化成用于LVM的物理卷
usage_example: pvcreate /dev/sda1
*************************** 3. row ***************************
      command: vgcreate
     parmeter: 使用物理卷创建出一个卷组,-s参数能设定增量单位
usage_example: vgcreate -s 32M vg_hzaumycology /dev/sda2,创建一个卷
组vg_hzaumycology,并将/dev/sda2加入到卷组。
*************************** 4. row ***************************
      command: vgextend
     parmeter: 将一个物理卷加入到卷组中
usage_example: vgextend vg_hzaumycology /dev/sdb1,该命令将物理卷/dev
/sdb1加入到卷组vg_hzaumycology中。
*************************** 5. row ***************************
      command: lvcreate
     parmeter: 在卷组上创建逻辑卷(LV), -L 指定创建LV大小, -n LV的名字
usage_example: lvcreate -L 300G -n vg_hzaumycology-lv_home vg_hza
umycology,在卷组vg_hzaumycology上创建一个大小为500G的逻辑卷,卷名为vg_hz
aumycology-lv_home。
*************************** 6. row ***************************
      command: vgdisplay
     parmeter: 查看现有的卷组情况
usage_example: vgdisplay卷组状态
*************************** 7. row ***************************
      command: mkfs.ext4
     parmeter: 格式化工具,按默认参数格式化分区即可
usage_example: mkfs.ext4 /dev/vg_hzaumycology/vg_hzaumycology-lv_
home,将卷组中的逻辑卷格式化成ext4文件系统,
*************************** 8. row ***************************
      command: lvextend
     parmeter: 增加逻辑卷的空间 -L后接+1G,表示增加1G空间, -L后接1G,表示这
个LV的空间是多少
usage_example: lvextend -L +500G /dev/vg_hzaumycology/vg_hzaumyco
logy-lv_home,将该逻辑卷扩增500G空间。
*************************** 9. row ***************************
      command: df
     parmeter: 查看磁盘使用状况
usage_example: df -m,查看的磁盘大小以M
*************************** 10. row ***************************
      command: resize2fs
     parmeter: 扩充文件系统
usage_example: reisize2fs /dev/vg_hzaumycology/vg_hzaumycology-lv
_home,扩充该逻辑卷,和lvextend命令配合来增加磁盘空间,对应的文件系统为ext4。
*************************** 11. row ***************************
      command: resize2fs_
     parmeter: 扩充文件系统
usage_example: reisize_reiserfs /dev/vg_hzaumycology/vg_hzaumycol
ogy-lv_home,扩充该逻辑卷,和lvextend命令配合来增加磁盘空间,不过对应的文件系
统为ReiserFS。

3, 然后,按步骤了解LVM机制。以在CentOS6.2上添置一个3TB硬盘为例。

<1> 安装需要的软件和程序

#yum install cfdisk 
安装cfdisk。CentOS6.2默认没有cfdisk这个命令,先安装该命令。

<2> 磁盘分区,创建物理卷

使用cfdisk命令来创建type为8E的LVM物理卷(PV)。
使用cfdisk命令将3TB硬盘分为/dev/sdb1(type为8E)和/dev/sdb2(Type为83)
两个分区,大小都为1500G。
partprobe 强制让核心重新捕捉一次 partition table.

<3> 创建卷组(VG)

使用vgcreate创建一个卷组。
CentOS6.2系统在装机是使用的默认设置,将/dev/sda1设为主分区,不属于LVM,
挂载到CentOS6.2系统/boot目录下,用于系统的启动;将/dev/sda2分区加入卷
组。
#vgcreate vg_hzaumycology /dev/sda2;

<4> 创建逻辑卷(LV)

使用lvcreate创建逻辑卷。
CentOS6.2默认创建了3个逻辑卷(LV)。
#lvcreate -L 50G -n vg_hzaumycology-lv_root vg_hzaumycology; 
#lvcreate -L 300G -n vg_hzaumycology-lv_home vg_hzaumycology; 
#lvcreate -L 32G -n vg_hzaumycology-lv_swap vg_hzaumycology; 
逻辑卷在CentOS6.2系统中对应的位置为"/dev/卷组名/逻辑卷名"。

 <5> 格式化逻辑卷

使用mkfs.ext4在逻辑卷上创建文件系统。
#mkfs.ext4 /dev/vg_hzaumycology/vg_hzaumycology-lv_root;
#mkfs.ext4 /dev/vg_hzaumycology/vg_hzaumycology-lv_home;

<6> 将另外一个物理卷加入到卷组中

使用vgdisplay命令查看VG,使用vgextend命令将物理卷加入到卷组从而扩增卷组
大小。
#vgdisplay;查看到系统默认创建的卷组vg_hzaumycology  
#lvdisplay;查看到系统有3个逻辑卷vg_hzaumycology-lv_root, lvcreate 
vg_hzaumycology-lv_home和vg_hzaumycology-lv_swap分别对应这系统的
/root,/home目录和SWAP分区。#vgextend vg_hzaumycology /dev/sdb1; 
将第二块硬盘的第一个分区1500G的空间加入到卷组vg_hzaumycology中。

<7> 扩增逻辑卷的容量

有了物理卷的加入,利于逻辑卷的扩增,使用命令lvextend和resize2fs来扩增逻
辑卷。
#lvextend -L +500G /dev/vg_hzaumycology/vg_hzaumycology-lv_
home; 给逻辑卷vg_hzaumycology-lv_home增加500G空间。
#resize2fs /dev/vg_hzaumycology/vg_hzaumycology-lv_home; 重新
给逻辑卷定大小,这一步需要许多时间,因为500G空间较大。完毕使用df -m命令查
看磁盘分区状况,才能看到磁盘容量变大。

<8> 为第二块磁盘的第二个分区/dev/sdb2创建文件系统并在开机自动挂载到指定位置

#mkfs.ext4 /dev/sdb2; 将/dev/sdb2格式化,创建文件系统ext4。 
#mkdir /bioinformatic; chown chenlianfu:chenlianfu /bioinform
atics; 
#chmod 750 /bioinformatics; 创建文件夹bioinformatics并修改权限用于
挂载/dev/sdb2。添加“/dev/sdb2 /bioinformatics ext4 uid=500,gid=
501 1 2”到/etc/fstab中。

将3TB磁盘分为2个1.5TB分区,其中一个分区整合到LVM中,另外一个分区不整合到LVM
而单独为一个区。以后重装系统到此3TB磁盘的时候,好将文件备份到分区2中,以避免
重要文件的丢失。

 

 

Samba服务器的搭建

Samba服务器的搭建。

由于CentOS系统里面自带Samba服务器功能,就不阐述相关软件的安装了。

1 Samba服务器的搭建主要是修改/etc/samba/smb.conf这个文件,其内容如下:

################################################################################################

#============================ Global Settings ================================
[global]
workgroup = Zhenjunlou    #工作的计算机组名称,可随意填写。
server string = Samba Server Version %v    #对服务器的说明,随意填写。
netbios name = ZJLSERVER    #服务器的计算机名,可随意填写,访问服务器时候,可以用计算机名代替其ip地址。
interfaces = 122.205.95.76    #服务器的联网ip。
hosts allow = 127. 122.205.     #允许访问Samba服务器的ip地址范围。
log file = /var/log/samba/log.%m    #用户登陆的日志文件存放地。
max log size = 50    #用户登陆的日志文件最大值。
security = user    #安全的模式,需要使用用户名登陆。
encrypt passwords = yes    #需要输入密码来登陆。
passdb backend = smbpasswd    #用smbpaswd存放用户名和密码。
smb passwd file = /etc/samba/smbpasswd    #密码存放的文件为/etc/samba/smbpasswd。
load printers = no    #不能登陆打印机。
config file = /etc/samba/smb.conf.%U    #单独的用户配置文件,将此smb.conf文件复制一份,保存为smb.conf.userx,其中userx为一用户名,然后修改smb.conf.userx文件配置,从而使用户userx具有与众不同的配置。
config file = /etc/samba/smb.conf.%G    #单独的用户群组配置文件,将此smb.conf文件复制一份,保存为smb.conf.groupx,其中groupx为一群组名,然后修改smb.conf.userx文件配置,从而使群组userx具有与众不同的配置。

#============================ Share Definitions ==============================

[homes]    #【】中表示共享的文件名称,但当其下有%S变量时候,则【】中的值与%S相同。
comment = Home Directories    #对此共享文件的描述,可随意填写。
path = /home/samba/privacy/%S    #共享文件夹在服务器中的具体路径。
browseable = no    #其它人是否可见,no即为其它用户不可见。
writable = yes    #对共享文件夹的权限,可读可写。
valid users = %S    #有效的用户,%S表示任意登陆的一用户。
create mode = 0664    #用户写入的文件默认配置。
directory mode = 0775    #用户写入的文件夹默认配置。

[Blog]    #【】中表示共享的文件名称,但当其下有%S变量时候,则【】中的值与%S相同。
comment = A public platform for sharing your thoughts and skills    #对此共享文件的描述,可随意填写。  
path = /home/samba/Blog    #共享文件夹在服务器中的具体路径。
browseable = yes    #其它人是否可见,yes即为所有用户都可见。
writable = yes    #对共享文件夹的权限,可读可写。
valid users = @students,@teachers    #有效的用户,为students和teachers这两个群组。

[Archive]
comment = Archive
path = /home/samba/Archive
browseable = yes
write list = chenlianfu,bianyinbing
create mode = 0664
directory mode = 0775
valid users = @students,@teachers

[zhenjunlou_communication]
comment = For communicating among all aculty members
path = /home/samba/zhenjunlou_communication
browseable = yes
writable = yes
valid users = @students,@teachers

[Forstudents]
comment = Only students can access
path = /home/samba/Forstudents_Only
browseable = yes
writable = yes
valid users = @students

[Forteachers]
comment = Only teachers can access
path = /home/samba/Forteachers_Only
browseable = yes
writable = yes
valid users = @teachers

##############################################################################################

2 在防火墙里开放137,138,138和445四个端口,且这4个端口分别对应tcp和ucp端口一种。

#vim /etc/sysconfig/iptables ,添加如下几行。
-A INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT

3 运行Samba服务。

#nmbd -D   先运行
#smbd -D   后运行

重启Samba服务的话,按以下命令重启samba服务。

##/etc/init.d/smb stop
##/etc/init.d/nmb stop
##nmbd -D
##smbd -D

4 开机运行Samba服务。

#chkconfig smb on
#chkconfig nmb on

或

#setup

5 linux使用Samba服务器。

#sudo smbclient -L //122.205.95.76    #查看服务器共享的文件夹。

#sudo smbclient -U username //122.205.95.76/Archive    #连接上服务器共
享的文件夹Archive,和连接到ftp基本一致。

#sudo mount -t cifs //122.205.95.76/Archive /mnt -o username=chenlianfu,password=***    
其中-t cifs可以不用写,在hrel6中是默认的,passwd=***也可不用写。挂载共享的文件夹。

永久挂载:

# vim /etc/fstab      #加入一行
//122.205.95.76/Archive	/mnt	cifs	credentials=/root/credentials
# vim /root/credentials  
该文件第一排写"user=chenlianfu",第二排写"pass=***"。这样有凭证文件,相对安全。

或

# vim /etc/fstab     #加入一行
#//122.205.95.76/Archive /mnt cifs username=chenlianfu,passwd=***,uid=500 0 0
这样不用凭证文件,直接写上用户名和密码。

使用smbclient使用的协议为smb协议,端口为139;而使用mount后的协议为cifs协议,端口为445,相对速度快。一般使用445协议。

6 windows访问Samba服务器,打开我的电脑——在地址栏输入“\\122.205.95.76”——回车,输入用户名和密码登陆即可。

 

mysql新建用户

新建用户

mysql> CREATE USER user identified by '123456'	#新建用户名为user,密码123456。
mysql> grant all on mysql.user(#代表权限,可以访问的数据库的表,若是“*.*”,则权限极大) to 'chenlianfu'@'localhost'(#代表访问的用户和访问者的IP地址,若是'chenlianfu'@'%',表示可以用chenlianfu这个用户从任意IP地址访问数据库) identified by '123456'(这是用户名对应的密码);	#新建用户名为chenlianfu,密码123456。
mysql> flush privileges;	#刷新系统权限表。
mysql> drop user user@localhost;	#删除user用户。
mysql> set password for user=password('123456');	#修改user用户的密码为123456。
mysql> grant all privileges on db.* to user@localhost identified by '123456';	#修改用户权限。
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM user@'%';	#修改用户权限;
mysql> revoke all privileges on db.*  from  user@'192.168.1.1';	#修改用户权限;

如果mysqld服务启动不了,通过运行mysql_install_db命令来重新初始化数据库来解决。