鸟哥的Linux私房菜基础学习篇(第四版)
基礎學習篇(第四版)
- 第一部分 Linux的規則與安裝
- 第5章 Linux的文件與目錄
- 第二部分 Linux文件、目錄與磁盤格式(詳細看書)
- 第三部分 學習Shell
- 第9章 Vim程序編輯器
- (1)Vim基本操作
- (2)區塊選擇
- (3)多文件編輯
- (4)多窗口功能
- (5)vim環境設定與記錄:`~/.vimrc,~/.viminfo`
- 第四部分 Linux使用者管理(詳細看書)
- 第五部分 Linux系統管理員
- 第17章 認識系統服務(daemon)
- 第18章 日志文件
- 1、登錄檔日志文件
- 2、logrotate日志輪轉
- (1)登錄檔的安全性設置
- (2)登錄檔服務器的設定
- (3)登錄檔的輪替(logrotate)
- (4)chattr的解決方案
- (5)測試logrotate
- (5)自定義登錄文件的輪替功能
- (5)使用journalctl觀察登錄信息
- (6)保存journal的方式
- (7)logger指令的應用
- 第19章 啟動流程
- 1、啟動過程的問題解決
- (1)忘記root密碼的解決之道
- (2) 因文件系統錯誤而無法啟動
- 第22章 軟件安裝RPM、SRPM(rpmbuild)與YUM
- RPM
- YUM
- SRPM(rpmbuild)?
前言:我只總結了我不太清晰的點,需要完整觀看書籍的可以下載:https://u15372029.pipipan.com/fs/15372029-393101184
第一部分 Linux的規則與安裝
第5章 Linux的文件與目錄
權限結構分析:文件類型,所有者,所屬組,其他人
文件類型分為: - 普通文件 d 目錄文件 l 符號鏈接文件 b 塊設備文件 c 字符設備文件 p 管道文件 s 套接字權限文件/目錄的權限含義:
當用戶user1,對/testdir 目錄有寫和執行權限時,該目錄下的只讀文件file1是否可修改和刪除?
答:不可修改,可刪除
默認權限:
- 修改方法:
臨時修改:umask 0022
永久修改:配置文件:/etc/profile
權限掩碼的目的是為了保證新建文件擁有默認權限,一般不需要手工設置
特殊權限:
- 權限類型:Set UID、Set GID、Sticky Bit
Set UID:
當文件設置了setuid位后,任何能夠執行此文檔的用戶都有與文件屬主相同的權限,即使得任意使用者在執行該文件時,都綁定了文件屬主的權限。例如,某個程序為root擁有,又設置了setuid位,那即使是一個普通用戶運行該程序,該程序的身份一樣是root的身份,可以訪問所有只有root可以訪問的資源
sudo權限
- 給普通用戶提權
文件系統屬性權限
- 系統文件鎖
chgrp:修改文件所屬用戶組
chown:修改文件擁有者
chmod:修改文件的權限,SUID、SGID、SBIT等的特性。
數字類型修改文件權限 chmod [-R] xyz 文件或目錄 chmod 777 文件或目錄符號類型修改文件權限 u g o a +(加入) -(移除) =(設置)示例: chmod u=rwx,go=rx .bashrc目錄的相關操作
. 代表此層目錄 .. 代表上一層目錄 - 代表前一個工作目錄 ~ 代表目前使用者身份所在的家目錄 ~account 代表account這個使用者的家目錄(account是個賬戶名稱)第二部分 Linux文件、目錄與磁盤格式(詳細看書)
第三部分 學習Shell
第9章 Vim程序編輯器
Vim:https://blog.csdn.net/qq_39578545/article/details/104848900
(1)Vim基本操作
vim三種模式:
- 指令模式:vi打開一個文件就直接進入到指令模式
- 編輯模式:輸入【i,I,A,R】
- 命令模式:輸入【: / ?】
快捷鍵
nG n為數字,移動到這個文件的第n行。例如20G則會移動到這個文件的第20行(可配合:set nu) gg 移動到這個文件的第一行,相當于1G(常用) G 按G到最后一行/word 向光標之下尋找一個名稱為word的字符串。例如要在文件內搜尋vbird這個字符串,就輸入 /vbird即可 ?word 向光標之上尋找一個字符串名稱為word的字符串 n 向下搜索 N 向上搜索dd 刪除行 ndd 刪除指定行 d1G 刪除光標到第一行的所有數據 dG 刪除光標到最后一行的所有數據 yy 復制游標所在的那一行 nyy n為數字。復制光標所在向下20行,例如20yy則是復制20行(常用) yG 復制光標所在列到第一列的所有數據 p 粘貼,光標在20行,則在21行開始貼 P 粘貼,光標在20行,那么原本的第20行會被推到變成30行 u 撤銷 ctrl + r 重做上一個動作vim的暫存檔、救援回復與開啟時的警告訊息
(2)區塊選擇
區塊選擇(Visual Block),當我們按下 v 或者 V 或者 【ctrl + v】
(3)多文件編輯
:r filename 來讀入某個文件的內容 :n 編輯下一個文件 :N 編輯上一個文件 :files 列出目前這個vim的開啟的所有文件示例:將hosts內的前四列IP資料復制到/etc/hosts文件內
(4)多窗口功能
在指令列模式輸入【:sp {filename}】,如果想要在新窗口啟動另一個文件,就加入檔名,否則僅輸入【:sp】時,出現的則是同一個文件在兩個窗口間。
可以利用【ctrl+w+↑】及【ctrl+w+↓】,在兩個窗口之間移動。
(5)vim環境設定與記錄:~/.vimrc,~/.viminfo
可以通過一般指令模式時輸入【:set all】來查閱所有設置參數。
整體vim的設定值一般是放置在 /etc/vimrc 這個文件,不過,不建議修改。可以修改~/.vimrc這個文件。
第四部分 Linux使用者管理(詳細看書)
第五部分 Linux系統管理員
第17章 認識系統服務(daemon)
systemd是一個啟動服務機制,早期是通過init進行管理。現在是systemd占主流,init占一小部分。
systemd的好處:
- 平行處理所有服務,加速開機流程:
舊的init啟動腳本是【一項一項任務依序啟動】的模式,因此不相依的服務也是得要一個一個的等待。但目前我們的硬件主機系統與操作系統幾乎都支持多核心架構了,沒道理未相依的服務不能同時啟動啊!
systemd就是可以讓所有的服務同時啟動,因此你會發現到,系統啟動的速度變快了! - 一經要求就響應的on-demand啟動方式:
systemd全部就是僅有一只systemd 服務搭配systemctl指令來處理,無須其他額外的指令來支持。不像systemV還要init,chkconfig,service…等等指令。此外,systemd由于常駐內存,因此任何要求(on-demand)都可以立即處理后續的daemon啟動的任務。 - 服務相依性的自我檢查:
由于systemd可以自定義服務相依性的檢查,因此如果B服務是架構在A服務上面啟動的,那當你在沒有啟動A服務的情況下僅手動啟動B服務時,systemd會自動幫你啟動A服務喔!這樣就可以免去管理員得要一項一項服務去分析的麻煩~(如果讀者不是新手,應該會有印象,當你沒有啟動網絡,但卻啟動NIS/NFS時,那個開機時的timeout 甚至可達到10~30分鐘…)依daemon功能分類:
systemd旗下管理的服務非常多,包山包海啦~為了厘清所有服務的功能,因此,首先systemd先定義所有的服務為一個服務單位(unit),并將該unit 歸類到不同的服務類型(type)去。舊的init僅分為stand alone與super daemon 實在不夠看,systemd將服務單位(unit)區分為service,socket,target,path,snapshot,timer等多種不同的類型(type),方便管理員的分類與記憶。 - 將多個daemons集合成為一個群組:
如同systemV的init 里頭有個runlevel的特色,systemd亦將許多的功能集合成為一個所謂的target項目,這個項目主要在設計操作環境的建置,所以是集合了許多的daemons,亦即是執行某個target就是執行好多個daemon的意思! - 向下兼容舊有的init 服務腳本:
基本上,systemd是可以兼容于init的啟動腳本的,因此,舊的init啟動腳本也能夠透過systemd來管理,只是更進階的systemd功能就沒有辦法支持就是了。
雖然如此,不過systemd也是有些地方無法完全取代init的!包括:
- 在runlevel的對應上,大概僅有runlevel1,3,5有對應到systemd的某些target類型而已,沒有全部對應;
- 全部的systemd都用systemctl這個管理程序管理,而systemctl支持的語法有限制,不像/etc/init.d/daemon 就是純腳本可以自定義參數,systemctl不可自定義參數;
- 如果某個服務啟動是管理員自己手動執行啟動,而不是使用systemcl去啟動的(例如你自己手動輸入crond 以啟動crond服務),那么systemd將無法偵測到該服務,而無法進一步管理。
systemd啟動過程中,無法與管理員透過standard input傳入訊息!因此,自行撰寫systemd的啟動設定時,務必要取消互動機制~(連透過啟動時傳進的標準輸入訊息也要避免!)
systemd的配置文件放置目錄:
基本上,systemd將過去所謂的daemon執行腳本通通稱為一個服務單位(unit),而每種服務單位依據功能來區分時,就分類為不同的類型(type)。基本的類型有包括系統服務、數據監聽與交換的插槽檔服務(socket)、儲存系統狀態的快照類型、提供不同類似執行等級分類的操作環境(target)等。
- /usr/lib/systemd/system/:每個服務最主要的啟動腳本設定,有點類似以前的/etc/init.d底下的文件;
- /run/systemd/system/:系統執行過程中所產生的服務腳本,這些腳本的優先序要比/usr/lib/systemd/system/高!
- /etc/systemd/system/:管理員依據主機系統的需求所建立的執行腳本,其實這個目錄有點像以前/etc/rc.d/rc5.d/Sxx 之類的功能!執行優先序又比/run/systemd/system/高
也就是說,到底系統開機會不會執行某些服務其實是看/etc/systemd/system/底下的設定,所以該目錄底下就是一大堆連結檔(如target)。而實際執行的systemd啟動腳本配置文件,其實都是放置在/usr/lib/systemd/system/底下的喔!因此如果你想要修改某個服務啟動的設定,應該要去/usr/lib/systemd/system/底下修改才對!/etc/systemd/system/僅是連結到正確的執行腳本配置文件而已。所以想要看執行腳本設定,應該就得要到/usr/lib/systemd/system/底下去查閱才對!
systemd的unit類型分類說明
vsftpd 與crond 其實算是系統服務(service),而multi-user要算是執行環境相關的類型(target type)。根據這些擴展名的類型,我們大概可以找到幾種比較常見的systemd的服務類型如下:
systemd管理服務
系統上面有多少的服務存在?這個時候就得透過list-units(默認)及list-unit-files來觀察了。
具體systemctl請看PDF。
第18章 日志文件
ryslog日志管理:https://blog.csdn.net/qq_39578545/article/details/105030690
1、登錄檔日志文件
- /var/log/boot.log:開機的時候系統核心會去偵測與啟動硬件,接下來開始各種核心支持的功能啟動等。這些流程都會記錄在/var/log/boot.log里面!不過這個文件只會存在這次開機啟動的信息,前次開機的信息并不會被保留下來!
- /var/log/cron:你的crontab有沒有實際被進行?進行過程有沒有發生錯誤?你的/etc/crontab是否撰寫正確?在這個登錄檔內查詢看看。
- /var/log/dmesg:記錄系統在開機的時候核心偵測過程所產生的各項信息。由于CentOS默認將開機時核心的硬件偵測過程取消顯示,因此額外將數據記錄一份在這個文件中;
- /var/log/lastlog:可以記錄系統上面所有的賬號最近一次登入系統時的相關信息。
- /var/log/maillog 或/var/log/mail/*:記錄郵件的往來信息,其實主要是記錄postfix(SMTP協議提供者)與dovecot(POP3協議提供者)所產生的訊息啦。SMTP是發信所使用的通訊協議,POP3則是收信使用的通訊協議。postfix與dovecot 則分別是兩套達成通訊協議的軟件。
- /var/log/messages:這個文件相當的重要,幾乎系統發生的錯誤訊息(或者是重要的信息)都會記錄在這個文件中;如果系統發生莫名的錯誤時,這個文件是一定要查閱的登錄檔之一。
- /var/log/secure:基本上,只要牽涉到了需要輸入賬號密碼]的軟件,那么當登入時(不管登入正確或錯誤)都會被記錄在此文件中。包括系統的login程序、圖形接口登入所使用的gdm程序、su,sudo等程序、還有網絡聯機的ssh,telnet等程序,登入信息都會被記載在這里;
- /var/log/wtmp,/var/log/faillog:這兩個文件可以記錄正確登入系統者的帳戶信息(wtmp)與錯誤登入時所使用的帳戶信息(faillog)!我們在第十章談到的last就是讀取wtmp來顯示的,這對于追蹤一般賬號者的使用行為很有幫助!
- /var/log/httpd/*,/var/log/samba/:
不同的網絡服務會使用它們自己的登錄文件來記載它們自己產生的各項訊息!上述的目錄內則是個別服務所制訂的登錄檔。
2、logrotate日志輪轉
所謂的logrotate基本上,就是將舊的登錄檔更改名稱,然后建立一個空的登錄檔,如此一來,新的登錄文件將重新開始記錄,然后只要將舊的登錄檔留下一陣子,嗯!那就可以達到將登錄檔【輪轉】
- systemd-journald.service:最主要的訊息收受者,由systemd提供的;
- rsyslog.service:主要登錄系統與網絡等服務的訊息;
- logrotate:主要在進行登錄文件的輪替功能。
使用systemd提供的journalctl日志管理
系統上所有經由systemd啟動的服務,如果再啟動或結束的過程中發生一些問題或者是正常的訊息,就會將該訊息由systemd-journald.service以二進制的方式記錄下來(它的記錄主要都放置于內存中),之后再將這個訊息發送給rsyslog.service做進一步的記載。
rsyslog.service的配置文件/etc/rsyslog.conf,這個文件規定了【(1)什么服務、(2)什么等級訊息、(3)需要記錄在哪里】。
訊息等級
在0(emerg)到6(info)的等級之間,等級數值越高代表越沒事。
rsyslog.conf語法練習
(1)登錄檔的安全性設置
chattr +a,加入了這個屬性之后,你的/var/log/admin.log登錄檔從此就僅能被增加,而不能被刪除,直到root以【chattr-a /var/log/admin.log】取消這個a的參數之后,才能被刪除或移動喔!
這個旗標最大的用處除了在保護你登錄文件的數據外,他還可以幫助你避免掉不小心寫入登錄檔的狀況喔。要注意的是,當[你不小心“手動“更動過登錄檔后,例如那個
/var/log/messages,你不小心用vi開啟他,離開卻下達:wq的參數!【】么該文件未來將不會再繼續進行登錄動作!】這個問題真的很常發生!由于你以vi儲存了登錄檔,則rsyslogd 會誤判為該文件已被更動過,將導致rsyslogd不再寫入該文件新的內容。
要讓該登錄檔可以繼續寫入,你只要重新啟動rsyslogd.service即可。
不過,也因為這個+a的屬性讓該文件無法被刪除與修改,所以當我們進行登錄文件輪替時
(logrotate),將會無法移動該登錄檔的檔名。這個困擾雖然可以使用logrotate的配置文件來解決,但是,還是先將登錄檔的+a旗標拿掉吧!
下面的chattr的解決方案有解決方案。
(2)登錄檔服務器的設定
讓某一部主機當成【登錄文件服務器】,用他來記錄所有的十部Linux主機的信息。
CentOS 7.x預設的rsyslogd本身就已經具有這個登錄文件服務器的功能了,只是默認并沒有啟動該功能而已。
服務端配置:
客戶端配置:
再重新啟動rsyslog.service后,在主機上面的登錄文件/var/log/admin.log當中,每一行的【主機名】就會顯示來自不同主機的信息。
(3)登錄檔的輪替(logrotate)
特別留意:rsyslogd利用的是daemon的方式來啟動的,當有需求的時候立刻就會被執行的,但是logrotate卻是在規定的時間到了之后才來進行登錄檔的輪替,所以這個logrotate程序是掛載cron底下進行,可以通過/etc/cron.daily/logrotate記錄了每天要進行的登錄檔輪替的行為,工作原理如下:
查看一下/etc/logrotate.conf文件
以/etc/logrotate.d/syslog這個輪替rsyslog.service服務的文件。
(4)chattr的解決方案
假設我們有針對/var/log/messages 這個文件增加chattr+a的屬性時,依據 logrotate的工作原理,我們知道,這個/var/log/messages將會被更名成為/var/log/messages.1才是。但是由于加上這個+a的參數啊,所以更名是不可能成功的!那怎么辦呢?呵呵!就利用prerotate與postrotate來進行登錄檔輪替前、后所需要作的動作啊!!!
先給他去掉a這個屬性,讓登錄文件/var/log/mesages可以進行輪替的動作,然后執行了輪替之后,再給他加入這個屬性!請特別留意的是,那個/bin/kill -HUP…的意義,這一行的目的在于將系統的rsyslogd重新以其參數檔(rsyslog.conf)的資料讀入一次!也可以想成是reload的意思啦!由于我們建立了一個新的空的記錄文件,如果不執行此一行來重新啟動服務的話,那么記錄的時候將會發生錯誤!!!
(5)測試logrotate
上面那個-f具有【強制執行】的意思,如果一切的設定都沒有問題的話,那么理論上,你的/var/log這個目錄就會起變化啰!而且應該不會出現錯誤訊息才對!
由于logrotate的工作已經加入crontab里頭了!所以現在每天系統都會自動的給他查看logrotate。只是要注意一下那個/var/log/messages里頭是否常常有類似底下的字眼:
Aug 2001:45:34 study rsyslogd:[origin software="rsyslogd"swVersion="7.4.7"x-pid=“2145”
x-info=“http://ww.rsyslog.com”]rsyslogd was HUPed這說明的是rsyslogd重新啟動的時間啦(就是因為/etc/logrotate.d/syslog的設定之緣故!)
(5)自定義登錄文件的輪替功能
假設前提是這樣的,前一小節當中,假設你已經建立了/var/log/admin.log這個文件,現在,你想要將該文件加上+a這個隱藏標簽,而且設定底下的相關信息:
- 登錄檔輪替一個月進行一次;
- 該登錄檔若大于10MB時,則主動進行輪替,不需要考慮一個月的期限;
- 保存五個備份文件;
- 備份文件需要壓縮
(5)使用journalctl觀察登錄信息
(6)保存journal的方式
再強調一次,這個systemd-journald.servicd的訊息是不會放到下一次開機后的,所以,重新啟動后,那之前的記錄通通會遺失。雖然我們大概都有啟動rsyslogd這個服務來進行后續的登錄檔放置,不過如果你比較喜歡journalctl的存取方式,那么可以將這些數據儲存下來喔!
基本上,systemd-journald.service的配置文件主要參考/etc/systemd/journald.conf的內容,詳細的參數你可以參考man 5 journald.conf的資料。
只是如果想要保存你的journalctl所讀取的登錄檔,那么就得要建立一個/var/log/journal的目錄,并且處理一下該目錄的權限,那么未來重新啟動systemd-journald.service之后,日志登錄文件就會主動的復制一份到/var/log/journal目錄下啰!
(7)logger指令的應用
第19章 啟動流程
詳細版:
- systemd 執行sysinit target 初始化系統及basic.target 準備操作系統;
- systemd 啟動multi-user target 下的本機與服務器服務:
- systemd 執行multi-user target 下的/etc/rc.d/rc.local文件:
- systemd 執行multi-user target 下的getty.target 及登入服務:
- systemd 執行graphical需要的服務
簡述版:
1、主機加電自檢,加載 BIOS 硬件信息,BIOS進行系統檢測。
2、讀取 MBR 的引導文件(GRUB、LILO)。
3、引導 Linux 內核。
4、由內核啟動運行第一個進程 init (進程號永遠為 1 )。(會去讀取inittab文件,執行rc.sysinit,,rc文件 /etc/rc.d/rc.local等腳本)
5、進入相應的運行級別
6、運行終端,輸入用戶名和密碼。
1、啟動過程的問題解決
(1)忘記root密碼的解決之道
(1)第一種方法
進入救援 rescue 模式,并且掛載 / 目錄,重新設定一下 root 密碼。
(2)第二種方法
但是在新版的systemd的管理機制中,默認的rescue模式是無法直接取得root權限,還是要使用root的密碼才能夠登入 rescue環境。這下有什么解決方案?通過 【rd.break】的核心參數來處理。只是需要注意的是,rd.break是在Ram Disk里面的操作系統狀態,因此你不能直接取得原本的linux系統操作環境。所以,還需要chroot的支持!更由于SELinux的問題,你可能還得要加上某些特殊的流程才能順利的搞定root 密碼的救援喔!
現在就讓我們來實作一下吧!(1)按下systemctl reboot 來重新啟動,(2)進入到開機畫面,在可以開機的選單上按下e來進入編輯模式,然后就在linux16的那個核心項目上面使用這個參數來處理:
改完之后按下[ctrl]+x開始開機,開機完成后屏幕會出現如下的類似畫面,此時請注意,你應該是在RAMDisk的環境,并不是原本的環境,因此根目錄底下的東西跟你原本的系統無關喔!而且,你的系統應該會被掛載到/sysroot目錄下,因此,你得要這樣作:
Ctrl+x同上但再按一次會從新回到原位置
- chroot目錄:代表將你的根目錄暫時】切換到chroot 之后所接的目錄。因此,以上表為例,那個/sysroot將會被暫時作為根目錄,而我們知道那個目錄其實就是最原先的系統根目錄,所以你當然就能夠用來處理你的文件系統與相關的賬號管理啰!
- 為何需要/.autorelabel:在rd.break的RAM Disk環境下,系統是沒有SELinux的,而你剛剛更改了
/etc/shadow(因為改密碼啊!),所以這個文件的SELinux安全本文的特性將會被取消喔!如果你沒有讓系統于開機時自動的回復SELinux的安全本文,你的系統將產生[無法登入】的問題(在SELinux為Enforcing的模式下!)加上/.autorelabel就是要讓系統在開機的時候自動的使用預設的SELinux type重新寫入SELinux安全本文到每個文件去!
不過加上/.autorelabel之后,系統在開機就會重新寫入SELinux的type到每個文件,因此會花不少的時間喔!如果你不想要花太多時間,還有個方法可以處理:
- 在rd.break模式下,修改完root 密碼后,將/etc/selinux/config 內的SELinux類型改為permissive
- 重新啟動后,使用root的身份下達 restorecon -Rv /etc 僅修改/etc底下的文件;
- 重新修改/etc/selinux/config 改回enforcing,然后 setenforce 1 即可!
(2) 因文件系統錯誤而無法啟動
如果因為設定錯誤導致無法開機時,要怎么辦啊?這就更簡單了!最容易出錯的設定而導致無法順利開機的步驟,通常就是/etc/fstab這個文件了,尤其是使用者在實作 Quota/LVM/RAID 時,最容易寫錯參數,又沒有經過mount -a來測試掛載,就立刻直接重新啟動,真要命!無法開機成功怎么辦?
這種情況的問題大多如下面的畫面所示:
看到最后兩行,他說可以輸入root的密碼繼續加以救援喔!那請輸入root的密碼來取得bash并以mount -o remount,rw / 將根目錄掛載成可擦寫后,繼續處理吧!其實會造成上述畫面可能的原因除了
/etc/fstab編輯錯誤之外,如果你曾經不正常關機后,也可能導致文件系統不一致(Inconsistent)的情況,也有可能會出現相同的問題啊!如果是扇區錯亂的情況,請看到上圖中的第二行處,fsck告知其實是/dev/md0出錯,此時你就應該要利用fsck.ext3去檢測/dev/md0才是!等到系統發現錯誤,并且出現 【clear[Y/N] 】時,輸入 y 吧!
第22章 軟件安裝RPM、SRPM(rpmbuild)與YUM
RPM
RPM安裝
rpm -i /rp.pppoe-3.11.rpm -i: install安裝的意思 -v: 查看更詳細的安裝信息 -h: 顯示安裝進度--prefix 新路徑 --nodeps // 強制安裝 --test //測試安裝RPM查詢
rpm -qa rpm -qf 文件名 // 找出該文件屬于哪一個已安裝的軟件YUM
YUM規則
YUM配置
YUM測試
修改軟件庫產生的問題與解決之道
由于我們是修改系統默認的配置文件,事實上,我們應該要在/etc/yum.repos.d/底下新建一個文件,該擴展名必須是.repo才行!但因為我們使用的是指定特定的映像站臺,而不是其他軟件開發商提供的軟件庫,因此才修改系統默認配置文件。但是可能由于使用的軟件庫版本有新舊之分,你得要知道,yum會先下載軟件庫的清單到本機的/var/cache/yum里面去!那我們修改了網址卻沒有修改軟件庫名稱(中括號內的文字),可能就會造成本機的列表與yum服務器的列表不同步,此時就會出現無法更新的問題了!
那怎么辦啊?很簡單,就清除掉本機上面的舊數據即可!需要手動處理嗎?不需要的,透過yum的clean項目來處理即可!
yum clean [packages|headers|all]選項與參數: packages:將已下載的軟件文件刪除 headers:將下載的軟件文件頭刪除 all:將所有軟件庫數據都刪除!YUM的軟件群組功能
SRPM(rpmbuild)?
| /root/rpmbuild/SPECS | 軟件的配置文件,例如這個軟件的信息參數、設定項目等 |
| /root/rpmbuild/SOURCES | 放置的是該軟件的原始文件(*.tar.gz的文件)以及config這個配置文件 |
| /root/rpmbuild/BUILD | 在編譯的過程中,有些暫存的數據都會放置在這個目錄當中 |
| /root/rpmbuild/RPMS | 經過順利的編譯成功后,將打包完成的文件放置在這個目錄當中。里頭有包含了x86_64,noarch等等的次目錄 |
| /root/rpmbuild/SRPMS | 與RPMS內相似的,這里放置的就是SRPM封裝的文件,有時候想將你的軟件用SRPM的方式釋出時,你的SRPM文件就會放置在這個目錄中。 |
配置文件的主要內容(*.spec)
編譯需要的步驟大抵就是/configure,make,make check,make install 等,那這些動作寫入就在SPECS目錄中。
要注意到的是ntp.sepc這個文件,這是主要的將SRPM編譯成RPM的配置文件,他的基本規則可以這樣看:
系統整體信息方面
Name: myapp <===軟件包的名字(后面會用到) Version: 0.1.0 <===軟件包的版本(后面會用到) Release: 1%{?dist} <===發布序號 Summary: my first rpm <===軟件包的摘要信息 Group: <===軟件包的安裝分類,參見/usr/share/doc/rpm-4.x.x/GROUPS這個文件 License: GPL <===軟件的授權方式 URL: <===這里本來寫源碼包的下載路徑或者自己的博客地址或者公司網址之類 Source0: %{name}-%{version}.tar.gz <===源代碼包的名稱(默認時rpmbuid回到SOURCES目錄中去找),這里的name和version就是前兩行定義的值。如果有其他配置或腳本則依次用Source1、Source2等等往后增加即可。 BuildRoot: %{_topdir}/BUILDROOT <=== 這是make install時使用的“虛擬”根目錄,最終制作rpm安裝包的文件就來自這里。 BuildRequires: <=== 在本機編譯rpm包時需要的輔助工具,以逗號分隔。假如,要求編譯myapp時,gcc的版本至少為4.4.2,則可以寫成gcc >=4.2.2。還有其他依賴的話則以逗號分別繼續寫道后面。 Requires: <=== 編譯好的rpm軟件在其他機器上安裝時,需要依賴的其他軟件包,也以逗號分隔,有版本需求的可以 %description <=== 軟件包的詳細說明信息,但最多只能有80個英文字符
根據上面的設定,最終的檔名就會是{Name}-{Version}-{Release}.{Arch}.rpm的樣式,以我們上面的設定來說,檔名應該會是ntp-4.2.6p5-20.vbird.x86_64.rpm
SRPM的編譯指令(-ba/-bb)
系統執行的過程:
打包自己軟件的示例
mkdir -pv ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}(1)制作原始碼文件tarball產生
- main-0.1.tar.gz放在/root/rpmbuild/SOURCES/
- main_0.1_to_0.2_patch 放在/root/rpmbuild/SOURCES/
- main.spec 自行撰寫放在/root/rpmbuild/SPECS/
(2)建立*.spec的配置文件
(3)編譯成為RPM與SRPM
# rpmbuild -ba main.spec(4)安裝測試查詢
示例2:https://blog.51cto.com/laoguang/1103628
總結
以上是生活随笔為你收集整理的鸟哥的Linux私房菜基础学习篇(第四版)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学车总结
- 下一篇: 鸟哥的 linux 的私房菜 基础学习篇