linux命令搭建服務(wù) linux系統(tǒng)服務(wù)

linux下搭建ftp服務(wù)器

linux下搭建ftp服務(wù)器

大冶網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、響應(yīng)式網(wǎng)站等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)建站于2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。

下面我就為大家整理了一些Linux認(rèn)證復(fù)習(xí)備考資料。希望大家可以從中學(xué)習(xí)答題方法,讓自己的得到進(jìn)步!最近為了方便目標(biāo)板與PC機(jī)上LINUX之間的通訊,就在LINUX搭建了FTP,工作不難,寫(xiě)個(gè)總結(jié)。主要經(jīng)過(guò)以下幾個(gè)步驟:

1.檢查是否安裝了vsftpd服務(wù)器

可以用rpm -q vsftpd命令來(lái)查看,若顯示"vsftpd-1.1.3-8",則說(shuō)明系統(tǒng)已經(jīng)安裝vsftpd服務(wù)器,若沒(méi)有則可以在圖形環(huán)境下單擊"主菜單→系統(tǒng)設(shè)置→添加刪除應(yīng)用程序"菜單項(xiàng),在出現(xiàn)的"軟件包管理"對(duì)話框里確保選中"FTP服務(wù)器"選項(xiàng),然后單擊"更新"按鈕,按照屏幕提示插入第3張安裝光盤(pán)即可開(kāi)始安裝。

2.啟動(dòng)/重新啟動(dòng)/停止vsftpd服務(wù)

從Red Hat Linux 9.0開(kāi)始,vsftpd默認(rèn)只采用standalone方式啟動(dòng)vsftpd服務(wù),方法是在終端命令窗口運(yùn)行以下命令:

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

重新啟動(dòng)vsftpd服務(wù):

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

關(guān)閉vsftpd服務(wù):

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

3.vsftpd的配置

在Red Hat Linux 9.0里的vsftpd共有3個(gè)配置文件,它們分別是:

vsftpd.ftpusers:位于/etc目錄下。它指定了哪些用戶賬戶不能訪問(wèn)FTP服務(wù)器,例如root等。

vsftpd.user_list:位于/etc目錄下。該文件里的用戶賬戶在默認(rèn)情況下也不能訪問(wèn)

FTP服務(wù)器,僅當(dāng)vsftpd .conf配置文件里啟用userlist_enable=NO選項(xiàng)時(shí)才允許訪問(wèn)。

vsftpd.conf:位于/etc/vsftpd目錄下。它是一個(gè)文本文件,我們可以用Kate、Vi等文本編輯工具對(duì)它進(jìn)行修改,以此來(lái)自定義用戶登錄控制、用戶權(quán)限控制、超時(shí)設(shè)置、服務(wù)器功能選項(xiàng)、服務(wù)器性能選項(xiàng)、服務(wù)器響應(yīng)消息等FTP服務(wù)器的配置。

(1)用戶登錄控制

anonymous_enable=YES,允許匿名用戶登錄。

no_anon_password=YES,匿名用戶登錄時(shí)不需要輸入密碼。

local_enable=YES,允許本地用戶登錄。

deny_email_enable=YES,可以創(chuàng)建一個(gè)文件保存某些匿名電子郵件的黑名單,以防止這些人使用Dos攻擊。

banned_email_file=/etc/vsftpd.banned_emails,當(dāng)啟用deny_email_enable功能時(shí),所需的電子郵件黑名單保存路徑(默認(rèn)為/etc/vsftpd.banned_emails)。

(2)用戶權(quán)限控制

write_enable=YES,開(kāi)啟全局上傳權(quán)限。

local_umask=022,本地用戶的上傳文件的umask設(shè)為022(系統(tǒng)默認(rèn)是077,一般都可以改為022)。

anon_upload_enable=YES,允許匿名用戶具有上傳權(quán)限,很明顯,必須啟用write_enable=YES,才

可以使用此項(xiàng)。同時(shí)我們還必須建立一個(gè)允許ftp用戶可以讀寫(xiě)的目錄(前面說(shuō)過(guò),ftp是匿名用戶的映射用戶賬號(hào))。

anon_mkdir_write_enable=YES,允許匿名用戶有創(chuàng)建目錄的權(quán)利。

chown_uploads=YES,啟用此項(xiàng),匿名上傳文件的屬主用戶將改為別的用戶賬戶,注意,這里建議不要指定root賬號(hào)為匿名上傳文件的屬主用戶!

chown_username=whoever,當(dāng)啟用chown_uploads=YES時(shí),所指定的屬主用戶賬號(hào),此處的whoever自然要用合適的用戶賬號(hào)來(lái)代替。

chroot_list_enable=YES,可以用一個(gè)列表限定哪些本地用戶只能在自己目錄下活動(dòng),如果chroot_local_user=YES,那么這個(gè)列表里指定的用戶是不受限制的。

chroot_list_file=/etc/vsftpd.chroot_list,如果chroot_local_user=YES,則指定該列表(chroot_local_user)的保存路徑(默認(rèn)是/etc/vsftpd.chroot_list)。

nopriv_user=ftpsecure,指定一個(gè)安全用戶賬號(hào),讓FTP服務(wù)器用作完全隔離和沒(méi)有特權(quán)的獨(dú)立用戶。這是vsftpd系統(tǒng)推薦選項(xiàng)。

async_abor_enable=YES,強(qiáng)烈建議不要啟用該選項(xiàng),否則將可能導(dǎo)致出錯(cuò)!

ascii_upload_enable=YES;ascii_download_enable=YES,默認(rèn)情況下服務(wù)器會(huì)假裝接受ASCⅡ模式請(qǐng)求但實(shí)際上是忽略這樣的'請(qǐng)求,啟用上述的兩個(gè)選項(xiàng)可以讓服務(wù)器真正實(shí)現(xiàn)ASCⅡ模式的傳輸。

(注意:?jiǎn)⒂胊scii_download_enable選項(xiàng)會(huì)讓惡意遠(yuǎn)程用戶們?cè)贏SCⅡ模式下用"SIZE/big/file"這樣的指令大量消耗FTP服務(wù)器的I/O資源。)

這些ASCⅡ模式的設(shè)置選項(xiàng)分成上傳和下載兩個(gè),這樣我們就可以允許ASCⅡ模式的上傳(可以防止上傳腳本等惡意文件而導(dǎo)致崩潰),而不會(huì)遭受拒絕服務(wù)攻擊的危險(xiǎn)。

(3)用戶連接和超時(shí)選項(xiàng)

idle_session_timeout=600,可以設(shè)定默認(rèn)的空閑超時(shí)時(shí)間,用戶超過(guò)這段時(shí)間不動(dòng)作將被服務(wù)器踢出。

data_connection_timeout=120,設(shè)定默認(rèn)的數(shù)據(jù)連接超時(shí)時(shí)間。

(4)服務(wù)器日志和歡迎信息

dirmessage_enable=YES,允許為目錄配置顯示信息,顯示每個(gè)目錄下面的message_file文件的內(nèi)容

ftpd_banner=Welcome to blah FTP service,可以自定義FTP用戶登錄到服務(wù)器所看到的歡迎信息。

xferlog_enable=YES,啟用記錄上傳/下載活動(dòng)日志功能。

xferlog_file=/var/log/vsftpd.log,可以自定義日志文件的保存路徑和文件名,默認(rèn)是/var/log/vsftpd.log.

知道了上面各個(gè)選項(xiàng)的含義,你可以根據(jù)自己的需要進(jìn)行配置,達(dá)部分的選項(xiàng)一般用不著改動(dòng),配置完了以后,確認(rèn)vsftpd服務(wù)已經(jīng)啟動(dòng)后,我們可以在Windows主機(jī)的S命令窗口里輸入"ftp Addres"(用實(shí)際的FTP服務(wù)器IP地址或者域名代替Addres),注意用戶名、密碼都是ftp(ftp是匿名用戶的映射用戶賬號(hào))。

如果登陸不上,可以試驗(yàn)在LINUX下本地登陸看看,還有可以在LINUX登陸WINDOWS下的FTP,試驗(yàn)?zāi)芊竦顷懗晒?,如果可以,那很有可能登陸不上LINUX下的FTP的原因是LINUX的防火墻的原因,可以用rpm -q vsftpd命令來(lái)查看,如果防火墻開(kāi)啟,可以用命令把其關(guān)閉,也可以在圖形界面下"主菜單"中的"system settings"中選擇"seurity level",安裝系統(tǒng)的時(shí)候如果沒(méi)有改動(dòng),默認(rèn)是的seurity level是"Medium",你可以不改動(dòng)該設(shè)置,選中下面"allow incomning"中的"FTP",當(dāng)然你也可以設(shè)置seurity level為"NO firewall",這樣再在Windows下登陸LINUX的FTP,應(yīng)該可以登陸了。

登陸后具體ftp下的操作就參考有關(guān)ftp的命令了,登陸后的路徑為/var/ftp/pub,把你所需要操作的文件可以放在該目錄下,我這里用付ftp主要是在下載linux編譯后的文件到板子上,上傳文件到LINUX上一般不用通過(guò)ftp,注意你在ftp下對(duì)文件進(jìn)行一些操作的時(shí)候很可能被fail掉,注意根據(jù)情況設(shè)置文件的操作權(quán)限。

;

搭建Linux系統(tǒng)的VPS的步驟教程

Linux繼承了Unix以網(wǎng)絡(luò)為核心的設(shè)計(jì)思想,是一個(gè)性能穩(wěn)定的多用戶網(wǎng)絡(luò) 操作系統(tǒng) 。有用戶想要在Linux上搭建vps這篇 文章 主要介紹了實(shí)例講解搭建Linux系統(tǒng)的VPS的步驟,包括防火墻和SSH等基本軟件的部署 方法 ,非常細(xì)致,需要的朋友可以參考下

前期準(zhǔn)備

需要購(gòu)買(mǎi)一臺(tái)擁有 root 權(quán)限的 VPS ,我選擇的是 搬瓦工 ,當(dāng)時(shí)購(gòu)買(mǎi)的是 512 M 內(nèi)存 5 G SSD,500 G 流量/月, 9.99 刀每年,但是好像現(xiàn)在這種低價(jià)套餐已經(jīng)結(jié)束了。有意的朋友可以看一下其他的套餐或者別的公司的 VPS。有的朋友說(shuō) DigitalOcean 的速度非???,看YouTube直接 1440p,但是我還沒(méi)測(cè)試過(guò),目前搬瓦工的速度能滿足我的需求,而且 DO 的價(jià)格比較昂貴。

服務(wù)器購(gòu)買(mǎi)后,安裝 CentOS7,因?yàn)橐韵陆坛潭际腔?CentOS7 的,安裝新的 OS 后,搬瓦工會(huì)告訴你 SSH 的端口和 root 的密碼,這些是自己無(wú)法自定義的,要記住了如果實(shí)在忘了也可以重置 root 密碼,或者直接使用搬瓦工提供的在線SSH登錄來(lái)操作也可,就是反應(yīng)比較慢,所以我們以后還是常用 ssh 登錄來(lái)配置 VPS ,Mac 下直接使用終端就好,win 下自行尋找一個(gè) ssh 工具就好。

登錄 ssh 的命令:

復(fù)制代碼代碼如下:

$ ssh -p vps 端 口號(hào) root@vpsIP 地址

登錄上以后就相當(dāng)于在本地操作一樣了,你可以使用各種 Linux 命令來(lái)操作了。

配置防火墻

如果 SSH 無(wú)法登錄,那說(shuō)明防火墻關(guān)閉了 SSH 端口,需要通過(guò)在線 SSH 登錄進(jìn)去關(guān)閉防火墻重新配置。

清除防火墻配置

復(fù)制代碼代碼如下:

$ iptables -F

清除 iptabels 所有表項(xiàng),同時(shí) nat 設(shè)置也沒(méi)了,但是我們后續(xù)的腳本里會(huì)配置的,不用擔(dān)心。如果 SSH 登錄正常就不用管防火墻。

安裝 firewalld

復(fù)制代碼代碼如下:

$ yum install firewalld firewall-config

$ systemctl start firewalld

P.S. 我在安裝完 firewalld 之后然后啟動(dòng)服務(wù)的時(shí)候一直顯示失敗,然后重啟了一遍服務(wù)器就可以正常的啟動(dòng) firewalld 服務(wù)了,有類(lèi)似情況的朋友可以重啟一下服務(wù)器。

修改 SSH 端口

復(fù)制代碼代碼如下:

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

會(huì)出現(xiàn)以下的內(nèi)容:

復(fù)制代碼代碼如下:

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”,修改成搬瓦工提供給你的端口號(hào),然后重載 firewalld 就 OK。

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

復(fù)制代碼代碼如下:

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

$ firewall-cmd --reload

OK,現(xiàn)在準(zhǔn)備工作都已就緒,安裝了源,安裝配置了防火墻,下一步開(kāi)始搭建服務(wù)了。

搭建 Shadowsocks 服務(wù)

這個(gè)服務(wù)是最簡(jiǎn)單也是最常用的。

安裝組件

復(fù)制代碼代碼如下:

$ yum install m2crypto python-setuptools

$ easy_install pip

$ pip install shadowsocks

安裝時(shí)部分組件需要輸入 Y 確認(rèn)。小內(nèi)存 VPS 可以分別安裝組件。

安裝完成后配置服務(wù)器參數(shù)

復(fù)制代碼代碼如下:

$ vi /etc/shadowsocks.json

寫(xiě)入如下配置:

復(fù)制代碼代碼如下:

{

"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 客戶端默認(rèn)的端口號(hào)。

如果需要修改端口,需要在防火墻里打開(kāi)響應(yīng)的端口,用 firewalld 操作就比較簡(jiǎn)單了:

復(fù)制代碼代碼如下:

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

下面代碼粘貼到里面:

復(fù)制代碼代碼如下:

SS

Shadowsocks port

保存退出,然后重啟 firewalld 服務(wù):

復(fù)制代碼代碼如下:

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

$ firewall-cmd --reload

運(yùn)行命令,啟動(dòng) Shadowsocks 服務(wù)

運(yùn)行下面的命令:

復(fù)制代碼代碼如下:

$ ssserver -c /etc/shadowsocks.json

至此 shadowsocks 搭建完成,shadowsocks 已經(jīng)可以使用,如果你沒(méi)有過(guò)高的要求,下面的步驟可以省略,下面是后臺(tái)運(yùn)行 Shadowsocks 的步驟。

安裝 supervisor 實(shí)現(xiàn)后臺(tái)運(yùn)行

運(yùn)行以下命令下載 supervisor:

復(fù)制代碼代碼如下:

$ yum install python-setuptools

$ easy_install supervisor

然后創(chuàng)建配置文件:

復(fù)制代碼代碼如下:

$ echo_supervisord_conf /etc/supervisord.conf

修改配置文件:

復(fù)制代碼代碼如下:

$ vi /etc/supervisord.conf

在文件末尾添加:

復(fù)制代碼代碼如下:

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

autostart=true

autorestart=true

startsecs=3

設(shè)置 supervisord 開(kāi)機(jī)啟動(dòng),編輯啟動(dòng)文件:

復(fù)制代碼代碼如下:

$ vi /etc/rc.local

在末尾另起一行添加:

復(fù)制代碼代碼如下:

$ supervisord

保存退出(和上文類(lèi)似)。另 centOS7 還需要為 rc.local 添加執(zhí)行權(quán)限:

復(fù)制代碼代碼如下:

$ chmod +x /etc/rc.local

至此運(yùn)用 supervisord 控制 Shadowsocks 開(kāi)機(jī)自啟和后臺(tái)運(yùn)行設(shè)置完成。重啟服務(wù)器即可。

搭建 Strongswan 實(shí)現(xiàn)在 iOS 上連接 VPN

補(bǔ)充:Linux基本命令

1.ls命令:

格式::ls [選項(xiàng)] [目錄或文件]

功能:對(duì)于目錄,列出該目錄下的所有子目錄與文件;對(duì)于文件,列出文件名以及其他信息。

常用選項(xiàng):

-a :列出目錄下的所有文件,包括以 . 開(kāi)頭的隱含文件。

-d :將目錄像文件一樣顯示,而不是顯示其他文件。

-i :輸出文件的i節(jié)點(diǎn)的索引信息。

-k :以k字節(jié)的形式表示文件的大小。

-l :列出文件的詳細(xì)信息。

-n :用數(shù)字的UID,GID代替名稱。

-F : 在每個(gè)文件名后面附上一個(gè)字符以說(shuō)明該文件的類(lèi)型,“*”表示可執(zhí)行的普通文 件;“/”表示目錄;“@”表示符號(hào)鏈接;“l(fā)”表示FIFOS;“=”表示套接字。

2.cd命令

格式:cd [目錄名稱]

常用選項(xiàng):

cd .. 返回上一級(jí)目錄。

cd ../.. 將當(dāng)前目錄向上移動(dòng)兩級(jí)。

cd - 返回最近訪問(wèn)目錄。

3.pwd命令

格式: pwd

功能:顯示出當(dāng)前工作目錄的絕對(duì)路徑。

相關(guān)閱讀:Linux主要特性

完全兼容POSIX1.0標(biāo)準(zhǔn)

這使得可以在Linux下通過(guò)相應(yīng)的模擬器運(yùn)行常見(jiàn)的DOS、Windows的程序。這為用戶從Windows轉(zhuǎn)到Linux奠定了基礎(chǔ)。許多用戶在考慮使用Linux時(shí),就想到以前在Windows下常見(jiàn)的程序是否能正常運(yùn)行,這一點(diǎn)就消除了他們的疑慮。

多用戶、多任務(wù)

Linux支持多用戶,各個(gè)用戶對(duì)于自己的文件設(shè)備有自己特殊的權(quán)利,保證了各用戶之間互不影響。多任務(wù)則是現(xiàn)在電腦最主要的一個(gè)特點(diǎn),Linux可以使多個(gè)程序同時(shí)并獨(dú)立地運(yùn)行。

良好的界面

Linux同時(shí)具有字符界面和圖形界面。在字符界面用戶可以通過(guò)鍵盤(pán)輸入相應(yīng)的指令來(lái)進(jìn)行操作。它同時(shí)也提供了類(lèi)似Windows圖形界面的X-Window系統(tǒng),用戶可以使用鼠標(biāo)對(duì)其進(jìn)行操作。在X-Window環(huán)境中就和在Windows中相似,可以說(shuō)是一個(gè)Linux版的Windows。

支持多種平臺(tái)

Linux可以運(yùn)行在多種硬件平臺(tái)上,如具有x86、680x0、SPARC、Alpha等處理器的平臺(tái)。此外Linux還是一種嵌入式操作系統(tǒng),可以運(yùn)行在掌上電腦、機(jī)頂盒或游戲機(jī)上。2001年1月份發(fā)布的Linux 2.4版內(nèi)核已經(jīng)能夠完全支持Intel 64位芯片架構(gòu)。同時(shí)Linux也支持多處理器技術(shù)。多個(gè)處理器同時(shí)工作,使系統(tǒng)性能大大提高。

搭建Linux系統(tǒng)的VPS的步驟相關(guān)文章:

1. Linux VPS中使用Crontab實(shí)現(xiàn)定時(shí)重啟任務(wù)

2. Linux系統(tǒng)怎么用命令釋放內(nèi)存

3. Linux服務(wù)器上的PPTP 搭建方法有哪些

4. VPS怎么設(shè)置安全配置

5. Linux查看操作系統(tǒng)安裝時(shí)間的方法總結(jié)

Linux下搭建求生之路2(l4d2)服務(wù)器的教程補(bǔ)充(細(xì)節(jié)點(diǎn)-小白專供)

大體上,這位大佬的教程已經(jīng)非常完善了, 建議先通讀TA的文章 ,再通讀這篇。我增補(bǔ)一些這篇文章未提到但是有點(diǎn)讓人抓狂的細(xì)節(jié)點(diǎn)。相信仔細(xì)閱讀他的文章和我的文章,任何新手都能很從容的在linux下搭建屬于自己的求生之路2服務(wù)器。

眾所周知,linux服務(wù)器比windows服務(wù)器有更穩(wěn)定和更安全的特點(diǎn),而且其服務(wù)器利用效率較windows server更高,僅有一點(diǎn)問(wèn)題,就是命令較多,難于熟記。不過(guò)也不用擔(dān)心,常用的只有為數(shù)不多的命令而已。

PS:本文采用的是阿里云的cent os來(lái)進(jìn)行實(shí)踐得出的教程。

PS:阿里云目前有學(xué)生優(yōu)惠,1核2G 5M 40GSSD的服務(wù)器學(xué)生價(jià)僅9.5元/月,可以說(shuō)相當(dāng)不錯(cuò)了,筆者其實(shí)也沒(méi)多加斟酌,隨便就選了阿里云的。童鞋們可以自己多斟酌,國(guó)內(nèi)知名云服務(wù)器基本都有學(xué)生優(yōu)惠。

sm_cvar sv_gametypes 的參數(shù)分別為: coop-合作 versus-對(duì)抗 survival-生存

z_difficulty 所有參數(shù)分別為: Easy-簡(jiǎn)單 Normal-普通 Hard-困難 Impossible-專家

此命令啟用的命令和任務(wù)可以通過(guò)按下ctrl+A和ctrl+D (按住ctrl按A再按D) 來(lái)退出當(dāng)前screen而保留任務(wù)后臺(tái)運(yùn)行,退出后用exit命令安全斷開(kāi)遠(yuǎn)程連接.

下面這條命令可以重新打開(kāi)后臺(tái)的游戲服務(wù)器任務(wù)。 若要關(guān)閉游戲服務(wù)器,用 exit 命令.

新增 /home/sun/l4d2server/srcds_run 為絕對(duì)路徑,這樣start.sh無(wú)論移到任何目錄都可以啟動(dòng)游戲服務(wù)器

新增 +map c3m1 用于設(shè)置默認(rèn)地圖

新增-maxplayers 8用于設(shè)置最大人數(shù)

新增 -tickrate xx用于設(shè)置服務(wù)器的 tickrate

筆者附上自己的 server.cfg 部分有關(guān) tickrate 的配置如下:

如何搭建linux服務(wù)器

;?????如何搭建linux的服務(wù)器?我們一起來(lái)了解一下吧。

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的配置是很重要的一個(gè)步驟。具體使用的命令如下:

$cdnginx-1.17.8/

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

5、對(duì)Nginx進(jìn)行編譯與安裝,具體的使用如下的命令:

$cdnginx-1.17.8/

$makemakeinstall

6、啟動(dòng)服務(wù)器

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

在瀏覽器中輸入http://192.168.221.123

本文章基于ThinkpadE15品牌、centos7系統(tǒng)撰寫(xiě)的。

如何實(shí)現(xiàn)在Linux下創(chuàng)建服務(wù)程序

Linux系統(tǒng)能提供強(qiáng)大可靠的網(wǎng)絡(luò)服務(wù),并有管理程序?qū)Ψ?wù)進(jìn)行管理。例如我們熟悉的Web、FTP和電子郵件等,它們既可以單獨(dú)運(yùn)行,也可以被守護(hù)進(jìn)程inetd調(diào)用,而且運(yùn)行得都非常好。但我們不能僅停留在贊嘆中,下面就給出兩個(gè)服務(wù)程序程序和一個(gè)客戶程序的例子,介紹服務(wù)程序和客戶程序之間是如何溝通的。另外還要編輯配置一些文件,讓服務(wù)程序也能接受服務(wù)管理程序管理。

這兩個(gè)服務(wù)程序功能相同,但一個(gè)是獨(dú)立服務(wù)程序,另一個(gè)是被inetd調(diào)用的服務(wù)程序。這是TCP/IP網(wǎng)絡(luò)服務(wù)的兩大類(lèi),這里將兩個(gè)程序放在一起是為了比較程序結(jié)構(gòu)和運(yùn)行方式。兩服務(wù)程序都在Red Hat Linux 7.1和TurboLinux 7.0上調(diào)試通過(guò)。

獨(dú)立服務(wù)器

TCP和UDP是兩大TCP/IP數(shù)據(jù)傳輸方式,套接口是建立服務(wù)器客戶機(jī)連接的機(jī)制,首先介紹它們建立通信聯(lián)系的過(guò)程,然后給出一個(gè)TCP服務(wù)程序例子。

1.TCP套接口通信方式

對(duì)于TCP服務(wù)器端,服務(wù)程序首先調(diào)用建立套接口的函數(shù)socket(),然后調(diào)用綁定服務(wù)IP地址和協(xié)議端口號(hào)函數(shù)bind()。綁定成功后調(diào)用被動(dòng)監(jiān)聽(tīng)函數(shù)listen()等待客戶連接,還要調(diào)用獲取連接請(qǐng)求函數(shù)accept(),并一直阻塞到客戶連接請(qǐng)求的到達(dá),這個(gè)函數(shù)獲取客戶機(jī)IP地址和協(xié)議端口號(hào)。

對(duì)于TCP客戶端,客戶程序啟動(dòng)后后調(diào)用建立套接口函數(shù)socket(),然后調(diào)用連接函數(shù)connect(),此函數(shù)與服務(wù)器通過(guò)三次握手建立連接。

服務(wù)器和客戶機(jī)建立連接后,就可以使用讀函數(shù)read()和寫(xiě)函數(shù)write()收發(fā)數(shù)據(jù)了。數(shù)據(jù)交換完成后便各自調(diào)用關(guān)閉套接口函數(shù)close()刪除套接口。TCP套接口通信方式見(jiàn)圖1所示。

圖1 TCP套接口通信方式

2.UDP套接口通信方式

UDP程序與TCP的區(qū)別是無(wú)需建立連接。服務(wù)器首先啟動(dòng),然后等待用戶請(qǐng)求??蛻魴C(jī)啟動(dòng)后便直接向服務(wù)器請(qǐng)求服務(wù),服務(wù)器接到請(qǐng)求后給出應(yīng)答。

對(duì)于UDP服務(wù)器端,服務(wù)程序首先調(diào)用套接口函數(shù)socket(),然后調(diào)用綁定IP地址和協(xié)議端口號(hào)函數(shù)bind()。之后調(diào)用函數(shù)recvfrom()接收客戶數(shù)據(jù),調(diào)用sendto()向客戶發(fā)送數(shù)據(jù)。

對(duì)于UDP客戶端,客戶機(jī)程序啟動(dòng)后調(diào)用套接口函數(shù)socket(),然后調(diào)用sendto()向服務(wù)器發(fā)送數(shù)據(jù),調(diào)用recvfrom()接收服務(wù)器數(shù)據(jù)。

雙方數(shù)據(jù)交換成功后,各自調(diào)用關(guān)閉套接口函數(shù)close()關(guān)閉套接口。UDP套接口通信方式見(jiàn)圖2所示。

圖2 UDP套接口通信方式

下面給出獨(dú)立服務(wù)程序的例子。這個(gè)程序雖然簡(jiǎn)單,但是與復(fù)雜程序有著相同的結(jié)構(gòu)。

//程序名:server.c

//功能:服務(wù)器從客戶機(jī)讀入一個(gè)字符,并將排在此字符后面的字符回送客戶機(jī)

//服務(wù)器端口: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()執(zhí)行結(jié)果

int server_sockfd,client_sockfd; //用于服務(wù)器和客戶機(jī)套接口描述符

int bind_flag,listen_flag; //用于存放bind()和listen()執(zhí)行結(jié)果

int server_address_length,client_address_length; //作為服務(wù)器客戶機(jī)地址長(zhǎng)變量

struct sockaddr_in server_address; //作為服務(wù)器地址結(jié)構(gòu)變量(含地址和端口)

struct sockaddr_in client_address; //作為客戶機(jī)地址結(jié)構(gòu)變量(含地址和端口)

if((pid=fork())!=0) //用fork()產(chǎn)生新進(jìn)程

exit(0) ;

setsid() ; //以子進(jìn)程開(kāi)始下面的程序

函數(shù)socket(),創(chuàng)建一個(gè)套接口,成功則返回套接口描述符。

server_sockfd=socket(AF_INET,SOCK_STREAM,0);

if(server_sockfd0)

{

printf(“socket error /n”);

exit(1);

}

server_address.sin_family=AF_INET;

函數(shù)htonl()用于將32位主機(jī)字節(jié)順序轉(zhuǎn)換為網(wǎng)絡(luò)字節(jié)順序,其中參數(shù)INADDR_ANY表示任何IP地址。

server_address.sin_addr.s_addr=htonl(INADDR_ANY);

函數(shù)htons()用于將16位主機(jī)字節(jié)順序轉(zhuǎn)換為網(wǎng)絡(luò)字節(jié)順序,其中的參數(shù)是綁定的端口號(hào),讀者可根據(jù)環(huán)境自行改動(dòng),目的是不與其它服務(wù)端口沖突。

server_address.sin_port=htons(9000);

server_address_length=sizeof(server_address);

函數(shù)bind()用于綁定本地地址和服務(wù)端口號(hào),若調(diào)用成功返回值為0。

bind_flag=bind(server_sockfd,/

(struct sockaddr *)server_address,/

server_address_length);

if(bind_flag0)

{

printf(“bind error /n”);

exit(1);

}

函數(shù)listen(),指明服務(wù)器的隊(duì)列長(zhǎng)度,被動(dòng)等待客戶連接,調(diào)用成功返回值為0。

listen_flag=listen(server_sockfd,5);

if(listen_flag0)

{

printf(“l(fā)isten error /n”);

exit(1);

}

while(1)

{

char ch;

函數(shù)accept()等待和獲取用戶請(qǐng)求,為每個(gè)新連接請(qǐng)求創(chuàng)建一個(gè)新的套接口,調(diào)用成功返回新套接口描述符。

client_sockfd=accept(server_sockfd,/

(struct sockaddr *)client_address,/

client_address_length);

函數(shù)read()和write()用于在服務(wù)器和客戶機(jī)之間傳送數(shù)據(jù),調(diào)用成功返回讀和寫(xiě)的字節(jié)數(shù)。

函數(shù)close(),用于程序使用完一個(gè)套接口后關(guān)閉套接口,調(diào)用成功返回值0。其中的參數(shù)為accept()創(chuàng)建的套接口的描述符client_sockfd。

read(client_sockfd,ch,1);

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

ch++;

write(client_sockfd,ch,1);

close(client_sockfd);

}

}

程序完成后就可以使用命令進(jìn)行編譯。在命令行中輸入“gcc -o server server.c”,將server.c編譯成可執(zhí)行程序server,這時(shí)便可用客戶程序進(jìn)行測(cè)試。在命令行執(zhí)行“./server”啟動(dòng)服務(wù)程序,執(zhí)行“netstat -na”查看有無(wú)server的服務(wù)端口。如果存在,則執(zhí)行下面編寫(xiě)的客戶程序“./client”。不過(guò)這僅是手工啟動(dòng)的方法,下面給出用服務(wù)管理程序管理server程序的方法。只要在目錄/etc/rc.d/init.d下放入服務(wù)程序的腳本就能被服務(wù)程序讀到。在命令行執(zhí)行“touch server”創(chuàng)建文件server,并將文件屬性改成可執(zhí)行。在管理程序中并不能看到此服務(wù)名,腳本文件必須有一些結(jié)構(gòu)才能被管理程序認(rèn)為是服務(wù)程序腳本。

為了減少工作量,拷貝/etc/rc.d/init.d下腳本httpd,將拷貝腳本名命名為server,然后對(duì)其編輯。

(1)執(zhí)行“cp httpd server”。

(2)用文本編輯器vi(其它編輯器亦可)將server打開(kāi)進(jìn)入編輯狀態(tài)。首先用字符串server替換httpd。然后找到daemon server行,如果編寫(xiě)的程序放在變量PATH目錄中,不需要修改此行;如果把服務(wù)程序放在其它目錄中,就要寫(xiě)服務(wù)的全路徑。例如程序在/root的目錄中,就要寫(xiě)成daemon /root/server,還要?jiǎng)h除“rm -f /var/run/server.pid”這一行。

(3)執(zhí)行“chmod 755 server”,將server屬性設(shè)定為可執(zhí)行。

此時(shí)就可以用chkconfig、ntsysv等工具,在希望的運(yùn)行級(jí)中增加這個(gè)新服務(wù)程序,然后測(cè)試客戶機(jī)與服務(wù)器能否通信。

被xinetd調(diào)用的服務(wù)程序

在Linux系統(tǒng)中,有很多服務(wù)是被xinetd(較早版本使用的是inetd)超級(jí)守護(hù)服務(wù)器啟動(dòng)的。其實(shí)凡是基于TCP和UDP的服務(wù)都可使用超級(jí)守護(hù)進(jìn)程啟動(dòng),只是在服務(wù)量很大影響效率的情況下不被采用。

1.依賴xinetd啟動(dòng)的服務(wù)建立通信過(guò)程

為了與獨(dú)立服務(wù)器程序比較,我們看一下依賴xinetd的服務(wù)器是如何啟動(dòng)的。

(1)xinetd啟動(dòng)時(shí)讀取/etc/xinetd目錄中的文件(早期版本為/etc/inetd文件),根據(jù)其中的內(nèi)容給所有允許啟動(dòng)的服務(wù)創(chuàng)建一個(gè)指定類(lèi)型的套接口,并將套接口放入select()中的描述符集合中。

(2)對(duì)每個(gè)套接口綁定bind(),所用的端口號(hào)和其它參數(shù)來(lái)自/etc/xinetd目錄下每個(gè)服務(wù)的配置文件。

(3)如果是TCP套接口就調(diào)用函數(shù)listen(),等待用戶連接。如果是UDP套接口,就不需調(diào)用此函數(shù)。

(4)所有套接口建立后,調(diào)用函數(shù)select()檢查哪些套接口是活動(dòng)的。

(5)若select()返回TCP套接口,就調(diào)用accept()接收這個(gè)連接。如果為UDP,就不需調(diào)用此函數(shù)。

(6)xinetd調(diào)用fork()創(chuàng)建子進(jìn)程,由子進(jìn)程處理連接請(qǐng)求。

◆ 子進(jìn)程關(guān)閉所有其它描述符,只剩下套接口描述符。這個(gè)套接口描述符對(duì)于TCP是accept()返回的套接口,對(duì)于UDP為最初建立的套接口。然后子進(jìn)程連續(xù)三次dup()函數(shù),將套接口描述符復(fù)制到0、1和2,它們分別對(duì)應(yīng)標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出,并關(guān)閉套接口描述符。

◆ 子進(jìn)程查看/etc/xinetd下文件中的用戶,如果不是root用戶,就用調(diào)用命令setuid和setgid將用戶ID和組ID改成文件中指定的用戶。

(7)對(duì)于TCP套接口,與用戶交流結(jié)束后父進(jìn)程需要關(guān)閉已連接套接口。父進(jìn)程重新處于select()狀態(tài),等待下一個(gè)可讀的套接口。

最后調(diào)用配置文件中指定的外部服務(wù)程序,外部程序啟動(dòng)后就可與用戶進(jìn)行信息傳遞了。

2.為xinetd編寫(xiě)專門(mén)的服務(wù)程序

除了獨(dú)立服務(wù)程序能被xinetd啟動(dòng)外,還可以為xinetd編寫(xiě)專門(mén)的程序。此處的例子程序與上面server.c功能相同。不過(guò)兩者的程序區(qū)別是很大的,此例的代碼僅相當(dāng)于上面?zhèn)鬏敂?shù)據(jù)的部分。我們還將程序名定為server.c,所以不能放在相同目錄中,同名僅是為了和上面程序?qū)φ铡?/p>

#include "unistd.h"

int main()

{

char ch;

read(0,ch,1);

ch++;

write(1,ch,1);

}

將程序編譯成可執(zhí)行文件,并做些設(shè)置就可被xinetd啟動(dòng)。注意不要和上面的獨(dú)立服務(wù)程序server一起啟動(dòng),因?yàn)榭蛻舫绦驅(qū)懙帽容^簡(jiǎn)單,訪問(wèn)的是固定端口,服務(wù)器都設(shè)成了相同的端口號(hào)。

(1)編輯/etc/services文件,在行末增加一條記錄:

server 9000/tcp

(2)在目錄/etc/xinetd.d下編寫(xiě)文件server,內(nèi)容為:

service server

{

disable = no

socket_type = stream

protocol = tcp

wait = no

user = root

server = /home/test/server (此處設(shè)置成自己程序所在的目錄)

}

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

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

(3)執(zhí)行/etc/rc.d/initd.d/xinetd restart重新啟動(dòng)xinetd服務(wù)器。早期版本執(zhí)行/etc/rc.d/initd.d/inetd restart重新啟動(dòng)inetd。

(4)執(zhí)行netstat -an查看有沒(méi)有server程序使用的端口號(hào),如果有就可使用下面客戶機(jī)程序進(jìn)行測(cè)試了。

客戶機(jī)程序

下面就客戶機(jī)函數(shù)做一簡(jiǎn)單介紹。

//程序名client.c

/*功能:從客戶的控制臺(tái)輸入一個(gè)字符,然后將這個(gè)字符送到服務(wù)器,并將服務(wù)器返回的字符顯示出來(lái)*/

#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;

函數(shù)socket()用于建立一個(gè)套接口,創(chuàng)建成功返回套接口描述符。

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”);/*讀者根據(jù)自己環(huán)境改成服務(wù)器地址*/

address.sin_port=htons(9000);

address_len=sizeof(address);

函數(shù)connect()用于與服務(wù)器建立一個(gè)主動(dòng)連接,調(diào)用成功返回值為0。

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

if(connect_flag==-1)

{

perror(“client”);

exit(1);

}

printf(“Input a character :”);

函數(shù)scanf()用于從控制臺(tái)輸入一個(gè)字符,并將字符存入client_ch的地址。函數(shù)write()和read()用于傳輸數(shù)據(jù)。函數(shù)printf()在客戶機(jī)屏幕上顯示服務(wù)器傳回的字符。函數(shù)close()關(guān)閉套接口。

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);

}

執(zhí)行命令“gcc -o client client.c”,將client.c編譯成client。執(zhí)行“./client”,在程序提示下輸入一個(gè)字符,就能看到服務(wù)器傳回的字符。

以上介紹的僅是簡(jiǎn)單的例子。平時(shí)見(jiàn)到的服務(wù)程序遠(yuǎn)比它復(fù)雜,而且很多是多協(xié)議服務(wù)程序或是多協(xié)議多服務(wù)程序。多協(xié)議服務(wù)程序就是在main()中分別創(chuàng)建供服務(wù)的TCP和UDP套接口。為每個(gè)服務(wù)分別寫(xiě)出相應(yīng)程序好處是便于控制,但是這樣每個(gè)服務(wù)都啟動(dòng)兩個(gè)服務(wù)器,而它們的算法響應(yīng)是一樣的,就要耗費(fèi)不必要的資源,并且出了問(wèn)題排錯(cuò)也較困難。多服務(wù)是將不同的服務(wù)集成在一起由一個(gè)程序完成,可用一個(gè)數(shù)組表示服務(wù),數(shù)組中的每一項(xiàng)表示某協(xié)議某服務(wù)的一種,這樣很容易擴(kuò)展程序的服務(wù)功能。

文章標(biāo)題:linux命令搭建服務(wù) linux系統(tǒng)服務(wù)
網(wǎng)站URL:http://muchs.cn/article48/docogep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、外貿(mào)建站、網(wǎng)站導(dǎo)航建站公司、網(wǎng)站內(nèi)鏈微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名