參考:
Linux和Windows的區別,Linux相比windows有什么優勢
1. Linux是一個以開發者為中心的操作系統,而windows是以消費者為中心的操作系統
2. Linux是免費的、開源的,更容易得到他的源代碼,也就更容易實現個性化定制
3. Linux的命令行功能強大,不推崇界面,windows的命令行沒這么厲害,但是界面操作方便
4. Linux基於網絡,只要有相應權限,就能遠程操控相應的服務器,是一個多用戶操作系統,而windows是一個單用戶操作系統
linux 的文件類型
1. 普通文件
它是最常使用的一類文件,其特點是不包含有文件系統信息的結構信息。通常用戶所接觸到的文件,如圖形文件,數據文件,文檔文件,聲音文件等都屬於這種文件。這種類型的文件按其內部結構又可分為文本文件和二進制文件。
2. 目錄文件
目錄文件是用於存放文件名及其相關信息的文件。它是內核組織文件系統的基本節點。目錄文件可以包含下一級文件目錄或普通文件。在linux中,目錄文件是一種文件。但linux的目錄文件和其他操作系統中“目錄”的概念不同,它是linux文件的一種。
3. 鏈接文件
鏈接文件是一種特殊文件,實際上是指向一個真實存在的文件鏈接,類似於windows下的快捷方式。鏈接文件的不同,它又可細分為硬鏈接(Hard Link)文件和符號鏈接(Symbolic Link)文件。
4. 設備文件
設備文件是linux中最特殊的文件。正是由於它的存在,使得linux系統可以十分方便地訪問外部設備。Linux系統為外部設備提供一種標准接口,將外部設備視為一種特殊文件。用戶可以像當問普通文件一樣訪問任何外部設備,使linux系統可以很方便地適應不斷發展的外部設備。通常linux系統將設備文件放在/dev目錄下,設備文件使用設備的主設備號和次設備號來指定某外部設備。根據訪問數據方式的不同,設備文件又可分為塊設備和字符設備。
5. 管道文件
管道文件是一種很特殊的文件,主要用於不同進程的信息傳遞。當兩個進程需要進行數據或信息傳遞時,可以使用通道文件。一個進程將需要傳遞的數據或信息寫入管道的一端,另一進程從管道的另一端取得所需要的數據或信息,通常管道是建立在調整緩存中。
Linux 根目錄下的目錄及目錄的功能各是什么?
(3)/boot : 存放內核及啟動所需要的文件
(4)/dev = devices:存放設備相關的文件
(5)/etc ( editable text configurationChest ):存放系統的配置文件
(6)/home:存放用戶文件的主目錄,用戶數據( cd ~ 可進入自己的主目錄)
(7)/lib :存放啟動時所需要的庫文件
(8)/mnt :存放臨時的映射文件,通常是一些用來安裝其他設備的子目錄(如 /mnt/cdrom /mnt/floppy)
(9)/proc = processes :這是一個虛擬的文件系統,存放當前系統的狀態(有關進程和系統信息)
(10)/root: 超級用戶主目錄
(11)/sbin = Superuser binaries: 存放啟動時所需要的系統管理程序
(12)/tmp = temporary :存放啟動時產生的臨時文件
(13)/usr = Unix shared resources : 包含一般不需要修改的應用程序,命令程序文件,程序庫,手冊,Unix共享資源
(14)/var = Variable:存放系統產生的經常變化的文件
僵屍進程怎么產生的
僵屍進程概述
孤兒進程概述
避免僵屍進程的方法是
Linux 有哪些IO分類,-- 有緩沖的IO和無緩沖的IO, 阻塞IO和非阻塞IO5. 有緩沖IO和無緩沖的IO有什么區別
多路復用有什么用
Java IO模型

Linux 內核 IO 模型
- 阻塞 IO
最傳統的一種 IO 模型,在讀寫數據過程中會發生阻塞。
當用戶線程發出 IO 請求后,內核會去查看數據是否就緒,如果沒有就緒就會等待數據就緒,當數據就緒之后,內核會將數據拷貝到用戶線程,並返回 IO 執行結果給用戶線程,用戶線程解除阻塞狀態並開始處理數據。
對應於 Java 中的 BIO。
- 非阻塞 IO
當用戶線程發起 IO 請求后並不需要等待,即使內核數據還沒有准備好也會馬上得到內核返回的一個結果,用戶線程可以之后再次詢問內核。一旦內核中的數據准備好了,並且又再次收到了用戶線程的請求,那么內核就將數據拷貝到用戶線程並通知用戶線程。
在非阻塞 IO 中,用戶線程需要不斷詢問內核數據是否准備就緒,在數據未就緒時可以處理其他任務。
- 多路復用 IO
在多路復用 IO 模型中會有一個 Selector 線程不斷輪詢多個 Socket 的狀態,只有當 Socket 真正有讀寫事件時才通知用戶線程進行實際的 IO 讀寫操作。阻塞 IO 和 非阻塞 IO 模型需要為每個 Socket 建立一個單獨的線程處理數據,而多路復用 IO 只需要一個線程管理多個 Socket,並且只在真正有讀寫事件時才會使用操作系統的 IO 資源,大大節約了系統資源。
在非阻塞 IO 中不斷詢問 Socket 狀態是通過用戶線程進行的,而在多路復用 IO 中輪詢每個 Socket 狀態是內核在進行的,效率要比用戶線程高。
對於多路復用 IO 模型來說在事件響應體很大時,Selector 線程會成為性能瓶頸,導致后續事件無法及時處理,影響下一輪事件輪詢,因此實際應用中方法體內不做復雜邏輯處理,只做數據的接收和轉發,而將具體業務操作轉發給業務線程處理。
對應於 Java 中的 NIO,在 NIO 中通過
selector.select()
去查詢每個 Channel 是否有事件到達,如果沒有事件到達用戶線程會一直阻塞,因此 NIO 也會導致用戶線程的阻塞。 - 信號驅動 IO
當用戶線程發起一個 IO 請求操作,會給對應的 Socket 注冊一個信號函數,然后用戶線程會繼續執行,當內核數據就緒時會發送一個信號給用戶線程,用戶線程接收到信號之后,便在信號函數中調用 IO 讀寫操作來進行實際的 IO 請求操作。
一般用於 UDP 中。
- 異步 IO
當用戶線程發起異步 read 操作后,立刻就可以開始去做其它事。另一方面,從內核的角度,當它收到一個異步 read 之后會立刻返回一個狀態,說明請求是否成功發起,用戶線程不會任何阻塞。然后內核會等待數據准備完成並將數據拷貝到用戶線程,完成后內核會給用戶線程發送一個信號通知 read 操作已完成。
用戶線程完全不需要關心實際的整個 IO 操作是如何進行的,只需要先發起一個請求,當接收內核返回的成功信號時表示 IO 操作已經完成,就可以直接去使用數據了。
在異步IO模型中,IO操作的兩個階段都不會阻塞用戶線程,這兩個階段都是由內核自動完成,然后發送一個信號告知用戶線程操作已完成,用戶線程不需要再次調用 IO 函數進行具體的讀寫。在信號驅動模型中,當用戶線程接收到信號表示數據已經就緒,然后需要用戶線程調用IO函數進行實際的讀寫操作。
對應於 Java 中的 AIO。
BIO
Java BIO即Block I/O , 同步並阻塞的IO。服務端為每個socket建立一個線程來處理請求。
需要阻塞和等待
使用場景:連接數目少、服務器資源多、
NIO
同步非阻塞IO,相比於BIO有兩大優勢
1. 塊傳輸:面向塊 的 I/O 系統以塊的形式處理數據。每一個操作都在一步中產生或者消費一個數據塊。按塊處理數據比按(流式的)字節處理數據要快得多。
2. 多路復用:會有一個 Selector 線程不斷輪詢多個 Socket 的狀態,只有當 Socket 真正有讀寫事件時才通知用戶線程進行實際的 IO 讀寫操作。阻塞 IO 和 非阻塞 IO 模型需要為每個 Socket 建立一個單獨的線程處理數據,而多路復用 IO 只需要一個線程管理多個 Socket,並且只在真正有讀寫事件時才會使用操作系統的 IO 資源,大大節約了系統資源。
需要等待結果數據返回,不需要阻塞
使用場景:連接數目多、連接時間短、請求消耗比較輕的業務場景。比如聊天服務器。
AIO
Java AIO即Async非阻塞,是異步非阻塞的IO。
不需要等待結果數據返回,不需要阻塞,等待相應的信號通知。
使用場景:連接數目多、連接時間長、請求消耗比較重的業務場景。比如涉及 I/O 操作的相冊服務器。
同步/異步/阻塞/非阻塞
同步和異步是通信機制,阻塞和非阻塞是調用狀態。
- 同步 IO 是用戶線程發起 I/O 請求后需要等待或者輪詢內核 I/O 操作完成后才能繼續執行。需要等待有結果返回才能繼續后續操作
- 異步 IO 是用戶線程發起 I/O 請求后仍可以繼續執行,當內核 I/O 操作完成后會通知用戶線程,或者調用用戶線程注冊的回調函數。
- 阻塞 IO 是指 I/O 操作需要徹底完成后才能返回用戶空間 。
- 非阻塞 IO 是指 I/O 操作被調用后立即返回一個狀態值,無需等 I/O 操作徹底完成。
linux如何查看進程死否死掉。
ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]'
查看進程並進行殺死進程命令
ps -ef | grep java | grep -v grep | awk '{print $2}' | xargs kill -9
其他常見問題
du,df的區別
VI 顯示所有行的行號:vi set number
找到共用80端口的線程
linux基本指令 awk、find、grep
shell腳本:統計一個文件中重復的行和重復次數
linux 如何將文件從一台服務器轉移到另一台服務器
如何查找出現頻率最高的100個ip地址
sh .sh source .sh ./a.sh區別