2007年12月27日星期四

经典*nix命令

[bash]
id #显示用户的uid,gid,groups信息
echo $LOGNAME #显示登录的用户名
bc #计算表达式,输入2+3 回车计算出5; quit 退出
df -k #以K字节显示文件系统使用情况
[/bash]

一行命令杀进程inetd
Kill 命令
[bash]
kill -1 `ps -e | grep inetd |awk '{print $1}'`
netstat -a | grep bat #检查 batserv 程序是否处于监听状态。
[/bash]

more 显示文件的时候,想退出按 q 键,到最前按 g< 键,h 键显示帮助,到最后按 G
[bash]
env #查看环境变量
uname -a #查看本机型号
hostname #显示主机名
domainname #显示主机域名
[/bash]

存储, 压缩文件
[bash]
tar -zcvf
tar -cvf target.tar sourcefilelist #打包
tar -xvf target.tar #解包
tar -tvf target.tar #查看包内文件目录结构
compress .tar #文件压缩为.z
uncompress .z文件 #解压缩文件
file #查看当前目录下所有文件的格式 file * | grep commands
which 程序名 #查看命令文件的位置,这个是一个单独的文件
type 程序名 #查看命令文件的位置,这个是bash内置命令
script #从键入script开始,所有终端显示内容将被输入到一个文件里(默认为typescript),直至 exit 或者 Ctrl+D 退出script环境。这在希望记录大段输入以及输出内容时很有用。
compress filename #压缩文件
compressdir directory-name #压缩目录
uncompress filename     #反压缩文件
uncompressdir directory-name #反压缩目录
[/bash]


搜索含有某个指令的脚本:
[bash]
find /etc 2>/dev/null | xargs grep 'awk ' 2>/dev/null
[/bash]

说明:

  • find /etc 查找/etc 目录下的所有文件,并显示文件名

  • 2>/dev/null 把所有的错误信息,如权限错误,不能访问等重定向倒看不到的虚拟设备,只显示有用信息。(1 代表"标准输出”,2 代表“标准错误输出”)

  • | 把前一个命令的输出以管道的方式传给后面的命令

  • xargs 对输入的每一个参数,循环执行后面的命令

  • grep 'awk'在指定文件中查找字符串,这里的输入文件时 xargs 命令传过来的,每次处理一个 find 输出的文件名



[bash]
find . | xargs grep "abc" #全文检索,打印出来包含关键字的文件名和行数据
[/bash]

[bash]
find . -exec grep -l "string" {} \; #全文检索,只显示包含关键字的文件名
find . -name *.cpp grep -l "字符串" {} \; #切换用户并使用该用户的环境配置:su - user
[/bash]

[bash]
#删除一些旧的文件,但是遇到windows的长文件名时的删除方法
find ./ -mtime +300 | awk -F \0 '{printf("\"%s\"\n",$0)}' | xargs -n 1 rm -f
#查找某个目录下的具有包含某个字符串的文件并删除:
find . -type f -exec grep "232" {} \; -exec rm {} \;
find . -type f -exec grep -q "123" {} \; -exec rm {}\;
#删除当前计算机系统日期前2天产生的所有文件,包括子目录下所有目录和文件:
find . -type d -atime +2 -exec /bin/rm -r '{}' 2>/dev/null \
find . -type f -atime +2 -exec /bin/rm -r '{}' 2>/dev/null \
grep 字符串 * #在当前目录(不包括子目录)里搜索文件内容
find . | xargs grep aaa #在当前目录(包括子目录)里搜索文件内容
find . | xargs grep typedef.*TIASTRU #同时包含词"typedef"和"TIASTRU"
find . -exec grep -l "string" {} \; #在当前目录全文查找string串
find . -name file1.c
[/bash]

正则表达式

  • .* 匹配任意字符

  • .. 匹配2个字符

  • abc?(2|9)1 ?匹配0或1个2或9

  • abc*([0–9]) *匹配0或多个0-9

  • abc+([0–9]) +匹配1或多个0-9

  • no@(one|ne) @严格匹配one和ne

  • no!(thing|where) !不匹配thing或where



unix上查看本地的ip地址和网卡信息:
[bash]
hostname #显示机器名
cat /etc/hosts
netstat -in
[/bash]

[bash]
chmod +x filename #增加执行属性
rm -f file #删除文件
rm -rf directory #删除文件夹
cd a* #就可以进入比如:appp的文件夹
ps -x #查看属于自己的进程
ps -ef | grep ap* #查找以ap开头的进程
uname -a #显示操作系统os类型
[/bash]

[bash]
ls -Rl | more #以分页方式列出目录下所有文件子目录
[/bash]

查看系统中的使用者:
[bash]
who or finger
su username #进入其他帐号
who am i
[/bash]

vi模式下
[bash]
vi *.sql #假如vi编辑多个文件,用:n切换下一个文件
ESC + :!sh or :!ksh #执行外部命令
ESC + :20,24 w file #将文件20-24行放到file文件中
vi -R #只读打开文件
q! #离开并放弃保存
wq #离开并保存
w #保存但不离开
ESC+:232 #代表跳到252行
ESC+:/banner #代表跳到查找包含banner词的行,用 n 还可继续查
ESC+: r #vi嵌入外部文件 r 文件路径
ESC+:! ls #vi执行外部命令
[/bash]

[bash]
man ls #在线帮助man+命令
mv #移动或更改文件、目录名称
pwd #当前目录
cat/more cat file1 | more
kill PID #杀死进程
[/bash]

[bash]
df #查看磁盘中可以使用的自由空间
df -t #查看使用百分比例
[/bash]

[bash]
diff #比较两个文件
[/bash]

more 或 vi 向下翻页用 CTRL+D,向上翻页用CTRL+B
[bash]
l -rt #显示最近更新的文件
[/bash]

unix默认shell采用ksh
在命令行下,使用时先按“ESC”键

  • j 向后查找

  • k 向前查找

  • / 查找关键字,回车匹配查找,按n显示下一个满足条件命令行,该功能类似vi中操作



用 ESC+k 或 j 上翻或下翻显示历史命令的时候,如何编辑命令呢
k 上翻,l 光标后移,x 删除光标所在的字符,向上箭头把光标移到最后,i 输入新字符


关机
[bash]
shutdown -y 0
[/bash]

[c]
sprintf(szYhtId, "%08s", szTemp); #字符串不够8位左补0:不要忘了s
szYhtid = atoi(yhtid); #转换为INT类型
[/c]

本地工作站与远端工作站之间文件传输必须拥有远端工作站之帐(号及密码,才可进行传输工作)
执行格式:ftp hostname or ftp ip_address
Example :
[bash]
ftp doc #与远端工作站 doc ,进行文件传输
Name (doc:user-name): 输入帐号
Password (doc:user-name): 输入密码
[/bash]

FTP 命令

  • help 列出 ftp 文件传输,可使用之任何命令。

  • !ls 列出本地工作站,目前目录下之所有文件名。

  • !pwd 列出本地工作站,目前所在之工作目录位置。

  • ls 列出远端工作站目前目录下之所有文件名。

  • dir 列出远端工作站目前目录下之所有文件名(略同於 UNIX 的 ls -l 指令).

  • dir . | more 同上,但每页会暂停(可能不适用 Unix 以外的 ftp)。

  • pwd 列出远端工作站目前所在之目录位置。

  • cd dir1 更改远端工作站之工作目录位置至 dir1 之下。

  • get file1 将远端工作站之文件 file1 ,拷贝到本地工作站中。

  • put file2 将本地工作站之文件 file2 ,拷贝到远端工作站中。

  • mget *.c 将远端工作站中,副文件名为 c 之所有文件,拷贝到本地工作站中。

  • mput *.txt 将本地工作站中,副文件名为 txt 之所有文件,拷贝远端工作站中。

  • prompt 切换交谈式指令(使用 mput/mget 时不用每个文件皆询问yes/no)。

  • quit 结束 ftp 工作。

  • bye 结束 ftp 工作。

  • lcd 切换本地目录



注:
1. 从PC与工作站间的文件传输也可通过在 PC端的 FTP指令进行文件传输,指令用法与上所述大致相同。
2. ![cmd[args]] 在本地机中执行交互shell、exit回到ftp环境,如!ls *.zip


例:
[bash]
ftp -n -i -v << !
open 172.10.1.11
user test test
prompt
as
quote type b 9
lcd /home/usr/test/yht
cd /home/test/test
mput *
bye
!
[/bash]
注:prompt指设置交互提示,这里关闭

2007年12月7日星期五

Samba 配置

1. 安装Samba服务器
如果用户在安装Linux 时已经安装了Samba ,就无需再安装了可以通过下列命令确定是否已经安装了Samba

[root@ smb_server root]# rpm –qa | grep samba
samba-commom -2.2.7a-7.9.0
samba-2.2.7a-7.9.0
samba-client-2.2.7a-7.9.0
redhat-config-samba-1.0.4-1
samba-swat-2.2.7a-7.9.0

若出现这5个软件包,则表示已经安装了Samba ,否则必须安装Samba 。

[root@smb_server root]# mount /dev/cdrom /mnt/cdrom

将光盘挂载到 /mnt/cdrom目录]

[root@smb_server root]# cd /mnt/cdrom/RedHat/RPMS

切换到放置rpm文件的目录

[root@smb_server root]# rpm -ivh samba-commom -2.2.7a-7.9.0i386.rpm

这是Samba 必备的程序,必须安装

[root@smb_server root]# rpm -ivh samba-2.2.7a-7.9.0.i386.rpm

安装Samba 服务器程序,可以使我Windows 主机访问Samba 服务器共享的资源。

如果需要使Linux 主机访问Windows 主机上的共享资源,则还应该安装Samba 客户端程序。

[root@smb_server root]# rpm -ivh samba-client-2.2.7a-7.9.0.i386.rpm


2. Samba的全局参数的配置
Samba 最主要的配置文件是 /etc/samba/smb.conf,其中有很多选项可以设置,但作为初学者,只需要掌握其中一小部分选项的设置就可以配置所需要的Samba服务器了。在了解基本配置的基础上,就能很快架设一个基本的Samba服务器。在基本配置文件中,也只用到其中一小部分命令选项。

全局参数的配置在[global]字段中,没有出现(或被注释)的参数,Samba 采用的是默认配置。

# This is the main Samba configuration file. You should read the
# smb.conf(5) manual page in order to understand the options listed
# here. Samba has a huge number of configurable options (perhaps too
# many!) most of which are not shown in this example
#================== Global Settings ============================

[global]
#这是配置文件中关于全局参数的设置部分。
…………
workgroup = SMBGROUP
#这是设置服务器所要加入的工作组的名称,会在Windows 的“网上邻居”中能看到MYGROUP工作组,可以在此设置所需要的工作组的名称。

netbios name=smb-server
#设置出现在“网上邻居”中的主机名。默认情况下,则使用真正的主机名。

server string = Samba Server
#这是设置服务器主机的说明信息,当在Windows 的“网上邻居”中打开Samba 上设置的工作组时,在Windows 的资源管理器窗口,会列出“名称”和“备注”栏,其中“名称”栏会显示出Samba服务器的NetBios名称,而“备注”栏则显示出此处设置的“Samba Server”。当然,可以修改默认的“Sambe Server”,使用自己的描述信息。

hosts allow = 192.168.1. 127
#这里是设置允许什么样的IP地址的主机访问Samba服务器。默认的情况下,hosts allow选项被注释,表示允许所有IP地址的主机访问。

guest account = pcguest
#设置当访问那些被设置了“guest ok=yes”参数的资源时所要使用的帐号名。默认的帐号为”nobody”,如果不想用默认的值,则应该去掉注释用的分号,用你想要的帐号(如pcguest、 zhangsan等 ),然后,你必需将这一新帐号加入到/etc/passwd文件中去。

client code page=950
设置客户端访问Samba 服务器时所使用的字符编码表(code page),默认值为850,如果Samba 服务器要使用年中文名称来来命名共享的资源,要将此值改为950

log file = /var/log/samba/%m.log
#这一选项要求Samba服务器为每一个连接的机器使用一个单独的日志文件,指定文件的位置,名称。Samba会自动将%m转换成连接主机的NetBios名。

max log size = 0
指定日志文件的最大容量(以KB为单位),设置为0,表示没有限制。默认值为5000。

max disk size =1000
#设置能够共享的最大磁盘空间,单位为MB,默认值为0,表示不作任何限制。

max open file =100
#设置同一客户端最多能打开文件的数目,默认值为10000个。

security = user
#设置Samba服务器的安全等级。默认情况下,使用user等级。
#Samba服务器一共有四种安全等级。
share: 使用此等级,用户不需要帐号及密码可以登陆Samba服务器。
user: 使用此等级,由提供服务的Samba服务器检查用户帐号及密码。
server: 使用此等级,检查帐号及密码的工作可指定另一台Samba服务器负责。
domain: 使用此等级,需要指定一台Windows NT/2000/XP服务器(通常为域控制器),以验证用户输入的帐号及密码。

; password server =

#如果安全等级为“server”或“domain”,则使用此选项指定要验证密码的主机名。

password level = 8
username level = 8
#设置当验证用户口令和帐号时最多允许几个大小写字不同。默认值为0。

encrypt passwords = yes
#设置当Samba客户端将帐号及密码传送到服务器端时,是否采取密码加密的方式。客户的操作系统如果是Windows 95 OSR2 及NT SP3以后的版本,应该将此选项的值设为yes,默认值为no。

smb passwd file = /etc/samba/smbpasswd
#设置在Samba服务器上存放加密的密码文件的位置(注意:Samba服务器与Linux采用不同的密码文件)。


3. 设置Samba密码文件
smb.conf 文件中有“smb password file =/ect/samba/smbpassword”一行设置项,现在就要创建该设置项所指定的/ect/samba/smbpassword密码文件(若是用Windows NT/2000Server 来验证密码,则可以跳过此段内容)。以root帐号登录,然后按下列步骤进行:

[root@smb_server root]#cat /etc/passwd | mksmbpasswd.sh > /etc/samba/smbpasswd
[root@ smb_server root]# chmod 500 /etc/samba
[root@ smb_server root]# chmod 600 /etc/samba/smbpasswd

此步骤是将未加密的/etc/passwd文件转换成加密的smbpasswd文件。基于保密的原则,将/etc/samba目录的权限设为500,该文件的权限设为600,以避免他人取得密码文件。

完成之后再利用smbpasswd命令,设置/ect/samba/smbpassword文件中每个帐号所使用的密码。(下面以fred为例。注意:此处设置的密码是fred要访问Samba服务器的密码,并非登录Linux 主机的密码,默认设置”UNIX password sync=YES”, 则登录Linux 主机的密码将改变,与Samba服务器的密码一致,如果希望这两个密码不一致,则设置”UNIX password sync=NO”)

[root@smb_server root]# smbpasswd fred
New SMB password: 此处输入密码
Retype SMB password: 重新输入密码
Password changed for user fred 看到这一句表示密码设置成功。


4. 启动Samba服务器
可以执行下面的命令来启动Samba服务器:

[root@ smb_server Root]# service smb start

当能看到下面的显示,就表示启动成功。

Starting SMB service [确定]
Starting NMB service [确定]

如果要暂停或重新启动Samba服务器,只要将上面命令中的start 改为stop或restat就可以了。

也可以让系统在每次开机时就启动Samba服务器。执行ntsysv命令,进入Service设置画面,选择smb选项,单击确定即可。

5. 测试Samba配置文件
设置好smb.conf文件之后,执行下面的命令测试smb.conf的设置语法是否正确。

[root@smb_server root]# testparm
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Processing section "[printers]"
Processing section "[tmp]"
Processing section "[public]"
Processing section "[fredsdir]"
Loaded services file OK.
Press enter to see a dump of your service definitions

表示正确。
检查正常后,一定要记得执行

[root@smb_server root]# service smb restart

命令,重新启动Samba服务器。

6. 设置共享资源参数

comment
#针对共享资源所作的说明、注释部分

browseable
#设置用户是否可以看到此共享资源。默认值为yes,若将此参数设置为no,用户虽然看不到此资源,但是拥有权限的用户仍可直接输入该资源的网址来访问该资源。

writable
#设置共享的资源是否可以写入。若共享资源是打印机,则不需设置此参数
#设置可访问的用户。系统会自动将%S转换成登录帐号。

create mode
# 设置文件的访问权限,默认值为0744。

directory mode
设置目录的访问权限,默认值为0755。

path
#若共享资源是目录,则指定目录的位置;若为打印机,则指定打印机队列的位置。

read only
#设置共享资源是否只读或可以写入,默认值为yes。若共享资源为打印机时,此参数无任何意义。这一项与writable相反。

Public
#等同于guest ok选项,表示是否允许用户不使用帐号和密码便能访问此资源。如果起用此功能,当用户没有帐号和密码时,则会利用“guest account=”所设置的帐号名登录。该选项默认值为no,即不允许没有帐号即密码的用户使用此资源。
avalible
#设置是否启用此共享资源。默认值为yes。若将此参数设置为no,则不管其他参数设置为什么,所有人均不得使用此资源。
valid users


7. 配置Samba文件共享举例

[global]
…………
#采用前面的[global]配置

[homes]
#用来配置用户访问自己的目录

comment = Home Directories
#注释

browseable = no
#用户私人目录,不给别人浏览(并不是不允许别人访问)

writable = yes
#允许用户写入自己的目录

valid users = %S
#可访问的用户局限于用户自己。%s会被自动转换为登录帐号。

create mode = 0664
#文件的访问权限

directory mode = 0775
#目录的访问权限
#This one is useful for people to share files

[tmp]
#这个部分为所有用户提供临时共享的方式
comment = Temporary file space
#注释文字

path = /tmp
#指定位置

read only = no
#可以读写

public = yes
#允许用户不用帐号和密码访问

[public]
# 这个部分为所有用户提供可以共同访问的目录。允许staff组用户写入,但其他用户只可访问,不能写入。

comment = Public Stuff
path = /home/samba
public = yes
writable = yes
printable = no
write list = @staff

# write list参数是用来设置具有写权限的用户列表。这里只允许staff组的成员有写的权限
[fredsdir]
#这个部分用来设置某一用户fred的访问权限。

comment = Fred’s Service
path = /usr/fred/private
valid users = fred
#只有fred可以访问(注意:即使security=share,也不代表用户登录Linux 主机后可以访问任意资源。)该共享目录

public = no
writable = yes
printable = no

说明:配置文件修改后,要重新用testparm测试配置文件,重新启动Samba 服务器程序。

8. 使用共享的目录
现在以Windows 2000为例,介绍***用户如何读取Linux 所共享的资源。
A.以fred帐号登录Windows ,然后在“网上邻居” 中找到前面所设置工作组smbgroup。
B.双击工作组smbgroup图标,将看到Samba 服务器smb_server
C.双击服务器smb_server图标,若在Windows 中使用的密码与Linux 的用户密码相同,即可以看到服务器上所共享的资源(表示登录Linux 主机成功)。
D.若在Windows 中使用的密码与Linux 的用户密码不同,则会出现“输入网络密码对话框”,输入st1在SMB中设置的用户密码(由于设置了”unix password sync=YES”,所以此处输入的密码一定要是smb密码)
E.双击所要访问的共享目录(如***sdir),出现所示“输入网络密码”窗口,输入***的密码(因为***sdir共享目录只允许***访问,所以在此要输入***的smb密码)

9.配置Samba打印共享
Samba中涉及打印共享的参数主要有以下几个

在[global]字段中涉及共享打印机的主要字段
printcap name =/etc/printercap
#这是指定打印机配置文件的位置。打印守护进程读取printcap文件中的配置信息,监视打印机的工作情况。

load printers
#指定是否要加载打印机(使打印机可以共享)。默认值为yes。
#如果用户想要自动载入打印机列表,而不是个别地安装,则必须在此指定以上两项

printing =cups
# 指定打印系统类型。只有在你的打印系统不是标准的情况下,才必须指定,否则不必指定。指定打印系统类型将影响到smb.conf文件中与打印机相关的命令(如print,lpq,lppause,lpresune)的执行方式。默认的打印系统类型为bsd,其他的类型还有 sysv,plp,lprng,hpux,qnx,cups。


10. 配置共享打印机
A. 在Linux Samba 服务器上配置本地打印机
B. 获得 Adobe Postscript Driver
按下列步骤进行
(1)到http://www.adobe.com/下载简体中文版Adobe Postscript Driver,文件名为Winstchs.exe。
(2)在Windows 环境(如Windows 2000 Professional)下安装。
(3)进入Windows 计算机C:WINNTsystem32spooldrivers目录,从子目录w32x86和WIN40中挑选出表1所示的8个文件,并且将文件名字母全部改为大写。













ADFONTS.MFM ADOBEPS4.HLP ADOBEPSU.DLL DEFPRTR.PRO
ADOBEPS4.DRVADOBEPS5.DLLADOBEPSU.HLPICONLIB.DLL

(4)在Linux 计算机上创建/usr/share/cups/目录, 表1所示的8个文复制到此目录下。
C.设置smb.conf的打印共享配置

[global]
…………
#按上文将有关共享打印机的几个主要配置参数写到此处。

[printers]
#这部分用于配置打印机共享,所有用户都可以共享打印机。

comment = All Printers
#注释文字

path = /var/spool/samba
#设置打印机队列的位置,用户必须自行创建该目录,存放打印的临时文件

browseable = no
#不允许浏览共享打印机

# Set public = yes to allow user ’guest account’ to print
guest ok = no
#必须用帐号和密码才可以访问共享打印机

writable = no
#共享打印机,writable必须设置为no

printable = yes
#允许用户更改打印机队列中的文件

[fredsprn]
#该共享的打印机只允许fred私人使用

comment = Fred’s Printer
valid users = fred
path = /home/fred
#打印机队列是fred的用户目录,要主义fred必须有权访问该目录。

printer = freds_printer
#设置共享打印机的名称,此参数又可以写成“printer name=”,该参数如果放在[global]字段,所有打印服务用到的打印机名都将是一样的

public = no
writable = no
printable = yes

D. 为Windows 客户机准备打印驱动

为了给Windows 客户机准备打印驱动,可以运行cupsaddsmb命令。执行如下的操作将打印机驱动程序放置在/etc/samba/drivers目录下。

创建/etc/samba/drivers目录

[root@smb_sever root] #mkdir /etc/samba/drivers

运行cupsaddsmb命令,以root身份执行该命令,共享所有打印机

[root@smb_sever root]# cupsaddsmb -a -U root

E. 从Windows 客户机访问Samba 共享打印机
当配置好Samba 共享打印机之后,合法用户就可以在Windows 的网上邻居看到被共享的打印机。双击共享的打印机,在弹出的窗口中确认安装此打印机驱动即可。

11. 在Linux环境下应用Samba服务
在Linux平台客户机上使用Windows 计算机提供的共享资源或Linux Samba 服务器提供的共享资源,通常有两种方法。分别是使用smbclient命令和使用smbmount命令。

现在以使用Windows 计算机提供的共享资源为例分别介绍这两种方法。先在Windows 中设置共享的文件夹,Windows 计算机NetBios名为win,IP地址为192.168.0.3,共享的文件夹共享名为share_dir。Linux计算机名为lin,且安装了smb组件。

A. 使用smbclient命令
在Linux计算机上,执行以下命令

[root@lin root] # smbclient -L win

或者

[root@lin root] # smbclient -L 192.168.0.3

结果在Linux计算机上列表显示出win所提供的所有共享信息。
在Linux计算机上,执行以下命令

[root@lin root] # smbclient //win(或IP地址)/share_dir -U tom

其中tom是Windows 计算机上的用户。系统提示输入tom的密码,输入正确后,系统提示
smb:>

此时,就可以向使用FTP客户的方法使用smbclient。

使用smbmount命令
知道某台主机所共享的资源后,执行smbmonut命令将远程共享挂载到本地。

[root@lin root] # mkdir –p /mnt/smb/win_share_dir

先创建挂载点目录

[root@lin root] #smbmount //win/share_dir /mnt/smb/win_share_dir

将远程共享//win/share_dir//win/share_dir挂载到本地目录/mnt/smb/win_share_dir

这样就可以象访问本机目录一样操作此挂载的目录了。若要卸载已挂载的目录,则执行umount命令即可。

[root@lin root]#umount /mnt/smb/win_share_dir

Samba系统简介

什么是Samba
Samba在市场上并不是一个新面孔。它最初出现在大家面前的时间是1992年。Samba系统通过利用越来越多的开放源代码软件,获得了丰富多彩的性能,并且变得越来越稳定。随着Samba系统的不断进化,对于那些正在考虑将其文件和打印解决方案迁移到Linux的系统管理员来说,如今它已经成为这些管理员的一个真正的可选项。

另外,在Linux系统上构建存储解决方案也是一种非常便宜的方法。首先,在机箱中安装一个支持IDE RAID 卡,安装Linux,启动 Samba,然后你就可以一个在自己的网络上安排大量存储的存储空间,这是一种成本非常低的实现方法。对于那些移动专家的笔记本电脑的备份以及需要进行长期归档工作的企业来说,这种解决方案是非常理想的。

SMB协议
在安装Samba系统之前,很有必要了解一下Samba是如何工作的。Samba之所以能够工作,是因为它模仿的是 Windows内核的文件和打印共享协议,该协议称之为SMB协议(Server Message Block )。SMB在Windows出现之前就已经存在了。该协议可以追溯到上个世纪的80年代,它是由英特尔、微软、IBM、施乐以及3com等公司联合提出的。虽然在过去的20年中,该协议得到了扩展,但是该协议的基本理论仍然是相同的。

微软已经将SMB改名为公共因特网文件系统(CIFS,Common Internet File System )。这在一定程度上是由于它想与最初的基于NetBIOS的SMB保持一定的距离。最初,NetBIOS是一个伟大的工具,但是渐渐地显示出该工具无法处理在内部网络中连接到计算机上的全部计算机的个数,或者在因特网上无法显示连接到当前计算机上的计算机的个数。

Samba也执行了SMB(或者叫做CIFS)的一个版本,这个版本在很大程度上与大多数的Windows版本兼容。有时候,微软 Samba系统会出现崩溃,例如在Windows 2000的补丁包中,当正常的认证方式被改变时,就会导致Samba系统的崩溃。唯一的能够让Samba重新工作的方法是通过注册表来将认证方式改回来。尽管存在这些细小的缺陷,虽然这些缺陷在大量集成之后总是会出现的,但是,无论是从Windows连接到Linux还是从Linux连接到Windows 机器,Samba系统对于实现文件和打印服务来说总是很稳定的。

提示: 本文将以Red Hat 9.0上的Samba系统作为讨论的基础。但是你不要因此而考虑太多。因为无论你运行的是哪个版本的Linux,Samba系统在实质上是相同的,但是,在具体的配置细节上可能会有所不同。

安装Samba
自从Red Hat 9发行之后,Samba系统随之也发行了它的更新版本。正因为如此,你需要从RedHat网站上下载新的可用的更新版本。通过点击这里,可以登录Red Hat的Samba系统更新页面。

一旦你有了更新版本,你就可以使用下面的命令来安装他们:
[bash]
rpm -ivh samba-2.2.7a-8.9.0.i386.rpm samba-common-2.2.7a-8.9.0.i386.rpm samba-client-2.2.7a-8.9.0.i386.rpm samba-swat-2.2.7a-8.9.0.i386.rpm
[/bash]
使用这个命令可以安装Samba系统的所有组件,包括一个称之为 swat 的配置工具。虽然我在本文中将不使用swat,但是你应该注意到这是一个非常有用的工具,该工具可以帮助你在Samba系统中配置更为复杂的选项。

Samba的基本配置
控制Samba安装的文件在/etc/samba 目录下,其文件的名字是 smb.conf。要想让 Samba 系统工作,需要对这个文件进行一些基本的编辑工作。

首先你必须改变 Hosts Allow 行中的内容,使该行中包含你的局域网信息。如果你不对此行进行编辑的话,你的网络中的任何人都无法访问你的系统。此行中应该包含你的局域网的前缀。例如,我的实验室网络运行在10.254.1.0/24上。因此我可以将10.或者10.254.或者10.254.1 放在host allow 行中来允许我的网络中所有的机器来使用这个Samba系统。当然,我指定的网络地址越少,对于其他人来说,就有越多的机会来使用我的 Samba服务器。

密码
要确保Samba系统正确运行的最后一步是要对每个用户帐户至少设置一个密码。由于在 Linux 和 Windows 系统中保存密码的方式各不相同,所以对于SMB的密码数据库来说,你需要使用一个工具来进行管理。你可以在控制台提示中输入smbpasswd -a root 命令来实现这个目的。

在这种情况下,该工具将提示你对选定的用户输入密码,然后确认密码(这里假设是个根用户)。一旦完成这个过程,根用户就可以从一个Windows机器中连接到Samba的配置文件中指定的缺省共享文件夹。在这种情况下,根用户的home 目录以及一个选定的安装好了的打印机就已经可以使用了。

测试从Windows到Linux的连接
最快捷的测试激活Samba功能的Linux系统方法是:在同一个网络中寻找一个安装了 Windows系统的机器。点击Windows系统中的开始菜单中的运行,在运行窗口中,输入两个反斜杠\\,后面紧跟你的装有Samba服务器的IP地址。使用IP地址的目的在于消除你的网络中可能存在的域名解析方面的问题。如果你愿意的话,你可以使用机器的名字来测试,但是要注意的是这种使用名字的方法可能会无法实现你的测试目的。

此时系统应该会提示你输入用户名与密码。输入你在前面已经输入的根用户的名字和密码就可以了。此时你应该可以看到一个文件夹,该文件夹中包含一个名字为"root"的文件夹和一个名字为"Printers"的文件夹。即使在你的Samba服务器上没有安装打印机,也会出现"Printers"文件夹。

如果没有出现输入用户名和密码的提示,这可能意味着你的Linux机器上的Samba服务器还没有运行起来。你可以检查一下,以确认 smbd 进程确实已经启动,检查的方法是在命令行中输入ps -ea | grep smbd 就可以知道该进程是否启动。如果没有返回任何信息,说明Samba进程可能会由于某种原因没有启动。可以到/var/log/samba目录下查看一下日志文件,通过这些文件你可能可以找到导致进程没有启动的原因。

测试从Linux到Windows的连接
同样,从Linux系统中建立一个到 Windows 机器的连接也是非常简单的事情。第一步要确保你已经创建了一个挂载点来安装网络共享。例如,我用/mnt/smb来进行测试。在你以根用户登录时,你可以在根驱动器下通过使用mkdir /mnt/smb命令来创建这个目录。

一旦完成了目录的创建,你就可以使用mount命令来加载网络共享。在这里,对于mount命令和Samba系统来说,有三个关键因素需要你注意。首先,文件系统类型是smbfs。这意味着你在mount命令行中必须指定-t smbfs。其次,在远程机器上的用户名最好不要和本地机器上的用户名相同,所以必须指定一个用户名。你可以使用一下的命令来实现:-o username=domain\\user

需要注意的是,在 username 中使用的是两个反斜杠来分离域名和用户名。之所以要这样,是因为命令行解释器将这两个反斜杠只解释为一个反斜杠。

最后,在用于共享的UNC路径中,Windows一般都是使用反斜杠。在UNIX命令解释器中,由于存在反斜杠的翻译问题,所以在mount命令中使用前向反斜杠。所以,最后的命令应该如下:
[bash]
mount /mnt/smb //server/share -t smbfs -o username=MYDOMAIN\\Administrator
[/bash]
系统会提示输入你的密码,并且一旦你成功的输入了你的密码,你就可以通过你已经定义的挂载点来访问远程共享文件夹中的文件,在本文中该文件夹就是 /mnt/smb

未来的方向
Samba的支持并不是没有局限性。目前的Samba系统能够较好的和Windows2000和Windows XP客户端进行合作,但是它还没有完全集成到微软的活动目录结构中。这也是它的3.0版本所要实现的。虽然现在已经可以得到公开的Beta测试版本,但是在作者写作本文时,该版本仍在进一步研发中。

Samba系统的真正目的在于帮助简化混合操作系统环境中所存在的挑战。对于大企业来说,在共享文件和共享打印的访问方面存在巨大挑战,而Samba系统的目的在于改变这种现象。