自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

學(xué)會愛上systemd

系統(tǒng) Linux
systemd 是所有進(jìn)程之母,負(fù)責(zé)將 Linux 主機(jī)啟動到可以做生產(chǎn)性任務(wù)的狀態(tài)。

 [[325942]]

systemd 是所有進(jìn)程之母,負(fù)責(zé)將 Linux 主機(jī)啟動到可以做生產(chǎn)性任務(wù)的狀態(tài)。

systemd(是的,全小寫,即使在句子開頭也是小寫),是初始化程序(init)和 SystemV 初始化腳本的現(xiàn)代替代者。此外,它還有更多功能。

當(dāng)我想到 init 和 SystemV 初始化時,像大多數(shù)系統(tǒng)管理員一樣,我想到的是 Linux 的啟動和關(guān)閉,而不是真正意義上的管理服務(wù),例如在服務(wù)啟動和運(yùn)行后對其進(jìn)行管理。像 init 一樣,systemd 是所有進(jìn)程之母,它負(fù)責(zé)使 Linux 主機(jī)啟動到可以做生產(chǎn)性任務(wù)的狀態(tài)。systemd 設(shè)定的一些功能比老的初始化程序要廣泛得多,它要管理正在運(yùn)行的 Linux 主機(jī)的許多方面,包括掛載文件系統(tǒng)、管理硬件、處理定時器以及啟動和管理生產(chǎn)性主機(jī)所需的系統(tǒng)服務(wù)。

本系列文章是基于我的三期 Linux 培訓(xùn)課程《使用和管理 Linux:從零開始進(jìn)行學(xué)習(xí)系統(tǒng)管理》部分內(nèi)容的摘錄,探討了 systemd 在啟動和啟動完成后的功能。

Linux 引導(dǎo)

Linux 主機(jī)從關(guān)機(jī)狀態(tài)到運(yùn)行狀態(tài)的完整啟動過程很復(fù)雜,但它是開放的并且是可知的。在詳細(xì)介紹之前,我將簡要介紹一下從主機(jī)硬件被上電到系統(tǒng)準(zhǔn)備好用戶登錄的過程。大多數(shù)時候,“引導(dǎo)過程”被作為一個整體來討論,但這是不準(zhǔn)確的。實際上,完整的引導(dǎo)和啟動過程包含三個主要部分:

  • 硬件引導(dǎo):初始化系統(tǒng)硬件
  • Linux 引導(dǎo)boot:加載 Linux 內(nèi)核和 systemd
  • Linux 啟動startup:systemd 為主機(jī)的生產(chǎn)性工作做準(zhǔn)備

Linux 啟動階段始于內(nèi)核加載了 init 或 systemd(取決于具體發(fā)行版使用的是舊的方式還是還是新的方式)之后。init 和 systemd 程序啟動并管理所有其它進(jìn)程,它們在各自的系統(tǒng)上都被稱為“所有進(jìn)程之母”。

將硬件引導(dǎo)與 Linux 引導(dǎo)及 Linux 啟動區(qū)分開,并明確定義它們之間的分界點是很重要的。理解它們的差異以及它們每一個在使 Linux 系統(tǒng)進(jìn)入生產(chǎn)狀態(tài)所起的作用,才能夠管理這些進(jìn)程,并更好地確定大部分人所謂的“啟動”問題出在哪里。

啟動過程按照三步引導(dǎo)流程,使 Linux 計算機(jī)進(jìn)入可進(jìn)行生產(chǎn)工作的狀態(tài)。當(dāng)內(nèi)核將主機(jī)的控制權(quán)轉(zhuǎn)移到 systemd 時,啟動環(huán)節(jié)開始。

systemd 之爭

systemd 引起了系統(tǒng)管理員和其它負(fù)責(zé)維護(hù) Linux 系統(tǒng)正常運(yùn)行人員的廣泛爭議。在許多 Linux 系統(tǒng)中,systemd 接管了大量任務(wù),這在某些開發(fā)者和sysadmins群體中引起了反對和不和諧。

SystemV 和 systemd 是執(zhí)行 Linux 啟動環(huán)節(jié)的兩種不同的方法。SystemV 啟動腳本和 init 程序是老的方法,而使用目標(biāo)target的 systemd 是新方法。盡管大多數(shù)現(xiàn)代 Linux 發(fā)行版都使用較新的 systemd 進(jìn)行啟動、關(guān)機(jī)和進(jìn)程管理,但仍有一些發(fā)行版未采用。原因之一是某些發(fā)行版維護(hù)者和系統(tǒng)管理員喜歡老的 SystemV 方法,而不是新的 systemd。

我認(rèn)為兩者都有其優(yōu)勢。

為何我更喜歡 SystemV

我更喜歡 SystemV,因為它更開放。使用 Bash 腳本來完成啟動。內(nèi)核啟動 init 程序(這是一個編譯后的二進(jìn)制)后,init 啟動 rc.sysinit 腳本,該腳本執(zhí)行許多系統(tǒng)初始化任務(wù)。rc.sysinit 執(zhí)行完后,init 啟動 /etc/rc.d/rc 腳本,該腳本依次啟動 /etc/rc.d/rcX.d 中由 SystemV 啟動腳本定義的各種服務(wù)。其中 X 是待啟動的運(yùn)行級別號。

除了 init 程序本身之外,所有這些程序都是開放且易于理解的腳本??梢酝ㄗx這些腳本并確切了解整個啟動過程中發(fā)生的事情,但是我不認(rèn)為有太多系統(tǒng)管理員真正做到這一點。每個啟動腳本都被編了號,以便按特定順序啟動預(yù)期的服務(wù)。服務(wù)是串行啟動的,一次只能啟動一個服務(wù)。

systemd 是由 Red Hat 的 Lennart Poettering 和 Kay Sievers 開發(fā)的,它是一個由大型的、編譯的二進(jìn)制可執(zhí)行文件構(gòu)成的復(fù)雜系統(tǒng),不訪問其源碼就無法理解。它是開源的,因此“訪問其源代碼”并不難,只是不太方便。systemd 似乎表現(xiàn)出對 Linux 哲學(xué)多個原則的重大駁斥。作為二進(jìn)制文件,systemd 無法被直接打開供系統(tǒng)管理員查看或進(jìn)行簡單更改。systemd 試圖做所有事情,例如管理正在運(yùn)行的服務(wù),同時提供明顯比 SystemV 更多的狀態(tài)信息。它還管理硬件、進(jìn)程、進(jìn)程組、文件系統(tǒng)掛載等。systemd 幾乎涉足于現(xiàn)代 Linux 主機(jī)的每個方面,使它成為系統(tǒng)管理的一站式工具。所有這些都明顯違反了“程序應(yīng)該小,且每個程序都應(yīng)該只做一件事并做好”的原則。

為何我更喜歡 systemd

我更喜歡用 systemd 作為啟動機(jī)制,因為它會根據(jù)啟動階段并行地啟動盡可能多的服務(wù)。這樣可以加快整個的啟動速度,使得主機(jī)系統(tǒng)比 SystemV 更快地到達(dá)登錄屏幕。

systemd 幾乎可以管理正在運(yùn)行的 Linux 系統(tǒng)的各個方面。它可以管理正在運(yùn)行的服務(wù),同時提供比SystemV 多得多的狀態(tài)信息。它還管理硬件、進(jìn)程和進(jìn)程組、文件系統(tǒng)掛載等。systemd 幾乎涉足于現(xiàn)代 Linux 操作系統(tǒng)的每方面,使其成為系統(tǒng)管理的一站式工具。(聽起來熟悉吧?)

systemd 工具是編譯后的二進(jìn)制文件,但該工具包是開放的,因為所有配置文件都是 ASCII 文本文件??梢酝ㄟ^各種 GUI 和命令行工具來修改啟動配置,也可以添加或修改各種配置文件來滿足特定的本地計算環(huán)境的需求。

真正的問題

你認(rèn)為我不能喜歡兩種啟動系統(tǒng)嗎?我能,我會用它們中的任何一個。

我認(rèn)為,SystemV 和 systemd 之間大多數(shù)爭議的真正問題和根本原因在于,在系統(tǒng)管理層面沒有選擇權(quán)。使用 SystemV 還是 systemd 已經(jīng)由各種發(fā)行版的開發(fā)人員、維護(hù)人員和打包人員選擇了(但有充分的理由)。由于 init 極端的侵入性,挖出并替換 init 系統(tǒng)會帶來很多影響,會帶來很多在發(fā)行版設(shè)計過程之外難以解決的后果。

盡管該選擇實際上是為我而選的,但我的Linux主機(jī)能不能開機(jī)、能不能工作,這是我平時最關(guān)心的。作為最終用戶,甚至是系統(tǒng)管理員,我主要關(guān)心的是我是否可以完成我的工作,例如寫我的書和這篇文章,安裝更新以及編寫腳本來自動化所有事情。只要我能做我的工作,我就不會真正在意發(fā)行版中使用的啟動系統(tǒng)。

在啟動或服務(wù)管理出現(xiàn)問題時,我會在意。無論主機(jī)上使用哪種啟動系統(tǒng),我都足夠了解如何沿著事件順序來查找故障并進(jìn)行修復(fù)。

替換SystemV

以前曾有過用更現(xiàn)代的東西替代 SystemV 的嘗試。大約在兩個版本中,F(xiàn)edora 使用了一個叫作 Upstart 的東西來替換老化的 SystemV,但是它沒有取代 init,也沒有提供我所注意到的任何變化。由于 Upstart 并未對 SystemV 的問題進(jìn)行任何顯著的改變,所以在這個方向上的努力很快就被放棄了,轉(zhuǎn)而使用 systemd。

盡管大部分 Linux 開發(fā)人員都認(rèn)可替換舊的 SystemV 啟動系統(tǒng)是個好主意,但許多開發(fā)人員和系統(tǒng)管理員并不喜歡 systemd。與其重新討論人們在 systemd 中遇到的或曾經(jīng)遇到過的所有所謂的問題,不如帶你去看兩篇好文章,盡管有些陳舊,但它們涵蓋了大多數(shù)內(nèi)容。Linux 內(nèi)核的創(chuàng)建者 Linus Torvalds 對 systemd 似乎不感興趣。在 2014 年 ZDNet 的一篇文章《Linus Torvalds 和其他人對 Linux 上的 systemd 的看法》中,Linus 清楚地表達(dá)了他的感受。

“實際上我對 systemd 本身沒有任何特別強(qiáng)烈的意見。我對一些核心開發(fā)人員有一些問題,我認(rèn)為他們在對待錯誤和兼容性方面過于輕率,而且我認(rèn)為某些設(shè)計細(xì)節(jié)是瘋狂的(例如,我不喜歡二進(jìn)制日志),但這只是細(xì)節(jié),不是大問題。”

如果你對 Linus 不太了解的話,我可以告訴你,如果他不喜歡某事,他是非常直言不諱的,很明確,而且相當(dāng)明確的表示不喜歡。他解決自己對事物不滿的方式已經(jīng)被社會更好地接受了。

2013 年,Poettering 寫了一篇很長的博客,他在文章駁斥了關(guān)于 systemd 的迷思,同時對創(chuàng)建 systemd 的一些原因進(jìn)行了深入的剖析。這是一分很好的讀物,我強(qiáng)烈建議你閱讀。

systemd 任務(wù)

根據(jù)編譯過程中使用的選項(不在本系列中介紹),systemd 可以有多達(dá) 69 個二進(jìn)制可執(zhí)行文件執(zhí)行以下任務(wù),其中包括:

  • systemd 程序以 1 號進(jìn)程(PID 1)運(yùn)行,并提供使盡可能多服務(wù)并行啟動的系統(tǒng)啟動能力,它額外加快了總體啟動時間。它還管理關(guān)機(jī)順序。
  • systemctl 程序提供了服務(wù)管理的用戶接口。
  • 支持 SystemV 和 LSB 啟動腳本,以便向后兼容。
  • 服務(wù)管理和報告提供了比 SystemV 更多的服務(wù)狀態(tài)數(shù)據(jù)。
  • 提供基本的系統(tǒng)配置工具,例如主機(jī)名、日期、語言環(huán)境、已登錄用戶的列表,正在運(yùn)行的容器和虛擬機(jī)、系統(tǒng)帳戶、運(yùn)行時目錄及設(shè)置,用于簡易網(wǎng)絡(luò)配置、網(wǎng)絡(luò)時間同步、日志轉(zhuǎn)發(fā)和名稱解析的守護(hù)進(jìn)程。
  • 提供套接字管理。
  • systemd 定時器提供類似 cron 的高級功能,包括在相對于系統(tǒng)啟動、systemd 啟動時間、定時器上次啟動時間的某個時間點運(yùn)行腳本。
  • 它提供了一個工具來分析定時器規(guī)范中使用的日期和時間。
  • 能感知分層的文件系統(tǒng)掛載和卸載功能可以更安全地級聯(lián)掛載的文件系統(tǒng)。
  • 允許主動的創(chuàng)建和管理臨時文件,包括刪除。
  • D-Bus 的接口提供了在插入或移除設(shè)備時運(yùn)行腳本的能力。這允許將所有設(shè)備(無論是否可插拔)都被視為即插即用,從而大大簡化了設(shè)備的處理。
  • 分析啟動環(huán)節(jié)的工具可用于查找耗時最多的服務(wù)。
  • 它包括用于存儲系統(tǒng)消息的日志以及管理日志的工具。

架構(gòu)

這些以及更多的任務(wù)通過許多守護(hù)程序、控制程序和配置文件來支持。圖 1 顯示了許多屬于 systemd 的組件。這是一個簡化的圖,旨在提供概要描述,因此它并不包括所有獨立的程序或文件。它也不提供數(shù)據(jù)流的視角,數(shù)據(jù)流是如此復(fù)雜,因此在本系列文章的背景下沒用。

圖 1:systemd 的架構(gòu),作者 Shmuel Csaba Otto Traian (CC BY-SA 3.0)

如果要完整地講解 systemd 就需要一本書。你不需要了解圖 1 中的 systemd 組件是如何組合在一起的細(xì)節(jié)。只需了解支持各種 Linux 服務(wù)管理以及日志文件和日志處理的程序和組件就夠了。但是很明顯, systemd 并不是某些批評者所宣稱的那樣,它是一個單一的怪物。

作為 1 號進(jìn)程的 systemd

systemd 是 1 號進(jìn)程(PID 1)。它的一些功能,比老的 SystemV3 init 要廣泛得多,用于管理正在運(yùn)行的 Linux 主機(jī)的許多方面,包括掛載文件系統(tǒng)以及啟動和管理 Linux 生產(chǎn)主機(jī)所需的系統(tǒng)服務(wù)。與啟動環(huán)節(jié)無關(guān)的任何 systemd 任務(wù)都不在本文討論范圍之內(nèi)(但本系列后面的一些文章將探討其中的一些任務(wù))。

首先,systemd 掛載 /etc/fstab 所定義的文件系統(tǒng),包括所有交換文件或分區(qū)。此時,它可以訪問位于 /etc 中的配置文件,包括它自己的配置文件。它使用其配置鏈接 /etc/systemd/system/default.target 來確定將主機(jī)引導(dǎo)至哪個狀態(tài)或目標(biāo)。default.target 文件是指向真實目標(biāo)文件的符號鏈接。對于桌面工作站,通常是 graphical.target,它相當(dāng)于 SystemV 中的運(yùn)行級別 5。對于服務(wù)器,默認(rèn)值更可能是 multi-user.target,相當(dāng)于 SystemV 中的運(yùn)行級別 3。emergency.target 類似于單用戶模式。目標(biāo)target服務(wù)service是 systemd 的單元unit。

下表(圖 2)將 systemd 目標(biāo)與老的 SystemV 啟動運(yùn)行級別進(jìn)行了比較。systemd 提供 systemd 目標(biāo)別名以便向后兼容。目標(biāo)別名允許腳本(以及許多系統(tǒng)管理員)使用 SystemV 命令(如 init 3)更改運(yùn)行級別。當(dāng)然,SystemV 命令被轉(zhuǎn)發(fā)給 systemd 進(jìn)行解釋和執(zhí)行。 

 

 

 

 

< 如顯示不全,請左右滑動 >
systemd 目標(biāo) SystemV 運(yùn)行級別 目標(biāo)別名 描述
default.target     此目標(biāo)總是通過符號連接的方式成為 multi-user.targetgraphical.target 的別名。systemd 始終使用 default.target 來啟動系統(tǒng)。default.target 絕不應(yīng)該設(shè)為 halt.target,poweroff.targetreboot.target 的別名。
graphic.target 5 runlevel5.target 帶有 GUI 的 multi-user.target。
  4 runlevel4.target 未用。在 SystemV 中運(yùn)行級別 4 與運(yùn)行級別 3 相同??梢詣?chuàng)建并自定義此目標(biāo)以啟動本地服務(wù),而無需更改默認(rèn)的 multi-user.target。
multi-user.target 3 runlevel3.target 所有服務(wù)在運(yùn)行,但僅有命令行界面(CLI)。
  2 runlevel2.target 多用戶,沒有 NFS,其它所有非 GUI 服務(wù)在運(yùn)行。
rescue.target 1 runlevel1.target 基本系統(tǒng),包括掛載文件系統(tǒng),運(yùn)行最基本的服務(wù)和主控制臺的恢復(fù) shell。
emergency.target S   單用戶模式:沒有服務(wù)運(yùn)行;不掛載文件系統(tǒng)。這是最基本的工作級別,只有主控制臺上運(yùn)行的一個緊急 Shell 供用戶與系統(tǒng)交互。
halt.target     停止系統(tǒng)而不關(guān)閉電源。
reboot.target 6 runlevel6.target 重啟。
poweroff.target 0 runlevel0.target 停止系統(tǒng)并關(guān)閉電源。

 

 

 

 

 

  

 圖 2:SystemV 運(yùn)行級別與 systemd 目標(biāo)和一些目標(biāo)別名的比較

每個目標(biāo)在其配置文件中都描述了一個依賴集。systemd 啟動必須的依賴項,這些依賴項是運(yùn)行 Linux 主機(jī)到特定功能級別所需的服務(wù)。當(dāng)目標(biāo)配置文件中列出的所有依賴項被加載并運(yùn)行后,系統(tǒng)就在該目標(biāo)級別運(yùn)行了。在圖 2 中,功能最多的目標(biāo)位于表的頂部,從頂向下,功能逐步遞減。

systemd 還會檢查老的 SystemV init 目錄,以確認(rèn)是否存在任何啟動文件。如果有,systemd 會將它們作為配置文件以啟動它們描述的服務(wù)。網(wǎng)絡(luò)服務(wù)是一個很好的例子,在 Fedora 中它仍然使用 SystemV 啟動文件。

圖 3(如下)是直接從啟動手冊頁復(fù)制來的。它顯示了 systemd 啟動期間一般的事件環(huán)節(jié)以及確保成功啟動的基本順序要求。

  1. cryptsetup-pre.target
  2. |
  3. (various low-level v
  4. API VFS mounts: (various cryptsetup devices...)
  5. mqueue, configfs, | |
  6. debugfs, ...) v |
  7. | cryptsetup.target |
  8. | (various swap | | remote-fs-pre.target
  9. | devices...) | | | |
  10. | | | | | v
  11. | v local-fs-pre.target | | | (network file systems)
  12. | swap.target | | v v |
  13. | | v | remote-cryptsetup.target |
  14. | | (various low-level (various mounts and | | |
  15. | | services: udevd, fsck services...) | | remote-fs.target
  16. | | tmpfiles, random | | | /
  17. | | seed, sysctl, ...) v | | /
  18. | | | local-fs.target | | /
  19. | | | | | | /
  20. \____|______|_______________ ______|___________/ | /
  21. \ / | /
  22. v | /
  23. sysinit.target | /
  24. | | /
  25. ______________________/|\_____________________ | /
  26. / | | | \ | /
  27. | | | | | | /
  28. v v | v | | /
  29. (various (various | (various | |/
  30. timers...) paths...) | sockets...) | |
  31. | | | | | |
  32. v v | v | |
  33. timers.target paths.target | sockets.target | |
  34. | | | | v |
  35. v \_______ | _____/ rescue.service |
  36. \|/ | |
  37. v v |
  38. basic.target rescue.target |
  39. | |
  40. ________v____________________ |
  41. / | \ |
  42. | | | |
  43. v v v |
  44. display- (various system (various system |
  45. manager.service services services) |
  46. | required for | |
  47. | graphical UIs) v v
  48. | | multi-user.target
  49. emergency.service | | |
  50. | \_____________ | _____________/
  51. v \|/
  52. emergency.target v
  53. graphical.target

圖 3: systemd 啟動圖

sysinit.targetbasic.target 目標(biāo)可以看作啟動過程中的檢查點。盡管 systemd 的設(shè)計目標(biāo)之一是并行啟動系統(tǒng)服務(wù),但是某些服務(wù)和功能目標(biāo)必須先啟動,然后才能啟動其它服務(wù)和目標(biāo)。直到該檢查點所需的所有服務(wù)和目標(biāo)被滿足后才能通過這些檢查點。

當(dāng) sysinit.target 所依賴的所有單元都完成時,就會到達(dá) sysinit.target。所有這些單元,包括掛載文件系統(tǒng)、設(shè)置交換文件、啟動 Udev、設(shè)置隨機(jī)數(shù)生成器種子、啟動低層服務(wù)以及配置安全服務(wù)(如果一個或多個文件系統(tǒng)是加密的)都必須被完成,但在 sysinit.target 中,這些任務(wù)可以并行執(zhí)行。

sysinit.target 啟動了系統(tǒng)接近正常運(yùn)行所需的所有低層服務(wù)和單元,它們也是進(jìn)入 basic.target 所需的。

在完成 sysinit.target 之后,systemd 會啟動實現(xiàn)下一個目標(biāo)所需的所有單元。basic.target 通過啟動所有下一目標(biāo)所需的單元來提供一些額外功能。包括設(shè)置為各種可執(zhí)行程序目錄的路徑、設(shè)置通信套接字和計時器之類。

最后,用戶級目標(biāo) multi-user.targetgraphical.target 被初始化。要滿足 graphical.target 的依賴必須先達(dá)到 multi-user.target。圖 3 中帶下劃線的目標(biāo)是通常的啟動目標(biāo)。當(dāng)達(dá)到這些目標(biāo)之一時,啟動就完成了。如果 multi-user.target 是默認(rèn)設(shè)置,那么你應(yīng)該在控制臺上看到文本模式的登錄界面。如果 graphical.target 是默認(rèn)設(shè)置,那么你應(yīng)該看到圖形的登錄界面。你看到的具體的 GUI 登錄界面取決于你的默認(rèn)顯示管理器。

引導(dǎo)手冊頁還描述并提供了引導(dǎo)到初始化 RAM 磁盤和 systemd 關(guān)機(jī)過程的圖。

systemd 還提供了一個工具,該工具列出了完整的啟動過程或指定單元的依賴項。單元是一個可控的 systemd 資源實體,其范圍可以從特定服務(wù)(例如 httpd 或 sshd)到計時器、掛載、套接字等。嘗試以下命令并滾動查看結(jié)果。

  1. systemctl list-dependencies graphical.target

注意,這會完全展開使系統(tǒng)進(jìn)入 graphical.target 運(yùn)行模式所需的頂層目標(biāo)單元列表。也可以使用 --all 選項來展開所有其它單元。

  1. systemctl list-dependencies --all graphical.target

你可以使用 less 命令來搜索諸如 target、slicesocket 之類的字符串。

現(xiàn)在嘗試下面的方法。

  1. systemctl list-dependencies multi-user.target

  1. systemctl list-dependencies rescue.target

  1. systemctl list-dependencies local-fs.target

  1. systemctl list-dependencies dbus.service

這個工具幫助我可視化我正用的主機(jī)的啟動依賴細(xì)節(jié)。繼續(xù)花一些時間探索一個或多個 Linux 主機(jī)的啟動樹。但是要小心,因為 systemctl 手冊頁包含以下注釋:

“請注意,此命令僅列出當(dāng)前被服務(wù)管理器加載到內(nèi)存的單元。尤其是,此命令根本不適合用于獲取特定單元的全部反向依賴關(guān)系列表,因為它不會列出被單元聲明了但是未加載的依賴項。”

結(jié)尾語

即使在沒有深入研究 systemd 之前,很明顯能看出它既強(qiáng)大又復(fù)雜。顯然,systemd 不是單一、龐大、獨體且不可知的二進(jìn)制文件。相反,它是由許多較小的組件和旨在執(zhí)行特定任務(wù)的子命令組成。

本系列的下一篇文章將更詳細(xì)地探討 systemd 的啟動,以及 systemd 的配置文件,更改默認(rèn)的目標(biāo)以及如何創(chuàng)建簡單服務(wù)單元。

 

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2014-11-13 10:22:18

Multi-cloud亞馬遜Web服務(wù)云數(shù)據(jù)庫

2015-09-06 09:30:59

BYOA同步共享自帶文化

2020-03-18 14:20:25

shellLinux命令

2013-01-17 14:49:20

創(chuàng)業(yè)

2012-09-13 09:35:35

CSSJS編程

2019-11-07 09:34:43

Python語言Java

2012-03-16 15:35:21

.netJava

2009-07-10 17:15:13

Javascript

2019-11-12 16:44:50

Go語言泛函編程設(shè)計

2014-08-07 10:43:28

社交App

2017-03-13 16:40:28

微軟LinuxPowerShell

2017-03-07 16:00:20

數(shù)字化轉(zhuǎn)型云服務(wù)

2021-01-04 13:40:59

Git開源工具

2020-04-27 21:31:28

智慧城市物聯(lián)網(wǎng)IOT

2019-05-20 09:54:40

Linuxsystemd自動備份

2011-03-01 14:46:10

Fedora 15Systemd

2021-06-04 06:20:47

systemd定位工具系統(tǒng)運(yùn)維

2023-02-10 09:40:26

systemd日志

2020-06-01 14:02:25

Vue.js框架模板

2019-07-08 17:39:19

打印機(jī)
點贊
收藏

51CTO技術(shù)棧公眾號