前言:我只總結了我不太清晰的點,需要完整觀看書籍的可以下載:https://u15372029.pipipan.com/fs/15372029-393101184
許可權結構分析:檔案型別,所有者,所屬組,其他人
檔案型別分為:
- 普通檔案
d 目錄檔案
l 符號連結檔案
b 塊裝置檔案
c 字元裝置檔案
p 管道檔案
s 通訊端許可權
檔案/目錄的許可權含義:
r:4 w:2 x:1
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others = --- = 0+0+0 = 0
當使用者user1,對/testdir 目錄有寫和執行許可權時,該目錄下的唯讀檔案file1是否可修改和刪除?
答:不可修改,可刪除
預設許可權:
特殊許可權:
sudo許可權
檔案系統屬性許可權
chgrp:修改檔案所屬使用者組
chown:修改檔案擁有者
chown [-R] 賬戶名稱 檔案或目錄
chown [-R] 賬戶名稱:使用者組名稱 檔案或目錄
chmod:修改檔案的許可權,SUID、SGID、SBIT等的特性。
數位型別修改檔案許可權
chmod [-R] xyz 檔案或目錄
chmod 777 檔案或目錄
符號型別修改檔案許可權
u g o a
+(加入) -(移除) =(設定)
範例:
chmod u=rwx,go=rx .bashrc
目錄的相關操作
. 代表此層目錄
.. 代表上一層目錄
- 代表前一個工作目錄
~ 代表目前使用者身份所在的家目錄
~account 代表account這個使用者的家目錄(account是個賬戶名稱)
Vim:https://blog.csdn.net/qq_39578545/article/details/104848900
vim三種模式:
快捷鍵
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的暫存檔、救援回覆與開啟時的警告訊息
區塊選擇(Visual Block),當我們按下 v 或者 V 或者 【ctrl + v】
:r filename 來讀入某個檔案的內容
:n 編輯下一個檔案
:N 編輯上一個檔案
:files 列出目前這個vim的開啟的所有檔案
範例:將hosts內的前四列IP資料複製到/etc/hosts檔案內
在指令列模式輸入【:sp {filename}】,如果想要在新視窗啟動另一個檔案,就加入檔名,否則僅輸入【:sp】時,出現的則是同一個檔案在兩個視窗間。
可以利用【ctrl+w+↑】及【ctrl+w+↓】,在兩個視窗之間移動。
~/.vimrc,~/.viminfo
可以通過一般指令模式時輸入【:set all】來查閱所有設定引數。
整體vim的設定值一般是放置在 /etc/vimrc
這個檔案,不過,不建議修改。可以修改~/.vimrc
這個檔案。
systemd是一個啟動服務機制,早期是通過init進行管理。現在是systemd佔主流,init佔一小部分。
systemd的好處:
雖然如此,不過systemd也是有些地方無法完全取代init的!包括:
systemd的組態檔放置目錄:
基本上,systemd將過去所謂的daemon執行指令碼通通稱為一個服務單位(unit),而每種服務單位依據功能來區分時,就分類為不同的型別(type)。基本的型別有包括系統服務、資料監聽與交換的插槽檔服務(socket)、儲存系統狀態的快照型別、提供不同類似執行等級分類的操作環境(target)等。
也就是說,到底系統開機會不會執行某些服務其實是看/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。
ryslog紀錄檔管理:https://blog.csdn.net/qq_39578545/article/details/105030690
所謂的logrotate基本上,就是將舊的登入檔更改名稱,然後建立一個空的登入檔,如此一來,新的登入檔案將重新開始記錄,然後只要將舊的登入檔留下一陣子,嗯!那就可以達到將登入檔【輪轉】
使用systemd提供的journalctl紀錄檔管理
系統上所有經由systemd啟動的服務,如果再啟動或結束的過程中發生一些問題或者是正常的訊息,就會將該訊息由systemd-journald.service
以二進位制的方式記錄下來(它的記錄主要都放置於記憶體中),之後再將這個訊息傳送給rsyslog.service做進一步的記載。
rsyslog.service的組態檔/etc/rsyslog.conf,這個檔案規定了【(1)什麼服務、(2)什麼等級訊息、(3)需要記錄在哪裡】。
訊息等級
在0(emerg)到6(info)的等級之間,等級數值越高代表越沒事。
rsyslog.conf語法練習
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的解決方案有解決方案。
讓某一部主機當成【登入檔案伺服器】,用他來記錄所有的十部Linux主機的資訊。
CentOS 7.x預設的rsyslogd本身就已經具有這個登入檔案伺服器的功能了,只是預設並沒有啟動該功能而已。
伺服器端設定:
使用者端設定:
再重新啟動rsyslog.service後,在主機上面的登入檔案/var/log/admin.log當中,每一行的【主機名】就會顯示來自不同主機的資訊。
特別留意:rsyslogd利用的是daemon的方式來啟動的,當有需求的時候立刻就會被執行的,但是logrotate卻是在規定的時間到了之後才來進行登入檔的輪替,所以這個logrotate程式是掛載cron底下進行,可以通過/etc/cron.daily/logrotate記錄了每天要進行的登入檔輪替的行為,工作原理如下:
檢視一下/etc/logrotate.conf檔案
以/etc/logrotate.d/syslog這個輪替rsyslog.service服務的檔案。
假設我們有針對/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的意思啦!由於我們建立了一個新的空的記錄檔案,如果不執行此一行來重新啟動服務的話,那麼記錄的時候將會發生錯誤!!!
上面那個-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的設定之緣故!)
假設前提是這樣的,前一小節當中,假設你已經建立了/var/log/admin.log這個檔案,現在,你想要將該檔案加上+a這個隱藏標籤,而且設定底下的相關資訊:
再強調一次,這個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目錄下囉!
詳細版:
簡述版:
1、主機加電自檢,載入 BIOS 硬體資訊,BIOS進行系統檢測。
2、讀取 MBR 的引導檔案(GRUB、LILO)。
3、引導 Linux 核心。
4、由核心啟動執行第一個程序 init (程序號永遠為 1 )。(會去讀取inittab檔案,執行rc.sysinit,,rc檔案 /etc/rc.d/rc.local等指令碼)
5、進入相應的執行級別
6、執行終端,輸入使用者名稱和密碼。
(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同上但再按一次會從新回到原位置
不過加上/.autorelabel之後,系統在開機就會重新寫入SELinux的type到每個檔案,因此會花不少的時間喔!如果你不想要花太多時間,還有個方法可以處理:
restorecon -Rv /etc
僅修改/etc底下的檔案;如果因為設定錯誤導致無法開機時,要怎麼辦啊?這就更簡單了!最容易出錯的設定而導致無法順利開機的步驟,通常就是/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 吧!
RPM安裝
rpm -i /rp.pppoe-3.11.rpm
-i: install安裝的意思
-v: 檢視更詳細的安裝資訊
-h: 顯示安裝進度
--prefix 新路徑
--nodeps // 強制安裝
--test //測試安裝
RPM查詢
rpm -qa
rpm -qf 檔名 // 找出該檔案屬於哪一個已安裝的軟體
YUM規則
YUM設定
YUM測試
修改軟體庫產生的問題與解決之道
由於我們是修改系統預設的組態檔,事實上,我們應該要在/etc/yum.repos.d/底下新建一個檔案,該擴充套件名必須是.repo才行!但因為我們使用的是指定特定的映像站臺,而不是其他軟體開發商提供的軟體庫,因此才修改系統預設組態檔。但是可能由於使用的軟體庫版本有新舊之分,你得要知道,yum會先下載軟體庫的清單到本機的/var/cache/yum裡面去!那我們修改了網址卻沒有修改軟體庫名稱(中括號內的文字),可能就會造成本機的列表與yum伺服器的列表不同步,此時就會出現無法更新的問題了!
那怎麼辦啊?很簡單,就清除掉本機上面的舊資料即可!需要手動處理嗎?不需要的,透過yum的clean專案來處理即可!
yum clean [packages|headers|all]
選項與引數:
packages:將已下載的軟體檔案刪除
headers:將下載的軟體檔案頭刪除
all:將所有軟體庫資料都刪除!
YUM的軟體群組功能
路徑 | 解釋 |
---|---|
/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)
rpmbuild -ba ntp.spec <== 編譯並同時產生RPM與SRPM檔案
rpmbuild -bb ntp.spec <== 僅編譯成RPM檔案
系統執行的過程:
*.spec
裡面的Source設定的那個檔案,以tar進行解壓縮,以我們這個例子來說,則會在/root/rpmbuild/BUILD/ntp-4.2.6p5
當中,將/root/rpmbuild/SOURCES/ntp-*
等等多個原始碼檔案進行解壓縮。%build
及 %install
的設定與編譯打包自己軟體的範例
mkdir -pv ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
(1)製作原始碼檔案tarball產生
(2)建立*.spec
的組態檔
Name: main
Version: 0.1
Release: 1%{?dist}
Summary: Show sin and cos value
Group: Scientific Support
License: GPLv2
URL: http://linux.vbird.org/
Source0: main-0.1.tgz
Patch0: main_0.1_to_0.2.patch
# 這兩個檔名要正確
%description
this package will let you input your name and calculate sin cos value
%prep
%setup -q
%patch0 -p1
%build
make clean main
%install
mkdir -p %{buildroot}/usr/local/bin
install -m 755 main %{buildroot}/usr/local/bin
%files
/usr/local/bin/main
%changelog
(3)編譯成為RPM與SRPM
# rpmbuild -ba main.spec
(4)安裝測試查詢