計算機的組成及功能
根據馮·諾依曼原理
現在計算機有五部分組成
分別是:運算器、控制器、存儲器、輸入設備和輸出設備
現在把運算器和控制器做到一塊就是所謂的CPU
CPU = 運算器+控制器
存儲器:memory 用于存儲信息的記憶設備,存儲器分為ROM和RAM
編址存儲設備
ROM:只讀存儲器,尋址地址空間的組成部分
RAM:隨機存儲器
輸入和輸出設備:
輸入設備:向計算機輸入信息的設備
輸出設備:向人提供運行結果的設備
bus:總線
總線的作用:將電氣信號轉換為數字信號
總線劃分:數據總線、地址總線、控制總線
南橋:低速
北橋:高速
地址總線是實現尋址的
計算機工作流程圖:
程序:
指令+數據
指令:只讀
數據:讀寫
運行程序格式:
Windows: EXE, dll(dynamic link library) 動態鏈接庫
Linux: ELF, so(shared object) 共享對象
程序:算法+數據結構
庫調用,系統調用:允許被調用的程序;不提供數據,只提供指令
編程語言:
語言:
解釋型語言
編譯型語言
編譯方式:
首先將源程序翻譯成等價的目標程序,然后再執行此程序,運行速度較快。如:C 、FORTRAN
解釋方式:
是把源程序逐句翻譯,翻譯一句執行一句,邊翻譯邊執行,運行速度較慢。解釋程序不產生將被執行的目標程序,而是借助解釋程序直接執行源程序本身。如:BASIC 、 LISP
編程語言:
匯編語言:微碼編程
系統中某些與硬件相關的特有代碼、驅動程序開發;
高級語言C, C++:
系統級應用、驅動程序
高級應用java, python, php:
應用程序
malloc() 申請, free() 釋放 節約內存資源
通用軟件:
向上提供接口統一接口,負責硬件的翻譯
OS: Operating System
將底層的細節隱藏起來,并提供一個統一的規范的,簡介的接口提供出來,這就是操作系統的用途
軟件程序
通用目的
硬件驅動
進程管理
內存管理
網絡管理
安全管理
System Call
Syscall:系統調用
編程層次:
面向硬件編程稱為:
硬件規格:hardware specifiacation
系統調用:任何只有內核才能執行的操作,通過接口的形式表現出來,這些接口稱之為系統調用:操作系統之上再抽象一次
庫調用:library call
把系統調用封裝成更復雜的程序,以供別人使用,稱之為庫,又稱重復造輪子
系統啟動=內核+外殼
軟件開發相關的概念介紹:
UI:前端,用戶接口
GUI: Graphic User Interface 圖形界面
CLI: Command Line Interface 命令行
ABI: Application Binary Interface 應用二進制接口 編譯以后
API:Application Programming Interface 開發以后 應用編程接口
ANSI:協議
glibc:C的標準庫 Linux庫
生命周期:進程切換(上下文切換)
集成開發環境(IDE):包括文本編寫,gcc編譯,庫鏈接等
GCC:預處理、編譯、匯編、鏈接 GNU C Complier
內核通過任務結構管理進程
進程:由父進程fork自身而來(由父進程申請,內核完成)
多任務:process
進程:程序實例,程序子集
POS: Portable Operating System
POSIX:可移植操作系統規范
POSIX 定義 API: 編程接口
CPU的架構類型:
x86
x64
arm
摩托羅拉:m68000, m68k
IBM:第一個多核CPU power
蘋果、IBM、摩托羅拉聯合設計:powerpc,簡裝版power
sun:ultrasparc
HP:alpha
安騰
操作系統介紹:
Windows
dos
windowsNT
Windows2012
Unix
System (Bell Lab)
AIX (IBM)
Solaris (SUN)
HP-UX (HP)
BSD: (BSRG)Berkeley System Distribution
NetBSD
OpenBSD
FreeBSD 在pc機上運行
Linux
Linus –> Linux
GNU/Linux
荷蘭安德魯教授仿造unix弄了一個Minix
Linus Torvalds 寫了Linux內核
Linus:1991,8月份
1994年linux1.0內核發布
麻省理工學院MIT:Richard Stallman 激進分子 80年代中期
Free,軟件行業自由運動
GUN:GUN is Not Unix(遞歸縮寫)
GPL:通用公共許可證:General Public License
以下軟件
emacs,gcc, bash vi
Linux內核是有Linus Torvalds,而相關的軟件是由GNU軟件組織提供。
Linux開發版介紹:
Slackware系列:
slackware
suse SLES:suse的企業版
opensuse
debian系列:
debian:不是商業組織,最接近原汁原味的Linux
ubuntu
mint
redhat系列:
rhel: redhat enterprise linux
每18個月發行一個新版本
CentOS:兼容rhel的格式
fedora:2003 年 由社區維護 每6個月發行一個新版本
archlinux系列:
ArchLinux:輕量級,下去找資料
Gentoo系列:
Gentoo:程序包在硬件上現編譯
LFS系列:
LFS: Linux From scratch 自己定制Linux
程序包管理器:
rpm:
RHEL, Fedora, suse, centos
dpt:
Debian, Ubuntu
開源協議說明:
GNU: GPLv2, GPLv3, LGPL(lesser) 寬松的
Apache: apache
BSD: bsd
A: 1000, GPL,
B: 20000, 20 B借用到A的20條代碼,B必須也要遵循GPL協議,流毒無窮協議。
自由軟件:
自由軟件:
自由使用;自由學習和修改;自由分發;自由創建衍生版;
Linux 的哲學思想:
1、一切皆文件;
把幾乎所有資源,包括硬件設備都組織為文件格式;
2、由眾多單一目的小程序組成;一個程序只實現一個功能,而且要做好;
組合小程序完成復雜任務;
3、盡量避免跟用戶交互;
目標:實現腳本編程,以自動完成某些功能;
4、使用純文本文件保存配置信息;
目標:一款使用的文本編程器即能完成系統配置工作;
Linux命令格式:
COMMAND [OPTIONS…] [ARGUMENTS…]
選項:用于啟用或關閉命令的某個或某些功能;
短選項:-c, 例如:-l, -h
多個短選項可命令使用,例如-l -h, 可寫作-lh;
長選項:–word,例如:–long, –human-readable
參數:命令的作用對象
向命令提供數據
命令總結:
ifconfig
1、命令格式
ifconfig [選項] [參數]
2、命令功能
查看和配置網絡設備
3、選項
up:啟動網絡接口
down:關閉網絡接口
-s:顯示摘要信息
add:增加ipv4地址
-a:顯示網卡詳細信息
不帶選項,相當于-a
echo
1、命令格式
echo [選項] [參數]
2、命令功能
回顯
3、選項
-n: 禁止自動添加換行符號;
-e: 允許使用轉義符;
\n: 換行
\t: 制表符
tty
顯示當前所在的終端
startx
進入圖形界面
export
設置或顯示環境變量
修改環境變量值的方式:export 變量名="值"
變量賦值:把賦值符號后面的數據存儲于變量名指向內存空間;
相當于調用PWD變量,顯示當前的目錄
OLDPWD變量上一級目錄
hash
shell搜尋到的外部命令的路徑結果會緩存至kv(key-value)存儲中;
history
管理命令歷史;
登錄shell時,會讀取命令歷史文件中記錄下的命令:~/.bash_history
登錄進shell后新執行的命令只會記錄在緩存中;這些命令會用戶退出時“追加”至命令歷史文件中;
history:
-a: 追加本次會話新執行的命令歷史列表至歷史文件中;
-d: 刪除歷史中指定的命令;
-c: 清空命令歷史;
快捷操作:
!#: 調用歷史中第#條命令;
!string:調用歷史中最近一個以string開頭的命令;
!!: 上一條命令
調用上一條命令的最后一個參數:
!$:
ESC, .
環境變量:
HISTSIZE:命令歷史記錄的條數;
HISTFILE:~/.bash_history;
HISTFILESIZE:命令歷史文件記錄歷史的條數;
控制命令歷史的記錄方式:
環境變量:HISTCONTROL
ignoredups:忽略重復的命令;連續且相同方為“重復”;
ignorespace:忽略所有以空白開頭的命令;
ignoreboth:ignoredups, ignorespace;以上兩種都生效
shutdown
shutdown [OPTION]… TIME [MESSAGE]
-r: reboot
-h: halt
-c:cancel :取消關機或重啟操作
TIME:
now: 立刻
+m: 相對時間表示法,從命令提交開始多久之后;例如 +3;
hh:mm: 絕對時間表示,指明具體時間;
poweroff
關機
reboot
重啟
date
date [OPTION]… [+FORMAT]:顯示
FORMAT: 格式符號
%a或%A:星期
%Y:四位年份
%y:兩位年份
%m:月
%M:分鐘
%d:日
%h:英文簡寫的月
%H:時
%S:秒
%s:現在距離1970年1月1號0點0分(unix元年)的秒數,timestamp(時間戳)
%D:月/日/年
%F:年-月-日
%T:時:分:秒
date [MMDDhhmm[[CC]YY][.ss]]:設置
MM: 月分
DD:幾號
hh: 小時
mm: 分鐘
YY: 兩位年份
CCYY: 四位年份
.ss: 秒鐘
顯示今天為周幾?
date +%a ; date +%A
設定當前系統時間?
date [MMDDhhmm[[CC]YY][.ss]]
date 0815170115.21
顯示今天的日期,形如:08/15/15?
date +%D
顯示當前的時間,形如: 16:01:21?
date +%T
clock
硬件時鐘
hwclock
顯示硬件時鐘
-s, –hctosys :以硬件為準
-w, –systohc:以軟件為準
cal
顯示日歷
type
顯示內部命令還是外部命令
which
查找外部命令的路徑
whereis
定位可執行文件、源代碼文件、幫助文件在文件系統中的位置
目錄相關的命令:
當前目錄或工作目錄
主目錄,家目錄:HOME
root: /root
普通用戶:/home/USERNAME
/home/tom
~:用戶的主目錄
cd
cd 或 cd ~: 回當前用戶的主目錄
cd ~USERNAME: 切換至指定用戶的主目錄 如: cd ~ abc
cd -: 在上一個目錄和當前目錄之間來回切換
. :當前目錄
.. :上一級目錄
ls
顯示指定路徑下的文件列表;不能顯示文件本身
ls [OPTION]… [DIR]…
-a, –all: 顯示所有文件,包括隱藏文件;
-l: 長格式
-rw-r–r– 1 root root 44800 Aug 14 14:32 install.log
-rw-r–r–:
最左側的第一位:文件類型
-, d, l, b, c, p, s
后面的9位:訪問權限,perm
數字:文件被硬鏈接的次數;
左root: 文件的owner :所有者
右root: 文件的group:所屬組
44800:文件的size
Aug 14 14:32 : 文件的最近一次被修改的時間
install.log: 文件名
-h, –human-readable:單位換算
-d: 顯示目錄自身的相關屬性;通常要與-l一起使用;
-r, –reverse: 逆序顯示
-R, –recursive: 遞歸
stat
stat /PATH/TO/SOMEFILE:獲取指定文件的元數據
Access: 訪問時間
Modify: 修改時間
Change:改變時間
文件查看命令:cat, tac
cat
cat [OPTION]… [FILE]…
-E: 顯示行結束符$
-n: 對顯示出的每一行進行編號
file
文件內容類型查看命令
file /PATH/TO/SOMEWHERE
pwd
顯示當前目錄
basename
顯示當前目錄的基名
dirname
顯示當前目錄的目錄名
用戶登錄信息查看命令:
whoami
顯示當前登錄有效用戶
who
系統當前所有的登錄會話
w
系統當前所有的登錄會話及所做的操作;
USER:登錄用戶名
TTY:登錄后的終端
FROM:遠程主機名
LOGIN@:何時登錄
IDLE:空閑時間
JCPU:tty鏈接所有進程占用的時間
PCPU:在WHAT顯示的進程占用的時間
WHAT:正在運行的進程命令行
常用的環境變量
PATH
bash 默認搜索路徑
SHELL
顯示當前所在的shell
PS1
命令提示符:prompt
[root@localhost ~]#
prompt:
管理員:#
普通用戶:$
\u:當前用戶
\h:主機名
\W:工作目錄的路徑基名
基名:當前目錄的最后一段
PWD
保存了當前目錄路徑
OLDPWD
上一次所在目錄路徑
HOME
顯示當前用戶的家目錄
命令幫助
內部命令:
# help COMMAND
外部命令:
(1) # COMMAND –help
# COMMAND -h
(2) 使用手冊(manual)
# man COMMAND
手冊頁:/usr/share/man
man1 … man8
man1: 用戶命令
man2: 系統調用
man3: C庫調用
man4: 設備文件及特殊文件
man5: 配置文件格式
man6: 游戲
man7: 雜項
man8: 管理類的命令
注意:有些關鍵在不止一個章節中存在幫助手冊;
要查看指定章節中的手冊:man # COMMAND
man命令的配置文件:/etc/man.config
MANPATH /PATH/TO/SOMEWHERE: 指明新的手冊文件搜索位置
# man -M /PATH/TO/SOMEWHERE COMMAND: 到指定位置下搜索COMMAND命令的手冊頁并顯示之;
幫助手冊中的段落說明:
NAME:程序的名字及簡要說明
SYNOPSIS:命令的簡要使用幫助
DESCRIPTION:功能詳細描述
OPTIONS:選項
EXAMPLES:使用示例
AUTHOR:作者
REPORTING BUGS:報告bug的聯系人
SEE ALSO:參考
SYNOPSIS:
[]:可選內容
<>: 必選內容
a|b:二選一
…: 同一內容可出現多次
{ }:定界,說明[]和<>
操作方法:
Space, ^V, ^f, ^F: 向文件尾翻屏;
b, ^B: 向文件首部翻屏;
d, ^D: 向文件尾部翻半屏;
u, ^U: 向文件首部翻半屏;
RETURN, ^N, e, ^E or j or ^J: 向文件尾部翻一行;
y or ^Y or ^P or k or ^K:向文件首部翻一行;
q: 退出;
#:跳轉至第#行;
1G: 回到文件首部
G:翻至文件尾部
文本搜索:
/KEYWORD:
以KEYWORD指定的字符串為關鍵字,從當前位置向文件尾部搜索;不區分字符大小寫;
n: 下一個
N:上一個
?KEYWORD:
以KEYWORD指定的字符串為關鍵字,從當前位置向文件首部搜索;不區分字符大小寫;
n: 跟搜索命令同方向,下一個
N:跟搜索命令反方向,上一個
(3) 信息頁
# info COMMAND
(4) 程序自身的幫助文檔
README
INSTALL
ChangeLog
(5) 程序官方文檔
官方站點:Documentation
(6) 發行版的官方文檔
(7) Google
(8) slideshare
http://www.slideshare.net/
Linux的文件系統
根文件系統(rootfs):
root filesystem
LSB:Linux標準庫 FHS: (FileSystem Heirache Standard)文件系統層級標準
/etc, /usr, /var, /root, /home, /dev
/boot:引導文件存放目錄,內核文件(vmlinuz)、引導加載器(bootloader, grub)都存放于此目錄;
/bin:供所有用戶使用的基本命令;不能關聯至獨立分區,OS啟動即會用到的程序;
/sbin:管理類的基本命令;不能關聯至獨立分區,OS啟動即會用到的程序;
/lib:基本共享庫文件,以及內核模塊文件(/lib/modules);
/lib64:專用于x86_64系統上的輔助共享庫文件存放位置;
/etc:配置文件目錄(純文本文件);
/home/USERNAME:普通用戶家目錄;
/root:管理員的家目錄;
/media:便攜式移動設備掛載點;
cdrom
usb
/mnt:臨時文件系統掛載點;
/dev:設備文件及特殊文件存儲位置;
b: block device,隨機訪問 塊設備
c: character device,線性訪問 字符設備
/opt:第三方應用程序的安裝位置;
/srv:系統上運行的服務用到的數據;
/tmp:臨時文件存儲位置;
/usr: universal shared, read-only data;只讀的
bin: 保證系統擁有完整功能而提供的應用程序;
sbin:
lib:
lib64:
include: C程序的頭文件(header files);
share:結構化獨立的數據,例如doc, man等;
local:第三方應用程序的安裝位置;
bin, sbin, lib, lib64, etc, share
/var: variable data files 經常發生變化的文件
cache: 應用程序緩存數據目錄;
lib: 應用程序狀態信息數據;
local:專用于為/usr/local下的應用程序存儲可變數據;
lock: 鎖文件
log: 日志目錄及文件;
opt: 專用于為/opt下的應用程序存儲可變數據;
run: 運行中的進程相關的數據;通常用于存儲進程的pid文件;
spool: 應用程序數據池;
tmp: 保存系統兩次重啟之間產生的臨時數據;
/proc: 用于輸出內核與進程信息相關的虛擬文件系統;
/sys:用于輸出當前系統上硬件設備相關信息的虛擬文件系統;
/selinux: security enhanced Linux,selinux相關的安全策略等信息的存儲位置;
Linux上的應用程序的組成部分:
二進制程序:/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin
庫文件:/lib, /lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64
配置文件:/etc, /etc/DIRECTORY, /usr/local/etc
幫助文件:/usr/share/man, /usr/share/doc, /usr/local/share/man, /usr/local/share/doc
Linux下的文件類型:
– (f):普通文件;
d: 目錄文件;
b: 塊設備;
c: 字符設備;
l: 符號鏈接文件;(軟連接)
p: 管道文件;
s: 套接字文件;socket; 通信接口(IP地址+端口)
socket文件不跨主機通信,在同一臺主機中實現通信,打開
通信信道,就是套接字文件。跨主機利用協議通信,不跨主機
利用套接字通信。
原創文章,作者:N21_ Dominic,如若轉載,請注明出處:http://www.www58058.com/20127
寫的很好,可以多注意一下排版問題,有沒有嘗試自己去畫一些圖來理解問題,加油