在真實的企業環境中大家使用的是linux作為生產環境的服務器。而很多時候我們的代碼寫出來后都是運行在linux服務器下面的。 甚至一些大並發和高技術點的軟件環境,都需要好的linux環境配合。 因此,學習linux搭建linux環境,操作linux操作系統對於能力的提高和找到高薪的工作有非常重要的作用。
linux的重要作用
用linux的好處在於,高效率,穩定的系統,沒有病毒,流氓軟件,Linux下最受歡迎的產品都能很顯著地降低時間成本。譬如Git,VIM,Emacs,Shell。
Linux是一款免費的操作系統,用戶可以通過網絡或其他途徑免費獲得,並可以任意修改其源代碼。這是其他的操作系統所做不到的。正是由於這一點,來自全世界的無數程序員參與了Linux的修改、編寫工作,程序員可以根據自己的興趣和靈感對其進行改變,這讓Linux吸收了無數程序員的精華,不斷壯大。
Linux可以運行在多種硬件平台上,如具有x86、680x0、SPARC、Alpha等處理器的平台。此外Linux還是一種嵌入式操作系統,可以運行在掌上電腦、機頂盒或游戲機上。2001年1月份發布的Linux 2.4版內核已經能夠完全支持Intel 64位芯片架構。同時Linux也支持多處理器技術。多個處理器同時工作,使系統性能大大提高。
java高手一般都在linux系統下工作。
linux的發展史
創始人
Linus Torvalds被稱作Linux之父,著名的電腦程序員、黑客。Linux內核的發明人及該計划的合作者。他利用個人時間及器材創造出了這套當今全球最流行的操作系統內核之一,現受聘於開放源代碼開發實驗室(OSDL:Open Source Development Labs, Inc),全力開發Linux內核。 Linux是一個誕生於網絡、成長於網絡且成熟於網絡的奇特的操作系統。1991年,當時還是芬蘭大學生的Linus Torvalds萌發了開發一個自由的Unix操作系統的想法,當年,Linux就誕生了,為了不讓這個羽毛未豐的操作系統夭折,Linus Torvalds將自已的作品Linux通過Internet發布。從此一大批知名的、不知名的電腦黑客、編程人員加入到開發過程中來,一場聲勢浩大的運動應運而生,Linux逐漸成長起來。 Linux一開始是要求所有的源碼必須公開,並且任何人均不得從Linux交易中獲利。然而這種純粹的自由軟件的理想對於Linux的普及和發展是不利的,於是Linux開始轉向GPL,成為GNU陣營中的主要一員。 Linux憑借優秀的設計、不凡的性能,加上IBM、Intel、CA、CORE、Oracle等國際知名企業的大力支持,市場份額逐步擴大,逐漸成為主流操作系統之一。
歷史
Unix
Unix操作系統是一個強大的多用戶、多任務操作系統,支持多種處理器架構,按照操作系統的分類,屬於分時操作系統,最早由KenThompson、Dennis Ritchie和Douglas McIlroy於1969年在AT&T的貝爾實驗室開發。目前它的商標權由國際開放標准組織所擁有,只有符合單一Unix規范的Unix系統才能使用Unix這個名稱,否則只能稱為類Unix(Unix-like)。
GNU
GNU是自由軟件之父Richard Stallman在1984年組織開發的一個完全基於自由軟件的軟件體系,與此相應的有一分通用公共許可證(General Public License,簡稱GPL)。Linux以及與他有關的大量軟件是在GPL的推動下開發和發布的。 自由軟件之父 - Richard Stallman 像一個神態庄嚴的傳教士一樣喋喋不休地到處傳播自由軟件的福音,闡述他創立GNU的夢想:“自由的思想,而不是免費的午餐”。這位自由軟件的“頂級神甫”為自己的夢想付出了大半生的努力,他不但自己創作了許多自由軟件,如:GCC、和GDB,在他的倡導下,目前人們熟悉的一些軟件如BIND、Perl、Apache、TCP/IP等都成了自由軟件的經典之作。 如果說Richard Stallman創立並推動了自由軟件的發展,那么,Linus Torvalds毫不猶豫奉獻給GNU的Linux,則把自由軟件的發展帶入到一個全新的境界。
BSD
386BSD因為法律問題直到1992年還不能發布,NetBSD和FreeBSD是386BSD的后裔,比Linux早。Linus Torvalds說,當時如果有自由的基於386的Unix-like操作系統,他就可能不會創造Linux。盡管無法預料這給以后的軟件業究竟造成了什么樣的影響(如果沒有這個法律糾紛,很有可能沒有今天的革命性的Linux),但有一點可以肯定,Linux更加豐富了這塊土壤。
Minix
Minix是一種基於微內核架構的類Unix計算機操作系統,由Andrew S. Tanenbaum發明。Minix最初發布於1987年,開放全部源代碼給大學教學和研究工作。2000年重新改為BSD授權,成為自由和開放源碼軟件。 因為AT&T的政策改變,在Version 7 Unix推出之后,發布新的使用條款,將Unix源代碼私有化,在大學中不再能使用Unix源代碼。教授為了能在課堂上教授學生操作系統運作的實務細節,決定在不使用任何AT&T的源代碼前提下,自行開發與Unix兼容的操作系統,以避免版權上的爭議。他以小型Unix(mini-Unix)之意,將它稱為Minix。 Minix沒有任何代碼抄襲Unix,所以它們之間並沒有任何繼承關系,Minix作為當時有史以來的第一個開源的操作系統放到網上以后,短期之內得到了飛速發展,大量的人進行下載學習。 由於Minix是教授一人所寫,所以存在一些漏洞。這時候有使用者發現漏洞存在,想着去下載一些補丁或者自己寫一些補丁來修補這些漏洞,修補之后發現效果不錯,然后就建議教授利用這些補丁完善下Minix,結果呢,教授比較固執,意思是說:為了維持Minix的純潔性,不需要任何外來代碼。也就是說,根本不打算做商業發行,所以Minux保持了其最原始的風范。
Linux
在后來的幾年內,由於計算機硬件工業的強力運作,以Intel主導的x86系統架構的個人計算機大行其道,所以個人計算機算是相當流行的一個機器了。但在此時,人們使用的大多還是DOS操作系統。此時,芬蘭赫爾辛基大學有個叫Linus Torvalds的學生做了件不尋常的事情。當時他正好有一台386的計算機,由於並不喜歡自己電腦上的DOS系統,所以就想:既然Minix這么棒、這么穩定,那我何不將它移植到個人計算機 (好在由於Stallman提倡的Open Source理念,他得以接觸到一些Source Code,而經由這樣的一個想法,O(∩_∩)O~他就很有心的讀取了Unix核心,並且去除較為繁復的核心程序,將它改寫成可以適用於一般個人計算機的x86系統上面)。 到了1991年,他終於將0.02版的原始碼hobby放到網絡上面供大家下載,由於hobby受到大家的肯定,相當多的朋友一起投入這個工作中。終於在1994年,將第一個完整的核心Version 1.0釋出,並且造成目前的大流行。。。由於Linux kernel的發展是由虛擬團隊所達成的,大家都是透過網絡取得Linux的核心原始碼,經由自己精心改造后再回傳給Linux社群,進而一步一步的發展完成完整的Linux系統,至於Linus Torvalds是這個集團中的發起者。由於這個群策群力的緣故,Linus Torvalds將Linux定為同樣造福大家的GNU授權模式! Linux是Linus Torvalds受到Minix的影響而作成的。但在設計哲學上,Linux則和Minix大相逕庭。Minix在內核設計上采用微內核的原則,但Linux則和原始的Unix相同都采用宏內核的概念。在Linux發展之初,雙方還於1992年在新聞組上有過一場精彩的理念爭論。Minix的作者和支持者認為Linux的單內核構造是“向七十年代的大倒退”,而Linux的支持者認為Minix本身沒有實用性。
版本和對應軟件的選擇
Linux內核版本
Linux內核使用三種不同的版本編號方式。 用於1.0版本之前(包括1.0)。第一個版本是0.01,緊接着是0.02、0.03、0.10、0.11、0.12、0.95、0.96、0.97、0.98、0.99和之后的1.0。 用於1.0之后到2.6,數字由三部分“A.B.C”,A代表主版本號,B代表次主版本號,C代表較小的末版本號。只有在內核發生很大變化時(歷史上只發生過兩次,1994年的1.0、1996年的2.0),A才變化。可以通過數字B來判斷Linux是否穩定,偶數的B代表穩定版,奇數的B代表開發版。C代表一些bug修復,安全更新,新特性和驅動的次數。 以版本2.4.0為例,2代表主版本號,4代表次版本號,0代表改動較小的末版本號。在版本號中,序號的第二位為偶數的版本表明這是一個可以使用的穩定版本,如2.2.5,而序號的第二位為奇數的版本一般有一些新的東西加入,是個不一定很穩定的測試版本,如2.3.1。這樣穩定版本來源於上一個測試版升級版本號,而一個穩定版本發展到完全成熟后就不再發展。 從2004年2.6.0版本開始,使用一種“time-based”的方式。3.0版本之前,是一種“A.B.C.D”的格式。這些年里,前兩個數字A.B即“2.6”保持不變,C隨着新版本的發布而增加,D代表一些bug修復、安全更新、添加新特性和驅動的次數。3.0版本之后是“A.B.C”格式,B隨着新版本的發布而增加,C代表一些bug修復、安全更新、新特性和驅動的次數。 第三種方式中不再使用偶數代表穩定版,奇數代表開發版這樣的命名方式。舉個例子:3.7.0代表的不是開發版,而是穩定版!
Linux發行版
Linux主要作為Linux發行版(通常被稱為”distro”)的一部分而使用。這些發行版由個人、松散組織的團隊、以及商業機構和志願者組織編寫。它們通常包括了其他的系統軟件和應用軟件,以及一個用來簡化系統初始安裝的安裝工具,和讓軟件安裝升級的集成管理器。大多數系統還包括了像提供GUI界面的XFree86之類的曾經運行於BSD的程序。 一個典型的Linux發行版包括:Linux內核、一些GNU程序庫和工具、命令行shell、圖形界面的X Window系統和相應的桌面環境,如:KDE或GNOME,並包含數千種從辦公套件、編譯器、文本編輯器到科學工具的應用軟件。 由於發展的Linux公司實在太多了,例如著名的Red Hat、OpenLinux、Mandrake 、Debian、SuSE等。所以很多人都很擔心,如此一來每個 distribution(安裝套件)是否都不相同呢?這就不需要擔心了,由於各個distribution都是架構在Linux Kernel下來發展屬於自己公司風格的distribution,因此大家都遵守Linux Standard Base ( LSB 的規范,也就是說,各個distribution其實都差不多,用到的都是Linux Kernel,只是各個distribution里面所使用的各套件可能並不完全相同而已)。
Linux系統特點
- 開放性
- 多用戶、多任務、良好的用戶界面、豐富的網絡功能、可靠的系統安全性,良好的可移植性,出色的性能和穩定性、標准兼容性
Linux版本選擇
CentOS(community enterprise operating System)
- 主流:目前的Linux操作系統主要應用於生產環境,主流企業級Linux系統仍舊是RedHat或者CentOS
- 免費:RedHat 和CentOS差別不大,基於Red Hat Linux 提供的可自由使用源代碼的企業CentOS是一個級Linux發行版本
- 更新方便:CentOS獨有的yum命令支持在線升級,可以即時更新系統,不像RedHat 那樣需要花錢購買支持服務
相關工具
虛擬機:可以下載vmware作為虛擬機
版本:centost7.x 64位
連接工具:xshell、putty、secureCRT
傳輸工具:Sftp類的winScp
系統安裝
虛擬機安裝:https://www.cnblogs.com/adan-chiu/p/12587077.html
CentOS操作系統安裝:
享受Linux的世界
shell
殼, 解釋器,交互終端。
操作系統提供與用戶交互的界面端口。去完成命令的解析與執行。
沒有安裝桌面的情況下,通過shell完成交互!
虛擬電腦聯網方式
快速使用
在虛擬電腦關機的情況下,設置聯網方式為:host-only
重啟虛擬電腦
查看獲取的IP,進行通信。windows: ipconfig centos :ifconfig
測試互ping。
如果不能成,可能的原因就是 防火牆!
前提:安裝centOS時,選擇了網絡自動連接。
VMware,連接到網絡的方式
NAT:網絡地址轉換
最快速的虛擬電腦聯網方式。借助於實體電腦(windows),進行網絡地址的映射轉換完成上網。
結果:
虛擬電腦可以上外網(實體電腦可以上)
虛擬電腦與實體電腦之間不能通信。除非配置路由映射。
橋接
通過網橋連接。最典型的聯網方式。需要橋接可以聯網的網卡上。
結果:
虛擬電腦,就是局域網內的一台普通電腦。
網內的所有電腦包括實體與虛擬電腦都可以正常通信!
問題:橋接通信需要在linux中配置網絡。(除非,局域網交換機存在DHCP(自動分配IP功能))
host-only,僅主機
僅僅可以與主機通信。虛擬電腦僅僅可以與實體電腦通信。
結果:
虛擬電腦和安裝虛擬電腦的實體電腦通信。
不能與其他局域網的實體(虛擬)電腦通信。
還可以與同處一台實體電腦的虛擬電腦進行通信。
我們選擇 僅主機host-only
該網絡連接,負責與虛擬電腦中:例如 eth0,虛擬電腦中CentOS中的網絡連接(網卡)進行通信。如圖所示:
連接
在開機前,先選擇 host-only的方式進行通信
重新開機
此時,我們所選的host-only會自動幫助我們分配 56段的IP地址:
例如:192.168.56.101
ssh客戶端
常見的windows上的ssh客戶端軟件:
secureCRT的軟件,安裝略。
目錄結構
Linux常用指令
指令:linux命令是對Linux系統進行管理的命令。對於Linux系統來說,無論是中央處理器、內存、磁盤驅動器、鍵盤、鼠標,還是用戶等都是文件,Linux系統管理的命令是它正常運行的核心,與之前的DOS命令類似。linux命令在系統中有兩種類型:內置Shell命令和Linux命令。
指令格式:
指令主體 [選項] [操作對象]
其中選項 和操作對象是可選的,[]表示可選
比如:
ls -lah /usr
注:所有的指令都可以使用 --help選項獲取該指令的用法
pwd:打印當前工作路徑,全稱:print working directory
語法
pwd [--help][--version]
參數說明:
- --help 在線幫助。
- --version 顯示版本信息。
實例
查看當前所在目錄:
ls(list)命令用於顯示指定工作目錄下之內容(列出目前工作目錄所含之文件及子目錄)。
語法
ls [-選項] [路徑]
參數 :
- -a 顯示所有文件及目錄 (ls內定將文件名或目錄名稱開頭為"."的視為隱藏檔,不會列出)
- -l 除文件名稱外,亦將文件型態、權限、擁有者、文件大小等資訊詳細列出
- -h 以比較友好的形式顯示文件大小
- -t 將文件依建立時間之先后次序列出
實例
列出根目錄(/)下的所有目錄:
將 /home目錄下所有目錄及文件詳細資料列出,顯示其大小 :
cd 切換目錄(change directory)
語法
cd [dirName]
- dirName:要切換的目標目錄。
絕對路徑:
先切換到/目錄,然后在/目錄中找子目錄。在任意目錄都可以隨意切換
相對路徑:
在當前目錄中尋找子目錄
當前路徑: ./,也可以不寫
上一級目錄: ../
家目錄的快捷符號: ~
實例
跳到 /usr/bin/ :
跳到自己的 home 目錄 :
跳到目前目錄的上上兩層 : cd ../../
mkdir(make directory):創建目錄
語法
mkdir [-p] dirName
參數 :
- -p父目錄不存在先創建父目錄
- --v顯示版本信息
rmdir(remove directory):刪除空目錄
touch若文件不存在,系統會建立一個新的文件。
語法
touch fileName
cp命令主要用於復制文件或目錄。
語法
cp [options] source dest
或
cp [options] source... directory
參數說明:
- -f:覆蓋已經存在的目標文件而不給出提示。
- -i:與-f選項相反,在覆蓋目標文件之前給出提示,要求用戶確認是否覆蓋,回答"y"時目標文件將被覆蓋。
- -r:若給出的源文件是一個目錄文件,此時將復制該目錄下所有的子目錄和文件。
mv 命令用來為文件或目錄改名、或將文件或目錄移入其它位置。
語法
mv [options] source dest
mv [options] source... directory
參數說明:
- -i: 若指定目錄已有同名文件,則先詢問是否覆蓋舊文件;
- -f: 在 mv 操作要覆蓋某已有的目標文件時不給任何指示;
實例
將文件 aaa 更名為 bbb :
將/usr/student下的所有文件和目錄移到當前目錄下,命令行為:
rm命令用於刪除一個文件或者目錄。
語法
rm [options] name...
參數:
- -i 刪除前逐一詢問確認。
- -f 即使原檔案屬性設為唯讀,亦直接刪除,無需逐一確認。
- -r 將目錄及以下之檔案亦逐一刪除。
實例
刪除文件可以直接使用rm命令,若刪除目錄則必須配合選項"-r",例如:
# rm test.txt
rm:是否刪除 一般文件 "test.txt"? y
# rm homework
rm: 無法刪除目錄"homework": 是一個目錄
# rm -r homework
rm:是否刪除 目錄 "homework"? y
如不想要確認提示,添加-f選項
刪除當前目錄下的所有文件及目錄,命令行為:
文件一旦通過rm命令刪除,則無法恢復,所以必須格外小心地使用該命令。
系統備份:
1.快照(還原點):開機環境中
2.克隆(完整備份):創建一個全新的虛擬機,該虛擬機狀態和當前虛擬機一致(關機狀態)
cat 命令用於連接文件並打印到標准輸出設備上。
語法格式
cat [-選項] [--help] [--version] fileName
參數:
-n 或 --number:由 1 開始對所有輸出的行數編號。
-b 或 --number-nonblank:和 -n 相似,只不過對於空白行不編號。
-s 或 --squeeze-blank:當遇到有連續兩行以上的空白行,就代換為一行的空白行。
-E 或 --show-ends : 在每行結束處顯示 $。
輸出重定向
將終端顯示結果輸出到指定文件中
>:覆蓋指定文件內容
>>:在指定文件中追加內容
實例
cat demo.txt > fire.txt
cat demo.txt >> fire.txt
如何關機
其實,在Linux領域內大多用在服務器上,很少遇到關機的操作。畢竟服務器上跑一個服務是永無止境的,除非特殊情況下,不得已才會關機。
Linux和windows不同,在 Linux 底下,由於每個程序(或者說是服務)都是在一定背景下執行的,因此,在你看不到的屏幕背后其實可能有相當多人同時在你的主機上面工作,例如瀏覽網頁啦、傳送信件啦以 FTP 傳送檔案啦等等的,如果你直接按下電源開關來關機時,則其它人的數據可能就此中斷!那可就傷腦筋了!此外,最大的問題是,若不正常關機,則可能造成文件系統的毀損(因為來不及將數據回寫到檔案中,所以有些服務的檔案會有問題!)。
如果你要關機,必須要保證當前系統中沒有其他用戶在線。可以下達 who 這個指令,而如果要看網絡的聯機狀態,可以下達 netstat -a 這個指令,而要看背景執行的程序可以執行 ps -aux 這個指令。使用這些指令可以讓你稍微了解主機目前的使用狀態!(這些命令在以后的章節中會提及,現在只要了解即可!)
sync 將數據由內存同步到硬盤中。 shutdown 關機指令,你可以man shutdown 來看一下幫助文檔。例如你可以運行如下命令關機: shutdown -h 10 這個命令告訴大家,計算機將在10分鍾后關機,並且會顯示在登陸用戶的當前屏幕中。 shutdown -h now 立馬關機 shutdown -h 20:25 系統會在今天20:25關機 shutdown -h +10 十分鍾后關機 shutdown -r now 系統立馬重啟 shutdown -r +10 系統十分鍾后重啟 reboot 就是重啟,等同於 shutdown -r now halt 關閉系統,等同於shutdown -h now 和 poweroff
最后總結一下,不管是重啟系統還是關閉系統,首先要運行sync命令,把內存中的數據寫到磁盤中。關機的命令有 shutdown -h now, halt, poweroff 和 init 0 , 重啟系統的命令有 shutdown -r now, reboot, init 6