此篇主要是紀錄 Coursera 平台上的課程 Google IT Support Professional Certificate 中 Operating Systems and You: Becoming a Power User 的第六個星期的上課筆記,大致上是一些作業系統操作上的介紹。其他的筆記也一併附上,未來整理好之後下方文字可以直接連結到該筆記:
- Navigating the System
- Users and Permissions
- Package and Software Management
- Filesystems
- Process Management
- Operating Systems in Practice (本篇)
目錄
Remote Access
Remote Connection and SSH
遠端連線是對於工作上來說相當方便,它能夠讓我們從世界各個地方管理多台機器。SSH 或稱安全外殼協定(Secure Shell Protocol)是一種加密的網路傳輸協定,它能夠在網路中為服務提供安全的傳輸環境,確保我們能用電腦安全地訪問另外一台電腦。
要使用 SSH 的話,需要在欲連接的電腦上安裝 SSH client,操作的電腦需要安裝 SSH server。SSH 會在後台運作,不斷檢查 client 是否正在嘗試連接,並且驗證請求。在 Linux 中比較常見的是 OpenSSH,Windows 則是 PuTTY。
要連上遠端,我們必須要先建立帳戶,並且取得欲連接的電腦的主機名或是 IP 位址。隨便舉個例子,如果直接嘗試 ssh [email protected]
,我們會收到無法確定主機真實性的訊息。也就是說我們以前從來沒連接過這台電腦,SSH client 無法驗證。若電腦已經保存這台主機,之後登入就不會收到這個訊息。
以安全性來說,我們可以透過密碼連接到 SSH,但這並不是最安全的方式。另外一種方式是使用 SSH 金鑰身份驗證(SSH authentication key),包含一組兩個密鑰,稱為私鑰(private key)和公鑰(public key)。 可以想像成兩把實體鑰匙,一把能夠將保險箱鎖起來,但是不能解鎖;另外一把可以解鎖,但是不能鎖上保險箱。這樣就可以確保只有擁有公鑰和私鑰的人才能使用保險箱。
另外一種可以安全連接到遠端機器的方式是透過虛擬私人網路或稱虛擬專用網路(VPN,Virtual Private Network)。它允許我們通過互聯網連接到專用網絡(例如說工作網路),可以把它想成比較複雜的 SSH。
Remote Connections on Windows
在 Windows 上我們使用免費開源的 PuTTY 當作連接工具,可以直接到它的網站下載,安裝好後就可以使用 PuTTY 的圖形介面使用它,介面如下:
欄位主要有主機名、連接埠以及連接類型。在連接埠預設是 22,這個是 SSH 協議的預設數字,而預設的連接方式也已經選好是 SSH,因此我們要做的就是輸入電腦的主機名或是 IP 位置。若有成功連接上,則會開啟一個新的 SSH session。
當然我們也可以透過 PowerShell 連接。
putty.exe -ssh [email protected] 22
-ssh
指的是想通過 SSH 連接,後面就和之前一樣加上 user@IP
的形式,並在最後指定連接埠為 22
。
PuTTY 還有一個叫做 Plink 或是 PuTTY link 的工具,我們可以用它來建立遠端 SSH 連線。SSH 非常好用,尤其是若我們希望從 Windows 電腦連接到 Linux 系統時。
而微軟還有提供另外一種連接到 Windows 電腦的方式,叫做遠端桌面協定(Remote Desktop Protocol,RDP),也有適用於 Linux 和 OS 10 的 RDP client。在 Windows 上,我們透過「本機」→滑鼠右鍵「內容」→「遠端設定」進行相關設定。(不過 Windows 10 家用版似乎不支援遠端桌面,不然下方可以看到關於遠端桌面的選項)
Remote Connection: File Transfer on Linux
我們都曾經將檔案傳送給別人過,而遠端連線也是一種方法。安全複製(secure copy,SCP)是指在本地主機和遠端主機間,基於 SSH 安全傳輸檔案的協定或是程式本身。使用方式也很簡單,直接呼叫 scp
指令:
scp /home/alex/Desktop/myfile.txt [email protected]
scp
後接著檔案位置,並輸入我們要傳送的位置。過程中會連線到遠端主機,因此會需要輸入密碼。複製完後就可以直接驗證是否有該檔案。
Remote Connection: File Transfer on Windows
介紹完 Linux 的遠端傳輸檔案,再回頭看 Windows。PuTTY 支援 SCP 協議,putty 套件內有個稱作 putty 安全複製用戶端(puTTY Secure Copy Client)或 pscp.exe 的工具。
打開 PowerShell 後輸入:
pscp.exe [檔案位置] [email protected]
操作後也一樣可以立即驗證是否有成功傳輸。
不過使用 PuTTY 或 SCP 傳輸文件可能會有點耗時,尤其是電腦有多台的狀況。因此在 Windows 上有一個內建的機制,可以用「共享」資料夾的概念來共享檔案。
使用 PuTTY 或 SCP 傳輸文件可能會有點耗時,尤其是當您需要將文件傳輸到多台機器時。 作為替代方案,Windows 提出了一種內置機制,通過使用共享文件夾的概念來共享文件。 針對要共享的資料夾點按右鍵「授予存取權給」→「特定人員」,將會開啟視窗進行設定。
另外我們一樣能夠使用 PowerShell 進行操作,利用 net share
命令。
net share ShareMe=C:\Users\alex\Desktop\ShareMe /grant:everyone full
以上命令的意思是,我希望能夠授權給網路上的每個人在 ShareMe
資料夾上有完整的權限。
補充資料
Virtualization
Virtual Machine
在這邊稍微介紹了虛擬機器 VirtulBox。以 Ubuntu 為例子,我們需要先下載映像檔後才可以安裝至 VirtualBox 並啟用它。這部分因為我做過很多次,網路上也很多教學,這邊就不再多做筆記。
虛擬機器是蠻好用的東西,可以依我們的需求設置機器,也可以亂玩,玩壞了之後再重建也沒關係。即使不再需要這台虛擬機器,直接刪除即可,以概念上來說相當簡單。
Logging
System Monitoring
在電腦中,記錄檔(logfile)是一個記錄了發生在執行中的作業系統或其他軟體中的活動的檔案,它就像日記一樣紀錄了各種在系統上發生的事情。不論是何時關閉何時啟動、何時下載了驅動程式或是哪一位使用者登入,都會被寫入 log 檔裡面。
The Windows Event Viewer
在 Windows 中,這些記錄檔儲存在事件檢視器(Event Viewer)中,只要對於系統有任何的問題,第一步可以先查看事件檢視器。我們可以透過工具列搜尋「事件檢視器」查看,或是在命令視窗中輸入 eventvwr.msc
打開該工具。
事件檢視器預設是顯示最近重要事件的摘要,左方可以看到不同事件的分組,像是自訂檢視、Windows 記錄等等。在自訂檢視的選項中我們可以自己建立一個篩選器,這樣就可以設定並查看自己感興趣的事件。可以設定的項目很多,像是事件等級、時間、來源等等都可以進行篩選。
而另外一個項目 Windows 記錄通常會紀錄所有在操作系統的事件,假設我們在啟動時遇到驅動程式失敗,那我們可以從名稱為「系統」的項目著手 debug。若是牽涉到要查詢是誰登入,則可以查看「安全性」項目進行檢核。
下面一個項目是「應用程式及服務紀錄檔」,則包含了各種應用程式或是系統組鍵的事件,例如說我使用 PowerShell 遇上了問題,那麼我們可以透過這個紀錄檔進行檢查。
在機器故障時,這些 log 檔都很有用處,可以提供錯誤報告的背景訊息,相當詳細。
Linux Logs
在 Linux 中的 log 檔存在 /var/log
中,var
是 variable,也就是變量,代表不斷變化的文件保存的位置。我們可以透過 ls /var/log
查看該目錄,每一個檔案都儲存了特定的訊息。
/var/log/auth.log
:授權和安全相關的事件紀錄。 /var/log/kern.log
:kernel 相關訊息。 /var/log/dmesg
:系統啟動的相關訊息。 /var/log/syslog
:幾乎記錄系統上所有內容。
(其實看起來好像都蠻白話的)
如果說遇到問題可以直接打開文件查看,不過缺點就是整個資料量會很大。
less /var/log/syslog
沒意外的話應該是會看到很嚇人的紀錄檔 😍
簡單來說最前面的字串是時間戳,有時候我們可能會看到另外一種時間格式,例如 1501538594。這種格式的時間戳被稱為 Unix 時間或 epoch time,它是從 1970 年 1 月 1 日 00:00 以來的秒數。至於為什麼是 1970 年,沒有特別的原因,貝爾實驗室當初只是因為方便才選擇了這個年份。下一個字串代表發生事件的主機名稱,再來是紀錄檔所指向的服務,最後是發生的事件。
有一種機制叫做 log rotation,中文是日誌輪替,是系統管理中一個自動歸檔過期日誌文件的過程。假如說我想調查一個月前發生的事情,那我可能就必須更改日誌輪替的時間設置,這樣才能確保系統不會刪除一個月前的舊事件。
假如我們需要管理多個系統,並且希望能集中在一個地方查看這些紀錄檔,則可以使用一個方法叫做 centralized logging,正確的中文我不太確定叫做什麼,大約是集中式日誌紀錄?
Working with Logs
在察看 log 檔時,和查看資料庫一樣,我們要做的第一件事情是篩選、搜尋特定內容。系統會以非常標準的方式在記錄訊息,所以我們不用擔心會篩選不到。假設現在系統出現大量錯誤怎麼搜尋?很簡單,就是搜尋 error
。
less /var/log/syslog | grep error
那麼假設是有某個特定應用程式出錯呢?那麼就是搜尋特定應用程式的名字。而若是要調查某個時間點發生的事情,那我們可以透過檢查那個時間附近的時間戳。
通常我們會希望能夠從篩選後的頂部或底部查看,因為錯誤很可能是因為一個根本原因發生的連動。而若是沒有看到任何線索,那我們可能就會從底部一個一個回溯,直到找到問題點為止。
tail -f /var/log/syslog
補充資料
Operating System Deployment
Imaging Software
這裡大概用了幾十秒的時間講解了映像檔的方便性。
Operating Systems Deployment Methods
我們可以使用系統映像還原電腦,這種工具叫做 disk cloning tool,很白話,硬碟複製。它可以製作整個硬碟的副本,讓我們能備份目前的機器或是藉由這種映像檔去設置新的機器。有很多工具可以幫助完成這項任務,像是 Clonezilla、Symantec Ghost 等等。另外一種選擇是 disk-to-disk cloning,可以將外部硬碟驅動連接到要複製的機器上面,例如將 HDD 或 SSD 等硬碟連接,並且使用任何一種硬碟複製工具。
接下來我們實作一下把硬碟卸載:
umount /dev/sdd
接著利用 dd
指令,dd
本身可用於各種的資料拷貝:
sudo dd if=/dev/sdd of=~/Desktop/my_usb_image.img bs=100
這個代表了我們複製了 /dev/sdd
的內容,並把這個內容用映像檔的方式保存到桌面上。若打開這個文件,就會看到和來源完全相同的內容。
另外一種製作映像檔的方式是直接從網路請求。因為目前系統製造商都發展得蠻成熟的,已經比較不會有太亂或其他獨立來源,因此幾乎可以透過官方網站抓取我們想要的作業系統。若管理的作業系統相當大量,則標準化整個使用的硬碟類型會比較好,在部署上會比較輕鬆。
補充資料
- dd(1) — Linux manual page
- How to clone a hard drive on Windows
- OS deployment methods with Configuration Manager
- Android – Reset your device to factory settings
- iOS – Restore your device to factory settings
- Full OTA Images for Nexus and Pixel Devices
- If your iPhone, iPad, or iPod touch won’t turn on or is frozen