Linux面试题(总结最全面的面试题)
Linux 概述
什么是Linux
-
Linux是一套免費(fèi)使用和自由傳播的類似Unix操作系統(tǒng),一般的WEB項(xiàng)目都是部署都是放在Linux操作系統(tǒng)上面。 Linux是一個(gè)基于POSIX和Unix的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng)。它能運(yùn)行主要的Unix工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。它支持32位和64位硬件。Linux繼承了Unix以網(wǎng)絡(luò)為核心的設(shè)計(jì)思想,是一個(gè)性能穩(wěn)定的多用戶網(wǎng)絡(luò)操作系統(tǒng)。
Windows和Linux的區(qū)別
- Windows是微軟開發(fā)的操作系統(tǒng),民用操作系統(tǒng),可用于娛樂、影音、上網(wǎng)。 Windows操作系統(tǒng)具有強(qiáng)大的日志記錄系統(tǒng)和強(qiáng)大的桌面應(yīng)用。好處是它可以幫我們實(shí)現(xiàn)非常多絢麗多彩的效果,可以非常方便去進(jìn)行娛樂、影音、上網(wǎng)。
- Linux的應(yīng)用相對(duì)單純很多,沒有什么絢麗多彩的效果,因此Linux的性能是非常出色的,可以完全針對(duì)機(jī)器的配置有針對(duì)性的優(yōu)化,
- 簡單來說Windows適合普通用戶進(jìn)行娛樂辦公使用,Linux適合軟件開發(fā)部署
Unix和Linux有什么區(qū)別?
- Linux和Unix都是功能強(qiáng)大的操作系統(tǒng),都是應(yīng)用廣泛的服務(wù)器操作系統(tǒng),有很多相似之處,甚至有一部分人錯(cuò)誤地認(rèn)為Unix和Linux操作系統(tǒng)是一樣的,然而,事實(shí)并非如此,以下是兩者的區(qū)別。
- 開源性
Linux是一款開源操作系統(tǒng),不需要付費(fèi),即可使用;Unix是一款對(duì)源碼實(shí)行知識(shí)產(chǎn)權(quán)保護(hù)的傳統(tǒng)商業(yè)軟件,使用需要付費(fèi)授權(quán)使用。 - 跨平臺(tái)性
Linux操作系統(tǒng)具有良好的跨平臺(tái)性能,可運(yùn)行在多種硬件平臺(tái)上;Unix操作系統(tǒng)跨平臺(tái)性能較弱,大多需與硬件配套使用。 - 可視化界面
Linux除了進(jìn)行命令行操作,還有窗體管理系統(tǒng);Unix只是命令行下的系統(tǒng)。 - 硬件環(huán)境
Linux操作系統(tǒng)對(duì)硬件的要求較低,安裝方法更易掌握;Unix對(duì)硬件要求比較苛刻,按照難度較大。 - 用戶群體
Linux的用戶群體很廣泛,個(gè)人和企業(yè)均可使用;Unix的用戶群體比較窄,多是安全性要求高的大型企業(yè)使用,如銀行、電信部門等,或者Unix硬件廠商使用,如Sun等。
相比于Unix操作系統(tǒng),Linux操作系統(tǒng)更受廣大計(jì)算機(jī)愛好者的喜愛,主要原因是Linux操作系統(tǒng)具有Unix操作系統(tǒng)的全部功能,并且能夠在普通PC計(jì)算機(jī)上實(shí)現(xiàn)全部的Unix特性,開源免費(fèi)的特性,更容易普及使用!
什么是 Linux 內(nèi)核?
- Linux 系統(tǒng)的核心是內(nèi)核。內(nèi)核控制著計(jì)算機(jī)系統(tǒng)上的所有硬件和軟件,在必要時(shí)分配硬件,并根據(jù)需要執(zhí)行軟件。
- 系統(tǒng)內(nèi)存管理
- 應(yīng)用程序管理
- 硬件設(shè)備管理
- 文件系統(tǒng)管理
Linux的基本組件是什么?
- 就像任何其他典型的操作系統(tǒng)一樣,Linux擁有所有這些組件:內(nèi)核,shell和GUI,系統(tǒng)實(shí)用程序和應(yīng)用程序。Linux比其他操作系統(tǒng)更具優(yōu)勢(shì)的是每個(gè)方面都附帶其他功能,所有代碼都可以免費(fèi)下載。
Linux 的體系結(jié)構(gòu)
- 從大的方面講,Linux 體系結(jié)構(gòu)可以分為兩塊:
?
- 用戶空間(User Space) :用戶空間又包括用戶的應(yīng)用程序(User Applications)、C 庫(C Library) 。
- 內(nèi)核空間(Kernel Space) :內(nèi)核空間又包括系統(tǒng)調(diào)用接口(System Call Interface)、內(nèi)核(Kernel)、平臺(tái)架構(gòu)相關(guān)的代碼(Architecture-Dependent Kernel Code) 。
為什么 Linux 體系結(jié)構(gòu)要分為用戶空間和內(nèi)核空間的原因?
- 1、現(xiàn)代 CPU 實(shí)現(xiàn)了不同的工作模式,不同模式下 CPU 可以執(zhí)行的指令和訪問的寄存器不同。
- 2、Linux 從 CPU 的角度出發(fā),為了保護(hù)內(nèi)核的安全,把系統(tǒng)分成了兩部分。
- 用戶空間和內(nèi)核空間是程序執(zhí)行的兩種不同的狀態(tài),我們可以通過兩種方式完成用戶空間到內(nèi)核空間的轉(zhuǎn)移:
- 系統(tǒng)調(diào)用;
- 硬件中斷。
BASH和DOS之間的基本區(qū)別是什么?
- BASH和DOS控制臺(tái)之間的主要區(qū)別在于3個(gè)方面:
- BASH命令區(qū)分大小寫,而DOS命令則不區(qū)分;
- 在BASH下,/ character是目錄分隔符,\作為轉(zhuǎn)義字符。在DOS下,/用作命令參數(shù)分隔符,\是目錄分隔符
- DOS遵循命名文件中的約定,即8個(gè)字符的文件名后跟一個(gè)點(diǎn),擴(kuò)展名為3個(gè)字符。BASH沒有遵循這樣的慣例。
Linux 開機(jī)啟動(dòng)過程?
了解即可。
-
1、主機(jī)加電自檢,加載 BIOS 硬件信息。
-
2、讀取 MBR 的引導(dǎo)文件(GRUB、LILO)。
-
3、引導(dǎo) Linux 內(nèi)核。
-
4、運(yùn)行第一個(gè)進(jìn)程 init (進(jìn)程號(hào)永遠(yuǎn)為 1 )。
-
5、進(jìn)入相應(yīng)的運(yùn)行級(jí)別。
-
6、運(yùn)行終端,輸入用戶名和密碼。
Linux系統(tǒng)缺省的運(yùn)行級(jí)別?
- 關(guān)機(jī)。
- 單機(jī)用戶模式。
- 字符界面的多用戶模式(不支持網(wǎng)絡(luò))。
- 字符界面的多用戶模式。
- 未分配使用。
- 圖形界面的多用戶模式。
- 重啟。
Linux 使用的進(jìn)程間通信方式?
了解即可,不需要太深入。
- 1、管道(pipe)、流管道(s_pipe)、有名管道(FIFO)。
- 2、信號(hào)(signal) 。
- 3、消息隊(duì)列。
- 4、共享內(nèi)存。
- 5、信號(hào)量。
- 6、套接字(socket) 。
Linux 有哪些系統(tǒng)日志文件?
- 比較重要的是 /var/log/messages 日志文件。
該日志文件是許多進(jìn)程日志文件的匯總,從該文件可以看出任何入侵企圖或成功的入侵。
另外,如果胖友的系統(tǒng)里有 ELK 日志集中收集,它也會(huì)被收集進(jìn)去。
Linux系統(tǒng)安裝多個(gè)桌面環(huán)境有幫助嗎?
- 通常,一個(gè)桌面環(huán)境,如KDE或Gnome,足以在沒有問題的情況下運(yùn)行。盡管系統(tǒng)允許從一個(gè)環(huán)境切換到另一個(gè)環(huán)境,但這對(duì)用戶來說都是優(yōu)先考慮的問題。有些程序在一個(gè)環(huán)境中工作而在另一個(gè)環(huán)境中無法工作,因此它也可以被視為選擇使用哪個(gè)環(huán)境的一個(gè)因素。
什么是交換空間?
- 交換空間是Linux使用的一定空間,用于臨時(shí)保存一些并發(fā)運(yùn)行的程序。當(dāng)RAM沒有足夠的內(nèi)存來容納正在執(zhí)行的所有程序時(shí),就會(huì)發(fā)生這種情況。
什么是root帳戶
- root帳戶就像一個(gè)系統(tǒng)管理員帳戶,允許你完全控制系統(tǒng)。你可以在此處創(chuàng)建和維護(hù)用戶帳戶,為每個(gè)帳戶分配不同的權(quán)限。每次安裝Linux時(shí)都是默認(rèn)帳戶。
什么是LILO?
- LILO是Linux的引導(dǎo)加載程序。它主要用于將Linux操作系統(tǒng)加載到主內(nèi)存中,以便它可以開始運(yùn)行。
什么是BASH?
- BASH是Bourne Again SHell的縮寫。它由Steve Bourne編寫,作為原始Bourne Shell(由/ bin / sh表示)的替代品。它結(jié)合了原始版本的Bourne Shell的所有功能,以及其他功能,使其更容易使用。從那以后,它已被改編為運(yùn)行Linux的大多數(shù)系統(tǒng)的默認(rèn)shell。
什么是CLI?
-
命令行界面(英語**:command-line interface**,縮寫]:CLI)是在圖形用戶界面得到普及之前使用最為廣泛的用戶界面,它通常不支持鼠標(biāo),用戶通過鍵盤輸入指令,計(jì)算機(jī)接收到指令后,予以執(zhí)行。也有人稱之為字符用戶界面(CUI)。
-
通常認(rèn)為,命令行界面(CLI)沒有圖形用戶界面(GUI)那么方便用戶操作。因?yàn)?#xff0c;命令行界面的軟件通常需要用戶記憶操作的命令,但是,由于其本身的特點(diǎn),命令行界面要較圖形用戶界面節(jié)約計(jì)算機(jī)系統(tǒng)的資源。在熟記命令的前提下,使用命令行界面往往要較使用圖形用戶界面的操作速度要快。所以,圖形用戶界面的操作系統(tǒng)中,都保留著可選的命令行界面。
什么是GUI?
-
圖形用戶界面(Graphical User Interface,簡稱 GUI,又稱圖形用戶接口)是指采用圖形方式顯示的計(jì)算機(jī)操作用戶界面。
-
圖形用戶界面是一種人與計(jì)算機(jī)通信的界面顯示格式,允許用戶使用鼠標(biāo)等輸入設(shè)備操縱屏幕上的圖標(biāo)或菜單選項(xiàng),以選擇命令、調(diào)用文件、啟動(dòng)程序或執(zhí)行其它一些日常任務(wù)。與通過鍵盤輸入文本或字符命令來完成例行任務(wù)的字符界面相比,圖形用戶界面有許多優(yōu)點(diǎn)。
開源的優(yōu)勢(shì)是什么?
- 開源允許你將軟件(包括源代碼)免費(fèi)分發(fā)給任何感興趣的人。然后,人們可以添加功能,甚至可以調(diào)試和更正源代碼中的錯(cuò)誤。它們甚至可以讓它運(yùn)行得更好,然后再次自由地重新分配這些增強(qiáng)的源代碼。這最終使社區(qū)中的每個(gè)人受益。
GNU項(xiàng)目的重要性是什么?
- 這種所謂的自由軟件運(yùn)動(dòng)具有多種優(yōu)勢(shì),例如可以自由地運(yùn)行程序以及根據(jù)你的需要自由學(xué)習(xí)和修改程序。它還允許你將軟件副本重新分發(fā)給其他人,以及自由改進(jìn)軟件并將其發(fā)布給公眾。
磁盤、目錄、文件
簡單 Linux 文件系統(tǒng)?
在 Linux 操作系統(tǒng)中,所有被操作系統(tǒng)管理的資源,例如網(wǎng)絡(luò)接口卡、磁盤驅(qū)動(dòng)器、打印機(jī)、輸入輸出設(shè)備、普通文件或是目錄都被看作是一個(gè)文件。
-
也就是說在 Linux 系統(tǒng)中有一個(gè)重要的概念**:一切都是文件**。其實(shí)這是 Unix 哲學(xué)的一個(gè)體現(xiàn),而 Linux 是重寫 Unix 而來,所以這個(gè)概念也就傳承了下來。在 Unix 系統(tǒng)中,把一切資源都看作是文件,包括硬件設(shè)備。UNIX系統(tǒng)把每個(gè)硬件都看成是一個(gè)文件,通常稱為設(shè)備文件,這樣用戶就可以用讀寫文件的方式實(shí)現(xiàn)對(duì)硬件的訪問。
-
Linux 支持 5 種文件類型,如下圖所示:
Linux 的目錄結(jié)構(gòu)是怎樣的?
這個(gè)問題,一般不會(huì)問。更多是實(shí)際使用時(shí),需要知道。
- Linux 文件系統(tǒng)的結(jié)構(gòu)層次鮮明,就像一棵倒立的樹,最頂層是其根目錄: 常見目錄說明:
| /bin | 存放二進(jìn)制可執(zhí)行文件(ls,cat,mkdir等),常用命令一般都在這里; |
| /etc | 存放系統(tǒng)管理和配置文件; |
| /home | 存放所有用戶文件的根目錄,是用戶主目錄的基點(diǎn),比如用戶user的主目錄就是/home/user,可以用~user表示; |
| /usr | 用于存放系統(tǒng)應(yīng)用程序; |
| /opt | 額外安裝的可選應(yīng)用程序包所放置的位置。一般情況下,我們可以把tomcat等都安裝到這里; |
| /proc | 虛擬文件系統(tǒng)目錄,是系統(tǒng)內(nèi)存的映射。可直接訪問這個(gè)目錄來獲取系統(tǒng)信息; |
| /root | 超級(jí)用戶(系統(tǒng)管理員)的主目錄(特權(quán)階級(jí)); |
| /sbin | 存放二進(jìn)制可執(zhí)行文件,只有root才能訪問。這里存放的是系統(tǒng)管理員使用的系統(tǒng)級(jí)別的管理命令和程序。如ifconfig等; |
| /dev | 用于存放設(shè)備文件; |
| /mnt | 系統(tǒng)管理員安裝臨時(shí)文件系統(tǒng)的安裝點(diǎn),系統(tǒng)提供這個(gè)目錄是讓用戶臨時(shí)掛載其他的文件系統(tǒng); |
| /boot | 存放用于系統(tǒng)引導(dǎo)時(shí)使用的各種文件; |
| /lib | 存放著和系統(tǒng)運(yùn)行相關(guān)的庫文件 ; |
| /tmp | 用于存放各種臨時(shí)文件,是公用的臨時(shí)文件存儲(chǔ)點(diǎn); |
| /var | 用于存放運(yùn)行時(shí)需要改變數(shù)據(jù)的文件,也是某些大文件的溢出區(qū),比方說各種服務(wù)的日志文件(系統(tǒng)啟動(dòng)日志等。)等; |
| /lost+found | 這個(gè)目錄平時(shí)是空的,系統(tǒng)非正常關(guān)機(jī)而留下“無家可歸”的文件(windows下叫什么.chk)就在這里 |
什么是 inode ?
一般來說,面試不會(huì)問 inode 。但是 inode 是一個(gè)重要概念,是理解 Unix/Linux 文件系統(tǒng)和硬盤儲(chǔ)存的基礎(chǔ)。
-
理解inode,要從文件儲(chǔ)存說起。
-
文件儲(chǔ)存在硬盤上,硬盤的最小存儲(chǔ)單位叫做"扇區(qū)"(Sector)。每個(gè)扇區(qū)儲(chǔ)存512字節(jié)(相當(dāng)于0.5KB)。
-
操作系統(tǒng)讀取硬盤的時(shí)候,不會(huì)一個(gè)個(gè)扇區(qū)地讀取,這樣效率太低,而是一次性連續(xù)讀取多個(gè)扇區(qū),即一次性讀取一個(gè)"塊"(block)。這種由多個(gè)扇區(qū)組成的"塊",是文件存取的最小單位。"塊"的大小,最常見的是4KB,即連續(xù)八個(gè) sector組成一個(gè) block。
-
文件數(shù)據(jù)都儲(chǔ)存在"塊"中,那么很顯然,我們還必須找到一個(gè)地方儲(chǔ)存文件的元信息,比如文件的創(chuàng)建者、文件的創(chuàng)建日期、文件的大小等等。這種儲(chǔ)存文件元信息的區(qū)域就叫做inode,中文譯名為"索引節(jié)點(diǎn)"。
-
每一個(gè)文件都有對(duì)應(yīng)的inode,里面包含了與該文件有關(guān)的一些信息。
簡述 Linux 文件系統(tǒng)通過 i 節(jié)點(diǎn)把文件的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)轉(zhuǎn)換的工作過程?
如果看的一臉懵逼,也沒關(guān)系。一般來說,面試官不太會(huì)問這個(gè)題目。
- Linux 通過 inode 節(jié)點(diǎn)表將文件的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)進(jìn)行轉(zhuǎn)換。
- inode 節(jié)點(diǎn)是一個(gè) 64 字節(jié)長的表,表中包含了文件的相關(guān)信息,其中有文件的大小、文件所有者、文件的存取許可方式以及文件的類型等重要信息。在 inode 節(jié)點(diǎn)表中最重要的內(nèi)容是磁盤地址表。在磁盤地址表中有 13 個(gè)塊號(hào),文件將以塊號(hào)在磁盤地址表中出現(xiàn)的順序依次讀取相應(yīng)的塊。
- Linux 文件系統(tǒng)通過把 inode 節(jié)點(diǎn)和文件名進(jìn)行連接,當(dāng)需要讀取該文件時(shí),文件系統(tǒng)在當(dāng)前目錄表中查找該文件名對(duì)應(yīng)的項(xiàng),由此得到該文件相對(duì)應(yīng)的 inode 節(jié)點(diǎn)號(hào),通過該 inode 節(jié)點(diǎn)的磁盤地址表把分散存放的文件物理塊連接成文件的邏輯結(jié)構(gòu)。
什么是硬鏈接和軟鏈接?
-
硬鏈接:由于 Linux 下的文件是通過索引節(jié)點(diǎn)(inode)來識(shí)別文件,硬鏈接可以認(rèn)為是一個(gè)指針,指向文件索引節(jié)點(diǎn)的指針,系統(tǒng)并不為它重新分配 inode 。每添加一個(gè)一個(gè)硬鏈接,文件的鏈接數(shù)就加 1 。
- 不足:
- 不可以在不同文件系統(tǒng)的文件間建立鏈接;
- 只有超級(jí)用戶才可以為目錄創(chuàng)建硬鏈接。
軟鏈接:軟鏈接克服了硬鏈接的不足,沒有任何文件系統(tǒng)的限制,任何用戶可以創(chuàng)建指向目錄的符號(hào)鏈接。因而現(xiàn)在更為廣泛使用,它具有更大的靈活性,甚至可以跨越不同機(jī)器、不同網(wǎng)絡(luò)對(duì)文件進(jìn)行鏈接。
- 不足:因?yàn)殒溄游募性募穆窂叫畔?#xff0c;所以當(dāng)原文件從一個(gè)目錄下移到其他目錄中,再訪問鏈接文件,系統(tǒng)就找不到了,而硬鏈接就沒有這個(gè)缺陷,你想怎么移就怎么移;還有它要系統(tǒng)分配額外的空間用于建立新的索引節(jié)點(diǎn)和保存原文件的路徑。
實(shí)際場景下,基本是使用軟鏈接。總結(jié)區(qū)別如下:
- 硬鏈接不可以跨分區(qū),軟件鏈可以跨分區(qū)。
- 硬鏈接指向一個(gè) inode 節(jié)點(diǎn),而軟鏈接則是創(chuàng)建一個(gè)新的 inode 節(jié)點(diǎn)。
- 刪除硬鏈接文件,不會(huì)刪除原文件,刪除軟鏈接文件,會(huì)把原文件刪除。
RAID 是什么?
RAID 全稱為獨(dú)立磁盤冗余陣列(Redundant Array of Independent Disks),基本思想就是把多個(gè)相對(duì)便宜的硬盤組合起來,成為一個(gè)硬盤陣列組,使性能達(dá)到甚至超過一個(gè)價(jià)格昂貴、 容量巨大的硬盤。RAID 通常被用在服務(wù)器電腦上,使用完全相同的硬盤組成一個(gè)邏輯扇區(qū),因此操作系統(tǒng)只會(huì)把它當(dāng)做一個(gè)硬盤。
RAID 分為不同的等級(jí),各個(gè)不同的等級(jí)均在數(shù)據(jù)可靠性及讀寫性能上做了不同的權(quán)衡。在實(shí)際應(yīng)用中,可以依據(jù)自己的實(shí)際需求選擇不同的 RAID 方案。
- 當(dāng)然,因?yàn)楹芏喙径际褂迷品?wù),大家很難接觸到 RAID 這個(gè)概念,更多的可能是普通云盤、SSD 云盤醬紫的概念。
安全
一臺(tái) Linux 系統(tǒng)初始化環(huán)境后需要做一些什么安全工作?
-
1、添加普通用戶登陸,禁止 root 用戶登陸,更改 SSH 端口號(hào)。
修改 SSH 端口不一定絕對(duì)哈。當(dāng)然,如果要暴露在外網(wǎng),建議改下。l
-
2、服務(wù)器使用密鑰登陸,禁止密碼登陸。
-
3、開啟防火墻,關(guān)閉 SElinux ,根據(jù)業(yè)務(wù)需求設(shè)置相應(yīng)的防火墻規(guī)則。
-
4、裝 fail2ban 這種防止 SSH 暴力破擊的軟件。
-
5、設(shè)置只允許公司辦公網(wǎng)出口 IP 能登陸服務(wù)器(看公司實(shí)際需要)
也可以安裝 VPN 等軟件,只允許連接 VPN 到服務(wù)器上。
-
6、修改歷史命令記錄的條數(shù)為 10 條。
-
7、只允許有需要的服務(wù)器可以訪問外網(wǎng),其它全部禁止。
-
8、做好軟件層面的防護(hù)。
- 8.1 設(shè)置 nginx_waf 模塊防止 SQL 注入。
- 8.2 把 Web 服務(wù)使用 www 用戶啟動(dòng),更改網(wǎng)站目錄的所有者和所屬組為 www 。
什么叫 CC 攻擊?什么叫 DDOS 攻擊?
-
CC 攻擊,主要是用來攻擊頁面的,模擬多個(gè)用戶不停的對(duì)你的頁面進(jìn)行訪問,從而使你的系統(tǒng)資源消耗殆盡。
-
DDOS 攻擊,中文名叫分布式拒絕服務(wù)攻擊,指借助服務(wù)器技術(shù)將多個(gè)計(jì)算機(jī)聯(lián)合起來作為攻擊平臺(tái),來對(duì)一個(gè)或多個(gè)目標(biāo)發(fā)動(dòng) DDOS 攻擊。
攻擊,即是通過大量合法的請(qǐng)求占用大量網(wǎng)絡(luò)資源,以達(dá)到癱瘓網(wǎng)絡(luò)的目的。
怎么預(yù)防 CC 攻擊和 DDOS 攻擊?
- 防 CC、DDOS 攻擊,這些只能是用硬件防火墻做流量清洗,將攻擊流量引入黑洞。
流量清洗這一塊,主要是買 ISP 服務(wù)商的防攻擊的服務(wù)就可以,機(jī)房一般有空余流量,我們一般是買服務(wù),畢竟攻擊不會(huì)是持續(xù)長時(shí)間。
什么是網(wǎng)站數(shù)據(jù)庫注入?
- 由于程序員的水平及經(jīng)驗(yàn)參差不齊,大部分程序員在編寫代碼的時(shí)候,沒有對(duì)用戶輸入數(shù)據(jù)的合法性進(jìn)行判斷。
- 應(yīng)用程序存在安全隱患。用戶可以提交一段數(shù)據(jù)庫查詢代碼,根據(jù)程序返回的結(jié)果,獲得某些他想得知的數(shù)據(jù),這就是所謂的 SQL 注入。
- SQL注入,是從正常的 WWW 端口訪問,而且表面看起來跟一般的 Web 頁面訪問沒什么區(qū)別,如果管理員沒查看日志的習(xí)慣,可能被入侵很長時(shí)間都不會(huì)發(fā)覺。
如何過濾與預(yù)防?
- 數(shù)據(jù)庫網(wǎng)頁端注入這種,可以考慮使用 nginx_waf 做過濾與預(yù)防。
Shell 腳本是什么?
- 一個(gè) Shell 腳本是一個(gè)文本文件,包含一個(gè)或多個(gè)命令。作為系統(tǒng)管理員,我們經(jīng)常需要使用多個(gè)命令來完成一項(xiàng)任務(wù),我們可以添加這些所有命令在一個(gè)文本文件(Shell 腳本)來完成這些日常工作任務(wù)。
實(shí)戰(zhàn)
如何選擇 Linux 操作系統(tǒng)版本?
一般來講,桌面用戶首選 Ubuntu ;服務(wù)器首選 RHEL 或 CentOS ,兩者中首選 CentOS 。
-
根據(jù)具體要求:
-
安全性要求較高,則選擇 Debian 或者 FreeBSD 。
-
需要使用數(shù)據(jù)庫高級(jí)服務(wù)和電子郵件網(wǎng)絡(luò)應(yīng)用的用戶可以選擇 SUSE 。
-
想要新技術(shù)新功能可以選擇 Feddora ,Feddora 是 RHEL 和 CentOS 的一個(gè)測試版和預(yù)發(fā)布版本。
-
【重點(diǎn)】根據(jù)現(xiàn)有狀況,絕大多數(shù)互聯(lián)網(wǎng)公司選擇 CentOS 。現(xiàn)在比較常用的是 6 系列,現(xiàn)在市場占有大概一半左右。另外的原因是 CentOS 更側(cè)重服務(wù)器領(lǐng)域,并且無版權(quán)約束。
CentOS 7 系列,也慢慢使用的會(huì)比較多了。
-
如何規(guī)劃一臺(tái) Linux 主機(jī),步驟是怎樣?
-
1、確定機(jī)器是做什么用的,比如是做 WEB 、DB、還是游戲服務(wù)器。
不同的用途,機(jī)器的配置會(huì)有所不同。
-
2、確定好之后,就要定系統(tǒng)需要怎么安裝,默認(rèn)安裝哪些系統(tǒng)、分區(qū)怎么做。
-
3、需要優(yōu)化系統(tǒng)的哪些參數(shù),需要?jiǎng)?chuàng)建哪些用戶等等的。
請(qǐng)問當(dāng)用戶反饋網(wǎng)站訪問慢,你會(huì)如何處理?
有哪些方面的因素會(huì)導(dǎo)致網(wǎng)站網(wǎng)站訪問慢?
-
1、服務(wù)器出口帶寬不夠用
- 本身服務(wù)器購買的出口帶寬比較小。一旦并發(fā)量大的話,就會(huì)造成分給每個(gè)用戶的出口帶寬就小,訪問速度自然就會(huì)慢。
- 跨運(yùn)營商網(wǎng)絡(luò)導(dǎo)致帶寬縮減。例如,公司網(wǎng)站放在電信的網(wǎng)絡(luò)上,那么客戶這邊對(duì)接是長城寬帶或聯(lián)通,這也可能導(dǎo)致帶寬的縮減。
-
2、服務(wù)器負(fù)載過大,導(dǎo)致響應(yīng)不過來
可以從兩個(gè)方面入手分析:
- 分析系統(tǒng)負(fù)載,使用 w 命令或者 uptime 命令查看系統(tǒng)負(fù)載。如果負(fù)載很高,則使用 top 命令查看 CPU ,MEM 等占用情況,要么是 CPU 繁忙,要么是內(nèi)存不夠。
- 如果這二者都正常,再去使用 sar 命令分析網(wǎng)卡流量,分析是不是遭到了攻擊。一旦分析出問題的原因,采取對(duì)應(yīng)的措施解決,如決定要不要?dú)⑺酪恍┻M(jìn)程,或者禁止一些訪問等。
-
3、數(shù)據(jù)庫瓶頸
- 如果慢查詢比較多。那么就要開發(fā)人員或 DBA 協(xié)助進(jìn)行 SQL 語句的優(yōu)化。
- 如果數(shù)據(jù)庫響應(yīng)慢,考慮可以加一個(gè)數(shù)據(jù)庫緩存,如 Redis 等。然后,也可以搭建 MySQL 主從,一臺(tái) MySQL 服務(wù)器負(fù)責(zé)寫,其他幾臺(tái)從數(shù)據(jù)庫負(fù)責(zé)讀。
-
4、網(wǎng)站開發(fā)代碼沒有優(yōu)化好
- 例如 SQL 語句沒有優(yōu)化,導(dǎo)致數(shù)據(jù)庫讀寫相當(dāng)耗時(shí)。
針對(duì)網(wǎng)站訪問慢,怎么去排查?
-
1、首先要確定是用戶端還是服務(wù)端的問題。當(dāng)接到用戶反饋訪問慢,那邊自己立即訪問網(wǎng)站看看,如果自己這邊訪問快,基本斷定是用戶端問題,就需要耐心跟客戶解釋,協(xié)助客戶解決問題。
不要上來就看服務(wù)端的問題。一定要從源頭開始,逐步逐步往下。
-
2、如果訪問也慢,那么可以利用瀏覽器的調(diào)試功能,看看加載那一項(xiàng)數(shù)據(jù)消耗時(shí)間過多,是圖片加載慢,還是某些數(shù)據(jù)加載慢。
-
3、針對(duì)服務(wù)器負(fù)載情況。查看服務(wù)器硬件(網(wǎng)絡(luò)、CPU、內(nèi)存)的消耗情況。如果是購買的云主機(jī),比如阿里云,可以登錄阿里云平臺(tái)提供各方面的監(jiān)控,比如 CPU、內(nèi)存、帶寬的使用情況。
-
4、如果發(fā)現(xiàn)硬件資源消耗都不高,那么就需要通過查日志,比如看看 MySQL慢查詢的日志,看看是不是某條 SQL 語句查詢慢,導(dǎo)致網(wǎng)站訪問慢。
怎么去解決?
- 1、如果是出口帶寬問題,那么久申請(qǐng)加大出口帶寬。
- 2、如果慢查詢比較多,那么就要開發(fā)人員或 DBA 協(xié)助進(jìn)行 SQL 語句的優(yōu)化。
- 3、如果數(shù)據(jù)庫響應(yīng)慢,考慮可以加一個(gè)數(shù)據(jù)庫緩存,如 Redis 等等。然后也可以搭建MySQL 主從,一臺(tái) MySQL 服務(wù)器負(fù)責(zé)寫,其他幾臺(tái)從數(shù)據(jù)庫負(fù)責(zé)讀。
- 4、申請(qǐng)購買 CDN 服務(wù),加載用戶的訪問。
- 5、如果訪問還比較慢,那就需要從整體架構(gòu)上進(jìn)行優(yōu)化咯。做到專角色專用,多臺(tái)服務(wù)器提供同一個(gè)服務(wù)。
Linux 性能調(diào)優(yōu)都有哪幾種方法?
- 1、Disabling daemons (關(guān)閉 daemons)。
- 2、Shutting down the GUI (關(guān)閉 GUI)。
- 3、Changing kernel parameters (改變內(nèi)核參數(shù))。
- 4、Kernel parameters (內(nèi)核參數(shù))。
- 5、Tuning the processor subsystem (處理器子系統(tǒng)調(diào)優(yōu))。
- 6、Tuning the memory subsystem (內(nèi)存子系統(tǒng)調(diào)優(yōu))。
- 7、Tuning the file system (文件系統(tǒng)子系統(tǒng)調(diào)優(yōu))。
- 8、Tuning the network subsystem(網(wǎng)絡(luò)子系統(tǒng)調(diào)優(yōu))。
基本命令
cd (change directory:英文釋義是改變目錄)切換目錄
cd ../ ;跳到上級(jí)目錄 cd /opt ;不管現(xiàn)在到那直接跳到指定的opt文件夾中 cd ~ ;切換當(dāng)前用戶的家目錄。root用戶的家目錄就是root目錄。pwd (print working directory:顯示當(dāng)前工作目錄的絕對(duì)路徑)
pwd 顯示當(dāng)前的絕對(duì)路勁ls (ls:list的縮寫,查看列表)查看當(dāng)前目錄下的所有文件夾(ls 只列出文件名或目錄名)
ls -a ;顯示所有文件夾,隱藏文件也顯示出來 ls -R ;連同子目錄一起列出來ll (ll:list的縮寫,查看列表詳情)查看當(dāng)前目錄下的所有詳細(xì)信息和文件夾(ll 結(jié)果是詳細(xì),有時(shí)間,是否可讀寫等信息)
ll -a ;顯示所有文件,隱藏文件也顯示出來 ll -R ;連同子目錄內(nèi)容一起列出來 ll -h ;友好展示詳情信息,可以看大小 ll -al ;即能顯示隱藏文件又能顯示詳細(xì)列表。touch (touch:創(chuàng)建文件)創(chuàng)建文件
touch test.txt ;創(chuàng)建test.txt文件 touch /opt/java/test.java ;在指定目錄創(chuàng)建test.java文件mkdir (mkdir:創(chuàng)建目錄) 創(chuàng)建目錄
mkdir 文件夾名稱 ;在此目錄創(chuàng)建文件夾 mkdir /opt/java/jdk ;在指定目錄創(chuàng)建文件夾cat (concatenate:顯示或把多個(gè)文本文件連接起來)查看文件命令(可以快捷查看當(dāng)前文件的內(nèi)容)(不能快速定位到最后一頁)
cat lj.log ;快捷查看文件命令 Ctrl + c ;暫停顯示文件 Ctrl + d ;退出查看文件命令more (more:更多的意思)分頁查看文件命令(不能快速定位到最后一頁)
回車:向下n行,需要定義,默認(rèn)為1行。 空格鍵:向下滾動(dòng)一屏或Ctrl+F B:返回上一層或Ctrl+B q:退出moreless (lese:較少的意思)分頁查看文件命令(可以快速定位到最后一頁)
less -m 顯示類似于more命令的百分比。 less -N 顯示每行的行號(hào)。(大寫的N) 兩參數(shù)一起使用如:less -mN 文件名,如此可分頁并顯示行號(hào)。空格鍵:前下一頁或page down。 回車:向下一行。 b:后退一頁 或 page up。 q:退出。 d:前進(jìn)半頁。 u:后退半頁tail(尾巴) 查看文件命令(看最后多少行)
tail -10 ;文件名 看最后10行cp(copy單詞縮寫,復(fù)制功能)
cp /opt/java/java.log /opt/logs/ ;把java.log 復(fù)制到/opt/logs/下 cp /opt/java/java.log /opt/logs/aaa.log ;把java.log 復(fù)制到/opt/logs/下并且改名為aaa.log cp -r /opt/java /opt/logs ;把文件夾及內(nèi)容復(fù)制到logs文件中mv(move單詞縮寫,移動(dòng)功能,該文件名稱功能)
mv /opt/java/java.log /opt/mysql/ ;移動(dòng)文件到mysql目錄下 mv java.log mysql.log ;把java.log改名為mysql.logrm(remove:移除的意思)刪除文件,或文件夾
-f或--force 強(qiáng)制刪除文件或目錄。刪除文件不包括文件夾的文件 -r或-R或--recursive 遞歸處理,將指定目錄下的所有文件及子目錄一并刪除。 -rf 強(qiáng)制刪除文件夾及內(nèi)容rm 文件名 ;安全刪除命令 (yes刪除 no取消) rm -rf 強(qiáng)制刪除文件夾及內(nèi)容 rm -rf * 刪除當(dāng)前目錄下的所有內(nèi)容。 rm -rf /* 刪除Linux系統(tǒng)根目錄下所有的內(nèi)容。系統(tǒng)將完蛋。find (find:找到的意思)查找指定文件或目錄
* 表示0~多個(gè)任意字符。find -name 文件名;按照指定名稱查找在當(dāng)前目錄下查找文件 find / -name 文件名按照指定名稱全局查找文件 find -name '*文件名' ;任意前綴加上文件名在當(dāng)前目錄下查找文件 find / -name '*文件名*' ;全局進(jìn)行模糊查詢帶文件名的文件vi (VIsual:視覺)文本編輯器 類似win的記事本 (操作類似于地下的vim命令,看底下vim 的操作)
vim (VI IMproved:改進(jìn)版視覺)改進(jìn)版文本編輯器 (不管是文件查看還是文件編輯 按 Shift + 上或者下可以上下移動(dòng)查看視角)
輸入”vim 文件名” 打開文件,剛剛時(shí)是”一般模式”。一般模式:可以瀏覽文件內(nèi)容,可以進(jìn)行文本快捷操作。如單行復(fù)制,多行復(fù)制,單行刪除,多行刪除,(退出)等。 插入模式:可以編輯文件內(nèi)容。 底行模式:可以進(jìn)行強(qiáng)制退出操作,不保存 :q!可以進(jìn)行保存并退出操作 :wq按下”i”或”a”或”o”鍵,從”一般模式”,進(jìn)入”插入模式(編輯模式)”。 在編輯模式下按”Esc” 即可到一般模式 在一般模式下按”:”,冒號(hào)進(jìn)入底行模式。在一般模式下的快捷鍵dd ;刪除一整行X ;向前刪除 等同于windowns系統(tǒng)中的刪除鍵x ;向后刪除和大寫x相反方向Ctrl + f ;向后看一頁Ctrl + b ;向前看一頁u ;撤銷上一步操作/word ;向下查找word關(guān)鍵字 輸入:n查找下一個(gè),N查找上一個(gè)(不管是哪個(gè)查找都是全局查找 只不過n的方向相反)?log ;向上查找log關(guān)鍵字 輸入:n查找上一個(gè),N查找下一個(gè):1,90s/redis/Redis/g ;把1-90行的redis替換為Redis。語法n1,n2s/原關(guān)鍵字/新關(guān)鍵字/g,n1代表其實(shí)行,n2代表結(jié)尾行,g是必須要的:0 ;光標(biāo)移動(dòng)到第一行:$ ;光標(biāo)移動(dòng)到最后一行:300 ;光標(biāo)移動(dòng)到300行,輸入多少數(shù)字移動(dòng)到多少行:w ;保存:w! ;強(qiáng)制保存:q ;退出:q! ;強(qiáng)制退出5dd ;刪除后面5行,打一個(gè)參數(shù)為自己填寫5x ;刪除此光標(biāo)后面5個(gè)字符d1G ;刪除此光標(biāo)之前的所有d0 ;從光標(biāo)當(dāng)前位置刪除到此行的第一個(gè)位置yy ;復(fù)制p ;在光標(biāo)的下面進(jìn)行粘貼P ;在光標(biāo)的上門進(jìn)行粘貼| 管道命令(把多個(gè)命令組合起來使用)
管道命令的語法:命令1 | 命令2 | 命令3。grep (grep :正則表達(dá)式)正則表達(dá)式,用于字符串的搜索工作(模糊查詢)。不懂可以先過
單獨(dú)使用: grep String test.java ;在test.java文件中查找String的位置,返回整行 一般此命令不會(huì)單獨(dú)使用下面列幾個(gè)常用的命令(地下通過管道命令組合起來使用)ps aux|grep java ;查找?guī)ava關(guān)鍵字的進(jìn)程 ll |grep java ;查找?guī)ava關(guān)鍵字的文件夾及文件yum install -y lrzsz 命令(實(shí)現(xiàn)win到Linux文件互相簡單上傳文件)
#(實(shí)際上就是在Linux系統(tǒng)中下載了一個(gè)插件)下了了此安裝包后就可以實(shí)現(xiàn)win系統(tǒng)到linux之間拉文件拉文件 #等待下載完了就可以輸入:rz 從win系統(tǒng)中選擇文件上傳到Linux系統(tǒng)中sz 文件名 選擇Linux系統(tǒng)的文件復(fù)制到win系統(tǒng)中tar (解壓 壓縮 命令)
常用的組合命令: -z 是否需要用gzip壓縮。 -c 建立一個(gè)壓縮文件的參數(shù)指令(create) –壓縮-x 解開一個(gè)壓縮文件的參數(shù)指令(extract) –解壓 -v 壓縮的過程中顯示文件(verbose)-f 使用檔名,在f之后要立即接檔中(file)常用解壓參數(shù)組合:zxvf常用壓縮參數(shù)組合:zcvf 解壓命令: tar -zxvf redis-3.2.8.tar.gz ;解壓到當(dāng)前文件夾 tar -zxvf redis-3.2.8.tar.gz -C /opt/java/ ;解壓到指定目錄壓縮命令:(注意 語法有點(diǎn)反了,我反正每次都搞反) tar -zcvf redis-3.2.8.tar.gz redis-3.2.8/ ;語法 tar -zcvf 壓縮后的名稱 要壓縮的文件 tar -zcvf 壓縮后的文件(可指定目錄) 要壓縮的文件(可指定目錄)ps (process status:進(jìn)程狀態(tài),類似于windows的任務(wù)管理器)
常用組合:ps -ef 標(biāo)準(zhǔn)的格式查看系統(tǒng)進(jìn)程ps -aux BSD格式查看系統(tǒng)進(jìn)程ps -aux|grep redis BSD格式查看進(jìn)程名稱帶有redis的系統(tǒng)進(jìn)程(常用技巧) //顯示進(jìn)程的一些屬性,需要了解(ps aux) USER //用戶名 PID //進(jìn)程ID號(hào),用來殺死進(jìn)程的 %CPU //進(jìn)程占用的CPU的百分比 %MEM //占用內(nèi)存的的百分比 VSZ //該進(jìn)程使用的虛擬內(nèi)存量(KB) RSS //該進(jìn)程占用的固定內(nèi)存量(KB) STAT //進(jìn)程的狀態(tài) START //該進(jìn)程被觸發(fā)啟動(dòng)時(shí)間 TIME //該進(jìn)程實(shí)際使用CPU運(yùn)行的時(shí)間clear 清屏命令。(強(qiáng)迫癥患者使用)
kill 命令用來中止一個(gè)進(jìn)程。(要配合ps命令使用,配合pid關(guān)閉進(jìn)程) (ps類似于打開任務(wù)管理器,kill類似于關(guān)閉進(jìn)程)kill -5 進(jìn)程的PID ;推薦,和平關(guān)閉進(jìn)程kill -9 PID ;不推薦,強(qiáng)制殺死進(jìn)程ifconfig命令
用于查看和更改網(wǎng)絡(luò)接口的地址和參數(shù),包括IP地址、網(wǎng)絡(luò)掩碼、廣播地址,使用權(quán)限是超級(jí)用戶。(一般是用來查看的,很少更改) 如果此命令輸入無效,先輸入yum -y install net-tools ifconfigping (用于檢測與目標(biāo)的連通性)語法:ping ip地址
測試: 1、在Windows操作系統(tǒng)中?cmd?ipconfig,查看本機(jī)IP地址: 2、再到LInux系統(tǒng)中輸入 ping ip地址 (公司電腦,我就不暴露Ip了,沒圖片 自己去試) 按Ctrl + C 可以停止測試。free 命令 (顯示系統(tǒng)內(nèi)存)
#顯示系統(tǒng)內(nèi)存使用情況,包括物理內(nèi)存、交互區(qū)內(nèi)存(swap)和內(nèi)核緩沖區(qū)內(nèi)存。 -b 以Byte顯示內(nèi)存使用情況 -k 以kb為單位顯示內(nèi)存使用情況 -m 以mb為單位顯示內(nèi)存使用情況 -g 以gb為單位顯示內(nèi)存使用情況 -s<間隔秒數(shù)> 持續(xù)顯示內(nèi)存 -t 顯示內(nèi)存使用總合top 命令
#顯示當(dāng)前系統(tǒng)正在執(zhí)行的進(jìn)程的相關(guān)信息,包括進(jìn)程 ID、內(nèi)存占用率、CPU 占用率等 -c 顯示完整的進(jìn)程命令 -s 保密模式 -p <進(jìn)程號(hào)> 指定進(jìn)程顯示 -n <次數(shù)>循環(huán)顯示次數(shù)netstat 命令
#Linux netstat命令用于顯示網(wǎng)絡(luò)狀態(tài)。 #利用netstat指令可讓你得知整個(gè)Linux系統(tǒng)的網(wǎng)絡(luò)情況。 #語法: netstat [-acCeFghilMnNoprstuvVwx][-A<網(wǎng)絡(luò)類型>][--ip]file (可查看文件類型)
file 文件名重啟linux
Linux centos 重啟命令:reboot關(guān)機(jī)linux
Linux centos 關(guān)機(jī)命令:halt同步時(shí)間命令
ntpdate ntp1.aliyun.com更改為北京時(shí)間命令
rm -rf /etc/localtime ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime查看時(shí)間命令:
date更多的java課程學(xué)習(xí)路線,筆記,面試等架構(gòu)資料,需要的同學(xué)可以私信我(面試)即可免費(fèi)獲取!
?
總結(jié)
以上是生活随笔為你收集整理的Linux面试题(总结最全面的面试题)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 定时自动启动任务crontab命令用法
- 下一篇: [Leetcode][第104题][JA