Linux文件查看/编辑方法介绍

cat 命令介绍

cat 命令的原含义为连接(concatenate), 用于连接多个文件内容并输出到标准输出流中(标准输出流默认为屏幕)。实际运用过程中,我们常使用它来显示文件内容。如果您熟悉MS-DOS 下的type 命令,相信不难掌握cat 命令。该命令的常用示例如下:

cat file1.txt 显示 file1.txt 文件的内容;

cat file1.txt file2.txt 显示 file1.txt 和file2.txt 文件的内容;

cat -n file1.txt 显示 file1.txt 文件的内容同时显示行号;

vi 命令介绍

vi 是”Visual Interface” 的简称,它在Linux 上的地位就仿佛Edit 程序在DOS上一样。它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制,这是其他编辑程序所没有的。

vi 不是一个排版程序,它不象Word 或WPS 那样可以对字体、格式、段落等其他属性进行编排,它只是一个文本编辑程序。

vi 没有菜单,只有命令,且命令繁多。限于篇幅,本文只介绍常用的命令。

Vi 有三种基本工作模式:命令行模式,文本输入模式和末行模式。

命令行模式:

任何时候,不管用户处于何种模式,只要按一下“ESC” 键,即可使vi 进入命令行模式;当在shell 环境下输入vi 命令启动vi 编辑器时,也是处于该模式下。

在该模式下 ,用户可以输入各种合法的vi 命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当作编辑命令来解释,若输入的字符是合法的vi 命令,则vi 在接受用户命令之后完成相应的动作(但需注意的是,所输入的命令并不在屏幕上显示出来)。若输入的字符不是vi 的合法命令,vi 会响铃报警。

文本输入模式:

在命令模式下输入插入命令 i、 附加命令a 、打开命令 o、 修改命令c 、取代命令r 或替换命令s 都可以进入文本输入模式。在该模式下,用户输入的任何字符都被vi 当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按“ESC” 键即可。

末行模式:

在命令模式下用户按“:” 键即可进入末行模式下,此时Vi 会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个“:” 作为末行模式的提示符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)末行命令执行完后,vi 自动回到命令模式。

若在末行模式下输入命令过程中改变了主意, 可按“ESC” 键或用退格键将输入的命令全部删除之后,再按一下退格键,即可使vi 回到命令模式下。

vi 的进入与退出

在 shell 模式下,键入vi 及需要编辑的文件名,即可进入vi. 例如:

vi example.txt

即可编辑 example.txt 文件.如果该文件存在,则编辑界面中会显示该文件的内容,并将光标定位在文件的第一行;如果文件不存在,则编辑界面中无任何内容。如果需要在进入vi 编辑界面后,将光标置于文件的第n 行,则在vi命令后面加上“+n” 参数即可。例如需要从example.txt 文件的第5 行开始显示,则使用如下命令:

vi +5 example.txt

退出 vi 时,需要在末行模式中输入退出命令“q”。 如果在文本输入模式下,首先按“ESC” 键进入命令模式,然后输入“:” 进入末行模式在末行模式下,可使用如下退出命令:

:q 直接退出。 如果在文本输入模式下修改了文档内容,则不能退出。

:wq 保存后退出。
:x 同“ wq”。

:q! – 不保存内容, 强制退出。

vi 中显示行号

在末行模式下,输入如下命令。

set number

可使 vi 在编辑界面中显示行号。

此外 ,在末行模式下,可使用如下“nu” 命令(number 的简写)来显示光标所在行的行号及该行的内容。

光标移动操作

全屏幕文本编辑器中, 光标的移动操作无疑是最经常使用的操作了。用户只有熟练地使用移动光标的这些命令,才能迅速准确地到达所期望的位置处进行编辑。

vi 中的光标移动既可以在命令模式下,也可以在文本输入模式下,但操作的方法不尽相同。

在文本输入模式下, 可直接使用键盘上的四个方向键移动光标;在命令模式下,有很多移动光标的方法。不但可以使用四个方向键来移动光标,还可以用h 、j、 k、 l 这四个键代替四个方向键来移动光标,这样可以避免由于不同机器上的不同键盘定义所带来的矛盾,而且使用熟练后可以手不离开字母键盘位置就能完成所有操作,从而提高工作效率。

以下命令均在命令行模式下完成光标移动:

h 光标左移, 如果在按h 命令前输入数字n ,则光标左移n 个字符;

l 光标右移 ,如果在按l 命令前输入数字n, 则光标右移n 个字符;

j 光标上移, 如果在按j 命令前输入数字n, 则光标上移n 个字符;

k 光标下移, 如果在按k 命令前输入数字n ,则光标xia 移n 个字符;

0 (零) 光标移到行首;

$ 光标移到行尾;

H 光标移到屏幕上显示的第一行 (并不一定是文件头);

L 光标移到屏幕上显示的最后一行 (并不一定是文件尾);

M 光标移到屏幕的中间一行;

nG 光标移到第 n 行;

w或W 将光标右移至下一个单词的词首;

e 或E 如果光标起始位置处于单词内(即非单词尾处),则该命令将把光标移到本单词词尾;如果光标起始位置处于单词尾,则该命令将把光标移动到下一个单词的词尾。

b 或B 如果光标处于所在单词内(即非单词首),则该命令将把光标移至本单词词首;如果光标处于所在单词的词首,则该命令将把光标移到上一个单词的词首;

Ctrl+G 状态命令, 显示当前编辑文档的状态。包括正在编辑的文件名、是否修改过、当前行号、文件的行数以及光标之前的行占整个文件的百分比。

此外 ,也可以通过以下末行模式下的命令完成光标在整个文件中的移动操作:

:n 光标移到文件的第n 行;

:$ 光标移到文件的最后一行;

文本插入操作

在命令模式下 ,用户输入的任何字符都被vi 当作命令加以解释执行,如果用户要将输入的字符当作是文本内容时,则首先应将vi 的工作模式从命令模式切换到文本输入模式。切换的方式是使用下面的命令:

1. 插入(Insert) 命令

vi 提供了两个插入命令:i 和I。

(1) . i 命令插入文本从光标所在位置前开始, 并且插入过程中可以使用键删除错误的输入。此时vi 处于插入状态,屏幕最下行显示“–INSERT–” 插入字样。

(2) . I 命令 该命令是将光标移到当前行的行首, 然后在其前插入文本。

2. 附加(append) 命令

vi 提供了两个附加插入命令:a 和A。

(1) . a 命令该命令用于在光标当前所在位置之后追加新文本, 新输入的文本放在光标之后,在光标后的原文本将相应地向后移动,光标可在一行的任何位置。

(2) . A 命令 该命令与 a 命令不同的是,A 命令将把光标挪到所在行的行尾,从那里开始插入新文本,当输入A 命令后光,标自动移到该行的行尾。

a 和A 命令是把文本插入到行尾的唯一方法。

3. 打开open 命令

不论是 Insert 命令也好,还是append 命令也好,所插入的内容都是从当前行中的某个位置开始的。若我们希望在某行之前或某行之后插入一些新行,则应使用open 命令。

vi 提供了两个打开命令:o 和O。

(1) . o 命令该命令将在光标所在行的下面新开一行, 并将光标置于该行的行首,等待输入文本。要注意当使用删除字符时只能删除从插入模式开始的位置以后的字符,对于以前的字符不起作用。

(2) . O 命令和 o 命令相反,O 命令是在光标所在行的上面插入一行,并将光标置于该行的行首,等待输入文本。

文本修改操作

在命令模式下可以使用 vi 提供的各种有关命令对文本进行修改,包括对文本内容的删除、复制、取代和替换等。

1. 文本删除/移动

在编辑文本时 ,经常需要删除一些不需要的文本,我们可以用键将输错或不需要的文本删除,但此时有一个限制就是当删到行头之后,再想删上面那行的内容是不可能的。

在命令模式下, vi 提供了许多删除命令这些命令。大多是以d 开头的。常用的有:

(1) . 删除单个字符

x 删除光标处的字符。 若在x 之前加上一个数字n ,则删除从光标所在位置开始向右的n 个字符。

X 删除光标前面的那个字符,若在X之前加上一个数字n, 则删除从光标前面那个字符开始向左的n 个字符。

显然这两个命令是删除少量字符的快捷方法。

(2) . 删除多个字符

dd 删除光标所在的整行。 在dd 前可加上一个数字n ,表示删除当前行及其后n-1 行的内容。

D 或d$ 两命令功能一样, 都是删除从光标所在处开始到行尾的内容。

d0 删除从光标前一个字符开始到行首的内容。

dw 删除一个单词 。若光标处在某个词的中间,则从光标所在位置开始删至词尾。同dd 命令一样,可在dw之前加一个数字n 。表示删除n 个指定的单词。

如果用户不小心进行了误删除操作,也不要紧vi ,提供了恢复误操作的命令,并且可以将恢复的内容移动,放在文本的任何地方。恢复命令用“np”, 其中n 为需要恢复的次数。例如使用dd 命令删除了一行内容,然后使用“2p”命令,则被删除的内容会被重新插入两遍。

通过 dd 命令及p 命令的结合使用,可以很方便的实现文本行的移动操作。

2. 文本复制命令

yy 复制光标所在的整行。 在yy 前可加上一个数字n ,表示复制当前行及其后n-1 行的内容。

文本行复制后, 通过使用上面介绍的“p” 命令,可以将文本行粘贴到任何地方。

dd、 yy 及p 命令在vi 中的作用,类似于Windows 中图形编辑程序的“剪切”、“复制”及“粘贴”命令。

3. 取消上一命令(Undo)

取消上一命令 (Undo), 也称复原命令,是非常有用的命令,它可以取消前一次的误操作或不合适的操作对文件造成的影响,使之回复到这种误操作或不合适操作被执行之前的状态。

取消上一命令有两种形式, 在命令模式下键入字符u 和U 它们的功能都是取消刚才输入的命令,恢复到原来的情况。小写u 和大写U 在具体细节上有所不同,二者的区别在于,大写U命令的功能是恢复到误操作命令前的情况,即如果插入命令后使用U 命令,就删除刚刚插入的内容;如果删除命令后使用U 命令,就相当于在光标处又插入刚刚删除的内容。这里把所有修改文本的命令都视为插入命令,也就是说U 命令只能取消前一步操作,如果用U命令撤消了前一步操作,当再按U 键时,并不是撤消再前一步的操作,而是撤消了刚才U命令执行的操作,也就是又恢复到第一次使用U 命令之前的状态,结果是什么都没做。而小写u 命令的功能是把当前行恢复成被编辑前的状态,而不管此行被编辑了多少次。

4. 重复命令(Redo)

重复命令也是一个非常常用的命令。 在文本编辑中经常会碰到需要机械地重复一些操作,这时就需要用到重复命令。它可以让用户方便地再执行一次前面刚完成的某个复杂的命令。

重复命令只能在命令模式下工作, 在该模式下按“.” 键既可。执行一个重复命令时,其结果是依赖于光标当前位置的。

文本搜索与替换操作

在进行文本编辑的时候,,您可以需要搜索或定位特定的单词或单词的一部分。vi 编辑器有向前或向后搜索指定模式的功能。

“/” 是vi 编辑器的模式搜索命令。键入“/” 后,屏幕的底部会出现一行,同时一个斜扛会出现在底行的行首上,且光标被放置在斜扛之后。此时,您可以在光标位置键入你需要搜索的模式。输入完成并按下ENTER键后,编辑器将开始从光标所在的位置起向文件尾部搜索你键入的模式。如果输入的模式被找到,光标将停留在找到的模式上。在找到一个匹配的模式后,如果您还需要搜索下一个匹配的模式,使用命令“n” 即可;如果需要找到上一个匹配的模式,则使用“N” 命令即可。

此外,“ ?” 命令也是模式搜索命令。与“/” 的区别在于/ 是从光标当
前所在位置向文件尾部搜索,而“?” 命令则是由光标当前所在位置向文件头部搜索。

文本替换操作需要使用末行模式进行操作 即所有文本替换操作命令均以“:”开头。

文本替换命令的格式为:

:s/text1/text2 用于将光标所在段落搜索到的第一个 “text1” 替换为“text2”;

:s/text1/text2/g 用于将光标所在段落的所有 “text1 ”替换为“text2”;

:m,ns/text1/text2/g 用于将从 m行开始至n 行结束的所有搜索到的“text1”替换为text2。 其中可以使用$表示末行,即“1,$” 表示替换文档中的所有符合条件的字符。

设置iptables之后不能正常访问ftp解决方法

设置了iptables的禁止所有的端口,只容许可能访问了策略后大部分情况下会出现ftp不能正常访问的问题,因为ftp有主动和被动连接两种模式,少添加一些策略就会出问题。
在这里我就相信的说明下解决方法:
首先加载:
#modprobe ip_conntrack_ftp

#modprobe ip_nat_ftp
然后加载策略
#iptables -A OUTPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
#iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
#iptables -I INPUT -p tcp –dport 21 -j ACCEPT
#iptables -I OUTPUT -p tcp –dport 21 -j ACCEPT

如果不想每次都加载模块的话请在 /etc/sysconfig/iptables-config
添加

FAQ
保存之后皆可。
来源:http://mcshell.blog.51cto.com/803455/396125

Linux命令行操作

Shell简介

shell 是用户和Linux 操作系统之间的接口。Linux 中有多种shell,其中缺省使用的是bash。

Linux 系统的shell 作为操作系统的外壳为用户提供使用操作系统的接口,它是一个命令语言解释器拥有自己内建的shell 命令集。shell 也能被系统中其他应用程序所调用,用户在提示符下输入的命令都由shell 先解释然后传给Linux 核心。

Linux 中的shell 有多种类型其中最常用的几种是Bourne shell (sh), C shell(csh 和Korn shell ksh), 三种shell 各有优缺。

Bourne shell 是UNIX 最初使用的shell,并且在每种UNIX 上都可以使用。Bourne shell 在shell 编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种shell。 Linux 操作系统缺省的shell 是Bourne Again shell。它是Bourne shell 的扩展,简称bash 。与Bourne shell 完全向后兼容,并且在Bourne shell 的基础上增加增强了很多特性,它还包含了很多C shell 和Kornshell 中的优点,有灵活和强大的编程接口同时又有很友好的用户界面。

C shell 是一种比Bourne shell 更适于编程的shell, 它的语法与C 语言很相似。Linux 为喜欢使用C shell 的人提供了Tcsh。 Tcsh 是C shell 的一个扩展版本。Tcsh 包括命令行编辑可编程单词补全、拼写校正历史命令替换、作业控制和类似C语言的语法。它不仅和Bash shell 是提示符兼容而且还提供比Bashshell 更多的提示符参数。

Korn shell 集合了C shell 和Bourne shell 的优点并且和Bourne shell 完全兼容Linux 系统提供了pdksh (ksh 的扩展),它支持任务控制,可以在命令行上挂起、后台执行、唤醒或终止程序,

Redhat Linux 系统默认的shell 是bash, 对普通用户用$作提示符,对超级用户root 用#作提示符,一旦出现了shell 提示符就可以键入命令名称及命令所需要的参数。

我们来实习一下 shell 是如何工作的,在shell 提示符下输入以下命令:

$ ls –al
该命令可以列出当前目录下的所有文件和子目录。

用户在登录到 Linux 时,由/etc/passwd 文件来决定要使用哪个shell。 例如,

该文件中含有类似如下一行:

myself:x:500:500:Linux User:/home/myself:/bin/bash

用户使用的 shell 被列每行的末尾(/bin/bash)。

由于 bash 是Redhat Linux 上缺省的shell,本文将主要介绍bash 及其相关知识。

Shell 控制台使用方法

首先介绍一个名词 “控制台(console) ”,它就是我们通常见到的使用字符操作界面的人机接口,例如dos 。我们说控制台命令就是指通过字符界面输入的可以操作系统的命令。例如dos 命令就是控制台命令。我们现在要了解的
是基于Linux 操作系统的基本控制台命令。

Linux 是一个真正的多用户操作系统,这表示它可以同时接受多个用户登录。Linux 还允许一个用户进行多次登录,这是因为Linux和许多版本的UNIX 一样提供了“虚拟控制台”的访问方式,允许用户在同一时间从控制台(系统的控制台是与系统直接相连的监视器和键盘)进行多次登录。

虚拟控制台的选择可以通过按下 Alt 键和一个功能键来实现,通常使用F1-F6。例如用户登录后按一下Alt-F2 键,用户又可以看到”login:”提示符,说明用户看到了第二个虚拟控制台;然后只需按Alt-F1 键就可以回到第一个虚拟控制台。一个新安装的Linux 系统允许用户使用Alt-F1 到Alt-F6 键来访问前六个虚拟控制台。

Linux常用命令使用

登录和退出Linux 系统

用户登录系统时 ,为了使系统能够识别自己必须输入用户名和密码经系统验证无误后方能进入系统。

说明:
在系统安装过程中可以创建两种帐号: 超级用户帐号和普通用户帐号,Linux使用者一般为普通用户,而系统管理员一般使用超级用户帐号完成一些系统管理的工作.如果只需要完成一些由普通用户帐号就能完成的任务,建议不要使用超级用户帐号以免无意中破坏系统。

用户登录分两步进行 ,第一步输入用户的登录名,系统根据该登录名来识别用户;第二步输入用户的口令该口令是用户自己选择的一个字符串,对其他用户是保密的,是在登录时系统用来辨别真假用户的关键字。

1. 启动和登录系统
超级用户的用户名为 root, 密码在安装系统时已设定,系统启动成功后屏幕显示下面的提示:

localhost login:

这时输入超级用户名”root”, 然后键入回车键此时用户会在屏幕上看到输入口令的提示:

localhost login:root
Password:

这时需要输入口令, 输入口令时,口令不会在屏幕上显示出来,如果用户输入了错误的口令,就会在屏幕上看到下列信息。

login incorrect.

这时需要重新输入 。当用户正确地输入用户名和口令后,就能合法地进入系统。屏幕显示:

[root@loclhost/root] #

此时说明用户已经登录到系统中,可以进行操作了。这里”#”是超级用户的系统提示符。普通用户在建立了普通用户帐号以后就可以进行登录了。

不论是超级用户还是普通用户需要退出系统时, 在shell 提示符下键入exit 命令即可。还有其他退出系统的方法但上面一种是最安全的。

2. 重新启动系统

以 root 用户登录Linux 操作系统后执行reboot 命令可以重新启动linux 系统:
[root@loclhost/root] # reboot

3. 关闭系统

shutdown 命令可以安全地关闭或重启Linux 系统,它在系统关闭之前给系统上的所有登录用户提示一条警告信息。该命令还允许用户指定一个时间参数,可以是一个精确的时间。也可以是从现在开始的一个时间段。精确时间的格式是“hh:mm”, 表示小时和分钟,时间段由“+” 和分钟数表示、系统执行该命令后会自动进行数据同步的工作、该命令的一般格式:

shutdown [选项] [时间] [警告信息]

命令中各选项的含义为:

– k 并不真正关机而只是发出警告信息给所有用户

– r 关机后立即重新启动

– h 关机后不重新启动

– f 快速关机重启动时跳过fsck

– n 快速关机不经过init 程序

– c 取消一个已经运行的shutdown

需要特别说明的是该命令只能由超级用户使用

例 1 系统在十分钟后关机并且马上重新启动

  1. # shutdown –r +10

例 2 系统马上关机并且不重新启动

  1. # shutdown –h now

文件和目录操作命令

1. ls 命令

这个命令就相当于 dos 下的dir 命令一样,也是Linux 控制台命令中最为重要几个命令之一.ls 最常用的参数有三个:-a、 -l 、和–F。

  1. ls -a

Linux 系统上的文件以.开头的文件被系统视为隐藏文件,仅用ls 命令是看不到他们的。而用ls –a ,除了显示一般文件名外,连隐藏文件也会显示出来。

  1. ls –l (这个参数是字母 L 的小写不是数字1)

这个命令可以使用长格式显示文件内容。 如果需要察看更详细的文件资料就要用到ls -l 这个指令。

  1. ls –F

在列出的文件 (目录)名称后加一符号,例如可执行文件加”*”, 目录则加 “/”。

2. cd 命令

cd 这个命令是用来进出目录的,它的使用方法和在dos 下没什么两样,但和dos 不同的是Linux 的目录对大小写是敏感的,如果大小写拼写有误,你的cd操作是成功不了的。另外,cd 如果直接输入,cd 后面不加任何东西会回到使用者自己的Home 目录。假设如果是root 那就是回到/root, 这个功能同cd~是一样的。

3. mkdir rmdir

mkdir 命令用来建立新的目录,如输入如下命令:

  1. mkdir work

将在当前目录下新建一个 work 目录。

rmdir 用来删除已建立的目录,如输入如下命令:

  1. rmdir work

将删除已存在的空目录work

4. cp

cp 这个命令相当于dos 下面的copy 命令。具体用法是:

cp -r 源文件(source) 目的文件(target)

参数 r 是指连同源文件中的子目录一同拷贝。

5. rm

rm 这个命令是用来删除文件的,rm命令常用的参数有三个-i,-r,-f。

比如我现在要删除一个名字为 text 的一个文件,输入如下命令:

  1. rm –i test

系统会询问我们是否要删除test 文件,敲了“y/n” 确认是否要删除test 文件:

rm –r 目录名:这个操作可以连同这个目录下面的子目录都删除,功能比上面讲到的rmdir 更强大,不仅可能删除指定的目录,而且可以删除该目录下所有文件和子目录。

rm –f 文件名这个操作可以不经确认强制删除文件。
6. mv

mv 这个命令的功能是移动目录或文件,引申的功能是给目录或文件重命名,

比如:

  1. mv /tmp/xxx.tar /root

该命令将/tmp 目录下的xxx.tar 文件移动到/root 目录下。

而:

  1. mv aaa.tar bbb.tar

则是将当前目录下的文件 aaa.tar 更名为bbb.tar。

7. cat
cat 这个命令是linux 中非常重要的一个命令,它的功能是显示或连结一般的ascii 文本文件、它的用法如下:

  1. cat text

该命令显示text 这个文件的内容。

  1. cat file1 file2

该命令依顺序显示file1,file2 的内容。

  1. cat file1 file2>file3

该命令把file1,file2 的内容结合起来再重定向>到file3 文件中。

8. more

more 是显示一般文本文件的指令。如果一个文本文件太长了超过一个屏幕的画面,用cat 来看实在是不理想,就可以试试more ,用法如下:

  1. more file1

9. pwd

pwd 这个命令的作用是显示用户当前的工作路径,直接输入pwd 即可。

用户及用户组管理命令

1. useradd

useradd 命令可以创建一个新的用户帐号,其最基本用法为:

useradd 用户名

如输入以下命令:

  1. useradd newuser

系统将创建一个新用户 newuser,该用户的Home 目录为/home/newuser。

useradd 命令的参数较多,常用的组合为:

useradd 用户名 -g 组名–G 组名-d Home 目录名-p 密码

其中:-g 指定该用户的首要组

-G 指定该用户的次要组

-d 指定该用户的Home 目录

-p 指定该用户的密码

如输入以下命令:

  1. useradd oracle –g oinstall –G dba –d /home/oracle –p ora123

系统将创建一个用户 oracle oracle 用户的首要组为oinstall ,次要组为dba,Home 目录为/home/oracle ,密码为ora123。

2. userdel

userdel 命令用于删除一个已存在的帐号,其用法为:

userdel 用户名

3. groupadd

groupadd 命令可以创建一个新的用户组,其最基本用法为:

groupadd 组名

如输入以下命令:

  1. groupadd newgroup

系统将创建一个新的用户组 newgroup。

4. groupdel

groupdel 命令用于删除一个已存在的用户组,其用法为:

  1. groupdel 组名

5. passwd

出于系统安全考虑, Linux 系统中的每一个用户除了有其用户名外还有其对应的用户口令,用户可以随时用passwd 命令改变自己的口令。该命令的一般格式为:

passwd

输入该命令后, 按系统提示依次输入密码和密码确认后,即可完成用户密码的修改。

此外, 超级用户还可以修改其他用户的口令,命令如下:

  1. passwd 用户名

6. su

su 命令这个命令非常重要,它可以让一个普通用户拥有超级用户或其他用户的权限,也可以让超级用户以普通用户的身份做一些事情。普通用户使用这个命令时必须有超级用户或其他用户的口令。如要离开当前用户的身份,可以键入exit 命令,su 命令的一般形式为:

su – 用户名

7. chmod

chmod 命令是非常重要的,用于改变文件或目录的访问权限。该命令有两种用法:一种是包含字母和操作符表达式的文字设定法,另一种是包含数字的数字设定法。

由于数字设定法不太直观 ,本文不做介绍。文字设定法的用法如下:

  1. chmod [who] [+ | – | =] [mode] 文件名

命令中各选项的含义为:

1 、操作对象who 可以是下述字母中的任一个或者它们的组合:

u 表示用户(user) ,即文件或目录的所有者

g 表示同组(group)用户,即与文件属主有相同组ID 的所有用户

o 表示其他(others)用户

a 表示所有(all)用户,它是系统默认值。

2 、操作符号可以是:

+ 添加某个权限

– 取消某个权限

= 赋予给定权限,并取消其他所有权限

3 mode 表示权限常用的参数有

r 可读

w 可写

x 可执行

举例:

1 、将文件 script 的权限设为可执行。命令如下:

chmod =rx text

执行成功后 ,用ls -l script 命令查看文件属性的结果如下:

-r-xr-xr-x 1 user group 0 Feb 10 09:42 script

2 、将文件 text 的权限设为:文件属主可读、可写、可执行,与文件属主同组的用户可读,其他用户不可读。命令如下:

chmod u=rwx,g=r,o= text (注意,后无空格o=后有空格)

执行成功后 ,用ls –l text 命令查看文件属性的结果如下:

-rwxr—– 1 user group 0 Feb 10 09:42 text

8. chown

chown 用于更改某个文件或目录的属主和属组,这个命令也很常用。例如root 用户把自己的一个文件拷贝给用户oracle ,为了让用户oracle 能够存取这个文件,root 用户应该把这个文件的属主设为oracle ,否则用户oracle无法存取这个文件。chown 的基本用法为:

chown [用户:组] 文件

举例:

  1. chown oracle:dba text

该命令将 text 文件的属主和属组分别改为oracle 和dba。

进程及任务管理命令

Linux 系统上所有运行的东西都可以称之为一个进程。每个用户任务、每个系统管理守护进程都可以称之为进程。Linux 用分时管理方法使所有的任务共同分享系统资源。以下将介绍一些常用的查看和控制进程的命令。

1. ps

ps 命令是最基本同时也是非常强大的进程查看命令。使用该命令可以查看有哪些进程正在运行以及运行的状态,进程是否结束,进程有没有僵死,哪些进程占用了过多的资源等等。

该命令的基本用法如下

ps [选项]

其中常用的选项有:

-e 显示所有进程

-f 全格式

-l 长格式

举例:

1、在控制台输入 ps 命令,得到类似如下的输出:

PID TTY TIME CMD

12039 pts/0 00:00:00 bash

18710 pts/0 00:00:00 ps

该命令显示当前登录用户的执行进程。 显示的项目共分为四项,依次为PID(进程ID)、 TTY(终端名称) 、TIME(进程执行时间)、 CMD(该进程的命令行输入)。

2、 在控制台输入以下命令:

  1. ps –ef

UID PID PPID C STIME TTY TIME CMD

root 1 0 0 Jan14 ? 00:00:05 init

root 2 1 0 Jan14 ? 00:00:00 [keventd]

root 3 1 0 Jan14 ? 00:00:00 [kapmd]

…………………..

该命令将显示所有执行进程的信息。 显示的项目依次为UID (执行进程的用户ID) PID(进程ID)、 PPID(父进程ID) 、TTY(终端名称) 、STIME(进程启动时间) 、TIME(进程执行时间) 、CMD(该进程的命令行输入)。

该命令的输出较多 ,可以使用grep 命令进行过虑,以方便查看,如:

  1. ps –ef|grep oracle

将只显示出包含 oracle 的输出行,可以查询执行进程的用户为oracle 的所有进程。

2、top

top 命令和ps 命令的基本作用是相同的,显示系统当前的进程和其他状况。但是top 是一个动态显示过程,即可以通过用户按交互来不断刷新当前状态。top 的命令参数并不重要,简单的输入top 命令即可查看系统运行状态。

top 命令执行过程中可以使用交互命令。从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。这些命令都是单字母的,常用的命令有:

立即刷新显示

h 或者? 显示帮助画面给出一些简短的命令总结说明

m 切换显示内存信息

t 切换显示进程和CPU状态信息

c 切换显示命令名称和完整命令行

M 根据驻留内存大小进行排序

P 根据CPU使用百分比大小进行排序

q 退出

3、 kill

kill 命令可以用于终止后台进程。kill 命令是通过向进程发送指定的信号来结束进程的。kill 命令的语法格式很简单,大致有以下两种方式:

(1) kill [-s 信号] 进程号

其中 ,发出的信号既可以是信号名也可以对应数字。

如 :kill -9 1234 命令,将终止PID(进程号)为1234 的进程。

(2)、 kill -l

该命令显示信号列表

4. cron

cron 命令用来实现定时任务的完成,如每日执行一次的任务(进程)。cron 命令是不应该手工启动的。一般情况下,cron 命令在系统启动时就由一个shell 脚本自动启动。启动后 ,cron 命令会搜索/var/spool/cron 目录,寻找以/etc/passwd 文件中的用户名命名的crontab 文件,被找到的这种文件将载入内存。例如一个用户名为user 的用户它所对应的crontab 文件就应该是/var/spool/cron/user 。也就是说,以该用户命名的crontab 文件存放在/var/spool/cron 目录下面。cron 命令还将搜索/etc/crontab 文件,这个文件是用不同的格式写成的cron 启动以后它将首先检查是否有用户设置了crontab,文件如果没有就转入休眠状态释放系统资源它每分钟醒过来一次查看当前是否有需要运行的命令。

可以使用crontab –l 命令查看目前已经存在的cron 任务。

磁盘及文件系统管理命令

管理文件系统其实是相当复杂的工作, 本文将只介绍日常维护需要的一些管理命令,主要内容有:挂装和卸载硬盘分区等。

1. df

df 命令可以显示目前磁盘剩余的磁盘空间,常用的参数为-k ,如:

  1. df –k

该语句将显示各分区的磁盘空间使用情况。

2. mount 和umount

mount 命令有很多参数,其中大多数都不会在日常工作中用到。mount 命令最常见的用法如下所示:

mount [选项] 设备目录

其中 最常用的选项是

– a 把/etc/fstab 文件中列出的文件系统都挂装上。

挂装软驱和光驱的命令比较简单, 直接输入以下命令即可:

  1. mount /mnt/cdrom
  2.  
  3. mount /mnt/floppy

umount 命令用于卸载一个文件系统,命令的格式如下:

umount [ -f ] directory

其中, directory 是准备卸载的目录名。

umount 命令有一个不足之处:如果文件系统正在使用中(也就是说有人在那个分区上打开了文件),就无法把这个文件系统卸载下来这时可以使用和- f参数强制执行卸载操作,当然这种操作可能会造成用户数据的丢失,如:

  1. umount -f /mnt/cdrom

该命令将强制卸载挂装在/mnt/cdrom 目录下的文件系统。

软件安装命令

1. tar

tar 命令用于把多个文件合并于一个档案文件中,并提供分解的合并后的档案文件的功能.它独立于压缩工具,因此可以选择在合并前是否压缩.tar 命令的基本用法为:

tar [选项] 文件名

常用的选项包括

-c 创建一个新的档案文件

-t 查看档案文件的内容

-x 分解档案文件的内容

-f 指定档案文件的名称

-v 显示过程信息

-z 采用压缩方式

举例:

  1. (1)、 tar -czf oracle.tar.gz /u01/app/oracle /etc/oratab /home/oracle

该 命 令 将/u01/app/oracle 目录下的所有文件、/etc/oratab 文件和/home/oracle 目录下的所有文件合并到oracle.tar 文件中,并采用压缩方式。

  1. (2)、 tar -tzf oracle.tar.gz

该命令列出归档文件 oracle.tar 中的所有文件列表。

  1. (3)、 tar –xzvf oracle.tar.gz

该命令将归档文件分解并解压缩到原有文件的路径中。

2. rpm

rpm 命令的功能有很多,在这里我们只介绍如何利用rpm 安装和查询已安装的软件。

1 安装

rpm 安装软件包的基本语法如下:

rpm -i rpm 包名

例如:

  1. rpm -i tomcat4.rpm

该命令将安装 Tomcat 软件并进行相关系统配置。

2 升级

rpm 升级软件包的基本语法如下:

rpm -U rpm 包名

例如:

  1. rpm –U tomcat4.rpm

该命令将升级 Tomcat 软件并进行相关系统配置。

3 、查看已安装的软件

有的时候, 了解系统中都已经安装了哪些软件包以及它们的用途是很有用的, R P M 的查询参数就可以做到这一点。

要想列出已经安装的全部软件包 ,可以通过以下命令:

  1. rpm -qa

可以使用 grep 命令指定软件包的名称(或者部分名称)如下所示:

  1. rpm -qa | grep ‘tomcat’

该命令将列出包名中包含 tomcat 的软件包。

此外: 要想找出某个特定的文件到底是属于哪个软件包的,可以输入:

  1. rpm -qf filename

其中 filename 是准备要查找其归属的文件名称。

要想查出某个已经安装的软件包的功能 ,可以用如下命令:

  1. rpm -qi packagename

其中, packagename 是要查找其用途的软件包名称。

4 、删除已安装的软件

使用 RPM删除软件包就像安装它们一样简单。大多数情况下,用户只需要输入命令:

  1. rpm -e packagename

其中 ,ackagename 是要查删除的软件包名称。

CentOS安装Apache2带SSL支持(mod_ssl, openssl)

下面是介绍源码安装Apache并配置ssl支持的教程。

安装所需软件包

  1. yum -y install gcc openssl openssl-devel

下载Apache源码

到http://httpd.apache.org/下载最新稳定版的源码,现在最新稳定版是2.2.21。

  1. cd ~
  2. wget http://apache.deathculture.net//httpd/httpd-2.2.21.tar.gz
  3. tar xvfz httpd-2.2.21.tar.gz

安装Apache支持SSL/TLS

  1. cd httpd-2.2.21
  2. ./configure –enable-ssl –enable-so
  3. make
  4. make install

提示:默认安装路径为 /usr/local/apache2,如果你想改变路径,在./configure命令中使用–prefix自定义。

配置httpd.conf运行ssl

  1. vi /usr/local/apache2/conf/httpd.conf

然后取消Include conf/extra/httpd-ssl.conf的注释。
ssl配置文件在/usr/local/apache2/conf/extra/httpd-ssl.conf,默认就行,不需要更改。
httpd-ssl.conf配置文件显示,需要server.crt和server.key两个文件,下面来介绍如何生成。

创建server.crt和server.key

首先,使用openssl生成server.key。

  1. cd ~
  2. openssl genrsa -des3 -out server.key 1024

执行以上的命令会要求输入密码,请记住这个密码,后面的设置需要到。
下一步是使用上面生成的server.key文件创建server.csr证书文件。

  1. openssl req -new -key server.key -out server.csr

最后,根据上面的server.key和server.csr两个文件生成私人签名的server.crt证书。

  1. openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

复制server.key和server.crt文件

  1. cd ~
  2. cp server.key /usr/local/apache2/conf/
  3. cp server.crt /usr/local/apache2/conf/

启动apache并验证ssl

  1. /usr/local/apache2/bin/apachectl start

接着会要求输入上面设置的私人密钥的密码。

  1. Apache/2.2.21 mod_ssl/2.2.21 (Pass Phrase Dialog)
  2. Some of your private key files are encrypted for security reasons.
  3. In order to read them you have to provide the pass phrases.
  4.  
  5. Server www.example.com:443 (RSA)
  6. Enter pass phrase:
  7.  
  8. OK: Pass Phrase Dialog successful.

之后,你就可以通过https://ip访问你的网站。

CentOS-5安装配置PowerDNS服务器

PowerDNS简介

PowerDNS是高性能的域名服务器,除了支持普通的BIND配置文件,PowerDNS还可以从MySQL,Oracle,PostgreSQL等的数据库读取数据。PowerDNS安装了Poweradmin,能实现Web管理DNS记录,非常的方便。本文我们以MySQL为后端数据库和Poweradmin网页管理DNS,在CentOS-5安装PowerDNS。

安装MySQL

  1. yum -y install mysql mysql-server

设置mysql开机自启并启动mysql

  1. chkconfig –levels 235 mysqld on
  2. /etc/init.d/mysqld start

修改mysql root密码:

  1. mysqladmin -u root password yourrootsqlpassword

安装PowerDNS

  1. yum -y install pdns pdns-backend-mysql

连接mysql:

  1. mysql -u root -p

创建powerdns数据库:

  1. CREATE DATABASE powerdns;

为PowerDNS创建powerdns数据库用户:

  1. GRANT ALL ON powerdns.* TO ‘power_admin’@’localhost’ IDENTIFIED BY ‘power_admin_password’;
  2. FLUSH PRIVILEGES;

请替换power_admin_password成自己的密码。
现在创建数据表:

  1. USE powerdns;
  1. CREATE TABLE domains (
  2. id INT auto_increment,
  3. name VARCHAR(255) NOT NULL,
  4. master VARCHAR(128) DEFAULT NULL,
  5. last_check INT DEFAULT NULL,
  6. type VARCHAR(6) NOT NULL,
  7. notified_serial INT DEFAULT NULL,
  8. account VARCHAR(40) DEFAULT NULL,
  9. primary key (id)
  10. );
  1. CREATE UNIQUE INDEX name_index ON domains(name);
  1. CREATE TABLE records (
  2. id INT auto_increment,
  3. domain_id INT DEFAULT NULL,
  4. name VARCHAR(255) DEFAULT NULL,
  5. type VARCHAR(6) DEFAULT NULL,
  6. content VARCHAR(255) DEFAULT NULL,
  7. ttl INT DEFAULT NULL,
  8. prio INT DEFAULT NULL,
  9. change_date INT DEFAULT NULL,
  10. primary key(id)
  11. );
  1. CREATE INDEX rec_name_index ON records(name);
  2. CREATE INDEX nametype_index ON records(name,type);
  3. CREATE INDEX domain_id ON records(domain_id);
  1. CREATE TABLE supermasters (
  2. ip VARCHAR(25) NOT NULL,
  3. nameserver VARCHAR(255) NOT NULL,
  4. account VARCHAR(40) DEFAULT NULL
  5. );

最后退出mysql shell:

  1. quit;

现在配置PowerDNS以使用mysql后端:

  1. vi /etc/pdns/pdns.conf

增加如下内容到pdns.conf

  1. […]
  2. #################################
  3. # launch        Which backends to launch and order to query them in
  4. #
  5. # launch=
  6. launch=gmysql
  7. gmysql-host=127.0.0.1
  8. gmysql-user=power_admin
  9. gmysql-password=power_admin_password
  10. gmysql-dbname=powerdns
  11. […]

设置PowerDNS自启动并立即启动PowerDNS。

  1. chkconfig –levels 235 pdns on
  2. /etc/init.d/pdns start

现在PowerDNS已经正常运行,下面我们为PowerDNS安装Poweradmin实现Web管理。

安装Poweradmin

Poweradmin运行在PHP环境中,我们现在配置Web环境。

  1. yum -y install httpd php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mhash gettext

设置apache自启动,并启动apache。

  1. chkconfig –levels 235 httpd on
  2. /etc/init.d/httpd start

Poweradmin还需要安装两个PEAR软件包。

  1. yum install php-pear-DB php-pear-MDB2-Driver-mysql

现在Poweradmin所需的环境已经配置完成,我们将把Poweradmin安装在目录/var/www/html,这是apache默认的文档根目录。
到https://www.poweradmin.org/trac/wiki/GettingPoweradmin找到最新的版本下载:

  1. cd /tmp
  2. wget https://www.poweradmin.org/download/poweradmin-2.1.5.tgz

然后安装在/var/www/html/poweradmin目录。

  1. tar xvfz poweradmin-2.1.5.tgz
  2. mv poweradmin-2.1.5 /var/www/html/poweradmin
  3. touch /var/www/html/poweradmin/inc/config.inc.php
  4. chown -R apache:apache /var/www/html/poweradmin/

现在打开浏览器运行安装程序(如:http://devops.webres.wang/poweradmin/install或http://192.168.0.100/poweradmin/install)。
1、选择语言为英文,并点击Go to step 2
PowerDNS
2、点击“Go to step 3”到安装的第三步,填入数据库详细信息。输入root用户和密码,和输入Poweradmin的admin用户的密码。
PowerDNS
3、点击下一步,填入在安装powerdns那一步所创建的power_admin mysql用户的信息,并且填入域名服务器地址:
PowerDNS
4、下一步是需要执行mysql语句,我们不需要执行了,因为前面我们已经执行过了,直接点击下一步即可。
PowerDNS
5、继续点击下一步。
PowerDNS
6、现在poweradmin安装完成。
PowerDNS
7、为了安全,需要删除安装目录。

  1. rm -fr /var/www/html/poweradmin/install/

现在你可以进入http://devops.webres.wang/poweradmin或者http://192.168.0.100/poweradmin页面,输入用户admin和执行安装程序时设置的密码进入管理界面。

Linux环境用Sendmail架设Mail服务器

人们在互联网上最常使用的就是电子邮件了,很多企业用户也经常使用免费的电子邮件系统。今天我就给大家介绍一种在Red Hat Linux 9.0环境下运行的邮件服务器软件Sendmail.Sendmail作为一种免费的邮件服务器软件,已被广泛的应用于各种服务器中,它在稳定性、可移植性、及确保没有bug等方面具有一定的特色,且可以在网络中搜索到大量的使用资料。
  

一、安装Sendmail

  完全安装Red Hat Linux 9.0时,Sendmail就会自动内置,版本号为8.12.8-4.如果你不确定Linux是否已经安装有sendmail,可以输入以下命令查看:
 

  1.  [root@ahpeng root] rpm –qa grep sendmail

  如果确定没有安装,请在图形界面下依次选择单击“主菜单-系统设置-添加删除应用程序”,然后在打开的“软件包管理”窗口里选中“邮件服务器”选项,点“更新”后按照提示安装即可。
  另一种办法是:直接插入Linux第1张安装光盘,选择/RedHat/RPMS目录下的sendmail-8.12.8-4.i386.rpm安装包,之后运行[root@ahpeng RPMS] # rpm -ivh sendmail-8.12.8-4.i386.rpm即可开始安装,再用此方法在第3张安装光盘的同目录下依次安装sendmail-cf.8.12.8-4.i386.rpm、sendmail-doc. 8.12.8-4.i386.rpm.
  

二、启动Sendmail服务系统

  笔者建议使用带参数的Sendmail命令控制邮件服务器的运行:
  

  1. [root@ahpeng root]# sendmail -bd –q12h

  -b:设定Sendmail服务运行于后台。
  -d:指定Sendmail以Daemon(守护进程)方式运行。
  -q:设定当Sendmail无法成功发送邮件时,就将邮件保存在队列里,并指定保存时间。上面的12h表示保留12小时。
  此外,要检测Sendmail服务器是否正常运行,可以使用命令行:

  1. [root@ahpeng root]#  /etc/rc.d/init.d/sendmail status

  

三、配置Sendmail

  sendmail.cf的配置语法比较难懂,一般资料上都是采用m4宏处理程序来生成所需的sendmail.cf文件(使用m4编译工具一般不容易出错,还可避免某些带有安全漏洞的宏对服务器造成的破坏)。其配置文件位于/etc/mail/sendmail.cf,在创建的过程中还需要一个模板文件,Linux自带有一个模板文件,位于/etc/mail/sendmail.mc.故可以直接通过修改sendmail.mc模板来达到定制sendmail.cf文件的目的,而不必去死啃哪些难理解的配置命令。配置步骤为:
  第一步:用模板文件sendmail.mc生成sendmail.cf配置文件,并导出到/etc/mail/目录下,使用命令行:m4

  1. /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

  第二步:再用

  1. [root@ahpeng root] /etc/rc.d/init.d/sendmail restart

命令行重启sendmail.
  至此,邮件服务系统配置完成,已经正常工作。接下来就是创建具体的帐户了。

四、建立电子邮件新帐号

  此步骤相对简单,只需在Linux里新增一个用户即可。依次进入“主菜单-系统设置-用户和组群”选项,接着打开“Red Hat用户管理器”对话框,点“添加用户”按钮,在接着出现的“创建新用户”窗口中输入用户名及密码即可。
  创建mail使用帐号,命令行方式为:

  1. [root@ahpeng root]#adduser mailA -p Pass

表示创建了一个mailA的帐号,密码为Pass.
  

五、限制单个用户邮箱容量

  如果对用户的邮件容量不加限制,服务器的硬盘是不堪重负的。这可以使用“邮件限额”功能来实现:因为电子邮件的暂存空间是位于/var/spool/mail目录下的,所以只需通过磁盘配额设定每一个邮件帐户在此目录下能使用的最大空间即可。
  

六、单一用户设定多个邮件地址

  使用别名(alias)可以解决这个问题。别名是sendmail最重要的功能之一。它在aliases这个文本文件中定义,aliases文件的位置由sendmail.cf指定,一般位于/etc目录下。比如前面我们建立的mailA用户要拥有2个邮件地址:[email protected][email protected],可以这样设置:
  首先,新增一个账号mailC,然后用Linux的文本编辑器打开/etc/aliases,在里面加上dearpeter: mailC和truepeter: mailC这两个命令行;然后在命令窗口运行newaliases命令,以要求Sendmail重新读取/etc/aliases文件。如果正确无误,会出现一段回应消息,表示配置成功。这样就可以使用2个地址给mailC发信,而mailC则只需用其中一个账号就可接收寄给以上2个地址的所有邮件。
  经过以上步骤后,应该就可以用Outlook Express正常发送邮件了,但这时还不能用Outlook Express从服务器端收取邮件的,因为sendmail默认状态并不具备POP3功能,我们还得自己安装并启用它。
  1.POP3(IMAP)服务器安装。
  第一步:用以下命令行检查系统是否安装:
  

  1. [root@ahpeng root]# rpm -qa imap

  imap-2001a-18
  第二步:插入第2张安装光盘,使用下面的命令行开始安装:

  1.   [root@ahpeng root]#cd /mnt/cdrom/RedHat/RPMS
  2.   [root@ahpeng root]#rpm -ivh imap-2001a-18.i386.rpm

  2.启用POP3(IMAP)服务。
  POP3服务:请先修改/etc/xinetd.d/ipop3文件,将其中的disable=yes改为disable=no后保存;然后重新启动xinetd程序来读取这个修改过的配置文件,使之生效。
 

  1.  [root@ahpeng root]#/etc/rc.d/init.d/xinetd reload

  启动IMAP服务的步骤跟POP3一样,只不过IMAP的配置文件为/etc/xinetd.d/imap.
转自:http://linux.chinaitlab.com/server/731736.html

FTP出现500 OOPS: cannot change directory

cannot change directory:/home/***
ftp服务器连接失败,错误提示:
500 OOPS: cannot change directory:/home/*******
500 OOPS: child died
解决方法:
在终端输入命令:

  1. setsebool -P ftpd_disable_trans 1
  2. service vsftpd restart

就OK了!
原因:这是因为服务器开启了selinux,这限制了FTP的登录。

CentOS-5安装配置ExtMail Web邮件收发系统

本文参考http://wiki.extmail.org/extmail_solution_for_linux_centos-5,内容和病毒过滤不在本文之内,如需配置请参考官方文档。下面是在CentOS-5 32位系统的安装实录。

制作_yum_仓库

编译CentOS-Base.repo文件

  1. vi /etc/yum.repos.d/CentOS-Base.repo

加入如下内容:

  1. # EMOS-Base.repo
  2. #
  3. # Created by ExtMail Dev Team: http://www.extmail.org/
  4. #
  5. # $Id$
  6.  
  7. [EMOS-base]
  8. name=EMOS-Base
  9. baseurl=http://mirror.extmail.org/yum/emos/1.5/os/$basearch/
  10. gpgcheck=0
  11. priority=0
  12. protect=0
  13.  
  14. [EMOS-update]
  15. name=EMOS-Updates
  16. baseurl=http://mirror.extmail.org/yum/emos/1.5/updates/$basearch/
  17. gpgcheck=0
  18. priority=0
  19. protect=0

保存后,然后尝试执行一下yum list 等操作,看看是否已经成功;

配置mta-postfix

1、安装postfix

  1. # yum -y install postfix
  2. # yum remove sendmail

2、配置postfix

  1. # postconf -n > /etc/postfix/main2.cf
  2. # mv /etc/postfix/main.cf /etc/postfix/main.cf.old
  3. # mv /etc/postfix/main2.cf /etc/postfix/main.cf

编辑main.cf:

  1. # vi /etc/postfix/main.cf

增加如下内容:

  1. # hostname
  2. mynetworks = 127.0.0.1
  3. myhostname = mail.webres.wang
  4. mydestination = $mynetworks $myhostname
  5.  
  6. # banner
  7. mail_name = Postfix – by extmail.org
  8. smtpd_banner = $myhostname ESMTP $mail_name
  9.  
  10. # response immediately
  11. smtpd_error_sleep_time = 0s
  12.  
  13. # Message and return coolcode control
  14. message_size_limit = 5242880
  15. mailbox_size_limit = 5242880
  16. show_user_unknown_table_name = no
  17.  
  18. # Queue lifetime control
  19. bounce_queue_lifetime = 1d
  20. maximal_queue_lifetime = 1d

注:myhostname改为自己的。
设置postfix开机自启:

  1. # chkconfig postfix on

配置courier-authlib

1、安装Courier-Authlib

安装以下软件包:

  1. # yum -y install courier-authlib
  2. # yum -y install courier-authlib-mysql

删除并编辑/etc/authlib/authmysqlrc文件:

  1. # cat /dev/null >/etc/authlib/authmysqlrc
  2. # vi /etc/authlib/authmysqlrc

增加如下内容:

  1. MYSQL_SERVER            localhost
  2. MYSQL_USERNAME          extmail
  3. MYSQL_PASSWORD          extmail
  4. MYSQL_SOCKET            /var/lib/mysql/mysql.sock
  5. MYSQL_PORT              3306
  6. MYSQL_OPT               0
  7. MYSQL_DATABASE          extmail
  8. MYSQL_USER_TABLE        mailbox
  9. MYSQL_CRYPT_PWFIELD     password
  10. MYSQL_UID_FIELD         uidnumber
  11. MYSQL_GID_FIELD         gidnumber
  12. MYSQL_LOGIN_FIELD       username
  13. MYSQL_HOME_FIELD        homedir
  14. MYSQL_NAME_FIELD        name
  15. MYSQL_MAILDIR_FIELD     maildir
  16. MYSQL_QUOTA_FIELD       quota
  17. MYSQL_SELECT_CLAUSE     SELECT username,password,"",uidnumber,gidnumber,
  18.                         CONCAT(‘/home/domains/’,homedir),               
  19.                         CONCAT(‘/home/domains/’,maildir),               
  20.                         quota,                                         
  21.                         name                                           
  22.                         FROM mailbox                                   
  23.                         WHERE username = ‘$(local_part)@$(domain)’

修改authdaemonrc文件

  1. # vi /etc/authlib/authdaemonrc

修改如下内容:

  1. authmodulelist="authmysql"
  2. authmodulelistorig="authmysql"

或者使用如下命令直接修改:

  1. sed -i ‘s/authmodulelist=.*/authmodulelist="authmysql"/g’ /etc/authlib/authdaemonrc
  2. sed -i ‘s/authmodulelistorig=.*/authmodulelistorig="authmysql"/g’ /etc/authlib/authdaemonrc

2、启动courier-authlib:

  1. # service courier-authlib start

修改authdaemon socket目录权限

  1. # chmod 755 /var/spool/authdaemon/

配置maildrop

1、安装maildrop

  1. # yum -y install maildrop

配置master.cf 为了使Postfix支持Maildrop,必须修改/etc/postfix/master.cf文件,注释掉原来的maildrop的配置内容,并改为:

  1. maildrop   unix        –       n        n        –        –        pipe
  2.   flags=DRhu user=vuser argv=maildrop -w 90 -d ${user}@${nexthop} ${recipient} ${user} ${extension} {nexthop}

注意:flags前面有“两个空格”

配置main.cf 由于maildrop不支持一次接收多个收件人,因此必须在main.cf里增加如下参数:

  1. # vi /etc/postfix/main.cf
  1. maildrop_destination_recipient_limit = 1

2、测试maildrop对authlib支持

  1. # maildrop -v

看是否出现以下内容:

  1. maildrop 2.1.0 Copyright 1998-2005 Double Precision, Inc.
  2. GDBM/DB extensions enabled.
  3. Courier Authentication Library extension enabled.
  4. Maildir quota extension enabled.
  5. This program is distributed under the terms of the GNU General Public
  6. License. See COPYING for additional information.

配置apache

1、安装httpd

  1. # yum -y install httpd

2、虚拟主机设置

编辑httpd.conf文件:

  1. # vi /etc/httpd/conf/httpd.conf

在最后一行加上:

  1. NameVirtualHost *:80
  2. Include conf/vhost_*.conf

编辑 vhost_extmail.conf

  1. # vi /etc/httpd/conf/vhost_extmail.conf

里面定义虚拟主机的相关内容:

  1. # VirtualHost for ExtMail Solution
  2. <VirtualHost *:80>
  3. ServerName mail.webres.wang
  4. DocumentRoot /var/www/extsuite/extmail/html/
  5.  
  6. ScriptAlias /extmail/cgi/ /var/www/extsuite/extmail/cgi/
  7. Alias /extmail /var/www/extsuite/extmail/html/
  8.  
  9. ScriptAlias /extman/cgi/ /var/www/extsuite/extman/cgi/
  10. Alias /extman /var/www/extsuite/extman/html/
  11.  
  12. # Suexec config
  13. SuexecUserGroup vuser vgroup
  14. </VirtualHost>

注意:把ServerName修改成自己的。
设置apache开机启动并重启apache

  1. # chkconfig httpd on
  2. # service httpd restart

配置webmail-extmail

1、安装ExtMail

  1. # yum -y install extsuite-webmail

2、编辑webmail.cf

  1. # cd /var/www/extsuite/extmail
  2. # cp webmail.cf.default webmail.cf
  3. # vi webmail.cf

主要变动的内容见下:

  1. SYS_MYSQL_USER = extmail
  2. SYS_MYSQL_PASS = extmail
  3. SYS_MYSQL_DB = extmail

更新cgi目录权限 由于SuEXEC的需要,必须将extmail的cgi目录修改成vuser:vgroup权限:

  1. # chown -R vuser:vgroup /var/www/extsuite/extmail/cgi/

配置管理后台-extman

1、yum安装ExtMan

  1. # yum -y install extsuite-webman

更新cgi目录权限 由于SuEXEC的需要,必须将extman的cgi目录修改成vuser:vgroup权限:

  1. # chown -R vuser:vgroup /var/www/extsuite/extman/cgi/

链接基本库到Extmail

  1. # mkdir /tmp/extman
  2. # chown -R vuser:vgroup /tmp/extman

注意事项:
由于RedHat发行版中包含了一个叫tmpwatch的工具,该工具会定期扫描/tmp/下的文件,如果这些文件很久都没被使用,将被删除,因此如果后台长期不使用,/tmp/extman目录有可能被tmpwatch删除,所以要么定期登陆后台,要么修改 webman.cf将临时目录修改到另一个地方。此处暂以/tmp/extman默认值为例。

2、安装mysql数据库

  1. # yum -y install mysql mysql-server

3、数据库初始化

启动Mysql

  1. # service mysqld start
  2. # chkconfig mysqld on

导入mysql数据库结构及初始化数据,root密码默认为空

  1. # mysql -u root -p < /var/www/extsuite/extman/docs/extmail.sql
  2. # mysql -u root -p < /var/www/extsuite/extman/docs/init.sql

注意事项:
上述导入初始化SQL时,默认的uidnumber/gidnumber都是1000,这和vuser:vgroup 的uid/gid一致,是因为maildrop投递时会从数据库里取uidnumber/gidnumber,而在master.cf里已经定义好了投递时的运行身份(vuser:vgroup),所以这两个字段的内容必须为1000,否则将出现投递错误,例如报0×06等错误。

4、设置虚拟域和虚拟用户的配置文件

  1. # cd /var/www/extsuite/extman/docs
  2. # cp mysql_virtual_alias_maps.cf /etc/postfix/
  3. # cp mysql_virtual_domains_maps.cf /etc/postfix/
  4. # cp mysql_virtual_mailbox_maps.cf /etc/postfix/
  5. # cp mysql_virtual_sender_maps.cf /etc/postfix/

配置main.cf:

  1. # vi /etc/postfix/main.cf

增加以下内容:

  1. # extmail config here
  2. virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
  3. virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
  4. virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
  5. virtual_transport = maildrop:

重启postfix :

  1. # service postfix restart

5、测试authlib

  1. # /usr/sbin/authtest -s login [email protected] extmail

结果如下:
Authentication succeeded.

Authenticated: [email protected] (uid 1000, gid 1000)
Home Directory: /home/domains/extmail.org/postmaster
Maildir: /home/domains/extmail.org/postmaster/Maildir/
Quota: 104857600S
Encrypted Password: $1$phz1mRrj$3ok6BjeaoJYWDBsEPZb5C0
Cleartext Password: extmail
Options: (none)

这样表明ExtMan的正确安装,数据库也正确导入,courier-authlib能正确连接到mysql数据库

最后访问http://mail.webres.wang/extmail/,如无意外,将看到webmail的登陆页,不过此时还没有加正式的用户,所以不能登陆,包括[email protected]也不行。必须要登陆到http://mail.webres.wang/extman/ 里增加一个新帐户才能登陆。

ExtMan的默认超级管理员帐户:[email protected],初始密码:extmail*123*,登陆成功后,建议将密码修改,以确保安全。

6、配置图形化日志

启动mailgraph_ext

  1. # /usr/local/mailgraph_ext/mailgraph-init start

启动cmdserver(在后台显示系统信息)

  1. # /var/www/extsuite/extman/daemon/cmdserver –daemon

加入开机自启动:

  1. # echo "/usr/local/mailgraph_ext/mailgraph-init start" >> /etc/rc.d/rc.local
  2. # echo "/var/www/extsuite/extman/daemon/cmdserver -v -d" >> /etc/rc.d/rc.local

使用方法: 等待大约15分钟左右,如果邮件系统有一定的流量,即可登陆到extman里,点“图形日志”即可看到图形化的日志。具体每天,周,月,年的则点击相应的图片进入即可。

配置cyrus-sasl

1、安装cyrus-sasl

删除系统的cyrus-sasl:

  1. # rpm -e cyrus-sasl –nodeps

安装新的支持authdaemon的软件包

  1. # yum -y install cyrus-sasl cyrus-sasl-plain

2、配置main.cf文件

Postfix的SMTP认证需要透过Cyrus-SASL,连接到authdaemon获取认证信息。
编辑main.cf

  1. # vi /etc/postfix/main.cf

增加如下内容:

  1. # smtpd related config
  2. smtpd_recipient_restrictions =
  3.         permit_mynetworks,
  4.         permit_sasl_authenticated,
  5.         reject_non_fqdn_hostname,
  6.         reject_non_fqdn_sender,
  7.         reject_non_fqdn_recipient,
  8.         reject_unauth_destination,
  9.         reject_unauth_pipelining,
  10.         reject_invalid_hostname,
  11.  
  12. # SMTP sender login matching config
  13. smtpd_sender_restrictions =
  14.         permit_mynetworks,
  15.         reject_sender_login_mismatch,
  16.         reject_authenticated_sender_login_mismatch,
  17.         reject_unauthenticated_sender_login_mismatch
  18.  
  19. smtpd_sender_login_maps =
  20.         mysql:/etc/postfix/mysql_virtual_sender_maps.cf,
  21.         mysql:/etc/postfix/mysql_virtual_alias_maps.cf
  22.  
  23. # SMTP AUTH config here
  24. broken_sasl_auth_clients = yes
  25. smtpd_sasl_auth_enable = yes
  26. smtpd_sasl_local_domain = $myhostname
  27. smtpd_sasl_security_options = noanonymous

3、编辑smtpd.conf文件

  1. # vi /usr/lib/sasl2/smtpd.conf

确保其内容为:

  1. pwcheck_method: authdaemond
  2. log_level: 3
  3. mech_list: PLAIN LOGIN
  4. authdaemond_path:/var/spool/authdaemon/socket

重新启动postfix:

  1. # service postfix restart

4、测试SMTP认证

通过以下命令获得[email protected]的用户名及密码的BASE64编码:

  1. # perl -e ‘use MIME::Base64; print encoolcode_base64("[email protected]")’

内容如下:
cG9zdG1hc3RlckBleHRtYWlsLm9yZw==

  1. # perl -e ‘use MIME::Base64; print encoolcode_base64("extmail")’

内容如下:
ZXh0bWFpbA==
然后本机测试:

  1. # telnet localhost 25

其过程如下:
Trying 127.0.0.1…
Connected to localhost.localdomain (127.0.0.1).
Escape character is ‘^]’.
220 mail.extmail.org ESMTP Postfix – by extmail.org
ehlo demo.domain.tld << 输入内容
250-mail.extmail.org
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-ENHANCEDSTATUScoolcodeS
250-8BITMIME
250 DSN
auth login << 输入内容
334 VXNlcm5hbWU6
cG9zdG1hc3RlckBleHRtYWlsLm9yZw== << 输入内容
334 UGFzc3dvcmQ6
ZXh0bWFpbA== << 输入内容
235 2.0.0 Authentication successful
quit << 输入内容
221 2.0.0 Bye
最后出现235 Authentication Successful 表明认证成功了。

配置courier-imap

1、安装Courier-imap

默认的courier-authlib及courier-imap都会增加系统自启动设置,因此下一次服务器启动将自动启动相应的authlib及POP3服务

  1. # yum -y install courier-imap

配置courier-imap
由于Courier-imap的IMAP目录是按UTF-7编码的,ExtMail目前还没有正式支持IMAP目录,因此需要屏蔽IMAP,只提供pop3服务。而就目前的使用情况来看,IMAP使用的非常少,绝大部分OutLook/Foxmail用户都习惯使用POP3而非IMAP。

  1. # vi /usr/lib/courier-imap/etc/imapd

修改内容如下:

  1. IMAPDSTART=NO
  1. # vi /usr/lib/courier-imap/etc/imapd-ssl

修改内容如下:

  1. IMAPDSSLSTART=NO

然后重新启动courier-imap:

  1. # service courier-imap start

测试POP3 请按如下步骤输入pop3命令测试其是否正常工作,注意蓝色的信息是我们输入到POP3服务器的(请首先登录extman自行建立[email protected]用户,密码:extmail)

  1. # telnet localhost 110

其过程如下:
Trying 127.0.0.1…
Connected to localhost.localdomain (127.0.0.1).
Escape character is ‘^]’.
+OK Hello there.
user [email protected] << 输入内容
+OK Password required.
pass extmail << 输入内容
+OK logged in.
list << 输入内容
+OK POP3 clients that break here, they violate STD53.
.
quit << 输入内容
+OK Bye-bye.
Connection closed by foreign host.

最后说明

至此,ExtMail的安装配置基本完成,如想配置内容,病毒过滤请到官方网站学习配置。登录extmail系统后台后,请及时修改密码或者用户名。最后需要确认的是,是否已经设置好邮件域名的MX记录或者A记录,这样才能正常收取邮件。

FAQ

1、64位系统可能安装不上courier-imap。请参考http://hahayong.blog.51cto.com/231965/530016