linux系統管理員
一 認識系統服務
二認識與分析登錄文件
三啟動流程、模組管理與loader
四網絡設定與備份策略
五軟件的安裝 源代碼與tarball
六軟件的安裝rpm srpm與yum
七 xwindow 設置
八核心編譯
一認識系統服務
daemon
命令規則 無論如何 這些服務的名稱后面都加上一個d
centos7之前通過init來管理
服務啟動 關閉與觀察方式:
/etc/init.d/下 的腳本文件
語法:/etc/init.d/daemon start
/etc/init.d/daemon stop
/etc/init.d/daemon restart
/etc/init.d/daemon status
服務啟動的分類:
stand alone 獨立啟動 該服務直接常駐在內存中 提供本機或用戶的服務行為 反應比較快
super daemon 總管程序 由特殊的哦xinetd或inetd這兩個縱觀程序提供socket對應或port對應的管理。
服務的相依性
服務的執行等級的分類
init 根據user自定的執行等級 runlevel 來喚醒不同的服務 進入不同的操作界面 共分為7個等級 0 單人 模式 3 文本模式 5圖形界面 各個執行等級通過/etc/rc.d/rc[0-6]/sxxdaemon 鏈接到/etc/init.d/daemon 鏈接文 件名稱功能為S為啟動該服務 xx為數字 即啟動的順序 所以在開機時 可以依序執行所有需要的服務,同時也能解 決相依服務的問題。
制定執行等級預設要啟動的服務:
開機啟動和開機不啟動
chkconfig daemon on
chkconfig daemon off
chkconfig --list daemon 列表
執行等級切換
runlevel 3 切換到5 使用 init 5 命令
systemd使用的unit分類 與systemv 的啟動服務相比較
平行處理所有服務
init 啟動方式為一項一項的啟動 按照順序 但是systemd是讓所有服務同時啟動的
有要求就回應的on-demand啟動方式
systemd全部就是僅有一只systemd服務搭配systemctl指令來處理 不需要其他的指令,systemd 常駐內存 服務依賴性的自檢
b服務啟動前 需要先啟動a服務 systemd 會自動啟動a服務來幫助b服務的成功運行
按照daemon功能分類
unit 服務單位類型分為
service socket target path snapshot timer 等多種不同的類型
將多個daemons 集合成為一個群組
如同systemv的init里有個runlevel systemd將許多的功能集合成為一個target項目 此項目 用在設計操作環境上 所以集合了許多的daemons 所以是執行某個target就是執行多個daemon的意思
向下兼容init
systemd 的設置文件目錄
上面提到的服務類型包括 系統服務 service ; 文件監聽與交換 socket ; 儲存系統狀態快照類型 snapshot;提供不同類型執行等級的環境target等
/usr/lib/systemd/system:每個服務主要的啟動腳本設置 最主要的 相當於/etc/init.d
/run/systemd/system:執行過程中所產生的服務腳本 優先級比上面的高
/etc/systemd/system/根據主機要求 所建立的執行腳本 類似於/etc/rc.d/rc5.d/Sxx 優先級比上面的run中的文件高
systemd的unit類型分類說明
擴展名來區分服務類型
.service .target
.service 一般類型的服務 主要的系統服務 包括服務器本身需要的本機服務和網絡服務 為大多數
.socket 內部程序數據交換 的插槽服務 主要是IPC inter -process-communication 監控 當有此插槽問及那傳遞信息需要連接某個服務時,就按照當時的狀態將該用戶的要求傳送到對應的daemon 如果daemon尚未啟動 則啟動daemon后再傳送用戶的要求。
.target 執行環境 很多unit的集合 例如multi-user.target 執行此服務就是執行一堆其他的.service和.socket之類的服務
.mount .automount 為系統掛載服務 例如來自網絡的自動掛載 NFS文件系統與文件系統相關性較高的程序管理
.path 目錄服務 檢測 例如打印
.timer 循環執行的服務 類似anacrontab
通過systemctl來管理服務
語法:systemctl [command] [unit]
start stop restart reload enable開機啟動 disable開機不啟動 status is-active檢測是否正在運行 is-enable 檢測開機是否啟動
狀態注意:
active(running) 有一個或多個程序正在系統中執行的意思
gdm gnome的登入管理員 就是圖形界面上一個很重要的登錄管理服務
active(exited) 僅執行一次就正常結束的服務 當前並沒有在系統中執行 並非一直執行 大部分自己寫的bash 腳本
active(waiting) 正在執行當中 不過需要等待其他的事件才能繼續處理
inactive 當前未運行
daemon的預設狀態有
enabled 開機啟動
disabled 開機不啟動
static 不能自己啟動 需要被其他的enabled的服務來喚醒 想依賴性
mask 注銷 非刪除 不能啟動 用unmask方式改回
練習:1.依賴性
cups 服務的依賴性
cups.service cups.socket cups.path
通常.socket 負責監聽(啟動) cups.service和.path(未啟動) 此時當有服務請求的時候 socket再喚醒service 和path 所以需要關閉cups服務的時候 需要同時關閉三個服務 不能僅僅關閉service 。
2.mask 強迫注銷
上面的例子中可以同時關閉三個服務
但是也可以用mask強制注銷的方法 針對.service 來是cups服務不能提供服務
3.通過systemctl觀察系統上所有的服務
語法:systemctl [command] [--type=TYPE] [--all]
list-units list-unit-files 更加詳細
systemctl list-units --type=service --all 顯示unit的某一個類別 service的類別daemon 不管是否啟動
4.通過systemctl管理不同的操作環境
target unit
graphical.target 文字加圖形
multi-user.target 文字
rescue.target root無法登入 時 救援模式
emergency.target root能夠登錄 的緊急處理系統錯誤模式
shutdown.target 關機流程設置
getty.target 設置你需要幾個tty之類的
命令語法systemctl [command] [unit.target]
get-default 獲取當前target
set-default 設置后面的target為預設的操作環境
isolate 切換到后面接的模式
例如:systemctl set-default mluti-user.target 設定下次開機為文本模式
systemctl isolate graphical.target 切換到圖形界面
systemctl + poweroff
reboot
suspend 暫停模式將文件保存在內存中 然后關閉大部分硬件
hibernate 休眠模式將狀態保存到硬盤中 完畢后 將電腦關機
rescue
emergency
5.通過systemctl分析各個服務之間的依賴關系
語法:systemctl list-dependencies [unit] [--reverse]
reverse 反向追蹤誰使用此unit的意思
樹的形式列出想依賴關系 正向為根節點用到下面的各個服務 向下
reverse反向:為根節點被下面的葉子節點用到
6.與systemd的daemon運行過程相關的目錄簡介
除了/usr/lib/systemd/system/和/etc/systemd/system/目錄下 還有與daemon相關的文件
/usr/lib/systemd/system/ 發行版 預設的啟動腳本原始位置 盡量不修改 如果需要修改用/etc/systemd/system
/run/systemd/system/ 系統執行過程中產生的服務腳本 優先級比上面的高
/etc/systemd/system/ 根據主機要求自定義的執行腳本
/etc/sysconfig/* 幾乎所有的系統服務都會初始化的選項放在此目錄下 例如網絡的設定目錄為network- scripts
/var/lib/ 產生數據的服務都會講數據寫入/var/lib的目錄中 例如數據庫管理系統mariadb的數據 默認寫入/var/lib/mysql中
/run/ 放置很多的daemon的緩存文件 包括lock file以及PID file等等
7. 網絡服務與端口對應
/etc/services 此文件列出了每個協議服務的端口
觀察網絡服務的端口 netstat -tlunp
例如ssh的服務應該加上防火牆 有些則可以不用 有些不了解的監聽網絡服務 可以關閉
systemctl針對service類型的設定文件
1.目錄簡介
/usr/lib/systemd/system/
vsftpd.service 發行版 給出的原始默認設置文件 建議不動
/etc/systemd/system/
vsftpd.service.d
/custom.conf
在/etc/systemd/system底下建立與配置文件相同名的目錄 然后加上.d的擴展名 然后在該目錄下建立配置文件即 可,配置文件最好文件名取名為.comf 此目錄下的文件設置會追加到/usr/lib/systemd/system/vsftpd.service 里
/etc/systemd/system/
vsftpd.service.wants/
*
此目錄內的文件為鏈接文件 設置相依賴服務的鏈接,意思是啟動了 vsftpd.service之后,最好再加上這個目錄下的建議的服務
/etc/systemd/system/
vsftpd.service.requires/
* 鏈接文件,設置相依性服務的鏈接 意思是啟動vsftpd.service之前 需要先啟動哪些服務
2.systemctl配置文件的項目簡介
大約有一下幾個項目
unit unit本身的說明 以及與其他想依賴的daemon的設定
service socket timer mount path不同的unit type就得要使用相對應的設定
install 此unit安裝到哪個target里面
重復設置的項目 后面會覆蓋前面
布爾值判定 可以使用1 yes true on來代表啟動
0 no false off代表關閉
空白航 開頭為#或者;的哪一行 代表注解
execstart 實際執行此daemon的指令或腳本 也可以使用execstartpre之前以及execstartpost之后兩個設定項目來實際啟動服務前,進行額外的指令行為
實例
3.舉例兩個vsftpd服務 兩個端口一個555另一個21
先建立需要的配置文件
cd /etc/vsftpd
cp vsftpd.conf vsftpd2.conf
講第一個監聽的端口改為555
diff vsftpd.conf vsftpd2.conf 檢測不同內容
開始處理啟動腳本
cd /etc/systemd/system
cp /usr/lib/systemd/system/vsftpd.service vsftpd2.service
vim vsftpd2.service
更改描述的信息
description=.....
execstart=/usr/sbin/vsftpd
/etc/vsftpd/vsftpd2.conf
重新載入systemd的腳本配置文件
systemctl daemon-reload
systemctl list-unit-files --all | grep vsftpd
systemctl restart vsftpd.service vsftpd2.service
systemctl enable vsftpd.service vsftpd2.service
systemctl status vsftpd.service vsftpd2.service
netstat -tlnp
4.多重的重復設置方式 getty 為例
agetty 程序管控 getty
主要管理文件為getty.target 這個unit 實際產生的tty1~tty6的則是由getty@.service 所提供的
先查看/usr/lib/systemd/system/getty@.service
其中重要的信息為
execstart=-/sbin/agetty --noclear %I $TERM
其中的@原因需要看 getty@.service上面的文件 getty.target
systemctl show getty.target
文中會有顯示:
after=getty@tty1.service getty@tty2.service ......
在啟動完getty.target服務之后會要求持續啟動getty1.target getty2.target getty3.target...
所以可以判斷 systemd的運行方式
a 先看/usr/lib/systemd/system/ /etc/systemd/system/ 下面有沒有getty@tty1.service的設置 ,如有就 執行,如過沒有就執行下一步
b 找getty@.service 的設置 如過有就將@后面的資料帶入成%I的變量 進入getty@.service 執行。
原始文件:執行服務名@.service
執行文件:執行服務名@范例名稱.service
5.更改tty數量
vim /etc/systemd/logind.conf
NAutoVTs
=4
ReserveVT=0
之后重啟 systemctl stop getty@tty5.service getty@tty6.service
systemctl restart systemd-logind.service
6.重新打開一個全新的終端
systemctl start
getty@tty8.service
7.新增vsftpd到新的端口2121
cat /usr/lib/systemd/system/vsftpd@.service
其中 execstart=/usr/sbin/vsftpd /etc/vsftpd/
%i.conf %i或者%I 代表@后面接的范例文件的名稱
a 建立vsftpd3.conf文件 通過此文件來啟動新服務
cd /etc/vsftpd
cp vsftpd.conf vsftpd3.conf
vim vsftpd3.conf
listen_port=2121
b 暫時啟動這個服務 不要永久啟動
systemctl start vsftpd@
vsftpd3.service
systemctl status vsftpd@
vsftpd3.service
netstat -tlunp
所以vsftpd@vsftpd3.service 代表要使用的配置文件在/etc/vsftpd/vsftpd3.conf 的意思
*****注意在增加的端口小於1024的時候 需要root的權限 如過端口大於1024則 不需要root的權限 但是 同樣危險
8.自己的服務自己作 模擬一個可以備份自己系統的服務
a 服務文件放在/backups 文件夾下
vim /backups/backup.sh
#!/bin/bash
source="/etc /home /root /var/lib /var/spool/{cron,at,mail} "
target="/backups/backup-system-$(date +%Y-%m-%d).tar.gz"
[! -d /backups ] && mkdir /backups
tar -zcvf ${target} ${source} &> /backups/backup.log
chmod a+x /backups/backup.sh
ll /backups/backup.sh
b 接下來 需要設計一只名稱為backup.service的啟動腳本
vim /etc/systemd/system/backup.service
[unit]
description=backup my server
requires=atd.service
[service]
type=simple
execstart=/bin/bash -c "echo /backups/backup.sh | at now"
[install]
wantedby=multi-user.target 因為需要at這個命令 所以 atd.service 是必須啟動的服務
測試命令
systemctl daemon-reload
systemctl start backup.service
systemctl status backup.service
再出現的結果顯示中 出現的inactive 原因是執行完成就完畢了 不會繼續存在內存當中
systemctl針對timer的配置
原來的at和crond這個服務
systemd.timer 的優點
所有systemd服務產生的信息都會被記錄 log 所以比crond在debug上面更清楚
各個timer的工作可以跟systemd的服務相結合
各個timer的工作可以跟control group (cgroup 用來取代/etc/secure/limit.conf 結合)來限制該工作的資源利用
缺點timer沒有email的功能 但是可以自己寫腳本 時間單位可以精確到ms
任務需求
必要條件
系統的timer.target 一定要啟動
需要sname.service的服務存在 sname是自定義的名稱
需要sname.timer的時間啟動服務存在
sname.timer的設定值
你可以到/etc/systemd/system底下去建立這個*.timer文件
onactivesec timer.target啟動多久之后才執行此unit
onbootsec 開機完成多久之后才執行
onstartupsec systemd第一次啟動之后多久才執行
onunitactivesec 此timer設定文件所管理的那個unit服務在最后一次啟動后,隔多久后再執行一次的意思
onunitinactivesec 此timer設定文件所管理的那個unit服務在最后一次停止后,隔多久后再執行一次的意思
oncalendar 用實際時間啟動服務
unit 名稱
persistent 使用oncalendar設定時,指定該功能不需要持續進行
如何使用oncalendar的時間
如果想要從crontab轉成這個timer功能 需要了解timer的時間格式
語法:英文周名 YYYY-MM-DD HH:MM:SS
范例:THU 2015-08-13 13:40:00
英語口語:now today tomorrow hourly daily weekly monthly +3h10m 2015-08-16
實例:
需求:開機后2小時開始執行一次這個backup.service
自從第一次執行后,未來我每兩天要執行一次 backup.service
vim /etc/systemd/system/backup.timer
[unit]
description=backup my server timer
[timer]
onbootsec=2hrs
onunitactivesec=2days
[install]
wantedby=multi-user.target
systemctl daemon-reload
systemctl enable backup.timer
systemctl restart backup.timer
systemctl list-unit-files | grep backup
systemctl show timers.target
systemctl show backup.service
systemctl show backup.timer
一個固定日期運行的案例
需求 星期天凌晨2點運行這個備份程序一遍 名稱為backup2.timer
vim /etc/systemd/system/backup2.timer
[unit]
description=backup my server timer2
[timer]
oncalendar=sun *-*-* 02:00:00
persistent=true
unit=backup.service
[install ]
wantedby=multi-user.target
systemctl daemon-reload
systemctl enable backup2.timer
systemctl start backup2.timer
systemctl show bakcup2.timer
出現的執行時間nextelapseusecrealtime是與unix標准時間的比較值 1970-01-01 00:00:00
centos 7.x預設啟動的服務簡易說明
常見的服務 daemon
abrtd 登錄出錯時的機制 根據此服務進行錯誤克服
accounts-daemon 可關閉 使用accountsservice計划 賬號管理, 可關閉
alsa-x可關閉 音效 不開圖形界面 可關閉
atd 單一的例行性工作排程 at服務
auditd selinux相關
avahi-daemon 可關閉 用戶端服務通過zeroconf自動的分析與管理網絡 常用在筆記本電腦上
brandbot rhel-* 大多數用於開機過程中需要的各種偵測環境的腳本 同時也提供界面的啟動與關閉
chronyd
ntpd
ntpdate 網絡校正時間的服務
cpupower cpu運行情況
crond 定時服務 與at類似 周期性
cups 可關閉 打印機服務
dbus d-bus的方式在不同的應用程序之間傳送信息 應用程序之間的信息傳遞,每個使用者登錄時提供的信息 資料等
dm-event multipathd 系統監控對應表 device mapper的主要服務 不能關
dmraid-activation mdmonitor 用來啟動軟raid的重要服務 盡量不關閉
dracut-shutdown 處理initramfs的相關行為 與開機流程相關性較高
ebtables 系統或網絡服務類似iptables的防火牆規則 設定如果沒有使用虛擬化或者使用了firewalld 此服務可禁用
emergency
rescue 進入緊急模式或者是救援模式的服務
firewalld 系統或網絡 此為防火牆 替代以前的iptables等的防火牆機制 搭配firewall-cmd指令 可以快 速的建制好防火牆系統
gdm gnome的登入管理員 就是圖形界面上一個很重要的登錄管理服務
getty@ 本機系統產生文字界面 tty登入的服務
hyper*
ksm*
libvirt*
vmtoolsd 跟虛擬機相關的服務 如果不用虛擬機 可以關閉
irqbalance 如果硬件為多核心的硬件 則需要啟動 可以自動分配系統終端IRQ 之類的硬件資源
iscsi 網絡磁盤服務 如果沒有掛載 則可以關閉
kdump 可關閉 主要用在 linux核心出錯的時候 ,用來記錄內存數據的服務 可以關閉
lvm2-* 跟lvm相關性較高的許多服務 不可關閉
microcode intel的cpu指令集 如果沒有下載intel的相關指令文件 則可以不啟動
modemmanager
network
networkmanager* 數據,網絡設定等服務 建議使用networkmanager搭配nmcli指令來處理網絡設置
quotaon 啟動quota要用到的服務
rc-local /etc/rc.d/rc.local 需要具有x的執行權限
rsyslog 記錄系統產生的日志信息 包括/var/log/messages內的幾個重要的登錄文件
smartd 自動檢測硬盤狀態 報告管理員
sysstat sar的指令記錄 某時間點 系統的資源使用情況 包括cpu io輸入出等 當此服務啟動后 這些記錄的數 據會寫入log中
sysstemd-* 系統運行過程中需要的服務
plymount*
upower 與圖形界面相關的服務 可關閉
上面的服務為centos7中默認啟動的
注意管理員應該使用man systemd.unit man systemd.service man systemd.timer查詢/etc/systemd/system/目錄下設定文件的語法 然后使用systemctl daemon-reload載入后 再自行編寫服務於管理服務