CategoryLinux

vsftp无法上传文件,报错553 Could not create file

vsftp无法上传文件,报错553 Could not create file

C:\Users\bl04322>ftp 192.168.2.109
连接到 192.168.2.109。
220 (vsFTPd 2.0.5)
用户(192.168.2.109:(none)): root
331 Please specify the password.
密码:
230 Login successful.

Continue reading

shell进程替换的问题

看如下一段代码,使用进程替换,可以避免使用管道引起的subshell,subshell不能修改当前shell的变量,有时候会带来不便。有了进程替换,我们就方便多了。

#!/bin/bash

#we use pipe, it will generate two subshell, so the while loop runs
#in a subshell, in which, it changes commands1 in the subshell which is not the
#commands1 of the current shell, as a result , we failed to change the commands1
#of the current shell

declare -a commands1
i=0
echo -e “line1\nline2” | while read aline ;
do
commands1[$i]=$aline
echo “commands1[$i]: ${commands1[$i]}”
i=$((i+1))
done
echo “outside loop commands1 has ${#commands1[@]} elements”
echo “outside loop commands1[0]=${commands1[0]}”
echo -e “\n\n”
这里,我们使用了pipe,会引起subshell,导致当前shell的commands1并不能被修改。

#get input from a file, so we run the while loop in the current shell,
#we can change the commands2 of the current shell
declare -a commands2
i=0
while read aline;
do
commands2[i]=$aline
echo “commands2[$i]=${commands2[$i]}”
i=$((i+1))
done (command)

<(command) 进程替换需要放置在一个命令的文件参数的位置,比如diff file1 file2就可以使用进程替换,这样我们就不是比较两个文件了,而是比较两个进程的输出: diff <(cmd1) <(cmd2) 然而对于diff来说,她什么都不知道。 实现原理:cmd执行时,将其标准输出重定向到/dev/fd/n的一个文件,而diff就读取n这个文件描述符,即将其标准输入重定向到了/dev/fd/n。所以diff还以为他是通过文件读取的内容。 进程替换与命令替换的区别: 命令替换有:$(cmd) 或者 `cmd`区别是,命令替换直接将命令的结果放在这里,而进程替换是将结果写入一个文件,而其他命令去读取这个文件。命令替换一般用来将执行结果赋值给一个变量,而进程替换一般用来将运行结果交给另一个命令去执行但是不能使用管道pipe.即不使用subshell。

VMWare+RAC中时间同步

VMWare+RAC中时间同步

vmware时间同步问题是一个难题,根据本人使用vmware经验,vmware的时间同步可以有如下几个方法:

一、用VMWARE TOOLS同步时间
注意:如果是用复制文件的方法创建虚拟系统,最好是在复制完文件之后分别安装VMWARE TOOLS。
1) 安装vmware tools
在 VMware 控制台上,以 root 用户身份登录。
1. 单击 VM,然后选择 Install VMware Tools。
2. rac1 – 虚拟机:单击 Install。
3. 双击桌面上的 VMware Tools 图标。
4. cdrom:双击 VMwareTools-1.0.1-29996.i386.rpm。
5. 完成系统准备:单击 Continue。
6. 打开一个终端并执行 vmware-config-tools.pl。
输入所需的显示大小:2 800*600
2) 与主机同步时间
要确保成功安装 Oracle RAC,虚拟机上的时间必须与主机上的时间同步。执行下面的步骤,以 root 用户身份同步时间。
1. 执 行”vmware-toolbox”以显示 VMware Tools Properties 窗口。在 Options 选项卡下,选择 Time synchronization between the virtual machine and the host operating system。您应该发现 tools.syncTime = “TRUE” 参数已经追加到虚拟机配置文件 G:\vm\rac\rac1\rac1.vmx 中。
2. 编辑 /boot/grub/grub.conf,并将选项”clock=pit nosmp noapic nolapic”添加到读取内核 /boot/ 的那一行。修改后的文件内容如下所示:
[root@rac1 ~]# more /boot/grub/grub.conf
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux AS (2.6.9-42.ELsmp)
root (hd0,0)
kernel /vmlinuz-2.6.9-42.ELsmp ro root=LABEL=/ rhgb quiet clock=pit nosmp noapic nolapic
initrd /initrd-2.6.9-42.ELsmp.img
title Red Hat Enterprise Linux AS-up (2.6.9-42.EL)
root (hd0,0)
kernel /vmlinuz-2.6.9-42.EL ro root=LABEL=/ rhgb quiet clock=pit nosmp noapic nolapic
initrd /initrd-2.6.9-42.EL.img

二、修改配置文件的方式
如果这样做还不行,则修改文件:C:\Documents and Settings\All Users\Application Data\VMware\VMware Server\config.ini
添加如下三行:
host.cpukHz = “1700000”
host.noTSC = “TRUE”
ptsc.noTSC = “TRUE”

其中:host.cpukHz要根据你的cpu的实际主频修改,例子中表示CPU主频是1.7G。
这个方法适用于windows系统,VMWARE SERVER系列软件。

三、RAC间同步
如果要用vmware安装RAC,则各个几点间时间必须一致,可以以一个节点作为标准,其他节点与该节点进行时间同步。
假如有两个节点:
A: 200.200.200.1
B: 200.200.200.2

以A作为时间标准,B节点用A节点时间进行同步。
1、在A节点开放37端口
最简单,但也最不安全的方法是关闭防火墙:iptables -F

2、在A节点启动时间服务
chkconfig time on
如果不启动该服务,则其他节点与该节点同步时间时会报错:Connect Refused

3、在B节点与A节点同步时间
rdate -s 200.200.200.1

可以做一个定时任务,每分钟同步一次。

原文地址 http://hi.baidu.com/%5Flinzi%5F/blog/item/89883c8f6d942eebf11f3679.html

————————————————————————–
如果正规的时间同步失效的情况下,可以考虑手工写脚本同步
采用rac1作为ntdp服务器,例子如下:
root@rac1 ~]# chkconfig ntpd on
[root@rac1 ~]# service ntpd start
rac2机器上的ntpd服务关闭
在/etc/rc.local加入以下内容
while [ 1 ]; do ntpdate rac1 1>/dev/null 2>&1; sleep 2; done &

我在linux下做rac就这样做的,没有任何问题。

vi查找替换

在vi中使用的查找替换方法

一、利用 :s 命令可以实现字符串的替换。

具体的用法包括:

:s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1

:s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1

:.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1

:1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1

:g/str1/s//str2/g 功能同上从上述替换命令可以看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索字符串的首次出现进行替换;g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。

vi/vim 中可以使用 :s 命令来替换字符串。以前只会使用一种格式来全文替换,今天发现该命令有很多种写法(vi 真是强大啊,还有很多需要学习),记录几种在此,方便以后查询。
:s/vivian/sky/ 替换当前行第一个 vivian 为 sky

:s/vivian/sky/g 替换当前行所有 vivian 为 sky
:n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky

:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky

n 为数字,若 n 为 .,表示从当前行开始到最后一行
:%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky

:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky
可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符

:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/
:%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/
1. :s/vivian/sky/ 替换当前行第一个 vivian 为 sky

:s/vivian/sky/g 替换当前行所有 vivian 为 sky
2. :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky

:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky

(n 为数字,若 n 为 .,表示从当前行开始到最后一行)
3. :%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky

:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky
4. 可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符

:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/
5. 删除文本中的^M

问题描述:对于换行,window下用回车换行(0A0D)来表示,linux下是回车(0A)来表示。这样,将window上的文件拷到unix上用时,总会有个^M.请写个用在unix下的过滤windows文件的换行符(0D)的shell或c程序。

· 使用命令:cat filename1 | tr -d “^V^M” > newfile;

· 使用命令:sed -e “s/^V^M//” filename > outputfilename。需要注意的是在1、2两种方法中,^V和^M指的是Ctrl+V和Ctrl+M。你必须要手工进行输入,而不是粘贴。

· 在vi中处理:首先使用vi打开文件,然后按ESC键,接着输入命令:%s/^V^M//。

· :%s/^M$//g

如果上述方法无用,则正确的解决办法是:

· tr -d “\r” < src >dest

· tr -d “\015” dest

· strings A>B
6. 其它

利用 :s 命令可以实现字符串的替换。具体的用法包括:

:s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1

:s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1

:.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1

:1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1

:g/str1/s//str2/g 功能同上

从上述替换命令可以看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索

字符串的首次出现进行替换;g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。

二、在shell中使用find结合grep进行文件的替换

# find ./ -exec grep str1 ‘{}’ \; -exec sed -i.bak s/str1/str2/g ‘{}’ \;

上面命令可以在当前目录下(包括子目录)查找包含str1的文件,自动替换成str2,并且生成源文件的bak文件

vi中的几种撤销

撤销和恢复*undo-redo*
在用户手册的 02.5节对它们的基本操作有解释。
1. 撤销和恢复操作的命令
undo-commands
2. 撤销操作的两种方法
undo-two-ways
3. 撤销操作的注释
undo-remarks
1. 撤销和恢复操作的命令 *undo-commands*
或 *undo* *”>* *u*
u 撤销 [count] 次更改。 {Vi: 仅有一级}
*:u* *:un* *:undo*
:u[ndo] 撤销一次更改。 {Vi: 仅有一级}
*CTRL-R*
CTRL-R 恢复 [count] 次没有完成的更改。 {Vi: 刷新屏幕}
*:red* *:redo* *redo*
:red[o] 恢复一个没有完成的更改。 {Vi: 没有 redo}
*U*
U 撤销最近对特定行所作的一系列更改。
{Vi: while not moved off of it}
由于最近所作的更改是被记住的,因此,你可以应用上面的撤销和恢复命令把文件恢复
到你所作的更改以前的状态。当然,你也可以重新应用这些修改,把文件恢复到执行恢
复操作以前的状态。
对待”U”命令和对待撤销/恢复 (undo/redo) 命令的是一样的。如此来看,”u” 命令撤销
一个 “U” 命令、’CTRL-R’ 命令再次撤销 “U” 命令。当 “U”, “u” 和 ‘CTRL-R’ 三个命
令混合使用时,你将注意到 “U” 命令决意将文件恢复到较早的 “U” 命令之前的状态。
这或许会令你困惑,但请你尽量习惯它。
“U” 命令总是把缓冲标志为改变状态.当 “U” 命令把改变的缓冲恢复到没有改变的
状态时,它还会认为缓冲处于改变状态。这时,使用 “u” 命令撤销改变直到缓冲的
状态变成不变.
2. 撤销操作的两种方法 *undo-two-ways*
撤销和恢复的工作方式依赖于 ‘cpoptions’ 中 ‘u’ 状态的标志。这里是 Vim(不包含
‘u’ 命令)和 vi-兼容(包含 ‘u’ 命令)两种模式的工作方法。在 Vim 这种状态下,
“uu” 命令撤销两次改变,在 vi-兼容模式下,”uu” 命令什么也不做(撤销一次撤销)。

不包含 ‘u’ 的 Vim 工作方法:
你能及时的以撤销命令回到以前的状态。那时,你也可以以使用恢复命令再次前进。如
果在撤销命令后你做了一个新的改变,那么,恢复命令将什么也不做。

包含 ‘u’ 的 Vi-兼容 工作方法:
撤销命令撤销包含以前的撤销命令在内的任何更改。恢复命令重复以前的撤销命令。但
它不重复一个改变的命令,如果你想如此,那么用 “.” 命令。

举例 Vim 模式 Vi-兼容 模式
“uu” 两次撤销 空操作
“u CTRL-R” 空操作 两次撤销
原理: Nvi 使用 “.” 命令而不是 CTRL-R 。不幸的是,这不是 Vi 兼容的。例如
“dwdwu.” 命令,在 Vi 中删除两个词,但在 Nvi 中,它什么也不做。

3. 撤销操作的注释 *undo-remarks*
改变的次数放置在 ‘undolevels’ 选项中.如果它的值是零,Vi-兼容 方法是适用的。如
果它的值是负的,任何撤销都是不可能的。当你内存紧张的时候使用这个。
缓冲的标志 (‘a 至 ‘z) 经常和文件一起被保存和恢复。 {Vi 这样做的时候有一点不同}
当所有的改变都被撤销时,缓冲的标志是认为不改变的。这时退出 Vim 是使用 “:q”
而非”:q!” 。{在 Vi 不是这样} 注意这是相对文件的最后写入而言的。和被写入的比较
,在写入 “:w” 后写入 “u” 实际上改变了缓冲的状态,因此,此时,缓冲的状态认为是
改变的。
当手册 |
folding
| 被使用时,折叠将不被保存和恢复。只有完全在折叠内部的改变才被
保存,因为折叠第一和最后一行是不改变的。
有限的寄存器也可以被用作撤销删除。你每一次删除文件,寄存器都被放 “1. 因此,寄
存器的内容将从 “1. 变为 “2 ,依次类推。但 “9 将被丢失,现在,你可以通过命令
‘”1P’ 得到最近大部分被删除的文件。(同样,如果被删除的内容是最后被删除或复制
的,那么’P’ 或 ‘p’ 同样也可得到你要的结果,因为他们都拷贝未命名的寄存器的内容
)。使用'”3P’ 你可以得到前三个被删除的文本。
*redo-register*
如果你想得到多于被删除文件一部分的内容,你可以重复使用 “.” 这样一个特殊的命令
。这样将会增加所使用寄存器内的数字。所以,你如果先使用 “”1P” ,那么接下来的
“.” 就意味着 ‘”2P 。重复这将会造成所有被编号的寄存器被插入。
例如: 如果你用 ‘dd….’ 删除了内容,那么用 ‘”1P….’ 可以恢复。
如果,你不知道被删除的内容在哪一个寄存器,你可以用 :display 命令。一种替代的方
法是在第一个寄存器试用 ‘”1P’ ,如果它不是你要找的用 ‘u.’ 命令。这将会移走第一
次放进的内容,然后在第二个寄存器重复上述命令。重复使用 ‘u.’ 直到你得到想要的内
容。
vim:tw=78:ts=8:ft=help:norl:
以下内容比较易懂一些,对此进行详细说明:
撤销与重做
假设现在你删得太多了。当然,你可以重新输入需要的内容。不过,你还有一个更简单的
选择。”u” 命令撤销上一个编辑操作。看看下面这个操作:先用 “dd” 删除一行,再敲
“u”,该行又回来了。
再给一个例子:把光标移到第一行的 A 上:
A young intelligent turtle
现在输入 xxxxxxx 删除 “A young”。结果如下:
intelligent turtle
输入”u” 撤销最后一个删除操作。那个删除操作删除字符 g,所以撤销命令恢复这个字符:
g intelligent turtle
下一个 u 命令恢复倒数第二个被删除的字符:
ng intelligent turtle
下一个 u 命令恢复 u,如此类推:
ung intelligent turtle
oung intelligent turtle
young intelligent turtle
young intelligent turtle
A young intelligent turtle
Note:
如果你输入 “u” 两次,你的文本恢复原样,那应该是你的 Vim 被配置在 Vi 兼容
模式了。看这里修正这个问题:|not-compatible|。
本文假定你工作在 “Vim 的方式”。你可能更喜欢旧的 Vi 的模式,但是你必须
小心本文中的一些小区别。

重 做
如果你撤销得太多,你可以输入CTRL-R(redo)回退前一个命令。换句话说,它撤销
一个撤销。要看执行的例子,输入CTRL-R两次。字符 A 和它后面的空格就出现了:
young intelligent turtle
有一个特殊版本的撤销命令:”U” (行撤销)。行撤销命令撤销所有在前一个编辑行
上的操作。 输入这些命令两次取消前一个 “U”:
A very intelligent turtle
xxxx 删除 very
A intelligent turtle
xxxxxx 删除turtle
A intelligent
用 “U” 恢复行
A very intelligent turtle
用 “u” 撤销 “U”
A intelligent
“U” 命令本身就是一个改变操作,”u” 命令撤销该操作,CTRL-R 命令重做该操作。
有点乱吧, 但不用担心,用 “u” 和 CTRL-R 命令你可以切换到任何你编辑过的状态。

unix的历史、起源、流派及标准

任何一门知识都是先研究它的历史开始的,因为任何一门知识都不是一下子出现和成熟起来的,研究过去,是为了更了解现在。对于unix更是如此,如果不知道它的历史,就会对现在五花八门的unix搅得眼花缭乱,看过很多关于unix历史的介绍,能真正讲明白的不多,因为it世界本来就变化的快,有的来不及进入历史就消失了。但这一篇讲unix历史的文章,读来一点也不枯燥,也不会把你搞蒙,甚至还很有趣,如果你也想知道现在许多种unix的来历,那么还是看看吧!

1960年代末期,Bell Telephone Laboratories, General Electric 和
Massachusetts Institude of Technlogy合作研发一个多使用者的作
业系统, Multics.此计划於1969年三月取消. 取消後的故事大家有点
熟,又有点不熟,这里把key part点出来:

* Ken Thompson在DEC PDP-7上写了个叫Space Travel的电玩.
* PDP-7欠缺程式发展环境,so, Ken Thompson + Dennis Ritchie写了UNIX出来.
* Ken Thompson写了B语言(由BCPL演化而来的直译语言)
* Dennis Ritchie把B改成了著名的C语言.
* 1973年11月Unix version 4,使用C语言改写而成.

Unix的第一篇Paper “The UNIX Time Sharing System”由Ken Thompson和Dennis
Ritchie
提出,在1973年十月the ACM Symposium on OS (SOSP)中提出来.而在次年七月的
the Communications of the ACM发表.这是UNIX与外界的第一次接触.

UNIX免费流传的原因

1956年AT&T受到反托拉斯法调查.调查期间AT&T与联邦政府签订了一个协议,
不能经营与电话电报无关之业务.BTL隶属於AT&T.

UNIX在SOSP发表後,学术界对UNIX及其原始码索求不断,所以AT&T便免费的
提供原始码给学术界,此举造成了UNIX的广泛流传.

Berkeley的Computer Science Research Group, CSRG对UNIX的发展做了很多的贡献.
Berkeley的UNIX称为BSD UNIX. BSD对UNIX的贡献有virtual memory, TCP/IP, Fast
File System(FFS), reliable signals, socket介面.

4.4BSD把原来的VM换成Mach的VM,并引进了Logged File System. (LFS).
CSRG做完BSD4.4之後就关门大吉了.原因有:

* 补助的不足
* BSD的特色已经可以在商业系统上见到了(所以不用DIY了)
* 系统已经大到不是一个小组可以维护的程度了

有一家公司Berkeley Software Design, Inc.(BSDI)成立来继续行销4.4BSD,
从事商业行为.他们的BSD叫做BSD/386. BSDI宣称BSD/386经过了Berkeley
的改写,已经没有AT&T的原始码了.不过AT&T还是对Berkeley和BSDI提出告诉.
导火线是BSDI的电话: 1-800-ITS-UNIX.此一诉讼延後了4.4BSD的发表.
终於1994年二月四日,双方达成和解,撤销告诉. BSDI发表了不含AT&T宣称
的原始码的4.4BSD原始码,称为4.4BSD-Lite. 接下来的故事就是在网路上
的传奇,你可以在386BSD的讨论区看到.

UNIX System #

反拖拉司法调查结束後将AT&T拆成数个子公司, BTL改名为AT&T Bell Laboratories.
并且AT&T被允许进入电脑市场. AT&T发表的商业版UNIX计有System III,
System V, System V Release 2 (SVR2) System V Release 3, System V Release
4/4.2

System V引进了许多新的特色(相对於旧的UNIX),如regions架构的虚拟记忆体(和
BSD的不太相同), IPC, remote file sharing, shared libraries,
STREAMS架构等等.

UNIX的商业化

商业化的UNIX也为UNIX争添不少特色,如SunOS的Network File System (NFS),
vnode/vfs interface支援多重档案系统,一个新的VM架构(为SVR4所采用)
AIX是第一个支援journaling file system的商业UNIX. ULTRIX (DEC的旧UNIX)
是支援multiprocessor UNIX的先趋之一.

Mach

Mach是Carnegie-Mellon大学(CMU)的microkernel(微核心)作业系统.(1980年代)

随著功能越来越多,UNIX也日渐庞大复杂而难以掌握, microkernel的概念就是
把Kernel去芜存菁,仅留下重要的部分,其馀的功能都用user阶层的程式(称作
server)来达成就好了,藉此减低kernel的复杂度.

Mach设计目标有

* 与UNIX相容
* 在单处理器,多处理器上都能执行
* 适合分散式运算环境

最普遍的版本是Mach2.5,是许多商业UNIX如DEC OSF/1, NextStep的基础.
Mach3.0才是真正纯粹的完全Microkernel化版本.

标准何在

UNIX的标准就像他的版本一样多.本小节仔细的介绍了各个标准与其命运.
讨论到最新的资讯为Novell将UNIX商标卖给了X/Open,以及Sun Solaris 2.5版.

1986年IEEE指定了一个委员会制定了一个一个开放作业系统的标准,称为
POSIX (Portable Operating Systems Interface,最後加上个X,为了好听,也是因为
本质上是UNIX的标准).<-这是我听说的,不是书上写的.

X/Open是一个由国际性电脑厂商组成的机构,成立於1984.其目的比较务实,
不是为众多的UNIX标准再添加一个.而是把重心放在汇集现有的标准,
整理出一个共通的环境.XPG (X/Open Portability Guide)就是他的大作.
目前UNIX这个商标应该是由X/Open所拥有.

除了标准以外,UNIX厂商也有合纵联盟.

UI, Unix International,是AT&T和Sun为主的联盟.主要的产物有SVR4和OpenLook.
OSF, Open Software Foundation为以IBM,DEC,HP为首的公司投资的子公司.
OSF对UNIX的贡献有Motif标准,DCE (Distributed Computing Environment).

在NT出来搅局後,UI瓦解了,AT&T不要UNIX了(专心於他的plan9作业系统?),
SVR4的传人变成了Sun的Solaris,不过Sun也不再坚持OpenLook,同时支援CDE
(Common Desktop Environment,讲白话一点就是Motif).

UNIX的发展简史
60年代由麻省理工学院、通用电器公司、AT&T贝尔试验室组成一个专家小组,研制一个MULICS,是一个灵活的交互式操作系统。
60年后期,BELL脱离该组织,失去了灵活的交互式操作系统。
1990年,有一个叫Ken.Tompson写了一个SPACE TRAVEL的游戏,是在PDP-7上写的,为了更有效地发挥PDP-7的强大功能,托普森和另一位科学家Dennis Ritchie开发了一个新的操作系统UNIX。此前Dennis创建了C语言。
1973年Ken和Dennis用C语言重写了UNIX。UNIX成为世界上第一个用高级语言写的操作系统。
C语言使UNIX更容易移植,移植是UNIX最重要的优越性
70年代UNIX版本不断更新,74年后,世界上所有的大学都可以以极小的代价获得UNIX的源代码,由此产生了很多重要的分支,包括一个BSD版,加州伯克利大学Berkeley Software Distribution。80年代AT&T重新命令UNIX版。

  1. 1973年,美国高等院校开始使用UNIX
  2. 1974年,Version 4
  3. 1976年,Version5,6
  4. 1978年,Bell开发出系统 III
  5. 1979年,Berkekey分校发布BSD 3
  6. 1982年,Berkekey分校发布BSD 4.2
  7. 1983年,Bell开发出系统V
  8. 1983年,Berkekey分校推出第一个内含TCPIP的BSD UNIX
  9. 1985年,AT&T 推出SVR2,即系统V,RELEASE 2
  10. 1987年,AT&T 推出SVR3
  11. 1989年,AT&T 推出SVR4

82年后,AT&T发布商业版,SYSTEM3以前均为内部使用。
BSD起源于1974年,伯克利研究小组毕业的学生Bill Joy开发出更好性能的UNIX。如CSH、VI、虚拟存储环境,这些性能后来被柔进了SYSTEM 5。
1974  BSD     1979  2BSD     1982  3BSD
1984  4BSD     1987  4.3BSD  4.5BSD
在微机领域,71年分支出XENIX
81年   XENIX2.3  XENIX3.0  XENIX5.0遵守SVID
85年 AT&T宣布一个标准SVID
(Standard Called System U Imterface Defination)
85年出现SYSTEM U/386与SVID完全兼容。
当时主要的UNIX(XENIX、SYSTEMU、BSD)占80%。
BSD 一般出现在大学
SYSTEM为用于商业领域
XINIX 只用于PC

1.2 UNIX标准化
1984年欧州5家成立X/OPEN协会。
XPG3――XPG4
SPE C 1170
1985年IEEE公布POSIX 1003
1988年5月 DEC、IBM、HP 公布OSF(BSD)AES
1988年12月AT&T SUN公布UI (SYSTEM V)
1992年12月NOVELL购买USL转让给X/OPEN
1993年9月WINDOWS NT出现使OSF和UI和解,产生COSE。包括XPG4、POSIX、SUID3、SVR4.3、AES、MOTIF、TCPIP。
常见商业版本
SUN SOLORIS纯SYSTEM V
IBM AIX4.3
HP-UX
IRIX遵守POSIX
Tru64 UNIX 成熟、统一对COSE遵守最好。SPEC1170 MACH微内核完整、大而全。
LINUX 自由软件、微内核、多平台支持各种协议。

 

 

tar的详细用法

tar命令
tar 文件是几个文件和(或)目录在一个文件中的集合。这是创建备份和归档的佳径。

tar 使用的选项有:

-c — 创建一个新归档。

-f — 当与 -c 选项一起使用时,创建的 tar 文件使用该选项指定的文件名;当与 -x 选项
一起使用时,则解除该选项指定的归档。

-t — 显示包括在 tar 文件中的文件列表。

-v — 显示文件的归档进度。

-x — 从归档中抽取文件。

-z — 使用 gzip 来压缩 tar 文件。

-j — 使用 bzip2 来压缩 tar 文件。

要创建一个 tar 文件,键入:

tar -cvf filename.tar directory/file

可以使用 tar 命令同时处理多个文件和目录,方法是将它们逐一列出,并用空格间隔:

tar -cvf filename.tar /home/mine/work /home/mine/school

上面的命令把 /home/mine 目录下的 work 和 school 子目录内的所有文件都放入当前
目录中一个叫做 filename.tar 的新文件里。

要列出 tar 文件的内容,键入:
tar -tvf filename.tar

要抽取 tar 文件的内容,键入
tar -xvf filename.tar

这个命令不会删除 tar 文件,但是它会把被解除归档的内容
复制到当前的工作目录下,并保留归档文件所使用的任何
目录结构。譬如,如果这个 tar 文件中包含一个叫做
bar.txt 的文件,而这个文件包含在 foo/ 目录中,那么,
抽取归档文件将会导致在你当前的工作目录中创建
foo/ 目录,该目录中包含 bar.txt 文件

tar 默认不压缩文件。

要创建一个使用 tar 和 bzip 来归档压缩的文件,使用 -j 选项:
tar -cjvf filename.tbz file

以上命令创建了一个归档文件,然后将其压缩为 filename.tbz 文件。如果你使用 bunzip2 命令为 filename.tbz 文件解压,filename.tbz 文件会被删除,继之以 filename.tar 文件。

你还可以用一个命令来扩展并解除归档 bzip tar 文件:
tar -xjvf filename.tbz

要创建一个用 tar 和 gzip 归档并压缩的文件,使用 -z 选项:
tar -czvf filename.tgz file

这个命令创建归档文件 filename.tar,然后把它压缩为 filename.tgz 文件(文件 filename.tar 不被保留)。
如果你使用 gunzip 命令来给 filename.tgz 文件解压,filename.tgz 文件会被删除,并被
替换为 filename.tar。

你可以用单个命令来扩展 gzip tar 文件:
tar -xzvf filename.tgz

 
一. tar

1.压缩一组文件为tar.gz后缀。
# tar cvf backup.tar /etc
#gzip -q backup.tar

# tar cvfz backup.tar.gz /etc/
tar zxvf XXXX.tar.gz

tar jxvf XXXX tar.bz2

2.释放一个后缀为tar.gz的文件。
#gunzip backup.tar.gz
#tar xvf backup.tar

# tar xvfz backup.tar.gz

3.用一个命令完成压缩
#tar cvf – /etc/ | gzip -qc > backup.tar.gz

4.用一个命令完成释放
# gunzip -c backup.tar.gz | tar xvf –

5.如何解开tar.Z的文件?
# tar xvfz backup.tar.Z

# uncompress backup.tar.Z
#tar xvf backup.tar

6.如何解开.tgz文件?
#gunzip backup.tgz

7.如何压缩和解压缩.bz2的包?
#bzip2 /etc/smb.conf
这将压缩文件smb.conf成smb.conf.bz2
#bunzip2 /etc/smb.conf.bz2
这将在当前目录下还原smb.conf.bz2为smb.conf
注: .bz2压缩格式不是很常用,你可以man bzip2

suse配置ftp服务器

一、安装
Suse的图形用户界面做的很不错,所以安装过程也比较简单。

1、打开Yast,Software→Software Management;

2、刚开始使用Suse的软件管理器非常的不习惯,找不到所需的信息在什么地方,可是用了一段时间之后,就感觉它的分类方式更加方便,也为用户提供了更多的信息。在Filter→Package Groups,在下面的树形列表中Productivity→Networking→Ftp,也可以展开Ftp节点,选择其中的Servers节点;

3、在左侧的软件包列表中选择vsftpd,然后点击下方的Accept按钮,会提示插入光盘;

4、插入所需的光盘后,系统会自动开始安装,安装完毕,可以在下面的File List选项页中查看vsftpd相关的所有文件。

二、启动服务
安装完成后,vsftpd是作为一个独立的服务启动,不接受xinetd的管理。系统会自动在Service列表中添加名称vsftpd的服务。启动服务的步骤如下:

1、Yast→System→System Services(Run level);

2、在服务列表中选择vsftpd,点击下方的Enable按钮,启动服务,Finish。

注意,在启动vsftpd时可能会不能启动,有时是因为它所依赖的服务没有启动,如syslog,这时选中syslog,点击Enable按钮。如果还是不能启动,可以重新启动xinetd服务,然后再启动vsftpd服务。

三、遇到的问题

1、只允许匿名用户登录
现象:ftp连接过程中,提示输入用户名,输入本机已有用户名angel,得到提示:530 This FTP server is anonymous only,登录失败。

原因:安装vsftpd后,其默认为匿名FTP服务器,只允许匿名用户登录。

解决方法:vsftpd有三种服务器方式:匿名方式、本地方式和虚拟用户方式,此处需要修改vsftpd的配置将其设为本地方式。vsftpd的配置文件位于/etc/目录下,名称为vsftpd.conf。关于该配置文件在网上已经有很多高手做了详细的分析和讲解,并且该文件内部的注释也比较详细,这里就不再一一讲解了。下面只说明几处需要修改的地方:

将local_enable=YES前的#去掉,使其可用,表示允许本地用户登录;增加listen_port=21配置项,设置监听端口为21;该步骤可选,不允许匿名用户登录,将anonymous_enable=YES的值改为NO,根据实际需要设置。

重启vsftpd服务:service vsftpd restart。启动后,在进行测试,使用本地用户angel及其密码登录,成功。注意:以上测试是在本机(或使用SSH登录后)进行。

2、其他机器不能连接该服务器
现象:本机测试通过后,在其他机器(Windows或Redhat)上使用ftp 192.168.1.8连接该服务器,得到Connection closed by remote host或Connection timed out提示信息,连接失败。

原因:Suse的防火墙阻止了外来机器对FTP所用的端口的访问。

解决方法:放开防火墙对FTP所使用的20和21端口的限制,步骤如下:

i> Yast→Security and Users→Firewall;ii> 在左侧的列表中选择Allowed Services,令人感到以外的是,即使安装FTP服务器,在Servces to Allow列表中也没有FTP服务可供选择,但是SSH、HTTP、HTTPS、Samba等都赫然在列,所以要使用高级设置。点击右下方法的Advanced按钮,打开高级设置对话框;iii> 在TCP Ports中输入20 21,注意两个端口号之间使用空格分开,OK;iv> Next→Accept,重新测试,连接成功,使用Suse系统中已有的angel及其密码登录,成功。

注意,虽然这里有些问题是在Suse下遇到,但是在其他操作系统中的vsftpd的配置中依然适用。
OpenSUSE 自带了下列 FTP 服务器端程序,自行选择一个:

* pure-ftpd
* vsftpd
* ftpd (包含在 krb5-apps-servers 软件包中)

vsftpd

特性

* 可以与 xinetd 结合使用
* 安全第一的设计原则
* 小,轻量级软件

安装

* 从 YAST/软件管理 搜索安装 vsftpd。(安装盘上有)

设置

vsftpd 有两种模式,独立模式和 xinetd 模式。
独立模式需要你在开机后手动以 root 执行 vsftpd 命令启动 FTP 服务器,xinetd 模式则不一直运行FTP后台,只有有用户向你的 FTP 服务器发出 ftp 请求时立即启动 FTP 服务器后台程序。后者需要机器启动时打开 xinetd 服务,在 SUSE/SLED 系列是默认的设置。先确定你要选择哪种模式,然后进行之后的设置。
xinetd 模式
* 在 xinetd 中打开,可以手动编辑 /etc/xinetd.d/vsftpd 文件把 disabled yes 改成 disabled no,或者使用命令来实现

chkconfig vsftpd on* 启动 xinetd (如果未运行)。

/etc/init.d/xinetd start* 确定 xinetd 在机器启动时运行

chkconfig xinetd on* root权限编辑文件 /etc/vsftpd.conf,确定 listenYES 前面加了 #。如果没有,加上保存。

独立模式
* root权限编辑文件 /etc/vsftpd.conf,确定 listenYES 前面没有 #。如果有,去掉保存。

检查运行状况和防火墙设置
* 检查 FTP 服务器是否在正常运行,默认配置文件是允许匿名用户只读的,/srv/ftp/ 作为对外 FTP 的主目录。
* 如果必要,调整防火墙设置。如果是用默认的SuSEFirewall2,在 YaST-系统-/etc/sysconfig 编辑器,network-SuSEfirewall2 把 ftp 添加到 FW_SERVICES_EXT_TCP,比如你还要打开 ssh 那么

FW_SERVICES_EXT_TCP”ftp ssh”* 如果你需要被动模式 FTP 和 nat,在 YaST-系统-/etc/sysconfig 编辑器,network-SuSEfirewall2

FW_LOAD_MODULES”ip_conntrack_ftp ip_nat_ftp”
重启之后,vsftpd 将会按照你选择的模式运行。

简明配置

配置要修改文件 /etc/vsftpd.conf.
* 启用向服务器的写权限,去掉下面一行前面的#

write_enableYES* 允许本地用户登录,去掉下面一行前面的#

local_enableYES* 默认,一个用户不能访问自己主目录之外的目录,要禁用去掉下面一行前面的#

chroot_local_userNO* 禁用匿名用户登录

anonymous_enableNO

配置文件

* /etc/logrotate.d/vsftpd
* /etc/pam.d/vsftpd
* /etc/vsftpd.conf
* /etc/vsftpd.chroot_list
: 此文件包含对服务器上所有FTP内容有权限的用户名。对其他用户来说,他们在服务器上的主目录对他们显示为根目录。
* /etc/shells
: 在允许本地用户登录之前,系统默认检查是否有有效的用户 shell。以防 PAM 认证不可用的情况。
* /etc/ftpusers
: 此文件包含*禁止*FTP登录的用户名,通常有 “root”, “uucp”, “news” 之类,因为这些用户权限太高,登录 FTP 误操作危险性大。
1. 以root身份登录系统

2. 到java.sun.com去下载JDK1.5.0 for LINUX的rpm. 应该是个jdk-1_5_x-rc-linux-i586-rpm.bin的文件

3.通过chmod +x jdk-1_5_x-rc-linux-i586-rpm.bin命令使其获得可执行权限

4.通过 rpm -ivh jdk-1_5_x-rc-linux-i586-rpm.bin来进行安装

5.安装完毕,JDK安装在/usr/java/目录下

6.设置环境变量(写入/etc/profile中)

export JAVA_HOME = /usr/java/jdk1.5
export PATH = $PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export CLASSPATH=.:/usr/java/jdk1.5/lib:/usr/java/jdk1.5/jre/lib:$CLASSPATH

okay了键入 java -version 如果出现相关JDK版本信息,证明成功.

为了开发方便,俺又下了个ECLIPSE做IDE,这样以后在LINUX也可以做JAVA开发了,真好

ECLIPSE的安装就简单多了,下来(一个zip压缩包)后直接unzip到你想要的目录即可,我将其解压到/opt下了。

scp和rsync的实际应用

近段时间工作需要做了些scp和rsync的异地安全备份,整理了一下,希望多大家有用。

scp的备份指南:
需求:用scp自动完成异地文件的定时copy
难点:如何让异地主机建立安全的信任关系

1、在A机器上用root运行ssh-keygen,将生成/root/.ssh/identity和/root/.ssh/identity.pub两个文件;

2、在A机器上运行scp /root/.ssh/identity.pub test@192.168.1.10:/upload/.ssh/authorized_keys(假设B机器的IP地址为192.168.1.10,B机器上开了用户test,要上传到的目录是/upload,需输入密码)。目的是将本地的identity.pub放到远程机器上并改名为authorized_keys,这样就建立了新任主机,以后就不需要每次ssh都需要输入密码了;

3、通过crontab建立脚本,例:30 02 * * 1-5 scp /home/data/* test@192.168.1.10:/upload。
(每天2:30am自动将/home/data下面的所有文件以test用户名传到远程主机192.168.1.10的/upload目录中);

认证原理:
如果你希望从A作为用户user1 SSH 到B 作为用户user2, 若要用RSA键对法认证且不需要密码,则B上的ssh 后台程序拿出~user2/.ssh/authorized_keys中的与A有关的RSA公钥来对A上的以user1身份运行的ssh客户程序进行挑战,前面我们已经把A上的identity.pub拷贝到B上作为authorized_keys了。则A保持私钥identity,而B上的sshd又拿出A的公钥来挑战,因此成功,你可以加很多行到authorized_keys以允许其它服务器的公钥可以加进来。

scp特点:
使用ssl加密,安全性高。

rsync的备份指南:
需求:用rsync完成异地文件的同步
难点:如何建立异地信任关系

1、在A主机上(rsync服务器)上编译安装rsync,需要版本在2.4.3以上(http://rsync.samba.org),在/etc目录下建立rsyncd.conf文件,内容如下:
uid = nobody
gid = nobody
use chroot = no # 不使用chroot
max connections = 4 # 最大连接数为4
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock # 日志记录文件

[test] # 这里是认证的模块名,在客户端需要指定
path = /home/test # 需要同步的目录
comment = test folder
uid = root
ignore errors # 可以忽略一些无关的IO错误
read only = yes # 只读
list = no # 不允许列文件
auth users = rsynctest # 认证的用户名,如果没有这行,则表明是匿名
secrets file = /etc/test.scrt # 认证用户密码文件

2、在/etc下建立test.scrt文件,输入:
用户名:密码
例:rsynctest:testrsync
将文件属性修改为600(千万注意)

3、启动rsync服务:rsync –daemon (rsync运行在tcp 873端口,可以通过netstat -an|grep LISTEN察看)。

4、在B主机上(rsync客户机)上建立/etc/test文件,内容为A主机的密码,例:
testsync

5、用crontab建立脚本,例:0 21 * * 1-5 rsync -vzrtp –progress –delete –password-file=/etc/test rsynctest@192.168.1.10::test /home/rsynctest

rsync中的参数:v是verbose,z是压缩,r是recursive,tp都是保持文件原有属性如属主、时间
的参数。–progress是指显示出详细的进度情况,–delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致。–password-file=/etc/test来指定密码文件,这样就可以在脚本中使
用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有属主可读(600)。

rsynctest@192.168.1.10中,rsynctest是指定密码文件中的用户名,192.168.1.10是A主机的IP地址::test是指模块名[test],也就是在/etc/rsyncd.conf中自定义的名称。最后的/home/rsynctest是备份到本地的目录名。
(也可以用-e ssh的参数建立起加密的连接,然后和scp中信任主机的办法一样如法炮制)
(在上面实例中的rsynctest并不是真实的用户,可以根据自己需要文本定义,这也是使用rsync的一大好处)

rsync的特点:
特性如下:

1、可以镜像保存整个目录树和文件系统。
2、可以很容易做到保持原来文件的权限、时间、软硬链接等等。
3、无须特殊权限即可安装。
4、优化的流程,文件传输效率高。
5、可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
6、支持匿名传输。

rsync的功能还很强大,深入的眼就可以到官方网站上了解。

===========================================================================
copy 本地的档案到远程的机器上
scp /etc/lilo.conf k@net67.ee.oit.edu.tw:/home/k
scp 10201_clusterware_linux_x86_64.cpio root@172.19.4.1:/app/soft_back/

copy远程机器上的档案到本地来
scp k@net67.ee.oit.edu.tw:/etc/lilo.conf /etc

保持从来源 host 档案的属性
scp -p k@net67.ee.tw:/etc/lilo.conf /etc

如果想使用特定端口 使用 scp -p(大写) 如 scp -p 1234 k@net67.ee.tw:/etc/lilo.conf /etc

RedHat上编译安装vsftpd

以root账户登录RedHat bashell

[root@redhat ~]# tar -zxvf vsftpd-2.0.5.tar.gz //解压vsftp source文件

[root@redhat ~]# cd vsftpd-2.0.5 //进入解压后的目录
[root@redhat vsftpd-2.0.5]# more INSTALL //看看安装说明。比如要做什么工作。是个英文文档.
[root@redhat vsftpd-2.0.5]# useradd nobody //这里需要加一个nobody用户。大家可以使用finger nobody查看下。看是否有这个用户。用就不需要加了
[root@redhat vsftpd-2.0.5]# mkdir /usr/share/empty //这一步同上。服务器需要一个empty的空目录放在/usr/share/下。可以使用ls /usr/share/empty查看。如果存在就不需要了。这步也可以跳过

如果需要开启匿名用户访问,需要做下面几步工作
[root@redhat vsftpd-2.0.5]# mkdir /var/ftp/ //创建供匿名用户使用的目录
[root@redhat vsftpd-2.0.5]# useradd -d /var/ftp ftp //创建ftp用户并且指定家目录为/var/ftp,这个步骤一般的系统也有。如果创建提示:user ftp exists(FTP用户存在)就表示此用户已经存在。

继续下一步
[root@redhat vsftpd-2.0.5]# chown root.root /var/ftp //设置/var/ftp,也就是ftp用户的家目录属组和属主都是root,为了安全。这步还是需要的
[root@redhat vsftpd-2.0.5]# chmod og-w /var/ftp //更改权限,去掉属组和其他人的写权限

上面这写工作做完了。下面就可以便宜了
[root@redhat vsftpd-2.0.5]# make //编译二进制文件
[root@redhat vsftpd-2.0.5]# make install //安装,安装的时候可以看到安装的相关文件。
[root@redhat vsftpd-2.0.5]# cp vsftpd.conf /etc/ //拷贝配置文件
[root@redhat vsftpd-2.0.5]# cp RedHat/vsftpd.pam /etc/pam.d/ftp //拷贝PAM安全验证文件此为验证文件所在的目录

[root@redhat vsftpd-2.0.5]# vi /etc/vsftpd.conf
然后按,跳到行尾。设置 pam_server_name=ftp(要与你的PAM文件同名);userlist_enable=YES(用户列表的用户不允许登入服务器)。然后:wq保存退出

[root@redhat vsftpd-2.0.5]# cp vsftpd.conf.5 /usr/local/man/man5
[root@redhat vsftpd-2.0.5]# cp vsftpd.8 /usr/local/man/man8

基本到这里。所有工作就做完了。但是还要说点东西

默认情况下vsftp是以超级守护进程(xinetd)运行的。

启动方式(二种方式)
[root@redhat vsftpd-2.0.5]# service xinetd restart //重启超级守护进程就等于启动了vsftp

另外一个方式,就是独立运行需要修改配置文件
[root@redhat vsftpd-2.0.5]# vi /etc/vsftpd.conf

然后按,跳到行尾。加上listen=YES。然后:wq保存退出

这样就可以使用下面这条语句启动
[root@redhat vsftpd-2.0.5]# /usr/local/sbin/vsftpd & //后台启动vsftp
[root@redhat vsftpd-2.0.5]# echo “/usr/local/sbin/vsftpd &” >> /etc/rc.local //追加到启动脚本上

上面两种方式可随意使用。我还对启动脚本做了一些实验(以service vsftpd start这种方式启动),最终还是失败了。但是我想说。我努力了。由于本人对shell编程不是很了解。未能写出一个使用的脚本,哎。学!可能还是有办法解决。使用RPM方式安装一个vsftp,然后看看init.d里面的脚本是怎么写的。

下面贴一个别人的关于配置的文章

#匿名用户
anonymous_enable=NO
#anon_mkdir_write_enable=YES
#anon_upload_enable=YES
#本地用户能否登陆
#local_enable=YES
#是否可写
write_enable=YES
#VSFTPD独立运行 (用vsftpd /etc/vsftpd.conf &)以及下载速度的限制
listen=YES
max_clients=600
max_per_ip=5
tcp_wrappers=YES
connect_from_port_20=YES
#anon_max_rate=51200 (56k)
#local_max_rate=512000 (560k)
#如何更改路径
#anon_root=/var/ftp/pub
#local_root=/var/ftp
#如何随意增加一个用户目录
通过useradd -d /path/dir -M name 以及chmod ? /path/dir 可以达到
#如何对磁盘限额
用quota对/etc/fstab进行限制,然后对特定用户进行限制

补充:

补充一:如何把用户限制在家目录中呢?

我们要自己建一个文件,在/etc目录中

#touch /etc/vsftpd.chroot_list

以beinan这个用户为例

在vsftpd.chroot_list这个文件中,把beinan添上去就行。

然后改/etc/vsftpd/vsftpd.conf文件,找如下的两行

#chroot_list_enable=YES

#chroot_list_file=/etc/vsftpd.chroot_list

把前面的#号去掉,也就是这样的

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd.chroot_list

如果没有这样的两行,就可以自己添加上去也是一样的。

设置好后,重新vsFTPD服务器。

补充二:打开vsFTP服务器的日志功能:

把下面xferlog_file前面的#号对掉,也就是把vsftp的log功能打开,这样我们就能在/var/log目录下查看vsftpd.log。这是vsFTP的日志功能,这对于我们来说是极为重要的。

#xferlog_file=/var/log/vsftpd.log

补充三:如何让绑定IP到vsFTP?也就是说,如何让用户只能通过某个IP来访问FTP。其实这个功能很有意思。如果绑定的是内网的IP,外部是没有办法访问的。如果绑定的是对外服务的IP,内网也只能通过对外服务的IP来访问FTP

在/etc/vsftpd/vsftpd.conf中加一行,以我的局域网为例,请看第一帖中的操作环境,这样外网就不能访问我的FTP了,内网也可能通过192.168.0.2来访问FTP

listen_address=192.168.0.2

加完后,要重启vsFTP服务器。

© 2019 Init dba

Theme by Anders NorenUp ↑