rpm簡稱包管理器,即RedHat系列發行版的程序包管理工具,因爲它遵循GPL規則且功能強大方便,故而廣受歡迎; yum是rhel系列系統上rpm包管理器的前端工具,它能夠自動執行系統更新,包括依賴性分析和基於「知識庫」元數據的過期處理,還能夠執行新的包的安裝,刪除舊的包,爲其用戶提供更方便快捷的安裝程序。前端
rpm命令:rpm [OPTIONS] [PACKAGE_FILE]
安裝:-i, --install
升級:-U, --update, -F, --freshen
卸載:-e, --erase
查詢:-q, --query
校驗:-V, --verify
數據庫維護:--builddb, --initdbjava
安裝:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
rpm -ivh PACKAGE_FILE ...
GENERAL OPTIONS:
-v:verbose,詳細信息
-vv:更詳細的輸出node
[install-options]: -h:hash marks輸出進度條;每一個#表示2%的進度; --test:測試安裝,檢查並報告依賴關係及衝突消息等; --nodeps:忽略依賴關係;不建議; --replacepkgs:從新安裝 注意:rpm能夠自帶腳本; 四類:--noscripts preinstall:安裝過程開始以前運行的腳本,%pre , --nopre postinstall:安裝過程完成以後運行的腳本,%post , --nopost preuninstall:卸載過程真正開始執行以前運行的腳本,%preun, --nopreun postuninstall:卸載過程完成以後運行的腳本,%postun , --nopostun --nosignature:不檢查包簽名信息,不檢查來源合法性; --nodigest:不檢查包完整性信息;
示例:linux
[root@node1 ~]# ls anaconda-ks.cfg functions motd CentOS7搭建網絡yum源.sh java-1.7.0-openjdk-1.7.0.191-2.6.15.4.el7_5.x86_64.rpm yum.log fstab java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.i686.rpm zsh-5.0.2-28.el7.x86_64.rpm fstab.new java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64.rpm fstab.patch ldirectord-3.9.6-0rc1.1.2.x86_64.rpm [root@node1 ~]# rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:zsh-5.0.2-28.el7 ################################# [100%] [root@node1 ~]# rpm -qa | grep zsh zsh-5.0.2-28.el7.x86_64
升級:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...正則表達式
-U:升級或安裝; -F:升級 rpm -Uvh PACKAGE_FILE ... rpm -Fvh PACKAGE_FILE ... --oldpackage:降級; --force:強制升級;
注意:(1) 不要對內核作升級操做;Linux支持多內核版本並存,所以,直接安裝新版本內核;
(2) 若是某原程序包的配置文件安裝後曾被修改過,升級時,新版本的程序提供的同一個配置文件不會覆蓋原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)後提供;sql
卸載:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...shell
--allmatches:卸載全部匹配指定名稱的程序包的各版本; --nodeps:忽略依賴關係 --test:測試卸載,dry run模式
示例:數據庫
[root@node1 ~]# rpm -qa | grep zsh zsh-5.0.2-28.el7.x86_64 [root@node1 ~]# rpm -evh zsh Preparing... ################################# [100%] Cleaning up / removing... 1:zsh-5.0.2-28.el7 ################################# [100%]
查詢:
rpm {-q|--query} [select-options] [query-options]express
[select-options] PACKAGE_NAME:查詢指定的程序包是否已經安裝,及其版本; -a, --all:查詢全部已經安裝過的包; -f FILE:查詢指定的文件由哪一個程序包安裝生成; -p, --package PACKAGE_FILE:用於實現對未安裝的程序包執行查詢操做; --whatprovides CAPABILITY:查詢指定的CAPABILITY由哪一個程序包提供; --whatrequires CAPABILITY:查詢指定的CAPABILITY被哪一個包所依賴; [query-options] --changelog:查詢rpm包的changlog; -l, --list:程序安裝生成的全部文件列表; -i, --info:程序包相關的信息,版本號、大小、所屬的包組,等; -c, --configfiles:查詢指定的程序包提供的配置文件; -d, --docfiles:查詢指定的程序包提供的文檔; --provides:列出指定的程序包提供的全部的CAPABILITY; -R, --requires:查詢指定的程序包的依賴關係; --scripts:查看程序包自帶的腳本片段; 用法: -qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE -qpi PACKAGE_FILE, -qpl PACKAGE_FILE, -qpc PACKAGE_FILE, ...
示例:vim
[root@node1 ~]# rpm -qf /bin/cd bash-4.2.46-28.el7.x86_64 [root@node1 ~]# rpm -qf /bin/pwd coreutils-8.22-18.el7.x86_64 [root@node1 ~]# rpm -ql zsh /bin/zsh /etc/skel/.zshrc /etc/zlogin /etc/zlogout /etc/zprofile /etc/zshenv /etc/zshrc [root@node1 ~]# rpm -qi zsh Name : zsh Version : 5.0.2 Release : 28.el7 Architecture: x86_64 Install Date: Sun 16 Sep 2018 12:32:31 AM EDT Group : System Environment/Shells Size : 5855982 License : MIT Signature : RSA/SHA256, Thu 10 Aug 2017 04:28:17 PM EDT, Key ID 24c6a8a7f4a80eb5 Source RPM : zsh-5.0.2-28.el7.src.rpm Build Date : Wed 02 Aug 2017 06:52:37 AM EDT Build Host : c1bm.rdu2.centos.org Relocations : (not relocatable) Packager : CentOS BuildSystem <http://bugs.centos.org> Vendor : CentOS URL : http://zsh.sourceforge.net/ Summary : Powerful interactive shell [root@node1 ~]# rpm -qc zsh /etc/skel/.zshrc /etc/zlogin /etc/zlogout /etc/zprofile /etc/zshenv /etc/zshrc [root@node1 ~]# rpm -q --scripts zsh postinstall scriptlet (using /bin/sh): if [ ! -f /etc/shells ] ; then echo "/bin/zsh" > /etc/shells else grep -q "^/bin/zsh$" /etc/shells || echo "/bin/zsh" >> /etc/shells fi if [ -f /usr/share/info/zsh.info.gz ]; then # This is needed so that --excludedocs works. /sbin/install-info /usr/share/info/zsh.info.gz /usr/share/info/dir \ --entry="* zsh: (zsh). An enhanced bourne shell." fi : preuninstall scriptlet (using /bin/sh): if [ "$1" = 0 ] ; then if [ -f /usr/share/info/zsh.info.gz ]; then # This is needed so that --excludedocs works. /sbin/install-info --delete /usr/share/info/zsh.info.gz /usr/share/info/dir \ --entry="* zsh: (zsh). An enhanced bourne shell." fi fi : postuninstall scriptlet (using /bin/sh): if [ "$1" = 0 ] ; then if [ -f /etc/shells ] ; then TmpFile=`/bin/mktemp /tmp/.zshrpmXXXXXX` grep -v '^/bin/zsh$' /etc/shells > $TmpFile cp -f $TmpFile /etc/shells rm -f $TmpFile fi fi
校驗:
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 包來源合法性驗正和完整性驗正: 來源合法性驗正: 完整性驗正: 獲取並導入信任的包製做者的密鑰: 對於CentOS發行版來講:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 驗正: (1) 安裝此組織簽名的程序時,會自動執行驗正; (2) 手動驗正:rpm -K PACKAGE_FILE
示例:
手動驗證
[root@node1 ~]# rpm -K zsh-5.0.2-28.el7.x86_64.rpm zsh-5.0.2-28.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK [root@node1 ~]# rpm -import /etc/pki/rpm-gpg/RPM-GPG-KEY- RPM-GPG-KEY-CentOS-7 RPM-GPG-KEY-CentOS-Testing-7 RPM-GPG-KEY-CentOS-Debug-7 RPM-GPG-KEY-EPEL-7 [root@node1 ~]# rpm -import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 [root@node1 ~]# rpm -K zsh-5.0.2-28.el7.x86_64.rpm zsh-5.0.2-28.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
數據庫重建:
rpm管理器數據庫路徑:/var/lib/rpm/
查詢操做:經過此處的數據庫進行;
獲取幫助: CentOS 6:man rpm CentOS 7:man rpmdb rpm {--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY] --initdb:初始化數據庫,當前無任何數據庫可實始化建立一個新的;當前有時不執行任何操做; --rebuilddb:從新構建,經過讀取當前系統上全部已經安裝過的程序包進行從新建立;
示例:
RPMDB(8) System Manager's Manual RPMDB(8) NAME rpmdb - RPM Database Tool SYNOPSIS rpm {--initdb|--rebuilddb} DESCRIPTION The general form of an rpm rebuild database command is rpm {--initdb|--rebuilddb} [-v] [--dbpath DIRECTORY] [--root DIRECTORY] Use --initdb to create a new database if one doesn't already exist (existing database is not overwrit‐ ten), use --rebuilddb to rebuild the database indices from the installed package headers. SEE ALSO popt(3), rpm(8), rpmkeys(8), rpmsign(8), rpm2cpio(8), rpmbuild(8), rpmspec(8), rpm --help - as rpm supports customizing the options via popt aliases it's impossible to guarantee that what's described in the manual matches what's available. http://www.rpm.org/ URL:http://www.rpm.org/
yum命令的用法: yum [options] [command] [package ...] command is one of: * install package1 [package2] [...] * update [package1] [package2] [...] * update-to [package1] [package2] [...] * check-update * upgrade [package1] [package2] [...] * upgrade-to [package1] [package2] [...] * distribution-synchronization [package1] [package2] [...] * remove | erase package1 [package2] [...] * list [...] * info [...] * provides | whatprovides feature1 [feature2] [...] * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ] * makecache * groupinstall group1 [group2] [...] * groupupdate group1 [group2] [...] * grouplist [hidden] [groupwildcard] [...] * groupremove group1 [group2] [...] * groupinfo group1 [...] * search string1 [string2] [...] * shell [filename] * resolvedep dep1 [dep2] [...] * localinstall rpmfile1 [rpmfile2] [...] (maintained for legacy reasons only - use install) * localupdate rpmfile1 [rpmfile2] [...] (maintained for legacy reasons only - use update) * reinstall package1 [package2] [...] * downgrade package1 [package2] [...] * deplist package1 [package2] [...] * repolist [all|enabled|disabled] * version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ] * history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats] * check * help [command] 顯示倉庫列表: repolist [all|enabled|disabled] 顯示程序包: list # yum list [all | glob_exp1] [glob_exp2] [...] # yum list {available|installed|updates} [glob_exp1] [...] 安裝程序包: install package1 [package2] [...] reinstall package1 [package2] [...] (從新安裝) 升級程序包: update [package1] [package2] [...] downgrade package1 [package2] [...] (降級) 檢查可用升級: check-update 卸載程序包: remove | erase package1 [package2] [...] 查看程序包information: info [...] 查看指定的特性(能夠是某文件)是由哪一個程序包所提供: provides | whatprovides feature1 [feature2] [...] 清理本地緩存: clean [ packages | metadata | expire-cache | rpmdb | plugins | all ] 構建緩存: makecache 搜索: search string1 [string2] [...] 以指定的關鍵字搜索程序包名及summary信息; 查看指定包所依賴的capabilities: deplist package1 [package2] [...] 查看yum事務歷史: history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats] 安裝及升級本地程序包: * localinstall rpmfile1 [rpmfile2] [...] (maintained for legacy reasons only - use install) * localupdate rpmfile1 [rpmfile2] [...] (maintained for legacy reasons only - use update) 包組管理的相關命令: * groupinstall group1 [group2] [...] * groupupdate group1 [group2] [...] * grouplist [hidden] [groupwildcard] [...] * groupremove group1 [group2] [...] * groupinfo group1 [...]
示例:
[root@node1 ~]# yum -y install java Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * epel: ftp.cuhk.edu.hk * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com Resolving Dependencies --> Running transaction check ---> Package java-1.8.0-openjdk.x86_64 1:1.8.0.181-3.b13.el7_5 will be installed --> Finished Dependency Resolution Dependencies Resolved ======================================================================================================================== Package Arch Version Repository Size ======================================================================================================================== Installing: java-1.8.0-openjdk x86_64 1:1.8.0.181-3.b13.el7_5 updates 250 k Transaction Summary ======================================================================================================================== Install 1 Package Total download size: 250 k Installed size: 501 k Downloading packages: java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64.rpm | 250 kB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : 1:java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64 1/1 Verifying : 1:java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64 1/1 Installed: java-1.8.0-openjdk.x86_64 1:1.8.0.181-3.b13.el7_5 Complete! [root@node1 ~]# yum repolist Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * epel: ftp.cuhk.edu.hk * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com repo id repo name status base/7/x86_64 CentOS-7 - Base - mirrors.aliyun.com 9,911 epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 12,685 extras/7/x86_64 CentOS-7 - Extras - mirrors.aliyun.com 402 updates/7/x86_64 CentOS-7 - Updates - mirrors.aliyun.com 1,336 repolist: 24,334 root@node1 ~]# yum clean all Loaded plugins: fastestmirror Cleaning repos: base epel extras updates Cleaning up everything Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or removed repos Cleaning up list of fastest mirrors
本地yum源
[root@node1 ~]# mount -r -t iso9660 /dev/cdrom /media/cdrom [root@node1 ~]# ls -l /media/cdrom/ total 1586 -rw-rw-r--. 3 root root 14 Sep 5 2017 CentOS_BuildTag drwxr-xr-x. 3 root root 2048 Sep 5 2017 EFI -rw-rw-r--. 3 root root 227 Aug 30 2017 EULA -rw-rw-r--. 3 root root 18009 Dec 9 2015 GPL drwxr-xr-x. 3 root root 2048 Sep 6 2017 images drwxr-xr-x. 2 root root 2048 Sep 5 2017 isolinux drwxr-xr-x. 2 root root 2048 Sep 5 2017 LiveOS drwxrwxr-x. 2 root root 1585152 Sep 5 2017 Packages drwxrwxr-x. 2 root root 4096 Sep 5 2017 repodata -rw-rw-r--. 3 root root 1690 Dec 9 2015 RPM-GPG-KEY-CentOS-7 -rw-rw-r--. 3 root root 1690 Dec 9 2015 RPM-GPG-KEY-CentOS-Testing-7 -r--r--r--. 1 root root 2883 Sep 6 2017 TRANS.TBL [root@node1 ~]# cd /media/cdrom/repodata/ [root@node1 repodata]# ls 0c34273ad0292747ee5e15c047d3e51c67ca59861a446972db45d71abacc7ad7-primary.sqlite.bz2 38b60f66d52704cffb8696750b2b6552438c1ace283bc2cf22408b0ba0e4cbfa-c7-x86_64-comps.xml 6cd606547d4f569538d4090e9accdc3c69964de1116b9ab1e0a7864bb1f3ec98-filelists.sqlite.bz2 9346184be1deb727caf4b1ecf4a7949155da5da74af9b92c172687b290a773df-c7-x86_64-comps.xml.gz a0af68e1057f6b03a36894d3a4f267bbe0590327423d0005d95566fb58cd7a29-other.xml.gz b686d3a0f337323e656d9387b9a76ce6808b26255fc3a138b1a87d3b1cb95ed5-primary.xml.gz c1561546c684bd06b3a499c2babc35c761b37b2fc331677eca12f0c769b1bb37-filelists.xml.gz cf0cc856d46b3095106da78256fb28f9d8defea4118d0e75eab07dc53b7d3f0d-other.sqlite.bz2 repomd.xml repomd.xml.asc TRANS.TBL [root@node1 repodata]# cat /etc/yum.repos.d/ CentOS-Base.repo CentOS-Debuginfo.repo.bak CentOS-Sources.repo.bak epel-testing.repo CentOS-Base.repo.bak CentOS-fasttrack.repo.bak CentOS-Vault.repo.bak CentOS-CR.repo.bak CentOS-Media.repo.bak epel.repo [root@node1 ~]# cd /etc/yum.repos.d/ [root@node1 yum.repos.d]# mkdir back [root@node1 yum.repos.d]# mv *.repo ./back [root@node1 yum.repos.d]# cd back/ [root@node1 back]# ls CentOS-Base.repo epel.repo epel-testing.repo [root@node1 back]# vim mybase.repo [root@node1 back]# cat /etc/yum.repos.d/back/mybase.repo [mybase] name=my base repo baseurl=file:///media/cdrom/repodata gpgcheck=0 enable=1
網絡yum 源腳本
#!/bin/bash #CentOS 7 configures the network yum source #System environment:CentOS Linux release 7.5.1804 (Core) #Exit values:0 is normal,13 has no network or network exception, 222 yum source failed to build #Date:2018-8-25 #Modify time:2018-9-13 #v1.0 #by:ZDF set -v Yum() { find '/etc/yum.repos.d/' -name *.repo -exec mv {} {}'.bak' \; $(which wget &> /dev/null) if [ $? -eq 0 ];then wget -q -t 5 -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo else curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo fi if [ $? -eq 0 ];then yum clean all && yum list all && yum repolist fi if [ $? -eq 0 ];then echo -e '\033[32mCentOS network yum source has been configured successfully and you can now use yum to install or uninsta programs.\033[0m' echo -e '\033[1;34mWhether to install EPEL source?\t(Y|N)\033[m' ; read Epel if [[ "$Epel" == Y || "$Epel" == y ]];then yum -y install epel-release [ "$?" -eq 0 ] && echo -e '\033[32mCentOS EPEL source construction is completed \033[0m' fi else echo -e '\033[47;31;1mCentOS network yum source configuration failed, please confirm!\033[0m' && exit 222 fi exit "$?" } ping -c4 www.baidu.com if [ $? -ne 0 ];then echo -e '\033[31;1mError, please check the network.\033[0m' ; exit 13 else if [ -f ./yum.log ];then echo >> ./yum.log echo -e '\033[1;31m===== Network YUM source installation log information =====\033[m' | tee -a yum.log Yum | tee -a yum.log else echo -e '\033[1;31m===== New network yum source =====\033[m' | tee yum.log Yum | tee -a yum.log fi fi #-_-#**END**-_-~
at和crontab都是計劃任務執行命令,將來的某個時間點執行一次某任務用at,而週期性在某個時間點執行任務用crontab
at命令:
at [OPTION]... TIME
TIME: HH:MM [YYYY-mm-dd] noon,midnight, teatime tomorrow now+# UNIT:minutes, hours, days, OR weeks at的做業有隊列,用單個字母表示,默認都使用a隊列; 經常使用選項: -l:查看做業隊列,至關於atq -f /PATH/FROM/SOMEFILE:從指定文件中讀取做業任務,而不用再交互式輸入; -d:刪除指定的做業,至關於atrm; -c:查看指定做業的具體內容; -q QUEUE:指明隊列; 注意:做業執行結果是以郵件發送給提交做業的用戶;
示例:
[root@node1 ~]# at now+2min at> cat /etc/fstab at> cat /etc/issue at> <EOT> job 3 at Sun Sep 16 01:46:00 2018 Can't open /var/run/atd.pid to signal atd. No atd running? [root@node1 ~]# at -l 1 Sun Sep 16 01:45:00 2018 a root 3 Sun Sep 16 01:46:00 2018 a root
crontab命令:
crontab [-u user] [-l | -r | -e] [-i]
-e:編輯任務;
-l:列出全部任務;
-r:移除全部任務;即刪除/var/spool/cron/USERNAME文件;
-i:在使用-r選項移除全部任務時提示用戶確認;
-u user:root用戶可爲指定用戶管理cron任務;
用戶cron的配置格式:/var/spool/cron/USERNAME
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 # | | | | | # * * * * * command to be executed
注意:
(1) 每行定義一個cron任務,共6個字段;
(2) 此處的環境變量不一樣於用戶登陸後得到的環境,所以,建議命令使用絕對路徑,或者自定義PATH環境變量;
(3) 郵件發送給當前用戶;
注意:運行結果以郵件通知給當前用戶;若是拒絕接收郵件:
(1) COMMAND > /dev/null
(2) COMMAND &> /dev/null
注意:定義COMMAND時,若是命令須要用到%,須要對其轉義;但放置於單引號中的%不用轉義亦可;
示例:每週三凌晨3、五點10分執行某個腳本,輸出當前時間,時間格式爲 2017-12-28 10:00:00
[root@node1 ~]# date +%F-%T 2018-09-16-03:50:36 [root@node1 ~]# crontab -e no crontab for root - using an empty one crontab: installing new crontab [root@node1 ~]# vim date.sh [root@node1 ~]# cat date.sh #!/bin/bash # date +%F-%T [root@node1 ~]# bash -x date.sh + date +%F-%T 2018-09-16-03:56:41 [root@node1 ~]# chmod +x date.sh [root@node1 ~]# ls -l date.sh -rwxr-xr-x. 1 root root 26 Sep 16 03:54 date.sh [root@node1 ~]# crontab -l 10 3,5 * * 3 ./date.sh
sed命令:
文本處理三劍客:
grep, egrep, fgrep:文本過濾器
sed:Stream EDitor,流編輯器,行
awk:文本格式化工具,報告生成器
sed [OPTION]... 'script' [input-file] ...
script:
地址定界編輯命令
經常使用選項: -n:不輸出模式空間中的內容至屏幕; -e script, --expression=script:多點編輯; -f /PATH/TO/SED_SCRIPT_FILE 每行一個編輯命令; -r, --regexp-extended:支持使用擴展正則表達式; -i[SUFFIX], --in-place[=SUFFIX]:直接編輯原文件 ; ~]# sed -e 's@^#[[:space:]]*@@' -e '/^UUID/d' /etc/fstab 地址定界: (1) 空地址:對全文進行處理; (2) 單地址: #:指定行; /pattern/:被此模式所匹配到的每一行; (3) 地址範圍 #,#: #,+#: #,/pat1/ /pat1/,/pat2/ $:最後一行; (4) 步進:~ 1~2:全部奇數行 2~2:全部偶數行 編輯命令: d:刪除; p:顯示模式空間中的內容; a \text:在行後面追加文本「text」,支持使用\n實現多行追加; i \text:在行前面插入文本「text」,支持使用\n實現多行插入; c \text:把匹配到的行替換爲此處指定的文本「text」; w /PATH/TO/SOMEFILE:保存模式空間匹配到的行至指定的文件中; r /PATH/FROM/SOMEFILE:讀取指定文件的內容至當前文件被模式匹配到的行後面;文件合併; =:爲模式匹配到的行打印行號; !:條件取反; 地址定界!編輯命令; s///:查找替換,其分隔符可自行指定,經常使用的有s@@@, s###等; 替換標記: g:全局替換; w /PATH/TO/SOMEFILE:將替換成功的結果保存至指定文件中; p:顯示替換成功的行;
示例:
顯示偶數行;
[root@node1 ~]# sed -n 'n;p' /etc/fstab # # Created by anaconda on Wed Sep 5 21:24:35 2018 # Accessible filesystems, by reference, are maintained under '/dev/disk' # UUID=38a2a3be-952e-4541-814b-77553d4e9204 /boot xfs defaults 0 0
逆序顯示文件的內容;
[root@node1 ~]# sed -n 'n;p' /etc/fstab # # Created by anaconda on Wed Sep 5 21:24:35 2018 # Accessible filesystems, by reference, are maintained under '/dev/disk' # UUID=38a2a3be-952e-4541-814b-77553d4e9204 /boot xfs defaults 0 0 [root@node1 ~]# sed '1!G;h;$!d' /etc/fstab /dev/mapper/centos-swap swap swap defaults 0 0 UUID=38a2a3be-952e-4541-814b-77553d4e9204 /boot xfs defaults 0 0 /dev/mapper/centos-root / xfs defaults 0 0 # # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # Accessible filesystems, by reference, are maintained under '/dev/disk' # # Created by anaconda on Wed Sep 5 21:24:35 2018 # /etc/fstab #
取出文件後兩行;
[root@node1 ~]# sed '$!N;$!D' /etc/fstab UUID=38a2a3be-952e-4541-814b-77553d4e9204 /boot xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0
刪除原有的全部空白行,然後爲全部的非空白行後添加一個空白行;
[root@node1 ~]# sed '/^$/d;G' /etc/fstab # # /etc/fstab # Created by anaconda on Wed Sep 5 21:24:35 2018 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/centos-root / xfs defaults 0 0 UUID=38a2a3be-952e-4541-814b-77553d4e9204 /boot xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0
顯示奇數行;
[root@node1 ~]# sed 'n;d' /etc/fstab # /etc/fstab # # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info /dev/mapper/centos-root / xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0