溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux中運行級別與重新啟動的示例分析

發(fā)布時間:2021-12-24 14:28:45 來源:億速云 閱讀:105 作者:小新 欄目:系統(tǒng)運維

這篇文章將為大家詳細講解有關Linux中運行級別與重新啟動的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

概述

在本文中,學習關閉或重啟您的 Linux 系統(tǒng),警告用戶系統(tǒng)正在關閉,請切換到單用戶模式或者一個多少有點限制性的運行級別。學習:

設置默認運行級別

運行級別間的變化

改為單用戶模式

從命令行關閉或重啟系統(tǒng)

警告用戶主要系統(tǒng)事件,包括切換到另一個運行級別

適當?shù)亟K止進程

除非特殊說明,本文中的示例使用帶有 2.6.26 內核的 Fedora 8。upstar 示例使用的是帶有 2.6.34 內核的 Fedora 13,或者是帶有 2.6.35 內核的 Ubuntu 10.10。您的結果在其他系統(tǒng)上可能有所不同。

先決條件

為了最有效地利用本系列中的文章,您應該具有基本的 Linux 知識,并需要準備一個 Linux 系統(tǒng),用于練習本文介紹的命令。有時候不同版本的程序輸出格式不同,因此您所得到的結果未必總是與這里所示的清單和圖相同。特別是,最近出現(xiàn)的系統(tǒng)已經改變了很多傳統(tǒng) System V init 進程用戶所熟悉的內容(更多細節(jié)見 Init vs. Upstart)。本文是針對傳統(tǒng) System V init 進程的,只對 upstar 的區(qū)別進行了粗略的概述。

運行級別

運行級別 定義了在 Linux 系統(tǒng)的當前狀態(tài)(或運行級別)可以完成的任務。每個 Linux 系統(tǒng)支持 3 個基本運行級別,外加一個或多個用于正常操作的運行級別?;具\行級別如 表 1 所示。

表 1. Linux 基本運行級別
級別

目的

0關閉(或終止)系統(tǒng)
1單用戶模式:通常又稱為 s 或 S
6重啟系統(tǒng)

除了這些基本的運行級別之外,各個發(fā)行版之間的運行級別使用也有所不同。一個命令使用集合如 表 2 所示。

表 2. 其他命令 linux 運行級別

級別

目的
2

沒有網絡的多用戶模式

3

有網絡的多用戶模式

5

有網絡和 X Window System 的多用戶模式

Slackware 發(fā)布版使用運行級別 4 而不是 5,因為整個系統(tǒng)正運行 X Window 系統(tǒng)。Debian 及其衍生產品,比如 Ubuntu,對于任何多用戶模式都使用單個運行級別,通常是運行級別 2。務必查閱您版本的文檔。

默認運行級別

當一個 Linux 系統(tǒng)啟動時,默認運行級別由 /etc/inittab 下的 id: 條目確定。 清單 1 說明了一個系統(tǒng)(比如 Fedora 8 或 openSUSE 11.2)典型條目,這兩個系統(tǒng)都是為 X Window System 使用運行級別 5。

清單 1.  /etc/inittab 中的默認運行級別

[root@pinguino ~]# grep "^id:" /etc/inittab
id:5:initdefault:

如果您想要您的系統(tǒng)以不同的運行級別啟動,比如說運行級別 3,編輯該值。

改變運行級別

有好幾種方法可以改變運行級別。為了進行一個永久的改變,您可以編輯 /etc/inittab 并改變默認運行級別,正如您剛才在上面看到的。

如果您只需要在一次引導中將您的系統(tǒng)提升到一個不同的運行級別,您可以這樣做。例如,假設您剛剛安裝了一個新內核,在使用新內核重啟系統(tǒng)后需要建立一些內核模塊,但是應該在啟動 X Window System 之前。您可能想要將您的運行級別提升為級別 3 來完成這一任務。您可以通過編輯內核線(GRUB)或在選擇的系統(tǒng)名后(LILO)添加一個參數(shù)來在引導時進行這一操作。使用一個一位數(shù)來指出期望的運行級別(在這里是 3)。我們將通過一個 GRUB 實例來介紹具體過程。假設您的 /boot/grub/menu.lst 文件含有 清單 2 所示的片段。

清單 2.  啟動 Fedora 8 的典型 GRUB 片段

title Fedora (2.6.26.8-57.fc8)
root (hd0,5)
kernel /boot/vmlinuz-2.6.26.8-57.fc8 ro root=LABEL=FEDORA8 rhgb quiet
initrd /boot/initrd-2.6.26.8-57.fc8.img

要想讓系統(tǒng)升級到運行級別 3,等待直至引導項出現(xiàn),選擇這個條目然后輸入 ‘e’ 來編輯這個條目。根據(jù)您的 GRUB 選項,您可能需要按下一個鍵來顯示引導項,然后也輸入一個 ‘p’ 和一個密碼來解鎖編輯。Fedora 8 系統(tǒng)上 GRUB 屏幕看起來像 圖 1 這樣。

圖 1.  在 GRUB 中選擇一個引導選項

Linux中運行級別與重新啟動的示例分析

在這個示例中,您現(xiàn)在應該可以看到以 root、kernel、initrd 開始的行出現(xiàn)。將光標移動到以 “kernel” 開始的行,然后輸入 ‘e’ 來編輯這一行。Fedora 8 系統(tǒng)上的 GRUB 屏幕現(xiàn)在如 圖 2 所示。

圖 2. 選擇內核項進行編輯

Linux中運行級別與重新啟動的示例分析

最后將光標移動到這一行的末尾,然后添加一個空格和數(shù)字 ‘3’。如果需要的話您可以刪除 ‘quiet’,或者根據(jù)需要修改任何其他參數(shù)。Fedora 8 系統(tǒng)上的 GRUB 屏幕現(xiàn)在如 圖 3 所示。

圖 3.  設置啟動運行級別為 3

Linux中運行級別與重新啟動的示例分析

最后,按下 Enter 鍵來保存修改,然后輸入 ‘b’ 來引導系統(tǒng)。

注意: 使用 LILO 或 GRUB2 和使用 GRUB 的步驟有所不同,但是編輯內核啟動方法的基本原理是一樣的,即使其他系統(tǒng)或其他版本上的 GRUB 界面和這里所顯示的界面大不相同。提示信息通常會對您有所幫助。

當您在運行級別 3 下完成了您的安裝工作時,您可能想要切換到運行級別 5。幸運的是,您不需要重啟系統(tǒng)。您可以使用 telinit 命令來切換到另一個運行級別。使用 runlevel 命令可以顯示之前和目前的運行級別。如果輸出的一個字符是 ‘N’,運行級別還不能改變,因為系統(tǒng)正在被引導。 清單 3 顯示了驗證和更改運行級別。

清單 3. 驗證和更改運行級別

[root@pinguino ~]# runlevel
N 3
[root@pinguino ~]# telinit 5

輸入 telinit 5 之后您將看到幾個消息一閃而過,您的界面將切換到已配置的圖形化登錄界面。打開一個終端窗口,然后驗證運行級別是否已經修改,如 清單 4 所示。

清單 4.確認新的運行級別

[root@pinguino ~]# runlevel
3 5

如果您使用 ls 命令來顯示一個很長的 telinit 命令清單,您將看到它實際上是一個鏈接到 init 命令的符號鏈接。我們將在 清單 5 中對此作一說明。

清單 5.  telinit 只是一個鏈接到 init 的符號鏈接

[root@pinguino ~]# ls -l $(which telinit)
lrwxrwxrwx 1 root root 4 2008-04-01 07:50 /sbin/telinit -> init

可執(zhí)行文件 init 知道它是否稱為 init 或 telinit,然后進行相應調整。因為 init 作為 PID 1 在引導時運行,它也非常智能,知道您隨后什么時候會使用 init 調用它,而不是使用 telinit。如果您這樣做了,它就會假設您希望它表現(xiàn)得像已經調用了 telinit。例如,您可能會使用 init 5 而不是 telinit 5 來切換到運行級別 5。

單用戶模式

相比個人電腦操作系統(tǒng),比如 DOS 或 Windows,Linux 本身是一個多用戶系統(tǒng)。然而,有時候這可能會成為一個問題,比如,當您需要恢復一個重要文件系統(tǒng)或者數(shù)據(jù)庫時,或者安裝和測試某個新軟件時。運行級別 1,單用戶模式 是您在這些情況下的最佳答案。實際實現(xiàn)根據(jù)不同版本有所變化,但是您通常只使用一個很小的系統(tǒng)簡單地啟動。通常這里沒有聯(lián)網,沒有(或者非常少)守護進程運行。在一些系統(tǒng)上,您必須通過登錄來進行認證,但在其他系統(tǒng)上您可以直接以根用戶開始操作 shell 提示符。單用戶模式可能是一個救生圈,也可能是毀壞您的系統(tǒng),因此,不管任何時候,當您使用根用戶權限時都應該小心注意。完成后立即重新啟動到一個正常多用戶模式。

和切換到正常多用戶運行級別一樣,您也可以使用 telinit 1 切換到單用戶模式。正如 表 1 所述,‘s’ 和 ‘S’ 是運行級別 1 的別名,因此您可以使用 telinit s 來代替。

干凈關閉

您可以使用 telinit 或 init 來停止多用戶活動,然后切換到單用戶模式,這可能有點突然,可能會導致用戶丟失作業(yè)和進程異常終止。關閉或重啟系統(tǒng)首選方法是使用 shutdown 命令,這首先會向所有登錄的用戶發(fā)送一個警告,并限制進一步登錄,然后發(fā)送 init 信號來切換運行級別。init 進程然后發(fā)送給所有正在運行的進程一個 SIGTERM 信號,給它們保存數(shù)據(jù)的時間或讓他們自己結束進程。5 秒(如果指定了延遲時間的話,可能是其他延遲時間)后,init 發(fā)送一個 SIGKILL 信號來強制結束還在運行的進程。

默認情況下,shutdown 切換到運行級別 1(單用戶模式)。您可以指定 -h 來暫停系統(tǒng),或者 -r 選項重新啟動。除了您指定的消息外標準消息也被公布。時間可能是指定為絕對時間,以 hh:mm 格式,或者也可能是相對時間,以 n 格式,其中 n 是距關機的分鐘數(shù)。對于即刻關機,使用 now,這等價于 +0。

如果您發(fā)布了一個延遲關機,而時間還沒有到,如果您想取消關機,如果命令行正在前端運行按 Ctrl-c 鍵,或者通過發(fā)布一個帶有 -c 選項的 shutdown 命令來取消即將進行的關機。 清單 6 顯示了幾個使用 shutdown 命令的示例,以及撤銷這一命令的方法。

清單 6. 關機示例

[root@pinguino ~]# shutdown 5 File system recovery needed
Broadcast message from root (pts/1) (Tue Jan 4 08:05:24 2011):
File system recovery needed
The system is going DOWN to maintenance mode in 5 minutes!
^C
Shutdown cancelled.
[root@pinguino ~]# shutdown -r 10 Reloading updated kernel&
[1] 18784
[root@pinguino ~]#
Broadcast message from root (pts/1) (Tue Jan 4 08:05:53 2011):
Reloading updated kernel
The system is going DOWN for reboot in 10 minutes!
[root@pinguino ~]# fg
shutdown -r 10 Reloading updated kernel
^C
Shutdown cancelled.
[root@pinguino ~]# shutdown -h 23:59&
[1] 18788
[root@pinguino ~]# shutdown -c
Shutdown cancelled.
[1]+ Done shutdown -h 23:59

您可以已經注意到了,我們最后一個例子沒有發(fā)送一個警告消息。如果關機時間超過了 15 分鐘,這個消息將不被發(fā)送,直到 清單 7 所示活動前 15 分鐘。 清單 7 也顯示了 -t 選項的使用,將 SIGTERM 和 SIGKILL 信號間的默認延遲增加 5 秒到 60 秒。

清單 7. 另一個關機示例

[root@pinguino ~]# date;shutdown -t60 17 Time to do backups&
Tue Jan 4 08:12:55 EST 2011
[1] 18825
[root@pinguino ~]# date
Tue Jan 4 08:14:13 EST 2011
[root@pinguino ~]#
Broadcast message from root (pts/1) (Tue Jan 4 08:14:55 2011):
Time to do backups
The system is going DOWN to maintenance mode in 15 minutes!

如果您取消了一次關機,您可以使用 wall 命令來向所有用戶發(fā)送一個警告,通知他們實際上系統(tǒng)不會即將關閉。

正如我們之前所介紹的,也可以使用 telinit(或 init)來關閉或重啟系統(tǒng)。和 telinit 的其他用法一樣,不向用戶發(fā)送警告消息,命令立即生效,盡管在 SIGTERM 和 SIGKILL 信號之間仍然有延遲。對于 telinit、init 和 shutdown 的其他選項,請查閱手冊頁。

Halt、reboot 和 poweroff 命令

您已經知道了一些關于關機和重新啟動的命令。

•halt 命令暫停系統(tǒng)。

•poweroff 命令是一個鏈接到 halt 命令的符號鏈接,暫停系統(tǒng)然后試圖關掉電源。

•reboot 命令是另一個連接到 halt 命令的符號鏈接,暫停系統(tǒng)然后重新啟動。

當系統(tǒng)的運行級別不是 0 或 6 時,如果調用這些命令其中之一,相應的 shutdown 命令將被代替調用。

對于這些命令的其他選項,以及關于其操作的詳細信息,請參閱手冊頁。

/etc/inittab

到目前為止,您可能想知道,為什么在有些系統(tǒng)上需要按 Ctrl-Alt-Delete 鍵來重新啟動,或者這個運行級別設置是如何配置的。記得 /etc/inittab 中的 id 字段嗎?當然,/etc/inittab 中還有其他字段,而且其中的一些目錄下(比如 rc1.d 或 rc5.d )還有一系列 init 腳本,其中數(shù)字就是在那個目錄下腳本所應用的運行級別。 清單 8 顯示了我們的 Fedora 8 系統(tǒng)上一個完整的 inittab。

清單 8. Fedora 8 上的完整 inittab

#
# inittab This file describes how the INIT process should set up
# the system in a certain run-level.
#
# Author: Miquel van Smoorenburg,
# Modified for RHS Linux by Marc Ewing and Donnie Barnes
#
# Default runlevel. The runlevels used by RHS are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault:
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
# When our UPS tells us power has failed, assume we have a few minutes
# of power left. Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon


和往常一樣,以 # 開始的是注釋,其他行有幾個以如下格式表示的字段:

id:runlevels:action:process

id

是一個惟一標識符,由 1~4 個字符構成。舊版本限制為 2 個字符,因為您通常會看到只使用 2 個字符。

runlevels

列出針對該 id 的活動應該操作的運行級別。如果沒有列出任何運行級別,在所有運行級別下執(zhí)行這一操作。

action

描述幾個可能執(zhí)行的操作

process

當操作在這個線路上被執(zhí)行時,告知哪個進程應該運行,如果有的話。

在 /etc/inittab 中可能指定的一些常見操作,如 表 3 所示。關于 inittab 的其他可能性見手冊頁。

表 3. 一些常見的 inittab 操作
操作

目的

respawn

在進程終止時重啟進程。通常用于 getty 進程,該進程用于監(jiān)控登錄。

wait

當特定運行級別輸入后立即啟動進程,等待終止直至 init 開始運行。

once

當特定運行級別輸入后立即啟動進程。

initdefault

指定系統(tǒng)引導之后要輸入的運行級別。

ctrlaltdel

當 init 接收到 SIGINT 信號后執(zhí)行相關進程,比如,有人在系統(tǒng)控制臺上按了 CTRL-ALT-DEL。

清單 9 只顯示了 清單 8 中針對 Ctrl-Alt-Delete 的條目?,F(xiàn)在,您明白了為什么按 Ctrl-Alt-Delete 鍵會導致系統(tǒng)重新啟動。

清單 9.捕獲 Ctrl-Alt-Delete

# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

初始化腳本

您可能會注意到 清單 8 中的這幾行,比如

l5:5:wait:/etc/rc.d/rc 5

在本例中,不管輸入的運行級別是不是 5,init 將使用參數(shù) 5 運行 /etc/rc.d/rc 腳本(或命令)。init 將等待直至該命令完成,然后再執(zhí)行其他操作。

啟動系統(tǒng)、修改運行級別或關機時 init 使用的那些腳本通常存儲在 /etc/init.d 或 /etc/rc.d 目錄下。rcn.d 目錄下的一系列符號鏈接,每個運行級別 n 有一個目錄,控制當輸入一個運行級別時腳本是否啟動,或當離開時腳本是否停止。這些鏈接以一個 K 或一個 S 開頭,緊接著是一個 2 位數(shù)的數(shù)字,然后是服務名,如 清單 10 所示。

清單 10.  Init 腳本

[root@pinguino ~]# find /etc -path "*rc[0-9]*.d/???au*"
/etc/rc.d/rc2.d/S27auditd
/etc/rc.d/rc2.d/K72autofs
/etc/rc.d/rc4.d/S27auditd
/etc/rc.d/rc4.d/S28autofs
/etc/rc.d/rc5.d/S27auditd
/etc/rc.d/rc5.d/S28autofs
/etc/rc.d/rc0.d/K72autofs
/etc/rc.d/rc0.d/K73auditd
/etc/rc.d/rc6.d/K72autofs
/etc/rc.d/rc6.d/K73auditd
/etc/rc.d/rc1.d/K72autofs
/etc/rc.d/rc1.d/K73auditd
/etc/rc.d/rc3.d/S27auditd
/etc/rc.d/rc3.d/S28autofs
[root@pinguino ~]# cd /etc/rc.d/rc5.d
[root@pinguino rc5.d]# ls -l ???a*
lrwxrwxrwx 1 root root 16 2008-04-07 11:29 S27auditd -> ../init.d/auditd
lrwxrwxrwx 1 root root 16 2008-04-01 07:51 S28autofs -> ../init.d/autofs
lrwxrwxrwx 1 root root 15 2008-04-01 14:03 S44acpid -> ../init.d/acpid
lrwxrwxrwx 1 root root 13 2008-04-01 07:50 S95atd -> ../init.d/atd
lrwxrwxrwx 1 root root 22 2008-04-01 07:54 S96avahi-daemon -> ../init.d/avahi-daemon
lrwxrwxrwx 1 root root 17 2008-11-17 13:40 S99anacron -> ../init.d/anacron

您可以看到在所有運行級別下 audit 和 autofs 服務有 Knn 個條目,運行級別 3 和 5 下有 Snn 個條目。S 表示當輸入運行級別時服務已啟動,而 K 表示服務應該停止。鏈接名稱的 nn 部分表示服務啟動或暫停的優(yōu)先級別。在該示例中,audit 在 autofs 之前啟動,且在其后停止。

參閱手冊頁,了解關于 init 和 inittab 的更多信息。

Init vs. Upstart

正如我們所看到的,傳統(tǒng)的引導 Linux 系統(tǒng)方法是基于 UNIX System V init 進程的。它涉及到加載一個初始 RAM 磁盤(initrd),然后將控件傳給一個名為 init 的程序,通常作為 sysvinit 包的一部分安裝的一個程序。init 程序然后以預先定義的順序運行一系列腳本來啟動系統(tǒng)。如果預期的一些信息不可用,init 進程會等待直至可用。而這對于在系統(tǒng)啟動時一切都是已知且連接的系統(tǒng)來說很適合,帶熱插拔設備的系統(tǒng)、網絡文件系統(tǒng)、甚至在啟動時不能使用的網絡接口都面臨著新的挑戰(zhàn)。的確,等待可能很長時間內都不可用的硬件,或者就算是相對較長的時間,都不是很理想。

另一個初始化進程 upstart 是在 2006 年 Ubuntu 6.10 ("Edgy Eft") 中第一次引入。目前在 Ubuntu 和 Fedora,還有其他系統(tǒng)中已經取代了 init 進程,盡管依然有 init 的痕跡,upstart 的強大功能在一段時間內可能還沒有被意識到。

相比早期系統(tǒng)中所用的 init 腳本的靜態(tài)集合,upstart 系統(tǒng)是事件 驅動的,事件可能被硬件改動觸發(fā),也可被啟動或關機或任務所觸發(fā),或者也可能被系統(tǒng)上的任何其他進程所觸發(fā)。事件用于觸發(fā)任務 或服務,統(tǒng)稱為作業(yè)。因此,比如連接到一個 USB 驅動器可能導致 udev 服務發(fā)送一個 block-device-added 事件,這可能引起一個預定任務檢查 /etc/fstab 和掛載驅動器(如果需要的話)。再如,一個 Apache web 服務器可能只有當網絡和所需的文件系統(tǒng)都可用時才能啟動。

upstart 初始化程序代替了 /sbin/init。Upstart 作業(yè)在 /etc/init 目錄及其子目錄下被定義。upstart 系統(tǒng)目前將處理 /etc/inittab 和 System V init 腳本。在諸如近來的 Fedora 版本的系統(tǒng)上,/etc/inittab 可能只含有 initdefault 操作的 id 項。目前 Ubuntu 系統(tǒng)默認沒有 /etc/inittab,如果您想要指定一個默認運行級別的話,您可以創(chuàng)建一個。

Upstart 也使用 initctl 命令來支持與 upstart init 守護進程的交互。這時您可以啟動或終止作業(yè)、列表作業(yè)、以及獲取作業(yè)的狀態(tài)、發(fā)出事件、重啟 init 進程,等等。 清單 11 顯示了如何使用 initctl 來獲取 Fedora 13 系統(tǒng)上的一個 upstart 作業(yè)列表。

清單 11.使用 initctl 與 upstart init 守護進程交互

[ian@echidna ~]$ initctl list
rc stop/waiting
tty (/dev/tty3) start/running, process 1486
tty (/dev/tty2) start/running, process 1484
tty (/dev/tty6) start/running, process 1492
tty (/dev/tty5) start/running, process 1490
tty (/dev/tty4) start/running, process 1488
plymouth-shutdown stop/waiting
control-alt-delete stop/waiting
system-setup-keyboard start/running, process 1000
readahead-collector stop/waiting
vpnc-cleanup stop/waiting
quit-plymouth stop/waiting
rcS stop/waiting
prefdm start/running, process 1479
init-system-dbus stop/waiting
ck-log-system-restart stop/waiting
readahead stop/waiting
ck-log-system-start stop/waiting
start-ttys stop/waiting
readahead-disable-services stop/waiting
ck-log-system-stop stop/waiting
rcS-sulogin stop/waiting
serial stop/waiting

關于“Linux中運行級別與重新啟動的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI