Linux:
API: 應用編程接口 一般是:
syscall 系統調用接口
libcall 庫調用接口
ABI: 不一樣操做系統的內核對於二進制格式文件的支持是各不相同的
對應平臺支持的可執行環境
Linux和windows所支持的二進制文件格式是不徹底相同的
在每一個應用程序的開頭幾個字節,有一些符號用來標記這是什麼格式的可執行文件,後面就是可執行的數據
Linux 支持的格式爲 ELF格式的 windows上支持的是exe,msi格式的 他們的二進制格式是不一樣的
當任何程序須要運行時,先向內核申請須要運行,內核識別看是否可運行,如發現能夠運行,則劃分紅一部分cpu,讓其運行
.so: Shared Object 共享對象
.dll: Dynamic Link Libraries 動態連接庫
鏈接是有兩種方式的
靜態連接:可以獨立運行,可是連接後空間很龐大
動態連接:java
編譯時,移植能成功,API須要同樣 庫兼容
編譯後,移植能成功,ABI須要同樣linux
早期IEE定義的規範叫:POS API 可移植操做系統接口 操做系統的兼容規範
Portable OS 爲了可以兼容UNIX的使用風格,POS API --> POSIX APIc++
x86
32bits linux: p1
64bits linux: p1shell
自由軟件: 都是支持開源協定的 遵循開源協定的都是自由軟件
FSF:Free Software Fundation 自由軟件基金會
ASF:Apache Software Fundation Apache軟件基金會
特色:
自由學習、自由修改源代碼
能夠出於任何目的獲取源代碼
自由分發源代碼
自由建立衍生版編程
開源許可協議:開源協定
GPLv2 , GPLv3 通用公共許可證(GPL)的幾個版本
LGPL: Lesser(鬆散的) 僅調用庫無需開源
BSD:
一、若是二次發佈的產品中包含源代碼,則在源代碼中必須帶有原來的代碼中的BSD協議;
二、若是二次發佈的只是二進制格式的庫或程序,則須要在發佈的文檔或版權聲明中說明包含原來的代碼中的BSD協議;
三、不能夠用開源代碼的做者/組織和原來的產品名字作市場推廣;
Apache License: 也和BSD類似,但比BSD更寬泛小程序
Copyright 版權
Copyleft 公共版權swift
各類發行版: 各類開源程序 + Linux內核 都是編譯好的
GPL, LGPL, BSD, APLwindows
Android系統:
Linux + jvm(虛擬機) + java程序 處理垃圾時,是不能運行程序的bash
IOS:
FreeBSD + Object-C (swift) (面向對象的C)ssh
Linux基本法則:
一切皆文件(包括硬件)
由多個單一目的小程序組成
組合小程序完成複雜任務
儘量避免捕獲用戶接口,爲了方便腳本編程以實現自動化執行;
使用文本文件保存程序的配置數據:使用一個文本編輯器便可完成系統及服務配置工做;
Linux系統層次:
運行程序:經過內核把某應用程序調度至硬件執行其執行;
用戶接口:是一種獨特的應用程序,可以爲用戶提供啓動其它應用程序的機制;有兩種接口:
CLI:
命令提示符,用戶輸入要執行的命令便可;
shell: 外殼
sh, csh, ksh, bash, zsh, tcsh
[root@root scripts]#echo $SHELL 查看當前用戶所用shell
/bin/bash
GUI:
經過點擊操做來啓動應用程序;
Linux下經常使用的GUI
Gnome, c, gtk
KDE, c++, qt 界面研發
xface, 輕量級桌面
終端:
虛擬終端(程序)
Ctrl-Alt-F[1-6]
全部的虛擬終端表示:/dev/tty#
圖形終端 用戶使用的GUI終端
Ctrl-Alt-F7
僞終端
使用ssh遠程鏈接
在圖形界面下打開的命令提示符
全部的僞終端表示:/dev/pts/#
物理終端(控制檯console) 沒有啓動虛擬終端也沒有啓動僞終端,經過顯卡直接連到顯示器,在啓動虛擬終端啓動程序以前的終端就是物理終端。
表示:/dev/console
串行終端: 不使用vga顯示 一個一個字符來顯示,使用圖形程序時,須要用到VGA
表示:/dev/ttyS#
設備文件:
此前未啓動X window:
startx &
startx -- :2 &
總結命令: ifconfig, tty, ls, startx, echo