天天看點

Linux程序管理一、Linux下的程序二、守護程序三、安排自動化任務

一、Linux下的程序

每個使用者均可同時運作多個程式。為了區分每一個運作的程式,Linux給每個程序都做了辨別,稱為程序号(process ID),每個程序的程序号是唯一的。

Linux 給每個程序都打上了運作者的标志,使用者可以控制自己的程序:給自己的程序配置設定不同的優先級,也可以随時終止自己的程序。

  • 程序從執行它的使用者處繼承UID、GID,進而決定對檔案系統的存取和通路。

Linux 不可能在一個 CPU 上同時處理多個任務(作業)請求,而是采用 “分時” 技術來處理這些任務請求。

使用PID區分不同的程序

  • 系統啟動後的第一個程序是init,它的PID是1。init是唯一一個由系統核心直接運作的程序。
  • 除了init之外,每個程序都有父程序(PPID辨別)
  • 每個程序還有四個與使用者群組相關的識别号
    • 實際使用者識别号 (real user ID,RUID)
    • 實際組識别号 (real group ID,RGID)
    • 有效使用者識别号 (effect user ID,EUID)
    • 有效組識别号 (effect group ID,EGID)
  1. RUID和RGID的作用:識别正在運作此程序的使用者群組。
  2. EUID和EGID的作用:确定一個程序對其通路的檔案的權限。

程序類型:

  • 互動程序
    • 由一個Shell啟動的程序。
    • 互動程序既可以在前台運作,也可以在背景運作。
  • 批處理程序
    • 不與特定的終端相關聯,送出到等待隊列種順序執行的程序。
  • 守護程序(Daemon)
    • 在Linux在啟動時初始化,需要時運作于背景的程序。

程序的啟動方式:

  • 手工方式:使用作業系統提供的使用者接口
    • 前台
    • 背景 (&)
  • 排程方式:按照預先指定的時間執行
    • at
    • batch
    • cron

前台程序:

  • 指一個程式控制着标準輸入/輸出,在程式運作時,shell 被暫時挂起,直到該程式運作結束後,才退回到 shell。在這個過程中,使用者不能再執行其它程式

背景程序:

  • 使用者不必等待程式運作結束就可以執行其它程式。運作背景程序的方法是在指令行最後加上 “&”

程序和作業的差別:

  • 程序:作業系統的概念,由作業系統負責管理
  • 作業:shell程式的概念,由shell程式負責管理
    • 一個作業系統可以啟動多個shell程式,shell本身也是一個程序
    • 一個作業裡至少包含一個程序,也可以包含多個程序
    • 作業分前台和背景運作之分

有了上面的知識點,我們就可以畫出這麼一張流程圖:

Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務

1.1管理程序常用指令

使用

ps

指令檢視程序狀态資訊:

  • ps -ef

  • ps aux

ps

指令參數說明:

Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務

ps

指令輸出說明:

Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務

還有其他幾個常用指令:

  • 登出後繼續運作程序:

    nohup 指令 [選項] [參數] [輸出檔案] &

    • 用過SpringBoot打jar包部署到Linux下的同學對上面這個指令一定不會陌生啦~
  • 殺死程序:

    kill pid -9

  • free

    :檢視記憶體使用狀況
  • top

    :檢視實時重新整理的系統程序資訊
  • 程序排程的優先權

    nice

    指令:
  • 程序運作後調整優先級:

    renice

    指令。
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務

作業控制是指控制目前正在運作的程序的行為,也被稱為程序控制。

  • 暫時停止某個運作程式 使用

    Ctrl+z

  • 列舉作業号碼和名稱:

    jobs

  • 在背景恢複運作:

    bg [%作業号碼]

  • 在前台恢複運作:

    fg [%作業号碼]

  • 發送信号:

    kill -[信号] pid

1.2程序練習題

以root賬戶登入,運作ps指令,選項分别用-a和-af;觀察對比結果,并截圖;運作ps指令,選項為-ef,觀察結果;運作ps,選項為au,觀察結果,并截圖。
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
切換到jkXX賬戶,用長格式列出/usr/bin/passwd指令,觀察指令的權限屬性;用背景方式運作passwd指令;運作ps指令,選項為-ao,參數為user,pid,ruid,euid,tty,cmd,觀察結果并截圖
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
切換到peter賬戶,用背景執行指令ls -l /usr/bin | more &,觀察結果;上述指令再次執行兩遍,觀察結果;執行ps指令,選項為au,觀察有哪些程序在運作;執行指令jobs,檢視有哪些作業在運作;通過fg指令把背景指令轉移到前台,使之結束,觀察剩餘作業;直到作業全部結束。
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
切換到jason賬戶,用nice指令啟動在背景啟動vi編輯軟體,優先級增加10,用ps指令,選項為-l觀察vi程序的優先級;用nice指令啟動在背景啟動vi編輯軟體,優先級減少10,觀察結果,為什麼不成功;切換到root賬戶,用nice指令啟動在背景啟動vi編輯軟體,優先級減少10;
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
ps指令中顯示TTY代表什麼?

答:tty代表字元終端。

ps指令的輸出結果,哪個程序的狀态為運作狀态?哪個程序為休眠狀态?

答:ps au指令的程序是運作狀态,用R表示;其餘的都是休眠狀态。

passwd指令的euid為多少,它在執行中應獲得誰的權限?

答:euid為0,它在執行中應獲得檔案所有者root的權限。

如果用chmod指令把passwd指令的suid屬性去掉,在普通賬戶下運作passwd指令,可以修改密碼嗎?為什麼?

答:不可以,因為passwd指令要修改shadow檔案,shadow檔案是root使用者的,普通賬戶運作passwd指令,沒有獲得root使用者權限,無法修改shadow檔案。

nice指令減少優先級的值,需要什麼樣的權限?

答:需要root使用者權限

二、守護程序

始終在背景運作并響應合法請求的程式稱為守護(Daemon)程序。守護程序不是由使用者啟動運作的,也不與終端關聯。

  • 一個實際運作中的系統一般會有多個守護程序在運作,且各個系統中運作的守護程序都不盡相同。
  • 除非程式異常中止或者人為終止,否則它們将一直運作下去直至系統關閉。
  • UNIX/Linux的守護程序在Windows系統中被稱作“服務”。

守護程序的分類:

  • 系統守護程序
    • 計劃性任務 daemon:如 atd、crond
    • 系統日志 daemon:如 rsyslogd
    • 列印假脫機 daemon:如 cupsd、lpd
    • 網絡參數設定 daemon:如 network
  • 網絡守護程序:
    • 各種網絡協定偵聽 daemon
    • 如:sshd、httpd、postfix、vsftpd
  • 網絡超級伺服器(Supper Server)
    • 如:xinetd 或 inetd

超級伺服器的引入

xinetd

  • 對于系統所要提供的每一種網絡服務,都必須運作一個監聽某個端口連接配接發生的守護程式,這通常意味着系統資源的浪費。
  • 為了避免系統資源浪費引入了“超級伺服器”。超級伺服器啟動後同時監聽它所管理的服務的所有端口
  • 當有客戶提出服務請求時
    • 超級伺服器會判斷這是對哪一個服務的請求,然後再開啟與此服務相應的守護程序
    • 由超級伺服器産生的某服務的程序處理客戶的請求,當處理結束便終止此服務程序
    • 超級伺服器本身繼續監聽其他服務請求
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務

守護程序的啟動方式:

  • 獨立啟動
    • 獨立運作的守護程序由init腳本負責管理,腳本存放在

      /etc/rc.d/init.d/

      目錄下
    • 所有的系統服務都是獨立運作的。如:crond、syslogd等
    • 一些常用的網絡守護程序是獨立運作的。如:httpd等
  • 瞬态啟動
    • 由網絡超級伺服器(xinetd)運作的守護程序,由xinetd管理的守護程序的配置檔案存在

      /etc/xinetd.d/

      目錄下
    • 預設的xinetd的主配置檔案是

      /etc/xinetd.conf

    • 一些不常用的網絡守護程序是由xinetd啟動的,如:telnet、 tftp等
    • xinetd本身是獨立運作的守護程序

2.1管理守護程序常用指令

chkconfig

指令的功能

  • 添加指定的新服務
  • 清除指定的服務
  • 顯示由chkconfig管理的服務
  • 改變服務的運作級别
  • 檢查服務的啟動狀态

chkconfig --list

會顯示出對應的運作級别:

  • 0: 關機
  • 1: 單使用者
  • 2: 無網絡的多使用者
  • 3: 指令行模式
  • 4: 未用
  • 5: GUI(圖形桌面 模式)
  • 6 : 重新開機

ntsysv

管理守護程序

Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務

使用

service

管理守護程序

  • service --status-all

  • service server-name status

  • service server-name start|stop|restart

2.2守護程序練習題

安裝守護程序工具ntsysv,并運作它;通過ntsysv界面,取消crond的自動啟動,通過指令chkconfig來檢查crond自動運作是否被取消;通過chkconfig指令設定crond啟動啟動,通過ntsysv檢查結果;觀察結果,并截圖
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
編輯xinetd的主配置檔案,修改連結instances = 2,重新啟動xinetd;用putty以telnet方式連接配接到linux,用pstree指令觀察xinetd啟動的telnet程序數量;繼續開啟telnet連結,直到連接配接超過限制
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
編輯系統服務檔案services,修改telnet服務的端口為27,重新開機xinetd;用putty以telnet方式連接配接到linux,顯示目前的網絡連結;恢複telnet預設的服務端口,并檢查;觀察結果,并截圖。
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
telnet服務端口可以改變嗎?如果可以改變,連接配接telnet服務應注意什麼問題?

答:telnet服務端口可以改變。連接配接telnet服務的時候,應該注意端口号修改為正在提供telnet服務的端口号。

修改telnet配置檔案,需要xinetd服務重新開機嗎?為什麼?

答:需要重新啟動xinetd服務,因為xinetd作為超級伺服器,它負責管理telnet服務的啟動,也要同時檢視telnet的服務配置檔案。當telnet服務配置檔案修改的時候,xinetd服務需要知道配置檔案的變化,重新啟動會重新讀取配置檔案的内容,使之生效。

Telnet為什麼可以看到腳本程式的執行結果?

答:telnet是一個遠端的字元界面的網絡工具,它實作了遠端字元界面的标準輸入和輸出功能;腳本執行的結果是輸出到标準輸出裝置,也就是字元界面的螢幕,telnet将标準輸出通過網絡傳遞到telnet用戶端的螢幕上顯示,是以它可以看到腳本程式執行的結果。

通過ntsysv指令和chkconfig指令打開守護程序啟動運作的結果是否完全一樣?有什麼不同?

答:ntntsysv指令關閉守護程序,隻是改變了目前使用者運作級别的守護程序開關,具體來說,改變了3号運作級别指令行模式的守護程序開關。chkconfig指令預設改變3、4、5級别的全部開關,chkconfig還可以指定某個運作級别的守護程序開關。

三、安排自動化任務

排程任務的守護程序:

  • atd
  • crond

安排排程任務的幾個指令:

  • at 安排作業在某一時刻執行一次
  • batch 安排作業在系統負載不重時執行一次
  • cron 安排周期性運作的作業

3.1atd守護程序

atd守護程序負責監控一次性任務的執行,atd守護程序的執行參數

/etc/sysconfig/atd

控制普通使用者的使用

  • /etc/at.allow

    存在,僅列在其中的使用者允許使用
  • /etc/at.allow

    不存在,檢查

    /etc/at.deny

    ,沒有列于其中的所有使用者允許使用
  • 若兩個檔案均不存在,僅允許root使用者使用
  • 空的

    /etc/at.deny

    檔案,表示允許所有使用者使用(預設值)

如何使用:

  • 安裝指令

    yum install at

  • atd的啟動

    service atd start

  • atd服務的檢視

    chkconfig --list | grep atd

    或者

    ps -aef | grep atd

  • at

    指令格式及參數

    at [-q 隊列] [-f 檔案名] 時間

3.2cron

  • crond守護程序負責監控周期性任務的執行
  • crond守護程序的執行參數配置檔案

    /etc/sysconfig/crond

控制普通使用者的使用

  • /etc/cron.allow

    存在,僅列在其中的使用者允許使用
  • /etc/cron.allow

    不存在,檢查

    /etc/cron.deny

    ,沒有列于其中的所有使用者允許使用
  • 若兩個檔案均不存在,僅允許root使用者使用
  • 空的

    /etc/cron.deny

    檔案,表示允許所有使用者使用(預設值)

crond啟動以後,每分鐘喚醒一次,檢測如下檔案的變化并将其加載到記憶體

  • /etc/crontab

    :是crontab格式(man 5 crontab)的檔案
  • /etc/cron.d/*

    :是crontab格式(man 5 crontab)的檔案
  • /var/spool/cron/*

    :是crontab格式(man 5 crontab)的檔案
  • /etc/anacrontab

    :是anacrontab格式(man 5 anacrontab)的檔案
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務

3.3安排自動化任務練習

安裝at計劃任務服務,并且啟動它;在下午茶的時間,檢查網卡資訊;在兩分鐘之後,開啟防火牆;2019年6月1日淩晨兩點,伺服器重新開機;明天晚上9點,關閉eth1;用指令檢查正在等待的計劃任務;用at -c檢查正在等待任務的具體内容;删除其中一條任務,觀察結果。觀察結果,并截圖
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
編輯一個檔案myatXX(XX為學生的學号末兩位),要求按順序執行如下指令:傳回使用者主目錄;檢視使用者賬戶名;檢視目前系統運作的所有程序,并将記錄儲存到檔案ps.log中;添加一個計劃任務,要求下午5點執行檔案中的指令;觀察結果,并截圖
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
用普通賬戶jsjXX登入,添加一個計劃任務,明天中午關閉eth0;更改at指令的相關配置檔案,禁止jsjXX執行at指令,試驗證之
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
修改crontab檔案,添加一個新的周期任務,要求如下:每間隔6個小時,把伺服器正在監聽的端口資訊,儲存到/root/net.txt檔案中;每周五或者10,20,30日上午9:00到下午15:00,每個小時第10分鐘,清除目錄/tmp下的所有檔案
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
添加一個腳本,要求:每月執行該任務,查找/home目錄下30天沒有修改的檔案,并删除它;腳本名稱為clean-home
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
登入jsj08 賬務,用crontab -e指令編寫一個周期任務,要求每個2分鐘按順序執行:顯示目前系統時間;顯示賬戶名;顯示目前賬戶的程序資訊;以上指令的結果,全部以追加式方式儲存到使用者主目錄下檔案,檔案名為myplanXX(XX為學生的學号末兩位)。用crontab -l檢查編寫的任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
Linux程式管理一、Linux下的程式二、守護程式三、安排自動化任務
myatXX檔案是否要修改權限,才能執行?

答:不需要。atd服務隻是從myatXX檔案中讀取内容,真正執行的指令會存放在另外一個檔案,我們用at -c指令可以看到這個真正執行檔案内容。

腳本放在哪個目錄下?腳本需要添加可執行屬性嗎?

答:腳本根據不同的周期放到不同的目錄下,本題以月為周期執行,是以放入/etc/cron.monthly目錄下。腳本需要添加可執行屬性,因為這是真正可執行的腳本。

普通使用者可以修改at服務的配置檔案嗎?

答:修改at配置檔案需要root權限,普通使用者不可以修改at的配置檔案。

作者:Java3y

連結:https://juejin.cn/post/6844903619720904711

繼續閱讀