Linux也有後悔藥,五種方案快速恢復你的系統

騰訊雲加社群發表於2019-03-03

歡迎大家前往騰訊雲+社群,獲取更多騰訊海量技術實踐乾貨哦~

本文由信姜緣 發表於雲+社群專欄

新手在學習Linux系統的時候,難免會遇到命令輸錯,或系統出錯的難題。那麼如何快速解決呢?本文就先給你一個後悔藥,讓你快速備份並恢復Linux系統。本文將以Ubuntu為例,在這之前,你需要一臺伺服器,你可以免費使用騰訊雲開發者實驗室進進行試驗。

備份

當然,能夠還原伺服器上所做更改的最簡單、最安全的方法是對重要檔案執行常規例行備份。

Linux系統上有大量備份的軟體。我們要研究備份工具之間的差異,找出最適合您需求的工具。更重要的是定期驗證您的備份,以確保它們正常執行。

備份提供了一種非常好的方法來恢復伺服器的損壞。只要複製的重要資料儲存在其他伺服器,它們就可以在資料損壞或刪除時發揮效用。

備份包括完全備份(完全備份所有資料),差異備份(備份自上次全備份以來已更改的每個檔案)和增量備份(備份自上次完全備份或差異備份以來檔案中的資料更改)。

這些級別的組合通常彼此聯合使用以完全備份檔案,通常,您可以恢復單個檔案,而無需還原整個檔案系統。如果您不小心刪除或修改了檔案,可以用備份快速恢復。

版本控制

與備份有些類似的策略是版本控制。雖然不是備份整臺計算機的理想解決方案,但如果您只想將檔案恢復到以前的狀態,則版本控制可能正是您所需要的。

版本控制系統,如gitmercurial,允許您跟蹤檔案的更改。這意味著,如果您將配置目錄/etc放在版本控制下,則可以輕鬆地在由於更改而導致檔案損壞的情況下還原更改。

簡而言之,您可以使用以下命令在Ubuntu上安裝git:

sudo apt-get update
sudo apt-get install git
複製程式碼

安裝完成後,您需要輸入以下內容來設定一些配置選項:

git config --global user.name "your_name"
git config --global user.email "your_email"
複製程式碼

完成此操作後,切換到要跟蹤更改的目錄。我們將使用此示例中的目錄。另一個置於版本控制之下的好地方是您的主目錄。我們可以通過輸入以下內容來初始化git儲存庫:/etc

cd /etc
sudo git init
複製程式碼

然後,您可以通過輸入以下內容新增此目錄(和子目錄)中的所有檔案:

sudo git add .
複製程式碼

通過輸入以下內容來提交更改:

git commit -m "Initial commit"
複製程式碼

您的檔案現在將受版本控制。當您對此目錄中的檔案進行更改時,您將需要重新執行最後兩個命令(使用不同的內容而不是“Initial commit”)。

然後,您可以通過日誌查詢雜湊值將檔案還原到以前的狀態:

git log
複製程式碼
commit 7aca1cf3b5b19c6d37b4ddc6860945e8c644cd4f
Author: root 
Date:   Thu Jan 23 13:28:25 2014 -0500

    again

commit 4be26a199fd9691dc567412a470d446507885966
Author: root 
Date:   Thu Jan 23 13:20:38 2014 -0500

    initial commit
複製程式碼

然後通過下面的命令恢復檔案,例如:

git checkout commit_hash -- file_to_revert
複製程式碼

請記住,只有在準備好進行修改時才能定期提交git。

使用程式包管理器還原更改

有時,您可以使用apt包管理器進行一些更改。程式包管理器可以幫助您將程式包還原為預設設定。我們將在下面討論這些情況。

使用Apt解除安裝軟體包

有時,您安裝一個軟體包卻發現它不是您想要保留的東西。您可以通過輸入以下內容來刪除apt中的包:

sudo apt-get remove package
複製程式碼

但是,上面的命令將使配置檔案保持不變。但如果您嘗試從系統中完全刪除軟體包,則可以使用purge命令,如下所示:

sudo apt-get purge package
複製程式碼

您可以使用autoremove apt命令解除安裝任何不再需要的自動安裝的依賴項:

sudo apt-get autoremove --purge
複製程式碼

使用apt安裝軟體包時發生的另一個問題是“元軟體包”很難正確刪除。

元包是簡單的依賴列表的包。它們本身並沒有安裝任何東西,而是一個其他包的列表。很難以自動方式完全刪除。

一個可以提供幫助的工具就是deborphan包:

sudo apt-get install deborphan
複製程式碼

刪除後設資料包後,可以執行orphaner命令查詢軟體包解除安裝所留下的孤立資訊。這將幫助您找到未通過常規方法刪除的包。

查詢雜散檔案的另一種方法是通過mlocate包。安裝:

sudo apt-get install mlocate
複製程式碼

之後,您可以通過以下命令來更新檔案索引:

sudo updatedb
複製程式碼

然後,您可以搜尋包名稱,以檢視引用該包的檔案系統(apt索引之外)是否有其他位置。

locate package_name
複製程式碼

您還可以通過檢查apt日誌來檢視後設資料包安裝的檔案:

sudo nano /var/lob/apt/history.log
複製程式碼

恢復預設檔案

有時,在配置期間,您需要更改配置檔案,並希望恢復預設檔案。

如果要將當前配置檔案保留為備份,可以通過輸入以下內容將其複製:

sudo mv file file.bak
複製程式碼

如果您沒有對相關目錄的寫入許可權,則必須使用上述命令中的sudo。

刪除檔案或將其移開後,您可以重新安裝軟體包並檢查是否缺少任何配置檔案:

sudo apt-get -o Dpkg::Options="--force-confmiss" install --reinstall package_name
複製程式碼

如果您不知道哪個軟體包負責需要還原的配置檔案,則可以使用dpkg程式:

dpkg -S file_name
複製程式碼

如果您只想執行某些安裝期間發生的初始程式包配置步驟以更改某些值,則可以使用下面的命令:

dpkg-reconfigure package_name
複製程式碼

這將重新啟動最初安裝程式時的配置。

查詢檔案的預設許可權

修改檔案許可權時會發生另一種常見情況。有時,您為了測試目的而更改檔案的許可權但是事後想要恢復其許可權。

通過查詢哪個包擁有檔案,可以找出您的發行版打包檔案的預設許可權。您可以通過發出以下命令來執行此操作:

dpkg -S filename
複製程式碼

這將告訴您與該檔案關聯的包。例如,如果我們想要找出/etc/deluser.conf檔案的包所有者,我們可以輸入:

dpkg -S /etc/deluser.conf
複製程式碼
adduser: /etc/deluser.conf
複製程式碼

如您所見,它告訴我們adduser包負責該檔案。然後,我們可以通過更改為apt存檔來檢查該包的.deb檔案:

cd /var/cache/apt/archive
複製程式碼

在此目錄中,您將找到系統上安裝的軟體包的.deb檔案。如果找不到與您正在使用的包的匹配的檔案,則需要使用以下命令從儲存庫重新下載它:

sudo apt-get download package
複製程式碼

如果我們的adduser包沒有.deb,我們可以通過輸入以下內容獲取一個:

sudo apt-get download adduser
複製程式碼

一旦檔案出現在該目錄中,我們可以通過輸入以下內容來查詢它安裝的檔案的預設屬性:

dpkg -c file.deb
複製程式碼

對於adduser程式,可能看起來如下:

dpkg -c adduser_3.113ubuntu2_all.deb
複製程式碼
drwxr-xr-x root/root         0 2011-10-19 18:01 ./
drwxr-xr-x root/root         0 2011-10-19 18:01 ./etc/
-rw-r--r-- root/root       604 2011-10-19 18:01 ./etc/deluser.conf
drwxr-xr-x root/root         0 2011-10-19 18:01 ./usr/
drwxr-xr-x root/root         0 2011-10-19 18:01 ./usr/sbin/
-rwxr-xr-x root/root     35120 2011-10-19 18:01 ./usr/sbin/adduser
-rwxr-xr-x root/root     16511 2011-10-19 18:01 ./usr/sbin/deluser
. . .
複製程式碼

如您所見,我們可以驗證預設包是否為root設定讀/寫訪問許可權,以及為所有其他使用者設定讀訪問許可權。

結論

現在你應該有一些策略來扭轉你所犯的錯誤,並提出規劃相關的應急計劃。上面提到的五種方案都需要提前備份。

您可以購買一臺新的伺服器進行嘗試,不過我還是建議您用你免費使用騰訊雲開發者實驗室進進行試驗。


參考文獻:《How To Use Backups, Git, and Apt-Get to Undo Changes on a Linux VPS》

問答

linux實時排程演算法?

相關閱讀

5 種 Docker 日誌最佳實踐

你的nginx訪問過慢?增加個模組吧!

MySQL 8.0 版本功能變更介紹

此文已由作者授權騰訊雲+社群釋出,原文連結:https://cloud.tencent.com/developer/article/1159250?fromSource=waitui

歡迎大家前往騰訊雲+社群或關注雲加社群微信公眾號(QcloudCommunity),第一時間獲取更多海量技術實踐乾貨哦~

海量技術實踐經驗,盡在雲加社群

相關文章