linux服務
① linux怎樣查看 某項服務 當前啟動狀態
可以在Linux下輸入命令:
1、$service sshd status
2、#service servicename status是當前狀態
3、#chkconfig --list servicename是查看啟動版狀態,也就權是是否開機自動啟動
註:
1、如果service和chkconfig 找不到,可以試試/sbin/service和/sbin/chkconfig
2、如果用ubuntu好像是要用/etc/init.d/servicename status查看當前狀態
(servicename就是你要查的服務名)
(1)linux服務擴展閱讀:
查看某項服務當前啟動狀態的其他方式
一、利用進程來查看
命令里 ps -aux | grep xxx 是查看某個進程或者服務是否存在。
二、利用services命令
1、查看單個服務的運行狀態: service 服務名 status
如:[root@localhost ~]# service sshd status
openssh-daemon (pid 3701) 正在運行…
2、查看所有服務的運行狀態:service –status -all
② 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_sockfd<0)
{
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_flag<0)
{
printf(「bind error /n」);
exit(1);
}
函數listen(),指明伺服器的隊列長度,被動等待客戶連接,調用成功返回值為0。
listen_flag=listen(server_sockfd,5);
if(listen_flag<0)
{
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為最初建立的套介面。然後子進程連續三次p()函數,將套介面描述符復制到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(sockfd<0)
{
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添加服務!
這樣操作:
1、一個vsftpd一個啟動腳本到/etc/init.d/目錄下,名字為vsftpd。(也可專以自屬己書寫一個啟動腳本)
2、執行chkconfig
add
vsftpd(也可以加--level參數指定部分init)
3、就可以執行service
vsftpd
start
/stop了。
④ linux下如何查看自己都裝了什麼服務
因不同版本的操作系統可能使用的命令不一樣或者有些命令在某些操作系統回不可用,現列答舉一些常用查看命令(基於我的linux版本)。
我的操作系統版本如下:
其中*號表示開機啟動。如果想讓某個服務開機啟動,可以使用chkconfig mysql on。另有查看mysql狀態/停止mysql服務/啟動mysql服務 分別為:service mysql status/stop/start。
⑤ 如何知道linux服務用途
看的多了, 就什麼都知道了,....裡面每個進程都是一塊內容的知識, 簡單的說專: 我說: kthreadd 是用於創建系統進程的. kswapd 內存換頁的, flush, 內存數據沖刷進磁碟的, sync_supers文件系統元數據沖刷至硬碟的jbd, ext4文件系統中的日誌功能, rpcbind網路埠服務. rsyslogd, 日誌..等等..說這些有用嗎? 當你學到相關的內屬容才能知道真正的作用是干什麼的.
⑥ 如何查看或停止Linux啟動的服務
|SysV服務管理系統 例如 RedHat6等發行版
service --status-all 查看所有服務
service servicename status 查看指定服務狀態
service servicename start|stop|restart 啟動|停止|重啟 指定服務
systemd服務管理系統 如CentOS 7等
systemctl is-enabled servicename.service #查詢服務是否開機啟動
systemctl enable *.service #開機運行服務
systemctl disable *.service #取消開機運行
systemctl start *.service #啟動服務
systemctl stop *.service #停止服務
systemctl restart *.service #重啟服務
systemctl reload *.service #重新載入服務配置文件
systemctl status *.service #查詢服務運行狀態
systemctl --failed #顯示啟動失敗的服務
⑦ linux 下怎麼查看服務是否開啟
1、ps aux 或netstat -tlunp ps是進程查看命令,netstat是埠查看命令,在Linux系統中,服務一定是有進程的,所以使用ps命令可以查看服務運行情況,另外,Linux服務多數是網路服務,所以通過netstat命令也可以查看服務運行狀態。
2、service 服務名 status
比如查看httpd的Web服務的運行狀態,執行service httpd status,
3、/sbin/service --status-all |grep "服務名"
比如查看httpd的web服務,執行 /sbin/service --status-all |grep "httpd"即可。
4、chkconfig --list
比如查看httpd的web服務,執行 chkconfig --list |grep "httpd"即可。
⑧ 在linux下如何訪問伺服器
給虛擬機的Linux裝一個ssh服務,開啟之後再xp上用putty之類的ssh客戶端訪問。
當然還可以安裝telnet服務版,vnc服務等等,這些需權要另外的客戶端。
建議先提前了解所需的Linux命令,如下進行搜索
Linux伺服器端准備工作
首先需要在Linux伺服器上安裝openssh-server,打開Linux伺服器命令行終端,鍵入下面命令
sudo apt-get install openssh-server
修改Linux伺服器的ssh配置文件
sudo gedit /etc/ssh/sshd_config
先使用」#」注釋掉PermitRootLogin without-password
添加一行 PermitRootLogin yes
然後開啟ssh服務
ps -e | grep ssh
⑨ linux的服務到底是個什麼東西
Linux中的服務是一類常駐在內存中的進程,這類進程啟動後就在後台當中一直持續專不斷的運行,因為這類進屬程通常是負責一些系統提供的功能來服務用戶的各項任務,所以這類進程被稱為服務,比如crond、atd、syslog、Apache都是屬於服務,服務叫做daemon進程,從它的英文含義上也可以看出這類進程的特點。
⑩ Linux 如何啟動/關閉 X 服務
1、利用ntsysv命令進行設置。