roundrobin来历_Linux系统管理
本文主要介紹了系統管理相關內容,包括壓縮與歸檔、Linux軟件包管理,任務計劃、郵件功能,另外還介紹了sed命令的使用。
一、歸檔與壓縮
1. 概念
歸檔(Archive),是指文書部門將辦理完并且有保存價值的文件,經系統整理交檔案室或檔案館保存的過程。在計算機中的歸檔即“將文件打包保存”之意,即將多個文件或目錄合并稱為一個文件的操作
壓縮(Compression) 是為了減少數據大小以節省保存空間和傳輸的時間。為了數據的傳輸,壓縮能夠作用于單獨的數據內容或者所有的傳輸單元(包括數據頭),這取決于一些特定的因素
2. 相關命令
關于Linux壓縮與歸檔,有眾多命令可以實現,如
compress:經典壓縮工具,如今已不再流行,其對應的解壓命令為uncompress,默認擴展名為.Z
zip:歸檔工具,其對應的解壓命令為unzip,默認擴展名為.zip
gzip:GNU的zip實現,解壓命令為gunzip,默認擴展名為.gz
xz:用于壓縮XZ格式的工具,解壓命令為unxz,默認擴展名為.xz
lzma:LZMA格式壓縮工具,解壓命令為unlzma,默認擴展名為.lzma
bzip2:著名壓縮工具,其解壓命令為bunzip2,默認擴展名為.bz2
tar:Linux歸檔壓縮命令,較為常用
此外還有其他相關命令,如可直接查看壓縮文件內的文本文件內容,以下將做大致介紹
壓縮
gzip:使用格式為
gzip [OPTIONS] /PATH/TO/SOMEFILE
OPTIONS
-d 解壓縮
-c 不改變源文件,將壓縮或解壓縮后的內容輸出到標準輸出
可以使用重定向,創建壓縮文件,并且保存源文件,如
gzip -c FILE > /PATH/TO/SOMEFILE.gz
-# 指定壓縮比,1-9,默認是6
默認壓縮后會刪除源文件,如
[root@localhost ~]# mkdir test
[root@localhost ~]# cd test
[root@localhost test]# cp /var/log/messages ./
[root@localhost test]# ll -h
total 12K
-rw-------. 1 root root 12K Feb 25 10:55 messages
[root@localhost test]# gzip messages
[root@localhost test]# ll -h
total 4.0K
-rw-------. 1 root root 1.1K Feb 25 10:55 messages.gz
[root@localhost test]# gunzip messages.gz
[root@localhost test]# ll
total 12
-rw-------. 1 root root 11587 Feb 25 10:55 messages
gunzip命令用于解壓縮,相當于gzip -d,同樣的,會刪除原文件
此外還有zcat命令,用于在不解壓文件的前提下,查看其中的文本內容:
[root@localhost test]# zcat messages.gz
Feb 25 09:39:56 localhost dhclient[6438]: DHCPREQUEST on eno16777736 to 192.168.18.254 port 67 (xid=0x334cb01a)
Feb 25 09:39:56 localhost dhclient[6438]: DHCPACK from 192.168.18.254 (xid=0x334cb01a)
Feb 25 09:39:56 localhost NetworkManager[6155]: address 192.168.18.128
…………
bzip2:比gzip有更大壓縮比的壓縮工具,使用格式近似gzip
bzip2 [OPTIONS] /PATH/TO/SOMEFILE
OPTIONS
-d:解壓縮
-#: 指定壓縮比,1-9,默認是6
-k: 壓縮或解壓時保留原文件,默認壓縮后會刪除源文件
同樣,解壓命令bunzip2同bzip2 -d
同時也有用于直接查看文本內容的工具bzcat
xz
xz [OPTIONS] /PATH/TO/SOMEFILE
OPTIONS
-d: 解壓縮
-#: 指定壓縮比,1-9, 默認是6
-k: 壓縮時保留原文件
對應的解壓命令unxz同xz -d,查看文本文件內容工具xzcat,此外還有一個小型.xz文件解壓工具xzdec
lzma,unlzma,lzcat
可以使用xz --format=lzma、xz --format=lzma --decompress、xz --format=lzma --decompress --stdout實現
以上壓縮命令均不能壓縮目錄
歸檔
以上命令不能壓縮目錄,且若指定多個文件,則依然會壓縮為多個,若需要將文件“打包”,則需要用到歸檔(Archive)工具,歸檔本身不會壓縮,常用的有zip與tar
tar命令的用法為
tar [OPTIONS] -f FILE.tar FILE1,FILE2 ...
OPTIONS
-f FILE.tar 操作的歸檔文件
-c 創建歸檔文件
-x 展開歸檔
--xattrs 歸檔時,保留文件的擴展屬性信息(默認不會存儲)
-t 查看歸檔的文件列表
如:# tar tf /PATH/TO/SOME.tar
-C 指定目標目錄
如:# tar xf /PATH/FROM/SOMEFILE.tar -C /PATH/TO/SOMEDIR
-z:調用gzip
-zcf 歸檔并調用gzip壓縮
-zxf 調用gzip解壓縮并展開歸檔,-z選項可省略
-ztf 查看歸檔的文件列表
-j:調用bzip2
-jcf 歸檔并調用bzip2壓縮
-jxf 調用bzip2解壓縮并展開歸檔,-j選項可省略
-jtf 查看歸檔的文件列表
-J:調用xz
-Jcf 歸檔并調用xz壓縮
-Jxf 調用xz解壓縮并展開歸檔,-J選項可省略
-Jtf 查看歸檔的文件列表
Tips
: - tar命令在操作對象為壓縮文件時(如解壓),可以不指定-z、-j或-J,tar命令會自動識別文件從而調用相應工具
: - 選項組合時,f選項應放在后面,而后跟文件
: - tar命令中的-可以省略
: - tar命令默認不會刪除原文件
zip工具的使用格式為
zip FILENAME.zip FILE1 FILE2 ...
注意:壓縮目錄時,應指定為目錄下的所有文件
其他相關命令
此處對cpio命令稍作介紹,該命令常用于備份,不過一般需要通過管道或重定向配合使用,如
備份目錄
find /DIRCTORY| cpio -ocvB > /FILE.cpio
-o:工作于“copy-out”模式,即將文件復制輸出
-c:一種較新的portable format方式儲存
-v:顯示詳細信息
-B:讓預設的Blocks 可以增加至5120 bytes ,默認是512 bytes
解壓
cpio -idvc < /FILE.cpio
-i:即Copy-in模式,從壓縮文件復制出來
-d:自動建立目錄,使用cpio 所備份的資料內容不見得會在同一層目錄中,此時需要要讓cpio 在還原時可以建立新目錄
查看壓縮包內文件列表
cpio -ivct < /FILE.cpio
-t:查看壓縮包內文件列表,一般配合-i選項使用
二、Linux軟件包管理
1. 軟件包管理器概念
計算機由眾多軟件組成,他們分別完成特定工作,而我們就需要一類軟件來管理這些軟件,即軟件包管理的意義
在Windows中,傳統Win32應該程序可以通過Control Panel進行管理(一般只能進行卸載,一些大型程序可進行功能配置),而UWP(Universal Windows Platform)程序則可通過Microsoft Store進行管理(可進行安裝、卸載,升級、配置等)
而在Linux中,軟件包管理器的作為有以下
打包成一個文件:二進制程序,庫文件,配置文件,幫助文件
生成數據庫,跟蹤所安裝的每一個文件,其中有以下內容
軟件名和版本
安裝生成的各文件路徑及校驗碼
依賴關系
提供功能性說明
提供程序組成格式,如
文件清單
安裝卸載時運行的腳本
可見,Linux平臺到的軟件包管理工作較為復雜,其核心功能為
制作軟件包
graph LR
A[源代碼] -- 編譯 --> B[目標二進制格式]
B[目標二進制格式] --打包--> C[一個或有限幾個包文件]
安裝、卸載、升級、查詢、校驗
Linux有眾多發行版,各個發行版使用的軟件包管理器亦不相同,較為常用的有
dpkg
這個機制最早是由Debian Linux社群所開發出來的,通過dpkg的機制, Debian提供的軟件就能夠簡單的安裝起來,同時還能提供安裝后的軟件信息。只要是衍生于Debian的其他Linux distributions大多使用dpkg這個機制來管理軟件的,包括B2D, Ubuntu等
rpm
這個機制最早是由Red Hat這家公司開發出來的,后來實在很好用,因此很多distributions就使用這個機制來作為軟件安裝的管理方式。包括Fedora, CentOS, SuSE等
現代計算機軟件開發有一個重要思想,即代碼共用,在這里依然使用,這就會引發一些依賴性問題,如:
用戶需要安裝軟件A,而A依賴于軟件B和C中的功能,而后用戶在安裝B與C的時候,發現軟件C依賴于軟件D,而D竟然依賴軟件A!
這種循環依賴的問題就不能簡單地直接通過命令安裝,雖然可以用某些選項安裝,但是這些復雜的依賴關系依然會花費不少時間
為了解決這類問題,Linux還有更上層的工具,我們將其稱之為前端管理工具,按照此思路,以上介紹的可叫做后端工具,常見的有
yum:rpm包管理器的前端工具
apt-get:deb包管理器的前端工具
zypper:suse上的rpm前端管理工具
dnf:Fedora 22+ rpm包管理器的前端管理工具
這里將以rpm與yum介紹Linux軟件包管理相關內容
2. rpm
rpm包命名格式
我們知道軟件源代碼需要編譯為而進行才可執行,而rpm包也有源碼版本提供,我們可稱之為SRPM
rpm源碼包的一般命名格式為
NAME-VERSION.tar.COMPRESS_TYPE
NAME:包名
VERSION:版本,其一般格式為
major.minor.release
即:主版本號.次版本號.release號
COMPRESS_TYPE:壓縮方式,如gz,bz2,xz
rpm包的命名格式一般為
主包
name-VERSION-ARCH.rpm
VERSION
version-release
major.minor.release-release
第一個release是軟件的開發者提供的
第二個release是rpm包制作者提供的
ARCH
OS平臺
RedHat: el# RedHat Enterprise Linux #
CentOS: CentOS#
CentOS與RedHat兼容
CPU架構
x86_64
i386,i586,686
ppc:PowerPC平臺
noarch:與平臺無關
子包
name-FUNCTION-VERSION-release.arch.rpm
例:bind-libs-9.7.1-1.el5.i586.rpm
bind-utils-9.7.1-1.el5.i586.rpm
對于子包而言,bind-libs、bind-utils就是包名
FUNCTION:devel,utils,libs,…
rpm包的獲取路徑
可通過uname -a查看當前系統平臺信息
rpm命令
rpm(RPM is Package Manager),看到這個名字感覺開源界似乎很流行這種遞歸縮寫式的命名,因為rpm原為Radhat Package Manager,不知道是否是跟風😂
rpm可進行軟件的安裝、卸載、升級、校驗等功能,先將主要選項列出:
安裝:-i,--install
升級:-U,--update,-F,--freshen
卸載:-e,--erase
查詢:-q,--query
校驗:-V,--verify
數據庫維護:--builddb,--initdb
還有一些通用的選項,此處將其列出:
-v:顯示詳細過程
-vv:顯示更詳細過程
-vvv:顯示更更詳細過程
-h:hash marks,以#顯示程序包管理執行進度;每個#表示2%的進度
安裝
安裝使用的一般選項為
rpm -ivh [INSTALL_OPTIONS] /PATH/TO/PACKAGE_FILE …
-i, --install
INSTALL_OPTIONS
--test 測試安裝,不真正執行安裝,dry run模式
--nodeps 忽略依賴關系
--ignoreos 忽略OS平臺
--replacepkgs 重新安裝,替換原有的安裝,不能替換配置文件
--nosignature 不檢查來源合法性
--nodigest 不檢查包完整性
--replacefiles 替換文件
--oldpackage 降級安裝
--force 強行安裝,相當于--replacepkgs --replacefiles --oldpackage,可以實現重裝或降級
--noscripts 不執行程序包腳本片段
%pre:安裝前腳本 --nopre
%post:安裝后腳本 --nopost
%preun:卸載前腳本 --nopreun
%postun:卸載后腳本 --nopostun
--test 僅測試
查詢
查看使用的選項為
rpm {-q|--query} [select-options] [query-options]
select-options
-a:查詢所有已安裝的包
-f /PATH/TO/SOMEFILE:查詢指定的文件是由哪個rpm包安裝生成的
-p /PATH/TO/PACKAGE_FILE:針對尚未安裝的程序包文件做查詢操作
要跟[query-options]
--whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個包所提供
--whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴
[query-options]
--changelog:查看rpm包的changelog
-c:查詢程序包的配置文件
-d:查詢程序的文檔
-i:information
-l:查看指定 的程序包安裝后生成的所有文件列表
--scripts:程序包自帶的腳本片段
-R:查詢指定的程序包所依賴的CAPABILITY
--provides:列出指定程序包所提供的CAPABILITY
-qi PACKAGE_NAME:查詢指定包的說明信息
如果某rpm包尚未安裝,我們需查詢其說明信息、安裝以后會生成的文件
rpm -qpi /PATH/TO/PACKAGE_FILE 查詢摘要信息
rpm -qpl /PATH/TO/PACKAGE_FILE 查詢安裝后會生成的文件列表
rpm -qpc /PATH/TO/PACKAGE_FILE 查詢配置文件
rpm -qpd /PATH/TO/PACKAGE_FILE 查詢幫助文件
升級
升級操作一般使用的選項為
rpm -Uvh [INSTALL_OPTIONS] /PATH/TO/PACKAGE_FILE …
rpm -Fvh [INSTALL_OPTIONS] /PATH/TO/PACKAGE_FILE …
-U|--upgrade: 如果裝有老版本的,則升級;否則安裝
-F|--freshen: 如果裝有老版本的,則升級;否則退出
INSTALL_OPTIONS
--oldpackage 降級
--nodeps 忽略依賴關系
--force 強行安裝
Tips:
: 1. 不要對內核執行升級操作,多版本內核可以共存,因此,建議執行安裝操作
: 2. 若原程序包的配置文件安裝后曾被修改,升級時,新版本提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而是把新版本的文件重命名(FILENAME.rpmnew)后保存
卸載
卸載時一般使用的選項為
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
--nodeps 卸載前不檢查依賴關系
--allmatches 卸載所有匹配指定名稱的程序包的各版本
--test 僅測試
注意:若卸載的包被其他包所依賴,則不允許卸載
重建數據庫
rpm管理器的數據庫為:/var/lib/rpm/,查詢操作即通過此數據庫進行(使用-p選項除外),我們可以通過某些選項對其進行操作:
rpm --rebuilddb|initdb [--dbpath]
--rebuilddb 重建數據庫,一定會重新建立
--initdb 初始化數據庫,沒有才建立,有就不用建立
[--dbpath] 指定數據庫路徑,可選
校驗
校驗操作可檢查包安裝后生成的文件是否被修改過
rpm {-V|--verify} [select-options] [verify-options]
改變信息的各字段
字段
意義
S
file Size differs
M
Mode differs (includes permissions and file type)
5
digest (formerly MD5 sum) differs
D
Device major/minor number mismatch(不匹配)
L
readLink(2) path mismatch
U
User ownership differs
G
Group ownership differs
T
mTime differs
P
caPabilities differ
檢驗來源合法性,及軟件包完整性
rpm包的完整性是通過單項加密(SHA-256)保證,而來源合法性則是通過公鑰加密
關于加密的相關內容,詳見Web相關內容,此處只需要了解,單向加密可用于提取信息特征碼,理論上加密信息變化后,該特征碼一定變化(取決于密碼長度),且不可解密;而公鑰加密則有一對秘鑰,我們稱之為公鑰(Public Key)與私鑰(Private Key),顧名思義,公鑰可公開,而私鑰只有作者持有,且公鑰加密的內容只有私鑰能解密,反之亦然
包制作者提取包的指紋信息后,使用其私鑰加密該信息,使用者通過相應的公鑰解密,而后計算獲取到的包的指紋信息,二者對比即可進行完整性與來源合法性驗證
而在檢驗之前,需要導入信任的包制作者的秘鑰,對于CentOS發行版而言,可使用:
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-RELEASE_NAME-release_version
如
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
關于驗證操作,我們在安裝此組織所簽名的程序時,會自動進行,欲手動驗證,可使用
rpm -K PACKAGE_FILE
如
[root@localhost ~]# rpm -K bash-4.2.46-31.el7.x86_64.rpm
bash-4.2.46-31.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
輸出信息中
dsa, gpg: 驗正來源合法性,也即驗正簽名;可以使用--nosignature,略過此項
sha1, md5: 驗正軟件包完整性;可以使用--nodigest,略過此項
3. yum
yum(Yellowdog Update Modifier)是rpm的前端管理工具
yum的工作機制
從yum整體的工作機制來看,應該算是C/S架構(Client/Server)
yum
這里我們一般將Server端稱為Yum Repository(yum倉庫),他主要提供以下服務
提供了各rpm包
提供了依賴關系、程序包安裝后所能夠生成文件列表等元數據文件
yum客戶端工作機制:
1、配置文件:指定各可用的yum倉庫;
2、緩存元數據:yum會到各可用yum倉庫獲取元數據,并緩存至本地;
3、分析元數據:根據具體的操作請求完成元數據分析,可能包括檢查依賴關系、文件列表等信息
4、執行具體操作;
yum repository
上文已有介紹,我們在使用yum時,軟件由yum倉庫提供,其對外提供服務時可以通過以下方式
FTP
HTTP
NFS
FILE
FILE即通過文件系統提供服務,而客戶端如何訪問yum倉庫則由其配置文件定義
yum倉庫中的元數據文件
: 文件
作用
primary.xml.gz
當前倉庫中所有RPM包的列表,依賴關系,每個RPM安裝生成的文件列表
filelists.xml.gz
當前倉庫內所有rpm包的所有文件列表
other.xml.gz
額外信息,RPM包的修改日志
repomd.xml
記錄的是上面三個文件的時間戳和校驗和
comps*.xml
RPM包分組信息
yum配置文件
yum配置文件為
/etc/yum.conf:為所有倉庫提供公共配置
/etc/yum.repos.d/*.repo:為倉庫的指向提供配置
其配置文件類似于Windows中的INI文件,/etc/yum.conf主要由2段:
[main]:住配置段
[repo]:倉庫配置段
而/etc/yum.repos.d/*.repo用于配置倉庫,可有多段:
[REPO_NAME]:倉庫名稱
[REPO_NAME]:倉庫名稱
……
yum.conf文件內容:
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release
# 以下為注釋,此處省略
常用字段
字段
描述
cachedir
Directory where yum should store its cache and db files. The default is `/var/cache/yum'.
keepcache
Either '1' or '0'. Determines whether or not yum keeps the cache of headers and packages after successful installation. Default is '1' (keep files)
debuglevel
Debug message output level. Practical range is 0-10. Default is '2'.
logfile
Full directory and file name for where yum should write its log file.
tolerant
Either '1' or '0'. If enabled, yum will go slower, checking for things that shouldn't be possible making it more tolerant of external errors. Default to `0' (not tolerant).
distroverpkg
The package used by yum to determine the "version" of the distribution, this sets $releasever for use in config. files. This can be any installed package.Default is 'system-release(releasever)', 'redhat-release'. Yum will now look at the version provided by the provide, and if that is non-empty then will use the full V(-R), otherwise it uses the version of the package.
You can see what provides this manually by using: "yum whatprovides 'system-release(releasever)' redhat-release" and you can see what $releasever is most easily by using: "yum version".
exactarchlist
List of packages that should never change archs in an update. That means, if a package has a newer version available which is for a different compatible arch, yum will not consider that version an update if the package name is in this list. For example, on x86_64, foo-1.x86_64 won't be updated to foo-2.i686 if foo is in this list. Kernels in particular fall into this category. Shell globs using wildcards (eg. * and ?) are allowed. Default is an empty list.
obsolees
This option only has affect during an update. It enables yum's obsoletes processing logic. Useful when doing distribution level upgrades. See also the yum upgrade command documentation for more details (yum(8)). Default is 'true'.
gpgcheck
Either '1' or '0'. This tells yum whether or not it should perform a GPG signature check on packages. When this is set in the [main] section it sets the default for all repositories. The default is '0'.
plugins
Either '0' or '1'. Global switch to enable or disable yum plugins. Default is '0' (plugins disabled). See the PLUGINS section of the yum(8) man for more information on installing yum plugins.
為yum定義repo文件
我們一般都將倉庫定義放置于/etc/yum.repos.d/目錄下,并且以.repo為文件名結尾,其內容格式為
[Repo_ID]
name=Description
baseurl= 倉庫的訪問路徑,可以同時指定多個
ftp://
http://
nfs://
file://
enabled={1|0} 是否啟用此倉庫,默認啟用
gpgcheck={1|0} 是否檢查包來源合法性及完整性
gpgkey= 公鑰文件的URL
若gpgcheck指定為1,此項必須指定,方法同baseurl,可為ftp,htpp,nfs,file
enablegroup={1|0} 是否允許使用組進行管理
enablegroups={1|0} 是否允許在次倉庫上基于組執行倉庫管理,默認開啟
failovermethod={roundrobin|priority} 故障轉移方式
默認為:roundrobin,為隨機挑選
username=
password=
用戶名與密碼
cost= 定義此倉庫的開銷
默認為1000,開銷越小,將越被優先使用
說明
關于baseurl,指定時以協議名開頭,而指定為file://時表示通過文件系統方位(一般用于本地),此時其后根本地路徑,將展示為file:///PATH,即三個/,第三個/表示Root Directory,如下為一個本地倉庫的定義:
[base1]
name=CentOS 7 Release 7.1
baseurl=file:///media/cdrom
enabled=0
gpgcheck=1
gpgkey=file:///media/cdrom/RPM-GPG-KEY-CentOS-7
yum的repo配置文件中可用的宏
$releasever
程序的版本,對yum而言指的是redhat-release版本,只替換為主版本號
如RHEL 6.5,則替換為6
$arch: 系統架構
$basearch: 基礎系統架構
如i686, i586等的基本架構為i386
$YUM[0-9]: 在系統中定義的環境變量,可在yum中使用
我們可以通過Python的相關模塊來獲取這些宏信息:
[root@localhost ~]# python
Python 2.7.5 (default, Oct 30 2018, 23:45:53)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import yum,pprint
>>> yb=yum.yum.YumBase()
>>> pprint.pprint(yb.conf.yumvar,width=1)
Loaded plugins: fastestmirror, langpacks
{'arch': 'ia32e',
'basearch': 'x86_64',
'contentdir': 'centos',
'infra': 'stock',
'releasever': '7',
'uuid': 'b20d80a4-93ea-4c88-8d97-a4b982570a63'}
>>> exit()
[root@localhost ~]#
yum命令
yum命令的使用格式為
yum[options] [command] [package ...]
[options]
-y: 自動回答為yes
--nogpgcheck:不使用gpg check
-q:靜默模式
--disablerepo=repoidglob:臨時禁用此處指定的repo
--enablerepo=repoidglob:臨時啟用此處指定的repo
--noplugins:禁用所有插件
yum有眾多子命令,以下將做介紹
list: 列表,顯示程序包
: all:所有,默認選項
: available:可用的,即倉庫中有但尚未安裝的
: installed:已經安裝的
: updates: 可用的升級
可使用Glob過濾:yum list [all|available|installed|updates | glob_exp1] [glob_exp2] [...]
clean: 清理本地緩存
: 可選擇清理那些內容:[packages|headers|metadata|expire-cache|rpmdb|dbcache|plugins|all]
repolist: 顯示repo列表及其簡要信息
: all
: enabled: 默認
: disabled
deplist
: 查看指定包所依賴的capabilitys
install: 安裝
: 直接指定包,可以本地安裝:yum install PACKAGE_FILE
: 需要手動禁止檢查來源及完整性:--nogpgcheck
reinstall:重新安裝
: 可指定本地包:yum reinstall PACKAGE_NAME
升級
: check-update:檢查可升級的包
: update [package1 package2 …]:升級為庫中的最新版本
: update_to: 升級為指定版本
: downgrade:降級
remove|erase:卸載
: 注意:會卸載掉依賴當前軟件的包
查詢信息
: info:查詢指定包的說明信息
: provides | whatprovides:查看指定的特性(可以是某文件)是由哪個程序包所提供
makecache
: 構建緩存
search string1 [string2] [...]
: 搜索,以指定的關鍵字搜索程序包名及summary信息
包組相關
: groupinfo:顯示指定包組信息
: grouplist:顯示所有組
: groupinstall: 安裝指定的包組
- CentOS7組安裝可能要執行yum groups mark convert
: groupremove:卸載組
history:查看yum的事務歷史
: [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
創建yum倉庫:
: createrepo [options]
三、任務計劃
1. Linux任務計劃
Linux系統的任務計劃大體上分為兩種:一次性任務和周期性任務
同時,系統也預設了一些任務,如locate數據庫的建立、man手冊的建立等
2. 一次性任務
at
at需要依賴atd服務,在RHEL系列發行版上,該服務默認啟用
at為交互式命令,執行后,用戶可在at>提示符下進行任務配置,命令使用方式為
at [OPTION] TIME
OPTION
-l 查看作業列表,相當于atq命令
-f 從指定文件中讀取作業任務,而不是交互式輸入
at -f /path/to/at_job_file TIME
-d 刪除一個尚未執行的作業,相當于atrm命令
# at -d job_num
# atrm job_num
-c 查看指定作業的具體內容
可查看at執行任務時的環境配置
-q 指定隊列
at作業有隊列:使用單個字母來表示
TIME
絕對時間:HH:MM, DD.MM.YY MM/DD/YY
相對時間:now+#UNIT
UNIT:minutes,hours,days,weeks
模糊時間:noon,midnight,teatime(16:00),tomorrow
而在at>提示符中,直接輸入要執行的命令即可,使用Ctrl+D提交
任務計劃的執行結果,將以郵件的形式發送給安排任務計劃的用戶
at的執行權限
在/etc/下,可以編輯at.deny和at.allow文件,來設定誰可以使用at命令
若兩個文件都存在,只有at.allow文件生效
若兩個文件都不存在,只允許root用戶使用
batch
batch命令可讓用戶無需指定時間,自動選擇系統空閑的時間(load average<0.8)執行任務,其他格式同at
3. 周期性任務
cron
cron依賴的服務為crond,cron任務分為兩類,系統cron任務與用戶cron任務
cron任務的設定是通過定義文件來實現的,接下來將對兩種分別介紹
系統cron
系統cron定義在/etc/cron/目錄中,/etc/cron/.*/目錄下有各種周期的計劃任務,管理員可通過編輯/etc/crontab文件來定義系統cron,筆者系統該默認文件如下
[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
上面為crond在指定任務時使用的環境配置,而下方的注釋信息說明了任務的定義格式,每行定義一個任務,格式為
分鐘 小時 天 月 周 用戶 任務
cron的環境變量:
cron執行的所有命令都去PATH環境變量指定的路徑下去找,在執行任務的時候,用戶可能沒有登錄,所以沒有環境變量
cron中默認的環境變量:PATH /bin:/sbin/:usr/bin:/usr/sbin
應該使用絕對路徑,或自定義PATH環境變量
若任務計劃是腳本,可以在腳本中設定環境變量:
#!/bin/bash
export PATH=……
用戶cron
用戶cron定義在/var/spool/cron/USERNAME文件中,格式如下:
分鐘 小時 天 月 周 任務
與系統cron相比,此處無需指定用戶,其他定義方式與類似
時間的指定方式
時間的有效取值
: 分鐘:0-59
: 小時:0-23
: 天:1-31
: 月:1-12
: 周:0-7,0和7都表示周日
時間通配表示:
: *:對應的所有有效取值,如
- 3 * * * *:每小時的第3分鐘執行
- 3 * * * 7:每周日的每小時的第3分鐘執行
- 13 12 6 * 3:每月的6日,同時是周三,12:13分執行
: ,:離散時間點,如
- 10,40 * * * *:每小時的第10分和第40分執行
- 10,40 * * * 2,5:每周二和每周五的每小時第10分和第40分執行
: -:連續時間點,如
- 10 02 * * 1-5:每周一到周五的2:10執行
: /#:對應取值范圍每多久一次,如
- */3 * * * *每3分鐘執行一次
Tips
: 在使用/#方式指定時間時,若指定的時間點不能被#整除,將沒有意義
: day of week與day of month一般不同時使用
: 執行結果將以郵件的形式發送給管理員,可通過下列方式拒收郵件
- 通過輸出重定向而拒收郵件:*/3 * * * * cat /etc/fstab &> /dev/null
- 指定MAILTO為空,發送mail給空用戶:MAILTO=""
例
: (1) 3 * * * *:每小時執行一次;每小時的第3分鐘;
: (2) 3 4 * * 5:每周執行一次;每周5的4點3分;
: (3) 5 6 7 * *:每月執行一次;每月的7號的6點5分;
: (4) 7 8 9 10 *:每年執行一次;每年的10月9號8點7分;
: (5) 9 8 * * 3,7:每周三和周日的8點9分執行;
: (6) 0 8,20 * * 3,7:每周三和周日的8點和20d點執行;
: (7) 0 9-18 * * 1-5:周一至周五的9點至18點整,每小時執行;
: (8) */5 * * * *:每5分鐘執行一次某任務;
cron的使用權限
類似于at,cron也對那些用戶可以使用做了限制,定義在/etc/cron.allow與/etc/cron.deny中
同樣的,二者只有一個可以生效,/etc/cron.allow優先級較高
crontab命令
該命令用于維護cron任務,用法為
crontab
-l 列出當前用戶的所有cron任務列表
-e 通過EDITOR變量中定義的編輯器打開用戶自己的cron配置文件
編輯單獨的任務都使用-e選項,無論是刪除、修改還是新建
-r 刪除/var/spool/cron/USERNAME文件,移除所有任務
-i 在使用-r選項移除所有任務時提示用戶確認
-u USERNAME 管理其他用戶的cron任務,只有管理員可執行
如: # crontab -e -U user1
Tips
: 如果在crontab的用戶命令中使用%,需要轉義為\%,在使用單引號后,%也可以不必轉義
5 3 * * * /bin/touch ~/testfile_`date +%Y-%m-%d`.txt 應該寫為
5 3 * * * /bin/touch ~/testfile_`date +\%Y-\%m-\%d`.txt
或放置于單引號中:
5 3 * * * /bin/touch ~/testfile_`date +'%Y-%m-%d'`.txt
例
: 1、每3分鐘執行一個echo “how are you?”
b */3 * * * * /bin/echo “how are you?”
: 2、每周2、4、6備份/etc/目錄至/backup目錄中,備份的文件名以當etc_開頭并跟上當日的日期作為文件名
b 0 0 * * 2,4,6 ([ -d /backup ] || mkdir /backup )&& /bin/tar Jcf /back/etc-`date +'%F'`.tar.xz /etc/*
: 3.每天6,9,12,15,18查看一下系統當前掛載的所有文件系統,并將查看的結果追加至/tmp/mounts.txt文件中
b 0 6-18/3 * * * /bin/mount >> /tmp/mounts.txt
: 4.每天每兩小時取當前系統內存空間余量,將其保存至/stats/memory.txt文件中
b 20 */2 * * * /bin/grep "^MemFree:" /proc/meminfo >> /stats/memory.txt
anacron
anacron是crontab的補充,用于檢查crontab中某任務在過去的一個周期內是否沒有執行,如果沒有執行,則在開機以后的某時間點讓其執行一次,無論其周期是否到達
/etc/anacrontab文件如下
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
類似于/etc/crontabb,文件中有4個字段:period in days delay in minutes job-identifier command即
天數
若指定天數超過而任務沒有執行,則在開機以后的第多少分鐘執行
注釋信息
操作
四、sed
sed是Linux系統上著名的文本處理工具,sed為Stream EDitor之意,顧名思義,它是一款流編輯器,由貝爾實驗室開發,異常強大,可以說是一個腳本語言,與vim、awk并成為Linux文本處理三劍客(The Three Musketeers)
1. sed工作方式
模式空間
sed工作時從輸入流或文件中逐行讀取文本到一個稱為模式空間(Pattern Space)的內部緩沖區。每讀一行開始一個循環 。對于模式空間,sed會應用sed Script指定的一個或多個操作
另外還有另一殊緩沖區,即保持空間(Hold Space),可以由幾個sed命令使用,用于在循環之間保持和累積文本
sed_patter_space
sed工作流程
sed工作按照讀取、處理、顯示的流程執行,即
sed_workflow
讀取(Read):sed從輸入流(文件,管道或標準輸入)讀取一行,并將其存儲在名為模式緩沖區的內部緩沖區中
執行(Execute):所有Sed命令按順序應用于模式緩沖區。 默認情況下,除非指定行尋址,否則SED命令將應用于所有行(globally)
顯示(Display):將(修改的)內容發送到輸出流。 發送數據后,模式緩沖區將為空
sed對文件的每一行指定上述操作,直至輸入流為空
: - 模式空間是一塊活躍的緩沖區,在sed編輯器執行命令時它會保存待檢查的文本
: - 默認情況下,所有的sed命令都是在模式空間中執行,因此輸入文件并不會發生改變
: - 還有另外一個緩沖區叫做保持空間,在處理模式空間中的某些行時,可以用保持空間來臨時保存一些行。在每一個循環結束的時候,sed將會移除模式空間中的內容,但是該緩沖區中的內容在所有的循環過程中是持久存儲的。sed命令無法直接在該緩沖區中執行,因此sed允許數據在保持空間和模式空間之間切換
: - 初始情況下,保持空間和模式空間這兩個緩沖區都是空的
: - 如果沒有提供輸入文件的話,sed將會從標準輸入接收請求
: - 如果沒有提供地址范圍的話,默認情況下sed將會對所有的行進行操作
2. 基礎用法
sed默認不編輯原文件,僅對模式空間中的數據做處理;處理結束后,將模式空間打印至屏幕
其基本使用格式為
sed [options] SCRIPT file ...
若使用變量替換,應使用雙引號,即sed [options] "SCRIPT" file ...
options
-n 靜默模式,不再默認顯示模式空間的內容
-i 直接修改原文件
-e 指定多個編輯指令
-e SCRIPT -e SCRIPT ... 即
-e 'AddressCommand' -e 'AddressCommand' ...
-f /PATH/TO/SED_SCRIPT_FILE 讀取腳本文件來處理文本
sed -f /path/to/sed_scripts file
文件中每行一個指令
-r 使用擴展正則表達式(默認為基本正則表達式)
SCRIPT:由
組成,多個SCRIPT直接可使用分號隔開Address:地址定界
1、 StartLine,EndLine
1,100 第1行到第100行
$ 最后一行
2、 /Rpattern/ 能被pattern匹配到的所有行
/^root/ 以root開頭的行
3、/pattern1/,/pattern2/
第一次被pattern1匹配到的行開始,至第一次被pattern2匹配到的行結束,這中間的所有行
或LineNumber,/pattern/
4、 LineNumber
指定的行
$ 最后一行
5、 StartLine,+N
從StartLine開始,向后的N行(共n+1行)
6、空地址
即不給定地址定界,對全文進行處理
7、步進:~
1~2:所有奇數行
2~2:所有偶數行
Command:編輯命令
d 刪除符合條件的行
p 顯示符合條件的行
a \STRING 在指定的行后面追加新行,內容為STRING
\n 換行
i \STRING 在指定的行前面追加新行,內容為STRING
c \STRING 把匹配到的行替換為此處指定的文本STRING
r FILE 將指定的文件的內容添加至符合條件的行處
w FILE 將符合條件的行另存至指定的文件中
= 顯示符合條件的行的行號
! 條件取反
一般形式:地址定界!編輯命令
s 查找并替換,默認只替換每行中第一次被模式匹配到的字符串
地址定界s/pattern/string/修飾符
將每一行中能夠被pattern匹配到的字符串替換成string字符串
注意:string字段中不能使用正則表達式
修飾符
g 全局替換,替換所有被模式匹配到的字符串
i 忽略字符大小寫
w /PATH/TO/SOMEFILE
將替換成功的結果保存至指定文件中
p 顯示替換成功的行
sed的s命令與vim中相同
例
: ①刪除/etc/grub.conf文件中行首的空白符;
- sed -r 's@^[[:spapce:]]+@@g' /etc/grub.conf
: ②替換/etc/inittab文件中"id:3:initdefault:"一行中的數字為5;
- sed 's@\(id:\)[0-9]\(:initdefault:\)@\15\2@g' /etc/inittab
: ③刪除/etc/inittab文件中的空白行;
- sed '/^$/d' /etc/inittab
: ④刪除/etc/inittab文件中開頭的#號;
- sed 's@^#@@g' /etc/inittab
: ⑤刪除某文件中開頭的#號及后面的空白字符,但要求#號后面必須有空白字符;
- sed -r 's@^#[[:space:]]+@@g' /etc/inittab
: ⑥刪除文件中以空白字符后面跟#類的行中的開頭的空白字符及#
- sed -r 's@^[[:space:]]+#@@g' /etc/inittab
: ⑦取出一個文件路徑的目錄名稱;
- echo "/etc/rc.d/" | sed -r 's@^(/.*/)[^/]+/?@\1@g'
- echo "/var/log/messages" | sed 's@[^/]\+/\?$@@'
: ⑧刪除/etc/init.d/functions文件中的空白行
: - sed '/^$/d' /etc/init.d/functions
: ⑨刪除/etc/rc.d/rc.rc.sysinit文件中以#開頭且后面跟了至少一個空白字符的行的行首的#和空白符;
- sed 's@^#[[:space:]]\{1,\}@@' /etc/rc.d/rc.sysinit
: ⑩取出一個文件路徑的目錄名稱,如/etc/sysconfig/network,其目錄為/etc/sysconfig,功能類似dirname命令;
- echo /etc/sysconfig/network | sed 's@[^/]\{1,\}/\?$@@'
2. 高級用法
sed高級編輯命令
h:把模式空間(pattern space)中的內容覆蓋至保持空間(hold space)中
H:把模式空間中的內容追加至保持空間中
g:把保持空間中的內容覆蓋至模式空間中
G:把保持空間中的內容追加至模式空間中
x:把模式空間中的內容與保持空間中的內容互換
n:覆蓋讀取匹配到的行的下一行至模式空間中
N:追加讀取匹配到的行的下一行至模式空間中
d:刪除模式空間中的行
D:刪除多行模式空間中的所有行
如
sed-n'n;p' FILE:顯示偶數行
說明:對于N或n命令,讀取到下一行后,下次就不再讀取
sed '1!G;h;$!d' FILE:按行逆序顯示文件內容
sed '$!d' FILE:取出最后一行
sed '$!N;$!D' FILE:取出最后兩行
sed '/^$/d;G' FILE:刪除文件中的空行,而后給文件的每一行后加空行
sed 'n;d' FILE:顯示奇數行
sed 'G' FILE:在原有的每行后添加一個空行
五、例
1、每12小時備份并壓縮/etc/目錄至/backup目錄中,保存文件名稱格式為,"etc-年-月-日-時-分.tar.gz"
編輯/etc/crontab文件,定義任務計劃:
PATH=/sbin:/bin:/usr/sbin:/usr/bin
0 0,12 * * * tar zcf /backup/etc-`date +'%F-%H-%M'`.tar.gz /etc/
說明
使用到的tar與date命令均在/usr/bin/目錄下,在cron環境變量中定義之,或使用絕對路徑
命令中用到的%可使用\轉義或將其置于''中
2、寫一個腳本實現列出以下菜單給用戶:
cpu) display cpu information
mem) display memory information
disk) display disks information
quit) quit
!/bin/bash
cat << EOF
cpu) display cpu information
mem) display memory information
disk) display disks information
quit) quit
================================
EOF
read -p "Enter your option: " option
while true; do
case $option in
cpu)
lscpu
break
;;
mem)
free -m
break
;;
disk)
fdisk -l /dev/[hs]d[a-z]
break
;;
quit)
echo "quit"
exit 0
;;
*)
read -p "Enter your option: " option
;;
esac
done
3、 用bash實現統計訪問日志文件中狀態碼大于等于400的IP數量并排序
本機的訪問日志定義格式為
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog "logs/access_log" combined
統計命令為
cut -d' ' -f1,9 access.log | grep [[:space:]][45] | sort | cut -d' ' -f1 | uniq -c
4、 使用自制的yum源安裝ftp、openssh、curl、wget、tcpdump等軟件包
yum源配置:
[base1]
name=CentOS 7 Release 7.1
baseurl=file:///media/cdrom
enabled=0
gpgcheck=1
gpgkey=file:///media/cdrom/RPM-GPG-KEY-CentOS-7
軟件包安裝
[root@localhost scripts]# yum -y install ftp openssh curl wget tcpdump
總結
以上是生活随笔為你收集整理的roundrobin来历_Linux系统管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 房子降价卖是扰乱市场吗
- 下一篇: 佛山的铝合金门窗品牌,哪家比较好?