第三週總結

第七天:

1:true:真

0:false:假

與:只要有0結果就是0

或:只要有1結果就是1

短路與:

cmd1 短路與&& cmd2

如果cmd1 真,執行cmd2,結果未知

如果cmd1 假,不需要執行cmd2,結果爲假


cmd1 短路或|| cmd2

如果cmd1 假,執行cmd2,結果未知

如果cmd1 真,不需要執行cmd2,結果爲假


條件測試:

test:條件判斷

test EXPRESSION

[ EXPRESSION ]

[[ EXPRESSION ]]:支持輸入正則表達式


數值測試:

-gt 是否大於

-ge 是否大於等於

-eq 是否等於

-ne 是否不等於

-lt 是否小於

-le 是否小於等於

字符串測試:

= 是否等於

> ascii碼是否大於ascii碼

< 是否小於

!= 是否不等於

=~ 左側字符串是否能夠被右側的PATTERN所匹配

   注意: 此表達式一般用於[[ ]]中;擴展的正則表達式

-z "STRING“ 字符串是否爲空,空爲真,不空爲假

-n "STRING“ 字符串是否不空,不空爲真,空爲假

注意:用於字符串比較時的用到的操作數都應該使用引號

==後邊是通配符,=~後邊是正則表達式

[[ $file =~ \.sh$ ]] && chomd +x $file


存在性測試

-a FILE:同-e

-e FILE: 文件存在性測試,存在爲真,否則爲假

存在性及類別測試

-b FILE:是否存在且爲塊設備文件

-c FILE:是否存在且爲字符設備文件

-d FILE:是否存在且爲目錄文件

-f FILE:是否存在且爲普通文件

-h FILE 或 -L FILE:存在且爲符號鏈接文件

-p FILE:是否存在且爲命名管道文件

-S FILE:是否存在且爲套接字文件

文件權限測試:

-r FILE:是否存在且可讀

-w FILE: 是否存在且可寫

-x FILE: 是否存在且可執行

文件特殊權限測試:

-u FILE:是否存在且擁有suid權限

-g FILE:是否存在且擁有sgid權限

-k FILE:是否存在且擁有sticky權限

文件大小測試:

-s FILE: 是否存在且非空

文件是否打開:

-t fd: fd 文件描述符是否在某終端已經打開

-N FILE:文件自從上一次被讀取之後是否被修改過

-O FILE:當前有效用戶是否爲文件屬主

-G FILE:當前有效用戶是否爲文件屬組

雙目測試:

FILE1 -ef FILE2: FILE1是否是FILE2的硬鏈接

FILE1 -nt FILE2: FILE1是否新於FILE2(mtime)

FILE1 -ot FILE2: FILE1是否舊於FILE2

Bash的組合測試條件:

第一種方式:

COMMAND1 && COMMAND2 並且

COMMAND1 || COMMAND2 或者

! COMMAND 非

如:[ -f “$FILE” ] && [[ “$FILE”=~ .*\.sh$ ]]

第二種方式:

EXPRESSION1 -a EXPRESSION2 並且

EXPRESSION1 -o EXPRESSION2 或者

! EXPRESSION

必須使用測試命令進行,[[ ]] 不支持

示例:

[ -z “$HOSTNAME” -o $HOSTNAME "=="localhost.localdomain" ] \

&& hostname www.magedu.com

[ -f /bin/cat -a -x /bin/cat ] && cat /etc/fstab

使用read命令來接受輸入

使用read來把輸入值分配給一個或多個shell變量

-p 指定要顯示的提示

-s 靜默輸入,一般用於密碼

-n N 指定輸入的字符長度N

-d ‘字符’ 輸入結束符

-t N TIMEOUT爲N秒

read 從標準輸入中讀取值,給每個單詞分配一個變量

所有剩餘單詞都被分配給最後一個變量

read -p “Enter a filename: “ FILE

條件選擇if語句

單分支

if 判斷條件;then

條件爲真的分支代碼

fi

雙分支

if 判斷條件; then

條件爲真的分支代碼

else

條件爲假的分支代碼

fi

多分支

if 判斷條件1; then

條件1爲真的分支代碼

elif 判斷條件2; then

條件2爲真的分支代碼

elif 判斷條件3; then

條件3爲真的分支代碼

else

以上條件都爲假的分支代碼

fi

逐條件進行判斷,第一次遇爲“真”條件時,執行其分支,而後結束整個if語句


條件判斷:case語句

case 變量引用 in case支持glob風格的通配符:

PAT1) *: 任意長度任意字符

分支1 ?: 任意單個字符

;; []:指定範圍內的任意單個字符

PAT2) a|b: a或b

分支2

;;

...

*)

默認分支

;;

esac


bash如何展開命令行

把命令行分成單個命令詞

展開別名

展開大括號的聲明({})

展開波浪符聲明(~)

命令替換$() 和 ``)

再次把命令行分成命令詞

展開文件通配(*、?、[abc]等等)

準備I/0重導向(<、>)

運行命令


防止擴展

反斜線(\)會使隨後的字符按原意解釋

加引號來防止擴展

單引號(’)防止所有擴展

雙引號(”)也防止所有擴展,但是以下情況例外:

$(美元符號) - 變量擴展

`(反引號) - 命令替換

\(反斜線) - 禁止單個字符擴展

!(歎號) - 歷史命令替換


bash的配置文件

按生效範圍劃分,存在兩類:

全局配置:

/etc/profile

/etc/profile.d/*.sh

/etc/bashrc

個人配置:

~/.bash_profile

~/.bashrc


交互式登錄:

執行順序:/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

非交互式登錄:

執行順序: /etc/profile.d/*.sh --> /etc/bashrc -->~/.bashrc


Profile類

按功能劃分,存在兩類:

profile類和bashrc類

profile類:爲交互式登錄的shell提供配置

全局:/etc/profile, /etc/profile.d/*.sh

個人:~/.bash_profile

功用:

(1) 用於定義環境變量

(2) 運行命令或腳本

Bashrc類

bashrc類:爲非交互式和交互式登錄的shell提供配置

全局:/etc/bashrc

個人:~/.bashrc

功用:

(1) 定義命令別名和函數

(2) 定義本地變量

Bash 退出任務

保存在~/.bash_logout文件中(用戶)

在退出登錄shell時運行

用於

•創建自動備份

•清除臨時文件

$-變量

h:hashall,打開這個選項後,Shell 會將命令所在的路徑hash下來,避免每次都要查詢。通過set +h將h選項關閉

i:interactive-comments,包含這個選項說明當前的 shell 是一個交互式的 shell。所謂的交互式shell,在腳本中,i選項是關閉的。

m:monitor,打開監控模式,就可以通過Job control來控制進程的停止、繼續,後臺或者前臺執行等。

B:braceexpand,大括號擴展

H:history,H選項打開,可以展開歷史列表中的命令,可以通過!感嘆號來完成,例如“!!”返回上最近的一個歷史命令,“!n”返回第 n 個歷史命令


文件的查找和壓縮

文件查找:locate, find

非實時查找(數據庫查找):locate

實時查找:find

locate

查詢系統上預建的文件索引數據庫

/var/lib/mlocate/mlocate.db

依賴於事先構建的索引

索引的構建是在系統較爲空閒時自動進行(週期性任務),管理員手動更新數據庫(updatedb)

索引構建過程需要遍歷整個根文件系統,極消耗資源

工作特點:

•查找速度快

•模糊查找

•非實時查找

•搜索的是文件的全路徑,不僅僅是文件名

•可能只搜索用戶具備讀取和執行權限的目錄

有用的選項

-i 不區分大小寫的搜索

-n N 只列舉前N個匹配項目

-r 使用基本正則表達式

示例

搜索名稱或路徑中帶有“conf”的文件

locate conf

使用Regex來搜索以“.conf”結尾的文件

locate -r ‘\.conf$’

find:

實時查找工具,通過遍歷指定路徑完成文件查找

工作特點:

• 查找速度略慢

• 精確查找

• 實時查找

• 可能只搜索用戶具備讀取和執行權限的目錄

find [OPTION]... [查找路徑] [查找條件] [處理動作]

查找路徑:指定具體目標路徑;默認爲當前目錄

查找條件:指定的查找標準,可以文件名、大小、類型、權限等標準進行;默認爲找出指定路徑下的所有文件

處理動作:對符合條件的文件做操作,默認輸出至屏幕

選項:

指搜索層級

-maxdepth level 最大搜索目錄深度,指定目錄爲第1級

-mindepth level 最小搜索目錄深度

先處理目錄內的文件,再處理目錄

-depth

根據文件名和inode查找:

-name "文件名稱":支持使用glob

*, ?, [], [^]

-iname "文件名稱":不區分字母大小寫

-inum n 按inode號查找

-samefile name 相同inode號的文件

-links n 鏈接數爲n的文件

-regex “PATTERN”:以PATTERN匹配整個文件路徑,而非文件名稱

根據屬主、屬組查找:

-user USERNAME:查找屬主爲指定用戶(UID)的文件

-group GRPNAME: 查找屬組爲指定組(GID)的文件

-uid UserID:查找屬主爲指定的UID號的文件

-gid GroupID:查找屬組爲指定的GID號的文件

-nouser:查找沒有屬主的文件

-nogroup:查找沒有屬組的文件

根據文件類型查找

-type TYPE

•f: 普通文件

•d: 目錄文件

•l: 符號鏈接文件

•s:套接字文件

•b: 塊設備文件

•c: 字符設備文件

•p: 管道文件

空文件或目錄

-empty

find /app -type d -empty

組合條件:

與:-a

或:-o

非:-not !

德·摩根定律:

(非 A) 或 (非 B) = 非(A 且 B)

(非 A) 且 (非 B) = 非(A 或 B)

示例:

!A -a !B = !(A -o B)

!A -o !B = !(A -a B)

根據文件大小來查找:

-size [+|-]#UNIT

常用單位:k, M, G,c(byte)

#UNIT: (#-1, #]

如:6k 表示(5k,6k]

-#UNIT:[0,#-1]

如:-6k 表示[0,5k]

+#UNIT:(#,∞)

如:+6k 表示(6k,∞)

處理動作

-print:默認的處理動作,顯示至屏幕

-ls:類似於對查找到的文件執行“ls -l”命令

-delete:刪除查找到的文件

-fls file:查找到的所有文件的長格式信息保存至指定文件中

-ok COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令,對於每個文件執行命令之前,都會交互式要求用戶確認

-exec COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令

{}: 用於引用查找到的文件名稱自身

find傳遞查找到的文件至後面指定的命令時,查找到所有符合條件的文件一次性傳遞給後面的命令

壓縮工具:

gzip:

-d 解壓縮,相當於gunzip

-c 結果輸出至標準輸出,保留原文件不改變

-# 指定壓縮比,#取值爲1-9,值越大壓縮比越大

gunzip file.gz 解壓縮

zcat file.gz 不顯式解壓縮的前提下查看文本文件內容

示例:

gzip -c messages >messages.gz

gzip -c -d messages.gz > messages

zcat messages.gz > messages

cat messages | gzip > m.gz


bzip2/bunzip2/bzcat:

bzip2 [OPTION]... FILE ...

-k keep, 保留原文件

-d 解壓縮

-# 1-9,壓縮比,默認爲9

bunzip2 file.bz2 解壓縮

bzcat file.bz2 不顯式解壓縮的前提下查看文本文件內容


xz/unxz/xzcat:

xz [OPTION]... FILE ...

-k keep, 保留原文件

-d 解壓縮

-# 壓縮比,取值1-9,默認爲6

unxz file.xz 解壓縮

xzcat file.xz 不顯式解壓縮的前提下查看文本文件內容


zip/unzip

打包壓縮

zip –r /backup/sysconfig /etc/sysconfig/

解包解壓縮

unzip sysconfig.zip

cat /var/log/messages | zip messages -

unzip -p message > message


tar工具

tar(Tape ARchive,磁帶歸檔的縮寫)

tar [OPTION]...

(1) 創建歸檔

tar -cpvf /PATH/FILE.tar FILE...

(2) 追加文件至歸檔: 注:不支持對壓縮文件追加

tar -r -f /PATH/FILE.tar FILE...

(3) 查看歸檔文件中的文件列表

tar -t -f /PATH/FILE.tar

(4) 展開歸檔

tar -x -f /PATH/FILE.tar

tar -x -f /PATH/FILE.tar -C /PATH/

(5) 結合壓縮工具實現:歸檔並壓縮

-j: bzip2, -z: gzip, -J: xz

-exclude 排除文件

tar zcvf /root/a3.tgz --exclude=/app/host1 --exclude=/app/host2 /app

-T 選項指定輸入文件 -X 選項指定包含要排除的文件列表

tar zcvf mybackup.tgz -T /root/includefilelist -X /root/excludefilelist


split:分割一個文件爲多個文件

分割大的 tar 文件爲多份小文件

split -b Size –d tar-file-name prefix-name

split -b 1M –d mybackup.tgz mybackup-parts

split -b 1M mybackup.tgz mybackup-parts

合併:

cat mybackup-parts* > mybackup.tar.gz


第八天:

cpio:複製文件從或到歸檔

cpio命令是通過重定向的方式將文件進行打包備份,還原恢復的工具,它可以解壓以“.cpio”或者“.tar”結尾的文件

cpio [選項] > 文件名或者設備名

cpio [選項] < 文件名或者設備名

選項:

-o 將文件拷貝打包成文件或者將文件輸出到設備上

-O filename 輸出到指定的歸檔文件名

-A 向已存在的歸檔文件中追加文件

-i 解包,將打包文件解壓或將設備上的備份還原到系統

-I filename 對指定的歸檔文件名解壓

-t 預覽,查看文件內容或者輸出到設備上的文件內容

-F filename 使用指定的文件名替代標準輸入或輸出

-d 解包生成目錄,在cpio還原時,自動的建立目錄

-v 顯示打包過程中的文件名稱


文本處理三劍客之SED

Stream EDitor, 行編輯器

sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩衝區中,稱爲“模式空間”(pattern space),接着用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往屏幕。然後讀入下行,執行下一個循環。如果沒有使諸如‘D’的特殊命令,那會在兩個循環之間清空模式空間,但不會清空保留空間。這樣不斷重複,直到文件末尾。文件內容並沒有改變,除非你使用重定向存儲輸出。

功能:主要用來自動編輯一個或多個文件,簡化對文件的反覆操作,編寫轉換程序等

參考: http://www.gnu.org/software/sed/manual/sed.html

用法:

sed [option]... 'script' inputfile...

常用選項:

-n 不輸出模式空間內容到屏幕,即不自動打印

-e 多點編輯

-f /PATH/SCRIPT_FILE 從指定文件中讀取編輯腳本

-r 支持使用擴展正則表達式

-i.bak 備份文件並原處編輯

script:

'地址命令'

地址定界:

(1) 不給地址:對全文進行處理

(2) 單地址:

#: 指定的行,$:最後一行

/pattern/:被此處模式所能夠匹配到的每一行

(3) 地址範圍:

#,#

#,+#

/pat1/,/pat2/

#,/pat1/

(4) ~:步進

1~2 奇數行

2~2 偶數行

編輯命令:

d 刪除模式空間匹配的行,並立即啓用下一輪循環

p 打印當前模式空間內容,追加到默認輸出之後

a [\]text 在指定行後面追加文本,支持使用\n實現多行追加

i [\]text 在行前面插入文本

c [\]text 替換行爲單行或多行文本

w /path/file 保存模式匹配的行至指定文件

r /path/file 讀取指定文件的文本至模式空間中匹配到的行後

= 爲模式空間中的行打印行號

! 模式空間中匹配行取反處理

s/// 查找替換,支持使用其它分隔符,s@@@,s###

替換標記:

g 行內全局替換

p 顯示替換成功的行

w /PATH/FILE 將替換成功的行保存至文件中

高級編輯命令

P: 打印模式空間開端至\n內容,並追加到默認輸出之前

h: 把模式空間中的內容覆蓋至保持空間中

H:把模式空間中的內容追加至保持空間中

g: 從保持空間取出數據覆蓋至模式空間

G:從保持空間取出內容追加至模式空間

x: 把模式空間中的內容與保持空間中的內容進行互換

n: 讀取匹配到的行的下一行覆蓋至模式空間

N:讀取匹配到的行的下一行追加至模式空間

d: 刪除模式空間中的行

D:如果模式空間包含換行符,則刪除直到第一個換行符的模式空間中的文本,並不會讀取新的輸入行,而使用合成的模式空間重新啓動循環。如果模式空間不包含換行符,則會像發出d命令那樣啓動正常的新循環



軟件包管理


軟件運行和編譯:

ABI:Application Binary Interface

Windows與Linux不兼容

ELF(Executable and Linkable Format)

PE(Portable Executable)

庫級別的虛擬化:

Linux: WINE

Windows: Cygwin

API:Application Programming Interface

POSIX:Portable OS

程序源代碼 --> 預處理 --> 編譯 --> 彙編 --> 鏈接

靜態編譯:.a

動態編譯:.so


解決依賴包管理工具:

yum:rpm包管理器的前端工具

apt-get:deb包管理器前端工具

zypper: suse上的rpm前端管理工具

dnf: Fedora 18+ rpm包管理器前端管理工具


CentOS系統上使用rpm命令管理程序包:

安裝、卸載、升級、查詢、校驗、數據庫維護

安裝:

rpm {-i|--install} [install-options] PACKAGE_FILE…

-v: verbose

-vv:

-h: 以#顯示程序包管理執行進度

-e:卸載軟件

--force強制安裝

rpm -ivh PACKAGE_FILE ...

rpm包升級

升級:

rpm {-U|--upgrade} [install-options] PACKAGE_FILE...

rpm {-F|--freshen} [install-options] PACKAGE_FILE...

--oldpackage:降級

--force: 強制安裝

yum:

CentOS: yum, dnf

YUM: Yellowdog Update Modifier,rpm的前端程序,可解決軟件包相關依賴性,可在多個庫之間定位軟件包,up2date的替代工具

yum repository: yum repo,存儲了衆多rpm包,以及包的相關的元數據文件(放置於特定目錄repodata下)

文件服務器:

http://

https://

ftp://

file://



第九天:

yum客戶端配置文件:

/etc/yum.conf:爲所有倉庫提供公共配置

/etc/yum.repos.d/*.repo:爲倉庫的指向提供配置

倉庫指向的定義:

[repositoryID]

name=Some name for this repository

baseurl=url://path/to/repository/

enabled={1|0}

gpgcheck={1|0}

gpgkey=URL

enablegroups={1|0}

failovermethod={roundrobin|priority}

roundrobin:意爲隨機挑選,默認值

priority:按順序訪問

cost= 默認爲1000


yum倉庫

yum的repo配置文件中可用的變量:

$releasever: 當前OS的發行版的主版本號

$arch: 平臺,i386,i486,i586,x86_64等

$basearch:基礎平臺;i386, x86_64

$YUM0-$YUM9:自定義變量

實例:

http://server/centos/$releasever/$basearch/

http://server/centos/7/x86_64

http://server/centos/6/i384


yum源

阿里雲repo文件

http://mirrors.aliyun.com/repo/

CentOS系統的yum源

阿里雲:https://mirrors.aliyun.com/centos/ $releasever/os/x86_64/

清華大學:https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/x86_64/

EPEL的yum源

阿里雲:https://mirrors.aliyun.com/epel/$releasever/x86_64

阿里巴巴開源軟件

https://opsx.alibaba.com/


yum-config-manager

生成172.16.0.1_cobbler_ks_mirror_CentOS-X-x86_64_.repo

yum-config-manager --add-repo= http://172.16.0.1/cobbler/ks_mirror/7/

yum-config-manager --disable “倉庫名" 禁用倉庫

yum-config-manager --enable “倉庫名” 啓用倉庫


yum命令

yum命令的用法:

yum [options] [command] [package ...]

顯示倉庫列表:

yum repolist [all|enabled|disabled]

顯示程序包:

yum list

yum list [all | glob_exp1] [glob_exp2] [...]

yum list {available|installed|updates} [glob_exp1] [...]

安裝程序包:

yum install package1 [package2] [...]

yum reinstall package1 [package2] [...] (重新安裝)

升級程序包:

yum update [package1] [package2] [...]

yum downgrade package1 [package2] [...] (降級)

檢查可用升級:

yum check-update

卸載程序包:

yum remove | erase package1 [package2] [...]

查看程序包information:

yum info [...]

查看指定的特性(可以是某文件)是由哪個程序包所提供:

yum provides | whatprovides feature1 [feature2] [...]

清理本地緩存:

清除/var/cache/yum/$basearch/$releasever緩存

yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

構建緩存:

yum makecache

搜索:yum search string1 [string2] [...]

以指定的關鍵字搜索程序包名及summary信息

查看指定包所依賴的capabilities:

yum deplist package1 [package2] [...]

查看yum事務歷史:

yum history [info|list|packages-list|packages-info|

summary|addon-info|redo|undo|

rollback|new|sync|stats]

yum history

yum history info 6

yum history undo 6

日誌 :/var/log/yum.log

安裝及升級本地程序包:

yum localinstall rpmfile1 [rpmfile2] [...]

(用install替代)

yum localupdate rpmfile1 [rpmfile2] [...]

(用update替代)

包組管理的相關命令:

yum groupinstall group1 [group2] [...]

yum groupupdate group1 [group2] [...]

yum grouplist [hidden] [groupwildcard] [...]

yum groupremove group1 [group2] [...]

yum groupinfo group1 [...]

yum的命令行選項:

--nogpgcheck:禁止進行gpg check

-y: 自動回答爲“yes”

-q:靜默模式

--disablerepo=repoidglob:臨時禁用此處指定的repo

--enablerepo=repoidglob:臨時啓用此處指定的repo

--noplugins:禁用所有插件

系統安裝光盤作爲本地yum倉庫:

(1) 掛載光盤至某目錄,例如/mnt/cdrom

mount /dev/cdrom /mnt/cdrom

(2) 創建配置文件

[CentOS7]

name=

baseurl=

gpgcheck=

enabled=

創建yum倉庫:

createrepo [options] <directory>


DNF (DaNdiFied)

DNF 介紹:新一代的RPM軟件包管理器。DNF 發行日期是2015年5月11日,DNF 包管理器採用Python 編寫,發行許可爲GPL v2,首先出現在Fedora 18 發行版中。在 RHEL 8.0 版本正式取代了 YUM,DNF包管理器克服了YUM包管理器的一些瓶頸,提升了包括用戶體驗,內存佔用,依賴分析,運行速度等


安裝所需軟件包,依賴epel源

wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/dnf-conf-0.6.4-2.sdl7.noarch.rpm

wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64//dnf-0.6.4-2.sdl7.noarch.rpm

wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/python-dnf-0.6.4-2.sdl7.noarch.rpm

yum install python-dnf-0.6.4-2.sdl7.noarch.rpm dnf-0.6.4-2.sdl7.noarch.rpm dnf-conf-0.6.4-2.sdl7.noarch.rpm

配置文件:/etc/dnf/dnf.conf

倉庫文件:/etc/yum.repos.d/ *.repo

日誌: /var/log/dnf.rpm.log


DNF 使用:

幫助:man dnf

dnf 用法:與yum一致

dnf [options] <command> [<arguments>...]

dnf --version

dnf repolist

dnf clean all

dnf makecache

dnf list installed

dnf list available

dnf search nano

dnf history

dnf history undo 1


程序包編譯:

程序包編譯安裝:

Application-VERSION-release.src.rpm --> 安裝後,使用rpmbuild命令製作成二進制格式的rpm包,而後再安裝

源代碼-->預處理-->編譯-->彙編-->鏈接-->執行

源代碼組織格式:

多文件:文件中的代碼之間,很可能存在跨文件依賴關係

C、C++:make 項目管理器

configure腳本 --> Makefile.in --> Makefile

java: maven


C語言源代碼編譯安裝三步驟:

1、./configure

(1) 通過選項傳遞參數,指定啓用特性、安裝路徑等;執行時會參考用戶的指定以及Makefile.in文件生成Makefile

(2) 檢查依賴到的外部環境,如依賴的軟件包

2、make 根據Makefile文件,構建應用程序

3、make install 複製文件到相應路徑

開發工具:

autoconf: 生成configure腳本

automake:生成Makefile.in

注意:安裝前查看INSTALL,README


開源程序源代碼的獲取:

官方自建站點:

apache.org (ASF:Apache Software Foundation)

mariadb.org

...

代碼託管:

SourceForge.net

Github.com

code.google.com

c/c++編譯器: gcc (GNU C Complier)

編譯C源代碼:

準備:提供開發工具及開發環境

開發工具:make, gcc等

開發環境:開發庫,頭文件

glibc:標準庫

實現:通過“包組”提供開發組件

Development Tools

Server Platform Development

編譯C源代碼:

準備:提供開發工具及開發環境

開發工具:make, gcc等

開發環境:開發庫,頭文件

glibc:標準庫

實現:通過“包組”提供開發組件

Development Tools

Server Platform Development

第一步:configure腳本

選項:指定安裝位置、指定啓用的特性

--help: 獲取其支持使用的選項

選項分類:

安裝路徑設定:

--prefix=/PATH: 指定默認安裝位置,默認爲/usr/local/

--sysconfdir=/PATH:配置文件安裝位置

System types:支持交叉編譯

Optional Features: 可選特性

--disable-FEATURE

--enable-FEATURE[=ARG]

Optional Packages: 可選包

--with-PACKAGE[=ARG],依賴包

--without-PACKAGE,禁用依賴關係

注意:通常被編譯操作依賴的程序包,需要安裝此程序包的“開發”組件,其包名一般類似於name-devel-VERSION

第二步:make

第三步:make install

安裝後的配置:

(1) 二進制程序目錄導入至PATH環境變量中

編輯文件/etc/profile.d/NAME.sh

export PATH=/PATH/TO/BIN:$PATH

(2) 導入幫助手冊

編輯/etc/man.config|man_db.conf文件

添加一個MANPATH


Ubuntu 軟件管理

dpkg常見用法: man dpkg

dpkg -i package.deb 安裝包

dpkg -r package 刪除包,不建議,不自動卸載依賴於它的包

dpkg -P package 刪除包(包括配置文件)

dpkg -L package 列出與該包關聯的文件,類似rpm –ql

dpkg -l 列出當前已安裝的包,類擬rpm -qa

dpkg -l package 顯示該包的版本

dpkg --unpack package.deb 解開 deb 包的內容

dpkg -S keyword 搜索所屬的包內容說明

dpkg -c package.deb 列出 deb 包的內容,類似rpm –qpl

dpkg --configure package 配置包,-a 使用,配置所有沒有配置的軟件包

dpkg示例:

列出系統上安裝的所有軟件包:

dpkg –l

列出軟件包安裝的文件:

dpkg -L bash

查看/bin/bash來自於哪個軟件包:

dpkg -S /bin/bash

安裝本地的 .deb 文件:

dpkg -i zip/zip_3.0-11build1_amd64.deb

卸載軟件包:

dpkg -r zip

注意:一般建議不要使用dpkg卸載軟件包。因爲刪除包時,但依賴於它的任何包仍將安裝,並且可能無法再正常運行


apt與apt-get命令對比

apt 命令 被取代的命令 命令的功能

apt install apt-get install 安裝軟件包

apt remove apt-get remove 移除軟件包

apt purge apt-get purge 移除軟件包及配置文件

apt update apt-get update 刷新存儲庫索引

apt upgrade apt-get upgrade 升級所有可升級的軟件包

apt autoremove apt-get autoremove 自動刪除不需要的包

apt full-upgrade apt-get dist-upgrade 在升級軟件包時自動處理依賴關係

apt search apt-cache search 搜索應用程序

apt show apt-cache show 顯示安裝細節




磁盤存儲和文件系統:

I/O Ports: I/O設備地址

一切皆文件:open(), read(), write(), close()

設備類型:

塊設備:block,存取單位“塊”,磁盤

字符設備:char,存取單位“字符”,鍵盤

設備文件:

關聯至一個設備驅動程序,進而能夠跟與之對應硬件設備進行通信

設備號碼:

主設備號:major number, 標識設備類型

次設備號:minor number, 標識同一類型下的不同設備


硬盤接口類型

並行:

IDE:133MB/s

SCSI:640MB/s


串口:

SATA:6Gbps

SAS:6Gbps

USB:480MB/s

rpm:rotations per minute


機械硬盤(HDD):Hard Disk Drive,即是傳統普通硬盤,主要由:盤片,磁頭,盤片轉軸及控制電機,磁頭控制器,數據轉換器,接口,緩存等幾個部分組成。機械硬盤中所有的盤片都裝在一個旋轉軸上,每張盤片之間是平行的,在每個盤片的存儲面上有一個磁頭,磁頭與盤片之間的距離比頭髮絲的直徑還小,所有的磁頭聯在一個磁頭控制器上,由磁頭控制器負責各個磁頭的運動。磁頭可沿盤片的半徑方向運動,加上盤片每分鐘幾千轉的高速旋轉,磁頭就可以定位在盤片的指定位置上進行數據的讀寫操作。數據通過磁頭由電磁流來改變極性方式被電磁流寫到磁盤上,也可以通過相反方式讀取。硬盤爲精密設備,進入硬盤的空氣必須過濾

固態硬盤(SSD):Solid State Drive,用固態電子存儲芯片陣列而製成的硬盤,由控制單元和存儲單元(FLASH芯片、DRAM芯片)組成。固態硬盤在接口的規範和定義、功能及使用方法上與普通硬盤的完全相同,在產品外形和尺寸上也與普通硬盤一致

相較於HDD,SSD在防震抗摔、傳輸速率、功耗、重量、噪音上有明顯優勢,SSD傳輸速率性能是HDD的2倍

相較於SSD,HDD在價格、容量佔有絕對優勢

硬盤有價,數據無價,目前SSD不能完全取代HHD

磁盤設備的設備文件命名:/dev/DEV_FILE

SCSI, SATA, SAS, IDE,USB: /dev/sd

虛擬磁盤:/dev/vd 、/dev/xvd

不同磁盤標識:a-z,aa,ab…

/dev/sda, /dev/sdb, ...

同一設備上的不同分區:1,2, ...

/dev/sda1, /dev/sda5

硬盤存儲術語

head:磁頭

track:磁道

cylinder:柱面

sector:扇區,512bytes

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章