




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第7章軟件管理openEuler操作系統(tǒng)軟件管理介紹0102目錄CONTENTS軟件管理簡介源碼包管理01openEuler系統(tǒng)軟件管理工具及包類型軟件管理簡介根據(jù)不同的軟件需求和系統(tǒng)環(huán)境,選擇合適的工具進(jìn)行軟件管理。應(yīng)用場景openEuler系統(tǒng)同時(shí)支持源碼包的管理和安裝。支持類型軟件管理指在操作系統(tǒng)中安裝、升級和刪除軟件包。在openEuler操作系統(tǒng)中,推薦使用DNF工具管理軟件包。不同工具各有優(yōu)勢,DNF性能更優(yōu),RPM功能強(qiáng)大且應(yīng)用廣泛,YUM使用方便。工具優(yōu)勢openEuler操作系統(tǒng)還兼容RPM(RedHatPackageManager,紅帽包管理)工具和YUM(YellowdogUpdater,Modified,Shell前端軟件包管理器)工具管理軟件包。兼容工具軟件管理概述定義源碼包中封裝的是源碼,通常是.tar或者.tar.gz格式的壓縮包。安裝步驟源碼包中通常包含README文件,通過它可以了解源碼包的相關(guān)信息。二進(jìn)制包安裝方便,源碼包可靈活配置,但安裝過程相對復(fù)雜。優(yōu)勢對比軟件包管理簡介源碼包格式包類型軟件包分為二進(jìn)制包與源碼包。二進(jìn)制包是可以直接進(jìn)行安裝的可執(zhí)行文件,類似于Windows操作系統(tǒng)中的.exe文件。安裝源碼包時(shí),先使用tar命令解壓壓縮包,再通過./configure命令配置,make命令編譯,最后makeinstall命令完成安裝。信息文件13245示例說明管理對象RPM工具簡介RPM工具是由紅帽公司開發(fā)的一款軟件包管理工具。RPM軟件包命名規(guī)則為name-version.arch.rpm或name-version.arch.src.rpm。開發(fā)公司命名規(guī)則協(xié)議遵循RPM遵循GPL協(xié)議,在很多Linux發(fā)行版(例如CentOS、SUSE、OpenLinux、Fedora)中被廣泛使用。如httpd-2.4.34-15.oe1.src.rpm,httpd是軟件名稱,2.4.34是版本號,oe1代表適配系統(tǒng),src.rpm表示源碼包。RPM可以管理以.rpm為擴(kuò)展名的軟件包,常用操作包括查詢、安裝、更新、刪除等。工具定位搜索優(yōu)勢YUM工具簡介YUM源默認(rèn)存放在/etc/yum.repos.d目錄中。YUM是Shell前端軟件包管理器,和RPM都是軟件包管理工具。相較于RPM,YUM可以從本地設(shè)置的.repo格式的源中搜索軟件包,自動(dòng)安裝當(dāng)前軟件所依賴的其他軟件。默認(rèn)位置命令功能說明install安裝命令,用于安裝相應(yīng)軟件包list[軟件包名]查詢命令,用于列出所有軟件包,或者包含相應(yīng)軟件包名的軟件包info查詢命令,用于顯示相關(guān)軟件包或軟件包組的詳細(xì)信息update更新命令,用于更新相應(yīng)的軟件包c(diǎn)heck-update查詢命令,用于檢查可以更新的軟件包remove刪除命令,用于從系統(tǒng)中刪除相應(yīng)軟件包search查詢命令,用于搜索匹配特定字符的軟件包選項(xiàng)功能說明-h用于顯示幫助信息-q安靜模式,用于省略安裝過程-y用于對安裝過程中遇到的所有問題自動(dòng)給出肯定答復(fù),代替用戶手動(dòng)輸入“yes”默認(rèn)使用兼容性DNF與YUM完全兼容,提供了與YUM兼容的命令行以及為擴(kuò)展提供的API。DNF工具簡介使用DNF需要管理員權(quán)限,所有命令需在管理員權(quán)限下執(zhí)行,可通過dnf--version查看版本。DNF是新一代軟件包管理工具,在Fedora18中首次出現(xiàn)。新一代工具權(quán)限要求Fedora22、CentOS8和RHEL8中默認(rèn)使用DNF作為軟件包管理工具,較新的openEuler20.09操作系統(tǒng)中也默認(rèn)使用DNF。性能提升DNF克服了YUM工具的一些“瓶頸”,提升了用戶體驗(yàn)、依賴分析、內(nèi)存占用、運(yùn)行幅度等多方面的性能,同時(shí)提升了管理軟件包組的性能。02openEuler系統(tǒng)源碼包安裝流程源碼包管理可從軟件官方網(wǎng)站下載源碼包。源碼包概述優(yōu)勢特點(diǎn)源碼包中封裝了源碼,對庫的依賴性更強(qiáng),需要先配置、編譯成可執(zhí)行的二進(jìn)制代碼后才能安裝。安裝優(yōu)先在openEuler系統(tǒng)中優(yōu)先使用DNF工具來安裝RPM軟件包,源碼包作為補(bǔ)充安裝方式。源碼包的優(yōu)點(diǎn)在于可以靈活地進(jìn)行配置、增加或刪改操作。內(nèi)容封裝使用場景下載途徑在openEuler系統(tǒng)中,若軟件沒有現(xiàn)成的RPM軟件包可用、現(xiàn)有的RPM軟件包版本過舊、程序缺失某些特性,或需優(yōu)化編譯參數(shù)以提高性能,則需使用源碼包進(jìn)行軟件安裝。14523使用./configure腳本命令,生成Makefile文件,該文件是編譯和安裝的重要配置文件。生成文件如下載Python源碼包并解壓,使用相應(yīng)命令進(jìn)行配置。下載校驗(yàn)下載軟件的源碼包,并校驗(yàn)其完整性,確保源碼包沒有損壞或被篡改。使用./configure--help可以查看有哪些配置項(xiàng),還可以使用./configure--prefix=指定目錄,將軟件安裝到指定目錄。解壓查看解壓源碼包,查看其中的README、INSTALL等文件,這些文件記錄了軟件的安裝方式及注意事項(xiàng)。查看配置示例操作軟件安裝配置使用make命令編譯源代碼,將源碼包自動(dòng)編譯成二進(jìn)制文件。編譯軟件示例演示清空配置如進(jìn)入Python源碼目錄,查看README文件,執(zhí)行./configure和make命令進(jìn)行編譯。使用makedistclean命令清空./configure命令生成的軟件配置文件。編譯操作軟件配置完成并生成Makefile文件后,才能進(jìn)行編譯。若配置運(yùn)行時(shí)出錯(cuò),沒有生成Makefile文件,則需清空配置文件重新配置。重新配置重新執(zhí)行./configure命令,生成Makefile文件。編譯前提25431安裝路徑若在配置階段指定了安裝目錄,則軟件會(huì)安裝到配置時(shí)指定的目錄中,默認(rèn)安裝路徑為/usr/local。如執(zhí)行makeinstall命令進(jìn)行Python軟件安裝。相應(yīng)的配置文件位于/usr/local/etc或/usr/local/***/etc。配置文件安裝軟件示例執(zhí)行軟件安裝配置、編譯完成后,使用makeinstall命令安裝軟件。若指定了安裝目錄,卸載軟件時(shí)只需將指定的安裝目錄全部刪除即可。安裝命令卸載方式第7章軟件管理openEuler系統(tǒng)軟件包管理介紹03RPM工具重要性及作用RPM軟件包管理通過官網(wǎng)獲取軟件包操作簡單,管理員只需在官網(wǎng)搜索所需軟件包,然后按照提示進(jìn)行下載即可。官網(wǎng)還提供了詳細(xì)的文檔和說明,幫助管理員更好地使用軟件包。安全可靠通過openEuler官網(wǎng)可獲取適配openEuler系統(tǒng)的RPM軟件包。官網(wǎng)提供了豐富的軟件資源,這些軟件包經(jīng)過嚴(yán)格測試,與openEuler系統(tǒng)具有良好的兼容性,能夠確保軟件在系統(tǒng)中正常運(yùn)行。版本更新官網(wǎng)會(huì)及時(shí)更新軟件包的版本,管理員可以獲取到最新版本的軟件包,以享受新的功能和修復(fù)安全漏洞。例如,及時(shí)更新系統(tǒng)中的安全軟件,提高系統(tǒng)的安全性。從官網(wǎng)獲取軟件包可以保證軟件的安全性和可靠性。官網(wǎng)會(huì)對軟件包進(jìn)行嚴(yán)格的審核和管理,避免用戶下載到惡意軟件或存在安全漏洞的軟件包。官網(wǎng)獲取途徑適配系統(tǒng)資源豐富使用便捷openEuler官網(wǎng)擁有大量的RPM軟件包,涵蓋了各種類型的軟件,如開發(fā)工具、服務(wù)器軟件、辦公軟件等。管理員可以根據(jù)系統(tǒng)的需求,從官網(wǎng)選擇合適的軟件包進(jìn)行下載和安裝。01wget命令格式為wget[選項(xiàng)][URL]。該命令用于從網(wǎng)絡(luò)上下載文件,是一種常用的文件下載工具。通過指定不同的選項(xiàng),管理員可以實(shí)現(xiàn)不同的下載需求。wget命令介紹命令格式查詢命令查詢RPM軟件包可以通過rpm命令查詢當(dāng)前本地已下載的RPM軟件包信息,當(dāng)軟件包安裝完成后,也可以通過rpm查詢軟件包命令來查看軟件包是否安裝成功。rpm查詢軟件包命令格式為rpm[選項(xiàng)][軟件包名稱]。例如,使用rpm-q命令可以查詢指定軟件包的信息。選項(xiàng)功能說明-q查詢指定軟件包的信息。-q為主要的查詢選項(xiàng),要配合下面其他選項(xiàng)一起使用-i顯示描述信息-a查詢當(dāng)前已安裝的軟件包-d顯示指定軟件包的所有文本文件列表-p查詢待安裝的軟件包信息,或查詢軟件安裝后對應(yīng)的軟件包名稱-f查詢指定的文件屬于哪個(gè)軟件包-g查詢指定的組中包含哪些軟件包-l顯示指定的已經(jīng)安裝的軟件包所包含的文件名及安裝目錄安裝命令通過RPM工具來安裝軟件包需要使用rpm安裝軟件包命令,命令格式為rpm[選項(xiàng)][軟件包名稱]。常用的選項(xiàng)有-i、-v、-h。例如,rpm-ivh命令可以安裝軟件包,并顯示安裝過程和進(jìn)度。安裝RPM軟件包0201升級需求升級命令升級RPM軟件包rpm升級軟件包命令通過-U選項(xiàng)實(shí)現(xiàn)升級軟件的功能,配合-vh選項(xiàng),可以詳細(xì)顯示升級過程。命令格式為rpm[選項(xiàng)][軟件包名稱]。例如,rpm-Uvh命令可以升級指定的軟件包,并顯示升級過程和進(jìn)度。通常軟件會(huì)定期進(jìn)行升級,用戶須提前下載更高版本的軟件包,之后通過rpm升級軟件包命令實(shí)現(xiàn)軟件的升級。軟件升級可以修復(fù)安全漏洞、增加新功能、提高性能等,確保軟件始終保持最佳狀態(tài)。卸載軟件包后,系統(tǒng)會(huì)釋放該軟件包所占用的磁盤空間和系統(tǒng)資源。這有助于提高系統(tǒng)的性能和可用性,特別是在磁盤空間有限的情況下。在執(zhí)行卸載命令時(shí),系統(tǒng)會(huì)提示確認(rèn)信息,詢問是否真的要卸載該軟件包。管理員需要仔細(xì)確認(rèn)后再進(jìn)行操作,避免誤卸載重要軟件。當(dāng)軟件不再被需要且其他應(yīng)用不依賴于該軟件時(shí),可以卸載該軟件包,釋放資源。在卸載軟件包之前,需要確保沒有其他應(yīng)用依賴于該軟件包,否則可能會(huì)導(dǎo)致其他應(yīng)用無法正常運(yùn)行。卸載確認(rèn)rpm卸載軟件包命令格式為rpm–e[軟件包名稱]。例如,使用rpm–esamba命令可以卸載samba軟件包。該命令會(huì)將指定的軟件包從系統(tǒng)中移除,并自動(dòng)處理相關(guān)的依賴關(guān)系。RPM支持同時(shí)卸載多個(gè)軟件??梢栽趓pm–e命令后面跟上多個(gè)軟件包名稱,用空格分隔。例如,rpm–esambasamba-common命令可以同時(shí)卸載samba和samba-common軟件包。卸載命令資源釋放卸載RPM軟件包多包卸載卸載條件依賴檢查版本匹配操作注意事項(xiàng)權(quán)限問題在升級軟件包時(shí),要確保升級的版本與系統(tǒng)和其他軟件兼容。不匹配的版本可能會(huì)導(dǎo)致軟件無法正常運(yùn)行或出現(xiàn)兼容性問題。在升級前,要仔細(xì)閱讀軟件的升級說明和兼容性要求。在進(jìn)行軟件包的安裝、升級和卸載操作時(shí),要注意檢查軟件包之間的依賴關(guān)系。如果依賴關(guān)系處理不當(dāng),可能會(huì)導(dǎo)致軟件無法正常運(yùn)行或系統(tǒng)出現(xiàn)故障。例如,在安裝一個(gè)軟件包時(shí),要確保其依賴的其他軟件包已經(jīng)安裝。在進(jìn)行RPM操作時(shí),建議記錄操作的過程和結(jié)果。這有助于后續(xù)的問題排查和系統(tǒng)維護(hù)。可以將操作命令和輸出信息保存到日志文件中,方便查看和分析。備份數(shù)據(jù)操作記錄執(zhí)行RPM命令需要足夠的權(quán)限,通常需要切換到root模式。如果權(quán)限不足,可能會(huì)導(dǎo)致命令執(zhí)行失敗。在進(jìn)行操作前,要確保自己具有足夠的權(quán)限。在進(jìn)行軟件包的升級或卸載操作前,建議備份相關(guān)的數(shù)據(jù)。以防操作過程中出現(xiàn)意外情況,導(dǎo)致數(shù)據(jù)丟失或損壞。例如,在升級數(shù)據(jù)庫軟件前,備份數(shù)據(jù)庫中的重要數(shù)據(jù)。04openEuler推薦工具及管理方法DNF軟件包管理0304010502社區(qū)支持DNF工具與openEuler系統(tǒng)具有良好的兼容性,能夠充分發(fā)揮系統(tǒng)的性能。它可以與系統(tǒng)的其他組件無縫集成,為用戶提供更穩(wěn)定、可靠的軟件包管理服務(wù)。推薦使用性能優(yōu)勢兼容性好DNF工具概述DNF工具擁有活躍的社區(qū)支持,用戶可以在社區(qū)中獲取最新的信息、技術(shù)支持和解決方案。這有助于用戶更好地使用DNF工具,解決遇到的問題。與傳統(tǒng)的軟件包管理工具相比,DNF工具在性能上有很大的提升。它采用了更先進(jìn)的算法和技術(shù),能夠更快地處理軟件包的依賴關(guān)系,提高軟件包的安裝和升級速度。推薦在openEuler系統(tǒng)中,使用DNF工具。雖然目前openEuler系統(tǒng)支持YUM工具,但實(shí)際yum命令后臺(tái)依然調(diào)用DNF工具。DNF工具具有更強(qiáng)大的功能和更好的性能,能夠提供更高效的軟件包管理服務(wù)。功能匯總DNF工具配置——修改DNF配置參數(shù)DNF的配置文件dnf.conf包含main和repository兩部分。main部分定義了DNF的全局設(shè)置。repository部分設(shè)置了DNF軟件源,同YUM工具一樣,DNF的軟件源可以有一個(gè)或多個(gè)。DNF軟件源可以配置在dnf.conf中,也可以通過在/etc/yum.repos.d目錄下存放.repo文件的方式來配置軟件源。(1)配置main部分。配置/etc/dnf/dnf.conf文件中的main部分,示例如下?!臼纠?-10】[root@openEuler~]#cat/etc/dnf/dnf.conf[main]gpgcheck=1installonly_limit=3clean_requirements_on_remove=Truebest=Trueskip_if_unavailable=FalseDNF工具配置——修改DNF配置參數(shù)參數(shù)說明cachedir緩存目錄,該目錄用于存儲(chǔ)RPM軟件包和數(shù)據(jù)庫文件keepcache可選值是1和0,表示是否要緩存已安裝成功的那些RPM軟件包及頭文件。默認(rèn)值為0,即不緩存debuglevel設(shè)置DNF生成的調(diào)試信息。取值范圍為[0,10],數(shù)值越大會(huì)輸出越詳細(xì)的調(diào)試信息。默認(rèn)值為2,設(shè)置為0表示不輸出調(diào)試信息clean_requirements_
on_remove刪除在執(zhí)行dnfremove命令期間不再使用的依賴項(xiàng)。如果軟件包是通過DNF安裝的,而不是通過顯式用戶請求安裝的,則只能通過clean_requirements_on_remove刪除軟件包,即它是作為依賴項(xiàng)引入的。默認(rèn)值為Truebest升級軟件包時(shí),總是嘗試安裝其最高版本,如果最高版本無法安裝,則提示無法安裝的原因并停止安裝。默認(rèn)值為Trueobsoletes可選值是1和0,設(shè)置是否允許更新陳舊的RPM軟件包。默認(rèn)值為1,表示允許更新gpgcheck可選值是1和0,設(shè)置是否需要進(jìn)行GPG(GNUPrivacyGuard,GNU隱私衛(wèi)士)校驗(yàn)。默認(rèn)值為1,表示需要進(jìn)行校驗(yàn)plugins可選值是1和0,表示啟用或禁用DNF插件。默認(rèn)值為1,表示啟用DNF插件installonly_limit設(shè)置可以同時(shí)安裝由“installonlypkgs”指令列出的軟件包數(shù)量。默認(rèn)值為3,不建議降低此值表7-8main部分的常用參數(shù)及說明DNF工具配置——修改DNF配置參數(shù)(2)配置repository部分。repository部分允許用戶定制openEuler軟件源(軟件倉庫),各源的名稱不可相同,否則會(huì)引起沖突??梢酝ㄟ^以下兩種方式配置軟件源。①通過配置/etc/dnf/dnf.conf文件中的repository部分來配置軟件源。下面是repository部分的最小配置示例。[repository]name=repository_nameDNF工具配置——修改DNF配置參數(shù)②通過配置/etc/yum.repos.d目錄下的.repo文件配置軟件源。openEuler提供了多種repo源供用戶在線使用,用戶須切換到root模式才有權(quán)限添加repo源。repo源中包含多個(gè)目錄,各目錄及說明如表7-10所示。目錄名稱說明ISO存放ISO鏡像OS存放基礎(chǔ)軟件包debuginfo存放調(diào)試包docker_img存放容器鏡像virtual_machine_img存放虛擬機(jī)鏡像everything存放全量軟件包extras存放擴(kuò)展軟件包source存放源碼軟件update存放升級軟件包EPOL存放openEuler擴(kuò)展包DNF工具配置——修改DNF配置參數(shù)(3)查看當(dāng)前配置??墒褂萌缦旅铒@示當(dāng)前的配置信息:dnfconfig-manager--dump要顯示指定軟件源的配置,首先需查詢軟件源的repoID。dnfrepolist然后執(zhí)行如下命令,其中repository為上一命令得到的repoID:dnfconfig-manager--dumprepository也可以使用一個(gè)全局正則表達(dá)式,顯示所有匹配的配置:dnfconfig-manager--dumpglob_expressionDNF工具配置——?jiǎng)?chuàng)建本地軟件源openEuler除了可以使用在線的軟件源,也可以在本地創(chuàng)建軟件源。創(chuàng)建步驟如下。(1)安裝createrepo軟件包。在root模式下執(zhí)行如下命令:[root@openEuler~]#dnfinstallcreaterepo(2)將需要的軟件包復(fù)制到一個(gè)目錄下,如/mnt/local_repo/。(3)創(chuàng)建軟件源,執(zhí)行如下命令:[root@openEuler~]#createrepo--database/mnt/local_repoDNF工具配置——添加、啟用和禁用軟件源(1)添加軟件源??梢酝ㄟ^配置/etc/dnf/dnf.conf文件中的repository部分,或者在/etc/yum.repos.d/目錄下添加.repo文件指明軟件源。在添加軟件源時(shí),建議使用添加.repo文件的方式??稍趓oot權(quán)限下執(zhí)行以下命令:[root@openEuler~]#dnfconfig-manager--add-reporepository_url執(zhí)行以上命令后,會(huì)在/etc/yum.repos.d/目錄下生成對應(yīng)的.repo文件。(2)啟用軟件源。在root權(quán)限下執(zhí)行以下命令可以啟用軟件源:[root@openEuler~]#dnfconfig-manager--set-enablerepository其中,repository為新增的.repo文件的repoID,可以通過dnfrepolist命令查詢。也可使用一個(gè)全局正則表達(dá)式,啟用所有匹配的軟件源,指令如下:[root@openEuler~]#dnfconfig-manager--set-enableglob_expression其中,glob_expression為對應(yīng)的正則表達(dá)式。使用正則表達(dá)式,可以同時(shí)匹配多個(gè)repoID。(3)禁用軟件源。在root權(quán)限下,可以使用如下命令禁用軟件源:[root@openEuler~]#dnfconfig-manager--set-disablerepository與啟用軟件源相同,也可以通過一個(gè)全局正則表達(dá)式來禁用所有匹配的軟件源:[root@openEuler~]#dnfconfig-manager--set-disableglob_expression34125下載軟件包安裝軟件包通過dnflistall命令可以列出系統(tǒng)中所有已經(jīng)安裝并可用的RPM軟件包信息。把a(bǔ)ll替換成指定的軟件包,則可列出指定的RPM軟件包信息。例如,dnflisthttpd可以列出httpd軟件包的信息。通過dnfinstallpackage_name命令可以安裝指定的RPM軟件包,并同時(shí)安裝其所依賴的未安裝的軟件。使用dnfinstallpackage_name1package_name2...--setopt=strict=0命令可以同時(shí)安裝多個(gè)軟件。例如,dnfinstallhttpd可以安裝httpd軟件包。搜索軟件包使用dnfinfopackage_name...命令可以顯示一個(gè)或者多個(gè)RPM軟件包信息。例如,dnfinfohttpd可以顯示httpd軟件包的詳細(xì)信息,包括名稱、版本、大小、依賴關(guān)系等??稍趓oot權(quán)限下使用dnfdownloadpackage_name命令下載軟件包。若需同時(shí)下載其所依賴的其他軟件包,則使用dnfdownload--resolvepackage_name命令。例如,dnfdownload--resolvehttpd可以同時(shí)下載httpd及其依賴的軟件包??梢允褂胐nfsearchterm命令搜索軟件包。例如,使用dnfsearchhttpd命令可以搜索與httpd相關(guān)的軟件包。該命令會(huì)列出所有匹配的軟件包信息,包括軟件包的名稱、描述等。使用DNF管理軟件包列出清單顯示信息24135列出清單使用DNF管理軟件包組使用DNF管理軟件包組可以使相關(guān)操作更高效。軟件包組是服務(wù)于共同目的的一組軟件包,通過管理軟件包組,可以一次性安裝或刪除多個(gè)相關(guān)的軟件包,減少了操作的復(fù)雜性。顯示信息安裝組使用dnfgroupssummary命令可以列出系統(tǒng)中所有已安裝的軟件包組、可用的軟件包組、可用的環(huán)境組的數(shù)量。使用dnfgrouplist命令可以列出所有軟件包組,以及軟件包組的ID。例如,dnfgrouplist可以列出系統(tǒng)中所有可用的軟件包組信息。使用dnfgroupinfoglob_expression...命令可以列出軟件包組中必須安裝的軟件包和可選的軟件包。例如,dnfgroupinfo"DevelopmentTools"可以顯示DevelopmentTools軟件包組的詳細(xì)信息。管理優(yōu)勢可在root模式下使用dnfgroupremovegroup_name或dnfgroupremovegroupid命令刪除軟件包組。例如,dnfgroupremove"DevelopmentTools"可以刪除DevelopmentTools軟件包組。刪除組用戶可以使用軟件包組名稱或軟件包相應(yīng)的ID,在root權(quán)限下使用dnfgroupinstallgroup_name或dnfgroupinstallgroupid命令安裝軟件包組。例如,dnfgroupinstall"DevelopmentTools"可以安裝DevelopmentTools軟件包組。升級軟件包管理員可以根據(jù)系統(tǒng)的實(shí)際情況制定更新策略。例如,定期檢查更新,及時(shí)更新安全相關(guān)的軟件包,避免因軟件漏洞導(dǎo)致系統(tǒng)受到攻擊。同時(shí),在更新前可以備份重要數(shù)據(jù),以防更新過程中出現(xiàn)意外情況。在root權(quán)限下執(zhí)行dnfupdate命令,可更新所有的包和它們的依賴。該命令會(huì)自動(dòng)檢查系統(tǒng)中所有軟件包的版本,并將需要更新的軟件包進(jìn)行升級,確保系統(tǒng)中的軟件始終保持最新狀態(tài)。更新所有包檢查并更新檢查更新更新完成后,建議驗(yàn)證更新的效果??梢詸z查軟件的功能是否正常,系統(tǒng)是否穩(wěn)定等。如果發(fā)現(xiàn)問題,可以及時(shí)回滾到更新前的狀態(tài),確保系統(tǒng)的正常運(yùn)行。更新策略可在root權(quán)限下執(zhí)行dnfupdatepackage_name命令升級單個(gè)軟件包。若需要升級軟件包組,可執(zhí)行dnfgroupupdategroup_name命令。例如,dnfupdateanaconda-gui.aarch64可以升級anaconda-gui軟件包。使用dnfcheck-update命令可以顯示當(dāng)前系統(tǒng)中可用的需要更新的軟件包。例如,執(zhí)行該命令后會(huì)列出所有需要更新的軟件包名稱、版本等信息,幫助管理員及時(shí)發(fā)現(xiàn)系統(tǒng)中需要更新的軟件。更新驗(yàn)證系統(tǒng)啟動(dòng)與進(jìn)程管理深入了解openEuler系統(tǒng)啟動(dòng)與進(jìn)程管理01理解系統(tǒng)啟動(dòng)的重要性與原理系統(tǒng)啟動(dòng)管理在ARM架構(gòu)中,UEFI的執(zhí)行過程同樣是先初始化硬件設(shè)備,引導(dǎo)EFI系統(tǒng)運(yùn)行,然后找到GPT中的BootLoader并啟動(dòng)。BIOS的執(zhí)行過程是先初始化硬件設(shè)備,獲取主機(jī)的各項(xiàng)硬件配置,然后將MBR中的BootLoader讀取到內(nèi)存中,并將控制權(quán)交給BootLoader。BIOS一般會(huì)被寫入主板ROM中,主要功能是初始化硬件,提供硬件的軟件抽象。在硬件啟動(dòng)這一階段,需要達(dá)成的目的是借助BIOS/UEFI將硬件的控制權(quán)轉(zhuǎn)交給BootLoader,為后續(xù)的系統(tǒng)啟動(dòng)做好準(zhǔn)備。啟動(dòng)目的硬件啟動(dòng)的目的是借助固定的程序,將硬件的控制權(quán)轉(zhuǎn)交給BootLoader。因?yàn)椴僮飨到y(tǒng)由硬件上的不同文件組成,需要一個(gè)固定程序?qū)硬煌僮飨到y(tǒng)并啟動(dòng)主引導(dǎo)程序。BIOS執(zhí)行UEFI執(zhí)行硬件啟動(dòng)根據(jù)硬件的差別,硬件啟動(dòng)一般主要有兩種方式,即BIOS和UEFI。在x86架構(gòu)中,以BIOS為主;在ARM架構(gòu)中,以UEFI為主。狹義的BIOS指BIOS本身,廣義的BIOS包括UEFI,UEFI的生態(tài)更加開放??刂茩?quán)轉(zhuǎn)交啟動(dòng)方式GRUB2相比GRUBLegacy具有更多功能,如加密操作系統(tǒng)、恢復(fù)系統(tǒng)密碼、定制開機(jī)畫面等,為用戶提供了更多的選擇和便利。功能增強(qiáng)在這個(gè)階段中,BootLoader會(huì)將控制權(quán)轉(zhuǎn)交給內(nèi)核,啟動(dòng)內(nèi)核之后,接下來的任務(wù)將交由內(nèi)核完成??刂茩?quán)轉(zhuǎn)交BootLoader是一類程序的總稱,如LILO、GRUBLegacy等,一般也稱為內(nèi)核加載程序。GRUB2是GRUB的升級版,能實(shí)現(xiàn)選擇不同的操作系統(tǒng)啟動(dòng)項(xiàng)、動(dòng)態(tài)改變引導(dǎo)參數(shù)等更多功能。由于GRUBLegacy啟動(dòng)加載器當(dāng)前已經(jīng)難以維護(hù),所以GRUB重寫了代碼,并在其基礎(chǔ)上實(shí)現(xiàn)了模塊化,增強(qiáng)了移植性。GRUB升級在openEuler操作系統(tǒng)啟動(dòng)過程中,BootLoader引導(dǎo)階段的任務(wù)是加載Linux內(nèi)核以及可選的初始RAM磁盤。它可以選擇磁盤上多個(gè)操作系統(tǒng)內(nèi)核中的一個(gè)進(jìn)行啟動(dòng),或從系統(tǒng)分區(qū)中選擇特殊的內(nèi)核配置。引導(dǎo)任務(wù)BootLoader引導(dǎo)程序總稱階段進(jìn)入首個(gè)進(jìn)程systemd具有啟動(dòng)速度快、按需啟動(dòng)服務(wù)、管理掛載點(diǎn)等多種優(yōu)勢,能夠更好地實(shí)現(xiàn)系統(tǒng)的初始化和服務(wù)管理。內(nèi)核引導(dǎo)由systemd或init完成相關(guān)的啟動(dòng)過程,包括啟動(dòng)服務(wù)、啟動(dòng)Shell等。systemd在系統(tǒng)初始化方面具有更多的優(yōu)勢和功能。隨著技術(shù)的發(fā)展,systemd逐漸替代init成為主流的系統(tǒng)初始化工具,openEuler也順應(yīng)了這一趨勢,采用systemd來提高系統(tǒng)的性能和管理效率。systemd優(yōu)勢在完成內(nèi)核加載程序啟動(dòng)之后,就進(jìn)入內(nèi)核引導(dǎo)階段。此時(shí)操作系統(tǒng)會(huì)將控制權(quán)由內(nèi)核轉(zhuǎn)交給運(yùn)行中的進(jìn)程systemd或init。openEuler操作系統(tǒng)啟動(dòng)過程中的第一個(gè)進(jìn)程是PID為1的進(jìn)程,它就是systemd或init。當(dāng)前大部分的Linux發(fā)行版都采用systemd來代替init,openEuler也采用systemd來實(shí)現(xiàn)系統(tǒng)初始化功能。替代init啟動(dòng)過程14523啟動(dòng)某個(gè)target的時(shí)候,systemd就會(huì)啟動(dòng)里面所有的unit。用戶可以通過修改unit文件自定義unit,并將多個(gè)unit設(shè)為一個(gè)target,按計(jì)劃啟動(dòng)。啟動(dòng)方式systemd在系統(tǒng)初始化過程中起著關(guān)鍵的作用,它能夠有效地管理和協(xié)調(diào)各個(gè)服務(wù)的啟動(dòng),確保系統(tǒng)的正常運(yùn)行。初始化主體系統(tǒng)初始化階段由systemd完成。systemd啟動(dòng)之后,會(huì)根據(jù)預(yù)先設(shè)定的target運(yùn)行相應(yīng)的服務(wù)。系統(tǒng)初始化用戶可以自定義啟動(dòng)單元或者修改啟動(dòng)順序,以滿足不同的使用需求。例如,用戶可以根據(jù)自己的業(yè)務(wù)需求,調(diào)整某些服務(wù)的啟動(dòng)順序。服務(wù)內(nèi)容這些服務(wù)包括按/etc/fstab掛載目錄、設(shè)定定時(shí)器、啟動(dòng)日志等。target是一個(gè)unit組,包含許多相關(guān)的unit。自定義啟動(dòng)systemd作用啟動(dòng)終端為用戶提供了與系統(tǒng)進(jìn)行交互的界面,用戶可以在終端中輸入命令,執(zhí)行各種操作,實(shí)現(xiàn)對系統(tǒng)的管理和使用。啟動(dòng)終端啟動(dòng)完成終端切換至此,通過以上5個(gè)階段,控制權(quán)從硬件一路轉(zhuǎn)交至軟件,最終傳遞到用戶手中,openEuler操作系統(tǒng)啟動(dòng)完成。在控制臺(tái)上,模擬這6個(gè)tty字符終端,分別對應(yīng)/dev/tty1/~6,可以按“Alt+Fn”(Fn表示F1~F6)組合鍵來進(jìn)行切換。/dev/tty0為桌面終端,也就是用戶目前正在使用的終端。用戶交互終端指的是用戶交互界面或者接口。在系統(tǒng)完成初始化之后,首先會(huì)執(zhí)行/sbin/mingetty開啟6個(gè)tty字符終端。驗(yàn)證登錄操作系統(tǒng)會(huì)比對/etc/nologin、/etc/passwd、/etc/shadow等文件進(jìn)行驗(yàn)證登錄。在登錄成功后,屏幕將輸出相關(guān)信息,并加載用戶目錄下設(shè)置的環(huán)境變量,等待用戶輸入。終端定義02了解systemd的特性與配置系統(tǒng)初始化配置systemd支持按需啟動(dòng),系統(tǒng)運(yùn)行狀態(tài)動(dòng)態(tài)變化,用戶難以準(zhǔn)確知道系統(tǒng)當(dāng)前運(yùn)行的服務(wù)。systemd快照功能提供了將當(dāng)前系統(tǒng)運(yùn)行狀態(tài)保存并恢復(fù)的保障。掛載點(diǎn)管理systemd具有比UpStart強(qiáng)的并行啟動(dòng)能力,采用了socket和D-Bus激活等技術(shù)啟動(dòng)服務(wù),啟動(dòng)速度更快。它的宗旨是盡可能減少不必要的進(jìn)程,并且將更多的進(jìn)程并行啟動(dòng)。事務(wù)性依賴管理系統(tǒng)啟動(dòng)過程中各工作可能存在依賴關(guān)系,systemd維護(hù)著“事務(wù)一致性”的概念,確保所有相關(guān)的服務(wù)都可以正常啟動(dòng)而不會(huì)出現(xiàn)互相依賴、死鎖的情況。傳統(tǒng)的Linux系統(tǒng)中,用戶通過/etc/fstab文件維護(hù)固定的文件系統(tǒng)掛載點(diǎn)。而systemd內(nèi)建了自動(dòng)掛載服務(wù),實(shí)現(xiàn)了動(dòng)態(tài)掛載,同時(shí)兼容/etc/fstab文件,用戶無須另外安裝autofs服務(wù)。啟動(dòng)速度快按需啟動(dòng)服務(wù)系統(tǒng)快照與恢復(fù)systemd具有按需啟動(dòng)的能力,只有在某個(gè)服務(wù)被真正請求的時(shí)候才啟動(dòng)它。當(dāng)該服務(wù)結(jié)束時(shí),systemd可以關(guān)閉它,等待下次需要時(shí)再次啟動(dòng),避免了服務(wù)啟動(dòng)時(shí)間過長以及系統(tǒng)資源的浪費(fèi)。systemd特性unit查看路徑systemd具有和SysV以及LSB初始化腳本兼容的特性。系統(tǒng)中已經(jīng)存在的服務(wù)和進(jìn)程無須修改,降低了系統(tǒng)向systemd遷移的成本,使得systemd替換現(xiàn)有初始化系統(tǒng)成為可能。當(dāng)存在同名文件時(shí),優(yōu)先采用優(yōu)先級較高的配置文件,確保系統(tǒng)使用正確的配置。systemd其他特性systemd開啟和監(jiān)督操作系統(tǒng)是基于unit的,unit的名稱由一個(gè)與配置文件對應(yīng)的名字和類型組成。unit有多種類型,如Serviceunit、Targetunit等。兼容性操作單位路徑優(yōu)先級systemd采用cgroup特性跟蹤和管理進(jìn)程的生命周期。cgroup主要用來實(shí)現(xiàn)系統(tǒng)資源配額管理,提供了類似文件系統(tǒng)的接口,使用方便。當(dāng)進(jìn)程創(chuàng)建子進(jìn)程時(shí),子進(jìn)程會(huì)繼承父進(jìn)程的cgroup。所有可用的systemdunit可以通過3條路徑查看,分別是/usr/lib/systemd/system/、/run/systemd/system/、/etc/systemd/system/,這3條路徑的優(yōu)先級自上而下遞減。進(jìn)程管理unit類型介紹systemd開啟和監(jiān)督操作系統(tǒng)是基于unit的,也就是說,systemd操作的基本單位是unit。unit的名稱由一個(gè)與配置文件對應(yīng)的名字和類型組成。例如name.serviceunit有一個(gè)具有相同名字的配置文件,是守護(hù)進(jìn)程name的一個(gè)封裝單元。unit查看與優(yōu)先級所有可用的systemdunit可以通過以下3條路徑查看:
在/usr/lib/systemd/system/目錄下,可查看軟件包安裝時(shí)產(chǎn)生的systemdunit;
在/run/systemd/system/目錄下,可查看運(yùn)行時(shí)創(chuàng)建的systemdunit;
在/etc/systemd/system/目錄下,可查看由root用戶創(chuàng)建和管理的systemdunit。這3條路徑的優(yōu)先級自上而下遞減,即存在同名文件時(shí),優(yōu)先采用優(yōu)先級較高的配置文件。openEuler運(yùn)行級別運(yùn)行級別定義運(yùn)行級別定義了服務(wù)器啟動(dòng)后的狀態(tài)。在openEuler操作系統(tǒng)中,systemd用目標(biāo)替代運(yùn)行級別的概念,提供了更大的靈活性。常規(guī)運(yùn)行級別目標(biāo)描述0runlevel0.target、poweroff.target關(guān)閉系統(tǒng)1/s/singlerunlevel1.target、rescue.target單用戶模式2、4runlevel2.target、runlevel4.target、multi-user.target用戶定義/域特定運(yùn)行級別。默認(rèn)等同于33runlevel3.target、multi-user.target多用戶,非圖形化環(huán)境。用戶可以通過多個(gè)控制臺(tái)或網(wǎng)絡(luò)登錄5runlevel5.target、graphical.target多用戶,圖形化環(huán)境。通常為所有運(yùn)行級別為3的服務(wù)外加圖形化登錄6runlevel6.target、reboot.target重啟系統(tǒng)rescuerescure.target救援模式emergencyemergency.target緊急模式(緊急Shell)救援與緊急模式在救援模式下,將掛載所有本地文件系統(tǒng),但不會(huì)啟動(dòng)正常服務(wù),比如網(wǎng)絡(luò)等,只會(huì)啟動(dòng)很少的服務(wù)。救援模式多用于系統(tǒng)無法正常啟動(dòng)的情況,此外,可以在救援模式下執(zhí)行一些重要的救援操作,例如重置root密碼。如需要改變當(dāng)前系統(tǒng)為救援模式,可在root權(quán)限下執(zhí)行如下命令:[root@openEuler~]#systemctlrescue命令執(zhí)行后,窗口會(huì)有如下輸出信息:Youareinrescuemode.Afterloggingin,type"journalctl-xb"toviewsystemlogs,"systemctlreboot"toreboot,"systemctldefault"or"exit"tobootintodefaultmode.Giverootpasswordformaintenance(orpressControl-Dtocontinue):假如此時(shí)想要從救援模式切換到正常模式,需要重啟操作系統(tǒng)。與救援模式相比,緊急模式下不啟動(dòng)任何服務(wù),不會(huì)掛載任何文件系統(tǒng),用戶只會(huì)打開一個(gè)原始的Shell。因此緊急模式多適用于調(diào)試目的和修復(fù)系統(tǒng)。如需要改變當(dāng)前系統(tǒng)為緊急模式,可在root權(quán)限下執(zhí)行如下命令:[root@openEuler~]#systemctlemergency命令執(zhí)行后,窗口會(huì)有如下輸出信息:Youareinemergencymode.Afterloggingin,type"journalctl-xb"toviewsystemlogs,"systemctlreboot"toreboot,"systemctldefault"or"exit"tobootintodefaultmode.Giverootpasswordformaintenance(orpressControl-Dtocontinue):假如此時(shí)想要從緊急模式切換到正常模式,同樣需要重啟操作系統(tǒng)。在openEuler中,systemd提供systemctl命令來運(yùn)行、關(guān)閉、重啟、顯示、啟用、禁用系統(tǒng)服務(wù)。與sysvinit命令功能類似,當(dāng)前版本依然兼容service和chkconfig命令,但建議統(tǒng)一用systemctl進(jìn)行系統(tǒng)服務(wù)管理。systemctl命令openEuler服務(wù)控制target是一組unit的集合,所以當(dāng)用戶想在systemd中自定義一些服務(wù)模塊時(shí),只需在相應(yīng)的target目錄下寫入unit配置文件即可。每個(gè)unit對應(yīng)一個(gè).service文件(即服務(wù)),這些服務(wù)分為兩類:系統(tǒng)服務(wù)和用戶服務(wù)。系統(tǒng)服務(wù)是用戶登錄前運(yùn)行的程序,而用戶服務(wù)是用戶登錄后運(yùn)行的程序。對于每個(gè).service文件,需要配置3個(gè)字段:Unit代表啟動(dòng)順序與依賴關(guān)系;Service代表啟動(dòng)行為,是必選字段;Install代表服務(wù)所在的target。openEuler服務(wù)控制以user.service為例,使自定義服務(wù)模塊生效并設(shè)置自啟動(dòng),有以下兩種方法。
直接使用systemctl命令:[root@openEuler~]#systemctlenableusr.service
手動(dòng)創(chuàng)建軟連接:[root@openEuler~]#ln-s/usr/lib/systemd/system/user.service/usr/lib/systemd/
system/local-fs.target.wants/usr.service執(zhí)行以下命令重新加載,使配置生效。[root@openEuler~]#systemctldaemon-reloadopenEuler服務(wù)控制以user.service為例,使自定義服務(wù)模塊生效并設(shè)置自啟動(dòng),有以下兩種方法。
直接使用systemctl命令:[root@openEuler~]#systemctlenableusr.service
手動(dòng)創(chuàng)建軟連接:[root@openEuler~]#ln-s/usr/lib/systemd/system/user.service/usr/lib/systemd/
system/local-fs.target.wants/usr.service執(zhí)行以下命令重新加載,使配置生效。[root@openEuler~]#systemctldaemon-reloadopenEuler服務(wù)控制【示例8-5】#查詢服務(wù)是否被激活[root@openEuler~]#systemctlis-activename.serviceinactive選項(xiàng)is-active的返回結(jié)果及說明如表8-5所示。openEuler服務(wù)控制【示例8-6】#查詢服務(wù)是否開機(jī)啟動(dòng)[root@openEuler~]#systemctlis-enabledfirewalld.servicedisabled選項(xiàng)is-enabled的返回結(jié)果及說明如表所示。返回結(jié)果說明enabled服務(wù)已經(jīng)通過/etc/systemd/system/目錄下的Alias=別名、.wants/或.requires/符號鏈接被永久啟用enabled-runtime已經(jīng)通過/run/systemd/system/目錄下的Alias=別名、.wants/或.requires/符號鏈接被臨時(shí)啟用linked雖然單元文件本身不在標(biāo)準(zhǔn)單元目錄中,但是指向此單元文件的一個(gè)或多個(gè)符號鏈接已經(jīng)存在于/etc/systemd/system/永久目錄中l(wèi)inked-runtime雖然單元文件本身不在標(biāo)準(zhǔn)單元目錄中,但是指向此單元文件的一個(gè)或多個(gè)符號鏈接已經(jīng)存在于/run/systemd/system/臨時(shí)目錄中masked已經(jīng)被/etc/systemd/system/目錄永久屏蔽(符號鏈接指向/dev/null文件),因此start操作會(huì)失敗masked-runtime已經(jīng)被/run/systemd/systemd/目錄臨時(shí)屏蔽(符號鏈接指向/dev/null文件),因此start操作會(huì)失敗static服務(wù)尚未被啟用,并且單元文件的Install字段中沒有可用于enable命令的選項(xiàng)indirect服務(wù)尚未被啟用,但是單元文件的Install字段中Also選項(xiàng)的值列表非空(也就是列表中的某些單元可能已被啟用),或者該服務(wù)擁有其他別名符號鏈接disabled服務(wù)尚未被啟用,但是單元文件的Install字段中存在可以使enable命令有效的選項(xiàng)generated單元文件是被單元生成器動(dòng)態(tài)生成的。被生成的單元文件可能并未被直接啟用,而是被單元生成器隱式啟用transient單元文件是被運(yùn)行時(shí)API動(dòng)態(tài)臨時(shí)生成的。臨時(shí)單元文件可能并未被啟用bad單元文件不正確或者出現(xiàn)其他錯(cuò)誤openEuler服務(wù)控制【示例8-7】#列出Nginx的所有依賴[root@openEuler~]#systemctllist-dependenciesnginx.service#列出Nginx的所有依賴,包括依賴的target內(nèi)容[root@openEuler~]#systemctllist-dependencies--allnginx.servicesystemd還支持通過systemctl命令對系統(tǒng)進(jìn)行關(guān)機(jī)、重啟、休眠等一系列操作,同時(shí)也能兼容部分Linux常用管理命令。systemctl系統(tǒng)管理命令及功能如表8-7所示。系統(tǒng)啟動(dòng)與進(jìn)程管理openEuler進(jìn)程管理全面解析第8章02多任務(wù)系統(tǒng)的進(jìn)程調(diào)配與監(jiān)控進(jìn)程管理進(jìn)程的概念為了讓程序源碼從人類易于理解的高級語言轉(zhuǎn)換成計(jì)算機(jī)能夠執(zhí)行的機(jī)器語言,所有程序都需要經(jīng)過編譯、鏈接、加載和執(zhí)行4個(gè)階段。但在同一段時(shí)間內(nèi),機(jī)器通常并不只執(zhí)行一個(gè)程序,而是并發(fā)地執(zhí)行多個(gè)程序。因此,為了對并發(fā)執(zhí)行的程序加以描述和控制,操作系統(tǒng)引入了“進(jìn)程”這一抽象概念。進(jìn)程是計(jì)算機(jī)中已運(yùn)行程序的實(shí)體,是程序的具體實(shí)現(xiàn)。如圖所示,每個(gè)進(jìn)程在被創(chuàng)建的時(shí)候,都會(huì)被分配一段內(nèi)存空間,即系統(tǒng)給進(jìn)程分配一定的邏輯地址空間,包含棧、堆、bss段、data段和代碼段。每個(gè)進(jìn)程都有一個(gè)唯一的PID,用于系統(tǒng)內(nèi)核追蹤相應(yīng)進(jìn)程。操作系統(tǒng)的第一個(gè)進(jìn)程是systemd,其他所有進(jìn)程都是其后代,它的PID為1。每個(gè)進(jìn)程都有自己的生命周期,包括創(chuàng)建、執(zhí)行、終止和刪除等階段。在系統(tǒng)運(yùn)行過程中,這些階段將被反復(fù)執(zhí)行成千上萬次。進(jìn)程的概念任何進(jìn)程都可以通過復(fù)制自己地址空間的方式創(chuàng)建子進(jìn)程,子進(jìn)程中記錄著父進(jìn)程的PID(PPID)。當(dāng)一個(gè)進(jìn)程創(chuàng)建一個(gè)新進(jìn)程時(shí),創(chuàng)建進(jìn)程的進(jìn)程(父進(jìn)程)使用名為fork()的系統(tǒng)調(diào)用。當(dāng)fork()被調(diào)用的時(shí)候,它會(huì)為新創(chuàng)建的進(jìn)程(子進(jìn)程)獲得一個(gè)進(jìn)程描述符,并且設(shè)置新的PID,復(fù)制父進(jìn)程的進(jìn)程描述符給子進(jìn)程。系統(tǒng)使用exec()調(diào)用把新程序復(fù)制到子進(jìn)程的地址空間。由于共享同樣的地址空間,寫入新進(jìn)程的數(shù)據(jù)會(huì)引發(fā)頁錯(cuò)誤的異常。因此,此時(shí)內(nèi)核會(huì)給子進(jìn)程分配新的物理頁。當(dāng)程序執(zhí)行完成時(shí),使用exit()系統(tǒng)調(diào)用來終止子進(jìn)程。exit()會(huì)釋放進(jìn)程的大部分?jǐn)?shù)據(jù)結(jié)構(gòu),并且把相應(yīng)終止消息通知給父進(jìn)程。此時(shí),子進(jìn)程被稱為僵尸進(jìn)程(ZombieProcess)。進(jìn)程的概念直到父進(jìn)程通過wait()系統(tǒng)調(diào)用知悉子進(jìn)程終止之前,子進(jìn)程都不會(huì)被完全清除。只有父進(jìn)程知悉子進(jìn)程終止時(shí),它才會(huì)清除子進(jìn)程的所有數(shù)據(jù)結(jié)構(gòu)和進(jìn)程描述符。進(jìn)程在其生命周期中會(huì)在各個(gè)狀態(tài)中切換。
運(yùn)行態(tài)(用戶運(yùn)行態(tài)和內(nèi)核運(yùn)行態(tài))和就緒態(tài)合并為運(yùn)行狀態(tài),表示進(jìn)程正在運(yùn)行或準(zhǔn)備運(yùn)行。openEuler操作系統(tǒng)中使用TASK_RUNNING宏表示此狀態(tài)。
可中斷睡眠態(tài)(淺度睡眠):進(jìn)程正在睡眠(被阻塞),等待資源到來時(shí)被喚醒,也可以通過其他進(jìn)程信號或時(shí)鐘中斷來喚醒,進(jìn)入運(yùn)行隊(duì)列。openEuler
操作系統(tǒng)使用TASK_INTERRUPTIBLE宏表示此狀態(tài)。
不可中斷睡眠態(tài)(深度睡眠):它和可中斷睡眠態(tài)基本類似,但有一點(diǎn)不同,就是不可被其他進(jìn)程信號或時(shí)鐘中斷喚醒。openEule操作系統(tǒng)使用TASK_UNINTERRUPTIBLE宏表示此狀態(tài)。
暫停狀態(tài):進(jìn)程暫停執(zhí)行并接受某種處理,如正在接受調(diào)試的進(jìn)程處于此狀態(tài)。openEuler操作系統(tǒng)使用TASK_STOPPED宏表示此狀態(tài)。
僵停狀態(tài):進(jìn)程已經(jīng)結(jié)束但未釋放。openEuler操作系統(tǒng)使用TASK_ZOMBIE宏表示此狀態(tài)。取值范圍操作系統(tǒng)基于優(yōu)先級分配CPU資源。優(yōu)先級高的進(jìn)程有優(yōu)先執(zhí)行的權(quán)利,操作系統(tǒng)會(huì)根據(jù)進(jìn)程的優(yōu)先級來決定CPU時(shí)間的分配。例如,對于實(shí)時(shí)性要求較高的進(jìn)程,會(huì)給予較高的優(yōu)先級,確保其能夠及時(shí)得到執(zhí)行。優(yōu)先級概念PRI與NIPRI表示執(zhí)行先后順序,NI影響優(yōu)先級。PRI是進(jìn)程的優(yōu)先級數(shù)值,其值越小,進(jìn)程的優(yōu)先級越高;NI是nice值,可理解為“謙讓度”,通過調(diào)整NI值可以影響進(jìn)程的優(yōu)先級。例如,當(dāng)NI值為負(fù)值時(shí),進(jìn)程的優(yōu)先級會(huì)變高進(jìn)程優(yōu)先級使用nice和renice命令調(diào)整。nice和renice命令可以調(diào)整進(jìn)程的nice值,從而改變進(jìn)程的優(yōu)先級。nice命令用于在啟動(dòng)進(jìn)程時(shí)設(shè)置其優(yōu)先級,renice命令可以對已經(jīng)運(yùn)行的進(jìn)程的優(yōu)先級進(jìn)行調(diào)整。例如,使用nice-n-18vi可以將Vi編輯器的運(yùn)行優(yōu)先級設(shè)置為-18。優(yōu)先級調(diào)整nice和renice取值為-20~19。nice和renice命令的取值范圍是-20~19,在這個(gè)范圍內(nèi)調(diào)整nice值可以有效地改變進(jìn)程的優(yōu)先級。例如,將nice值設(shè)置為-20可以使進(jìn)程具有最高的優(yōu)先級。查看用戶進(jìn)程who命令主要用于查看當(dāng)前系統(tǒng)中的用戶進(jìn)程情況。如果用戶需要確認(rèn)其他用戶是否發(fā)起進(jìn)程,或者root用戶希望監(jiān)視每個(gè)登錄的用戶此時(shí)此刻的所作所為,就可以使用who命令。who命令使用起來非常方便,可以比較準(zhǔn)確地反映用戶的情況,因此應(yīng)用非常廣泛?!臼纠?-11】#查看當(dāng)前系統(tǒng)中的用戶情況[root@openEuler~]#whorootpts/02022-07-3119:54()查看進(jìn)程ps命令是最基本且非常強(qiáng)大的進(jìn)程查看命令之一。使用該命令可以確定有哪些進(jìn)程正在運(yùn)行、運(yùn)行的狀態(tài)、進(jìn)程是否結(jié)束、有沒有僵尸進(jìn)程、哪些進(jìn)程占用了過多的資源等信息。大部分進(jìn)程信息都是可以通過執(zhí)行該命令得到的。此外,ps命令還可以用于監(jiān)控后臺(tái)進(jìn)程的工作情況?!臼纠?-12】#顯示系統(tǒng)終端上的所有進(jìn)程[root@openEuler~]#ps-aPIDTTYTIMECMD12175pts/600:00:00bash24526pts/000:00:00vsftpd29478pts/500:00:00ps32461pts/01-01:58:33sh中斷進(jìn)程命令格式:kill[-s[信號]|-p][-a][進(jìn)程號]...kill-l[信號]kill命令是通過向進(jìn)程發(fā)送指定的信號來結(jié)束進(jìn)程的。如果沒有指定發(fā)送的信號,那么默認(rèn)為TERM信號。TERM信號將終止所有不能捕獲該信號的進(jìn)程。至于那些可以捕獲該信號的進(jìn)程可能就需要使用kill-9命令才能終止。通常執(zhí)行kill命令前,需要通過ps等命令確定需要中斷的進(jìn)程號?!臼纠?-13】#顯示系統(tǒng)終端上的所有進(jìn)程,確定要中斷的進(jìn)程號[root@openEuler~]#ps-aPIDTTYTIMECMD12175pts/600:00:00bash24526pts/000:00:00vsftpd29478pts/500:00:00ps32461pts/01-01:58:33sh[root@openEuler~]#kill-932461調(diào)度進(jìn)程(1)定時(shí)執(zhí)行程序。用戶使用at命令可以在指定時(shí)刻執(zhí)行指定的命令序列,該命令至少需要指定一個(gè)命令和一個(gè)執(zhí)行時(shí)間。at命令可以只指定時(shí)間,也可以一起指定時(shí)間和日期。命令格式:at[-V][-q[隊(duì)列]][-f[文件名]][-mldbv][時(shí)間]at-c[作業(yè)][作業(yè)]...at命令允許使用一套相當(dāng)復(fù)雜的時(shí)間指定方法,如下所示。接受在當(dāng)天的hh:mm(小時(shí):分鐘)式的時(shí)間指定。如果該時(shí)間已經(jīng)過去,那么就延至第二天執(zhí)行。使用midnight(深夜)、noon(中午)等比較模糊的詞語來指定時(shí)間。采用12小時(shí)計(jì)時(shí)制,即在時(shí)間后面加上am(上午)或者pm(下午)來說明是上午還是下午。指定命令執(zhí)行的具體日期,指定格式為monthday(月日)或者mm/dd/yy(月/日/年)或者dd.mm.yy(日.月.年)。指定的日期必須跟在指定時(shí)間的后面。調(diào)度進(jìn)程(2)周期性運(yùn)行任務(wù)。at命令會(huì)在某一時(shí)間執(zhí)行一定的任務(wù),但是它只能執(zhí)行一次。也就是說,當(dāng)指定了運(yùn)行命令后,系統(tǒng)在指定時(shí)間執(zhí)行任務(wù)了后,命令就不會(huì)再執(zhí)行了。但是在很多情況下需要周期性重復(fù)執(zhí)行一些命令,這時(shí)候就需要使用crontab命令調(diào)用后臺(tái)cron進(jìn)程來實(shí)現(xiàn)。crontab命令用于安裝、刪除或者顯示用于驅(qū)動(dòng)cron進(jìn)程的表格。用戶把需要執(zhí)行的命令序列放到crontab文件中以獲得執(zhí)行,每個(gè)用戶都可以擁有自己的crontab文件。調(diào)度進(jìn)程cron服務(wù)的內(nèi)容由crontab文件指定,因此需要在crontab文件中輸入需要執(zhí)行的命令和時(shí)間。該文件中每行都包括6個(gè)域,其中前5個(gè)域是指定命令被執(zhí)行的時(shí)間,最后一個(gè)域是要被執(zhí)行的命令。每個(gè)域之間使用空格或者制表符分隔,格式如下:minutehourday-of-monthmonth-of-yearday-of-weekcommands這些域都不能為空,必須指定值。除了指定數(shù)字,還可以指定幾個(gè)特殊的符號,即“*”“/”“-”“,”其中,“*”代表取值范圍內(nèi)的所有數(shù)字,“/”代表每的意思,“*/5”表示每5個(gè)單位,“-”代表從某個(gè)數(shù)字到某個(gè)數(shù)字,“,”用于分開幾個(gè)離散數(shù)字。對于要執(zhí)行的命令,調(diào)用的時(shí)候需要寫出命令的完整路徑。調(diào)度進(jìn)程(3)掛起/恢復(fù)進(jìn)程。將“&”放在命令的最后,便可把相應(yīng)命令放到后臺(tái)執(zhí)行。作業(yè)控制允許進(jìn)程掛起并可以在需要時(shí)恢復(fù)進(jìn)程的運(yùn)行,被掛起的進(jìn)程恢復(fù)后將從中止處開始繼續(xù)運(yùn)行。只要在鍵盤上按“Ctrl+Z”組合鍵,即可掛起當(dāng)前的前臺(tái)作業(yè)或當(dāng)前執(zhí)行的命令。使用jobs命令可以顯示Shell的作業(yè)清單,包括具體的作業(yè)、作業(yè)號以及作業(yè)當(dāng)前所處的狀態(tài)?;謴?fù)進(jìn)程執(zhí)行時(shí),有兩種選擇:用fg命令將掛起的作業(yè)放回到前臺(tái)執(zhí)行;用bg命令將掛起的作業(yè)放到后臺(tái)執(zhí)行。靈活使用上述命令,將大大方便用戶對于進(jìn)程的使用及控制。系統(tǒng)性能監(jiān)控#查看操作系統(tǒng)概要信息[root@openEuler~]#cat/etc/os-releaseNAME="openEuler"VERSION="20.03(LTS)"ID="openEuler"VERSION_ID="20.03"PRETTY_NAME="openEuler20.03(LTS)"ANSI_COLOR="0;31"#查看CPU信息[root@openEuler~]#lscpu#查看內(nèi)存信息[root@openEuler~]#freetotalusedfreesharedbuff/cacheavailableMem:1513184186392994024628332768991828Swap:000#默認(rèn)以KB為單位計(jì)算內(nèi)存大小,為更美觀地讀取及輸出,可加上-m\g選項(xiàng),表示以MB或GB為單位計(jì)算系統(tǒng)性能監(jiān)控#查看磁盤信息[root@openEuler~]#dfFilesystem SizeUsedAvailUse%Mountedondevtmpfs 725M0725M0%/devtmpfs 739M0739M0%/dev/shmtmpfs 739M624K739M1%/runtmpfs 739M0739M0%/sys/fs/cgroup/dev/mapper/openeuler-root 9.8G2.7G6.6G29%/tmpfs 739M4.0K739M1%/tmp/dev/sda1 190M138M38M79%/boot/dev/sda2 200M8.0K200M1%/boot/efi/dev/mapper/openeuler-swap 3.9G16M3.7G1%/swaptmpfs 148M0148M0%/run/user/0top命令iotop命令vmstat命令netstat命令性能監(jiān)控工具toptop命令提供了實(shí)時(shí)對系統(tǒng)狀態(tài)進(jìn)行監(jiān)控的功能,也能顯示系統(tǒng)當(dāng)前的進(jìn)程和其他狀況。它可以按CPU使用、內(nèi)存使用和執(zhí)行時(shí)間等對系統(tǒng)中的進(jìn)程進(jìn)行排序。top命令的很多特性都可以通過交互式命令或者在定制文件中進(jìn)行設(shè)定。top命令執(zhí)行結(jié)果的第一行顯示的是概況信息,分別為當(dāng)前系統(tǒng)時(shí)間,開機(jī)到現(xiàn)在經(jīng)過的時(shí)間,當(dāng)前登錄到該計(jì)算機(jī)的用戶數(shù)量,系統(tǒng)1min、5min、15min內(nèi)的平均負(fù)載值。第二行是進(jìn)程計(jì)數(shù)信息,分別顯示進(jìn)程總數(shù)、正在運(yùn)行的進(jìn)程數(shù)、睡眠進(jìn)程數(shù)、停止進(jìn)程數(shù)和僵尸進(jìn)程數(shù)。第三行是CPU使用率信息,分別顯示進(jìn)程在用戶空間消耗的CPU時(shí)間占比“us”、進(jìn)程在內(nèi)核空間消耗的CPU時(shí)間占比“sy”、調(diào)整優(yōu)先級值后的CPU時(shí)間占比“ni”、空閑的CPU時(shí)間占比“id”、處理硬中斷的CPU時(shí)間占比“hi”、處理軟中斷的CPU時(shí)間占比“si”等。第四行、第五行為物理內(nèi)存和交換空間相關(guān)信息,分別顯示內(nèi)存總大小、空閑內(nèi)存大小、已使用內(nèi)存大小及緩存和cache所占的內(nèi)存大小。接下來的所有行顯示的都是進(jìn)程的詳細(xì)信息,分別顯示進(jìn)程ID“PID”、用戶“USER”、優(yōu)先級“PR”、nice值“NI”、進(jìn)程狀態(tài)“S”、CPU時(shí)間占比“%CPU”、占用內(nèi)存比例“%MEM”、進(jìn)程執(zhí)行命令“COMMAND”等信息。vmstatvmstat命令用來顯示虛擬內(nèi)存的信息。它可以展現(xiàn)給定時(shí)間間隔的服務(wù)器的狀態(tài)值,包括服務(wù)器的CPU使用率、內(nèi)存使用情況、虛擬內(nèi)存交換情況、I/O讀寫情況等?!臼纠?-20】#活躍和非活躍內(nèi)存[root@openEuler~]#vmstat-aprocs-----------memory-------------swap-------io-----system--------cpu-----rbswpdfreeinactactivesisobiboincsussyidwast2004989321827682035080021597109019900netstatnetstat命令用于顯示與IP、TCP(TransmissionControlProtocol,傳輸控制協(xié)議)、UDP(UserDatagramProtocol,用戶數(shù)據(jù)報(bào)協(xié)議)和ICMP(InternetControlMessageProtocol,互聯(lián)網(wǎng)控制報(bào)文協(xié)議)相關(guān)的統(tǒng)計(jì)數(shù)據(jù),一般用于檢驗(yàn)本機(jī)各端口的網(wǎng)絡(luò)連接情況。netstat是在內(nèi)核中訪問網(wǎng)絡(luò)及相關(guān)信息的程序,它能提供TCP連接、TCP和UDP監(jiān)聽、進(jìn)程內(nèi)存管理的相關(guān)報(bào)告?!臼纠?-22】#當(dāng)前時(shí)刻TCP的連線情況[root@openEuler~]#netstat-tActiveInternetconnections(w/oservers)ProtoRecv-QSend-QLocalAddressForeignAddress Statetcp00openEuler:ssh_gateway:9139 ESTABLISHEDtcp064openEuler:ssh_gateway:9138 ESTABLISHEDiotopiotop命令用于監(jiān)控磁盤的I/O使用情況,類似于top命令,它可以實(shí)時(shí)監(jiān)測每一個(gè)進(jìn)程使用的磁盤I/O情況,是進(jìn)程級別的I/O監(jiān)控工具。第9章網(wǎng)絡(luò)管理openEuler操作系統(tǒng)網(wǎng)絡(luò)管理知識講解01了解常見網(wǎng)絡(luò)協(xié)議與基本功能組件操作系統(tǒng)網(wǎng)絡(luò)基礎(chǔ)TCP/IP模型OSI(OpenSystemInterconnection,開放系統(tǒng)互連)參考模型是一個(gè)理論上的網(wǎng)絡(luò)體系結(jié)構(gòu),將網(wǎng)絡(luò)分為七層,包括物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會(huì)話層、表示層和應(yīng)用層。它為網(wǎng)絡(luò)通信提供了一個(gè)標(biāo)準(zhǔn)化的框架,有助于不同廠商的設(shè)備之間進(jìn)行互操作。OSI模型網(wǎng)絡(luò)體系結(jié)構(gòu)模型作用5層參考模型網(wǎng)絡(luò)體系結(jié)構(gòu)模型的作用是將復(fù)雜的網(wǎng)絡(luò)通信過程進(jìn)行分層抽象,使得不同層的功能相對獨(dú)立,便于設(shè)計(jì)、實(shí)現(xiàn)和維護(hù)網(wǎng)絡(luò)系統(tǒng)。同時(shí),模型也為網(wǎng)絡(luò)協(xié)議的設(shè)計(jì)和開發(fā)提供了指導(dǎo),確保不同層的協(xié)議能夠協(xié)同工作。本書結(jié)合OSI參考模型和TCP/IP參考模型,使用一個(gè)5層的參考模型,包括物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層和應(yīng)用層。這種模型既考慮了理論的完整性,又兼顧了實(shí)際應(yīng)用的需求,便于讀者理解openEuler系統(tǒng)中的網(wǎng)絡(luò)協(xié)議。TCP/IP參考模型是實(shí)際應(yīng)用中廣泛使用的網(wǎng)絡(luò)體系結(jié)構(gòu),將網(wǎng)絡(luò)分為四層,包括網(wǎng)絡(luò)接口層、網(wǎng)絡(luò)層、傳輸層和應(yīng)用層。它更加注重實(shí)用性和效率,是互聯(lián)網(wǎng)的基礎(chǔ)架構(gòu)。網(wǎng)絡(luò)體系結(jié)構(gòu)TCPUDP互聯(lián)網(wǎng)控制報(bào)文協(xié)議(ICMP)是網(wǎng)絡(luò)層的控制協(xié)議,用于在IP主機(jī)之間發(fā)送控制消息,提供可能發(fā)生在通信環(huán)境中的各種問題的反饋,如網(wǎng)絡(luò)連通性測試、錯(cuò)誤報(bào)告等。它本身不負(fù)責(zé)數(shù)據(jù)傳輸?;ヂ?lián)網(wǎng)協(xié)議(IP)是網(wǎng)絡(luò)層協(xié)議,負(fù)責(zé)通過源主機(jī)和目的主機(jī)的地址來傳送數(shù)據(jù)。目前有IPv4和IPv6兩個(gè)版本,IPv4是目前最流行的版本,但地址資源有限;IPv6采用128位地址,能夠提供更多的地址空間。動(dòng)態(tài)主機(jī)配置協(xié)議(DHCP)是應(yīng)用層協(xié)議,通常被應(yīng)用在大型的局域網(wǎng)環(huán)境中。它可以使網(wǎng)絡(luò)環(huán)境中的主機(jī)動(dòng)態(tài)地獲取IP地址,提升地址的使用率,減少手動(dòng)配置的工作量。ICMP傳輸控制協(xié)議(TCP)是一種面向連接的、可靠性高的傳輸層協(xié)議。它通過三次握手建立連接,提供可靠的數(shù)據(jù)傳輸服務(wù),適用于對數(shù)據(jù)準(zhǔn)確性要求較高的場景,如文件傳輸、電子郵件發(fā)送等。用戶數(shù)據(jù)報(bào)協(xié)議(UDP)是一種無連接的、可靠性低的傳輸層協(xié)議。它不需要建立連接,每個(gè)數(shù)據(jù)段獨(dú)立傳輸,適用于對實(shí)時(shí)性要求較高、對數(shù)據(jù)準(zhǔn)確性要求較低的場景,如音視頻通信、DNS查詢等。DHCP常見網(wǎng)絡(luò)協(xié)議概述IPTCP服務(wù)模型TCP協(xié)議詳解TCP服務(wù)使用socket原語提供傳輸服務(wù)接口,包括創(chuàng)建通信端點(diǎn)、綁定地址、監(jiān)聽連接、接受連接、發(fā)送數(shù)據(jù)、接收數(shù)據(jù)和關(guān)閉連接等操作。通過socket,客戶端和服務(wù)器可以建立連接并進(jìn)行數(shù)據(jù)傳輸。當(dāng)應(yīng)用程序?qū)⑸傻南l(fā)送給操作系統(tǒng)的協(xié)議棧進(jìn)行轉(zhuǎn)發(fā)時(shí),如果消息過長,它將被拆分成數(shù)據(jù)塊。TCP會(huì)在每個(gè)數(shù)據(jù)塊前面加上TCP頭部,稱為段頭。TCP頭部保存發(fā)送方端口號、接收方端口號、序號等控制信息。后續(xù)將具體講解TCP頭部所包含的內(nèi)容及其作用。當(dāng)數(shù)據(jù)塊加上了TCP頭部之后,會(huì)被繼續(xù)轉(zhuǎn)發(fā)給網(wǎng)絡(luò)層,加上IP頭部,稱為包頭。IP頭部包含網(wǎng)絡(luò)層協(xié)議規(guī)定的、根據(jù)網(wǎng)絡(luò)層地址發(fā)往目的地所需的控制信息。這種網(wǎng)絡(luò)層之間交換的單元稱為數(shù)據(jù)包(Package)。數(shù)據(jù)包(以太網(wǎng)包)會(huì)繼續(xù)被轉(zhuǎn)發(fā)給數(shù)據(jù)鏈路層,在數(shù)據(jù)鏈路層加上MAC頭部,稱為幀頭。MAC頭部包含通過以太網(wǎng)的局域網(wǎng)將數(shù)據(jù)包傳輸?shù)阶罱穆酚善魉璧目刂菩畔?。這種數(shù)據(jù)鏈路層之間交換的單元稱為數(shù)據(jù)幀(Frame)。封裝好的數(shù)據(jù)幀會(huì)被轉(zhuǎn)發(fā)給物理層的網(wǎng)絡(luò)硬件(一般將它們統(tǒng)稱為網(wǎng)卡)。轉(zhuǎn)發(fā)給網(wǎng)卡的數(shù)據(jù)幀會(huì)被轉(zhuǎn)化為由0和1組成的數(shù)字串,網(wǎng)卡會(huì)將數(shù)字串以電信號或光信號的形式,通過網(wǎng)線或光纖傳輸出去。再經(jīng)過集線器、路由器等信號轉(zhuǎn)發(fā)設(shè)備,最終將信號傳輸?shù)侥康牡亍CP協(xié)議詳解為了能夠向應(yīng)用程序提供TCP服務(wù),TCP服務(wù)提供一些操作(也就是傳輸服務(wù)接口),通常稱這些操作為傳輸原語。消息的發(fā)送端和接收端會(huì)創(chuàng)建一對稱為socket的端點(diǎn)來獲得TCP服務(wù)。在openEuler操作系統(tǒng)中可以使用netstat-anp命令查看系統(tǒng)中的socket連接。TCP協(xié)議詳解socket中記錄了通信雙方的一些信息,IP地址和端口號就是其中典型的信息。操作系統(tǒng)的協(xié)議棧會(huì)將本地的socket和對端的socket進(jìn)行連接。TCP頭部TCP協(xié)議詳解客戶端和服務(wù)器在連接階段和數(shù)據(jù)的收發(fā)階段,都需要交換控制信息,這些信息對應(yīng)的字段是固定的,位于數(shù)據(jù)包的開頭,稱為TCP頭部。TCP頭部最小長度為20個(gè)字節(jié)。字段含義源端口連接的源端口目的端口連接的目的端口序號發(fā)送數(shù)據(jù)的順序編號確認(rèn)號接收數(shù)據(jù)的順序編號數(shù)據(jù)偏移標(biāo)識TCP頭部包含多少個(gè)32位的字節(jié)URG標(biāo)識緊急指針字段有效ACK被設(shè)置為1,標(biāo)識確認(rèn)號字段是有效的PSH標(biāo)識數(shù)據(jù)包是被推送的數(shù)據(jù)RST重置遇到問題的連接SYN建立連接FIN釋放連接窗口標(biāo)識可以發(fā)送多少個(gè)字節(jié),用于流量控制校驗(yàn)和檢測TCP頭部和數(shù)據(jù)中的傳輸錯(cuò)誤緊急指針標(biāo)識緊急處理的數(shù)據(jù)位置選項(xiàng)除了上面的固定頭部字段之外,提供了添加額外字段的途徑填充用于填充TCP頭部長度TCP連接建立過程①第一次握手:主機(jī)A向主機(jī)B發(fā)送一個(gè)SYN標(biāo)志位(SYNbit)為on的TCP段,字段中包含序號(Seq)x,x為主機(jī)A的初始序號。②第二次握手:主機(jī)B返回一個(gè)ACK值(ACKnum)作為對主機(jī)A的序號x的確認(rèn),如ACKnum=x+1;同時(shí)發(fā)送自己的序號(Seq)y。如果
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 商鋪轉(zhuǎn)租協(xié)議書
- 基層防汛知識培訓(xùn)課件
- 初三化學(xué)化學(xué)用語綜合檢測試卷及答案
- 中國農(nóng)村中小學(xué)教師隊(duì)伍建設(shè)經(jīng)驗(yàn)及其對印尼的啟示性探索
- 基層組織條例學(xué)習(xí)課件
- 八年級數(shù)學(xué)軸對稱變換練習(xí)試卷及答案
- 導(dǎo)航原理(第3版)課件 第三章導(dǎo)航的物理基礎(chǔ)-導(dǎo)航信號描述-多普勒效應(yīng)-無線電導(dǎo)航信號傳播-無線電導(dǎo)航測角天線-陀螺儀和加速度計(jì)-
- 基地組建基礎(chǔ)知識培訓(xùn)課件
- 時(shí)政考核面試題及答案
- 工商銀行山東面試題及答案
- 旅游創(chuàng)意策劃方案
- 管網(wǎng)工程分包合同模板
- 基因?qū)用婷庖叻磻?yīng)
- 2024年重慶市長壽區(qū)春招數(shù)學(xué)試卷(含答案)
- 車位轉(zhuǎn)讓車位協(xié)議書模板
- DB44∕T 902-2011 華潤楠育苗技術(shù)規(guī)程
- 2025屆貴州省畢節(jié)市實(shí)驗(yàn)高級中學(xué)數(shù)學(xué)高一上期末聯(lián)考模擬試題含解析
- TCSRME 034-2023 隧道巖溶堵水注漿技術(shù)規(guī)程
- 保護(hù)長江同飲一江水共護(hù)母親河主題班會(huì)
- AQ 1115-2018 煤層氣地面開發(fā)建設(shè)項(xiàng)目安全設(shè)施設(shè)計(jì)審查和竣工驗(yàn)收規(guī)范(正式版)
- 創(chuàng)業(yè)維艱(中文版)
評論
0/150
提交評論