小馬哥Linux筆記
計算機主要部件
- CPU:運算器,控制器,暫存器
- Memory:RAM
- I/O:Input,Output
計算機CPU的基礎內容講解
- 8bit = 1 Byte
- 2^10Byte = 1KB
- 2^20Byte = 1MB
- 2^30Byte = 1GB
CPU通過地址匯流排來控制讀取記憶體,CPU是一個指令的流水線執行器。CPU和每個裝置都有自己的控制器,通過控制匯流排來控制。
程式 :指令 + 資料
編譯器:把面向物件的語言轉化成計算機語言
電腦開機後,計算機自舉,即讀取記憶體中特定地址的程式。
SysV
- IBM: Power,PowerPC,AIX
- SUN: Sparc,SunOS –> Solaris,OpenSolris
- HP: Alpha,HP-UX
CPU的常見平臺
- PowerPC(簡化版的Power)
- Sparc,UltraSparc
- Alpha
- x86
- x86_64(amd64)
- MIPS
- ARM(只提供設計規範)
二進位制程式碼:指令
- 每一種晶片生產時所能執行的命令都是二進位制的,二進位制程式碼;彙編器把二進位制程式碼轉化成人所能理解的組合語言(微碼語言)。所以不同的晶片,彙編器的轉換方式也不同。所以不同的晶片編寫的程式需要移植。
- 高階語言程式設計,如C語言。C語言經過預處理,編譯,彙編,連結後被CPU執行。
- 呼叫:庫,基本提供標準庫。
作業系統發展程序
Windows
- Windows最開始基於DOS(效能很差);
- WindowsNT;
- IBM,OS/2 –> Vista;
- WindowsXP
- Windows7
- WIndows8
- Windows10
BSD Unix的衍生系統(修改Unix)
- Unix開放時期,衍生出了BSD系統。
- 最後一個版本:BSD Lite
- BSD Lite的衍生版本:
- FreeBSD(x86可執行) –> MAC OS, ios
- NetBSD
- OpenBSD(最安全)
Unix –> Linux(仿Unix)
Unix商業化後不公開免費了
- Minix,基於微核心,仿照Unix,不公開
- MIT:Stallman,倡導Freedom;建立GNU組織
- GNU:Gnu is not Unix;反抗Unix的不開源協議
- Linus: Linux(核心)
- GNU/Linux:Linux + GNU提供的外設
- Linux使用C語言寫的,原始碼公開
Linux發行版
- 版本號:
-
major(主版本號).minor(次版本號).release(修訂次數)
- Debian
- Ubuntu(基於Debian的二次發行版)
- Slackware
- s.u.s.E
- Redhat
- Redhat 9 –> Fedora
- RHEL:RedHat Enterprise Linux 3
- CentOs: Community ENTerprise OS,基於RedHat發行的原始碼發行的
- ArchLinux
- Gentoo
- Debian
作業系統
作業系統是使用者和計算機的介面,同時也是計算機硬體和其他軟體的介面:
- 程序排程
- 檔案系統
- 網路協議棧
- 記憶體管理
- 驅動程式
- 安全功能
API(庫) : Application Programming Interface,應用開發可使用庫
ABI(應用二進位制介面):Application Binary Interface,作業系統提供的執行環境
- Linux:
- API : syscall, libcall
- ABI : 程式執行所需的環境
POSIX API: Portable OS (庫介面協議)
.os : Shared Object (Linux)
.dll : Dynamic Link Labraries (Windows)
靜態連結:程式編譯後包含所用的庫,任何地方都可用,但體積過大;
動態連結:程式編譯後不包含所有的庫,相容性不高,但體積輕便;
- 自由軟體 :
- FSF : Free Software Fundation
- ASF : Apache Software Fundation
定義:自由學習,自由修改原始碼,可以處於任何目的獲取原始碼,自由分發原始碼,自由建立衍生版。 - 開源協議:
- GPL:通用公共許可證 GPLv2,GPLv3;(一旦沾邊,程式開源)
- LGPL:Lesser GPL;(做衍生版,程式必須開源;呼叫不用開源)
- BSD:
- 如果二次釋出的產品中包含原始碼,則在原始碼中必須帶有原來程式碼中的BSD協議;
- 不可以用開原始碼的作者或者組織和原來的產品名字做市場推廣;
Apache License:
Copyright
Copyleft
Linux基礎知識
發行版 : 各種開源程式 + Linux核心
Android: Linux + jvm(Java虛擬機器) + Java程式
IOS: FreeBSD + Object(Swift)
Linux的基本法則:
- 一切皆檔案(包括硬體);
- 由眾多單一目的小程式組成;
- 組合小程式完成複雜任務;
- 儘可能避免捕獲使用者介面,方面實現指令碼程式設計以實現自動化執行;
- 使用文字檔案儲存程式的配置資料,使用一個文字編輯器即可完成系統及服務配置工作;
- Linux的基本層次:
- 1 執行程式:通知核心把某應用程式排程至硬體執行其指令
-
2 使用者介面:
- CLI(命令提示符):
- shell: sh,csh,ksh,bash,zsh,tcsh
- GUI(圖形介面):
- Gnome,c語言,gtk
- KDE,c++,qt
- xfce,輕量級
- CLI(命令提示符):
- 3 硬體 –> 作業系統 –> API –> 應用程式
終端分類:
- 虛擬終端(程式): Ctrl+Alt+F[1-6] tty表示為:/dev/tty#
- 圖形終端: Ctrl+Alt+F7 第一次啟動要用startx &,startx – :2 &
- 偽終端: 使用ssh遠端連線;在圖形介面下開啟的命令提示符;tty表示為:/dev/pts/#
- 物理終端(控制檯 console):tty表示為:/dev/console
- 序列終端:tty表示為:/dev/ttyS#
終端命令總結: : ifconfig,tty,ls,startx,echo
計算機基本知識
匯流排
- 地址匯流排:定址
- 控制匯流排:
- 資料匯流排:
- 最新匯流排結構:
- AMD:HT;
- INTEL:QPI
快取
- 暫存器
- 一級快取,二級快取,cache,buffer
- 記憶體
IO:controller(adapter),device
協議:SATA,IDE等等;
Shell
mkdir:建立目錄
ifconfig:檢視網路資訊
tty:檢視終端狀態
ls:檔案目錄
命令提示符:prompt,由shell提供
管理員:#
普通使用者:$
Linux的檔案系統:
- Linux嚴格區分大小寫
- 一個目錄:一個名稱空間,不能重名;
- 相對路徑:從非頂級名稱空間起始的路徑;
- 絕對路徑:從頂級名稱空間(root)起始標記的路徑;
- rootfs
- 登陸系統之後:
- 工作目錄:working directory;
- 當前目錄:current directory;
- 家目錄
命令
命令提示符下格式: COMMAND [OPTIONS] [ARGUMENTS]
命令提示符下可輸入的內容:
- 命令
- 內建命令:shell程式自帶的命令
- 外部命令:本身是一個獨立的可執行程式檔案,命令名即為程式檔名,
- 查詢方式:通過shell的內建環境變數PATH中制定的路徑變數; - 區分方法:type COMMAND
- 應用程式
- 指令碼檔案
echo $PATH 顯示當前的環境變數的值
基本的環境變數路徑值: PATH=/bin:/sbin:/usr/bin:usr/sbin
選項
短選項: -char,例如, -l,-d,-h
- 多個選項間要使用空白分隔符: -l -d -h
- 合併使用: -ldh
長選項: –word,例如, –long, –directory, –human-readable
- 長選項一般不能合併使用
注意:有些選項需要帶引數,稱為選項引數, mkfs -t ext4
引數:命令的作用物件
- cd: change directory
- cd ~USERNAME:切換到指定使用者家目錄
- cd DIRECTORY :切換到制定目錄
- cd - :在前一個目錄和當前目錄之間反覆切換
- 兩個獨特的路徑:cd .. :返回一級目錄; cd . :當前目錄
pwd: print working directory 列印當前目錄
bash特性之一:
- history:顯示歷史命令
- Ctrl + c:終止當前命令的執行
- echo $HISTORYSIZE:儲存歷史命令的條數變數
- echo $HISTORYFILE:儲存歷史命令檔案路徑引數
Linux中所有以 . 開頭的檔案都是隱藏檔案,用選項 -a 或者 -A 可以檢視。
cat FILE : 檢視檔案
help COMMAND:檢視內建命令用法
COMMAND –help:外部命令簡要說明
man COMMAND:命令的詳細說要說明
bash呼叫命令列表中的命令:
- !#:執行命令歷史中的第#條命令
- !!:執行上一條命令
- !string:執行最近一條以string開頭的命令
Bush
- hash:檢視快取使用過的地址,可用help檢視命令使用幫助
- 命令補全:根據內建命令或外部命令的查詢方式查詢以使用者指定的字串開頭的命令。如果使用者指定的開頭字串能唯一標識某一命令,則tab鍵可補全此命令。否則兩次tab鍵顯示所有指定字串開頭的命令。
- 路徑補全:tab
- bash命令歷史:
- HISTSIZE
- HISTFILE
- HISTFILESIZE
- HISTCONTROL:
- ignoredups:忽略重複的命令
- ignorespace:忽略以空白字元打頭的命令
- ignoreboth:以上二者都生效
- data:
- hwclock:
- ntp:
- reboot:
- halt:
- who:
- whoami:
- which:
Lunix
Linux檔案系統的基礎特徵
1.檔名區分大小寫
2.所有檔案都位於根目錄下,FHS
3.路勁以/作為分隔符
4.每個路徑的名稱處理/之外不能超過255個字元
絕對路徑可以分為基名和目錄名:
- 基名:basemane
- 目錄名:dirname
FHS:Filesystem Hierarchy Standard
具體自行下載 fhs 檔案檢視,百度搜索即可。
- /bin(所有使用者都可以用),/sbin(只有管理員可以用):系統自身會用到的核心二進位制命令;
- /usr/bin,/usr/sbin:系統執行中,使用者可能用到的命令;
- /lib:共享庫檔案和核心檔案
- /etc:主機特有的配置檔案
-/dev:所有裝置檔案都存放再這裡,裝置檔案通常也稱為特殊檔案(只有語言資料,沒有資料)
- /proc:偽檔案系統:核心和程序資訊的虛擬檔案系統介面
- /sys:為檔案系統:硬體裝置資訊虛擬檔案系統介面
- /boot:系統引導載入時用到的靜態檔案:
- 核心,ramdisk(CentOS5:initrd,Cent)S6:initramfs),grub(bootloader)
- /home/USRENAME
- /root
- /mnt
- /media
- /srv:服務所用的資料
- /tmp:臨時檔案的存放目錄
- /var:經常發生變化的檔案
- /var/log
- /var/account
- /var/cache
- ……
- /misc:雜項目錄,備用目錄
- /net:
- /opt:第三方應用程式的安裝目錄(早期)
- /usr/local:第三方應用程式的安裝目錄(現在)
- /selinux:Security Enhanced Linux:安全加強的linux,核心工作機制
檔案管理類命令
- 檔案型別
- 檔案資訊檢視
- 使用者和許可權
- bash的一些特性
- 管道和重定向
- 檔案本編輯器
- 正則表示式
- 檔案查詢
檔案型別:ls -l 檢視時每個檔案第一個字元表面檔案型別
- 普通檔案:-
- 目錄檔案:d
- 符號連結檔案:l,後面有箭頭指向
- 裝置檔案:
- 字元裝置:c,線性裝置
- 塊裝置:b,隨機裝置,例如硬碟
- 命名管道:f
- 套接字檔案:s ,unix sock
檔案型別檢視:命令:file 檔案路徑
目錄管理
- cd,pwd,ls
- mkdir:make directory
- rmdir:remove directory
安裝tree
- # cd /etc/yum.repos.d/
- # rm CentOS-Base.repo
- # yum -y install tree
ls:ls [option] [file]
ls -l:
- 例子:drwxr-xr-x. 2 root root 4096 Feb 12 09:55 accout
- 左起第一位:檔案型別
- 後面9位:許可權,常稱mode
- r讀,w寫,x執行
- .:表示檔案有隱藏屬性,lsattr可檢視
- 數字:此檔案被硬體連線的次數
- 屬主:owner,檔案擁有者
- 屬組:group,檔案所屬的組
- 4096:檔案大小,單位是位元組
- 檔案最近一次被修改的時間
- 檔名
檔案管理類的命令
- 檢視:cat,tac,head,tail,less,more
- 時間戳管理:touch
- 複製:cp
- 移動:mv
- 檢視元資料屬性:stat
- 文字編輯器:nano,vi