linux命令搭建服务 linux系统服务

linux下搭建ftp服务器

linux下搭建ftp服务器

大冶网站制作公司哪家好,找创新互联建站!从网页设计、网站建设、微信开发、APP开发、响应式网站等网站项目制作,到程序开发,运营维护。创新互联建站于2013年创立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联建站

下面我就为大家整理了一些Linux认证复习备考资料。希望大家可以从中学习答题方法,让自己的得到进步!最近为了方便目标板与PC机上LINUX之间的通讯,就在LINUX搭建了FTP,工作不难,写个总结。主要经过以下几个步骤:

1.检查是否安装了vsftpd服务器

可以用rpm -q vsftpd命令来查看,若显示"vsftpd-1.1.3-8",则说明系统已经安装vsftpd服务器,若没有则可以在图形环境下单击"主菜单→系统设置→添加删除应用程序"菜单项,在出现的"软件包管理"对话框里确保选中"FTP服务器"选项,然后单击"更新"按钮,按照屏幕提示插入第3张安装光盘即可开始安装。

2.启动/重新启动/停止vsftpd服务

从Red Hat Linux 9.0开始,vsftpd默认只采用standalone方式启动vsftpd服务,方法是在终端命令窗口运行以下命令:

[root@ahpeng root] /etc/rc.d/init.d/vsftpd start

重新启动vsftpd服务:

[root@ahpeng root] /etc/rc.d/init.d/ vsftpd restart

关闭vsftpd服务:

[root@ahpeng root] /etc/rc.d/init.d/ vsftpd stop

3.vsftpd的配置

在Red Hat Linux 9.0里的vsftpd共有3个配置文件,它们分别是:

vsftpd.ftpusers:位于/etc目录下。它指定了哪些用户账户不能访问FTP服务器,例如root等。

vsftpd.user_list:位于/etc目录下。该文件里的用户账户在默认情况下也不能访问

FTP服务器,仅当vsftpd .conf配置文件里启用userlist_enable=NO选项时才允许访问。

vsftpd.conf:位于/etc/vsftpd目录下。它是一个文本文件,我们可以用Kate、Vi等文本编辑工具对它进行修改,以此来自定义用户登录控制、用户权限控制、超时设置、服务器功能选项、服务器性能选项、服务器响应消息等FTP服务器的配置。

(1)用户登录控制

anonymous_enable=YES,允许匿名用户登录。

no_anon_password=YES,匿名用户登录时不需要输入密码。

local_enable=YES,允许本地用户登录。

deny_email_enable=YES,可以创建一个文件保存某些匿名电子邮件的黑名单,以防止这些人使用Dos攻击。

banned_email_file=/etc/vsftpd.banned_emails,当启用deny_email_enable功能时,所需的电子邮件黑名单保存路径(默认为/etc/vsftpd.banned_emails)。

(2)用户权限控制

write_enable=YES,开启全局上传权限。

local_umask=022,本地用户的上传文件的umask设为022(系统默认是077,一般都可以改为022)。

anon_upload_enable=YES,允许匿名用户具有上传权限,很明显,必须启用write_enable=YES,才

可以使用此项。同时我们还必须建立一个允许ftp用户可以读写的目录(前面说过,ftp是匿名用户的映射用户账号)。

anon_mkdir_write_enable=YES,允许匿名用户有创建目录的权利。

chown_uploads=YES,启用此项,匿名上传文件的属主用户将改为别的用户账户,注意,这里建议不要指定root账号为匿名上传文件的属主用户!

chown_username=whoever,当启用chown_uploads=YES时,所指定的属主用户账号,此处的whoever自然要用合适的用户账号来代替。

chroot_list_enable=YES,可以用一个列表限定哪些本地用户只能在自己目录下活动,如果chroot_local_user=YES,那么这个列表里指定的用户是不受限制的。

chroot_list_file=/etc/vsftpd.chroot_list,如果chroot_local_user=YES,则指定该列表(chroot_local_user)的保存路径(默认是/etc/vsftpd.chroot_list)。

nopriv_user=ftpsecure,指定一个安全用户账号,让FTP服务器用作完全隔离和没有特权的独立用户。这是vsftpd系统推荐选项。

async_abor_enable=YES,强烈建议不要启用该选项,否则将可能导致出错!

ascii_upload_enable=YES;ascii_download_enable=YES,默认情况下服务器会假装接受ASCⅡ模式请求但实际上是忽略这样的'请求,启用上述的两个选项可以让服务器真正实现ASCⅡ模式的传输。

(注意:启用ascii_download_enable选项会让恶意远程用户们在ASCⅡ模式下用"SIZE/big/file"这样的指令大量消耗FTP服务器的I/O资源。)

这些ASCⅡ模式的设置选项分成上传和下载两个,这样我们就可以允许ASCⅡ模式的上传(可以防止上传脚本等恶意文件而导致崩溃),而不会遭受拒绝服务攻击的危险。

(3)用户连接和超时选项

idle_session_timeout=600,可以设定默认的空闲超时时间,用户超过这段时间不动作将被服务器踢出。

data_connection_timeout=120,设定默认的数据连接超时时间。

(4)服务器日志和欢迎信息

dirmessage_enable=YES,允许为目录配置显示信息,显示每个目录下面的message_file文件的内容

ftpd_banner=Welcome to blah FTP service,可以自定义FTP用户登录到服务器所看到的欢迎信息。

xferlog_enable=YES,启用记录上传/下载活动日志功能。

xferlog_file=/var/log/vsftpd.log,可以自定义日志文件的保存路径和文件名,默认是/var/log/vsftpd.log.

知道了上面各个选项的含义,你可以根据自己的需要进行配置,达部分的选项一般用不着改动,配置完了以后,确认vsftpd服务已经启动后,我们可以在Windows主机的S命令窗口里输入"ftp Addres"(用实际的FTP服务器IP地址或者域名代替Addres),注意用户名、密码都是ftp(ftp是匿名用户的映射用户账号)。

如果登陆不上,可以试验在LINUX下本地登陆看看,还有可以在LINUX登陆WINDOWS下的FTP,试验能否登陆成功,如果可以,那很有可能登陆不上LINUX下的FTP的原因是LINUX的防火墙的原因,可以用rpm -q vsftpd命令来查看,如果防火墙开启,可以用命令把其关闭,也可以在图形界面下"主菜单"中的"system settings"中选择"seurity level",安装系统的时候如果没有改动,默认是的seurity level是"Medium",你可以不改动该设置,选中下面"allow incomning"中的"FTP",当然你也可以设置seurity level为"NO firewall",这样再在Windows下登陆LINUX的FTP,应该可以登陆了。

登陆后具体ftp下的操作就参考有关ftp的命令了,登陆后的路径为/var/ftp/pub,把你所需要操作的文件可以放在该目录下,我这里用付ftp主要是在下载linux编译后的文件到板子上,上传文件到LINUX上一般不用通过ftp,注意你在ftp下对文件进行一些操作的时候很可能被fail掉,注意根据情况设置文件的操作权限。

;

搭建Linux系统的VPS的步骤教程

Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络 操作系统 。有用户想要在Linux上搭建vps这篇 文章 主要介绍了实例讲解搭建Linux系统的VPS的步骤,包括防火墙和SSH等基本软件的部署 方法 ,非常细致,需要的朋友可以参考下

前期准备

需要购买一台拥有 root 权限的 VPS ,我选择的是 搬瓦工 ,当时购买的是 512 M 内存 5 G SSD,500 G 流量/月, 9.99 刀每年,但是好像现在这种低价套餐已经结束了。有意的朋友可以看一下其他的套餐或者别的公司的 VPS。有的朋友说 DigitalOcean 的速度非常快,看YouTube直接 1440p,但是我还没测试过,目前搬瓦工的速度能满足我的需求,而且 DO 的价格比较昂贵。

服务器购买后,安装 CentOS7,因为以下教程都是基于 CentOS7 的,安装新的 OS 后,搬瓦工会告诉你 SSH 的端口和 root 的密码,这些是自己无法自定义的,要记住了如果实在忘了也可以重置 root 密码,或者直接使用搬瓦工提供的在线SSH登录来操作也可,就是反应比较慢,所以我们以后还是常用 ssh 登录来配置 VPS ,Mac 下直接使用终端就好,win 下自行寻找一个 ssh 工具就好。

登录 ssh 的命令:

复制代码代码如下:

$ ssh -p vps 端 口号 root@vpsIP 地址

登录上以后就相当于在本地操作一样了,你可以使用各种 Linux 命令来操作了。

配置防火墙

如果 SSH 无法登录,那说明防火墙关闭了 SSH 端口,需要通过在线 SSH 登录进去关闭防火墙重新配置。

清除防火墙配置

复制代码代码如下:

$ iptables -F

清除 iptabels 所有表项,同时 nat 设置也没了,但是我们后续的脚本里会配置的,不用担心。如果 SSH 登录正常就不用管防火墙。

安装 firewalld

复制代码代码如下:

$ yum install firewalld firewall-config

$ systemctl start firewalld

P.S. 我在安装完 firewalld 之后然后启动服务的时候一直显示失败,然后重启了一遍服务器就可以正常的启动 firewalld 服务了,有类似情况的朋友可以重启一下服务器。

修改 SSH 端口

复制代码代码如下:

$ vi /usr/lib/firewalld/services/ssh.xml

会出现以下的内容:

复制代码代码如下:

SSH

Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.

将 port=”22”,修改成搬瓦工提供给你的端口号,然后重载 firewalld 就 OK。

vi 的命令: 按 “i” 是编辑模式,编辑后按 “esc” 退出编辑模式,然后按 Shift 输入“:” 和 “wq” 保存退出 vi。

复制代码代码如下:

$ firewall-cmd --permanent --add-service=ssh

$ firewall-cmd --reload

OK,现在准备工作都已就绪,安装了源,安装配置了防火墙,下一步开始搭建服务了。

搭建 Shadowsocks 服务

这个服务是最简单也是最常用的。

安装组件

复制代码代码如下:

$ yum install m2crypto python-setuptools

$ easy_install pip

$ pip install shadowsocks

安装时部分组件需要输入 Y 确认。小内存 VPS 可以分别安装组件。

安装完成后配置服务器参数

复制代码代码如下:

$ vi /etc/shadowsocks.json

写入如下配置:

复制代码代码如下:

{

"server":"0.0.0.0",

"server_port":8388,

"local_address": "127.0.0.1",

"local_port":1080,

"password":"mypassword",

"timeout":300,

"method":"aes-256-cfb",

"fast_open": false,

"workers": 1

}

将上面的 mypassword 替换成你的密码, server_port 也是可以修改的,例如 443 是 Shadowsocks 客户端默认的端口号。

如果需要修改端口,需要在防火墙里打开响应的端口,用 firewalld 操作就比较简单了:

复制代码代码如下:

$ vi /usr/lib/firewalld/services/ss.xml

下面代码粘贴到里面:

复制代码代码如下:

SS

Shadowsocks port

保存退出,然后重启 firewalld 服务:

复制代码代码如下:

$ firewall-cmd --permanent --add-service=ss

$ firewall-cmd --reload

运行命令,启动 Shadowsocks 服务

运行下面的命令:

复制代码代码如下:

$ ssserver -c /etc/shadowsocks.json

至此 shadowsocks 搭建完成,shadowsocks 已经可以使用,如果你没有过高的要求,下面的步骤可以省略,下面是后台运行 Shadowsocks 的步骤。

安装 supervisor 实现后台运行

运行以下命令下载 supervisor:

复制代码代码如下:

$ yum install python-setuptools

$ easy_install supervisor

然后创建配置文件:

复制代码代码如下:

$ echo_supervisord_conf /etc/supervisord.conf

修改配置文件:

复制代码代码如下:

$ vi /etc/supervisord.conf

在文件末尾添加:

复制代码代码如下:

[program:ssserver]command = ssserver -c /etc/shadowsocks.json

autostart=true

autorestart=true

startsecs=3

设置 supervisord 开机启动,编辑启动文件:

复制代码代码如下:

$ vi /etc/rc.local

在末尾另起一行添加:

复制代码代码如下:

$ supervisord

保存退出(和上文类似)。另 centOS7 还需要为 rc.local 添加执行权限:

复制代码代码如下:

$ chmod +x /etc/rc.local

至此运用 supervisord 控制 Shadowsocks 开机自启和后台运行设置完成。重启服务器即可。

搭建 Strongswan 实现在 iOS 上连接 VPN

补充:Linux基本命令

1.ls命令:

格式::ls [选项] [目录或文件]

功能:对于目录,列出该目录下的所有子目录与文件;对于文件,列出文件名以及其他信息。

常用选项:

-a :列出目录下的所有文件,包括以 . 开头的隐含文件。

-d :将目录像文件一样显示,而不是显示其他文件。

-i :输出文件的i节点的索引信息。

-k :以k字节的形式表示文件的大小。

-l :列出文件的详细信息。

-n :用数字的UID,GID代替名称。

-F : 在每个文件名后面附上一个字符以说明该文件的类型,“*”表示可执行的普通文 件;“/”表示目录;“@”表示符号链接;“l”表示FIFOS;“=”表示套接字。

2.cd命令

格式:cd [目录名称]

常用选项:

cd .. 返回上一级目录。

cd ../.. 将当前目录向上移动两级。

cd - 返回最近访问目录。

3.pwd命令

格式: pwd

功能:显示出当前工作目录的绝对路径。

相关阅读:Linux主要特性

完全兼容POSIX1.0标准

这使得可以在Linux下通过相应的模拟器运行常见的DOS、Windows的程序。这为用户从Windows转到Linux奠定了基础。许多用户在考虑使用Linux时,就想到以前在Windows下常见的程序是否能正常运行,这一点就消除了他们的疑虑。

多用户、多任务

Linux支持多用户,各个用户对于自己的文件设备有自己特殊的权利,保证了各用户之间互不影响。多任务则是现在电脑最主要的一个特点,Linux可以使多个程序同时并独立地运行。

良好的界面

Linux同时具有字符界面和图形界面。在字符界面用户可以通过键盘输入相应的指令来进行操作。它同时也提供了类似Windows图形界面的X-Window系统,用户可以使用鼠标对其进行操作。在X-Window环境中就和在Windows中相似,可以说是一个Linux版的Windows。

支持多种平台

Linux可以运行在多种硬件平台上,如具有x86、680x0、SPARC、Alpha等处理器的平台。此外Linux还是一种嵌入式操作系统,可以运行在掌上电脑、机顶盒或游戏机上。2001年1月份发布的Linux 2.4版内核已经能够完全支持Intel 64位芯片架构。同时Linux也支持多处理器技术。多个处理器同时工作,使系统性能大大提高。

搭建Linux系统的VPS的步骤相关文章:

1. Linux VPS中使用Crontab实现定时重启任务

2. Linux系统怎么用命令释放内存

3. Linux服务器上的PPTP 搭建方法有哪些

4. VPS怎么设置安全配置

5. Linux查看操作系统安装时间的方法总结

Linux下搭建求生之路2(l4d2)服务器的教程补充(细节点-小白专供)

大体上,这位大佬的教程已经非常完善了, 建议先通读TA的文章 ,再通读这篇。我增补一些这篇文章未提到但是有点让人抓狂的细节点。相信仔细阅读他的文章和我的文章,任何新手都能很从容的在linux下搭建属于自己的求生之路2服务器。

众所周知,linux服务器比windows服务器有更稳定和更安全的特点,而且其服务器利用效率较windows server更高,仅有一点问题,就是命令较多,难于熟记。不过也不用担心,常用的只有为数不多的命令而已。

PS:本文采用的是阿里云的cent os来进行实践得出的教程。

PS:阿里云目前有学生优惠,1核2G 5M 40GSSD的服务器学生价仅9.5元/月,可以说相当不错了,笔者其实也没多加斟酌,随便就选了阿里云的。童鞋们可以自己多斟酌,国内知名云服务器基本都有学生优惠。

sm_cvar sv_gametypes 的参数分别为: coop-合作 versus-对抗 survival-生存

z_difficulty 所有参数分别为: Easy-简单 Normal-普通 Hard-困难 Impossible-专家

此命令启用的命令和任务可以通过按下ctrl+A和ctrl+D (按住ctrl按A再按D) 来退出当前screen而保留任务后台运行,退出后用exit命令安全断开远程连接.

下面这条命令可以重新打开后台的游戏服务器任务。 若要关闭游戏服务器,用 exit 命令.

新增 /home/sun/l4d2server/srcds_run 为绝对路径,这样start.sh无论移到任何目录都可以启动游戏服务器

新增 +map c3m1 用于设置默认地图

新增-maxplayers 8用于设置最大人数

新增 -tickrate xx用于设置服务器的 tickrate

笔者附上自己的 server.cfg 部分有关 tickrate 的配置如下:

如何搭建linux服务器

;     如何搭建linux的服务器?我们一起来了解一下吧。

1、浏览器搜索Nginx下载Nginx软件包,

2、安装Nginx之前需要安装Nginx所需要的依赖包,使用命令如下:

$sudoaptinstalllibpcre3libpcre3-devzlib1g-devopenssllibssl-dev

3、解压Nginx软件包,Nginx的解压使用如下命令:

$tarzxvfnginx-1.17.8.tar.gz

4、配置Nginx,Nginx的配置主要是安装之前配置Nginx的安装路径,启用和禁用Nginx的某些模块。所以,Nginx的配置是很重要的一个步骤。具体使用的命令如下:

$cdnginx-1.17.8/

$./configure--prefix=/usr/local/nginx

5、对Nginx进行编译与安装,具体的使用如下的命令:

$cdnginx-1.17.8/

$makemakeinstall

6、启动服务器

$sudo/usr/local/nginx/sbin/nginx

在浏览器中输入http://192.168.221.123

本文章基于ThinkpadE15品牌、centos7系统撰写的。

如何实现在Linux下创建服务程序

Linux系统能提供强大可靠的网络服务,并有管理程序对服务进行管理。例如我们熟悉的Web、FTP和电子邮件等,它们既可以单独运行,也可以被守护进程inetd调用,而且运行得都非常好。但我们不能仅停留在赞叹中,下面就给出两个服务程序程序和一个客户程序的例子,介绍服务程序和客户程序之间是如何沟通的。另外还要编辑配置一些文件,让服务程序也能接受服务管理程序管理。

这两个服务程序功能相同,但一个是独立服务程序,另一个是被inetd调用的服务程序。这是TCP/IP网络服务的两大类,这里将两个程序放在一起是为了比较程序结构和运行方式。两服务程序都在Red Hat Linux 7.1和TurboLinux 7.0上调试通过。

独立服务器

TCP和UDP是两大TCP/IP数据传输方式,套接口是建立服务器客户机连接的机制,首先介绍它们建立通信联系的过程,然后给出一个TCP服务程序例子。

1.TCP套接口通信方式

对于TCP服务器端,服务程序首先调用建立套接口的函数socket(),然后调用绑定服务IP地址和协议端口号函数bind()。绑定成功后调用被动监听函数listen()等待客户连接,还要调用获取连接请求函数accept(),并一直阻塞到客户连接请求的到达,这个函数获取客户机IP地址和协议端口号。

对于TCP客户端,客户程序启动后后调用建立套接口函数socket(),然后调用连接函数connect(),此函数与服务器通过三次握手建立连接。

服务器和客户机建立连接后,就可以使用读函数read()和写函数write()收发数据了。数据交换完成后便各自调用关闭套接口函数close()删除套接口。TCP套接口通信方式见图1所示。

图1 TCP套接口通信方式

2.UDP套接口通信方式

UDP程序与TCP的区别是无需建立连接。服务器首先启动,然后等待用户请求。客户机启动后便直接向服务器请求服务,服务器接到请求后给出应答。

对于UDP服务器端,服务程序首先调用套接口函数socket(),然后调用绑定IP地址和协议端口号函数bind()。之后调用函数recvfrom()接收客户数据,调用sendto()向客户发送数据。

对于UDP客户端,客户机程序启动后调用套接口函数socket(),然后调用sendto()向服务器发送数据,调用recvfrom()接收服务器数据。

双方数据交换成功后,各自调用关闭套接口函数close()关闭套接口。UDP套接口通信方式见图2所示。

图2 UDP套接口通信方式

下面给出独立服务程序的例子。这个程序虽然简单,但是与复杂程序有着相同的结构。

//程序名:server.c

//功能:服务器从客户机读入一个字符,并将排在此字符后面的字符回送客户机

//服务器端口:9000

#include "sys/types.h"

#include "sys/socket.h"

#include "stdio.h"

#include "netinet/in.h"

#include "arpa/inet.h"

#include "unistd.h"

int main()

{

int pid; //用于存放fork()执行结果

int server_sockfd,client_sockfd; //用于服务器和客户机套接口描述符

int bind_flag,listen_flag; //用于存放bind()和listen()执行结果

int server_address_length,client_address_length; //作为服务器客户机地址长变量

struct sockaddr_in server_address; //作为服务器地址结构变量(含地址和端口)

struct sockaddr_in client_address; //作为客户机地址结构变量(含地址和端口)

if((pid=fork())!=0) //用fork()产生新进程

exit(0) ;

setsid() ; //以子进程开始下面的程序

函数socket(),创建一个套接口,成功则返回套接口描述符。

server_sockfd=socket(AF_INET,SOCK_STREAM,0);

if(server_sockfd0)

{

printf(“socket error /n”);

exit(1);

}

server_address.sin_family=AF_INET;

函数htonl()用于将32位主机字节顺序转换为网络字节顺序,其中参数INADDR_ANY表示任何IP地址。

server_address.sin_addr.s_addr=htonl(INADDR_ANY);

函数htons()用于将16位主机字节顺序转换为网络字节顺序,其中的参数是绑定的端口号,读者可根据环境自行改动,目的是不与其它服务端口冲突。

server_address.sin_port=htons(9000);

server_address_length=sizeof(server_address);

函数bind()用于绑定本地地址和服务端口号,若调用成功返回值为0。

bind_flag=bind(server_sockfd,/

(struct sockaddr *)server_address,/

server_address_length);

if(bind_flag0)

{

printf(“bind error /n”);

exit(1);

}

函数listen(),指明服务器的队列长度,被动等待客户连接,调用成功返回值为0。

listen_flag=listen(server_sockfd,5);

if(listen_flag0)

{

printf(“listen error /n”);

exit(1);

}

while(1)

{

char ch;

函数accept()等待和获取用户请求,为每个新连接请求创建一个新的套接口,调用成功返回新套接口描述符。

client_sockfd=accept(server_sockfd,/

(struct sockaddr *)client_address,/

client_address_length);

函数read()和write()用于在服务器和客户机之间传送数据,调用成功返回读和写的字节数。

函数close(),用于程序使用完一个套接口后关闭套接口,调用成功返回值0。其中的参数为accept()创建的套接口的描述符client_sockfd。

read(client_sockfd,ch,1);

printf(“cli_ch=%c”,ch);

ch++;

write(client_sockfd,ch,1);

close(client_sockfd);

}

}

程序完成后就可以使用命令进行编译。在命令行中输入“gcc -o server server.c”,将server.c编译成可执行程序server,这时便可用客户程序进行测试。在命令行执行“./server”启动服务程序,执行“netstat -na”查看有无server的服务端口。如果存在,则执行下面编写的客户程序“./client”。不过这仅是手工启动的方法,下面给出用服务管理程序管理server程序的方法。只要在目录/etc/rc.d/init.d下放入服务程序的脚本就能被服务程序读到。在命令行执行“touch server”创建文件server,并将文件属性改成可执行。在管理程序中并不能看到此服务名,脚本文件必须有一些结构才能被管理程序认为是服务程序脚本。

为了减少工作量,拷贝/etc/rc.d/init.d下脚本httpd,将拷贝脚本名命名为server,然后对其编辑。

(1)执行“cp httpd server”。

(2)用文本编辑器vi(其它编辑器亦可)将server打开进入编辑状态。首先用字符串server替换httpd。然后找到daemon server行,如果编写的程序放在变量PATH目录中,不需要修改此行;如果把服务程序放在其它目录中,就要写服务的全路径。例如程序在/root的目录中,就要写成daemon /root/server,还要删除“rm -f /var/run/server.pid”这一行。

(3)执行“chmod 755 server”,将server属性设定为可执行。

此时就可以用chkconfig、ntsysv等工具,在希望的运行级中增加这个新服务程序,然后测试客户机与服务器能否通信。

被xinetd调用的服务程序

在Linux系统中,有很多服务是被xinetd(较早版本使用的是inetd)超级守护服务器启动的。其实凡是基于TCP和UDP的服务都可使用超级守护进程启动,只是在服务量很大影响效率的情况下不被采用。

1.依赖xinetd启动的服务建立通信过程

为了与独立服务器程序比较,我们看一下依赖xinetd的服务器是如何启动的。

(1)xinetd启动时读取/etc/xinetd目录中的文件(早期版本为/etc/inetd文件),根据其中的内容给所有允许启动的服务创建一个指定类型的套接口,并将套接口放入select()中的描述符集合中。

(2)对每个套接口绑定bind(),所用的端口号和其它参数来自/etc/xinetd目录下每个服务的配置文件。

(3)如果是TCP套接口就调用函数listen(),等待用户连接。如果是UDP套接口,就不需调用此函数。

(4)所有套接口建立后,调用函数select()检查哪些套接口是活动的。

(5)若select()返回TCP套接口,就调用accept()接收这个连接。如果为UDP,就不需调用此函数。

(6)xinetd调用fork()创建子进程,由子进程处理连接请求。

◆ 子进程关闭所有其它描述符,只剩下套接口描述符。这个套接口描述符对于TCP是accept()返回的套接口,对于UDP为最初建立的套接口。然后子进程连续三次dup()函数,将套接口描述符复制到0、1和2,它们分别对应标准输入、标准输出和标准错误输出,并关闭套接口描述符。

◆ 子进程查看/etc/xinetd下文件中的用户,如果不是root用户,就用调用命令setuid和setgid将用户ID和组ID改成文件中指定的用户。

(7)对于TCP套接口,与用户交流结束后父进程需要关闭已连接套接口。父进程重新处于select()状态,等待下一个可读的套接口。

最后调用配置文件中指定的外部服务程序,外部程序启动后就可与用户进行信息传递了。

2.为xinetd编写专门的服务程序

除了独立服务程序能被xinetd启动外,还可以为xinetd编写专门的程序。此处的例子程序与上面server.c功能相同。不过两者的程序区别是很大的,此例的代码仅相当于上面传输数据的部分。我们还将程序名定为server.c,所以不能放在相同目录中,同名仅是为了和上面程序对照。

#include "unistd.h"

int main()

{

char ch;

read(0,ch,1);

ch++;

write(1,ch,1);

}

将程序编译成可执行文件,并做些设置就可被xinetd启动。注意不要和上面的独立服务程序server一起启动,因为客户程序写得比较简单,访问的是固定端口,服务器都设成了相同的端口号。

(1)编辑/etc/services文件,在行末增加一条记录:

server 9000/tcp

(2)在目录/etc/xinetd.d下编写文件server,内容为:

service server

{

disable = no

socket_type = stream

protocol = tcp

wait = no

user = root

server = /home/test/server (此处设置成自己程序所在的目录)

}

如果使用的是较早版本,则需在/etc/inetd.conf文件中添加下面的行:

server tcp nowait root /path/to/yourdirectory/server

(3)执行/etc/rc.d/initd.d/xinetd restart重新启动xinetd服务器。早期版本执行/etc/rc.d/initd.d/inetd restart重新启动inetd。

(4)执行netstat -an查看有没有server程序使用的端口号,如果有就可使用下面客户机程序进行测试了。

客户机程序

下面就客户机函数做一简单介绍。

//程序名client.c

/*功能:从客户的控制台输入一个字符,然后将这个字符送到服务器,并将服务器返回的字符显示出来*/

#include "sys/types.h"

#include "sys/socket.h"

#include "stdio.h"

#include "netinet/in.h"

#include "arpa/inet.h"

#include "unistd.h"

int main()

{

int sockfd;//

int address_len;

int connect_flag;

struct sockaddr_in address;

int connect_result;

char client_ch,server_ch;

函数socket()用于建立一个套接口,创建成功返回套接口描述符。

sockfd=socket(AF_INET,SOCK_STREAM,0);

if(sockfd0)

{

printf(“sockfd error /n”);

}

address.sin_family=AF_INET;

address.sin_addr.s_addr=inet_addr(“192.168.0.1”);/*读者根据自己环境改成服务器地址*/

address.sin_port=htons(9000);

address_len=sizeof(address);

函数connect()用于与服务器建立一个主动连接,调用成功返回值为0。

connect_flag=connect(sockfd,(struct sockaddr *)address,address_len);

if(connect_flag==-1)

{

perror(“client”);

exit(1);

}

printf(“Input a character :”);

函数scanf()用于从控制台输入一个字符,并将字符存入client_ch的地址。函数write()和read()用于传输数据。函数printf()在客户机屏幕上显示服务器传回的字符。函数close()关闭套接口。

scanf(“%c”,client_ch);

write(sockfd,client_ch,1);

read(sockfd,server_ch,1);

printf(“character from server : %c/n”,server_ch);

close(sockfd);

exit(0);

}

执行命令“gcc -o client client.c”,将client.c编译成client。执行“./client”,在程序提示下输入一个字符,就能看到服务器传回的字符。

以上介绍的仅是简单的例子。平时见到的服务程序远比它复杂,而且很多是多协议服务程序或是多协议多服务程序。多协议服务程序就是在main()中分别创建供服务的TCP和UDP套接口。为每个服务分别写出相应程序好处是便于控制,但是这样每个服务都启动两个服务器,而它们的算法响应是一样的,就要耗费不必要的资源,并且出了问题排错也较困难。多服务是将不同的服务集成在一起由一个程序完成,可用一个数组表示服务,数组中的每一项表示某协议某服务的一种,这样很容易扩展程序的服务功能。

文章标题:linux命令搭建服务 linux系统服务
网站URL:https://www.cdcxhl.com/article48/docogep.html

成都网站建设公司_创新互联,为您提供关键词优化外贸建站网站导航建站公司网站内链微信小程序

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站优化排名