企業Linux系統的運維成爲目前企業關注的重點。做爲一種優秀的開源網絡操做系統,如何充分利用Linux的工具並使用相應的方法來提升運維效率是很是重要的工做。在第一篇文章中,咱們介紹了運維相關的4個應用工具的使用和實戰,本文做爲該專題的第二篇文章,將着重介紹運維過程當中的重要原則和方法,包括如何避免產生問題以及如何解決系統問題的內容,覺得企業Linux的實際運維提供有益參考。node
Need to Know I:系統管理員與系統用戶加強溝通算法
做爲一個系統管理員的主要職責之一是與系統用戶通訊。當爲維修系統而停機時,當上線一類新軟件以及發佈用戶如何訪問新的系統打印機時,須要發佈公告。甚至能夠開始充當一個地方小報的角色,讓用戶知道新員工、RIF、生日、公司野餐信息等。shell
不一樣的通訊有不一樣的側重點。例如,在兩個月內的公司野餐的信息與將在五分鐘內關閉系統的消息的敏感度是不同的。爲了知足這些不一樣的需求,Linux 提供了不一樣的通訊方式。下面的列表描述和對比了最經常使用的方法。這些方法一般會提供給全部用戶,除了當天消息一般只爲具備 root 權限的用戶保留外。緩存
有以下工具(實用程序)能夠加強系統管理員與系統用戶的通訊和溝通。安全
Write:使用 write 實用程序能夠與在本地系統上登陸的用戶進行通訊。例如,可使用它來要求用戶中止運行拖慢系統的程序,該用戶可能會回覆說:他將在三分鐘內完成。用戶還可使用 write 來要求系統管理員掛載磁帶或恢復文件。write 發送的消息可能不會出如今圖形環境中。bash
IM:Empathy IM(Internet 消息 ; live.gnome.org/Empathy)實用程序使用 Google Talk、MSN、IRC、AIM、Facebook、雅虎、ICQ 以及其它協議,支持文本、語音、視頻聊天和文件傳輸。使用時,可點擊主菜單:Applications?Internet?Empathy Internet Messaging。IM 常見於許多工做場所,能夠用它來聯繫 Red Hat 支持。服務器
Wall:wall(write all)實用程序能夠有效地與全部登陸用戶即時通訊。此實用程序從標準輸入得到輸入,工做方式很像 write,只不過用戶不能使用 wall 來只寫回你一我的。當要關閉系統或在其它危機狀況下,可以使用 wall。沒有登陸的用戶將沒法獲得消息。只有在危機狀況下才可使用 root 權限的用戶身份運行 wall; 它會中斷任何人在作的任何工做。wall 發送的消息可能不會出如今圖形環境中。網絡
Email:電子郵件用於與一個或多個系統和 / 或遠程用戶進行不太緊急的通訊。發送郵件後,你必須願意等待每一個用戶來閱讀它。電子郵件可用於提醒忘了註銷的用戶,他們的賬單已逾期,或他們使用了太多的磁盤空間。與經過 write 收到的消息相反,用戶能夠輕鬆地永久存儲經過電子郵件接收的消息記錄,所以他們能夠隨時跟蹤重要的細節。舉例來講,使用電子郵件告知用戶一個新的複雜操做過程,以便每一個用戶均可以保留一份信息副本,以供參考。session
當日消息:用戶每次在文本環境中登陸時會看到當日消息,而當他們打開終端仿真器窗口時則不會看到。必要時,能夠編輯 /etc/motd 文件以更改此消息。當日消息能夠提醒用戶將要進行的按期保養、新的系統功能或程序的更新信息。 運維
Need to Know II:運維過程當中可能產生的問題
即便是經驗豐富的系統管理員也會犯錯誤,固然新的系統管理員犯的錯誤會更多。雖然能夠經過細心閱讀以及遵循軟件文檔的指示來下降出問題的可能性,但不少事情仍然會出問題。一個列表無論多長,都不多是全面的,由於天天都會產生新的問題。本節將介紹一些常見技能,以免問題的出現。
第一,執行按期備份:對一個系統管理員來講,沒有什麼比永遠丟失重要信息更痛苦。若是本地系統支持多用戶,有最近的備份多是防止公共譴責的惟一保障。若是是單用戶系統,當丟失一塊硬盤或誤刪文件時,有最近的備份也確定使你快樂。
第二,閱讀和遵循指示 :軟件開發人員提供了文檔。即便已經安裝了軟件包,也要再次仔細閱讀說明書。它們可能已有所改變,或者你可能記得不對。軟件更改比書的修訂更快速,所以沒有任何說明書能夠作到萬無一失。因此,須要尋找最新的在線文檔進行參考。/usr/share/doc 目錄中有許多實用程序、庫和軟件包的相關信息。
當指示不明確時,須要尋求幫助:若是指示彷佛不明確,嘗試找到明確的指示。
最後,在關鍵文件中刪除或誤輸信息:一個確定會給本身帶來惡夢的方式是執行命令。也許沒有其它命令會使 Linux 系統無用的如此之快。惟一的辦法是從安裝介質啓動以恢復已安裝的系統,並從最近的備份中恢復丟失的文件。雖然這個例子描述的是一個極端的狀況,許多文件都是系統正常運做的關鍵。刪除這些文件之一或在其中的文件中誤輸信息,都幾乎能夠確定會形成問題。例如若是直接編輯 /etc/passwd 文件,在某個字段中輸入錯誤信息會致使一個或多個用戶沒法登陸。此外,不要在 rm – rf 中使用包含通配符的參數,輸入命令後要暫停一下並閱讀它,而後才按回車鍵。仔細檢查所作的一切,在對關鍵文件進行編輯以前必定要爲其製做一份副本。尤爲值得注意:rm 與通配符一塊兒使用時要當心。當必須在 rm 命令中使用包含通配符的參數(如 *)時,指定 i 選項以使 rm 在刪除每一個文件以前進行提示。或者,能夠以相同的參數使用 echo 命令,以查看哪些文件將被刪除。當使用 root 權限時,這種檢查就顯得尤其重要。
方法:運維過程當中的實際問題解決方法
系統管理員的責任是保持系統安全和順利運行。當用戶遇到問題時,一般會找管理員幫助其回到正軌。本節建議的方法能夠保持用戶滿意度和系統最佳性能。
「十步法」爲用戶解決沒法登陸問題
當用戶沒法在系統上登陸時,根源多是用戶錯誤或系統的軟硬件故障。下面的十個步驟能夠幫助肯定問題所在。
第一步:檢查 /var/log 中的日誌文件。/var/log/messages 文件收集系統錯誤、來自守護進程的消息以及其它重要信息。它可能會代表問題的緣由或更多症狀。另外,檢查系統控制檯。有時系統問題相關的消息不寫入 /var/log/messages 中(例如一個完整的磁盤),而是顯示在系統控制檯上。
第二步:肯定是否只有一個用戶或一個用戶的終端 / 工做站有問題或者是否問題更廣。
第三步:肯定該用戶沒有打開其 CAPS LOCK 鍵。
第四步:確保該用戶的主目錄存在,而且在 /etc/passwd 文件中有對應於該用戶的條目。驗證該用戶擁有其主目錄和啓動文件,而且它們是可讀的(並且該用戶對其主目錄有可執行權限的狀況下)。確認在 /etc/passwd 中的該用戶登陸 shell 條目是準確的,而且存在指定的 shell。
第五步:若是用戶忘記了本身的密碼,則更改該用戶的密碼。
第六步:檢查該用戶的啓動文件(.profile、.login、.bashrc 等)。該用戶可能已對這些文件之一進行了編輯,並引入了禁止登陸的語法錯誤。
第七步:檢查終端或終端與計算機之間的數據線。嘗試關閉終端或顯示器,而後再從新打開。
第八步:當問題彷佛比較廣時,檢查可否從系統控制檯登陸。確保系統未在單用戶模式。若是沒法登陸,系統可能已崩潰,須要從新啓動它,並執行任何須要的恢復步驟。
第九步:使用 df 來檢查整個文件系統。若是 /tmp 文件系統或該用戶的主目錄已滿,登陸有時會以意想不到的方式失敗。在某些狀況下,可能可以登陸到文本環境,但不能登陸到圖形環境。用戶登陸時啓動的應用程序沒法建立臨時文件,或沒法更新用戶主目錄中的文件時,登陸過程自己可能會終止。
第十步:若是用戶經過網絡鏈接登陸,須要從新啓動該用戶嘗試使用的服務(例如 ssh)。並請確保兩個系統上的時鐘是同步的。當使用 HTTPS、ssh、LDAP 尤爲是 kerberos 等加密登陸方法時,時鐘設置的時間不一樣可能會致使登陸失敗。還要請確保 DNS 正常工做。一些網絡服務與名稱解析的相關性比較強,包括反向查找(即名稱解析問題會致使拖慢經過 ssh 的鏈接)。
加快系統運行速度
當系統因爲不明緣由運行緩慢時,也許是用戶註銷時沒有關閉進程。此問題的表現包括很長的響應時間和很大的系統負荷,如使用 w 或 uptime 所示的數據大於 1.0。最好運行 top 以迅速找到流氓進程。使用 ps – ef 可列出全部進程。在 ps – ef 輸出中要找的內容是大量的 TIME 列。例如,若是 Firefox 進程的 TIME 字段超過 100.0,這一進程有可能運行不正常。然而,若是該用戶正在執行大量的 Java 工做,而且已經登陸很長時間,這個值就多是正常的。檢查 STIME 字段以查看該進程啓動的時間。若是該進程的運行時間比用戶登陸在線的時間還長,最好終止它。
當用戶遇到問題,並在沒有通知任何人的狀況下離開無人值守的終端時,最好終止該用戶擁有的全部進程。若是用戶在控制檯上運行 GUI,終止啓動桌面環境的進程或窗口管理器自己。還要繼續查找包括 gnome-session、startkde 或其它以 wm 結尾的進程名。一般窗口管理器既是第一個也是最後一個要運行的進程,並在用戶註銷時退出。若是終止窗口管理器不起做用,可嘗試終止 X 服務器進程,這個進程一般列爲 /usr/bin/Xorg。若是上述操做失敗,當以該用戶身份登陸時,經過執行 kill – 15 – 1 命令或等效的 kill – TERM – 1 命令,能夠終止用戶擁有的全部進程。使用– 1 替換進程 ID 以告訴 kill 來給該用戶擁有的全部進程發送信號。例如,做爲 root 能夠輸入如下命令:
# su zach -c 'kill -TERM -1' |
若是不能終止全部進程(有時 TERM 沒法終止進程),可使用 KILL 信號(– 9)。下面這行必定會終止 Zach 擁有的全部進程,但不太友好:
# su zach -c 'kill -KILL -1' |
若是不包含 su zach – c,這個命令將關閉系統。
掌握和查找打開的文件
lsof(列出打開的文件)實用程序會顯示打開的文件名。其選項僅顯示某些進程,只有一個進程的某些文件描述符,或只有某些網絡鏈接(網絡鏈接使用文件描述符,就像普通文件同樣,lsof 也顯示這些)。使用 ps – ef 肯定了可疑進程後,輸入如下命令:
# lsof -s -p pid |
用可疑進程的進程 ID 替換 PID,lsof 會顯示 PID 進程打開的文件描述符列表。– s 選項顯示全部打開文件的大小,– p 選項則容許指定感興趣的進程 PID 號(若是組合這些選項,則 lsof 不會運行)。文件大小信息用於肯定該進程是否打開了一個很是大的文件。若是是這樣,須要聯繫該進程的全部者,或者在必要狀況下終止該進程。– rn 選項表示每 n 秒從新顯示一次 lsof 的輸出。
保留機器日誌以備審計
機器日誌包含如表 1 所示的信息,能夠幫助查找和修復系統問題。它用於記錄日誌中每一個條目的日期和時間。避免僅把日誌保留在計算機上,當系統關閉時,這將是最有用的。同時保留詳細描述用戶問題的電子郵件。一種策略是把郵件保存到你能夠讀取的單個文件或文件夾中。另外一種方法是設立郵件別名,以便用戶有問題時能夠發送郵件到別名。這個別名就能夠將郵件轉發給你,還能夠在歸檔文件中存儲副本。
表 1 機器日誌的分類
如下是 /etc/aliases 文件中條目的例子,能夠設置這種類型的別名:
trouble: admin,/var/spool/mail/admin.archive |
發送到 trouble 別名的電子郵件將被轉發到 admin 用戶,並同時存儲到 /var/spool/mail/admin.archive 文件中。
保持系統的運行安全
沒有任何使用撥號線路或公共訪問終端的系統是絕對安全的。不過,能夠經過常常更改 root 密碼並選擇難以猜想的密碼的方式,使系統儘量安全。不要告訴任何絕對不須要知道 root 密碼的人。還能夠鼓勵系統用戶選擇高難度密碼,並按期對其進行更改。
密碼
默認狀況下,Fedora/RHEL 上的密碼使用 MD5 哈希,這使得它們比使用 DES 加密的密碼更難以破解。固然若是加密的密碼很容易讓人找到或猜到,則差異不大。system-config-authentication 實用程序容許指定一個本地密碼哈希算法,可選擇高級選項選項卡,並從 Password Hashing Algorithm 下拉框選擇。
一個難以猜想的密碼是別人認爲不可能選擇的密碼。不要使用字典中的字、親人、寵物、朋友的名字或外語單詞。一個好的策略是選擇一個短語,包含一些標點符號(例如,在它們之間放置 ^)、大小寫混合,並用數字替換一些單詞的字母。一個好密碼的示例是 C&yGram5(candygrams)。理想狀況下,可使用 ASCII 字符的隨機組合,可是這將很難記住。
可使用幾種密碼破解程序,以找到選擇弱密碼的用戶。這些程序的工做原理是反覆哈希字典、短語、姓名和其它來源中的單詞。若是哈希密碼與程序的輸出相匹配,則該程序發現了用戶的密碼。兩個破解密碼的程序是 crack(crack包)和 john(www.openwall.com/john;john 包)。這些和許多其它程序以及安全性提示能夠從 CERT(www.cert.org,Computer Emergency Response Team 計算機應急反應小組)得到。
破解一個好密碼須要大量的計算能力。密碼破解程序通常首先看大寫字母、小寫字母和數字組成的字符集。當添加符號時,他們必須作更多的工做來破解密碼。此外,密碼越長,破解須要的計算能力就越多。密碼足夠長以便更難被破解,又要足夠短以便容易記住。8-20 個字符一般是一個很好的長度。密碼中要包含幾個如 #、@ 和 % 這樣的符號。若是時間太長以致於沒法破解你的密碼,作破解工做的人或機器就可能會轉移到容易破解的賬戶上。
Setuid 文件
確保只有具備 root 權限的用戶才能夠寫入包含 root 擁有程序的文件,並運行在 setuid 模式(例如,passwd 和 su)。另外,確保用戶不會把運行在 setuid 模式的程序以及 root 擁有的程序轉移到掛載系統上。這些程序能夠被用來繞過系統的安全性。防止用戶擁有 setuid 文件的一項技術是使用 nosuid 標誌來掛載,能夠在 fstab 文件中的標誌部分進行設置。
BIOS
許多機器中的 BIOS 能夠提供必定程度的保護,防止未經受權的人試圖修改 BIOS 或從新啓動系統。設置 BIOS 時,能夠查找 Security 部分。你也許能夠添加一個 BIOS 密碼。若是依賴 BIOS 密碼,在鎖定計算機的狀況下,使用主板上的跳線,一般很容易復位 BIOS 密碼。
root 的日誌文件和郵件
用戶常常給 root 和 postmaster 發送電子郵件來與系統管理員通訊。若是沒有把 root 的郵件轉發給本身,記得按期檢查 root 的郵件。使用 su 執行系統管理任務時,將不會收到到達 root 的提醒郵件。可是,可使用 su – c ‘ mail – u root ’命令來查看 root 的郵件。
按期檢查系統日誌文件以發現問題證據。一些重要文件包括 /var/log/messages,其中記錄了操做系統和一些應用程序的錯誤;/var/log/secure,其中包含了與系統安全性有關的消息 ; /var/log/maillog,其中包含郵件系統的錯誤;/var/log/cron,其中包含 crond 的消息。
logwatch 實用工具(logwatch 包)是一個用 Perl 編寫的報表編寫器,可發送有關日誌文件的電子郵件報告。默認狀況下,/etc/cron.daily/0logwatch 天天運行這個腳本並把其輸出郵發給 root。 更多信息參閱 logwatch 手冊頁和腳本自己。
監控磁盤使用狀況
系統可能早晚會用完磁盤空間。所以不要填滿一個分區。當一個分區至少有 5 %至 30 %的剩餘空間時,Linux 寫入文件的速度會明顯加快。若是一個分區的已使用空間超過其最大最優磁盤空間,就會下降系統性能。
碎片
當一個文件系統已滿時,它會變得支離破碎。這相似於 DOS 碎片的概念,但這幾乎是不明顯的並一般罕見於現代 Linux 文件系統上,由於 Linux 文件系統的設計是耐碎片的。若是不把文件系統填滿,可能永遠也不用擔憂碎片問題。若是文件系統上沒有空間了,則根本沒法寫入。
要檢查文件系統碎片,要卸載該文件系統,並在其上運行 fsck; 在 ext二、ext3 和 ext4 文件系統上使用– f 選項。 fsck 的輸出包括一個文件系統碎片百分數。經過備份能夠整理文件系統,首先使用 mkfs 作一個乾淨的空映像,而後恢復文件系統。使用哪一個工具來執行備份和恢復並不重要。
報告
Linux 提供了幾個程序,能夠報告誰正在使用哪些文件系統的多少磁盤空間。能夠參考 du、quota 和 df 手冊頁以及 find 實用程序手冊頁中的– size 選項。除了這些實用程序,還可使用磁盤配額系統管理磁盤空間。
快速增加的文件
增長文件系統上的可用空間量的四大策略是:壓縮文件、刪除文件、增大基於 LVM 的文件系統以及壓縮目錄。一些文件(如日誌文件和臨時文件)隨着時間的推移會不可避免地增加。例如,核心轉儲文件佔用了大量的空間,但不多須要。此外,用戶偶爾運行的程序可能會意外產生巨大的文件。做爲系統管理員,必須按期審查這些文件,使其不至失控。
若是一個文件系統很快耗盡空間(如在一個小時內,而不是幾個星期或幾個月內),首先弄清楚空間耗盡的緣由。可以使用 ps – ef 命令來肯定用戶是否已經建立了失控的進程,而且生成了巨大的文件。評估 ps 的輸出時,可尋找一個消耗了大量 CPU 時間的進程。若是這樣的進程正在運行,並建立了大文件,那該文件將持續增加以至須要不斷騰出空間。若是刪除了這個巨大的文件,其佔用的空間並不會被釋放,除非終止該進程。此時須要嘗試聯繫運行該進程的用戶,並要求他終止該進程。若是聯繫不到該用戶,請使用 root 權限本身終止該進程。
此外,還能夠截斷大的日誌文件而不是刪除它,雖然也可使用 logrotate 來更好地處理這個常見狀況。例如,若是因爲系統守護進程的錯誤配置,使得 /var/log/messages 文件變得很是大,可使用 /dev/null 來截斷它:
# cp /dev/null /var/log/messages |
或
# cat /dev/null > /var/log/messages |
或無須派生新進程 ,
# : > /var/log/messages |
若是刪除 /var/log/messages,必須從新啓動 rsyslogd 守護進程。若是不從新啓動 rsyslogd,將不會釋放文件系統上的空間。
當沒有任何進程消耗磁盤空間,而容量逐漸被用光時,就要找到不須要的文件,並將其刪除。在刪除以前可使用 cpio、dump 或 tar 歸檔這些文件。能夠安全地刪除大部分已有幾天不曾訪問的 core 文件。如下命令行可執行這項功能,而不刪除必要的 core 文件(如 /dev/core):
# find / -type f -name core|xargs file|grep 'B core file'|sed 's/:ELF.*//g'|xargs rm -f |
find 命令列出全部名爲 core 的普通文件,並將該列表發送到 xargs,xargs 在列表中的每一個文件上運行 file。file 實用程序顯示一個字符串,其中包含 B core file(建立的核心轉儲文件)這類須要刪除的文件。grep 命令從文件中過濾掉任何不包含此字符串的行。最後 sed 刪除冒號後的一切,使全部留在行上的只是 core 文件的路徑名 ; 而後 xargs 刪除該文件。
爲了騰出更多的磁盤空間,可仔細審查 /tmp 和 /var/tmp 目錄中的舊臨時文件並刪除。對 /var/mail、/var/spool 和 /var/log 中的磁盤使用狀況保持跟蹤。
刪除目錄中未使用的空間
包含太多文件的目錄一般效率不高。ext二、ext3 或 ext4 文件系統上的目錄在哪一點上變得效率不高的緣由不盡相同,但部分取決於它包含的文件的長度。最佳作法是保持目錄相對較小。一個目錄中最好包含較少的文件而不是幾百個文件(或目錄),多達數千個文件一般是很很差的作法。此外,Linux 爲常常訪問的文件使用了緩存機制,以加速從文件名查找其 inode 的進程。這種緩存機制僅支持最多 30 個字符的文件名,因此一般要避免訪問文件名很是長的文件。當一個目錄變得太大時,一般能夠將其分解成幾個較小的目錄,將其內容移動到那些新目錄。移動完該目錄內容後,要確保刪除原來的目錄。
由於 Linux 目錄不會自動收縮,刪除目錄中的文件也不會收縮該目錄,即便它釋放了全部的磁盤空間。所以,要刪除未使用的空間,並使目錄比較小,必須把全部文件複製或移動到一個新目錄,並刪除原目錄。
下面的過程可刪除未使用的目錄空間。首先從大目錄中刪除全部不須要的文件,而後建立一個新的空目錄,接下來把全部剩餘文件從舊的大目錄移動或複製到新的空目錄中。記住不要忘了複製隱藏的文件。最後刪除舊目錄,並命名新目錄。
# mkdir /home/max/new# mv /home/max/large/* /home/max/large/.[A-z]* /home/max/new# rmdir /home/max/large# mv /home/max/new /home/max/large |