一、安装Samba
sudo apt-get install samba samba-common
新建共享目录并设置权限
#新建共享目录default simon@Ubuntu:~$ sudo mkdir /home/wwwroot/default #用户就对共享目录有了写权限 simon@Ubuntu:~$ sudo chmod 777 /home/wwwroot/default/
创建Samba配置文件
#备份现有配置文件 simon@Ubuntu:~$ sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak #修改配置 simon@Ubuntu:~$ sudo vim /etc/samba/smb.conf
文件中相关属性如下:
1)全局设置部分[global]
security = user
这行设置了samba的安全等级,Samba一共可以设置四个安全等级,由底到高分别为:
share 这个选项表示任何人都可以不需要输入密码登录。
user 这个是Samba的默认级别,要求每个用户必须输入密码才能登录。
server user级别的密码都是保存在本机上,而server级别的密码和用户名都保存在另一台主机上。
domain 这个级别要求网络里必须有一台Windows的域控制器,验证工作由域控制器来完成。
需要注意,只要输入用户名和密码的级别,其用户名一定首先也是Linux系统内的用户
workgroup = MSHOME
这部分是Windows主机的工作组名,Windows主机必须在同一个工作组中
server string = %h server(Samba,Ubuntu)
这个选项是显示在Windows上的信息,可以自定义,其中%h为Samba配置文件中的变量,代表了主机名,即使用hostname命令得到的主机名
map to guest = bad user
当 security = user 时,这个选项必须注释掉,如:# map to guest = bad user
2)共享设置部分
添加一个共享文件夹设置如下:
[share] 共享文件名,不需要与实际文件名一致 comment = my share directory 对这个共享分支的描述 path = /home/share 系统的共享目录,必须为绝对路径 public = yes 是否允许所有人都能够看到此目录,no为看不到 writable = yes 是否允许用户在此目录下可写,no为不可些,如果可写,还需要目录具有写权限 read only = yes 设置用户是否只读 vaild users = username 设置只有 username 用户有效
我的配置如下:
security = user [myshare] comment = my share directory path = /home/wwwroot/defalut browseable = yes writable = yes
新建访问共享资源的用户和设置密码
#用户创建,这个用户属于smb组 simon@Ubuntu:~$ sudo useradd admin #设置密码 simon@Ubuntu:~$ sudo smbpasswd -a admin New SMB password: Retype new SMB password: Added user admin.
启动 SAMBA 服务
#重启smb服务 sudo service smbd restart # 停止 SAMBA 服务 sudo /etc/init.d/smbd stop # 启动 SAMBA 服务 sudo /etc/init.d/smbd start
故障测试指令
testparm
在 WINDOWS 下访问共享目录
# 在资源管理器,或浏览器中直接输入即可, "192.168.153.155"为服务器 IP \\192.168.153.155 #或者在"运行"窗口中输入"\\192.168.153.155"-->回车-->双击打开myshare-->回车-->输入用户名和密码-->回车-->访问成功。
二、安装SVN
root@Ubuntu:~# apt-get install subversion
建立svn仓库
#建立svn目录: root@Ubuntu:/home# mkdir /home/svn root@Ubuntu:/home/svn# mkdir project #执行完毕后project目录有svnadmin创建的目录和文件 root@Ubuntu:/home/svn# svnadmin create /home/svn/project/ root@Ubuntu:/home/svn# ls ./project/ conf db format hooks locks README.txt root@Ubuntu:/home/svn# mkdir test #执行完毕后test目录有svnadmin创建的目录和文件 root@Ubuntu:/home/svn# svnadmin create /home/svn/test/
上面的代码创建了2个仓库,project和test。
配置和管理svn
每个仓库的配置文件在仓库目录的conf下
1)配置svnserve.conf文件
配置项在[general]下:
anon-access:匿名用户的权限,可以为read,write和none,默认值read。不允许匿名用户访问:anon-access = none
auth-access:认证用户的权限,可以为read,write和none,默认值write。
password-db:密码数据库的路径,去掉前边的#
authz-db:认证规则库的路径,去掉前边的#。
注意:这些配置项的行都要顶格,否则会报错。修改配置后需要重启svn才能生效。
2)配置passwd文件
这是每个用户的密码文件,比较简单,就是“用户名=密码”,采用的是明码。如allen=111111
3)配置authz文件
a)[groups] section:为了便于管理,可以将一些用户放到一个组里边,比如:owner=allen,ellen
b)groups下边的sections表示对一个目录的认证规则,比如对根目录的认证规则的section为[/]。设置单用户的认证规则时一个用户一行,如:
[/] allen=rw //allen对根目录的权限为rw ellen=r //ellen对根目录的权限为r //如果使用group,需要在group名字前加@,如 @owner=rw //group owner中的用户均为rw,等价于上边的两句话
启动时如果从/home/svn/project启动,/就是project目录,用如上方式以project目录为根设置权限。
如果从/home/svn/启动,每个仓库根还是自己的起始目录。可以采用如上方式设置project的权限,也可以采用如下方式:
[project:/] @owner=rw //设置test的权限如下: [test:/] @harry_and_sally = rw
简言之,每个仓库的根目录(/)就是自己的起始目录;[project:/]这种方式只适用于多仓库的情况;[/]适合于单仓库和单仓库的方式。
c)不能跨越仓库设置权限。
//admin=admin,test admin和test用户属于admin权限组 //@admin=rw admin权限组可以read,write admin = admin test [project:/] @admin = rw * = r
启动和停止svn
1)启动
从project目录启动,根目录(/)是project,authz中规则的配置使用section[/]。
root@Ubuntu:~# svnserve -d -r /home/svn/project
#访问方式: svn://192.168.0.87/
从svn目录启动,根目录(/)是svn,authz中对project的配置使用section[project:/] ,对test的配置使用section[test:/]。访问方式为:
root@Ubuntu:~# svnserve -d -r /home/svn
#访问方式: svn://192.18.0.87/project svn://192.18.0.87/test
如果需要svn自启动,把命令加入/etc/rc.local中
2)检查svn服务器是否已经启动(svn默认使用3690端口)
root@Ubuntu:/home/svn/project# netstat -an | grep 3690 tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN #或者 root@Ubuntu:/home/svn/project# ps aux | grep svnserve
3)停止:killall svnserve或者kill -9 pid
文件存在形式
SVN在服务器端的存储方式和客户端是不一样的,所以在服务器端是看不到源文件的。服务器端有两种存储方式FSFS和BDB,目前默认都是FSFS
服务器端指令
以下是搭建简易的服务器端环境的做法,正式一般配合apache通过http访问。
1.创建版本库
创建服务器端版本库,相当于DBMS创建数据库示例。
svnadmin create file_path/repo_name
2.启动服务器
//访问该版本库的url:svn//localhost/repo_name svnserve -d -r file_path
客户端指令
1.初始导入(import)
//该命令可将当前路径下文件导入到版本库中。 svn import -m "init import" svn://192.168.153.155/project
报错:svn: E000013: 不能打开文件“/home/svn/project/db/txn-current-lock”: 权限不够
root@Ubuntu:~# chmod -R 777 /home/svn/
2.检出(checkout)
svn co svn://192.168.153.155/project //或者 svn checkout svn://192.168.153.155/project
3.保持更新(update)
svn update //或者 svn up
多人合作时:
- 更新要经常频繁的做,尽量让问题及早暴露,便于处理。
- 提交代码前要更新,否则容易产生版本冲突。
4.添加(add)
告知svn服务器,添加目录或文件到服务器上,这个操作类似SQL的insert,但是并没有真的操作,直到commit。
svn add file_path
5.提交改动
相当于通用概念:检入(checkin)
svn commit //或者 svn ci
提交本地工作拷贝的所有改动,而且是原子性的,要求:一般要注明修改的原因
svn ci -m "修改bug #224"
6.还原改动
对应提交(commit),要有类似回滚(rollback)的操作。
svn revert
这个操作对开发人员十分有用,在被人改动很多代码后可以“一键恢复”。
7.“还原”已提交的改动
evert只适合未提交的情况。如果已经提交,发现问题,要回退到之前的修订版。
首先需要:
svn up
让本地工作拷贝更新到最新状态。
然后:
svn log your_file_path
查看文件日志,这时候提交时填写的说明信息就派上用场了。
查看两个修订版之间的不同:
svn diff -r 旧修订版序号:新修订版序号 your_file_path
还需要:
svn commit -m "恢复到某修订版(某修订版作废)"
这个还原是所谓的,不是用旧的版本号替代,而是将旧文件覆盖新文件。
8.拷贝文件和目录
vn copy path/file_name newpath/new_file_name svn commit -m "xxxx" //或者 svn cp path/file_name newpath/new_file_name svn commit -m "xxxx"
9.重命名目录/文件
svn move file_name new_file_name //或者 svn mv file_name new_file_name
10.处理合并冲突
svn默认不对文件加锁。
如果不同人编辑了同一个文件的不同部分,提交时会自动合并。
如果不同人编辑了同一个文件的同一部分,后提交者会报告合并冲突。
解决方法(人工仲裁):
- 放弃改动;
- 坚持你的改动,找到.mine的文件名,恢复为原文件名,然后执行:
svn resolved file_name
11.删除文件
将本地工作拷贝删除。
svn delete file_path //或者 svn del file_path
引用:
http://www.cnblogs.com/wuhou/archive/2008/09/30/1302471.html
http://www.cnblogs.com/wangkangluo1/archive/2011/08/11/2135312.html