天天看點

Centos8 我們來看看!

一、 Centos8.x與Centos7.x版本對比與選型

功能 CentOS 8 CentOS 7
核心版本 4.18.0-x 3.10.0-x
檔案系統 XFS
時間同步 隻支援Chronyd 支援NTP和Chronyd
包管理工具 DNF(YUM v4) YUM(YUM v3)
最大記憶體 24TB 12TB
防火牆 nftables取代iptables firewalld底層使用iptables
支援架構 支援64-bit ARM 不支援64-bit ARM
Web控制台 預設安裝Cockpit 無預設安裝
CPU日志 CPU日志記錄在journald程序中 CPU相關日志位于/var/log/cups目錄
釋出時間 2019-09-24 2014-07-07
支援截至時間 2024-05-01 2020-08-06
Git 2.18 1.7
GCC 8.2.1 4.8.5
Python 3.6.6 2.7.5
Glibc 2.28 2.17
PHP 7.2 5.4
容器支援 Podman Docker
資料庫支援 Mysql8.0/MariaDB10.3 MariaDB

二、Centos8.x下的網絡管理(nmcli)

1、NetworkManager管理

在rhel8(含centos8)上,在/etc/sysconfig/network-scripts/裡也看不到任何腳本檔案,沒有傳統的network.service。是以隻能通過其它方法進行網絡配置,包括NM指令工具集。換言之,在rhel8上,必須開啟NM,否則無法使用網絡。

# 檢視NM納管狀态

nmcli n

# 開啟NM接管

nmcli n on

# 關閉NM納管(謹慎執行)

nmcli n off

2、網絡管理指令行工具nmcli

在nmcli中有2個指令最為常用:

(1)、nmcli connection

表示連接配接,可了解為配置檔案,相當于ifcfg-ethX。可以簡寫為nmcli c

(2)、nmcli device

表示裝置,可了解為實際存在的網卡(包括實體網卡和虛拟網卡)。可以簡寫為nmcli d

在NM裡,有2個次元:連接配接(connection)和裝置(device),這是多對一的關系。想給某個網卡配ip,首先NM要能納管這個網卡。裝置裡存在的網卡(即nmcli d可以看到的),就是NM納管的。接着,可以為一個裝置配置多個連接配接(即nmcli c可以看到的),每個連接配接可以了解為一個ifcfg配置檔案。同一時刻,一個裝置隻能有一個連接配接活躍。可以通過nmcli c up切換連接配接。

connection有2種狀态:

▷ 活躍(帶顔色字型):表示目前該connection生效

▷ 非活躍(正常字型):表示目前該connection不生效

device有4種常見狀态:

▷ connected:已被NM納管,并且目前有活躍的connection

▷ disconnected:已被NM納管,但是目前沒有活躍的connection

▷ unmanaged:未被NM納管

▷ unavailable:不可用,NM無法納管,通常出現于網卡link為down的時候(比如ip link set enp0s3 down)

3、nmcli connection配置

 輸出:

▪ 第一列是connection名字,簡稱con-name(注意con-name不是網卡名)

▪ 第二列是connection的UUID

▪ 最後一列才是網卡名(标準說法叫device名),可通過nmcil d檢視device

對connection做操作時需要指定辨別,辨別可以是con-name、UUID、如果存在ifcfg檔案則也可以用ifcfg的完整路徑,即/etc/sysconfig/network-scripts/ifcfg-enp0s3

nmcli c show enp0s3

nmcli c show b7f25fc0-0206-48ee-8bf4-7abf76a3de9b

nmcli c show /etc/sysconfig/network-scripts/ifcfg-enp0s3

下面指令是常見的一些操作:

# 啟用connection(相當于ifup)

nmcli c up enp0s3

# 停止connection(相當于ifdown)

nmcli c down

# 删除connection(類似于ifdown并删除ifcfg)

nmcli c delete enp0s3

# 檢視connection清單

nmcli c show

# 檢視connection詳細資訊

#重載配置檔案(不會馬上生效)

nmcli c reload

# 立即生效connection,有3種方法:

nmcli c up ens32

nmcli d reapply enp0s3  #專門用于重新整理connection,前提是網卡的device處于connected狀态,否則會報錯。

nmcli d connect enp0s3  #重新整理該網卡對應的活躍connection

nmcli c的con-name的了解:

con-name對應ifcfg的檔案名以及内容中的NAME=,該參數表示連接配接(connection)的名字,無需和網卡名相同,可以為一個裝置(device)建立多個連接配接,但同一時刻隻能有一個連接配接生效。當有多個連接配接時候,nmcli c delete删除目前連接配接,就會自動選擇同一個裝置的其他連接配接來頂替生效。可以通過nmcli c up來将指定連接配接切換生效。

注意:通過nmcli c modify修改con-name,隻會對應修改ifcfg檔案中的NAME,而不會更改ifcfg檔案名。

4、nmcli device配置

# 檢視device清單

nmcli d

# 檢視所有device詳細資訊

nmcli d show

# 檢視指定device的詳細資訊

nmcli d show enp0s3

# 激活網卡

nmcli d connect enp0s3

5、centos8下如何配置網絡

兩種方式:

第一種,手動修改配置檔案,然後重新開機服務,加載生效。

第二種,nmcli指令實作動态修改。

三、linux下init機制與systemd管理機制

1、 Linux初始化init系統

Linux作業系統的啟動首先從BIOS開始,接下來Linux引導程式将核心映像加載到記憶體,進行核心初始化,核心初始化的最後一步就是啟動PID為1的init程序。這個程序是系統的第一個程序,它負責産生其它所有使用者程序。

僅僅将核心運作起來是毫無用途的,是以就需要一個系統能夠定義、管理和控制init程序的行為,并負責組織和運作許多獨立的或相關的初始化工作,進而讓系統進入一個使用者設定的運作模式中,這個系統就是init系統。

大多數Linux發行版的init系統是和System V相相容的,是以被稱為sysvinit,這是最早也是最流行的init系統,在RHEL7.x/Centos7.x發行版本之前的系統中都采用sysvinit,sysvinit概念簡單清晰,主要依賴于Shell腳本,但它一次一個串行地啟動程序,決定了它的最大弱點:啟動太慢。雖然在伺服器上這個缺點不算什麼,但是當Linux被應用到移動終端裝置上時,這個缺點就變成了大問題。為了能更快的啟動系統,開發者們對sysvinit進行了不斷的改進,先後出現了upstart和systemd這兩個主要的新一代init系統,以Ubuntu為代表的Linux發行版就采用的是upstart方式,而在RHEL7.x/Centos7.x版本中,已經預設開始采用systemd來管理系統。Upstart出現很早,而systemd出現較晚,但發展更快,大有取代upstart的趨勢。

2、 runlevel到target的改變

sysvinit用術語“runlevel”來定義系統運作級别,在RHEL7.x/Centos7.x版本之前的系統中,通常有7種運作級别,每個Linux發行版對運作級别的定義都不太一樣。但0、1、6三個級别卻獲得了共識,含義如下:

Ø 0-關機模式。

Ø 1-單使用者模式:單使用者隻有系統管理者可以登入。

Ø 6-重新開機模式:也就是執行關閉所有運作的程序,然後重新啟動系統。

另外4個運作級别,RHEL/Centos發行版定義的含義為:

Ø 2-多使用者模式:不支援檔案共享,例如不支援NFS服務。這種模式不常用。

Ø 3-完全的多使用者模式:支援NFS服務。這是最常用的使用者模式,預設登入到系統的字元界面。

Ø 4-基本不用的使用者模式:可以實作某些特定的登入請求。

Ø 5-完全多使用者模式:預設登入到X-window系統,也就是登入到Linux圖形界面。

這些運作級别和Linux中的init程式互相對應,例如執行“init 1”指令系統就進入單使用者模式,執行“init 6”指令系統将重新啟動。

在RHEL7.x/Centos7.x以後版本中,預設采用了systemd來管理系統。systemd是新一代init系統,它的主要特點是并發處理所有服務,加速開機流程。由此,以前的運作級别(runlevel)的概念被新的運作目标(target)所取代,tartget的命名類似于“multi-user.target”這種形式,比如原來的運作級别3(runlevel3)對應于新的多使用者目标“multi-user.target”,運作級别5(runlevel5)就對應于“graphical.target”。由于systemd機制中不再使用runlevle的概念,是以/etc/inittab也不再被系統使用。

在新的systemd管理體系裡,預設的target(相當于以前的預設運作級别)是通過軟鍊來實作。

例如,要檢視系統的預設target,可以執行如下圖所示指令:

要檢視運作級與target的對應關系,可以執行“ll /lib/systemd/system/runlevel*.target”指令

3、init機制的特點與服務管理方式

init管理機制下,所有的服務啟動腳本都放置于/etc/init.d/目錄,基本上都是使用bash shell所寫成的腳本程式,需要啟動、關閉、重新啟動、檢視狀态時,可以通過如下的方式來處理:

啟動:/etc/init.d/daemon start

關閉:/etc/init.d/daemon stop

重新開機:/etc/init.d/daemon restart

檢視狀态:/etc/init.d/daemon status

而要設定服務是否自動運作,可通過如下方法:

設定服務自啟動: chkconfig daemon on

關閉服務自啟動: chkconfig daemon off

檢視服務是否自啟動: chkconfig --list daemon

4、systemd機制下的服務管理方式

systemd在系統中是一個使用者級的應用程式,它包含了一個完整的軟體包,配置檔案位于/etc/systemd這個目錄下,所有服務腳本位于/usr/lib/systemd/system目錄下,這些腳本都已.service結尾。

systemd提供了一個非常強大的指令行工具systemctl,可能很多系統運維人員都已經非常熟悉service、chkconfig指令,而systemd也能完成同樣的管理任務,可以把systemctl看作是service和chkconfig的組合體。要檢視、啟動、停止、重新開機、啟用或者禁用系統服務,都可以通過systemctl指令來實作。為了向後相容,舊的service指令在Centos7.x以後版本中仍然可用,不過它會重定向所有指令到新的systemctl工具。

(1)、啟動、停止、重新開機服務

[root@centos8 systemd]#  systemctl start httpd.service

[root@centos8 systemd]#  systemctl stop httpd.service

[root@centos8 systemd]# systemctl  restart  httpd.service

[root@centos8 systemd]# systemctl  try-restart  httpd.service

[root@centos8 systemd]# systemctl  reload httpd.service

(2)、檢視、禁止、啟用服務

通過systemctl指令可以實作啟用、禁用服務,以此來控制開機服務啟動,可以使用enable/disable選項來控制一個服務是否開機啟動,指令如下:

[root@centos8 systemd]# systemctl enable httpd.service

這就打開了httpd服務開機自啟動功能。要關閉httpd服務,可執行如下指令:

[root@centos8 systemd]# systemctl disable httpd.service

四、使用者資源限制指令ulimit的使用

linux下的ulimit指令用來限制每個使用者可使用的資源,

如CPU、記憶體、句柄等

參數S:表示軟限制,當超過限制值會報警

參數H:表示硬限制,必定不能超過限制值

參數a:将列出所有資源限制

參數c:當某些程式發生錯誤時,

系統可能會将該程式在記憶體中的資訊寫成檔案(除錯用),

這種檔案就被稱為核心檔案(core file)。

此為限制每個核心檔案的最大容量。

參數d:每個程序資料段的最大值,機關為KB。

參數f:目前shell可建立的最大檔案容量,機關為塊。

參數l:可以鎖定的實體記憶體的最大值,機關為KB。

參數m:可以使用的常駐記憶體的最大值,機關為KB。

參數n:每個程序可以同時打開的最大檔案數

參數p:管道的最大值,機關512位元組。

參數s:堆棧的最大值,機關為KB。

參數t:每個程序可以使用CPU的最大時間,機關為秒。

參數u:每個使用者運作的最大程序并發數。

參數v:目前shell可使用的最大虛拟記憶體機關為KB。

1、臨時修改ulimit

在指令行下,在檢視的指令後面加上限制值,就可以調整某一項限制,但隻對目前登入shell有效。

參數S表示設定軟限制;參數H表示設定硬限制;當都不指定時,表示設定軟限制和硬限制均為指定值。

2、永久修改ulimit

所謂永久,是指每次登陸shell時,都會按配置重新設定ulimit,以達到永久生效的效果。

可修改/etc/security/limits.conf,添加如下内容:

[root@CentOS646506 ~]# vim /etc/security/limits.conf

* hard nproc 64000

* soft nproc 64000

* hard nofile 64000

* soft nofile 64000

以上内容表示,将-u和-n的軟限制和硬限制同時修改為64000。

3、 limits.conf檔案格式

limits.conf檔案内容格式如下:

<domain> <type> <item> <value>

domain 是指生效實體,可以是使用者名,也可以通過@group指定使用者組,使用*表示預設值。

type指限制類型,soft軟限制,hard硬限制。

item限制資源:

core同ulimit -c

data同ulimit -d

fsize同ulimit -f

memloc同ulimit -l

nofile同ulimit -n

stack同ulimit -s

cpu 同ulimit -t

nproc同ulimit -u

4、CENTOS/RHEL7、8中ulimit資源限制問題

在CENTOS/RHEL7中,修改limits.conf檔案隻适用于通過PAM認證登入使用者的資源限制,而對于systemd的service的資源限制不生效,所謂systemd的service資源,其實就是在/usr/lib/systemd/system目錄下的服務維護管理腳本,這些腳本都已.service結尾,比如,通過yum方式安裝了一個nginx服務,那麼預設管理nginx服務的腳本為/usr/lib/systemd/system/nginx.service。

下面看一個例子,解釋如何在systemd的service資源中配置ulimit資源。(實操示範)

解決方法:

編輯/usr/lib/systemd/system/nginx.service檔案,找到[Service]段,添加如下配置:

[Service]

LimitNOFILE=655360

LimitNPROC=655360

要讓配置生效,需要運作如下指令:

[[email protected] ~]# systemctl daemon-reload

[[email protected] ~]# systemctl restart nginx.service

DNF(yum)包管理器的使用

一、DNF包管理器介紹

yum是進行linux系統下軟體安裝和更新常用的一個工具,通過yum工具配合網際網路即可實作軟體的便捷安裝和自動更新。但yum因為長期存在的問題一直沒有被解決,yum已經被DNF取代,DNF是新一代的rpm包管理器,用來取代yum包管理器,在centos8.0版本中正式取代yum。DNF包管理器克服了YUM包管理器的一些瓶頸,提升了包括使用者體驗,記憶體占用,依賴分析,運作速度等多方面的内容。

在centos8.x版本中,yum指令仍然可以使用,但是這個yum其實是連結到了dnf指令上的,這麼做是為了保持向下相容性,dnf指令和yum指令的使用基本相同,同時,dnf也相容使用yum的配置檔案,是以可以完全按照yum的使用方法使用dnf。

在 CentOS8 中把軟體源分成了兩部分:

BaseOS存儲庫 :以傳統RPM包的形式提供底層核心OS内容

AppStream存儲庫 :提供使用者空間中運作的所有應用程式

二、DNF/yum的配置

dnf的配置檔案也相容yum的配置檔案,例如資源庫配置目錄/etc/yum.repos.d,此目錄下儲存了dnf預設的資源配置,使用預設的一些資源庫配置可能下載下傳速度很慢,也可以無法使用,是以建議進行修改,推薦将資源配置位址修改為國内位址。

第一個檔案CentOS-AppStream.repo,修改後的内容如下:

[root@server231 yum.repos.d]# more CentOS-AppStream.repo

[AppStream]

name=CentOS-$releasever - AppStream

baseurl=http://mirrors.aliyun.com/centos/$releasever/AppStream/$basearch/os/

gpgcheck=1

enabled=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

第二個檔案是CentOS-Base.repo,修改後的内容如下:

[root@server231 yum.repos.d]# more CentOS-Base.repo

[BaseOS]

name=CentOS-$releasever - Base

baseurl=http://mirrors.aliyun.com/centos/$releasever/BaseOS/$basearch/os/

第三個是新增檔案CentOS-epel.repo,内容如下:

[root@server231 yum.repos.d]# more CentOS-epel.repo

[epel]

name=CentOS-$releasever - Epel

baseurl=http://mirrors.aliyun.com/epel/8/Everything/$basearch

gpgcheck=0

三、DNF/yum的常用方法

(1)、通過dnf安裝和删除RPM包

安裝rpm包,如dhcp。指令如下:

[root@localhost ~]# dnf install nginx

删除rpm包,包括與該包有依賴性的包,指令如下:

[root@localhost ~]# dnf remove nginx

注意:同時會提示删除nginx-mod-mail、nginx-mod-http-perl等依賴包。

删除無用孤立的軟體包

[root@localhost ~]# dnf autoremove

(2)、通過dnf工具更新軟體包

檢查所有可更新的rpm包,指令如下:

[root@localhost ~]# dnf check-update

更新所有的rpm包,指令如下:

[root@localhost ~]#dnf update

更新指定的rpm包,如更新kernel,指令如下:

[root@localhost ~]#dnf update kernel

大規模的版本更新,與yum update不同的是,陳舊的包也會更新,指令如下:

[root@localhost ~]# dnf upgrade

(3)、通過dnf安裝軟體包組

檢視所有的軟體包組

[root@localhost ~]# dnf grouplist

安裝一個軟體包組

[root@localhost ~]# dnf groupinstall "Security Tools"

删除一個軟體包組:

[root@localhost ~]# dnf groupremove "Security Tools"

(4)、通過dnf查詢RPM包資訊

檢視系統中可用和不可用的所有的DNF軟體庫

[root@localhost ~]# dnf repolist all

列出資源庫中特定的可以安裝或更新以及已經安裝的rpm包:

[root@localhost ~]# dnf list gcc

搜尋比對特定字元的rpm包的詳細資訊,指令如下:

[root@localhost ~]# dnf search wget

列出指定的已經安裝的rpm包的資訊:

[root@localhost ~]#dnf info installed gcc

列出資源庫中指定的可以更新的rpm包的資訊:

[root@localhost ~]# dnf info updates gcc

列出資源庫中特定的可以安裝或更新以及已經安裝的rpm包的資訊:

[root@localhost ~]# dnf info vsftpd

當你想要檢視是哪個軟體包提供了系統中的某一檔案時,你可以使用這條指令。(在本例中,我們将查找”/bin/bash”這個檔案的提供者)

[root@localhost ~]# dnf provides /bin/bash

(5)、dnf其它管理指令

檢視DNF指令的執行曆史

[root@localhost ~]# dnf history

清除緩存的軟體封包件,指令如下:

[root@localhost ~]# dnf clean all

四、DNF常用的幾個第三方庫

第三方庫擴充了官方庫的不足,使用軟體更加豐富。這裡推薦2個,分别是epel源和remi源,rpmforge源目前停滞,版本還處于centos7.

EPEL包含一個叫做“epel-release”的包,相關的EPEL軟體包可以從EPEL官方網站下載下傳到,針對Centos系統,有EL6、EL7和EL8三個版本。

通路位址:

https://fedoraproject.org/wiki/EPEL/zh-cn

擷取yum源的rpm檔案下載下傳,或者直接在centos8下執行如下指令:

[root@localhost ~]# dnf install epel-release

REMI倉庫的主要目标是向Fedora和Enterprise Linux(RHEL、CentOS、Oracle、Scientific Linux)作業系統提供最新版本的PHP stack、全功能和其他一些軟體包。

位址為:

http://remi.mirrors.arminco.com/

可以直接在centos8下執行如下指令:

[root@localhost ~]# dnf install remi-release

五、本地DNF倉庫的建構

1、搭建DNF倉庫的http服務

以nginx作為http server為例,需要安裝nginx server,然後進行配置

[root@server239 soft]#dnf install nginx

預設安裝的nginx主程式目錄在/usr/share/nginx/html目錄下,是以,DNF倉庫檔案就放在這個目錄下即可。接着,修改nginx配置檔案nginx.conf,添加如下内容到預設server部分;

server {

        autoindex on;

        autoindex_exact_size on;

        autoindex_localtime on;

        listen       80 default_server;

        listen       [::]:80 default_server;

        server_name  _;

        root         /usr/share/nginx/html;

        location / {

        }

        error_page 404 /404.html;

            location = /40x.html {

        error_page 500 502 503 504 /50x.html;

            location = /50x.html {

    }

最後,重新開機nginx伺服器即可:

[root@server239 soft]# systemctl  start nginx

2、添加rpm檔案到DNF倉庫

在/usr/share/nginx/html目錄下建立一個用于存儲倉庫檔案的目錄,也可不建立,這裡建立一個soft目錄,然後添加各類軟體的rpm包,這些軟體可直接放在soft目錄下,也可在soft目錄下建立子目錄分類存儲。

可從centos系統盤找到對應rpm包拷貝到存儲倉庫目錄,也可以從公網鏡像同步已經存在的dnf源,例如:

centos源:rsync://rsync.mirrors.ustc.edu.cn/centos/

epel源:rsync://rsync.mirrors.ustc.edu.cn/epel/

同步方式如下:

rsync -vrt --bwlimit=3000 --exclude=debug/ rsync://rsync.mirrors.ustc.edu.cn/epel/7/x86_64/ /data/mirrors/centos/epel7/x86_64/

rsync -vrt rsync://mirrors.ustc.edu.cn/centos/8/AppStream/x86_64/os/Packages/  /usr/share/nginx/html/soft/centos/8/AppStream/x86_64/os/Packages

3、安裝createrepo,建立存儲庫

剛才我們已經指定了dnf倉庫的根目錄為/usr/share/nginx/html/soft,接下來,為了讓dnf能識别這些目錄,需要建立DNF存儲庫,建立存儲庫需要一個指令createrepo,是以要先安裝這個指令,然後再建立存儲庫,操作過程如下:

[root@server239 ~]# dnf install createrepo -y

[root@server239 ~]# createrepo /usr/share/nginx/html/soft

[root@server239 ~]# createrepo /usr/share/nginx/html/soft/centos/8/AppStream/x86_64/os

createrepo指令執行完畢後,會在soft目錄下産生一個repodata目錄,這個就是索引庫。上面執行了兩個createrepo,第二個索引庫在os目錄下生成。

4、測試本地dnf倉庫

在另一台用戶端機器229上,建立一個DNF源檔案local.repo,内容如下:

[localdnf]

name=local_dnf

baseurl=http://172.16.213.239/soft/

或者

[localcentos]

name=local_centos

baseurl=http://172.16.213.239/soft/centos/8/AppStream/x86_64/os

将這個檔案放到用戶端主機的/etc/yum.repos.d路徑下,同時删除(或移動到别的目錄下)此路徑下的其他以repo結尾的所有檔案。最後執行如下指令:

[root@server229 ~]# dnf clean all           #清空dnf緩存

[root@server229 ~]# dnf makecache           #加載可用dnf中繼資料

[root@server229 ~]# dnf repolist            #檢視dnf軟體庫資訊

最後,執行一個線上安裝測試:

[root@server229 ~]# dnf install nginx

如果能順利安裝,表明dnf倉庫搭建成功。