﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-教父的告白-随笔分类-Linux &amp; Unix</title><link>http://www.cppblog.com/keigoliye/category/11703.html</link><description>一切都是纸老虎</description><language>zh-cn</language><lastBuildDate>Mon, 12 Apr 2010 08:17:22 GMT</lastBuildDate><pubDate>Mon, 12 Apr 2010 08:17:22 GMT</pubDate><ttl>60</ttl><item><title>用mysqldump对MySQL数据库进行数据备份与恢复</title><link>http://www.cppblog.com/keigoliye/archive/2010/03/31/111222.html</link><dc:creator>暗夜教父</dc:creator><author>暗夜教父</author><pubDate>Wed, 31 Mar 2010 14:15:00 GMT</pubDate><guid>http://www.cppblog.com/keigoliye/archive/2010/03/31/111222.html</guid><wfw:comment>http://www.cppblog.com/keigoliye/comments/111222.html</wfw:comment><comments>http://www.cppblog.com/keigoliye/archive/2010/03/31/111222.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/keigoliye/comments/commentRss/111222.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/keigoliye/services/trackbacks/111222.html</trackback:ping><description><![CDATA[<span  style="color: rgb(51, 51, 51); font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 12px; font-weight: 100; line-height: 28px; ">数据库备份是很重要的。如果定期做好备份，这样就可以在发生系统崩溃时恢复数据到最后一次正常的状态，把损失减小到最少。<br style="text-align: left; ">以前在<a href="http://freebsd.org/" target="_blank" style="color: rgb(85, 119, 0); text-decoration: none; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 1px; border-left-width: 0px; border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(85, 119, 0); border-right-color: rgb(85, 119, 0); border-bottom-color: rgb(85, 119, 0); border-left-color: rgb(85, 119, 0); text-align: left; ">FREEBSD</a>系统里面都先把<a href="http://mysql.com/" target="_blank" style="color: rgb(85, 119, 0); text-decoration: none; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 1px; border-left-width: 0px; border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(85, 119, 0); border-right-color: rgb(85, 119, 0); border-bottom-color: rgb(85, 119, 0); border-left-color: rgb(85, 119, 0); text-align: left; ">MYSQL</a>停掉，然后直接用tar命令直接把数据库文件打包，下载到本地。如果要恢复数据库，也是直接上传，用tar解压，然后设置下权限就可以用了。<br style="text-align: left; "><br style="text-align: left; ">现在在windows下，本来用<a href="http://phpmyadmin.net/" target="_blank" style="color: rgb(85, 119, 0); text-decoration: none; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 1px; border-left-width: 0px; border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(85, 119, 0); border-right-color: rgb(85, 119, 0); border-bottom-color: rgb(85, 119, 0); border-left-color: rgb(85, 119, 0); text-align: left; ">PHPmyadmin</a>管理数据库是很好，但是本地的服务器，死活连不上数据库，新版的2.11的我都不知道怎么配置，汗死！用MySQL Control Center 等客户端软件也不行，晕死了！ 无奈，只好用mysqldump 来备份了！<br style="text-align: left; "><br style="text-align: left; ">因为没有好好的准备 ，以为mysqldump 是 MYSQL解析器里面的命令-_-!! 死活运行不起来。<br style="text-align: left; ">使用了之后，才发现。。原来，MYSQL的备份可以这么美的。哈哈。。(渐远！)<br style="text-align: left; "><br style="text-align: left; ">好了，收集了一些mysqldump命令的语法，先学学！<br style="text-align: left; "><strong style="text-align: left; ">用mysqldump对MySQL数据库进行数据备份与恢复</strong><br style="text-align: left; "><p class="code" style="text-indent: 0px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); border-bottom-color: rgb(0, 0, 0); border-left-color: rgb(0, 0, 0); padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; color: rgb(51, 51, 51); margin-top: 3px; margin-right: 3px; margin-bottom: 3px; margin-left: 3px; line-height: 23px; text-align: left; font-size: 12px; font-weight: 100; ">MySQLl提供了一个mysqldump命令，我们可以用它进行数据备份，下面假设要备份yejihao_agent这个数据库：<br style="text-align: left; "><br style="text-align: left; ">#mysqldump&nbsp;-u&nbsp;root&nbsp;-p&nbsp;yejihao_agent&nbsp;&gt;&nbsp;yejihao_agent.sql<br style="text-align: left; "><br style="text-align: left; ">按提示输入密码，这就把yejihao_agent数据库所有的表结构和数据备份到yejihao_agent.sql了，因为要总进行备份工作，如果数据量大会占用很大空间，这时可以利用gzip压缩数据，命令如下：<br style="text-align: left; "><br style="text-align: left; ">#mysqldump&nbsp;-u&nbsp;root&nbsp;-p&nbsp;yejihao_agent&nbsp;|&nbsp;gzip&nbsp;&gt;&nbsp;yejihao_agent.sql.gz<br style="text-align: left; "><br style="text-align: left; ">系统崩溃，重建系统时，可以这样恢复数据：<br style="text-align: left; "><br style="text-align: left; ">#mysql&nbsp;-u&nbsp;root&nbsp;-p&nbsp;yejihao_agent&nbsp;&lt;&nbsp;yejihao_agent.sql<br style="text-align: left; "><br style="text-align: left; ">从压缩文件直接恢复：<br style="text-align: left; "><br style="text-align: left; ">#gzip&nbsp;&lt;&nbsp;yejihao_agent.sql.gz&nbsp;|&nbsp;mysql&nbsp;-u&nbsp;root&nbsp;-p&nbsp;yejihao_agent<br style="text-align: left; "><br style="text-align: left; ">/*************************************/<br style="text-align: left; ">命令解释　<br style="text-align: left; ">/************************************/<br style="text-align: left; "><br style="text-align: left; ">导出要用到MySQL的mysqldump工具，基本用法是：&nbsp;&nbsp;&nbsp;<br style="text-align: left; "><br style="text-align: left; ">shell&gt;&nbsp;mysqldump&nbsp;[OPTIONS]&nbsp;database&nbsp;[tables]&nbsp;&nbsp;&nbsp;<br style="text-align: left; "><br style="text-align: left; ">如果你不给定任何表，整个数据库将被导出。&nbsp;&nbsp;&nbsp;<br style="text-align: left; "><br style="text-align: left; ">通过执行mysqldump&nbsp;--help，你能得到你mysqldump的版本支持的选项表。&nbsp;&nbsp;&nbsp;<br style="text-align: left; "><br style="text-align: left; ">注意，如果你运行mysqldump没有--quick或--opt选项，mysqldump将在导出结果前装载整个结果集到内存中，如果你正在导出一个大的数据库，这将可能是一个问题。&nbsp;&nbsp;&nbsp;<br style="text-align: left; "><br style="text-align: left; ">mysqldump支持下列选项：&nbsp;&nbsp;&nbsp;<br style="text-align: left; "><br style="text-align: left; ">--add-locks&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">在每个表导出之前增加LOCK&nbsp;TABLES并且之后UNLOCK&nbsp;TABLE。(为了使得更快地插入到MySQL)。&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">--add-drop-table&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">在每个create语句之前增加一个drop&nbsp;table。&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">--allow-keywords&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">允许创建是关键词的列名字。这由表名前缀于每个列名做到。&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">-c,&nbsp;--complete-insert&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">使用完整的insert语句(用列名字)。&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">-C,&nbsp;--compress&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">如果客户和服务器均支持压缩，压缩两者间所有的信息。&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">--delayed&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">用INSERT&nbsp;DELAYED命令插入行。&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">-e,&nbsp;--extended-insert&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">使用全新多行INSERT语法。（给出更紧缩并且更快的插入语句）&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">-#,&nbsp;--debug[=option_string]&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">跟踪程序的使用(为了调试)。&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">--help&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">显示一条帮助消息并且退出。&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">--fields-terminated-by=...&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">　&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">--fields-enclosed-by=...&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">　&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">--fields-optionally-enclosed-by=...&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">　&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">--fields-escaped-by=...&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">　&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">--fields-terminated-by=...&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">这些选择与-T选择一起使用，并且有相应的LOAD&nbsp;DATA&nbsp;INFILE子句相同的含义。&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">LOAD&nbsp;DATA&nbsp;INFILE语法。&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">-F,&nbsp;--flush-logs&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">在开始导出前，洗掉在MySQL服务器中的日志文件。&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">-f,&nbsp;--force,&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">即使我们在一个表导出期间得到一个SQL错误，继续。&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">-h,&nbsp;--host=..&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">从命名的主机上的MySQL服务器导出数据。缺省主机是localhost。&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">-l,&nbsp;--lock-tables.&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">为开始导出锁定所有表。&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">-t,&nbsp;--no-create-info&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">不写入表创建信息(CREATE&nbsp;TABLE语句）&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">-d,&nbsp;--no-data&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">不写入表的任何行信息。如果你只想得到一个表的结构的导出，这是很有用的！&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">--opt&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">同--quick&nbsp;--add-drop-table&nbsp;--add-locks&nbsp;--extended-insert&nbsp;--lock-tables。&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">应该给你为读入一个MySQL服务器的尽可能最快的导出。&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">-pyour_pass,&nbsp;--password[=your_pass]&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">与服务器连接时使用的口令。如果你不指定&#8220;=your_pass&#8221;部分，mysqldump需要来自终端的口令。&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">-P&nbsp;port_num,&nbsp;--port=port_num&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">与一台主机连接时使用的TCP/IP端口号。（这用于连接到localhost以外的主机，因为它使用&nbsp;Unix套接字。）&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">-q,&nbsp;--quick&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">不缓冲查询，直接导出至stdout；使用mysql_use_result()做它。&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">-S&nbsp;/path/to/socket,&nbsp;--socket=/path/to/socket&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">与localhost连接时（它是缺省主机)使用的套接字文件。&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">-T,&nbsp;--tab=path-to-some-directory&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">对于每个给定的表，创建一个table_name.sql文件，它包含SQL&nbsp;CREATE&nbsp;命令，和一个table_name.txt文件，它包含数据。&nbsp;注意：这只有在mysqldump运行在mysqld守护进程运行的同一台机器上的时候才工作。.txt文件的格式根据--fields-xxx和--lines--xxx选项来定。&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">-u&nbsp;user_name,&nbsp;--user=user_name&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">与服务器连接时，MySQL使用的用户名。缺省值是你的Unix登录名。&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">-O&nbsp;var=option,&nbsp;--set-variable&nbsp;var=option设置一个变量的值。可能的变量被列在下面。&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">-v,&nbsp;--verbose&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">冗长模式。打印出程序所做的更多的信息。&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">-V,&nbsp;--version&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">打印版本信息并且退出。&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">-w,&nbsp;--where='where-condition'&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">只导出被选择了的记录；注意引号是强制的！&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">"--where=user='jimf'"&nbsp;"-wuserid&gt;1"&nbsp;"-wuserid&lt;1"&nbsp;&nbsp;<br style="text-align: left; "><br style="text-align: left; ">最常见的mysqldump使用可能制作整个数据库的一个备份：&nbsp;&nbsp;<br style="text-align: left; "><br style="text-align: left; ">mysqldump&nbsp;--opt&nbsp;database&nbsp;&gt;&nbsp;backup-file.sql&nbsp;&nbsp;&nbsp;<br style="text-align: left; "><br style="text-align: left; ">但是它对用来自于一个数据库的信息充实另外一个MySQL数据库也是有用的：&nbsp;&nbsp;&nbsp;<br style="text-align: left; "><br style="text-align: left; ">mysqldump&nbsp;--opt&nbsp;database&nbsp;|&nbsp;mysql&nbsp;--host=remote-host&nbsp;-C&nbsp;database&nbsp;&nbsp;&nbsp;<br style="text-align: left; "><br style="text-align: left; ">由于mysqldump导出的是完整的SQL语句，所以用mysql客户程序很容易就能把数据导入了：&nbsp;&nbsp;&nbsp;<br style="text-align: left; "><br style="text-align: left; ">shell&gt;&nbsp;mysqladmin&nbsp;create&nbsp;target_db_name&nbsp;&nbsp;&nbsp;<br style="text-align: left; ">shell&gt;&nbsp;mysql&nbsp;target_db_name&nbsp;&lt;&nbsp;backup-file.sql&nbsp;&nbsp;<br style="text-align: left; ">就是&nbsp;&nbsp;<br style="text-align: left; ">shell&gt;&nbsp;mysql&nbsp;库名&nbsp;&lt;&nbsp;文件名 &nbsp;</p></span>
<img src ="http://www.cppblog.com/keigoliye/aggbug/111222.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/keigoliye/" target="_blank">暗夜教父</a> 2010-03-31 22:15 <a href="http://www.cppblog.com/keigoliye/archive/2010/03/31/111222.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux环境下的Socket编程</title><link>http://www.cppblog.com/keigoliye/archive/2010/02/24/108340.html</link><dc:creator>暗夜教父</dc:creator><author>暗夜教父</author><pubDate>Wed, 24 Feb 2010 05:32:00 GMT</pubDate><guid>http://www.cppblog.com/keigoliye/archive/2010/02/24/108340.html</guid><wfw:comment>http://www.cppblog.com/keigoliye/comments/108340.html</wfw:comment><comments>http://www.cppblog.com/keigoliye/archive/2010/02/24/108340.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/keigoliye/comments/commentRss/108340.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/keigoliye/services/trackbacks/108340.html</trackback:ping><description><![CDATA[<span  style="font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif, simsun, bitstream, Nimbus, 宋体; font-size: 12px; line-height: 18px; ">什么是Socket&nbsp;<br>　　Socket接口是TCP/IP网络的API，Socket接口定义了许多函数或例程，程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程，必须理解Socket接口。&nbsp;<br>　　Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话，就很容易了解Socket了。网络的Socket数据传输是一种特殊的I/O，Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket()，该函数返回一个整型的Socket描述符，随后的连接建立、数据传输等操作都是通过该Socket实现的。常用的Socket类型有两种：流式Socket（SOCK_STREAM）和数据报式Socket（SOCK_DGRAM）。流式是一种面向连接的Socket，针对于面向连接的TCP服务应用；数据报式Socket是一种无连接的Socket，对应于无连接的UDP服务应用。&nbsp;<br><br>Socket建立&nbsp;<br>　　为了建立Socket，程序可以调用Socket函数，该函数返回一个类似于文件描述符的句柄。socket函数原型为：&nbsp;<br>　　int socket(int domain, int type, int protocol);&nbsp;<br>　　domain指明所使用的协议族，通常为PF_INET，表示互联网协议族（TCP/IP协议族）；type参数指定socket的类型：SOCK_STREAM 或SOCK_DGRAM，Socket接口还定义了原始Socket（SOCK_RAW），允许程序使用低层协议；protocol通常赋值"0"。Socket()调用返回一个整型socket描述符，你可以在后面的调用使用它。&nbsp;<br>　　Socket描述符是一个指向内部数据结构的指针，它指向描述符表入口。调用Socket函数时，socket执行体将建立一个Socket，实际上"建立一个Socket"意味着为一个Socket数据结构分配存储空间。Socket执行体为你管理描述符表。&nbsp;<br>　　两个网络程序之间的一个网络连接包括五种信息：通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。Socket数据结构中包含这五种信息。&nbsp;<br><br>Socket配置&nbsp;<br>　　通过socket调用返回一个socket描述符后，在使用socket进行网络传输以前，必须配置该socket。面向连接的socket客户端通过调用Connect函数在socket数据结构中保存本地和远端信息。无连接socket的客户端和服务端以及面向连接socket的服务端通过调用bind函数来配置本地信息。&nbsp;<br>Bind函数将socket与本机上的一个端口相关联，随后你就可以在该端口监听服务请求。Bind函数原型为：&nbsp;<br>　　int bind(int sockfd,struct sockaddr *my_addr, int addrlen);&nbsp;<br>　　Sockfd是调用socket函数返回的socket描述符,my_addr是一个指向包含有本机IP地址及端口号等信息的sockaddr类型的指针；addrlen常被设置为sizeof(struct sockaddr)。&nbsp;<br>　　struct sockaddr结构类型是用来保存socket信息的：&nbsp;<br>　　struct sockaddr {&nbsp;<br>　　 unsigned short sa_family; /* 地址族， AF_xxx */&nbsp;<br>char sa_data[14]; /* 14 字节的协议地址 */&nbsp;<br>};&nbsp;<br>　　sa_family一般为AF_INET，代表Internet（TCP/IP）地址族；sa_data则包含该socket的IP地址和端口号。&nbsp;<br>　　另外还有一种结构类型：&nbsp;<br>　　struct sockaddr_in {&nbsp;<br>　　 short int sin_family; /* 地址族 */&nbsp;<br>　　 unsigned short int sin_port; /* 端口号 */&nbsp;<br>　　 struct in_addr sin_addr; /* IP地址 */&nbsp;<br>　　 unsigned char sin_zero[8]; /* 填充0 以保持与struct sockaddr同样大小 */&nbsp;<br>　　};&nbsp;<br>　　这个结构更方便使用。sin_zero用来将sockaddr_in结构填充到与struct sockaddr同样的长度，可以用bzero()或memset()函数将其置为零。指向sockaddr_in 的指针和指向sockaddr的指针可以相互转换，这意味着如果一个函数所需参数类型是sockaddr时，你可以在函数调用的时候将一个指向sockaddr_in的指针转换为指向sockaddr的指针；或者相反。&nbsp;<br>　　使用bind函数时，可以用下面的赋值实现自动获得本机IP地址和随机获取一个没有被占用的端口号：&nbsp;<br>　　my_addr.sin_port = 0; /* 系统随机选择一个未被使用的端口号 */&nbsp;<br>　　my_addr.sin_addr.s_addr = INADDR_ANY; /* 填入本机IP地址 */&nbsp;<br>通过将my_addr.sin_port置为0，函数会自动为你选择一个未占用的端口来使用。同样，通过将my_addr.sin_addr.s_addr置为INADDR_ANY，系统会自动填入本机IP地址。&nbsp;<br>注意在使用bind函数是需要将sin_port和sin_addr转换成为网络字节优先顺序；而sin_addr则不需要转换。&nbsp;<br>　　计算机数据存储有两种字节优先顺序：高位字节优先和低位字节优先。Internet上数据以高位字节优先顺序在网络上传输，所以对于在内部是以低位字节优先方式存储数据的机器，在Internet上传输数据时就需要进行转换，否则就会出现数据不一致。&nbsp;<br>　　下面是几个字节顺序转换函数：&nbsp;<br>&#183;htonl()：把32位值从主机字节序转换成网络字节序&nbsp;<br>&#183;htons()：把16位值从主机字节序转换成网络字节序&nbsp;<br>&#183;ntohl()：把32位值从网络字节序转换成主机字节序&nbsp;<br>&#183;ntohs()：把16位值从网络字节序转换成主机字节序&nbsp;<br>　　Bind()函数在成功被调用时返回0；出现错误时返回"-1"并将errno置为相应的错误号。需要注意的是，在调用bind函数时一般不要将端口号置为小于1024的值，因为1到1024是保留端口号，你可以选择大于1024中的任何一个没有被占用的端口号。&nbsp;<br><br>连接建立&nbsp;<br>　　面向连接的客户程序使用Connect函数来配置socket并与远端服务器建立一个TCP连接，其函数原型为：&nbsp;<br>　　int connect(int sockfd, struct sockaddr *serv_addr,int addrlen);&nbsp;<br>Sockfd是socket函数返回的socket描述符；serv_addr是包含远端主机IP地址和端口号的指针；addrlen是远端地质结构的长度。Connect函数在出现错误时返回-1，并且设置errno为相应的错误码。进行客户端程序设计无须调用bind()，因为这种情况下只需知道目的机器的IP地址，而客户通过哪个端口与服务器建立连接并不需要关心，socket执行体为你的程序自动选择一个未被占用的端口，并通知你的程序数据什么时候到打断口。&nbsp;<br>　　Connect函数启动和远端主机的直接连接。只有面向连接的客户程序使用socket时才需要将此socket与远端主机相连。无连接协议从不建立直接连接。面向连接的服务器也从不启动一个连接，它只是被动的在协议端口监听客户的请求。&nbsp;<br>　　Listen函数使socket处于被动的监听模式，并为该socket建立一个输入数据队列，将到达的服务请求保存在此队列中，直到程序处理它们。&nbsp;<br>　　int listen(int sockfd， int backlog);&nbsp;<br>Sockfd是Socket系统调用返回的socket 描述符；backlog指定在请求队列中允许的最大请求数，进入的连接请求将在队列中等待accept()它们（参考下文）。Backlog对队列中等待服务的请求的数目进行了限制，大多数系统缺省值为20。如果一个服务请求到来时，输入队列已满，该socket将拒绝连接请求，客户将收到一个出错信息。&nbsp;<br>当出现错误时listen函数返回-1，并置相应的errno错误码。&nbsp;<br>　　accept()函数让服务器接收客户的连接请求。在建立好输入队列后，服务器就调用accept函数，然后睡眠并等待客户的连接请求。&nbsp;<br>　　int accept(int sockfd, void *addr, int *addrlen);&nbsp;<br>　　sockfd是被监听的socket描述符，addr通常是一个指向sockaddr_in变量的指针，该变量用来存放提出连接请求服务的主机的信息（某台主机从某个端口发出该请求）；addrten通常为一个指向值为sizeof(struct sockaddr_in)的整型指针变量。出现错误时accept函数返回-1并置相应的errno值。&nbsp;<br>　　首先，当accept函数监视的socket收到连接请求时，socket执行体将建立一个新的socket，执行体将这个新socket和请求连接进程的地址联系起来，收到服务请求的初始socket仍可以继续在以前的 socket上监听，同时可以在新的socket描述符上进行数据传输操作。&nbsp;<br><br>数据传输&nbsp;<br>　　Send()和recv()这两个函数用于面向连接的socket上进行数据传输。&nbsp;<br>　　Send()函数原型为：&nbsp;<br>　　int send(int sockfd, const void *msg, int len, int flags);&nbsp;<br>Sockfd是你想用来传输数据的socket描述符；msg是一个指向要发送数据的指针；Len是以字节为单位的数据的长度；flags一般情况下置为0（关于该参数的用法可参照man手册）。&nbsp;<br>　　Send()函数返回实际上发送出的字节数，可能会少于你希望发送的数据。在程序中应该将send()的返回值与欲发送的字节数进行比较。当send()返回值与len不匹配时，应该对这种情况进行处理。&nbsp;<br>char *msg = "Hello!";&nbsp;<br>int len, bytes_sent;&nbsp;<br>&#8230;&#8230;&nbsp;<br>len = strlen(msg);&nbsp;<br>bytes_sent = send(sockfd, msg,len,0);&nbsp;<br>&#8230;&#8230;&nbsp;<br>　　recv()函数原型为：&nbsp;<br>　　int recv(int sockfd,void *buf,int len,unsigned int flags);&nbsp;<br>　　Sockfd是接受数据的socket描述符；buf 是存放接收数据的缓冲区；len是缓冲的长度。Flags也被置为0。Recv()返回实际上接收的字节数，当出现错误时，返回-1并置相应的errno值。&nbsp;<br>Sendto()和recvfrom()用于在无连接的数据报socket方式下进行数据传输。由于本地socket并没有与远端机器建立连接，所以在发送数据时应指明目的地址。&nbsp;<br>sendto()函数原型为：&nbsp;<br>　　int sendto(int sockfd, const void *msg,int len,unsigned int flags,const struct sockaddr *to, int tolen);&nbsp;<br>　　该函数比send()函数多了两个参数，to表示目地机的IP地址和端口号信息，而tolen常常被赋值为sizeof (struct sockaddr)。Sendto 函数也返回实际发送的数据字节长度或在出现发送错误时返回-1。&nbsp;<br>　　Recvfrom()函数原型为：&nbsp;<br>　　int recvfrom(int sockfd,void *buf,int len,unsigned int flags,struct sockaddr *from,int *fromlen);&nbsp;<br>　　from是一个struct sockaddr类型的变量，该变量保存源机的IP地址及端口号。fromlen常置为sizeof (struct sockaddr)。当recvfrom()返回时，fromlen包含实际存入from中的数据字节数。Recvfrom()函数返回接收到的字节数或当出现错误时返回-1，并置相应的errno。&nbsp;<br>如果你对数据报socket调用了connect()函数时，你也可以利用send()和recv()进行数据传输，但该socket仍然是数据报socket，并且利用传输层的UDP服务。但在发送或接收数据报时，内核会自动为之加上目地和源地址信息。&nbsp;<br><br>结束传输&nbsp;<br>　　当所有的数据操作结束以后，你可以调用close()函数来释放该socket，从而停止在该socket上的任何数据操作：&nbsp;<br>close(sockfd);&nbsp;<br>　　你也可以调用shutdown()函数来关闭该socket。该函数允许你只停止在某个方向上的数据传输，而一个方向上的数据传输继续进行。如你可以关闭某socket的写操作而允许继续在该socket上接受数据，直至读入所有数据。&nbsp;<br>　　int shutdown(int sockfd,int how);&nbsp;<br>　　Sockfd是需要关闭的socket的描述符。参数 how允许为shutdown操作选择以下几种方式：&nbsp;<br>　　&#183;0-------不允许继续接收数据&nbsp;<br>　　&#183;1-------不允许继续发送数据&nbsp;<br>&#183;2-------不允许继续发送和接收数据，&nbsp;<br>&#183;均为允许则调用close ()&nbsp;<br>　　shutdown在操作成功时返回0，在出现错误时返回-1并置相应errno。&nbsp;<br><br>面向连接的Socket实例&nbsp;<br>　　代码实例中的服务器通过socket连接向客户端发送字符串"Hello, you are connected!"。只要在服务器上运行该服务器软件，在客户端运行客户软件，客户端就会收到该字符串。&nbsp;<br>　　该服务器软件代码如下：&nbsp;<br>#include &lt;stdio.h&gt;&nbsp;<br>#include &lt;stdlib.h&gt;&nbsp;<br>#include &lt;errno.h&gt;&nbsp;<br>#include &lt;string.h&gt;&nbsp;<br>#include &lt;sys/types.h&gt;&nbsp;<br>#include &lt;netinet/in.h&gt;&nbsp;<br>#include &lt;sys/socket.h&gt;&nbsp;<br>#include &lt;sys/wait.h&gt;&nbsp;<br>#define SERVPORT 3333 /*服务器监听端口号 */&nbsp;<br>#define BACKLOG 10 /* 最大同时连接请求数 */&nbsp;<br>main()&nbsp;<br>{&nbsp;<br>int sockfd,client_fd; /*sock_fd：监听socket；client_fd：数据传输socket */&nbsp;<br>　struct sockaddr_in my_addr; /* 本机地址信息 */&nbsp;<br>　struct sockaddr_in remote_addr; /* 客户端地址信息 */&nbsp;<br>if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {&nbsp;<br>　　perror("socket创建出错！"); exit(1);&nbsp;<br>}&nbsp;<br>my_addr.sin_family=AF_INET;&nbsp;<br>　my_addr.sin_port=htons(SERVPORT);&nbsp;<br>　my_addr.sin_addr.s_addr = INADDR_ANY;&nbsp;<br>bzero(&amp;(my_addr.sin_zero),8);&nbsp;<br>　if (bind(sockfd, (struct sockaddr *)&amp;my_addr, sizeof(struct sockaddr)) \&nbsp;<br>　　 == -1) {&nbsp;<br>perror("bind出错！");&nbsp;<br>exit(1);&nbsp;<br>}&nbsp;<br>　if (listen(sockfd, BACKLOG) == -1) {&nbsp;<br>perror("listen出错！");&nbsp;<br>exit(1);&nbsp;<br>}&nbsp;<br>while(1) {&nbsp;<br>　　sin_size = sizeof(struct sockaddr_in);&nbsp;<br>　　if ((client_fd = accept(sockfd, (struct sockaddr *)&amp;remote_addr, \&nbsp;<br>　　&amp;sin_size)) == -1) {&nbsp;<br>perror("accept出错");&nbsp;<br>continue;&nbsp;<br>}&nbsp;<br>　　printf("received a connection from %s\n", inet_ntoa(remote_addr.sin_addr));&nbsp;<br>　 if (!fork()) { /* 子进程代码段 */&nbsp;<br>　　 if (send(client_fd, "Hello, you are connected!\n", 26, 0) == -1)&nbsp;<br>　　 perror("send出错！");&nbsp;<br>close(client_fd);&nbsp;<br>exit(0);&nbsp;<br>}&nbsp;<br>　　close(client_fd);&nbsp;<br>　　}&nbsp;<br>　}&nbsp;<br>}&nbsp;<br>　　服务器的工作流程是这样的：首先调用socket函数创建一个Socket，然后调用bind函数将其与本机地址以及一个本地端口号绑定，然后调用listen在相应的socket上监听，当accpet接收到一个连接服务请求时，将生成一个新的socket。服务器显示该客户机的IP地址，并通过新的socket向客户端发送字符串"Hello，you are connected!"。最后关闭该socket。&nbsp;<br>　　代码实例中的fork()函数生成一个子进程来处理数据传输部分，fork()语句对于子进程返回的值为0。所以包含fork函数的if语句是子进程代码部分，它与if语句后面的父进程代码部分是并发执行的。&nbsp;<br><br>客户端程序代码如下：&nbsp;<br>#include&lt;stdio.h&gt;&nbsp;<br>#include &lt;stdlib.h&gt;&nbsp;<br>#include &lt;errno.h&gt;&nbsp;<br>#include &lt;string.h&gt;&nbsp;<br>#include &lt;netdb.h&gt;&nbsp;<br>#include &lt;sys/types.h&gt;&nbsp;<br>#include &lt;netinet/in.h&gt;&nbsp;<br>#include &lt;sys/socket.h&gt;&nbsp;<br>#define SERVPORT 3333&nbsp;<br>#define MAXDATASIZE 100 /*每次最大数据传输量 */&nbsp;<br>main(int argc, char *argv[]){&nbsp;<br>　int sockfd, recvbytes;&nbsp;<br>　char buf[MAXDATASIZE];&nbsp;<br>　struct hostent *host;&nbsp;<br>　struct sockaddr_in serv_addr;&nbsp;<br>　if (argc &lt; 2) {&nbsp;<br>fprintf(stderr,"Please enter the server's hostname!\n");&nbsp;<br>exit(1);&nbsp;<br>}&nbsp;<br>　if((host=gethostbyname(argv[1]))==NULL) {&nbsp;<br>herror("gethostbyname出错！");&nbsp;<br>exit(1);&nbsp;<br>}&nbsp;<br>　if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1){&nbsp;<br>perror("socket创建出错！");&nbsp;<br>exit(1);&nbsp;<br>}&nbsp;<br>　serv_addr.sin_family=AF_INET;&nbsp;<br>　serv_addr.sin_port=htons(SERVPORT);&nbsp;<br>　serv_addr.sin_addr = *((struct in_addr *)host-&gt;h_addr);&nbsp;<br>　bzero(&amp;(serv_addr.sin_zero),8);&nbsp;<br>　if (connect(sockfd, (struct sockaddr *)&amp;serv_addr, \&nbsp;<br>　　 sizeof(struct sockaddr)) == -1) {&nbsp;<br>perror("connect出错！");&nbsp;<br>exit(1);&nbsp;<br>}&nbsp;<br>　if ((recvbytes=recv(sockfd, buf, MAXDATASIZE, 0)) ==-1) {&nbsp;<br>perror("recv出错！");&nbsp;<br>exit(1);&nbsp;<br>}&nbsp;<br>　buf[recvbytes] = '\0';&nbsp;<br>　printf("Received: %s",buf);&nbsp;<br>　close(sockfd);&nbsp;<br>}&nbsp;<br>　　客户端程序首先通过服务器域名获得服务器的IP地址，然后创建一个socket，调用connect函数与服务器建立连接，连接成功之后接收从服务器发送过来的数据，最后关闭socket。&nbsp;<br>　　函数gethostbyname()是完成域名转换的。由于IP地址难以记忆和读写，所以为了方便，人们常常用域名来表示主机，这就需要进行域名和IP地址的转换。函数原型为：&nbsp;<br>　　struct hostent *gethostbyname(const char *name);&nbsp;<br>　　函数返回为hosten的结构类型，它的定义如下：&nbsp;<br>　　struct hostent {&nbsp;<br>　 char *h_name; /* 主机的官方域名 */&nbsp;<br>　　 char **h_aliases; /* 一个以NULL结尾的主机别名数组 */&nbsp;<br>　　 int h_addrtype; /* 返回的地址类型，在Internet环境下为AF-INET */&nbsp;<br>　　int h_length; /* 地址的字节长度 */&nbsp;<br>　　 char **h_addr_list; /* 一个以0结尾的数组，包含该主机的所有地址*/&nbsp;<br>　　};&nbsp;<br>　　#define h_addr h_addr_list[0] /*在h-addr-list中的第一个地址*/&nbsp;<br>　　当 gethostname()调用成功时，返回指向struct hosten的指针，当调用失败时返回-1。当调用gethostbyname时，你不能使用perror()函数来输出错误信息，而应该使用herror()函数来输出。&nbsp;<br><br>　　无连接的客户/服务器程序的在原理上和连接的客户/服务器是一样的，两者的区别在于无连接的客户/服务器中的客户一般不需要建立连接，而且在发送接收数据时，需要指定远端机的地址。&nbsp;<br><br>阻塞和非阻塞&nbsp;<br>　　阻塞函数在完成其指定的任务以前不允许程序调用另一个函数。例如，程序执行一个读数据的函数调用时，在此函数完成读操作以前将不会执行下一程序语句。当服务器运行到accept语句时，而没有客户连接服务请求到来，服务器就会停止在accept语句上等待连接服务请求的到来。这种情况称为阻塞（blocking）。而非阻塞操作则可以立即完成。比如，如果你希望服务器仅仅注意检查是否有客户在等待连接，有就接受连接，否则就继续做其他事情，则可以通过将Socket设置为非阻塞方式来实现。非阻塞socket在没有客户在等待时就使accept调用立即返回。&nbsp;<br>　　#include &lt;unistd.h&gt;&nbsp;<br>　　#include &lt;fcntl.h&gt;&nbsp;<br>　　&#8230;&#8230;&nbsp;<br>sockfd = socket(AF_INET,SOCK_STREAM,0);&nbsp;<br>fcntl(sockfd,F_SETFL,O_NONBLOCK)；&nbsp;<br>&#8230;&#8230;&nbsp;<br>　　通过设置socket为非阻塞方式，可以实现"轮询"若干Socket。当企图从一个没有数据等待处理的非阻塞Socket读入数据时，函数将立即返回，返回值为-1，并置errno值为EWOULDBLOCK。但是这种"轮询"会使CPU处于忙等待方式，从而降低性能，浪费系统资源。而调用select()会有效地解决这个问题，它允许你把进程本身挂起来，而同时使系统内核监听所要求的一组文件描述符的任何活动，只要确认在任何被监控的文件描述符上出现活动，select()调用将返回指示该文件描述符已准备好的信息，从而实现了为进程选出随机的变化，而不必由进程本身对输入进行测试而浪费CPU开销。Select函数原型为:&nbsp;<br>int select(int numfds,fd_set *readfds,fd_set *writefds，&nbsp;<br>fd_set *exceptfds,struct timeval *timeout);&nbsp;<br>　　其中readfds、writefds、exceptfds分别是被select()监视的读、写和异常处理的文件描述符集合。如果你希望确定是否可以从标准输入和某个socket描述符读取数据，你只需要将标准输入的文件描述符0和相应的sockdtfd加入到readfds集合中；numfds的值是需要检查的号码最高的文件描述符加1，这个例子中numfds的值应为sockfd+1；当select返回时，readfds将被修改，指示某个文件描述符已经准备被读取，你可以通过FD_ISSSET()来测试。为了实现fd_set中对应的文件描述符的设置、复位和测试，它提供了一组宏：&nbsp;<br>　　FD_ZERO(fd_set *set)----清除一个文件描述符集；&nbsp;<br>　　FD_SET(int fd,fd_set *set)----将一个文件描述符加入文件描述符集中；&nbsp;<br>　　FD_CLR(int fd,fd_set *set)----将一个文件描述符从文件描述符集中清除；&nbsp;<br>　　FD_ISSET(int fd,fd_set *set)----试判断是否文件描述符被置位。&nbsp;<br>　　Timeout参数是一个指向struct timeval类型的指针，它可以使select()在等待timeout长时间后没有文件描述符准备好即返回。struct timeval数据结构为：&nbsp;<br>　　struct timeval {&nbsp;<br>　　 int tv_sec; /* seconds */&nbsp;<br>　　 int tv_usec; /* microseconds */&nbsp;<br>};&nbsp;<br><br>POP3客户端实例&nbsp;<br>　　下面的代码实例基于POP3的客户协议，与邮件服务器连接并取回指定用户帐号的邮件。与邮件服务器交互的命令存储在字符串数组POPMessage中，程序通过一个do-while循环依次发送这些命令。&nbsp;<br>#include&lt;stdio.h&gt;&nbsp;<br>#include &lt;stdlib.h&gt;&nbsp;<br>#include &lt;errno.h&gt;&nbsp;<br>#include &lt;string.h&gt;&nbsp;<br>#include &lt;netdb.h&gt;&nbsp;<br>#include &lt;sys/types.h&gt;&nbsp;<br>#include &lt;netinet/in.h&gt;&nbsp;<br>#include &lt;sys/socket.h&gt;&nbsp;<br>#define POP3SERVPORT 110&nbsp;<br>#define MAXDATASIZE 4096&nbsp;<br><br>main(int argc, char *argv[]){&nbsp;<br>int sockfd;&nbsp;<br>struct hostent *host;&nbsp;<br>struct sockaddr_in serv_addr;&nbsp;<br>char *POPMessage[]={&nbsp;<br>"USER userid\r\n",&nbsp;<br>"PASS password\r\n",&nbsp;<br>"STAT\r\n",&nbsp;<br>"LIST\r\n",&nbsp;<br>"RETR 1\r\n",&nbsp;<br>"DELE 1\r\n",&nbsp;<br>"QUIT\r\n",&nbsp;<br>NULL&nbsp;<br>};&nbsp;<br>int iLength;&nbsp;<br>int iMsg=0;&nbsp;<br>int iEnd=0;&nbsp;<br>char buf[MAXDATASIZE];&nbsp;<br><br>if((host=gethostbyname("your.server"))==NULL) {&nbsp;<br>perror("gethostbyname error");&nbsp;<br>exit(1);&nbsp;<br>}&nbsp;<br>if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1){&nbsp;<br>perror("socket error");&nbsp;<br>exit(1);&nbsp;<br>}&nbsp;<br>serv_addr.sin_family=AF_INET;&nbsp;<br>serv_addr.sin_port=htons(POP3SERVPORT);&nbsp;<br>serv_addr.sin_addr = *((struct in_addr *)host-&gt;h_addr);&nbsp;<br>bzero(&amp;(serv_addr.sin_zero),8);&nbsp;<br>if (connect(sockfd, (struct sockaddr *)&amp;serv_addr,sizeof(struct sockaddr))==-1){&nbsp;<br>perror("connect error");&nbsp;<br>exit(1);&nbsp;<br>}&nbsp;<br><br>do {&nbsp;<br>send(sockfd,POPMessage[iMsg],strlen(POPMessage[iMsg]),0);&nbsp;<br>printf("have sent: %s",POPMessage[iMsg]);&nbsp;<br><br>iLength=recv(sockfd,buf+iEnd,sizeof(buf)-iEnd,0);&nbsp;<br>iEnd+=iLength;&nbsp;<br>buf[iEnd]='\0';&nbsp;<br>printf("received: %s,%d\n",buf,iMsg);&nbsp;<br><br>iMsg++;&nbsp;<br>} while (POPMessage[iMsg]);&nbsp;<br><br>close(sockfd);&nbsp;<br>}</span>
<img src ="http://www.cppblog.com/keigoliye/aggbug/108340.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/keigoliye/" target="_blank">暗夜教父</a> 2010-02-24 13:32 <a href="http://www.cppblog.com/keigoliye/archive/2010/02/24/108340.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ubuntu下apache+subversion安装</title><link>http://www.cppblog.com/keigoliye/archive/2009/11/26/101974.html</link><dc:creator>暗夜教父</dc:creator><author>暗夜教父</author><pubDate>Thu, 26 Nov 2009 07:01:00 GMT</pubDate><guid>http://www.cppblog.com/keigoliye/archive/2009/11/26/101974.html</guid><wfw:comment>http://www.cppblog.com/keigoliye/comments/101974.html</wfw:comment><comments>http://www.cppblog.com/keigoliye/archive/2009/11/26/101974.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/keigoliye/comments/commentRss/101974.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/keigoliye/services/trackbacks/101974.html</trackback:ping><description><![CDATA[<h2 class="title">在ubuntu下安装<strong style="color: black; background-color: rgb(160, 255, 255); ">subversion</strong>服务器</h2><p class="postdate">Tuesday, 6. March 2007, 13:29:44</p><p class="tags"><a href="http://203.208.39.132/render/blog/index.dml/tag/subversion" rel="tag"><strong style="color: black; background-color: rgb(160, 255, 255); ">subversion</strong></a>,&nbsp;<a href="http://203.208.39.132/render/blog/index.dml/tag/ubuntu" rel="tag">ubuntu</a></p><div class="content"><div id="excerpt">在ubuntu下安装<strong style="color: black; background-color: rgb(160, 255, 255); ">subversion</strong>服务器<br><br>originally by: zengpuzhang &lt;zengpuzhang@gmail.com&gt;<br><br>Use the&nbsp;<strong style="color: black; background-color: rgb(160, 255, 255); ">subversion</strong>&nbsp;for apache2 on ubunut 5.10.<br><br>* Install apache2<br><br>sudo&nbsp;<strong style="color: black; background-color: rgb(255, 255, 102); ">apt-get</strong>&nbsp;install apache2<br><br>* It will download apache2 apache2-common apache2-mpm-worker apache2-utils<br><br>* Install&nbsp;<strong style="color: black; background-color: rgb(160, 255, 255); ">subversion</strong><br><br>sudo&nbsp;<strong style="color: black; background-color: rgb(255, 255, 102); ">apt-get</strong>&nbsp;install&nbsp;<strong style="color: black; background-color: rgb(160, 255, 255); ">subversion</strong><br><br>* Install libapache2-svn<br><br>sudo&nbsp;<strong style="color: black; background-color: rgb(255, 255, 102); ">apt-get</strong>&nbsp;install libapache2-svn</div><br>在ubuntu下安装<strong style="color: black; background-color: rgb(160, 255, 255); ">subversion</strong>服务器<br><br>originally by: zengpuzhang &lt;zengpuzhang@gmail.com&gt;<br><br>Use the&nbsp;<strong style="color: black; background-color: rgb(160, 255, 255); ">subversion</strong>&nbsp;for apache2 on ubunut 5.10.<br><br>* Install apache2<br><br>sudo&nbsp;<strong style="color: black; background-color: rgb(255, 255, 102); ">apt-get</strong>&nbsp;install apache2<br><br>* It will download apache2 apache2-common apache2-mpm-worker apache2-utils<br><br>* Install&nbsp;<strong style="color: black; background-color: rgb(160, 255, 255); ">subversion</strong><br><br>sudo&nbsp;<strong style="color: black; background-color: rgb(255, 255, 102); ">apt-get</strong>&nbsp;install&nbsp;<strong style="color: black; background-color: rgb(160, 255, 255); ">subversion</strong><br><br>* Install libapache2-svn<br><br>sudo&nbsp;<strong style="color: black; background-color: rgb(255, 255, 102); ">apt-get</strong>&nbsp;install libapache2-svn<br><br>* Create&nbsp;<strong style="color: black; background-color: rgb(160, 255, 255); ">subversion</strong>&nbsp;home foder and project<br>(其中两个最常用的位置之一是：/usr/local/svn)<br>cd /home/<br>sudo mkdir svn<br>cd svn<br>sudo svnadmin create project<br>cd /home<br>sudo chown www-data.www-data svn -R<br><br>* Configure the apache and&nbsp;<strong style="color: black; background-color: rgb(160, 255, 255); ">subversion</strong><br><br>cd /etc/apache2<br>sudo mkdir authz<br>cd authz<br>sudo touch project.authz<br>sudo touch dav_svn.passwd<br>sudo vi /etc/apache2/mods-enabled/dav_svn.conf<br><br>* Add the content like this:<br><br>&lt;Location /svn/project&gt;<br>DAV svn<br>SVNPath /home/svn/project<br>AuthzSVNAccessFile /etc/apache2/authz/project.authz<br>AuthType Basic<br>AuthName "Project&nbsp;<strong style="color: black; background-color: rgb(160, 255, 255); ">Subversion</strong>&nbsp;Repository"<br>AuthUserFile /etc/apache2/authz/dav_svn.passwd<br>Require valid-user<br>&lt;/Location&gt;<br><br>* Save the dav_svn.conf and edit the project.authz<br><br>sudo vi /etc/apache2/authz/project.authz<br><br>* Add the content like this<br><br>[/]<br>zengpuzhang=rw<br><br>* Sava the project.authz and create a user name zengpuzhang<br><br>sudo htpasswd2 -c /etc/apache2/authz/dav_svn.passwd zengpuzhang(第一个用户的时候)<br>（sudo htpasswd2 -m /etc/apache2/authz/dav_svn.passwd xxxx , 以后的用户）<br><br><br>* Input the user`s password<br><br>* Restart the apache<br><br>sudo /etc/init.d/apache2 restart<br><br>* Done!<br><br>*&nbsp;<strong style="color: black; background-color: rgb(160, 255, 255); ">subversion</strong>&nbsp;checked svn co<br><br>$svn co&nbsp;<a href="http://192.168.10.163/svn/project" target="_blank">http://192.168.10.163/svn/project</a><br>认证领域：&lt;<a href="http://192.168.10.163/">http://192.168.10.163:80</a>&gt; Project&nbsp;<strong style="color: black; background-color: rgb(160, 255, 255); ">Subversion</strong>&nbsp;Repository<br>用户登录名：zengpuzhang<br>&#8220;zengpuzhang&#8221;的密码：<br>取出修订版 0。<br><br>*&nbsp;<strong style="color: black; background-color: rgb(160, 255, 255); ">subversion</strong>&nbsp;checked svn add<br><br>$cd project<br>$touch test<br>$svn add test<br>A test<br><br>*&nbsp;<strong style="color: black; background-color: rgb(160, 255, 255); ">subversion</strong>&nbsp;checked svn ci<br><br>$svn ci -m &#8220;just a test&#8221;<br>新增 test<br>传输文件数据.<br>提交后的修订版为 1。<br>* enjoy it .</div><div class="content"><br></div><div class="content"><br></div><div class="content"><span  style="font-family: verdana, sans-serif; font-size: 12px; line-height: 15px; "><h3 style="margin-top: 1.5em; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); font-family: arial, verdana, sans-serif; font-size: 16px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; color: rgb(181, 132, 67); line-height: 1.2em; font-weight: bold; "><span class="mw-headline">简介</span></h3><p>如果您对 Subversion 还比较陌生，本节将给您一个关于 Subversion 的简要介绍。</p><p>Subversion 是一款开放源代码的版本控制系统。使用 Subversion，您可以重新加载源代码和文档的历史版本。Subversion 管理了源代码在各个时期的版本。一个文件树被集中放置在文件仓库中。这个文件仓库很像是一个传统的文件服务器，只不过它能够记住文件和目录的每一次变化。</p><a name=".E5.81.87.E8.AE.BE" id=".E5.81.87.E8.AE.BE" style="color: rgb(181, 132, 67); "></a><h3 style="margin-top: 1.5em; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); font-family: arial, verdana, sans-serif; font-size: 16px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; color: rgb(181, 132, 67); line-height: 1.2em; font-weight: bold; "><span class="editsection" style="float: right; margin-left: 1em; font-weight: normal; font-size: 12px; ">[<a href="http://wiki.ubuntu.org.cn/index.php?title=SubVersion&amp;action=edit&amp;section=3" title="编辑段落: 假设" style="color: rgb(181, 132, 67); ">编辑</a>]</span><span class="mw-headline">假设</span></h3><p>首先我们假设您能够在 Ubuntu 中操作 Linux 的命令、编辑文件、启动和停止服务。当然，我们还认为您的 Ubuntu 正在运行中，您可以使用 sudo 操作并且您打算使用 Subversion。</p><p>我们假设您可能需要使用所有可能的方法访问 SVN 文件仓库。同时我们也认为您应该已经配置好了您的 /etc/apt/sources.list 文件。</p><a name=".E6.9C.AC.E6.96.87.E6.B6.89.E5.8F.8A.E7.9A.84.E8.8C.83.E5.9B.B4" id=".E6.9C.AC.E6.96.87.E6.B6.89.E5.8F.8A.E7.9A.84.E8.8C.83.E5.9B.B4" style="color: rgb(181, 132, 67); "></a><h3 style="margin-top: 1.5em; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); font-family: arial, verdana, sans-serif; font-size: 16px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; color: rgb(181, 132, 67); line-height: 1.2em; font-weight: bold; "><span class="editsection" style="float: right; margin-left: 1em; font-weight: normal; font-size: 12px; ">[<a href="http://wiki.ubuntu.org.cn/index.php?title=SubVersion&amp;action=edit&amp;section=4" title="编辑段落: 本文涉及的范围" style="color: rgb(181, 132, 67); ">编辑</a>]</span><span class="mw-headline">本文涉及的范围</span></h3><p>要通过 HTTP 协议访问 SVN 文件仓库，您需要安装并配置好 Web 服务器。Apache 2 被证实可以很好的与 SVN 一起工作。关于 Apache 2 的安装超出了本文的范围，尽管如此，本文还是会涉及如何配置 Apache 2 使用 SVN。</p><p>类似的，要通过 HTTPS 协议访问 SVN 文件仓库，您需要在您的 Apache 2 中安装并配置好数字证书，这也不在本文的讨论范围之中。</p><a name=".E5.AE.89.E8.A3.85" id=".E5.AE.89.E8.A3.85" style="color: rgb(181, 132, 67); "></a><h3 style="margin-top: 1.5em; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); font-family: arial, verdana, sans-serif; font-size: 16px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; color: rgb(181, 132, 67); line-height: 1.2em; font-weight: bold; "><span class="editsection" style="float: right; margin-left: 1em; font-weight: normal; font-size: 12px; ">[<a href="http://wiki.ubuntu.org.cn/index.php?title=SubVersion&amp;action=edit&amp;section=5" title="编辑段落: 安装" style="color: rgb(181, 132, 67); ">编辑</a>]</span><span class="mw-headline">安装</span></h3><p>幸运的，Subversion 已经包含在 main 仓库中。所以，要安装 Subversion，您只需要简单的运行：</p><pre style="font-size: 1em; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(238, 238, 238); border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(102, 102, 102); border-right-color: rgb(102, 102, 102); border-bottom-color: rgb(102, 102, 102); border-left-color: rgb(102, 102, 102); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; padding-top: 15px; padding-right: 20px; padding-bottom: 15px; padding-left: 20px; overflow-x: auto; overflow-y: auto; background-position: initial initial; ">$ sudo apt-get install subversion
$ sudo apt-get install libapache2-svn
</pre><p>如果系统报告了依赖关系的错误，请找出相应的软件包并安装它们。如果存在其它问题，也请自行解决。如果您是再不能解决这些问题，可以考虑通过 Ubuntu 的网站、Wiki、论坛或邮件列表寻求支持。</p><a name=".E6.9C.8D.E5.8A.A1.E5.99.A8.E9.85.8D.E7.BD.AE" id=".E6.9C.8D.E5.8A.A1.E5.99.A8.E9.85.8D.E7.BD.AE" style="color: rgb(181, 132, 67); "></a><h3 style="margin-top: 1.5em; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); font-family: arial, verdana, sans-serif; font-size: 16px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; color: rgb(181, 132, 67); line-height: 1.2em; font-weight: bold; "><span class="editsection" style="float: right; margin-left: 1em; font-weight: normal; font-size: 12px; ">[<a href="http://wiki.ubuntu.org.cn/index.php?title=SubVersion&amp;action=edit&amp;section=6" title="编辑段落: 服务器配置" style="color: rgb(181, 132, 67); ">编辑</a>]</span><span class="mw-headline">服务器配置</span></h3><p>您应该已经安装了上述的软件包。本节将阐述如何创建 SVN 文件仓库以及如何设置项目的访问权限。</p><a name=".E5.88.9B.E5.BB.BA_SVN_.E4.BB.93.E5.BA.93" id=".E5.88.9B.E5.BB.BA_SVN_.E4.BB.93.E5.BA.93" style="color: rgb(181, 132, 67); "></a><h4 style="margin-top: 1.5em; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); font-family: arial, verdana, sans-serif; font-size: 14px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; color: rgb(181, 132, 67); line-height: 1.2em; font-weight: normal; "><span class="editsection" style="float: right; margin-left: 1em; font-weight: normal; font-size: 12px; ">[<a href="http://wiki.ubuntu.org.cn/index.php?title=SubVersion&amp;action=edit&amp;section=7" title="编辑段落: 创建 SVN 仓库" style="color: rgb(181, 132, 67); ">编辑</a>]</span><span class="mw-headline">创建 SVN 仓库</span></h4><p>许多位置都可以放置 Subversion 文件仓库，其中两个最常用的是：/usr/local/svn 以及 /home/svn。为了在下面的描述中简单明了，我们假设您的 Subversion 文件仓库放在 /home/svn，并且你的项目名称是简单的&#8220;myproject&#8221;。</p><p>同样的，也有许多常用的方式设置文件仓库的访问权限。然而，这也是安装过程中最经常出现错误的地方，因此我们会对此进行一个详细说明。典型的情况下，您应该创建一个名为&#8220;Subversion&#8221;的组来拥有文件仓库所在的目录。下面是一个快速的操作说明，有关内容请参考相关文档的详细说明：</p><ul><li style="margin-top: 0.2em; margin-bottom: 0.2em; ">在 Ubuntu 菜单上选择&#8220;系统-&gt;系统管理-&gt;用户和组&#8221;；</li></ul><ul><li style="margin-top: 0.2em; margin-bottom: 0.2em; ">切换到&#8220;组&#8221;标签；</li></ul><ul><li style="margin-top: 0.2em; margin-bottom: 0.2em; ">点击&#8220;添加组&#8221;按钮；</li></ul><ul><li style="margin-top: 0.2em; margin-bottom: 0.2em; ">组名为&#8220;subversion&#8221;；</li></ul><ul><li style="margin-top: 0.2em; margin-bottom: 0.2em; ">将您自己和&#8220;www-data&#8221;(Apache 用户)加入组成员中；</li></ul><ul><li style="margin-top: 0.2em; margin-bottom: 0.2em; ">点击&#8220;OK&#8221;以确认修改，关闭该程序。</li></ul><p>或者使用命令完成上述功能（增加组，并且把用户加到组里）：</p><pre style="font-size: 1em; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(238, 238, 238); border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(102, 102, 102); border-right-color: rgb(102, 102, 102); border-bottom-color: rgb(102, 102, 102); border-left-color: rgb(102, 102, 102); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; padding-top: 15px; padding-right: 20px; padding-bottom: 15px; padding-left: 20px; overflow-x: auto; overflow-y: auto; background-position: initial initial; ">sudo addgroup subversion
sudo usermod -G subversion -a www-data
</pre><p>再或者直接使用命令编辑组文件"sudo vi /etc/group"，增加组和成员（不推荐）：</p><pre style="font-size: 1em; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(238, 238, 238); border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(102, 102, 102); border-right-color: rgb(102, 102, 102); border-bottom-color: rgb(102, 102, 102); border-left-color: rgb(102, 102, 102); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; padding-top: 15px; padding-right: 20px; padding-bottom: 15px; padding-left: 20px; overflow-x: auto; overflow-y: auto; background-position: initial initial; ">$ sudo vi /etc/group
</pre><p>结果看上去，像这样。</p><pre style="font-size: 1em; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(238, 238, 238); border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(102, 102, 102); border-right-color: rgb(102, 102, 102); border-bottom-color: rgb(102, 102, 102); border-left-color: rgb(102, 102, 102); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; padding-top: 15px; padding-right: 20px; padding-bottom: 15px; padding-left: 20px; overflow-x: auto; overflow-y: auto; background-position: initial initial; ">$ cat /etc/group|grep subversion
subversion:x:1001:www-data,exp
</pre><p>您需要注销然后再登录以便您能够成为 subversion 组的一员，然后就可以执行签入文件（Check in，也称提交文件）的操作了。</p><p>现在执行下面的命令</p><pre style="font-size: 1em; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(238, 238, 238); border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(102, 102, 102); border-right-color: rgb(102, 102, 102); border-bottom-color: rgb(102, 102, 102); border-left-color: rgb(102, 102, 102); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; padding-top: 15px; padding-right: 20px; padding-bottom: 15px; padding-left: 20px; overflow-x: auto; overflow-y: auto; background-position: initial initial; ">$ sudo mkdir /home/svn
$ cd /home/svn
$ sudo mkdir myproject
$ sudo chown -R root:subversion myproject
</pre><p>下面的命令用于创建 SVN 文件仓库：</p><pre style="font-size: 1em; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(238, 238, 238); border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(102, 102, 102); border-right-color: rgb(102, 102, 102); border-bottom-color: rgb(102, 102, 102); border-left-color: rgb(102, 102, 102); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; padding-top: 15px; padding-right: 20px; padding-bottom: 15px; padding-left: 20px; overflow-x: auto; overflow-y: auto; background-position: initial initial; ">$ sudo svnadmin create /home/svn/myproject
</pre><p>赋予组成员对所有新加入文件仓库的文件拥有相应的权限：</p><pre style="font-size: 1em; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(238, 238, 238); border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(102, 102, 102); border-right-color: rgb(102, 102, 102); border-bottom-color: rgb(102, 102, 102); border-left-color: rgb(102, 102, 102); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; padding-top: 15px; padding-right: 20px; padding-bottom: 15px; padding-left: 20px; overflow-x: auto; overflow-y: auto; background-position: initial initial; ">$ sudo chmod -R g+rws myproject</pre><p>如果上面这个命令在创建SVN文件仓库之前运行，你可能在后续Check in的时候遇到如下错误：</p><pre style="font-size: 1em; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(238, 238, 238); border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(102, 102, 102); border-right-color: rgb(102, 102, 102); border-bottom-color: rgb(102, 102, 102); border-left-color: rgb(102, 102, 102); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; padding-top: 15px; padding-right: 20px; padding-bottom: 15px; padding-left: 20px; overflow-x: auto; overflow-y: auto; background-position: initial initial; ">Can't open '/home/svn/myproject/db/txn-current-lock': Permission denied
</pre><p>查看txn-current-lock文件的权限和用户以及组信息，应该类似于：</p><pre style="font-size: 1em; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(238, 238, 238); border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(102, 102, 102); border-right-color: rgb(102, 102, 102); border-bottom-color: rgb(102, 102, 102); border-left-color: rgb(102, 102, 102); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; padding-top: 15px; padding-right: 20px; padding-bottom: 15px; padding-left: 20px; overflow-x: auto; overflow-y: auto; background-position: initial initial; ">$ ls -l /home/svn/myproject/db/txn-current-lock
-rw-rwSr-- 1 root subversion  0  2009-06-18  15:33  txn-current-lock
</pre><p>除了权限以外，用户及其组如果不对，则仍然会遇到上述问题，可以再次运行命令：</p><pre style="font-size: 1em; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(238, 238, 238); border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(102, 102, 102); border-right-color: rgb(102, 102, 102); border-bottom-color: rgb(102, 102, 102); border-left-color: rgb(102, 102, 102); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; padding-top: 15px; padding-right: 20px; padding-bottom: 15px; padding-left: 20px; overflow-x: auto; overflow-y: auto; background-position: initial initial; ">$ sudo chown -R root:subversion myproject
</pre><a name=".E8.AE.BF.E9.97.AE.E6.96.B9.E5.BC.8F" id=".E8.AE.BF.E9.97.AE.E6.96.B9.E5.BC.8F" style="color: rgb(181, 132, 67); "></a><h3 style="margin-top: 1.5em; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); font-family: arial, verdana, sans-serif; font-size: 16px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; color: rgb(181, 132, 67); line-height: 1.2em; font-weight: bold; "><span class="editsection" style="float: right; margin-left: 1em; font-weight: normal; font-size: 12px; ">[<a href="http://wiki.ubuntu.org.cn/index.php?title=SubVersion&amp;action=edit&amp;section=8" title="编辑段落: 访问方式" style="color: rgb(181, 132, 67); ">编辑</a>]</span><span class="mw-headline">访问方式</span></h3><p>Subversion 文件仓库可以通过许多不同的方式进行访问（Check Out，签出）——通过本地硬盘，或者通过各种网络协议。无论如何，文件仓库的位置总是使用 URL 来表示。下表显示了不同的 URL 模式对应的访问方法：</p><table border="1" cellspacing="0"><tbody><tr><td style="font-family: verdana, sans-serif; font-size: small; "><strong>模式</strong></td><td style="font-family: verdana, sans-serif; font-size: small; "><strong>访问方法</strong></td></tr><tr><td style="font-family: verdana, sans-serif; font-size: small; ">file:///</td><td style="font-family: verdana, sans-serif; font-size: small; ">直接访问本地硬盘上文件仓库</td></tr><tr><td style="font-family: verdana, sans-serif; font-size: small; ">http://</td><td style="font-family: verdana, sans-serif; font-size: small; ">通过 WebDAV 协议访问支持 Subversion 的 Apache 2 Web 服务器</td></tr><tr><td style="font-family: verdana, sans-serif; font-size: small; ">https://</td><td style="font-family: verdana, sans-serif; font-size: small; ">类似&nbsp;<a href="http://xn--%2C-9f5b97d/" class="external free" title="http://，支持" rel="nofollow" style="color: rgb(181, 132, 67); background-image: url(http://wiki.ubuntu.org.cn/skins/ubuntuchina/external.png); background-repeat: no-repeat; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; padding-right: 13px; background-position: 100% 50%; ">http://，支持</a>&nbsp;SSL 加密</td></tr><tr><td style="font-family: verdana, sans-serif; font-size: small; ">svn://</td><td style="font-family: verdana, sans-serif; font-size: small; ">通过自带协议访问 svnserve 服务器</td></tr><tr><td style="font-family: verdana, sans-serif; font-size: small; ">svn+ssh://</td><td style="font-family: verdana, sans-serif; font-size: small; ">类似 svn://，支持通过 SSH 通道</td></tr></tbody></table><p><br>本节中，我们将看到如何配置 SVN 以使之能够通过所有的方法得以访问。当然这里我们之讨论基本的方法。要了解更高级的用途，我们推荐您阅读<a href="http://svnbook.red-bean.com/" class="external text" title="http://svnbook.red-bean.com/" rel="nofollow" style="color: rgb(181, 132, 67); background-image: url(http://wiki.ubuntu.org.cn/skins/ubuntuchina/external.png); background-repeat: no-repeat; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; padding-right: 13px; background-position: 100% 50%; ">《使用 Subversion 进行版本控制》在线电子书</a>。</p><a name=".E7.9B.B4.E6.8E.A5.E8.AE.BF.E9.97.AE.E6.96.87.E4.BB.B6.E4.BB.93.E5.BA.93.28file:.2F.2F.29" id=".E7.9B.B4.E6.8E.A5.E8.AE.BF.E9.97.AE.E6.96.87.E4.BB.B6.E4.BB.93.E5.BA.93.28file:.2F.2F.29" style="color: rgb(181, 132, 67); "></a><h4 style="margin-top: 1.5em; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); font-family: arial, verdana, sans-serif; font-size: 14px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; color: rgb(181, 132, 67); line-height: 1.2em; font-weight: normal; "><span class="editsection" style="float: right; margin-left: 1em; font-weight: normal; font-size: 12px; ">[<a href="http://wiki.ubuntu.org.cn/index.php?title=SubVersion&amp;action=edit&amp;section=9" title="编辑段落: 直接访问文件仓库(file://)" style="color: rgb(181, 132, 67); ">编辑</a>]</span><span class="mw-headline">直接访问文件仓库(file://)</span></h4><p>这是所有访问方式中最简单的。它不需要事先运行任何 SVN 服务。这种访问方式用于访问本地的 SVN 文件仓库。语法是：</p><pre style="font-size: 1em; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(238, 238, 238); border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(102, 102, 102); border-right-color: rgb(102, 102, 102); border-bottom-color: rgb(102, 102, 102); border-left-color: rgb(102, 102, 102); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; padding-top: 15px; padding-right: 20px; padding-bottom: 15px; padding-left: 20px; overflow-x: auto; overflow-y: auto; background-position: initial initial; ">$ svn co file:///home/svn/myproject
或者
$ svn co file://localhost/home/svn/myproject
</pre><p><em>注意：如果您并不确定主机的名称，您必须使用三个斜杠(///)，而如果您指定了主机的名称，则您必须使用两个斜杠(//).</em></p><p>对文件仓库的访问权限基于文件系统的权限。如果该用户具有读/写权限，那么他/她就可以签出/提交修改。如果您像前面我们说描述的那样设置了相应的组，您可以简单的将一个用户添加到&#8220;subversion&#8221;组中以使其具有签出和提交的权限。</p><a name=".E9.80.9A.E8.BF.87_WebDAV_.E5.8D.8F.E8.AE.AE.E8.AE.BF.E9.97.AE.28http:.2F.2F.29" id=".E9.80.9A.E8.BF.87_WebDAV_.E5.8D.8F.E8.AE.AE.E8.AE.BF.E9.97.AE.28http:.2F.2F.29" style="color: rgb(181, 132, 67); "></a><h4 style="margin-top: 1.5em; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); font-family: arial, verdana, sans-serif; font-size: 14px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; color: rgb(181, 132, 67); line-height: 1.2em; font-weight: normal; "><span class="editsection" style="float: right; margin-left: 1em; font-weight: normal; font-size: 12px; ">[<a href="http://wiki.ubuntu.org.cn/index.php?title=SubVersion&amp;action=edit&amp;section=10" title="编辑段落: 通过 WebDAV 协议访问(http://)" style="color: rgb(181, 132, 67); ">编辑</a>]</span><span class="mw-headline">通过 WebDAV 协议访问(<a href="http:" class="external free" title="http://" rel="nofollow" style="color: rgb(181, 132, 67); background-image: url(http://wiki.ubuntu.org.cn/skins/ubuntuchina/external.png); background-repeat: no-repeat; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; padding-right: 13px; background-position: 100% 50%; ">http://</a>)</span></h4><p>要通过 WebDAV 协议访问 SVN 文件仓库，您必须配置您的 Apache 2 Web 服务器。您必须加入下面的代码片段到您的 /etc/apache2/mods-available/dav_svn.conf中：</p><pre style="font-size: 1em; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(238, 238, 238); border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(102, 102, 102); border-right-color: rgb(102, 102, 102); border-bottom-color: rgb(102, 102, 102); border-left-color: rgb(102, 102, 102); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; padding-top: 15px; padding-right: 20px; padding-bottom: 15px; padding-left: 20px; overflow-x: auto; overflow-y: auto; background-position: initial initial; ">&lt;Location /svn/myproject&gt;
DAV svn
SVNPath /home/svn/myproject
AuthType Basic
AuthName "myproject subversion repository"
AuthUserFile /etc/subversion/passwd
&lt;LimitExcept GET PROPFIND OPTIONS REPORT&gt;
Require valid-user
&lt;/LimitExcept&gt;
&lt;/Location&gt;
</pre><p>如果需要用户每次登录时都进行用户密码验证，请将&lt;LimitExcept GET PROPFIND OPTIONS REPORT&gt;与&lt;/LimitExcept&gt;两行注释掉。</p><p>当您添加了上面的内容，您必须重新起动 Apache 2 Web 服务器，请输入下面的命令：</p><pre style="font-size: 1em; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(238, 238, 238); border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(102, 102, 102); border-right-color: rgb(102, 102, 102); border-bottom-color: rgb(102, 102, 102); border-left-color: rgb(102, 102, 102); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; padding-top: 15px; padding-right: 20px; padding-bottom: 15px; padding-left: 20px; overflow-x: auto; overflow-y: auto; background-position: initial initial; ">sudo /etc/init.d/apache2 restart
</pre><p>接下来，您需要创建 /etc/subversion/passwd 文件，该文件包含了用户授权的详细信息。要添加用户，您可以执行下面的命令：</p><pre style="font-size: 1em; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(238, 238, 238); border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(102, 102, 102); border-right-color: rgb(102, 102, 102); border-bottom-color: rgb(102, 102, 102); border-left-color: rgb(102, 102, 102); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; padding-top: 15px; padding-right: 20px; padding-bottom: 15px; padding-left: 20px; overflow-x: auto; overflow-y: auto; background-position: initial initial; ">sudo htpasswd -c /etc/subversion/passwd user_name
</pre><p>它会提示您输入密码，当您输入了密码，该用户就建立了。&#8220;-c&#8221;选项表示创建新的/etc/subversion/passwd文件，所以user_name所指的用户将是文件中唯一的用户。如果要添加其他用户，则去掉&#8220;-c&#8221;选项即可：</p><pre style="font-size: 1em; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(238, 238, 238); border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(102, 102, 102); border-right-color: rgb(102, 102, 102); border-bottom-color: rgb(102, 102, 102); border-left-color: rgb(102, 102, 102); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; padding-top: 15px; padding-right: 20px; padding-bottom: 15px; padding-left: 20px; overflow-x: auto; overflow-y: auto; background-position: initial initial; ">sudo htpasswd /etc/subversion/passwd other_user_name
</pre><p>您可以通过下面的命令来访问文件仓库：</p><pre style="font-size: 1em; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(238, 238, 238); border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(102, 102, 102); border-right-color: rgb(102, 102, 102); border-bottom-color: rgb(102, 102, 102); border-left-color: rgb(102, 102, 102); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; padding-top: 15px; padding-right: 20px; padding-bottom: 15px; padding-left: 20px; overflow-x: auto; overflow-y: auto; background-position: initial initial; ">$ svn co http://hostname/svn/myproject myproject --username user_name
</pre><p>它会提示您输入密码。您必须输入您使用 htpasswd 设置的密码。当通过验证，项目的文件就被签出了。</p><p><strong>警告：密码是通过纯文本传输的。如果您担心密码泄漏的问题，我们建议您使用 SSL 加密，有关详情请看下一节。</strong></p><a name=".E9.80.9A.E8.BF.87.E5.85.B7.E6.9C.89.E5.AE.89.E5.85.A8.E5.A5.97.E6.8E.A5.E5.AD.97.28SSL.29.E7.9A.84_WebDAV_.E5.8D.8F.E8.AE.AE.E8.AE.BF.E9.97.AE.28https:.2F.2F.29" id=".E9.80.9A.E8.BF.87.E5.85.B7.E6.9C.89.E5.AE.89.E5.85.A8.E5.A5.97.E6.8E.A5.E5.AD.97.28SSL.29.E7.9A.84_WebDAV_.E5.8D.8F.E8.AE.AE.E8.AE.BF.E9.97.AE.28https:.2F.2F.29" style="color: rgb(181, 132, 67); "></a><h4 style="margin-top: 1.5em; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); font-family: arial, verdana, sans-serif; font-size: 14px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; color: rgb(181, 132, 67); line-height: 1.2em; font-weight: normal; "><span class="editsection" style="float: right; margin-left: 1em; font-weight: normal; font-size: 12px; ">[<a href="http://wiki.ubuntu.org.cn/index.php?title=SubVersion&amp;action=edit&amp;section=11" title="编辑段落: 通过具有安全套接字(SSL)的 WebDAV 协议访问(https://)" style="color: rgb(181, 132, 67); ">编辑</a>]</span><span class="mw-headline">通过具有安全套接字(SSL)的 WebDAV 协议访问(<a href="https:" class="external free" title="https://" rel="nofollow" style="color: rgb(181, 132, 67); background-image: url(http://wiki.ubuntu.org.cn/skins/ubuntuchina/lock_icon.gif); background-repeat: no-repeat; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; padding-right: 16px; background-position: 100% 50%; ">https://</a>)</span></h4><p>通过具有 SSL 加密的 WebDAV 协议访问 SVN 文件仓库(<a href="https://)%E9%9D%9E%E5%B8%B8%E7%B1%BB%E4%BC%BC%E4%B8%8A%E8%8A%82%E6%89%80%E8%BF%B0%E7%9A%84%E5%86%85%E5%AE%B9%EF%BC%8C%E9%99%A4%E4%BA%86%E6%82%A8%E5%BF%85%E9%A1%BB%E4%B8%BA%E6%82%A8%E7%9A%84/" class="external free" title="https://)非常类似上节所述的内容，除了您必须为您的" rel="nofollow" style="color: rgb(181, 132, 67); background-image: url(http://wiki.ubuntu.org.cn/skins/ubuntuchina/lock_icon.gif); background-repeat: no-repeat; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; padding-right: 16px; background-position: 100% 50%; ">https://)非常类似上节所述的内容，除了您必须为您的</a>&nbsp;Apache 2 Web 服务器设置数字证书之外。</p><p>您可以安装由诸如 Verisign 发放的数字签名，或者您可以安装您自己的数字签名。</p><p>我们假设您已经为 Apache 2 Web 服务器安装和配置好了相应的数字证书。现在按照上一节所描述的方法访问 SVN 文件仓库，别忘了把&nbsp;<em>http://</em>&nbsp;换成<em>https://</em>。如何，几乎是一模一样的！</p><a name=".E9.80.9A.E8.BF.87.E8.87.AA.E5.B8.A6.E5.8D.8F.E8.AE.AE.E8.AE.BF.E9.97.AE.28svn:.2F.2F.29" id=".E9.80.9A.E8.BF.87.E8.87.AA.E5.B8.A6.E5.8D.8F.E8.AE.AE.E8.AE.BF.E9.97.AE.28svn:.2F.2F.29" style="color: rgb(181, 132, 67); "></a><h4 style="margin-top: 1.5em; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); font-family: arial, verdana, sans-serif; font-size: 14px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; color: rgb(181, 132, 67); line-height: 1.2em; font-weight: normal; "><span class="editsection" style="float: right; margin-left: 1em; font-weight: normal; font-size: 12px; ">[<a href="http://wiki.ubuntu.org.cn/index.php?title=SubVersion&amp;action=edit&amp;section=12" title="编辑段落: 通过自带协议访问(svn://)" style="color: rgb(181, 132, 67); ">编辑</a>]</span><span class="mw-headline">通过自带协议访问(svn://)</span></h4><p>当您创建了 SVN 文件仓库，您可以修改 /home/svn/myproject/conf/svnserve.conf 来配置其访问控制。</p><p><br>例如，您可以取消下面的注释符号来设置授权机制：</p><pre style="font-size: 1em; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(238, 238, 238); border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(102, 102, 102); border-right-color: rgb(102, 102, 102); border-bottom-color: rgb(102, 102, 102); border-left-color: rgb(102, 102, 102); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; padding-top: 15px; padding-right: 20px; padding-bottom: 15px; padding-left: 20px; overflow-x: auto; overflow-y: auto; background-position: initial initial; "># [general]
# password-db = passwd
</pre><p>现在，您可以在&#8220;passwd&#8221;文件中维护用户清单。编辑同一目录下&#8220;passwd&#8221;文件，添加新用户。语法如下：</p><pre style="font-size: 1em; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(238, 238, 238); border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(102, 102, 102); border-right-color: rgb(102, 102, 102); border-bottom-color: rgb(102, 102, 102); border-left-color: rgb(102, 102, 102); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; padding-top: 15px; padding-right: 20px; padding-bottom: 15px; padding-left: 20px; overflow-x: auto; overflow-y: auto; background-position: initial initial; ">username = password
＃(注意行开始不要有多余空格)
</pre><p>要了解详情，请参考该文件。</p><p><br>现在，您可以在本地或者远程通过 svn:// 当文 SVN 了，您可以使用&#8220;svnserve&#8221;来运行 svnserver，语法如下：</p><pre style="font-size: 1em; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(238, 238, 238); border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(102, 102, 102); border-right-color: rgb(102, 102, 102); border-bottom-color: rgb(102, 102, 102); border-left-color: rgb(102, 102, 102); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; padding-top: 15px; padding-right: 20px; padding-bottom: 15px; padding-left: 20px; overflow-x: auto; overflow-y: auto; background-position: initial initial; ">$ svnserve -d --foreground -r /home/svn
# -d -- daemon mode
# --foreground -- run in foreground (useful for debugging)
# -r -- root of directory to serve
要了解更多信息，请输入：
$ svnserve --help
</pre><p>当您执行了该命令，SVN 就开始监听默认的端口(3690)。您可以通过下面的命令来访问文件仓库：</p><pre style="font-size: 1em; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(238, 238, 238); border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(102, 102, 102); border-right-color: rgb(102, 102, 102); border-bottom-color: rgb(102, 102, 102); border-left-color: rgb(102, 102, 102); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; padding-top: 15px; padding-right: 20px; padding-bottom: 15px; padding-left: 20px; overflow-x: auto; overflow-y: auto; background-position: initial initial; ">$ svn co svn://hostname/myproject myproject --username user_name
</pre><p>基于服务器的配置，它会要求输入密码。一旦通过验证，就会签出文件仓库中的代码。</p><p><br>要同步文件仓库和本地的副本，您可以执行 update 子命令，语法如下：</p><pre style="font-size: 1em; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(238, 238, 238); border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(102, 102, 102); border-right-color: rgb(102, 102, 102); border-bottom-color: rgb(102, 102, 102); border-left-color: rgb(102, 102, 102); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; padding-top: 15px; padding-right: 20px; padding-bottom: 15px; padding-left: 20px; overflow-x: auto; overflow-y: auto; background-position: initial initial; ">$ cd project_dir
$ svn update
</pre><p>要了解更多的 SVN 子命令，您可以参考手册。例如要了解 co (checkout) 命令，请执行：</p><pre style="font-size: 1em; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(238, 238, 238); border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(102, 102, 102); border-right-color: rgb(102, 102, 102); border-bottom-color: rgb(102, 102, 102); border-left-color: rgb(102, 102, 102); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; padding-top: 15px; padding-right: 20px; padding-bottom: 15px; padding-left: 20px; overflow-x: auto; overflow-y: auto; background-position: initial initial; ">$ svn co --help
或者这样
$ svn --help commit
或者直接
☎ svn help co
checkout (co): 从版本库签出工作副本。
使用: checkout URL[@REV]... [PATH]
。。。。。
</pre><p><strong>一个实例：</strong></p><pre style="font-size: 1em; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(238, 238, 238); border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(102, 102, 102); border-right-color: rgb(102, 102, 102); border-bottom-color: rgb(102, 102, 102); border-left-color: rgb(102, 102, 102); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; padding-top: 15px; padding-right: 20px; padding-bottom: 15px; padding-left: 20px; overflow-x: auto; overflow-y: auto; background-position: initial initial; ">☎ killall svnserve; svnserve -d -r /home/svn/</pre><pre style="font-size: 1em; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(238, 238, 238); border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(102, 102, 102); border-right-color: rgb(102, 102, 102); border-bottom-color: rgb(102, 102, 102); border-left-color: rgb(102, 102, 102); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; padding-top: 15px; padding-right: 20px; padding-bottom: 15px; padding-left: 20px; overflow-x: auto; overflow-y: auto; background-position: initial initial; ">/home/svn/lj12-source/conf ☎ dog *
authz:[groups]
authz:lj12 = veexp
authz:[lj12-source:/] &lt;-注意写法。
authz:veexp = rw
authz:@lj12 = rw
authz:* = passwd:[users] &lt;-2个用户和密码。
passwd:veexp = icep
passwd:test = test 
svnserve.conf:[general]
svnserve.conf:anon-access = none
svnserve.conf:auth-access = write
svnserve.conf:password-db = passwd
svnserve.conf:authz-db = authz &lt;-如果不启用authz，则test也可以取出。</pre><pre style="font-size: 1em; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(238, 238, 238); border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(102, 102, 102); border-right-color: rgb(102, 102, 102); border-bottom-color: rgb(102, 102, 102); border-left-color: rgb(102, 102, 102); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; padding-top: 15px; padding-right: 20px; padding-bottom: 15px; padding-left: 20px; overflow-x: auto; overflow-y: auto; background-position: initial initial; ">☎ svn co svn://localhost/lj12-source --username veexp
认证领域: &lt;svn://localhost:3690&gt; a712643f-661e-0410-8ad4-f0554cd88977
用户名: veexp &#8220;veexp&#8221;的密码:
A lj12-source/tim.h A lj12-source/en.c
......</pre><p>认证失败的密码缓冲记录位置，明文密码。到1.6版本，可能使用keyring管理。如果调试密码，直接删除如下文件就可。</p><p>~/.subversion/auth/svn.simple/:</p><pre style="font-size: 1em; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(238, 238, 238); border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(102, 102, 102); border-right-color: rgb(102, 102, 102); border-bottom-color: rgb(102, 102, 102); border-left-color: rgb(102, 102, 102); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; padding-top: 15px; padding-right: 20px; padding-bottom: 15px; padding-left: 20px; overflow-x: auto; overflow-y: auto; background-position: initial initial; ">eea34a6f7baa67a3639cacd6a428dba4
</pre><a name=".E9.80.9A.E8.BF.87.E5.85.B7.E8.A2.ABSSH.E9.9A.A7.E9.81.93.E4.BF.9D.E6.8A.A4.E7.9A.84.E8.87.AA.E5.B8.A6.E5.8D.8F.E8.AE.AE.E8.AE.BF.E9.97.AE.28svn.2Bssh:.2F.2F.29" id=".E9.80.9A.E8.BF.87.E5.85.B7.E8.A2.ABSSH.E9.9A.A7.E9.81.93.E4.BF.9D.E6.8A.A4.E7.9A.84.E8.87.AA.E5.B8.A6.E5.8D.8F.E8.AE.AE.E8.AE.BF.E9.97.AE.28svn.2Bssh:.2F.2F.29" style="color: rgb(181, 132, 67); "></a><h4 style="margin-top: 1.5em; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); font-family: arial, verdana, sans-serif; font-size: 14px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; color: rgb(181, 132, 67); line-height: 1.2em; font-weight: normal; "><span class="editsection" style="float: right; margin-left: 1em; font-weight: normal; font-size: 12px; ">[<a href="http://wiki.ubuntu.org.cn/index.php?title=SubVersion&amp;action=edit&amp;section=13" title="编辑段落: 通过具被SSH隧道保护的自带协议访问(svn+ssh://)" style="color: rgb(181, 132, 67); ">编辑</a>]</span><span class="mw-headline">通过具被SSH隧道保护的自带协议访问(svn+ssh://)</span></h4><p>配置和服务器进程于上节所述相同。我们假设您已经运行了&#8220;svnserve&#8221;命令。</p><p>我们还假设您运行了 ssh 服务并允许接入。要验证这一点，请尝试使用 ssh 登录计算机。如果您可以登录，那么大功告成，如果不能，请在执行下面的步骤前解决它。</p><p>svn+ssh:// 协议使用 SSH 加密来访问 SVN 文件仓库。如您所知，数据传输是加密的。要访问这样的文件仓库，请输入：</p><pre style="font-size: 1em; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(238, 238, 238); border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(102, 102, 102); border-right-color: rgb(102, 102, 102); border-bottom-color: rgb(102, 102, 102); border-left-color: rgb(102, 102, 102); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; padding-top: 15px; padding-right: 20px; padding-bottom: 15px; padding-left: 20px; overflow-x: auto; overflow-y: auto; background-position: initial initial; ">$ svn co svn+ssh://hostname/home/svn/myproject myproject --username user_name
</pre><p><strong>注意：在这种方式下，您必须使用完整的路径(/home/svn/myproject)来访问 SVN 文件仓库</strong></p><p>基于服务器的配置，它会要求输入密码。您必须输入您用于登录 ssh 的密码，一旦通过验证，就会签出文件仓库中的代码。</p><p>您还应该参考 SVN book 以了解关于 svn+ssh:// 协议的详细信息。</p></span></div>
<img src ="http://www.cppblog.com/keigoliye/aggbug/101974.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/keigoliye/" target="_blank">暗夜教父</a> 2009-11-26 15:01 <a href="http://www.cppblog.com/keigoliye/archive/2009/11/26/101974.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux下编译安装mysql</title><link>http://www.cppblog.com/keigoliye/archive/2009/11/05/100234.html</link><dc:creator>暗夜教父</dc:creator><author>暗夜教父</author><pubDate>Thu, 05 Nov 2009 09:16:00 GMT</pubDate><guid>http://www.cppblog.com/keigoliye/archive/2009/11/05/100234.html</guid><wfw:comment>http://www.cppblog.com/keigoliye/comments/100234.html</wfw:comment><comments>http://www.cppblog.com/keigoliye/archive/2009/11/05/100234.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/keigoliye/comments/commentRss/100234.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/keigoliye/services/trackbacks/100234.html</trackback:ping><description><![CDATA[<p>（呵）近一段时间由于工作需要，终于开始玩Linux了，今天搞了一天的<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">MySQL</font></span>编译安装，记录下来，备忘吧！！</p>
<p>&nbsp;</p>
<p>（卡）安装环境：VmWare5(桥接模式) + RedHat E AS 4 + 已安装了开发工具以及相关开发包(安装Linux系统时自己要定制的)，并测试成功</p>
<p>&nbsp;</p>
<p>（！）先给出<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">MySQL</font></span> For Linux 源码下载地址，是xx.tar.zg格式的</p>
<p><a href="http://www.filewatcher.com/m/mysql-5.0.45.tar.gz.24433261.0.0.html"><font color=#006699>http://www.filewatcher.com/m/<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span>-5.0.45.tar.gz.24433261.0.0.html</font></a></p>
<p>&nbsp;</p>
<p>（1）</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-------------预备工作----------</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1：假如下载的文件名为：<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span>-5.0.45.tar.gz</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2：<span style="COLOR: #0000ff">假如copy到 /home下</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3：groupadd <span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span> #添加<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span>组</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4：useradd -g <span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span> <span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span> #添加一个<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span>用户</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5：cd /home #进入到该目录</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-----------------------编译过程-----------------------</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6：tar zxvf <span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span>-5.0.45.tar.gz #解压后，在该目录下会出现一个同名的文件夹</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7：<span style="COLOR: #0000ff">cd /home/<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span>-5.0.45</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8：./configure --prefix=/usr/local/<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span> --with-charset=utf8 --with-collation=utf8_general_ci --with-extra-charsets=latin1 #参数设置，可以先不明白，以后再修改配置</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9：make</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10：make install</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11：cp support-files/my-medium.cnf /etc/my.cnf #如果/etc/my.cnf已存在，则先备份，再删除</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 12：vi /etc/my.cnf #将log-bin=<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span>-bin注释掉</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----------------------------安装并初步配置<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span>--------------------------</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13：<span style="COLOR: #0000ff">cd /usr/local/<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span></span></p>
<p><span style="COLOR: #0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">14：bin/mysql_install_db --user=<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span> #初始化<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span></span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;15：chown -R root <font size=3><span style="FONT-SIZE: medium">.</span> #改当前目录的捅有者为root。注意，最后有个 . 啊，表示当前目录</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 16：chown -R <span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span> /usr/local/<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span>/var #-R表示递归之下的所有目录</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 17：chgrp -R <span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span> /usr/local/<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span> #改变目录所属为<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 18：bin/mysqld_safe --user=<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span> &amp;&nbsp;#启动<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span></p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-----------------------------------------更改<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span>的root用户密码----------------------------</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 19：<span style="COLOR: #0000ff">bin/</span><span style="COLOR: #0000ff">mysqladmin -uroot password 123456</span> #在<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span>政党启动的情况下，更改root用户的登录密码</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20：<span style="COLOR: #0000ff">bin/</span><span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span> -uroot -p #输入此命令后，会提示你输入root用户密码123456，</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 21：show databases; #如果查出所有数据库，就恭喜你了</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------把<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span>加入到系统服务中-------------------------------------</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;22：cp&nbsp; /usr/local/<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span>/share/<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span>/<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span>.server&nbsp; /etc/init.d/mysqld&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chkconfig --add&nbsp; mysqld #加入到系统服务中，就可以通过service mysqld start|stop|status|restart等进行管理，很是方便，就不用再到/usr/local/mysql5.0.45/bin/启动<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span>了</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------------配置<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span>环境变量------------------------------------------------</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 23：cd /root #回到你的个人主目录，我这里是用root登陆的</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cp .bashrc .bashrc.bak #备份一下吧</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vi .bashrc </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在最后加入：export PATH=/usr/local/<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span>/bin:$PATH:.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;source ~/.bashrc #回到终端再输入此命令，以使刚修改的起作用，~代表用户主目录</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;env #查看一下是否生效</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 24：此是用来替换23步的一种方法</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cp /usr/local/<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span>/bin/<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span>&nbsp;&nbsp; /usr/bin/<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span>&nbsp;#把<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span>常用的工具目录加入到系统变量目录中去，自己选择性加，这样做主要是可以直接运行该工具，而不需要切换到该目录下，类似于添加环境变量了</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -------------------------------------------------------------------------------让Linux开放3306端口-------------------------------------------</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;25：service iptables stop</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vi /etc/sysconfig/iptables</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service iptables start</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-------------------------------------------------------------------------------给root用户开启<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span>远程访问权限--------------------------------------------</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 26：shutdown -hr now #重启</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ps -e | grep <span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span> #查看<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span>是否已随开机启动，或者输入：service mysqld status</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span> -uroot -p #进入<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;输入root用户的密码</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grant all on *.* to <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#114;&#111;&#111;&#116;&#64;&#39;&#37;&#39;"><font color=#006699>root@'%'</font></a>&nbsp;identified by '123456'; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #grant 权限 on 数据库名.表名 to 用户@登录主机 identified by "用户密码"; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flush privileges; #为了开发方便,可以让root用户具有远程访问的权限</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#最后，再附上一个很好用的<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span>客户端，<a href="http://download.csdn.net/source/924456"><font color=#006699>http://download.csdn.net/source/924456</font></a></p>
<p>&nbsp;</p>
<p>（2）默认的<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span>数据库目录是 /usr/local/<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span>-5.0.45/var</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们在安装时指定了安装目录为/usr/local/<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span>-5.0.45，除了在这里安装所要的文件外，还有一部分用户常用的，可执行二进制文件被放到了/usr/bin中，其实，在/usr/local/<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span>-5.0.45/bin下，全都有这些命令了，之所以要在/usr/bin中把那几个命令考过来，就是为了方便，相当于设置环境变量了，你可以echo $PATH一下，里面一定有/usr/bin这个值的。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: #0000ff">明白了安装过程，删除<span class=hilite1><font style="BACKGROUND-COLOR: #ffff00">mysql</font></span>也就不足为难了</span></p>
<p>&nbsp;</p>
<p>&nbsp;（3）通过一个完整的例子，自己会学到很多东西，linux常用命令还真需要自己来，整理记录</p>
<img src ="http://www.cppblog.com/keigoliye/aggbug/100234.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/keigoliye/" target="_blank">暗夜教父</a> 2009-11-05 17:16 <a href="http://www.cppblog.com/keigoliye/archive/2009/11/05/100234.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>apt-get 使用指南 </title><link>http://www.cppblog.com/keigoliye/archive/2009/10/19/98924.html</link><dc:creator>暗夜教父</dc:creator><author>暗夜教父</author><pubDate>Mon, 19 Oct 2009 02:59:00 GMT</pubDate><guid>http://www.cppblog.com/keigoliye/archive/2009/10/19/98924.html</guid><wfw:comment>http://www.cppblog.com/keigoliye/comments/98924.html</wfw:comment><comments>http://www.cppblog.com/keigoliye/archive/2009/10/19/98924.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/keigoliye/comments/commentRss/98924.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/keigoliye/services/trackbacks/98924.html</trackback:ping><description><![CDATA[<p><span class="mw-headline"><span class="hilite2">apt-get</span> 使用指南 </span>
</p>
<p>原文出处：<span class="external free">https://help.<span class="hilite1">ubuntu</span>.com/community/AptGetHowto</span>
</p>
<p>原文作者：UbuntuWiki </p>
<p>授权许可： </p>
<ul>
    <li><span class="external text">创作共享协议Attribution-ShareAlike 2.0</span>
    </li>
    <li><span class="external text">GNU自由文档许可证</span>
    </li>
</ul>
<p>翻译人员：sigus 5451vs5451 youyou keke initnas </p>
<p>校正人员：MillenniumDark </p>
<p><br>
适用版本： </p>
<p>文章状态：等待校正 </p>
<hr>
<p><img  src="https://help.ubuntu.com/community/IconsPage?action=AttachFile&amp;amp;do=get&amp;amp;target=IconApt.png" alt="IconsPage?action=AttachFile&amp;amp;amp;do=get&amp;amp;amp;target=IconApt.png">
<span class="hilite2">apt-get</span>使用source.list文件进行软件包管理。如果您想了解关于如何编辑和更新source.list中的条目的信息，请参阅SourcesList </p>
<p><a name=".E5.BC.95.E8.A8.80" title=".E5.BC.95.E8.A8.80">
</a></p>
<h3><span class="mw-headline"><a name=".E5.BC.95.E8.A8.80" title=".E5.BC.95.E8.A8.80">引言 </a></span>
</h3>
<p><a name=".E5.BC.95.E8.A8.80" title=".E5.BC.95.E8.A8.80">&#8220;起初GNU/Linux系
统中只有.tar.gz。用户必须自己编译他们想使用的每一个程序。在Debian出现之後，人们认为有必要在系统中添加一种机制用来管理安装在计算机上
的软件包。人们将这套系统称为dpkg。至此着名的&#8216;package&#8217;首次在GNU/Linux上出现。不久之後红帽子也开始着手建立自己的包管理系统
&#8216;rpm&#8217;。 </a></p>
<p><a name=".E5.BC.95.E8.A8.80" title=".E5.BC.95.E8.A8.80">&#8220;GNU/Linux的创造
者们很快又陷入了新的窘境。他们希望通过一种快捷、实用而且高效的方式来安装软件包。这些软件包可以自动处理相互之间的依赖关系，并且在升级过程中维护他
们的配置文件。Debian又一次充当了开路先锋的角色。她首创了APT（Advanced Packaging Tool）。这一工具後来被<em>Conectiva</em>
移植到红帽子系统中用于对rpm包的管理。在其他一些发行版中我们也能看到她的身影。&#8221; </a></p>
<ul>
    <li><a name=".E5.BC.95.E8.A8.80" title=".E5.BC.95.E8.A8.80">-- 摘自 Debian APT HOWTO </a></li>
</ul>
<p><a name=".E5.BC.95.E8.A8.80" title=".E5.BC.95.E8.A8.80">"同时，apt是一个很完整和先进的软件包管理程序，使用它可以让你，又简单，又准确的找到你要的的软件包， 并且安装或卸载都很简洁。 它还可以让你的所有软件都更新到最新状态，而且也可以用来对<span class="hilite1">ubuntu</span>进行升级。" </a></p>
<p><a name=".E5.BC.95.E8.A8.80" title=".E5.BC.95.E8.A8.80">"apt是需要用命令来操作的软件，不过现在也出现了很多有图形的软件，比如Synaptic, Kynaptic 和 Adept。" </a></p>
<p><a name=".E5.91.BD.E4.BB.A4" title=".E5.91.BD.E4.BB.A4">
</a></p>
<h3><a name=".E5.91.BD.E4.BB.A4" title=".E5.91.BD.E4.BB.A4">&nbsp;<span class="mw-headline">命令 </span>
</a></h3>
<p><a name=".E5.91.BD.E4.BB.A4" title=".E5.91.BD.E4.BB.A4">下面将要介绍的所有命令都需要sudo！使用时请将&#8220;packagename&#8221;和&#8220;string&#8221;替换成您想要安装或者查找的程序。 </a></p>
<ul>
    <li><a name=".E5.91.BD.E4.BB.A4" title=".E5.91.BD.E4.BB.A4"><span class="hilite2">apt-get</span> update——在修改/etc/apt/sources.list或者/etc/apt/preferences之後运行该命令。此外您需要定期运行这一命令以确保您的软件包列表是最新的。 </a></li>
    <li><a name=".E5.91.BD.E4.BB.A4" title=".E5.91.BD.E4.BB.A4"><span class="hilite2">apt-get</span> install packagename——安装一个新软件包（参见下文的aptitude） </a></li>
    <li><a name=".E5.91.BD.E4.BB.A4" title=".E5.91.BD.E4.BB.A4"><span class="hilite2">apt-get</span> <span class="hilite3">remove</span> packagename——卸载一个已安装的软件包（保留配置文件） </a></li>
    <li><a name=".E5.91.BD.E4.BB.A4" title=".E5.91.BD.E4.BB.A4"><span class="hilite2">apt-get</span> --purge <span class="hilite3">remove</span> packagename——卸载一个已安装的软件包（删除配置文件） </a></li>
    <li><a name=".E5.91.BD.E4.BB.A4" title=".E5.91.BD.E4.BB.A4">dpkg --force-all --purge packagename 有些软件很难卸载，而且还阻止了别的软件的应用，就可以用这个，不过有点冒险。 </a></li>
    <li><a name=".E5.91.BD.E4.BB.A4" title=".E5.91.BD.E4.BB.A4"><span class="hilite2">apt-get</span> autoclean apt会把已装或已卸的软件都备份在硬盘上，所以如果需要空间的话，可以让这个命令来删除你已经删掉的软件 </a></li>
    <li><a name=".E5.91.BD.E4.BB.A4" title=".E5.91.BD.E4.BB.A4"><span class="hilite2">apt-get</span> clean 这个命令会把安装的软件的备份也删除，不过这样不会影响软件的使用的。 </a></li>
    <li><a name=".E5.91.BD.E4.BB.A4" title=".E5.91.BD.E4.BB.A4"><span class="hilite2">apt-get</span> upgrade——更新所有已安装的软件包 </a></li>
    <li><a name=".E5.91.BD.E4.BB.A4" title=".E5.91.BD.E4.BB.A4"><span class="hilite2">apt-get</span> dist-upgrade——将系统升级到新版本 </a></li>
    <li><a name=".E5.91.BD.E4.BB.A4" title=".E5.91.BD.E4.BB.A4">apt-cache search string——在软件包列表中搜索字符串 </a></li>
    <li><a name=".E5.91.BD.E4.BB.A4" title=".E5.91.BD.E4.BB.A4">dpkg -l package-name-pattern——列出所有与模式相匹配的软件包。如果您不知道软件包的全名，您可以使用&#8220;*package-name-pattern*&#8221;。 </a></li>
    <li><a name=".E5.91.BD.E4.BB.A4" title=".E5.91.BD.E4.BB.A4">aptitude——详细查看已安装或可用的软件包。与<span class="hilite2">apt-get</span>类似，aptitude可以通过命令行方式调用，但仅限于某些命令——最常见的有安装和卸载命令。由于aptitude比<span class="hilite2">apt-get</span>了解更多信息，可以说它更适合用来进行安装和卸载。 </a></li>
    <li><a name=".E5.91.BD.E4.BB.A4" title=".E5.91.BD.E4.BB.A4">apt-cache showpkg pkgs——显示软件包信息。 </a></li>
    <li><a name=".E5.91.BD.E4.BB.A4" title=".E5.91.BD.E4.BB.A4">apt-cache dumpavail——打印可用软件包列表。 </a></li>
    <li><a name=".E5.91.BD.E4.BB.A4" title=".E5.91.BD.E4.BB.A4">apt-cache show pkgs——显示软件包记录，类似于dpkg &#8211;print-avail。 </a></li>
    <li><a name=".E5.91.BD.E4.BB.A4" title=".E5.91.BD.E4.BB.A4">apt-cache pkgnames——打印软件包列表中所有软件包的名称。 </a></li>
    <li><a name=".E5.91.BD.E4.BB.A4" title=".E5.91.BD.E4.BB.A4">dpkg -S file——这个文件属于哪个已安装软件包。 </a></li>
    <li><a name=".E5.91.BD.E4.BB.A4" title=".E5.91.BD.E4.BB.A4">dpkg -L package——列出软件包中的所有文件。 </a></li>
    <li><a name=".E5.91.BD.E4.BB.A4" title=".E5.91.BD.E4.BB.A4">apt-file search filename——查找包含特定文件的软件包（不一定是已安装的），这些文件的文件名中含有指定的字符串。apt-file是一个独立的软件包。您必须先使用<span class="hilite2">apt-get</span>
    install来安装它，然後运行apt-file update。如果apt-file search
    filename输出的内容太多，您可以尝试使用apt-file search filename | grep -w
    filename（只显示指定字符串作为完整的单词出现在其中的那些文件名）或者类似方法，例如：apt-file search filename
    | grep
    /bin/（只显示位于诸如/bin或/usr/bin这些文件夹中的文件，如果您要查找的是某个特定的执行文件的话，这样做是有帮助的）。 </a></li>
</ul>
<p><a name=".E5.91.BD.E4.BB.A4" title=".E5.91.BD.E4.BB.A4">＊ <span class="hilite2">apt-get</span> autoclean——定期运行这个命令来清除那些已经卸载的软件包的.deb文件。通过这种方式，您可以释放大量的磁盘空间。如果您的需求十分迫切，可以使用<span class="hilite2">apt-get</span> clean以释放更多空间。这个命令会将已安装软件包裹的.deb文件一并删除。大多数情况下您不会再用到这些.debs文件，因此如果您为磁盘空间不足而感到焦头烂额，这个办法也许值得一试。 </a></p>
<p><a name=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8" title=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8">
</a></p>
<h3><span class="mw-headline"><a name=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8" title=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8">典型应用 </a></span>
</h3>
<p><a name=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8" title=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8">我是个赛车发烧友，想装个赛车类游戏玩玩。有哪些赛车类游戏可供选择呢？ </a></p>
<pre><a name=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8" title=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8">apt-cache search racing game</a></pre>
<p><a name=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8" title=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8">出来了一大堆结果。看看有没有更多关于torcs这个游戏的信息。 </a></p>
<pre><a name=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8" title=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8">apt-cache show torcs</a></pre>
<p><a name=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8" title=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8">看上去不错。这个游戏是不是已经安装了？最新版本是多少？它属于哪一类软件，universe还是main? </a></p>
<pre><a name=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8" title=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8">apt-cache policy torcs</a></pre>
<p><a name=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8" title=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8">好吧，现在我要来安装它！ </a></p>
<pre><a name=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8" title=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8"><span class="hilite2">apt-get</span> install torcs</a></pre>
<p><a name=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8" title=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8">在
控制台下我应该调用什么命令来运行这个游戏呢？在这个例子中，直接用torcs就行了，但并不是每次都这么简单。我们可一通过查找哪些文件被安装到了
&#8220;/usr/bin&#8221;文件夹下来确定二进制文件名。对于游戏软件，这些二进制文件将被安装到&#8220;/usr/games&#8221;下面。对于系统管理工具相应的文件夹
是&#8220;/usr/sbin&#8221;。 </a></p>
<pre><a name=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8" title=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8">dpkg -L torcs|grep /usr/games/</a></pre>
<p><a name=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8" title=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8">这个命令的前面一部分显示软件包&#8220;torcs&#8221;安装的所有文件（您自己试试看）。通过命令的第二部分，我们告诉系统只显示前一部分的输出结果中含有&#8220;/usr/games&#8221;的那些行。 </a></p>
<p><a name=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8" title=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8">这个游戏很酷哦。说不定还有其他赛道可玩的？ </a></p>
<pre><a name=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8" title=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8">apt-cache search torcs</a></pre>
<p><a name=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8" title=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8">我的磁盘空间不够用了。我得把apt的缓存空间清空才行。 </a></p>
<pre><a name=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8" title=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8"><span class="hilite2">apt-get</span> clean</a></pre>
<p><a name=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8" title=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8">哦不，老妈叫我把机器上的所有游戏都删掉。但是我想把配置文件保留下来，这样待会我只要重装一下就可以继续玩了。 </a></p>
<pre><a name=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8" title=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8"><span class="hilite2">apt-get</span> <span class="hilite3">remove</span> torcs</a></pre>
<p><a name=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8" title=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8">如果我想连配置文件一块删除： </a></p>
<pre><a name=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8" title=".E5.85.B8.E5.9E.8B.E5.BA.94.E7.94.A8"><span class="hilite2">apt-get</span> <span class="hilite3">remove</span> --purge torcs</a></pre>
<p><a name=".E9.A2.9D.E5.A4.96.E7.9A.84.E8.BD.AF.E4.BB.B6.E5.8C.85" title=".E9.A2.9D.E5.A4.96.E7.9A.84.E8.BD.AF.E4.BB.B6.E5.8C.85">
</a></p>
<h3><span class="mw-headline"><a name=".E9.A2.9D.E5.A4.96.E7.9A.84.E8.BD.AF.E4.BB.B6.E5.8C.85" title=".E9.A2.9D.E5.A4.96.E7.9A.84.E8.BD.AF.E4.BB.B6.E5.8C.85">额外的软件包 </a></span>
</h3>
<p><a name=".E9.A2.9D.E5.A4.96.E7.9A.84.E8.BD.AF.E4.BB.B6.E5.8C.85" title=".E9.A2.9D.E5.A4.96.E7.9A.84.E8.BD.AF.E4.BB.B6.E5.8C.85">deborphan和debfoster工具可以找出已经安装在系统上的不会被用到的软件包。 </a></p>
<p><a name=".E6.8F.90.E9.AB.98.E5.91.BD.E4.BB.A4.E8.A1.8C.E6.96.B9.E5.BC.8F.E4.B8.8B.E7.9A.84.E5.B7.A5.E4.BD.9C.E6.95.88.E7.8E.87" title=".E6.8F.90.E9.AB.98.E5.91.BD.E4.BB.A4.E8.A1.8C.E6.96.B9.E5.BC.8F.E4.B8.8B.E7.9A.84.E5.B7.A5.E4.BD.9C.E6.95.88.E7.8E.87">
</a></p>
<h3><a name=".E6.8F.90.E9.AB.98.E5.91.BD.E4.BB.A4.E8.A1.8C.E6.96.B9.E5.BC.8F.E4.B8.8B.E7.9A.84.E5.B7.A5.E4.BD.9C.E6.95.88.E7.8E.87" title=".E6.8F.90.E9.AB.98.E5.91.BD.E4.BB.A4.E8.A1.8C.E6.96.B9.E5.BC.8F.E4.B8.8B.E7.9A.84.E5.B7.A5.E4.BD.9C.E6.95.88.E7.8E.87">&nbsp;<span class="mw-headline">提高命令行方式下的工作效率 </span>
</a></h3>
<p><a name=".E6.8F.90.E9.AB.98.E5.91.BD.E4.BB.A4.E8.A1.8C.E6.96.B9.E5.BC.8F.E4.B8.8B.E7.9A.84.E5.B7.A5.E4.BD.9C.E6.95.88.E7.8E.87" title=".E6.8F.90.E9.AB.98.E5.91.BD.E4.BB.A4.E8.A1.8C.E6.96.B9.E5.BC.8F.E4.B8.8B.E7.9A.84.E5.B7.A5.E4.BD.9C.E6.95.88.E7.8E.87">您可以通过定义别名（alias）来提高这些命令的输入速度。例如，您可以在您的*~/.bashrc*文件中添加下列内容 </a></p>
<pre><a name=".E6.8F.90.E9.AB.98.E5.91.BD.E4.BB.A4.E8.A1.8C.E6.96.B9.E5.BC.8F.E4.B8.8B.E7.9A.84.E5.B7.A5.E4.BD.9C.E6.95.88.E7.8E.87" title=".E6.8F.90.E9.AB.98.E5.91.BD.E4.BB.A4.E8.A1.8C.E6.96.B9.E5.BC.8F.E4.B8.8B.E7.9A.84.E5.B7.A5.E4.BD.9C.E6.95.88.E7.8E.87">alias acs='apt-cache search'<br>alias agu='sudo <span class="hilite2">apt-get</span> update'<br>alias agg='sudo <span class="hilite2">apt-get</span> upgrade'<br>alias agd='sudo <span class="hilite2">apt-get</span> dist-upgrade'<br>alias agi='sudo <span class="hilite2">apt-get</span> install'<br>alias agr='sudo <span class="hilite2">apt-get</span> <span class="hilite3">remove</span>'</a></pre>
<p><a name=".E6.8F.90.E9.AB.98.E5.91.BD.E4.BB.A4.E8.A1.8C.E6.96.B9.E5.BC.8F.E4.B8.8B.E7.9A.84.E5.B7.A5.E4.BD.9C.E6.95.88.E7.8E.87" title=".E6.8F.90.E9.AB.98.E5.91.BD.E4.BB.A4.E8.A1.8C.E6.96.B9.E5.BC.8F.E4.B8.8B.E7.9A.84.E5.B7.A5.E4.BD.9C.E6.95.88.E7.8E.87">或者使用前面介绍的aptitude命令，如&#8220;alias agi='sudo aptitude install'&#8221;。 </a></p>
<p><a name=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86" title=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86">
</a></p>
<h3><a name=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86" title=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86">&nbsp;<span class="mw-headline">为<span class="hilite2">apt-get</span>设置http代理 </span>
</a></h3>
<p><a name=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86" title=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86">可以通过三种方法为<span class="hilite2">apt-get</span>设置http代理 </a></p>
<p><a name=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86" title=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86"><strong>方法一</strong>
</a></p>
<p><a name=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86" title=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86">这是一种临时的手段，如果您仅仅是暂时需要通过http代理使用<span class="hilite2">apt-get</span>，您可以使用这种方式。 </a></p>
<p><a name=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86" title=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86">在使用<span class="hilite2">apt-get</span>之前，在终端中输入以下命令（根据您的实际情况替换yourproxyaddress和proxyport）。 </a></p>
<pre><a name=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86" title=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86">export http_proxy=http://yourproxyaddress:proxyport</a></pre>
<p><a name=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86" title=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86"><strong>方法二</strong>
</a></p>
<p><a name=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86" title=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86">这种方法要用到/etc/apt/文件夹下的apt.conf文件。如果您希望<span class="hilite2">apt-get</span>（而不是其他应用程序）一直使用http代理，您可以使用这种方式。 </a></p>
<p><a name=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86" title=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86">注意： 某些情况下，系统安装过程中没有建立apt配置文件。下面的操作将视情况修改现有的配置文件或者新建配置文件。 </a></p>
<pre><a name=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86" title=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86">sudo gedit /etc/apt/apt.conf</a></pre>
<p><a name=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86" title=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86">在您的apt.conf文件中加入下面这行（根据你的实际情况替换yourproxyaddress和proxyport）。 </a></p>
<pre><a name=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86" title=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86">Acquire::http::Proxy "http://yourproxyaddress:proxyport";</a></pre>
<p><a name=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86" title=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86">保存apt.conf文件。 </a></p>
<p><a name=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86" title=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86"><strong>方法三</strong>
</a></p>
<p><a name=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86" title=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86">这种方法会在您的主目录下的.bashrc文件中添加两行。如果您希望<span class="hilite2">apt-get</span>和其他应用程序如wget等都使用http代理，您可以使用这种方式。 </a></p>
<pre><a name=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86" title=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86">gedit ~/.bashrc</a></pre>
<p><a name=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86" title=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86">在您的.bashrc文件末尾添加如下内容（根据你的实际情况替换yourproxyaddress和proxyport）。 </a></p>
<pre><a name=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86" title=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86">http_proxy=http://yourproxyaddress:proxyport<br>export http_proxy</a></pre>
<p><a name=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86" title=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86">保存文件。关闭当前终端，然後打开另一个终端。 </a></p>
<p><a name=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86" title=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86">使用<span class="hilite2">apt-get</span> update或者任何您想用的网络工具测试代理。我使用firestarter查看活动的网络连接。 </a></p>
<p><a name=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86" title=".E4.B8.BAapt-get.E8.AE.BE.E7.BD.AEhttp.E4.BB.A3.E7.90.86">如果您为了纠正错误而再次修改了配置文件，记得关闭终端并重新打开，否自新的设置不会生效。 </a></p><img src ="http://www.cppblog.com/keigoliye/aggbug/98924.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/keigoliye/" target="_blank">暗夜教父</a> 2009-10-19 10:59 <a href="http://www.cppblog.com/keigoliye/archive/2009/10/19/98924.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何用Apache 封掉国内用户</title><link>http://www.cppblog.com/keigoliye/archive/2009/10/17/98808.html</link><dc:creator>暗夜教父</dc:creator><author>暗夜教父</author><pubDate>Fri, 16 Oct 2009 16:41:00 GMT</pubDate><guid>http://www.cppblog.com/keigoliye/archive/2009/10/17/98808.html</guid><wfw:comment>http://www.cppblog.com/keigoliye/comments/98808.html</wfw:comment><comments>http://www.cppblog.com/keigoliye/archive/2009/10/17/98808.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/keigoliye/comments/commentRss/98808.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/keigoliye/services/trackbacks/98808.html</trackback:ping><description><![CDATA[<p>如果想封掉国内ip或者封掉国外ip，总归要现有国内的ip段才可以。如果要做dns智能解析，也要有各地各运营商的ip段才行。网上有很多各式各样的ip表，但很多都过期了，也不全。如果要做一个比较完整的ip数据，还是要靠APNIC才行。<br>亚太互联网络信息中心（Asia－Pacific Network InformationCenter，简称APNIC）坐落于澳大利亚的布里斯班，是全球现有4个地区性互联网注册管理机构（RIR）之一，负责向亚太地区64个经济体提供IP（v4及v6）地址和自治系统（AS）号码分配，以及反向DNS授权服务的非营利性会员组织。其会员单位包括ISP、国家（或地区）互联网注册管理机构（NIR）等互联网组织。<br>如果要找出国内的ip地址段，这个比较简单<br>国家IP段数据下载地址：http://ftp.apnic.net/apnic/dbase/data/country-ipv4.lst<br>下载数据后，将国家为cn的ip挑出来自己处理一下就可以。<br>如果要找出各地各运营商的ip段<br><span id=more-2342></span></p>
<blockquote>
<p>wget http://ftp.apnic.net/apnic/dbase/tools/ripe-dbase-client-v3.tar.gz<br>tar xzvf ripe-dbase-client-v3.tar.gz<br>cd whois-3.1<br>./configure<br>make<br>完成上述编译安装工作后，我们开始获取IP地址段；<br>中国网通：<br>./whois3 -h whois.apnic.net -l -i mb MAINT-CNCGROUP &gt; /var/cnc<br>中国电信：<br>./whois3 -h whois.apnic.net -l -i mb MAINT-CHINANET &gt; /var/chinanet<br>中国铁通：<br>./whois3 -h whois.apnic.net -l -i mb MAINT-CN-CRTC &gt; /var/crtc</p>
</blockquote>
<p>打开获取后的文件可以看到里面的信息非常详细，甚至可以看到各个分公司的负责人、电话、电子邮件等等信息。如果想得到一份整齐干净的IP地址段文件，只要用grep和awk简单过滤就可以了 </p>
<p>然后在apache中设置一下权限就可以。</p>
<blockquote>
<p><directory ? data htdocs?><br>Order deny,allow<br>Deny from 113.0.0.0/13<br>&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.<br>Deny from 61.240.0.0/14<br></directory></p>
</blockquote>
<img src ="http://www.cppblog.com/keigoliye/aggbug/98808.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/keigoliye/" target="_blank">暗夜教父</a> 2009-10-17 00:41 <a href="http://www.cppblog.com/keigoliye/archive/2009/10/17/98808.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>