完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
Linux:Subversion服务端安装及配置
环境: CentOS 7 [root@localhost ~]# uname -aLinux localhost.localdomain 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux[root@localhost ~]# which svn/usr/bin/which: no svn in (/usr/local/***in:/usr/local/bin:/usr/***in:/usr/bin:/root/bin) [root@localhost ~]# yum -y install subversionLoaded plugins: fastestmirror, langpacks……Complete!注:-y代表在安装过程中遇到的询问都键入y(yes),代表自动确认。 验证下可执行文件以及版本: [root@localhost ~]# which svn/usr/bin/svn[root@localhost ~]# which svnserve/usr/bin/svnserve[root@localhost ~]# svnserve --versionsvnserve, version 1.7.14 (r1542130) compiled Nov 20 2015, 19:25:09Copyright (C) 2013 The Apache Software Foundation.This software consists of contributions made by many people; see the NOTICEfile for more information.Subversion is open source software, see http://subversion.apache.org/The following repository back-end (FS) modules are available:* fs_base : Module for working with a Berkeley DB repository.* fs_fs : Module for working with a plain file (FSFS) repository.Cyrus SASL authentication is available.接下来需要创建svn库。 首先创建一个总的svn库目录:/opt/svn [root@localhost ~]# mkdir /opt/svn[root@localhost ~]# ll /opttotal 0drwxr-xr-x. 2 root root 6 Mar 26 2015 rhdrwxr-xr-x. 2 root root 6 Apr 24 04:07 svn这样做的目的是便于管理,例如我可以有多个svn库: /opt/svn/repo_a/opt/svn/repo_b/opt/svn/repo_c……这样所有的svn库都在一个目录下,便于管理。 现在我要创建svn库/opt/svn/myrepo: [root@localhost ~]# svnadmin create /opt/svn/myrepo[root@localhost ~]# cd /opt/svn[root@localhost svn]# lltotal 0drwxr-xr-x. 6 root root 80 Apr 24 04:12 myrepo[root@localhost svn]# ll myrepo/total 16drwxr-xr-x. 2 root root 51 Apr 24 04:12 confdrwxr-sr-x. 6 root root 4096 Apr 24 04:12 db-r--r--r--. 1 root root 2 Apr 24 04:12 formatdrwxr-xr-x. 2 root root 4096 Apr 24 04:12 hooksdrwxr-xr-x. 2 root root 39 Apr 24 04:12 locks-rw-r--r--. 1 root root 229 Apr 24 04:12 README.txt我们只介绍简单的配置,所以仅仅关注conf下的内容: [root@localhost svn]# cd /opt/svn/myrepo/conf/[root@localhost conf]# pwd/opt/svn/myrepo/conf[root@localhost conf]# lltotal 12-rw-r--r--. 1 root root 1080 Apr 24 04:12 authz-rw-r--r--. 1 root root 309 Apr 24 04:12 passwd-rw-r--r--. 1 root root 3090 Apr 24 04:12 svnserve.conf注意svnserve.conf文件中的几个地方: # anon-access = read# auth-access = writeanon-access代表匿名模式下具有的权限; auth-access代表鉴权模式下具有的权限; # password-db = passwd# authz-db = authzpassword-db代表密码文件所在位置(鉴权时,输入用户名和密码,去哪里匹配呢?就是这里啦); authz-db代表权限文件所在位置。 注意:你可以修改以上的值,但是需要去掉开头的#以及空格键,否则会出问题~ 启动svnserve服务: [root@localhost ~]# svnserve -d -r /opt/svn-d是daemon: Causes svnserve to run in daemon mode. svnserve backgrounds itself and accepts and serves TCP/IP connections on the svn port (3690, by default). -d使svnserve运行在后台,接收tcp/ip连接,默认端口是3690。 -r是root: Sets the virtual root for repositories served by svnserve. The pathname in URLs provided by the client will be interpreted relative to this root, and will not be allowed to escape this root. -r其实就是指明了svnserve启动的虚拟目录(根目录)。 现在我们指明了/opt/svn是我们的虚拟目录。 服务器相关信息: [root@localhost ~]# ps -ef | grep svnroot 4041 1 0 04:53 ? 00:00:00 svnserve -d -r /opt/svnroot 4043 2809 0 04:53 pts/0 00:00:00 grep --color=auto svn[root@localhost ~]# netstat -anp | grep svntcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 4041/svnserve由最后一个可以看出,svnserve监听的是3690,pid是4041。 服务器ip信息: [root@localhost ~]# ifconfigeno16777736: flags=4163 OK,已经成功checkout了。 注意:我的环境是CentOS 7,默认是使用firewall作为防火墙,我直接把防火墙关闭了: [root@localhost conf]# systemctl stop firewalld.service[root@localhost conf]# systemctl disable firewalld.serviceRemoved symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.[root@localhost conf]# firewall-cmd --statenot running实际中你可以选用iptables,然后在其配置文件中添加对应的端口对外部进行开放。 Other: 【1】 看看conf目录下svnserve.conf中的anon-access有啥作用。 将anon-access去掉前面的#以及空格,改为: anon-access = none保存退出。(不必重新启动服务,进程运行期间刷新配置) 然后在win下co看看: 很明显是没有权限。 再修改回去(其实就是加个#注释掉): #anon-access = none保存退出。 重新co下: co成功。 【2】 使用listen-port选项修改svnserve监听端口。 [root@localhost ~]# svnserve -d -r /opt/svn --listen-port 12500[root@localhost ~]# ps -ef | grep svnroot 4695 1 0 05:42 ? 00:00:00 svnserve -d -r /opt/svn --listen-port 12500root 4697 2809 0 05:43 pts/0 00:00:00 grep --color=auto svn[root@localhost ~]# netstat -anp | grep svntcp 0 0 0.0.0.0:12500 0.0.0.0:* LISTEN 4695/svnserve现在监听的是12500,pid是4695。 在win上使用svn客户端co下: 注意加上对应的端口。 【3】 这一点是我在实际操作中遇到的问题: 搭建好svn服务端后,我设置的: #anon-access = none#auth-access = write#password-db = passwd#authz-db = authz可以直接co成功。 当把anon-access取消注释,则直接co失败。 为啥不提示输入用户名和密码呢? 可以将password-db注释取消掉,这个时候再co就会看到提示输入用户名和密码了: anon-access = none#auth-access = writepassword-db = passwd#authz-db = authz再进行co时可以看到: 输入在conf/passwd中设置的用户名及密码即可。 总结来说: 当anon-access被注释掉时,直接co一般都是成功的,因为默认具有read权限; 当anon-access取消注释后,若其值为none,且password-db被注释,则直接Access Denied; 当anon-access取消注释后,若其值为none,且password-db未被注释,则弹出对话框可以输入信息进行鉴权。 【4】 添加svn账户。 修改conf中passwd文件。 假设我要添加的用户名和密码是test1280/1qaz@WSX,可以修改如下: ### This file is an example password file for svnserve.### Its format is similar to that of svnserve.conf. As shown in the### example below it contains one section labelled [users].### The name and password for each user follow, one account per line.[users]# harry = harryssecret# sally = sallyssecrettest1280 = 1qaz@WSX如果有多个,那就写在多行即可。 【5】 假设我想要test1280这个用户对当前svn库拥有读写权限,我可以设置conf/authz如下: ### This file is an example authorization file for svnserve.### Its format is identical to that of mod_authz_svn authorization### files.### As shown below each section defines authorizations for the path and### (optional) repository specified by the section name.### The authorizations follow. An authorization line can refer to:### - a single user,### - a group of users defined in a special [groups] section,### - an alias defined in a special [aliases] section,### - all authenticated users, using the '$authenticated' token,### - only anonymous users, using the '$anonymous' token,### - anyone, using the '*' wildcard.###### A match can be inverted by prefixing the rule with '~'. Rules can### grant read ('r') access, read-write ('rw') access, or no access### ('').[aliases]# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average[groups]# harry_and_sally = harry,sally# harry_sally_and_joe = harry,sally,&joe# [/foo/bar]# harry = rw# &joe = r# * =# [repository:/baz/fuz]# @harry_and_sally = rw# * = r[/]test1280 = rw有用的就是最后两行。 可以设置组的权限,可以设置某个用户对某个路径的权限等等。 我也并没有一一尝试,但是如果想要学习好,自己动手吧,自己实验吧~ 【6】 如何清除svn客户端缓存的鉴权信息(用户名及密码)。 Linux下删除: rm ~/.subversion/auth/svn.simple/*Win下: 【7】 对于-r的理解。 -r指明了一个虚拟的根目录,在客户端进行co时,指出的位置都是相对于这个根目录。 例如:svn://192.168.44.129:12500/myrepo中,12500后的“/”指的是: 即/opt/svn这个目录,然后是myrepo,那么拼起来就是: /opt/svn/myrepo啦! 如果有多个svnserve服务器,可以设置多个svn虚拟根目录,一个svnserve进程对应一个svn虚拟根目录,当然,每个进程监听的端口是不一样的。 【8】 对authz中[/]的理解 后续补充。【9】 举个例子: 需求: 两个svnserve服务器,监听不同端口; 一个svnserve的虚拟根目录是/opt/svn1,另外一个是/opt/svn2; svn1中有一个叫做svn_test1280的svn库; svn2中有两个svn库,分别是svn_test1281,svn_test1282; 对svn2中的svn库设置不同的访问权限。 后续补充。总结: 1.鉴权是相对于某一个svn库进行的,所有鉴权信息都是被某个svn库所持有的; 2.一个svnserve进程对应一个虚拟根目录,对应一个监听端口; 参考资料: 1.http://www.cnblogs.com/puloieswind/p/5856326.html 2.http://www.cnblogs.com/chaichuan/p/3758173.html 3.http://www.cnblogs.com/dreamowneryong/p/5627860.html 2017/04/28 之前我写的有些问题,现做一些修改。 下面是建立一个SVN库的过程。 CentOS 7: [svn@localhost ~]$ uname -aLinux localhost.localdomain 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux[svn@localhost ~]$ pwd/home/svn[svn@localhost ~]$ lltotal 0 [svn@localhost ~]$ svnadmin create myrepo[svn@localhost ~]$ lltotal 0drwxrwxr-x. 6 svn svn 80 Apr 28 01:01 myrepo[svn@localhost ~]$ ll myrepo/total 16drwxrwxr-x. 2 svn svn 51 Apr 28 01:01 confdrwxrwsr-x. 6 svn svn 4096 Apr 28 01:01 db-r--r--r--. 1 svn svn 2 Apr 28 01:01 formatdrwxrwxr-x. 2 svn svn 4096 Apr 28 01:01 hooksdrwxrwxr-x. 2 svn svn 39 Apr 28 01:01 locks-rw-rw-r--. 1 svn svn 229 Apr 28 01:01 README.txt[svn@localhost ~]$ ll myrepo/conf/total 12-rw-rw-r--. 1 svn svn 1080 Apr 28 01:01 authz-rw-rw-r--. 1 svn svn 309 Apr 28 01:01 passwd-rw-rw-r--. 1 svn svn 3090 Apr 28 01:01 svnserve.conf修改conf下三个文件: 1.修改svnserve.conf,取消五处注释 anon-access = readauth-access = writepassword-db = passwdauthz-db = authzrealm = My First Repository2.修改passed文件,增加用户 ### This file is an example password file for svnserve.### Its format is similar to that of svnserve.conf. As shown in the### example below it contains one section labelled [users].### The name and password for each user follow, one account per line.[users]# harry = harryssecret# sally = sallyssecrettest1280 = 1qaz2wsx3.修改authz文件,创建权限 [/]test1280 = rw [svn@localhost ~]$ svnserve -d -r myrepo[svn@localhost ~]$ ps -ef | grep svnroot 10493 10308 0 00:41 pts/0 00:00:00 su - svnsvn 10494 10493 0 00:41 pts/0 00:00:00 -bashsvn 10963 1 0 01:06 ? 00:00:00 svnserve -d -r myreposvn 10964 10494 0 01:06 pts/0 00:00:00 ps -efsvn 10965 10494 0 01:06 pts/0 00:00:00 grep --color=auto svn可以看到已经启动了。 [svn@localhost ~]$ mkdir tmp[svn@localhost ~]$ lltotal 0drwxrwxr-x. 6 svn svn 80 Apr 28 01:01 myrepodrwxrwxr-x. 2 svn svn 6 Apr 28 01:06 tmp[svn@localhost ~]$ cd tmp[svn@localhost tmp]$ svn co svn://127.0.0.1/myrepo……svn: E170000: URL 'svn://127.0.0.1/myrepo' doesn't exist关键在于: svn: E170000: URL ‘svn://127.0.0.1/myrepo’ doesn’t exist 不存在。 其实我们应该仔细理解/的含义。 首先,在启动svnserve服务时,有指定虚拟根目录,我们指定的是/home/svn/myrepo。 需要注意,一个svn://ip:port/是与一个虚拟根目录对应的,port后面的/即这里的/home/svn/myrepo,这一点与网站很类似。搭建Apache Tomcat时,不也是这样吗? 很明显我们此处url有问题:svn://127.0.0.1/myrepo,正确的是:’svn://127.0.0.1/。 再想一想,authz中的/是什么意思? 是某个用户对根目录的权限,即最大的权限。 结合这里来看,如果我们仅仅有一个项目,完全可以把它放置在根目录下,然后给不同的用户不同的权限。 假设我有一个项目cJson,可以这么做: 先svn co下空的目录(在cJsonProj目录中),主要是要.svn这个东西,然后把相关的代码什么拷贝进去。 [svn@localhost ~]$ lltotal 0drwxrwxr-x. 4 svn svn 97 Apr 28 01:21 cJsonProjdrwxrwxr-x. 6 svn svn 80 Apr 28 01:01 myrepo[svn@localhost ~]$ ll -a cJsonProj/total 64drwxrwxr-x. 4 svn svn 97 Apr 28 01:21 .drwx------. 8 svn svn 4096 Apr 28 01:18 ..-rw-r--r--. 1 svn svn 27791 Feb 13 2015 cJSON.c-rw-r--r--. 1 svn svn 7526 Feb 13 2015 cJSON.h-rw-r--r--. 1 svn svn 1091 Aug 14 2013 LICENSE-rw-rw----. 1 svn svn 8751 Oct 28 2009 READMEdrwxrwxr-x. 4 svn svn 70 Apr 28 01:21 .svn-rw-r--r--. 1 svn svn 6702 Feb 13 2015 test.cdrwxr-xr-x. 2 svn svn 66 Feb 13 2015 tests [svn@localhost cJsonProj]$ pwd/home/svn/cJsonProj[svn@localhost cJsonProj]$ lltotal 60-rw-r--r--. 1 svn svn 27791 Feb 13 2015 cJSON.c-rw-r--r--. 1 svn svn 7526 Feb 13 2015 cJSON.h-rw-r--r--. 1 svn svn 1091 Aug 14 2013 LICENSE-rw-rw----. 1 svn svn 8751 Oct 28 2009 README-rw-r--r--. 1 svn svn 6702 Feb 13 2015 test.cdrwxr-xr-x. 2 svn svn 66 Feb 13 2015 tests[svn@localhost cJsonProj]$ svn add cJSON.cA cJSON.c[svn@localhost cJsonProj]$ svn add cJSON.cA cJSON.c[svn@localhost cJsonProj]$ scn add cJSON.hbash: scn: command not found...[svn@localhost cJsonProj]$ svn add cJSON.hA cJSON.h[svn@localhost cJsonProj]$ svn add LICENSEA LICENSE[svn@localhost cJsonProj]$ svn add READMEA README[svn@localhost cJsonProj]$ svn add test.c A test.c[svn@localhost cJsonProj]$ svn add testsA testsA tests/test1A tests/test2A tests/test3A tests/test4A tests/test5[svn@localhost cJsonProj]$ svn ci -m "add cJSON to SVN"Adding LICENSEAdding READMEAdding cJSON.cAdding cJSON.hAdding test.cAdding testsAdding tests/test1Adding tests/test2Adding tests/test3Adding tests/test4Adding tests/test5Transmitting file data ..........Committed revision 1.这样一个简单的只有一个项目,放置在虚拟根目录的情形,就基本完成了。 svn://127.0.0.1/* 就是各个项目文件或目录。 当然,上述的并不标准,应该分出branch/tags/trunk等等。 我们公司有很多的项目,但是共用同一个svn服务器 ,那有该如何处理? 可以这样: 建立一个svn目录,作为虚拟根目录,然后在下面建立很多的子目录,作为不同项目的根目录,赋予不同项目组用户权限时,可以给予不同的路径权限。 假设: 我要搭建一个svn服务器,上面有很多项目,其中一个是cJSON,一个是Tomcat,有两个用户,一个是负责cJSON的,一个是负责Tomcat,分别对自己的项目拥有全部权限。 如下过程: [svn@localhost ~]$ svnadmin create myrepo[svn@localhost ~]$ lltotal 0drwxrwxr-x. 6 svn svn 80 Apr 28 01:30 myrepo[svn@localhost ~]$ ll myrepo/total 16drwxrwxr-x. 2 svn svn 51 Apr 28 01:30 confdrwxrwsr-x. 6 svn svn 4096 Apr 28 01:30 db-r--r--r--. 1 svn svn 2 Apr 28 01:30 formatdrwxrwxr-x. 2 svn svn 4096 Apr 28 01:30 hooksdrwxrwxr-x. 2 svn svn 39 Apr 28 01:30 locks-rw-rw-r--. 1 svn svn 229 Apr 28 01:30 README.txt[svn@localhost ~]$ ll myrepo/conf/total 12-rw-rw-r--. 1 svn svn 1080 Apr 28 01:30 authz-rw-rw-r--. 1 svn svn 309 Apr 28 01:30 passwd-rw-rw-r--. 1 svn svn 3090 Apr 28 01:30 svnserve.conf修改conf下三个文件: 1.svnserve.conf同上。 2.修改passwd文件: ### This file is an example password file for svnserve.### Its format is similar to that of svnserve.conf. As shown in the### example below it contains one section labelled [users].### The name and password for each user follow, one account per line.[users]# harry = harryssecret# sally = sallyssecretmyadmin = pass_admintest1280 = pass_1280test1281 = pass_1281test280负责cJSON,test1281负责Tomcat。 3.修改authz文件: [/]myadmin = rw[/cJSON]test1280 = rw[/Tomcat]test1281 = rw [svn@localhost ~]$ svnserve -d -r myrepo[svn@localhost ~]$ ps -ef | grep svnroot 10493 10308 0 00:41 pts/0 00:00:00 su - svnsvn 10494 10493 0 00:41 pts/0 00:00:00 -bashsvn 11471 1 0 01:36 ? 00:00:00 svnserve -d -r myreposvn 11472 10494 0 01:36 pts/0 00:00:00 ps -efsvn 11473 10494 0 01:36 pts/0 00:00:00 grep --color=auto svn假设我们在allPros中co下虚拟根目录中全部内容: [svn@localhost allPros]$ svn co svn://127.0.0.1/Checked out revision 0. [svn@localhost allPros]$ mkdir cJSON[svn@localhost allPros]$ mkdir Tomcat[svn@localhost allPros]$ lltotal 0drwxrwxr-x. 2 svn svn 6 Apr 28 01:40 cJSONdrwxrwxr-x. 2 svn svn 6 Apr 28 01:40 Tomcat[svn@localhost allPros]$ svn add cJSONA cJSON[svn@localhost allPros]$ svn add TomcatA Tomcat[svn@localhost allPros]$ svn ci -m "add cJSON and Tomcat to repo"……Store password unencrypted (yes/no)? noAdding TomcatAdding cJSONCommitted revision 1.然后依次将项目放置到对应的本地项目根目录中。 [svn@localhost allPros]$ ll cJSON/total 60-rw-r--r--. 1 svn svn 27791 Feb 13 2015 cJSON.c-rw-r--r--. 1 svn svn 7526 Feb 13 2015 cJSON.h-rw-r--r--. 1 svn svn 1091 Aug 14 2013 LICENSE-rw-rw----. 1 svn svn 8751 Oct 28 2009 README-rw-r--r--. 1 svn svn 6702 Feb 13 2015 test.cdrwxr-xr-x. 2 svn svn 66 Feb 13 2015 tests[svn@localhost allPros]$ ll Tomcat/total 96drwxr-x---. 2 svn svn 4096 Apr 28 01:55 bindrwx------. 2 svn svn 4096 Apr 12 12:29 confdrwxr-x---. 2 svn svn 4096 Apr 28 01:55 lib-rw-r-----. 1 svn svn 57092 Apr 12 12:29 LICENSEdrwxr-x---. 2 svn svn 6 Apr 12 12:27 logs-rw-r-----. 1 svn svn 1804 Apr 12 12:29 NOTICE-rw-r-----. 1 svn svn 6709 Apr 12 12:29 RELEASE-NOTES-rw-r-----. 1 svn svn 15946 Apr 12 12:29 RUNNING.txtdrwxr-x---. 2 svn svn 29 Apr 28 01:55 tempdrwxr-x---. 7 svn svn 76 Apr 12 12:27 webappsdrwxr-x---. 2 svn svn 6 Apr 12 12:27 work [svn@localhost cJSON]$ svn add *A cJSON.cA cJSON.hA LICENSEA READMEA test.cA testsA tests/test5A tests/test1A tests/test2A tests/test3A tests/test4[svn@localhost cJSON]$ svn ci -m "add cJSON to /cJSON/"Authentication realm: [svn@localhost cJSON]$ cd ../Tomcat/[svn@localhost Tomcat]$ lltotal 96drwxr-x---. 2 svn svn 4096 Apr 28 01:55 bindrwx------. 2 svn svn 4096 Apr 12 12:29 confdrwxr-x---. 2 svn svn 4096 Apr 28 01:55 lib-rw-r-----. 1 svn svn 57092 Apr 12 12:29 LICENSEdrwxr-x---. 2 svn svn 6 Apr 12 12:27 logs-rw-r-----. 1 svn svn 1804 Apr 12 12:29 NOTICE-rw-r-----. 1 svn svn 6709 Apr 12 12:29 RELEASE-NOTES-rw-r-----. 1 svn svn 15946 Apr 12 12:29 RUNNING.txtdrwxr-x---. 2 svn svn 29 Apr 28 01:55 tempdrwxr-x---. 7 svn svn 76 Apr 12 12:27 webappsdrwxr-x---. 2 svn svn 6 Apr 12 12:27 work[svn@localhost Tomcat]$ svn add *A binA (bin) bin/commons-daemon-native.tar.gzA bin/tool-wrapper.shA bin/startup.batA bin/setclasspath.sh……[svn@localhost Tomcat]$ svn ci -m "add Tomcat to /Tomcat/"Authentication realm: [svn@localhost Tomcat]$ cd[svn@localhost ~]$ lltotal 0drwxrwxr-x. 5 svn svn 42 Apr 28 01:51 allProsdrwxrwxr-x. 6 svn svn 80 Apr 28 01:30 myrepo[svn@localhost ~]$ pwd/home/svn[svn@localhost ~]$ cd[svn@localhost ~]$ pwd/home/svn[svn@localhost ~]$ mkdir mycJSON[svn@localhost ~]$ mkdir myTomcat[svn@localhost ~]$ cd mycJSON[svn@localhost mycJSON]$ svn co svn://127.0.0.1/cJSON/ --username test1281 --password pass_1281svn: E170001: Authorization failed可以看到test1281想要检出cJSON鉴权失败。 [svn@localhost mycJSON]$ svn co svn://127.0.0.1/cJSON/ --username test1280 --password pass_1280-----------------------------------------------------------------------Store password unencrypted (yes/no)? noA cJSON/READMEA cJSON/cJSON.cA cJSON/test.cA cJSON/LICENSEA cJSON/cJSON.hA cJSON/testsA cJSON/tests/test3A cJSON/tests/test4A cJSON/tests/test5A cJSON/tests/test1A cJSON/tests/test2Checked out revision 3.使用test1280账户检出成功。 Tomcat同理。 注意,这里只是最简单的,实际每个项目都应该包含一些约定俗成(不是必须)的目录,例如tags、trunk等。 总结: 假设 虚拟根目录是virtual_dir,那么一般的结构是: virtual_dir/project_a/… virtual_dir/project_b/… 对项目组project_a的用户设置权限为/project_a,对项目组project_b的用户设置权限为/project_b。 Over!
|
|
|
|
只有小组成员才能发言,加入小组>>
「含关键代码」基于AM3352/AM3354/AM3359的Linux开发案例分享
4886 浏览 0 评论
87398 浏览 0 评论
【高手问答】如何做到精通linux威廉希尔官方网站 ?资深工程师带你突破难点
4710 浏览 2 评论
3602 浏览 2 评论
解读Linux :先从创建一个文件夹用来存放jdk压缩文件开始
2470 浏览 0 评论
1988浏览 3评论
1261浏览 1评论
求解:aarch64交叉编译工具已经安装成功,环境变量已经配置,怎么将系统架构切换为ARM的架构
1332浏览 0评论
电脑和虚拟机可以互ping,电脑和开发板也可以互ping,但是虚拟机和开发板ping不通是什么原因
1227浏览 0评论
1167浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-13 16:25 , Processed in 1.049037 second(s), Total 41, Slave 33 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号