第七天:
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://
第九天:
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