如何停止和禁用Linux系統中的不需要的服務


從Linux中刪除不需要的服務

在本文中,我們將討論一些您不需要的不需要的應用程序和服務,但它們是在操作系統安裝期間默認安裝的,並且不知不覺地開始吃您的系統資源。

讓我們首先知道使用以下命令在系統上運行什么樣的服務。

[avishek@howtoing]# ps ax
示例輸出
  PID TTY      STAT   TIME COMMAND
2 ? S 0:00 [kthreadd] 3 ? S 0:00 \_ [migration/0] 4 ? S 0:09 \_ [ksoftirqd/0] 5 ? S 0:00 \_ [migration/0] 6 ? S 0:24 \_ [watchdog/0] 7 ? S 2:20 \_ [events/0] 8 ? S 0:00 \_ [cgroup] 9 ? S 0:00 \_ [khelper] 10 ? S 0:00 \_ [netns] 11 ? S 0:00 \_ [async/mgr] 12 ? S 0:00 \_ [pm] 13 ? S 0:16 \_ [sync_supers] 14 ? S 0:15 \_ [bdi-default] 15 ? S 0:00 \_ [kintegrityd/0] 16 ? S 0:49 \_ [kblockd/0] 17 ? S 0:00 \_ [kacpid] 18 ? S 0:00 \_ [kacpi_notify] 19 ? S 0:00 \_ [kacpi_hotplug] 20 ? S 0:00 \_ [ata_aux] 21 ? S 58:46 \_ [ata_sff/0] 22 ? S 0:00 \_ [ksuspend_usbd] 23 ? S 0:00 \_ [khubd] 24 ? S 0:00 \_ [kseriod] .....

現在,讓我們快速瀏覽一下使用接受連接(端口)進程netstat命令 ,如下圖所示。

[avishek@howtoing]# netstat -lp
示例輸出
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 *:31138 *:* LISTEN 1485/rpc.statd tcp 0 0 *:mysql *:* LISTEN 1882/mysqld tcp 0 0 *:sunrpc *:* LISTEN 1276/rpcbind tcp 0 0 *:ndmp *:* LISTEN 2375/perl tcp 0 0 *:webcache *:* LISTEN 2312/monitorix-http tcp 0 0 *:ftp *:* LISTEN 2174/vsftpd tcp 0 0 *:ssh *:* LISTEN 1623/sshd tcp 0 0 localhost:ipp *:* LISTEN 1511/cupsd tcp 0 0 localhost:smtp *:* LISTEN 2189/sendmail tcp 0 0 *:cbt *:* LISTEN 2243/java tcp 0 0 *:websm *:* LISTEN 2243/java tcp 0 0 *:nrpe *:* LISTEN 1631/xinetd tcp 0 0 *:xmltec-xmlmail *:* LISTEN 2243/java tcp 0 0 *:xmpp-client *:* LISTEN 2243/java tcp 0 0 *:hpvirtgrp *:* LISTEN 2243/java tcp 0 0 *:5229 *:* LISTEN 2243/java tcp 0 0 *:sunrpc *:* LISTEN 1276/rpcbind tcp 0 0 *:http *:* LISTEN 6439/httpd tcp 0 0 *:oracleas-https *:* LISTEN 2243/java ....


在上面的輸出中,您注意到您可能不需要在服務器上的一些應用程序,但它們仍然運行如下:

smbd和nmbd

smbd和nmbd是Samba進程的守護程序。 你真的需要在Windows或其他機器上導出smb共享。 如果沒有! 為什么這些進程運行? 您可以安全地終止這些進程,並禁止它們在下次引導計算機時自動啟動。

2. Telnet

你需要通過互聯網或局域網進行雙向交互式文本導向通信嗎? 如果沒有! 殺死這個進程並關閉它從啟動開始。

3. rlogin

您需要通過網絡登錄到另一台主機。 如果沒有! 殺死此進程並禁止它在啟動時自動啟動。

rexec

遠程進程執行也稱為rexec,您可以在遠程計算機上執行shell命令。 如果不需要在遠程機器上執行shell命令,只需殺死該進程即可。

5. FTP

您需要通過Internet將文件從一個主機傳輸到另一個主機嗎? 如果不是,您可以安全地停止服務。

6.自動掛載

你需要自動掛載不同的文件系統來啟動網絡文件系統嗎? 如果沒有! 為什么這個進程正在運行? 為什么要讓此應用程序使用您的資源? 殺死進程並禁止它自動啟動。

7.命名

你需要運行NameServer(DNS)嗎? 如果不是在地球上迫使你運行這個過程,並允許吃掉你的資源。 先停止運行的進程,然后在啟動時關閉它運行它。

8.lpd

lpd是可以打印到該服務器的打印機守護程序。 如果您不需要從服務器打印,則可能是您的系統資源正在被占用。

9.Inetd

您是否正在運行任何inetd服務? 如果你運行獨立的應用程序像ssh使用其他獨立的應用程序像Mysql,Apache等,那么你不需要inetd。 更好地殺死進程,並禁用它自動下次啟動。

10. portmap

Portmap是開放網絡計算遠程過程調用(ONC RPC)並使用守護程序rpc.portmap和rpcbind。 如果這些進程正在運行,則表示您正在運行NFS服務器。 如果NFS服務器運行未注意到意味着您的系統資源被不必要地用盡。

如何在Linux中殺死進程

為了殺死在Linux下運行的過程中,使用' 殺PID“命令。 但是,在運行Kill命令之前,我們必須知道進程的PID。 例如,在這里我想找個' 的cupsd“進程的PID。

[avishek@howtoing]# ps ax | grep cupsd 1511 ? Ss 0:00 cupsd -C /etc/cups/cupsd.conf

所以,'cupsd將 '處理的PID為“1511”。 要終止該PID,請運行以下命令。

[avishek@howtoing]# kill -9 1511

要了解更多關於他們的榜樣kill命令,閱讀文章指南kill命令終止在Linux中程序

如何在Linux中禁用服務

在基於Red Hat分發比如FedoraCentOS,使用一個名為“腳本chkconfig的 ”在Linux中啟用和禁用正在運行的服務。

例如,允許在系統啟動時禁用Apache Web服務器。

[avishek@howtoing]# chkconfig httpd off [avishek@howtoing]# chkconfig httpd --del

在基於Debian的發行版,如Ubuntu的 ,Linux Mint的和其他基於Debian的發行版使用一種叫做更新- rc.d腳本。

例如,要在系統啟動時禁用Apache服務,請執行以下命令。 在這里,'-f'選項代表力量是強制性的。

[avishek@howtoing]# update-rc.d -f apache2 remove

進行這些更改后,系統下次將啟動,而不需要這些UN必要的過程,實際上將會節省我們的系統資源,並且服務器將更實用,快速,安全和安全。

 參考:https://www.howtoing.com/remove-unwanted-services-from-linux/

 

很多時候最好把操作命令寫成腳本的形式:

Ubuntu 16.04設置rc.local開機啟動命令/腳本的方法(通過update-rc.d管理Ubuntu開機啟動程序/服務)--debian與ubuntu類似

注意:rc.local腳本里面啟動的用戶默認為root權限。

一、rc.local腳本

rc.local腳本是一個Ubuntu開機后會自動執行的腳本,我們可以在該腳本內添加命令行指令。該腳本位於/etc/路徑下,需要root權限才能修改。

該腳本具體格式如下:

復制代碼
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
  
exit 0
復制代碼

注意: 一定要將命令添加在exit 0之前。里面可以直接寫命令或者執行Shell腳本文件sh。

二、關於放在rc.local里面時不啟動的問題:

1、可以先增加日志輸出功能,來查看最終為什么這個腳本不啟動的原因,這個是Memcached啟動時的樣例文件:

復制代碼
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

#log
exec 2> /tmp/rc.local.log  # send stderr from rc.local to a log file  
exec 1>&2                  # send stdout to the same log file  
set -x                     # tell sh to display commands before execution 

#Memcached
/usr/local/memcache/bin/memcached -p 11211 -m 64m -d -u root

exit 0
復制代碼

2、rc.local文件頭部/bin/sh修改為/bin/bash

3、如果是執行sh文件,那么要賦予執行權限sudo chmod +x xxx.sh,然后啟動時加上sudo sh xxx.sh

三、 update-rc.d增加開機啟動服務

給Ubuntu添加一個開機啟動腳本,操作如下:

1、新建個腳本文件new_service.sh

#!/bin/bash
# command content
  
exit 0

2、設置權限

sudo chmod 755 new_service.sh
#或者
sudo chmod +x new_service.sh

3、把腳本放置到啟動目錄下

sudo mv new_service.sh /etc/init.d/

4、將腳本添加到啟動腳本

執行如下指令,在這里90表明一個優先級,越高表示執行的越晚

cd /etc/init.d/
sudo update-rc.d new_service.sh defaults 90

5、移除Ubuntu開機腳本

sudo update-rc.d -f new_service.sh remove

6、通過sysv-rc-conf來管理上面啟動服務的啟動級別等,還是開機不啟動

sudo sysv-rc-conf 

7、update-rc.d的詳細參數

使用update-rc.d命令需要指定腳本名稱和一些參數,它的格式看起來是這樣的(需要在 root 權限下):

update-rc.d [-n] [-f] <basename> remove
update-rc.d [-n] <basename> defaults
update-rc.d [-n] <basename> disable|enable [S|2|3|4|5]
update-rc.d <basename> start|stop <NN> <runlevels>
-n: not really
-f: force

其中:

  • disable|enable:代表腳本還在/etc/init.d中,並設置當前狀態是手動啟動還是自動啟動。
  • start|stop:代表腳本還在/etc/init.d中,開機,並設置當前狀態是開始運行還是停止運行。(啟用后可配置開始運行與否)
  • NN:是一個決定啟動順序的兩位數字值。(例如90大於80,因此80對應的腳本先啟動或先停止)
  • runlevels:則指定了運行級別。

實例:

(1)、添加一個新的啟動腳本sample_init_script,並且指定為默認啟動順序、默認運行級別(還記得前面說的嗎,首先要有實際的文件存在於/etc/init.d,即若文件/etc/init.d/sample_init_script不存在,則該命令不會執行):

update-rc.d sample_init_script defaults

上一條命令等效於(中間是一個英文句點符號):

update-rc.d sample_init_script start 20 2 3 4 5 . stop 20 0 1 6

(2)、安裝一個啟動腳本sample_init_script,指定默認運行級別,但啟動順序為50

update-rc.d sample_init_script defaults 50

(3)、安裝兩個啟動腳本AB,讓A先於B啟動,后於B停止:

update-rc.d A 10 40
update-rc.d B 20 30

(4)、刪除一個啟動腳本sample_init_script,如果腳本不存在則直接跳過:

update-rc.d -f sample_init_script remove

這一條命令實際上做的就是一一刪除所有位於/etc/rcX.d目錄下指向/etc/init.dsample_init_script的鏈接(可能存在多個鏈接文件),update-rc.d只不過簡化了這一步驟。

(5)禁止Apache/MySQL相關組件開機自啟:

update-rc.d -f apache2 remove
update-rc.d -f mysql remove

8、服務的啟動停止狀態

#通過service,比如
sudo service xxx status
sudo service xxx start
sudo service xxx stop
sudo service xxx restart

9、查看全部服務列表

sudo service --status-all

 

參考:

http://www.jamescoyle.net/cheat-sheets/791-update-rc-d-cheat-sheet(查看全部服務列表)

http://blog.csdn.net/typ2004/article/details/38712887

http://blog.csdn.net/shb_derek1/article/details/8489112

http://blog.sina.com.cn/s/blog_79159ef50100z1ax.html

http://www.linuxidc.com/Linux/2013-01/77553p2.htm

http://www.jb51.net/article/100413.htm

http://blog.csdn.net/yplee_8/article/details/50342563

http://blog.163.com/zhu329599788@126/blog/static/66693350201731211940840/

rc.local不啟動的原因:

http://fantaxy025025.iteye.com/blog/2097862

http://www.linuxidc.com/Linux/2016-12/138665.htm

http://blog.csdn.net/sea_snow/article/details/51051289

http://blog.csdn.net/benbenxiongyuan/article/details/58597036

http://www.cnblogs.com/liulanghe/p/3376380.html

http://blog.csdn.net/zhe_d/article/details/50312967

 轉自:https://www.cnblogs.com/EasonJim/p/7573292.html

 

Linux 編寫一個簡單的一鍵腳本

Linux中我們安裝軟件或者一些常用操作,都會接觸很多命令,有時在關鍵時刻往往因為忘了一些簡單的命令而苦惱,這時,我們不妨把命令寫成可執行的批量腳本,可以減少很多重復而又容易忘記的代碼,寫成一鍵腳本還有一個好處就是方便遷移,可以直接將寫好的sh文件在其他Linux平台運行。

格式:

 文件后綴.sh 
第一行代碼需要指定路徑來執行程序

#!/bin/sh 或#!/bin/bash

建議由后者,參見shell腳本頭,#!/bin/sh與#!/bin/bash的區別.

一般一鍵腳本會要求用戶輸入各種選項:

 1 #提示“請輸入姓名”並等待30秒,把用戶的輸入保存入變量name中
 2 read -t 30 -p "請輸入用戶名稱:" name
 3 echo -e "\n"
 4 echo "用戶名為:$name"
 5 #提示“請輸入密碼”並等待30秒,把用戶的輸入保存入變量age中,輸入內容隱藏
 6 read -t 30 -s -p "請輸入用戶密碼:" age
 7 echo -e "\n"
 8 echo "用戶密碼為:$age"
 9 #提示“請輸入性別”並等待30秒,把用戶的輸入保存入變量sex中,只接受一個字符輸入
10 read -t 30 -n 1 -p "請輸入用戶性別:" sex
11 echo -e "\n"
12 echo "性別為$sex"

 

邏輯判斷:

1 read -t 30 -p "請輸入用戶名稱:" isYes
2 if [ "${isYes}" = "yes" ]; then
3 echo "輸入了Yes"
4 fi

執行並行腳本:

1 wget -c http://www.xxx.com/xx.tar.gz && tar zxf xx.tar.gz && cd xx && ./install.sh

方法調用:

1 print_hello()
2 {
3 echo "hello"
4 }
5 print_hello

轉自:https://blog.csdn.net/c__chao/article/details/79785571

echo命令

echo命令用於在shell中打印shell變量的值,或者直接輸出指定的字符串。linux的echo命令,在shell編程中極為常用, 在終端下打印變量value的時候也是常常用到的,因此有必要了解下echo的用法echo命令的功能是在顯示器上顯示一段文字,一般起到一個提示的作用。

語法

echo(選項)(參數)

選項

-e:激活轉義字符。

使用-e選項時,若字符串中出現以下字符,則特別加以處理,而不會將它當成一般文字輸出:

  • \a 發出警告聲;
  • \b 刪除前一個字符;
  • \c 最后不加上換行符號;
  • \f 換行但光標仍舊停留在原來的位置;
  • \n 換行且光標移至行首;
  • \r 光標移至行首,但不換行;
  • \t 插入tab;
  • \v 與\f相同;
  • \\ 插入\字符;
  • \nnn 插入nnn(八進制)所代表的ASCII字符;

參數

變量:指定要打印的變量。

實例

用echo命令打印帶有色彩的文字:

文字色:

echo -e "\e[1;31mThis is red text\e[0m"
This is red text
  • \e[1;31m 將顏色設置為紅色
  • \e[0m 將顏色重新置回

顏色碼:重置=0,黑色=30,紅色=31,綠色=32,黃色=33,藍色=34,洋紅=35,青色=36,白色=37

背景色

echo -e "\e[1;42mGreed Background\e[0m"
Greed Background

顏色碼:重置=0,黑色=40,紅色=41,綠色=42,黃色=43,藍色=44,洋紅=45,青色=46,白色=47

文字閃動:

echo -e "\033[37;31;5mMySQL Server Stop...\033[39;49;0m"

紅色數字處還有其他數字參數:0 關閉所有屬性、1 設置高亮度(加粗)、4 下划線、5 閃爍、7 反顯、8 消隱

轉自:http://man.linuxde.net/echo


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM