主頁 >  其他 > 詳解Linux(進階篇)

詳解Linux(進階篇)

2021-02-17 11:06:33 其他

文章目錄

  • 詳解Linux-進階
    • 1. 定時任務調度
      • 1.1 crond 任務調度
      • 1.2 at 定時任務
    • 2. 磁盤磁區
      • 2.1 Linux磁區
      • 2.2 增加硬碟
      • 2.3 磁盤情況查詢
      • 2.4 實用指令
    • 3. 網路配置
      • 3.1 網路概述
      • 3.2 網路配置
      • 3.3 host 映射
    • 4. 行程管理
      • 4.1 行程概述
      • 4.2 查看Linux行程
      • 4.3 終止行程
      • 4.4 服務管理
      • 4.5 chkconfig 指令
      • 4.6 systemctl 指令
      • 4.7 動態監控行程
      • 4.8 監控網路狀態
    • 5. RPM 與 YUM
      • 5.1 軟體包管理概述
      • 5.2 RPM包管理--RPM命令
      • 5.3 RPM包管理--YUM
      • 5.4 原始碼包管理

詳解Linux-進階

本篇博客是上一篇 詳解Linux(基礎篇) 的進階篇,還沒有看過上篇博客的同學建議先花上20多分鐘瀏覽一下上篇的基礎,有了上篇博客的基礎,再看本文,就會事半功倍,不然就會覺得本文的內容有點突兀,
本文主要介紹了Linux中的定時任務調度、磁盤磁區、網路配置、行程管理以及RPM軟體包的安裝,其中每一個難點都有詳細的文字說明和案例以及截圖證明,適合新手村的同學快速掌握Linux的知識,也適合高手用來復習和查看指令,畢竟那么多的指令,不可能一下子都記住,
這是2021年的第一篇博客,是在過年這幾天忙里偷閑寫的🤦?♂?,整理不易,如果您覺得本文不錯,望一鍵三連加分享,🤞🤞
關注??博主


學習資料:
鏈接:https://pan.baidu.com/s/1Mp3nZJOxINhD6s_SqKJ14Q
提取碼:0pcu


1. 定時任務調度

1.1 crond 任務調度

(1)概述

Linux中有一個后臺程式,crond,它可以定時的去調度我們設定的任務,

crond的定時任務是反復執行的,

任務調度:是指系統在某個時間執行的特定的命令或程式

任務調度分類:

  1. 系統作業:有些重要的作業必須周而復始地執行,如病毒掃描等
  2. 個別用戶作業:個別用戶可能希望執行某些程式,比如對mysql 資料庫的備份

crontab 進行定時任務的設定

# 基本語法
crontab [選項]
# 編輯Linux后臺程式crond去執行某一腳本或程式,編輯調度檔案
crontab -e
# 接著輸入任務到調度檔案
# 執行的腳本,每隔一分鐘執行一次 ls -l /etc > /tmp/test.txt
*/1 * * * * ls -l /etc > /tmp/test.txt
選項功能
-e編輯crontab定時任務
-l查詢crontab定時任務
-r洗掉當前用戶的所有crontab定時任務

引數說明:

(1)5個占位符的說明

引數含義范圍
第一個 *一小時中的第幾分鐘0-59
第二個 *一天中的第幾個小時0-23
第三個 *一月中的第幾天1-31
第四個 *一年中的第幾個月1-12
第五個 *一周中的周幾0-7(0和7都表示周末)

(2)特殊符號的說明:

符號含義
*表示任何時間,例:第一個*就表示每小時中的每分鐘都執行一次
,表示不連續的時間,例:0 8,12,16 * * * 表示在每天的8點0分、12點0分,16點0分都執行一次
-表示連續的時間,例:0 5 * * 1-6 表示在周一到周六的每一天的5點0分都執行一次,
*/n表示每隔多久執行一次,例:*/10 * * * * 表示每天每隔10分鐘就執行一次

(3)特定時間案例

時間含義
30 8 * * *每天的8點30分執行一次
20 9 * * 3每周三的9點20執行一次
0 10 1,15 * *每月的1號和15號的10點0分執行一次
*/10 5 * * *每天的5點,每隔10分鐘執行一次
10 9 * * 4-6每周的周四到周六的9點10分執行一次

(2)應用案例

# 案例一:每隔一分鐘,就將當前的日期資訊追加到到檔案 /tmp/mydate.txt
crontab -e
*/1 * * * * date >> /tmp/mydate.txt
# 案例二:使用腳本完成每隔一分鐘,將當前日期和日歷都追加到 /home/mycal.txt 檔案中
cd /home
# 撰寫腳本
vim my.sh
date >> /home/mycal.txt
cal >> /home/mycal.txt

現在這個 my.sh 檔案是沒有執行權限的,要給他賦予執行權限,

# 給我們寫的腳本賦予執行權限
chmod u+x my.sh

寫好腳本之后,可以直接使用命令執行,命令如下:

# 執行當前目錄下的 my.sh 腳本
./my.sh

但是我們不可能每分鐘都手動執行一下這個命令,因此我們可以將其寫入調度檔案中,讓crond去定時調度執行它,

crontab -e
*/1 * * * * /home/my.sh
# 案例三:每天凌晨一點,備份mysql資料庫mytest到檔案 /home/db.bak檔案中
crontab -e
0 1 * * * mysqldump -u root -p 密碼 mytest > /home/db.bak

crond 相關指令

# 終止任務調度
crontab -r
# 查看當前用戶的所有任務調度
crontab -l
# 重啟任務調度
service crond restart

1.2 at 定時任務

1、原理概述

  • at 命令是一次性定時計劃任務(只執行一次),at 的守護行程 atd 會以后臺模式運行,檢查作業佇列來運行,
  • 默認情況下,atd 守護行程每 60 秒檢查作業佇列,有作業時,會檢查作業運行時間,如果時間與當前時間匹配,則運行此作業,
  • at 命令是一次性定時計劃任務,執行完一個任務后不再執行此任務了
  • 在使用 at 命令的時候,一定要保證 atd 行程的啟動 , 可以使用相關指令來查看,
# ps -ef 檢測當前正在運行的所有行程
ps -ef
# 使用過濾查詢,只查看 atd 行程,
ps -ef | grep atd

出現如下內容,則表明 atd 行程正在運行中,

2、at 命令格式

# at 命令,Ctrl+D 結束at命令的輸入(輸入兩次才有效)
at [選項] [時間]

選項如下:

選項含義
-m當指定的任務完成后,給用戶發送郵件,即使沒有標準輸出
-Iat q 查詢的別名
-dat rm 洗掉的別名
-v顯示任務將被執行的時間
-c列印任務的內容到標準輸出
-V顯示版本資訊
-q <佇列>使用指定的佇列
-f <檔案>從指定檔案中讀取任務而不是從標準輸入中讀取
-t <時間引數>以時間引數的形式提交要運行的任務

3、at 時間定義

at 指定時間的方法:

  • 接受在當天的 hh:mm(小時:分鐘)式的時間指定,假如該時間已過去,那么就放在第二天執行, 例如:04:00,表示在當天的 4點整執行一次,
  • 使用 midnight(深夜),noon(中午),teatime(飲茶時間,一般是下午 4 點)等比較模糊的詞語來指定時間,
  • 采用 12 小時計時制,即在時間后面加上AM(上午)或 PM(下午)來說明是上午還是下午, 例如:12pm,表示凌晨12點,
  • 指定命令執行的具體日期,指定格式為month day(月 日)或 mm/dd/yy(月/日/年)或 dd.mm.yy(日.月.年),指定的日期必須跟在指定時間的后面, 例如:04:00 2021-03-1
  • 使用相對計時法,指定格式為:now + count time-units ,now就是當前時間,time-units 是時間單位,這里能夠是minutes (分鐘)、hours(小時)、days(天)、weeks(星期),count 是時間的數量,幾天,幾小時, 例如:now + 5 minutes,表示5分鐘后執行一次,
  • 直接使用 today(今天)、tomorrow(明天)來指定完成命令的時間,

4、應用實體

# 查詢系統中沒有執行的任務(以下兩條命令等價)
atq
at -l
# 案例一:設定三天后的下午5點執行命令, ls /home
# 注意,如果在這里輸入錯誤,想要洗掉的話,按住Ctrl+洗掉鍵,
at 5pm + 2 days 
at> /bin/ls /home
# 案例二:設定明天 凌晨3點鐘,輸出時間到指定檔案內
at 3am tomorrow
at> date > /home/mydate.txt
# 案例三:設定2分鐘后,輸出時間到指定檔案內
at now + 2 minutes
at> date > /home/mytime.txt
# 案例四:使用腳本執行定時任務,輸出日歷到指定檔案中
# 編輯腳本
vim test.sh
cal > mytest.txt
# 給腳本賦予執行的權限
chmod u+x test.sh 
# 設定定時任務
at now + 1 minutes
at> /home/test.sh

# 洗掉定時任務(一下兩條指令等價)
atrm 任務編號
at -d 任務編號

2. 磁盤磁區

2.1 Linux磁區

(1)Linux中磁區的概念

  • Linux 來說無論有幾個磁區,分給哪一目錄使用,它歸根結底就只有一個根目錄,一個獨立且唯一的檔案結構 , Linux 中每個磁區都是用來組成整個檔案系統的一部分,
  • Linux 采用了一種叫 “載入” 的處理方法,它的整個檔案系統中包含了一整套的檔案和目錄,且將一個磁區和一個目錄 聯系起來,這時要載入的一個磁區將使它的存盤空間在一個目錄下獲得,
# 查看當前系統的磁區情況(怎么記這個命令?老sb嘮嗑)
lsblk

(2)Linux硬碟型別

Linux 硬碟分 IDE 硬碟和 SCSI 硬碟,目前基本上是 SCSI 硬碟,

  • IDE硬碟:驅動器識別符號為 hdx~
    • hd :表明磁區所在設備的型別,這里是指 IDE 硬碟,
    • x:為盤號
      • a 為 基本盤
      • b 為基本從屬盤
      • c 為輔助主盤,
      • d 為輔助從屬盤)
    • ~:代表磁區,
      • 前四個磁區用數字 1 到 4 表示,它們是主磁區或擴展磁區
      • 從 5 開始就是邏輯磁區,
    • 例:hda3 表示為第一個 IDE 硬碟上的第三個主磁區或擴展磁區,hdb2 表示為第二個 IDE 硬碟上的第二個主磁區或擴展磁區,
  • SCSI 硬碟:標識為 sdx~ ,
    • sd:表示磁區所在設備的型別的,這里是指 SCSI 硬碟,
    • 其余則和 IDE 硬碟的表示方法一樣
# 查看設備的掛載詳細情況
lsblk -f

2.2 增加硬碟

(1)步驟:

  1. 虛擬機添加硬碟
  2. 磁區
  3. 格式化
  4. 掛載
  5. 設定可以自動掛載

(2)具體添加硬碟的步驟如下:

1、點擊設定

2、選中硬碟,點擊添加,

3、選中硬碟,點擊下一步,

4、選擇磁盤型別為 SCSI,下一步,

5、創建新的虛擬磁盤

6、設定磁盤容量,

7、指定磁盤檔案(默認即可)

8、可以看到這里多了個新硬碟,點擊確定,

9、然后重啟系統即可識別到新硬碟,

  • 我們可以看到新增的磁盤的編號是 sdb,因為我們的第一塊磁盤編號是 sda
  • 現在還沒有磁區,所以只能看到是一塊單獨的磁盤,

(3)給新增的磁盤磁區

# 磁區命令
fdisk /dev/磁盤編號
例:fdisk /dev/sdb

輸入磁區命令,顯示如下,

常用操作:

操作含義
m顯示幫助資訊
d洗掉磁區
q直接退出,不保存修改
n添加一塊新的磁區
w保存退出
p顯示磁盤磁區,等同于 fdisk –l

說明:

  • 開始磁區后輸入 n,新增磁區,然后選擇 p ,磁區型別為主磁區,兩次回車默認剩余全部空間,最后輸入w 寫入磁區并退出,若不保存退出輸入 q,

現在有了磁區之后,還不能直接掛載,需要進行格式化,格式化的原因是要給這個磁區指定它的檔案型別,

(4)格式化磁區

# 磁區命令,檔案型別一般為 ext4,磁區編號就是上面執行磁區時生成的編號,
mkfs -t 檔案型別 /dev/磁區編號
# 例
mkfs -t ext4 /dev/sdb1

格式化完成之后,系統就會生成一個UUID,來唯一標識這塊磁區,

(5)掛載

我們在根目錄下創建一個目錄,/mydisk,來掛載這塊磁區,因為Linux中將一個磁區和一個目錄聯系起來,打開一個目錄,就相當于進入一塊磁區,

掛載:就是將一個目錄和磁區聯系起來,

# 先切換到根磁區(這里不一定分要掛載到根磁區下,也可以掛載到/home或/root下)
cd /
# 創建一個目錄
mkdir mydisk
# 掛載磁區
mount /dev/sdb1 /mydisk

掛載完畢之后,我們在查看系統磁區情況,可以發現新的磁區已經有了掛載點,

卸載磁區,磁區中的內容不會被洗掉,

# 卸載命令
umount 設備名稱或掛載目錄
# 例
umount /dev/sdb1
umount /mydisk

注意:用命令列掛載的方式,Linux系統重啟之后就會失效,

(6)設定為永久掛載

編輯 /etc/fstab 檔案實作永久掛載,

# 編輯 /etc/fatab 檔案,實作永久掛載
vim /etc/fstab

這里可以寫磁區的UUID,也可以寫磁區編號(例:/dev/sdb1 ),

# 添加完成后 執行以下命令,使掛載即刻生效
mount –a 

2.3 磁盤情況查詢

在Linux的使用程序中,隨著我們不斷的給Linux系統中添加上傳檔案,它的磁盤空間肯定是越來越少的,因此,我們應該實時掌握磁盤的使用情況,以做出相應操作,如:增加磁盤、增加磁區等,

查詢系統整體磁盤使用情況:

# 查看的命令如下
df -h

查看指定目錄的磁盤使用情況

# 如果不指定目錄,則默認查看當前目錄的磁盤使用情況
du [選項]
# 指定目錄
du -h /home

常用選項:

選項含義
-h顯示時加上單位,k
-s指定目錄占用大小匯總
-a含檔案
-c列出明細的同時,顯示匯總值
–max-depth=num指定子目錄深度為num
# 查詢 /home 目錄的磁盤占用情況,深度為 1
du -hac --max-depth=1 /home

2.4 實用指令

# 統計資料
wc

1、統計目錄下檔案的個數

# Linux的命令是支持正則運算式的,因此可以使用其模糊匹配,
# 顯示 /root 目錄下檔案的個數,使用 wc 指令統計數量,
# 因為檔案是以 - 開頭的
ls -l /root | grep "^-" | wc -l

2、統計目錄下目錄的個數

# 統計 /root 目錄下目錄的個數
ls -l /root | grep "^d" | wc -l

3、統計目錄包括子目錄中檔案的個數

# R 表示遞回的意思
ls -lR /root | grep "^-" | wc -l

4、以樹狀顯示目錄下的檔案及目錄結構

tree 目錄
例:tree /root

注意,Linux中默認是沒有 tree 指令的,我們需要手動安裝一下,安裝指令如下:

# 安裝的前提是Linux系統需連通外網,可以是 ping 命令檢測一下,
yum install tree
# ping 百度
ping www.baidu.com

出現以下內容則表示網路暢通,

3. 網路配置

3.1 網路概述

1、Linux下查看IP地址

ifconfig

2、Windows下查看IP地址,

NAT網路連接模式下,Linux和Windows母機的通信是通過VMNet 8 完成的,

ipconfig

(1)NAT網路配置原理圖

注意:如果你的Windows母機和Linux虛擬機是在同一網段下,但是出現互相 ping 不通的情況,可以嘗試將Windows的防火墻關閉,

Linux的IP地址的網段是可以指定的,

(2)查看虛擬網路編輯器

(3)測驗網路連通性

# 測驗當前主機是否可用連通目的主機
ping 目的主機的IP
# 測驗當前主機是否可以連通互聯網
ping www.baidu.com

3.2 網路配置

(1)第一種配置方法—自動獲取

  • 優點:可以自動規避IP沖突,
  • 缺點:Linux每次重啟后自動獲取的IP地址可能會不同,這樣就無法做服務器使用,

1、打開Linux的網路設定

2、修改網路設定

3、修改網路連接方式為自動獲取

(2)第二種配置方法—指定IP

ifcfg-ens33 檔案引數說明

# 網路型別,通常是 Ethernet,一般還有bond,bridge
TYPE="Ethernet"
# 是否允許非root用戶控制該設備
USERCTL=no
PROXY_METHOD="none"
BROWSER_ONLY="no"
# IP的配置方法(none/static/bootp/dhcp)
# none   引導時不使用協議
# static 靜態IP
# bootp  BOOTP協議
# dhcp   動態分配
BOOTPROTO="dhcp"
# 是否設定默認路由
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
# IPV6 是否有效,(yes/no)
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
# 這個引數對應的值是網卡名,是給用戶看的
NAME="ens33"
# 隨機id
UUID="7415a862-a57f-44c7-8946-6a5ee37621ee"
# 介面名(設備、網卡)
DEVICE="ens33"
# 系統啟動的時候網路介面是否有效(yes/no)
ONBOOT="yes"
# IP地址(static時使用)
IPADDR=192.168.100.140
#網關 (static時使用)
GATEWAY=192.168.100.2 
#域名決議器 (static時使用)
DNS1=192.168.100.2

ens33 就類似于網卡

第一步:修改Linux的IP地址,

  • 通過編輯修改 /etc/sysconfig/network-scripts/ifcfg-ens33 該檔案實作
# 修改 ifcfg-ens33 檔案
vim /etc/sysconfig/network-scripts/ifcfg-ens33
  • ifcfg-ens33 檔案中做如下修改

  • BOOTPROTO="dhcp" 由 dhcp 改為 static ,

  • 再在檔案中添加一下內容:

# IP地址,這里指定為 192.168.200.130 
IPADDR=192.168.200.130 
#網關,這里指定為 192.168.200.2 
GATEWAY=192.168.200.2 
#域名決議器,這里指定為 192.168.200.2 
DNS1=192.168.200.2

第二步:修改 VMNet 8 的網路IP

  • 打開 VMware的 虛擬網路編輯器進行修改,
    • 將子網IP 修改為和剛才指定的Linux的IP地址在同一網段下,
  • 修改VMNet 8 的網關,
    • 將網關也修改為剛才 ifcfg-ens33 檔案中的網關,
  • 重啟網路服務 或 重啟Linux系統,使配置生效,
# 重啟網路服務
service network restart

重啟之后,查看Linux的IP地址,

  • 可以驗證我們剛才的配置生效了

再查看 VMNet 8 的IP地址,配置同樣生效,

使用 ping 命令檢測 Linux和 Windows以及互聯網的連通性,

  • Windows是可以 ping 通Linux虛擬機的
  • Linux也是可以 ping 通Windows的
  • Linux也是可以 ping 通互聯網的,這里以百度為例,

3.3 host 映射

(1)設定主機名

疑問一:IP地址就可以標識一臺主機,為什么要設定主機名呢?

  • 原因很簡單:因為懶,不想記那么長的IP地址,因此可以給主機設定主機名,方便記憶,
# 查看主機名
hostname

疑問二:如何設定或修改主機名呢?

  • 通過修改檔案 /etc/hostname ,在該檔案中指定,
# 先查看一下 /etc/hostname 檔案,也是顯示當前主機名
cat /etc/hostname
# 編輯修改 /etc/hostname 檔案
vim /etc/hostname

上圖中,可以看到主機名已修改完成,但是還沒有生效,需要重啟系統才能生效,

reboot

(2)設定 host 映射

疑問三:設定完主機名之后,就能使用主機名來標識一臺主機嗎?我們可以使用 ping 命令測驗一下

可以看到,現在是不能 ping 通的,原因很簡單,現在還沒有做 host 映射,Windows母機還不知道 Yang_CentOS76 代表的是哪個主機,因為它只是一個名字,這個名字是可以重復的,

因此我們需要明確的告訴系統,這個名字是指向哪個主機的,

  • 在 Windows 中指定host映射:指定我們剛才設定的Linux主機名
    • 在檔案:C:\Windows\System32\drivers\etc\hosts 中指定,
    • 指定之后,如果執行 ping Yang_CentOS76,系統就會先在 host 檔案中找 Yang_CentOS76 對應的是哪個主機,

設定完成之后,在 Windows中就可以ping 通 Linux主機了

  • 在 Linux中 指定Windows主機名
    • /etc/hosts 檔案中指定,
    • 這里指定的Windows主機名可以任意,它只是和Windows的VMNet 8 的IP地址系結,
      • 比如:我這里指定 Windows的主機名為:Yang,以后我們在Linux中 ping Yang 就相當于 ping 192.168.100.1

(3)主機名決議

  • Hosts:Linux中的一個文本檔案,用來記錄 IP 和 Hostname(主機名)的映射關系,
  • DNS:就是Domain Name System的縮寫,翻譯過來就是域名系統,是互聯網上作為域名和 IP 地址相互映射的一個分布式資料庫,

:用戶在瀏覽器訪問百度(www.baidu.com),就會經歷以下程序:

  1. 瀏覽器先檢查瀏覽器快取中有沒有該域名對應的 IP 地址,
    1. 如果有,就直接使用 IP 完成決議,
    2. 如果沒有,就轉到第二步,
  2. 檢查DNS 決議器快取,
    1. 如果有直接回傳 IP 完成決議,
    2. 如果沒有,就轉第三步,
  3. 檢查系統中 hosts 檔案中有沒有配置對應的域名 IP 映射,
    1. 如果有,則回傳IP,完成決議,
    2. 如果沒有,則執行第四步,
  4. 到域名服務DNS 進行域名決議,
    1. 如果有,就回傳該IP,完成決議,
    2. 如果沒有,則回傳域名不存在,

圖解如下:

瀏覽器快取和DNS決議器快取,,可以理解為本地決議器快取,

一般來說,當電腦第一次成功訪問某一網站后,在一定時間內,瀏覽器或作業系統會快取他的 IP 地址(DNS 決議記 錄)

可以在 cmd 視窗中使用命令查詢:

# 查看DNS域名決議快取
ipconfig /displaydns
# 清除電腦的域名快取
ipconfig /flushdns

(4)域名劫持

如果非法修改了Hosts檔案,就形成了域名劫持,

如下:

# 在 hosts 檔案中加一行
192.168.100.140 www.baidu.com

我們 ping 的明明是 www.baidu.com,但實際上是ping 向我們剛才配置的IP,

試想一下,如果黑客入侵我們電腦,修改了hosts檔案,將我們訪問的網站換成了他的釣魚網站……

不過不用擔心,黑客入侵也沒那么容易

4. 行程管理

4.1 行程概述

(1)行程與程式:

  • 行程是程式的一次運行程序,是系統資源分配和系統調度的基本單位,
  • 行程是動態的,程式是靜態的,(行程是暫時的,程式是永久的),
  • 將程式裝入記憶體執行就形成了行程,
  • 行程由三部分組成:
    1. 程式段:因為一個程式可能會很大,不可能全部裝入記憶體,
    2. 資料:程式運行所需要的資料,
    3. PCB(行程控制塊):包含行程執行所需要的控制資訊,

(2)Linux行程

  • 在Linux中,每個執行的程式都稱為一個行程,每一個行程都分配一個 ID號(pid,行程號),

  • 每個行程都可能以兩種方式存在的,

  • 前臺:所謂前臺行程就是用戶目前的螢屏上可以進行操作的,

  • 后臺:后臺行程則是實際在運行,但螢屏上無法看到的行程,通常使用后臺方式執行,

  • 一般系統的服務都是以后臺行程的方式存在,而且都會常駐在系統中,直到關機才才結束,

  • Windows中的行程:

  • Linux中的行程:

4.2 查看Linux行程

(1)ps相關指令

ps 指令是用來查看目前系統中,有哪些行程,以及他們的執行情況,

# 顯示當前終端的所有行程資訊
ps -a
# 以用戶的格式顯示行程資訊
ps -u
# 顯示后臺行程
ps -x
# 一般情況下,都進行組合使用,如下:
ps -axu

說明:

  1. USER:行程執行用戶
  2. PID:行程號
  3. %CPU:當前行程占用CPU的百分比
  4. %MEM:當前行程占用記憶體的百分比
  5. VSZ:行程占用的虛擬記憶體大小(單位:KB)
  6. RSS:行程占用的物理記憶體大小(單位:KB)
  7. TTY:終端資訊
  8. STAT:當前行程運行情況
    1. S:睡眠狀態,表示正在休眠
    2. s:表示該行程是會話的先導行程
    3. N:表示行程擁有比普通優先級更低的優先級
    4. R:表示正在運行
    5. Z:表示僵死行程,行程死掉了,但是它占用的記憶體沒有被釋放,
    6. T:表示被跟蹤或停止的行程
  9. START:當前行程開始執行的時間
  10. TIME:當前行程占用CPU的時間
  11. COMMAND:啟動行程所用的命令和引數,如果過長會被截斷顯示
# 以全格式顯示當前所有的行程 -e 顯示所有行程,-f 全格式
ps -ef

Linux中,一個行程可以生成或創建別的行程,因此就有父行程的概念,

# 查詢 sshd 行程的詳細資訊
ps -ef | grep sshd

說明:

  1. PPID:父行程ID,為0表示它沒有父行程,它本身就是一個根行程,
  2. C:CPU用于計算執行優先級的因子,數值越大,表明行程是 CPU密集型運算,執行優先級會降低;數值越小,表明行程是 I/O密集型運算,執行優先級會提高,
  3. CMD:等同于上面的COMMAND,

(2)查看行程樹

# 以樹狀圖顯示行程關系
pstree [選項]

常用選項:

  1. -p:顯示進行的PID,
  2. -u:顯示行程所屬用戶,
pstree -p

4.3 終止行程

若是某個行程執行一半需要停止時,或是已消了很大的系統資源時,此時可以考慮停止該行程,使用 kill 命令來完成此項任務,

# 通過行程號終止行程
kill [選項] 行程號
# 通過行程名終止行程,同時終止該行程的子行程,也支持通配符的使用,
killall 行程名稱

常用選項:

  • -9:強制終止一個行程,

sshd服務就是支持遠程登錄的一個服務,

# 案例一:踢掉某個非法用戶
# 先使用 ps 指令查詢到該用戶登錄使用的 sshd 的行程號
ps -ef | grep sshd
# 再使用 kill 指令終止該行程
kill 行程號
# 案例二:終止遠程登錄服務 sshd, 在適當時候再次重啟 sshd 服務
# 先使用 ps 指令查詢 sshd 的行程號
ps -ef | grep sshd
# 再使用 kill 指令終止該行程
kill 行程號
# 重啟 sshd 服務
/bin/systemctl restart sshd.service
# 案例三:終止多個 gedit 行程,該行程是Linux下的文本編輯器的行程
killall gedit
# 強制終止一個行程,我們在虛擬機中打開兩個終端,然后使用一個終端去關閉另外一個終端的行程,終端的行程名是 bash
kill -9 行程號

4.4 服務管理

(1)服務的概念

服務(service) 本質就是行程,它一般是運行在后臺的,通常都會監聽某個埠,等待其它程式的請求,比如:mysql監聽3306埠,sshd監聽22埠,因此我們又將這些行程稱為守護行程,

監聽埠,就可以理解為打開一個耳朵,時刻探測有沒有人發起請求,

(2)service管理指令

# 服務的 啟動、停止、重啟、重新加載、查看狀態
service 服務名 [start | stop | restart | reload | status] 

注意:在 CentOS7.0 后 很多服務不再使用 service ,而是systemctl ,

查看哪些服務還可以被 service 指令管理,使用如下命令進行查看:

# 在 /etc/init.d/ 目錄下
ls -l /etc/init.d/

可以看到有如下幾條服務可以使用 service 指令管理:

比如,查看 network 的狀態:

service network status
# 重啟 network 服務
service network restart 
# 停止 network 服務
service network stop 
# 啟動 network 服務
service network start

(3)查看服務名

方式一:使用 setup 指令,查看所有服務

setup

前面顯示 * 星號的,表示在Linux系統啟動的時候,會自動啟動,

停止服務:

  • 將游標停在某個服務的上,按下空格鍵,
  • 再按下確定鍵,就停止了該服務,

方式二:查看 service 管理的指令

ls -l /etc/init.d/

開機流程

4.5 chkconfig 指令

(1)復習 Linux中的運行級別:

由前面的學習可知,Linux中有7個運行級別:

  1. 運行級別 0:系統停機狀態,系統默認運行級別不能設為 0,否則不能正常啟動 ,
  2. 運行級別 1:單用戶作業狀態,root 權限,用于系統維護,禁止遠程登陸,
  3. 運行級別 2:多用戶狀態(沒有NFS),不支持網路 ,
  4. 運行級別 3:完全的多用戶狀態(有NFS),無界面,登陸后進入控制臺命令列模式 ,
  5. 運行級別 4:系統未使用,保留 ,
  6. 運行級別 5:X11 控制臺,登陸后進入圖形GUI 模式 ,
  7. 運行級別 6:系統正常關閉并重啟,默認運行級別不能設為 6,否則不能正常啟動,
# 查看當前系統運行級別
systemctl get-default
# 這是默認運行級別
# multi-user.target 表示運行級別 3 
# graphical.target  表示運行級別 5
systemctl set-dafault xxx.target

(2)chkconfig 指令

作用:通過 chkconfig 命令可以給服務的各個運行級別設定 自啟動/關閉,即:指定某個服務在哪個運行級別是自啟動的,在哪個級別是關閉的,

chkconfig 指令和 service 指令一樣,可以在 /etc/init.d/ 目錄下查看它所能管理的指令,因為在 CentOS 7 之后,更多的指令是通過 systemctl 指令管理的,

# 查看 chkconfig 指令管理的服務在7個級別中的狀態
chkconifg --list
# 指定某個服務在某個運行級別是否自啟動
chkconfig --level 運行級別對應的數字 服務名 on/off
# 案例: 把 network在 3 運行級別,關閉自啟動,重啟系統生效,
chkconfig --level 3 network off 
# network在 3 運行級別,自啟動 
chkconfig --level 3 network on

4.6 systemctl 指令

(1)systemctl 指令

# 基本語法,設定服務的 啟動、停止、重啟、重新加載、查看狀態
systemctl [start | stop | restart | status] 服務名

systemctl 指令管理的服務在 /usr/lib/systemd/system 查看

ll /usr/lib/systemd/system
# 查看當前各個服務的啟動狀態
systemctl list-unit-files [ | grep 服務名] 

說明:

  • enable:開機自啟動,
  • disable:開機不自啟,
  • static:靜態,
# 設定服務開機啟動,表示同時設定 3 和 5 兩個級別,
systemctl enable 服務名
# 關閉服務開機啟動
systemctl disable 服務名 
# 查詢某個服務是否是自啟動的
systemctl is-enabled 服務名 
# 案例:查看當前防火墻的狀況,
# 先得查詢到Linux中防火墻服務的名稱,
# 使用如下指令,查詢知,防火墻的服務為:firewalld.service
ll /usr/lib/systemd/system | grep fire
# 查看防火墻狀態
systemctl status firewalld
# 關閉防火墻
systemctl stop firewalld
# 重啟防火墻
systemctl restart firewalld

注意

  • 關倍訓啟動防火墻之后,它是立即生效的,
  • 這種方式只是臨時生效,當重啟系統后,還是回歸以前對服務的設定,
  • 如果希望設定某個服務自啟動或關閉永久生效,要使用以下指令關倍訓開啟服務,
systemctl [enable|disable] 服務名

(2)防火墻原理

請求先到防火墻,如果它將要訪問的埠是服務器允許通過的,則該請求可以訪問到指定服務,如果它請求的服務的埠是不允許通過的,則該請求不能訪問到指定服務,

因此防火墻可以防止我們的系統被惡意的訪問,

驗證防火墻的作用:

# 查看網路狀態
netstat -anp 

我們可以在 Windows的cmd視窗,嘗試訪問上圖中的一個處于監聽狀態的埠:

(如果 telnet 指令無法使用,請往下看,后面有解決方案)

# telnet 指令語法
telnet IP地址 埠號
# 例 訪問 192.168.100.140 的 111 埠
telnet 192.168.100.140 111

顯示連接失敗,表示Linux的防火墻是打開的,并且該埠不允許通過,

我們現在關閉Linux的防火墻,再次連接該埠,發現可以連接成功,

# 關閉防火墻
systemctl stop firewalld

至此,我們就理解了防火墻的基本作用,就是可以防止程式惡意訪問我們的系統,

因此在真正的生產環境,往往需要將防火墻打開,

(3)firewall 指令

因此在生產環境下,需要防火墻打開,在這種情況下,如果我們想要訪問Linux的某個埠,肯定是不能直接訪問的,而我們又不能直接關閉防火墻,

因此可以使用 firewall 指令,

# 打開埠(該命令需要 root 用戶才能執行)
firewall-cmd --permanent --add-port=埠號和協議
# 關閉埠
firewall-cmd --permanent --remove-port=埠號和協議
# 不論是打開埠還是關閉埠,都需要重新載入一下才能生效,
firewall-cmd --reload 
# 查詢埠是否開放
firewall-cmd --query-port=埠/協議
# 查看埠對應的協議
netstat -anp | more
# 案例:打開111埠
firewall-cmd --permanent --add-port=111/tcp
# 重新載入,使命令生效,
firewall-cmd --reload
# 查詢埠狀態,顯示為 yes
firewall-cmd --query-port=111/tcp

埠打開之后,再次使用Windows的cmd視窗連接該埠,是可以成功的,

# 關閉111埠
firewall-cmd --permanent --remove-port=111/tcp
# 重新載入,使命令生效,
firewall-cmd --reload
# 查詢埠狀態,顯示為 no
firewall-cmd --query-port=111/tcp

telnet 指令無法使用的解決方案

如果在使用 telnet 指令的時候,出現以下錯誤,是因為Windows中的Telnet客戶端服務沒有打開,

使用以下方法打開即可:

1、打開 “應用和功能”

2、打開 ”程式和功能“,

在最下面,

3、啟用或關閉Windows功能,

4、打開服務

5、重啟電腦,即可使用 telnet 指令,

4.7 動態監控行程

top 與 ps 命令很相似,它們都用來顯示正在執行的行程,

Top 與 ps 指令又有不同之處,就是 top 指令在可以動態更新正在運行的的行程,

# 語法
top [選項]
選項含義
-d指定top指令的重繪間隔,默認是 3 秒
-i不顯示閑置或僵死行程
-p通過指定監控行程id來僅監控某個行程的狀態

說明:

  • load average:負載值,三個值加起來除以3,如果大于0.7,則表示系統負載教大,

  • Tasks:任務數

    • total:任務總數
    • running:正在運行的任務,
    • sleeping:正在休眠的任務,
    • zombie:僵死行程,如果這個值很大,就要清除一下,因為它會占用記憶體,
  • %CPU:CPU的利用率,

    • us:用戶占用CPU的百分比,
    • sy:系統占用CPU的百分比,
    • id:可用CPU,
  • Men:物理記憶體

    • total:總數,
    • free:空閑記憶體大小,
    • used:已用的記憶體大小,
    • buff/cache:快取占用的記憶體大小,
  • Swap:交換磁區

    • total:總數,
    • free:空閑的交換磁區大小,
    • used:已用大小,
    • avail Men:可獲取的大小,

動態監控時的互動操作:

操作功能
P以CPU使用率排序,默認,降序
M以記憶體使用率排序,降序
N以PID排序,降序
q退出程式,
# 不顯示閑置行程或僵死行程
top -i
# 監控指定行程
top -p 行程的PID
# 監控指定用戶
top u 用戶名
# 案例:監控 lu 用戶,并踢他下線
top u lu

在此界面,按下 k,然后輸入 lu 用戶的 bash 的行程PID,

輸入 9,強制殺死行程,

用戶 lu 下線,

4.8 監控網路狀態

服務連接的基本原理:

# 查看系統網路情況
 netstat [選項]
選項含義
-an按一定順序排序輸出
-p顯示哪個行程在呼叫

顯示資訊如圖:

說明:

  • Proto:連接使用的協議,
  • Recv-Q:接收到的資料,
  • Send-Q:發送的資料,
  • Local Address:Linux虛擬機的本地地址,
  • Foreign Address:相對Linux虛擬機的外部地址,
  • State:連接狀態
    • Listen:監聽狀態,時刻準備連接,
    • ESTABLISHED:連接成功,
    • TIME WITE:超時等待,一個連接并不會立即斷開,它會等待一段時間后再斷開,
  • PID:該連接發起的行程,

5. RPM 與 YUM

5.1 軟體包管理概述

CentOS中主要有兩種軟體包管理方式,分別是YUMRPM

  • YUM使用簡單,但需要聯網,YUM會去YUM包源獲取需要的軟體包,
  • RPM不需要聯網使用,但需要較高的操作水平和繁瑣的依賴處理,

軟體的安裝和卸載應該是一件稀松平常的事,例如我們平常使用的Windows一樣,想要安裝一個軟體,直接去官網下載安裝包,然后雙擊開始安裝即可,但是在Linux中,安裝一個軟體卻不是這么簡單,

因為Linux有一個理念就是一個程式只做好一件小事,一個大的程式就需要幾個小的程式組合起來完成,這就導致了各個小的程式之間有復雜的依賴關系,比如:要完成某件任務,就需要安裝程式A,而程式A的安裝需要程式B的支持,程式B的安裝又需要程式C的支持……,這便是依賴,

為了很好的組織管理這種復雜的依賴,就有了RPM軟體包管理,Redhat Package Manager,類似windows 的 setup.exe,RPM是以一種資料庫記錄的方式來將需要的軟體及其依賴關系安裝到Linux主機的一套軟體管理程式,也就是說,Linux中有一個關于RPM的資料庫,它記錄了安裝軟體的包與包之間的依賴關系,

RPM包時預先在Linux主機上編譯并打包好的檔案,安裝起來非常便捷,

Linux中軟體包的分類:

  1. 原始碼包:
    1. 腳本安裝包:是基于原始碼包的再開發,Windows中是setup.exe,Linux中是install.sh,只需執行該程式即可通過點擊下一步完成安裝,
    2. 優點:
      1. 開源,可修改定制源代碼,
      2. 自由,可以
      3. 原始碼包方式安裝的軟體要比RPM包安裝的軟體穩定高效,據統計,一般高5%,
      4. 卸載方便,可以直接洗掉對應的安裝目錄,
    3. 缺點:
      1. 安裝步驟過多,
      2. 編譯時間較長,比二進制安裝時間長好多,
      3. 容易出錯,
  2. 二進制包:如:RPM包
    1. 定義:RPM是經過編譯之后的檔案,例如:Windows中編譯完之后是 .exe 可執行檔案,Linux中編譯完之后是 .rpm 檔案,
      1. CentOS 中是RPM包,
      2. Ubuntu 中是DEB
    2. 優點:
      1. 包管理系統簡單,只通過幾個命令就可以實作包的安裝,升級,查詢和卸載,
      2. 安裝速度比原始碼包安裝快得多
    3. 缺點:
      1. 經過編譯,原始碼不可見,
      2. 功能選擇不如原始碼包靈活,
      3. 有依賴性:
        • 依賴性是指是要想安裝A包就得先安裝B包,要想安裝B包又得先安裝C包,所以只能以CBA的順序安裝RPM包,洗掉的時候得按ABC順序洗掉安裝包,基本上所有的RPM包全有依賴性,

5.2 RPM包管理–RPM命令

(1)RPM包命名規則

例:httpd-2.2.15.el6.centos.1.i686.rpm

說明:

  • httpd 軟體包包名
  • 2.2.15 軟體版本
  • 15 軟體發布的次數
  • el6.centos 適合的Linux平臺
  • i686 適合的硬體平臺
    • noarch:表示任何硬體平臺都可以安裝,
    • i686、i386:表示 32 位系統,
    • x86_64:表示 64 為系統,
  • .rpm:rpm包擴展名

注意:區分包名和包全名:

  • 包名:類似上面的 httpd,如果操作的是已經安裝的軟體包時,使用包名即可,系統會去搜索 /var/lib/rpm/ 中的資料庫,
  • 包全名:包名+版本+發布次數+適用平臺+擴展名,如果操作的是沒有安裝的軟體包時,要使用包全名,而且要注意路徑(所有的RPM包都在Linux的光碟檔案的package目錄下)
    • /run/media/root/CentOS 7 x86_64/Packages 在該目錄下,

(2)RPM包依賴性

  • 環形依賴:
  • 樹形依賴:
  • 模塊依賴

說明:

  • 出現環形依賴時的解決方案,使用一條命令將a,b,c,d三個同時安裝即可,
  • 如果安裝時遇到問題,出現依賴性錯誤,被依賴檔案以.so.[數字] 結尾的為庫依賴,需要直接安裝這個軟體,錯誤會自動解決,查詢被依賴檔案在哪個包中:在該網站查詢網站 www.rpmfind.net.

yum主要就是為了解決RPM的依賴性,

(3)RPM包的安裝、升級、卸載

1、安裝

如果沒有在RPM包所在目錄,就需要使用絕對路徑,

# RPM安裝
rpm [選項] 包全名
# 一般組合使用
rpm -ivh 包全名
選項含義
-iinstall,安裝
-vverbose,顯示詳細資訊,
-hhash,顯示進度
–nodeps不檢測依賴性(不使用)

2、升級

# RPM升級
rpm [選項] 包全名
# 一般組合使用
rpm -Uvh 包全名
選項含義
-Uupdate,升級更新
-vverbose,顯示詳細資訊,
-hhash,顯示進度
–nodeps不檢測依賴性(不使用)

3、卸載

卸載不需要路徑,

# rpm 卸載
rpm -e 包名
# 卸載firefox
rpm -e firefox

如果其它軟體包依賴于您要卸載的軟體包,卸載時則會產生錯誤資訊,

removing these packages would break dependencies:foo is needed by bar-1.0-1

意思是說:要洗掉的 foo 會被 bar-1.0-1 使用到,

(4)RPM查詢

#查詢指定包是否安裝
rpm -q 包名
# 查詢所有已安裝的包
rpm -qa
# 查詢指定包的詳細資訊,i information,包資訊是在組件這個包時就寫好的,
rpm -qi 包名
# 查詢未安裝的軟體包的資訊,p package
rpm -qip 包全名
# 查詢軟體包中檔案安裝位置
rpm -ql 包名 
# 查詢系統檔案屬于哪個RPM包
rpm -qf 系統檔案名
# 查詢軟體包的依賴性
rpm -qR 包名 
# 查詢是否安裝firefox
rpm -q firefox
rpm -qa | grep firefox
# 查詢安裝的 Python 的詳細資訊
rpm -qi python
# 查詢 Python 軟體包的檔案具體的安裝路徑
rpm -ql python

(5)校驗

校驗我們安裝的軟體有沒有被修改過,

# RPM包校驗
rpm -V 已安裝的包名 

如果沒有任何修改,則不顯示任何內容,

如果做了修改,則會顯示如下內容:

S.5……T. c /etc/httpd/conf/httpd.conf

說明:

顯示內容中的8個資訊的具體內容: 如果某項沒有變化,就用點表示,

  • S:檔案的大小是否改變,
  • M:檔案的型別或檔案的權限(rwx)是否被改變
  • 5:檔案MD5校驗和是否改變
  • D:設備的中,從代碼是否改變
  • L:檔案路徑是否改變
  • U:檔案的屬主(所有者)是否改變
  • G:檔案的屬組是否改變
  • T:檔案的修改時間是否改變

檔案型別:

  • c:組態檔,config file
  • d:普通檔案,documentation
  • g:“鬼”檔案,ghost file,很少見,就是該檔案不應該被這個RPM包包含,
  • l:授權檔案,license file
  • r:描述檔案,read me

(6)檔案提取

當我們誤刪了某個系統檔案或軟體的組態檔時,就可以使用該指令,提取對應RPM軟體包中的對應檔案,而不需將整個系統或軟體重裝,

即:檔案提取最大的作用就是修復

# rpm2cpio 意思是將rpm格式檔案轉為cpio格式檔案,
# 從cpio中提取指定的檔案
rpm2cpio 包全名 | cpio -idv .檔案絕對路徑
  • rpm2cpio:將 rpm 包轉換為 cpio 格式的命令,2 等于 to,

  • cpio:是一個標準工具,它用于創建軟體檔案檔案和從檔案檔案中提取檔案,

# < 輸入重定向,從檔案或指定設備中輸入,而非標準輸入
cpio [選項] < [檔案|設備]
選項含義
-icopy-in 模式,從檔案中提取資料
-d還原時自動新建目錄
-v顯示還原程序
# 案例:我們誤洗掉了 ls 指令
# 查詢 ls 指令屬于哪個軟體包
rpm -qf /bin/ls
# 制造洗掉了 ls 指令的假象,這里只是將它移動到別的目錄下,
mv /bin/ls /tmp/
# 提取 RPM 軟體包中的ls命令到當前目錄下,執行完指令后,當前目錄下就會多一個 bin 目錄,bin目錄下有ls目錄
rpm2cpio /run/media/root/CentOS\ 7\ x86_64/Packages/coreutils-8.22-23.el7.x86_64 | cpio -idv ./bin/ls
# 將 當前目錄下的ls到根目錄的 /bin/ls
cp /home/bin/ls /bin/

5.3 RPM包管理–YUM

(1)YUM概述

Yum 是一個 Shell 前端軟體包管理器,基于RPM包管理,能夠從指定的服務器自動 下載RPM包并且安裝,可以自動處理依賴性關系,并且一次安裝所有依賴的軟體包,

RPM命令和YUM在線管理都是管理RPM包,區別在于RPM命令是手動安裝,YUM是自動安裝,

YUM并不是非得上網才能使用,可以配置本地光碟作為YUM的源

(2)網路yum源

YUM 源保存在 /etc/yum.repos.d/ 目錄下,后綴為 .repo 的都是合法的YUM源,默認是 Base 這個源生效,CentOS-Media.repo 是本地光碟YUM源,

打開看一下配置好的yum源,

vim /etc/yum.repos.d/CentOS-Base.repo

如上圖,一共默認是由四個軟體池,默認是第一個軟體池生效,

說明

  • [base] 容器名稱,一定要放在 [] 中 ,
  • name 容器說明,可以自己隨便寫 ,
  • mirrorlist:是地址鏡像,
  • baseurl:yum源服務器的地址,默認是CentOS官方的yum源服務器,
  • enabled:值為1,表示容器生效,值為0,表示容器不生效,不寫enabled也默認是1,
  • gpgcheck:我們的RPM包是否進行數字證書驗證,如果是1是指RPM的數字證書生效,如果是0則不生效,
  • gpgkey:數字證書的公鑰檔案保存位置,不用修改

(3)YUM命令

# 查詢服務器上所有的軟體
yum list
# 查詢是否有需要安裝的軟體
yum list | grep 軟體
# 搜索服務器上所有和關鍵字相關的包
yum search 包名
# 安裝軟體
yum install 軟體包 
# -y 自動回答yes
yum -y install 軟體包
# 升級軟體包(注意:如果不加包名,則全部升級,包括Linux內核)
yum -y update 包名 
 # 卸載軟體(如果不加包名,則全部卸載)
 yum -y remove 包名 

注意:一般不要輕易卸載軟體,因為它會同時卸載該軟體依賴的軟體包,而這些軟體包有可能被其他軟體依賴,如果一旦卸載,會導致其他軟體也不能使用,

(4)光碟YUM源搭建

當無法連接網路或網速較慢時,可以考慮搭建光碟YUM源來代替網路YUM源,缺點是軟體不一定是最新的,

Linux一般是有兩張光碟的,如果一個軟體沒有在當前光碟中,有較大可能是在另外一張光碟中,

搭建步驟:

  • 第一步:掛載光碟,
  • 第二步:修改YUM源組態檔,只讓光碟源組態檔生效,這里有三種方法,
    • 第一種:在其他源組態檔的每個軟體池中加 enabled=0,使其失效,
    • 第二種:洗掉或移動其他組態檔,
    • 第三種:改后綴,將其他組態檔的后綴改掉,不是reop即可,
  • 第三步:編輯修改光碟源組態檔,
    • 改光碟掛載點,
    • enabled=1,使其生效,
# 掛載光碟
mount /dev/cdrom /mnt/cdrom
# 這里采用第三種方法
mv CentOS-Vault.repo CentOS-Vault.repo.A
mv CentOS-Base.repo CentOS-Base.repo.A
mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.A
# 修改光碟YUM源檔案
vim /etc/yum.repos.d/CentOS-Media.repo

掛載光碟

1、第一步:在 /mnt/ 目錄下創建掛載點,

cd /mnt
mkdir cdrom

2、第二步:查看光碟完整路徑名,

ls -l /dev | grep cdrom

3、第三步:掛載

# 將 /dev/cdrom  掛載到 /mnt/cdrom 
mount /dev/cdrom /mnt/cdrom

4、查看光碟中的資料

cd /mnt/cdrom
ls -l

5、卸載光碟

不能在掛載點目錄下解除掛載,必須先切換到其他目錄,

# 卸載 /mnt/cdrom 掛載的目錄
umount /mnt/cdrom

5.4 原始碼包管理

(1)原始碼包和RPM包的區別

上面我們已經了解了原始碼包和RPM包的區別,這里說的主要是它們安裝位置的區別,

  • RPM包是安裝在默認位置中,不建議更改,如下:
路徑內容
/etc/組態檔安裝目錄
/usr/bin/可執行命令安裝目錄
/usr/lib/程式所使用的函式庫保存位置
/usr/share/doc/基本的軟體使用手冊保存位置
/usr/share/man/幫助檔案保存位置
/var保存日志檔案等可變檔案
  • 原始碼包安裝位置
    • 安裝在指定位置當中,一般是 /usr/local/軟體名/

安裝位置不同帶來的影響

  • RPM包安裝的服務可以使用系統服務管理命令(service、systemctl)來管理,network 的啟動方法是:

    • 完整路徑加命令的格式:/etc/rc.d/init.d/network start
    • 簡化:service network start
  • 原始碼包安裝的服務則不能被服務管理命令管理,因為沒有安裝到默認路徑中,所以只能用絕對路徑進行服務的管理,如:

    • /usr/local/apache/bin/apachectl start

(2)原始碼包安裝程序

第一步:安裝前的準備

  1. 安裝C語言編譯器,gcc
  2. 下載軟體對應的原始碼包, http://mirror.bit.edu.cn

第二步:安裝注意事項

  • 源代碼,即原始碼包保存位置 /usr/local/src
  • 軟體安裝位置:/usr/local/

第三步:原始碼包的具體安裝程序

  1. 下載原始碼包,
  2. 將原始碼包上傳到Linux中,
  3. 解壓原始碼包,tar -zxvf httpd-2.4.46.tar.gz
  4. 進入解壓之后的原始碼包目錄,繼續后續操作,
    1. INSTALL:該檔案是安裝說明,
    2. README:該檔案是使用說明,
  5. 執行 ./configure 命令,軟體配置與檢查,
    1. 定義需要的功能選項,例如:指定安裝位置,
    2. 檢測系統環境是否符合安裝要求,
    3. 將定義好的功能選項和檢測系統環境的資訊都寫入 MakeFile 檔案,后續的安裝都基于此檔案,
  6. 執行命令,進行編譯,make
    1. 如果這一步驟報錯或上一步驟報錯,可以使用指令 make clean 進行清空,
  7. 執行命令,進行安裝,make install
# 指定安裝路徑
./configure --prefix=/usr/local/軟體名

注意:如果執行完上一條命令之后,報錯如下:

configure: error: APR not found . Please read the documentation

  • 這是因為缺少相關包,

解決

  1. 下載相關包(三個),下載鏈接如下:
http://archive.apache.org/dist/apr/apr-1.4.5.tar.gz 
http://archive.apache.org/dist/apr/apr-util-1.3.12.tar.gz 
http://jaist.dl.sourceforge.net/project/pcre/pcre/8.10/pcre-8.10.zip
  1. 下載完成之后,上傳到Linux,進行安裝
  2. 解決apr not found問題
# 解壓
tar -zxf apr-1.4.5.tar.gz 
# 進入目錄
cd  apr-1.4.5
# 軟體配置與檢查
./configure --prefix=/usr/local/apr 
# 安裝
make 
make install
  1. 解決APR-util not found問題
tar -zxf apr-util-1.3.12.tar.gz 
cd apr-util-1.3.12 
./configure --prefix=/usr/local/apr-util -with-apr=/usr/local/apr/bin/apr-1-config 
make 
make install
  1. 解決pcre問題
unzip -o pcre-8.10.zip 
cd pcre-8.10 
./configure --prefix=/usr/local/pcre 
make 
make install

至此,Apache可以正常安裝

./configure --prefix=/usr/local/apache2 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre
make
make install

安裝完之后,可以使用命令啟動 Apache 服務,然后在瀏覽器訪問虛擬機地址即可訪問Apache,

如果訪問不了,就請查看Linux防火墻狀態,關閉防火墻或開放80埠之后,就可以訪問,

# 使用絕對路徑的方法啟動 Apache
/usr/local/apache2/bin/apachectl start

訪問成功之后顯示:

# 查看防火墻狀態
systemctl status firewalld
# 查看80埠狀態
firewall-cmd --query-port=80/tcp
# 開放80埠
firewall-cmd --permanent --add-port=80/tcp
# 重新載入防火墻
firewall-cmd --reload

(3)原始碼包的卸載

  • 不需要卸載命令,直接洗掉安裝目錄即可,

  • 不會遺留任何垃圾檔案,

rm -rf /usr/local/apache2

【系列文章】
1. Git&GitHub(基礎)
2. Git&GitHub(進階)
3. 詳解Linux(基礎篇)
4. java多執行緒
5. JavaScript 總結
6. SpringMVC(一)
7. SpringMVC(二)
……

關注博主🤞🤞

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/260343.html

標籤:其他

上一篇:Jenkins如何部署

下一篇:5G NR — SA 與 NSA 組網

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more