Linux 基礎入門
=====================================================================
概述:
=====================================================================
操作系統
1.簡介
★OS: Operating System,通用目的的軟件程序
★操作系統的內核(kernel):
操作系統其實也是一組程序。這組程序的重點在於管理計算機的所有活動及驅動系統中的所有硬件;
總之硬件的所有操作都必須要通過這個操作系統來完成;
內核主要在於管理硬件與提供相關的能力。非常重要,因此,內核程序所放置到內存當中的區塊是受保護的,並且開機後就一直常駐在內存當中。
☉內核的功能:
系統調用接口;
程序管理;
內存管理;
文件系統管理;
設備驅動
★操作系統(OS)分類:
服務器OS:RHEL, CentOS,WindowsServer,AIX
桌面OS:windows 10,windows 7,Mac OS,fedora
移動設備OS:Andriod,IOS,YunOS
★開發接口標準
☉ABI:Application Binary Interface(應用程序二進制接口)
ABI描述了應用程序與OS之間的底層接口,允許編譯好的目標代碼在使用兼容ABI的系統中無需改動就能運行。
即:軟件要想在操作系統上運行,必須要符合此操作系統兼容的ABI接口;
ABI接口由操作系統決定,不同的操作系統ABI接口是不相同的;
☉API:Application Programming Interface(應用程序編程接口)
API定義了源代碼和庫之間的接口,因此同樣的源代碼可以在支持這個API的任何系統中編譯。
☉POSIX: Portable Operating System Interface(可移植操作系統接口)
IEEE在操作系統上定義的一系列API標準
POSIX兼容的程序可在其它POSIX操作系統編譯執行
☉運行程序格式:
Windows: EXE,dll(dynamic link library),lib
Linux: ELF,so(shared object),.a
注意:
Unix-like:Unix類的操作系統
Linux,BSD,AIX...Unix類的操作系統ABI和API是兼容的
2.庫、系統調用、操作系統和硬件之間的關係
★硬件設備與操作系統(OS)
操作系統的一部分功能就是管理硬件設備,它擁有硬件設備的所有權限, 並且把硬件設備包裝隱藏起來。完成所有硬件設備的資源管理和驅動;
資源切割,爲每個程序提供一個虛擬的,獨有訪問的一塊硬件資源,如: 內存塊,CPU的時間片和磁盤空間等;
而運行在這塊資源上的程序除了知道監控它的操作系統外,不會知道其實還有其它的程序在運行,這就是多任務操作系統。
運行在操作系統上面的程序,不用管硬件是怎麼驅動和管理的;
如果每寫一個程序都要把驅動硬件的功能寫上會是一種什麼概念,所以,爲了使人們能夠以更方便、更容易理解的方式提供給程序使用硬件的目的,出現了系統調用。
★操作系統與系統調用接口
操作系統會把一些內核指令 通過一些 函數(接口) 分享出來, 而這個接口就叫作系統調用。 程序只要調用這個接口就可以執行某些硬件動作;
操作系統掩蓋了硬件特性,而以更簡便的方式把使用硬件的方式向上提供給程序, 怎麼向上提供呢, 就是用系統調用接口;
但是這些接口功能簡單,很底層,還需要程序員來爲這些功能簡單的接口通過編程來組合出來複雜的功能,而這個很難,很複雜,而且程序每個都必須要這樣作,那就更難了。關鍵是這些程序可能需要實現的調用接口的功能都是一樣的。 所以就引出來了庫。
★系統調用接口與庫
這個庫就是系統調用接口之上的再次封裝來實現某些特殊的複雜的功能的接口。
簡單的說:庫就是把各個系統調用的接口的單一的功能,組合起來,來實現一些複雜的,有趣的功能。而它還製作了一個接口,可以被其它程序調用。 庫就是一個程序。
庫接口也被稱爲API(Application Programming Interface,應用程序編程接口)
總結:
因爲不能每一個程序都要來驅動硬件設備,所以有了操作系統這個中間層;操作系統提供系統調用接口供程序員編程。而程序也是通過這個接口來達到使用硬件的目地,而不用管操作系統是怎麼操作硬件的。
因爲系統調用接口提供的的功能單一,數量少,需要程序員繁雜的操縱和組合這些接口來實現功能。而且要實現的這個功能,不止就一個程序要用,所以就有了庫, 庫就是實現了這個功能的程序,而這個庫提供了一個接入點,接口, 這個接入點就是API。程序員要想使用這個庫的功能,只要按照庫的說明來接入就可以了。程序通過庫來達到目的, 而不用管庫是怎麼工作的。
一個模塊一個模塊的對接,複雜功能分層化
附圖:
2.分層結構圖:
3.編程語言
☉低級語言:
機器語言:0和1
彙編語言:和機器語言一一對應,與硬件相關的特有代碼、驅動程序開發
☉中級語言:C
系統級應用、驅動程序
☉高級應用:java, Objective-C,C#,python, php
應用級程序開發
Linux起源及哲學思想
1.服務器操作系統
☉Windows
☉Linux:GNU/Linux
☉Unix
附圖:
2.Linux起源及發行版本
★Linux起源
☉1984年:Richard Stallman發起GNU項目和自由軟件基金會
創建開源的UNIX實用工具版本
創建通用公共許可證(GPL)
開源軟件許可實施原則
☉1991年:Linus Torvalds發佈Linux
創建開放源碼,類Unix的內核,在GPL下發布
☉Linux操作系統:
Linux內核+ GNU工具=完整的類UNIX操作系統
如:CentOS,Ubuntu,Android
★Linux發行版本
☉Slackware:SUSE Linux Enterprise Server (SLES)
OpenSUSE桌面
☉Debian
ubuntu,mint
☉RedHat
rhel: redhatenterprise linux 每18個月發行一個新版本
CentOS:兼容rhel的格式
中標麒麟:中標軟件
Fedora:每6個月發行一個新版本
☉ArchLinux:輕量簡潔
☉Gentoo:極致性能,不提供傳統意義的安裝程序
☉LFS: Linux From scratch 自制Linux
☉Android: kernel+busybox(工具集)+java虛擬機
★軟件程序:版本號
格式:major.minor.release (主版本號,次版本號,髮型號或者修正號)
如:Linux:0.99,2.4,2.6,3.0,4.0等
發行版本也有自己的版本號:
如:RHEL:5.x,6.x,7.x
★開源open source
☉開源:軟件和源代碼提供給所有人
自由分發軟件和源代碼
能夠修改和創建衍生作品
作者的代碼完善
☉開源協定:
GPL協定:LGPL,GPLv2,GPLv3
BSD協定:
Apache協定:
☉軟件分類:商業,共享,自由
Community:社區版,遵循開源協定
Enterprise:商業版
2.Linux哲學思想
一切都是一個文件(包括硬件)
小型,單一用途的程序
鏈接程序,共同完成複雜的任務
避免令人困惑的用戶界面
配置數據存儲在文本中
3.Linux獲取發行版(鏡像站點)
http://mirrors.163.com
Linux基礎入門
1.操作系統與硬件
★無論Linux、OSX、Windows操作系統,他們都是有以下部分組成(分層結構):
最底層:硬件;
底層之上:將硬件接口抽象成系統調用(kernel)
再之上:庫;
再此之上:應用程序
★程序的運行有兩種方式
開機自動運行;
用戶通過交互式接口登錄或者連接系統上去,來手動運行程序。
用戶可以通過交互式接口對系統及程序進行操作、配置管理。
注意:
系統的運行獨立與用戶的交互式接口,接口有無,都不影響系統及程序的運行,所以交互式接口不是必需的。但是有些程序是建立在交互式接口之上的。
2.終端(terminal)
★定義:
終端:用戶與主機交互,是必然用到的設備,但是對於服務器來說,非必要不見;
★分類:
☉物理終端:
是直接在主機之上,是本機自帶的,直接連入的,也稱之爲物理控制檯(console)
表示:/dev/console
只有在特殊情況下才會用到,如:單用戶模式;
☉虛擬終端:
Linux提供給我們6個虛擬終端,這些虛擬終端是附加在物理終端之上的,用軟件方式虛擬實現的終端,CentOS默認啓用6個虛擬終端,可以通過快捷鍵來切換。
表示:/dev/tty# [1,6]
切換方式:Ctrl+Alt+F[1-6]
☉圖形終端
也是附加在物理終端之上,用軟件方式虛擬實現的終端,但額外會提供桌面環境,也是虛擬終端的一種切換方式。
切換方式:CentOS 6 :Ctrl+Ait+F7
CentOS 7:在哪個虛擬終端啓動,即位於哪個虛擬終端
命令切換方式:~]# chvt 1...
啓動GUI:在某一虛擬終端接口運行命令:startx &
☉僞終端(模擬終端):
圖形界面下打開的命令行接口,還有基於ssh協議和telent協議等遠程打開的命令行界面。
表示:/dev/pts/#
★查看當前的終端設備命令:
~]# tty
[root@CentOS6 ~]# tty /dev/pts/0注意:
在啓動設備之後,在其上關聯一個用戶接口程序,即可實現與用戶交互;
終端實際上是一個設備,一個設備要想與系統進行交互,必須有交互接口,當我們開啓一個終端時,系統會自動的在終端上運行(附加)一個交互式程序
3.交互式程序的接口
★交互式程序有兩類:GUI和CLI
☉GUI:圖形化界面,是基於X協議實現的窗口管理器(桌面、按鈕的作用等)
Linux桌面系統有:
GNOME(C程序開發,gtk 開發庫)
KDE (C++程序開發,qt開發庫)
XFCE (輕量級桌面)
☉CLI:命令行界面:
對應的叫做shell程序,用戶要想與系統交互,必須通過shell,不同的程序員開發的程序不一樣但是都可以實現同樣的功能(就是交互式功能),所以說shell程序也有很多種,如:Sh,csh,Ksh,Bash,zsh;
Shell又被稱爲Linux的命令解釋器;
獲取當前環境使用的shell是那種shell
# echo $SHELL
顯示當前環境所使用的所有的shell
# cat /etc/shells
演示:
# 獲取當前環境使用的shell [root@CentOS6 ~]# echo $SHELL /bin/bash #顯示所有的shell [root@CentOS6 ~]# cat /etc/shells /bin/sh /bin/bash /sbin/nologin /bin/dash /bin/tcsh /bin/csh