第五周 程序包管理

1、簡述tar命令的常見選項,并舉例

tar——? 文件壓縮與解壓? ??

★命令格式

tar [OPTION…] [FILE]…

 創建歸檔(-c,-f 指定文件):

tar -c -f?/PATH/TO/SOMEFILE.tar ?FILE…?(后綴名固定以 .tar 結尾;)

tar -cf /PATH/TO/SOMEFILE.tar ?FILE…?(可以合并寫為-cf ,但不能寫為 -fc ,因為-f 選項后帶參數)

展開歸檔(-x,-f 指定文件):

tar -x -f?/PATH/TO/SOMEFILE.tar?(展開至歸檔所在的文件中)

tar xf /PATH/TO/SOMEFILE.tar?-C?/PATH/TO/SOMEFILE?(-C :展開歸檔至指定文件中)

查看歸檔文件中的列表(-t,-f 指定文件):

tar -tf?/PATH/TO/SOMEFILE.tar

注意:

多個選項可以合并,但-f由于要帶參數,因此要放到最右側 如:-cf,-xf,-cf;

選項的引導符 “-” 可省略。如:tar xf,tar zf

★常見選項

-c:創建壓縮文件

-x:解壓文件

-z:指定使用Gzip格式來壓縮解壓文件

-j:指定使用bzip2參數來壓縮解壓文件

-J:指定使用xz參數來壓縮解壓文件

-v:不斷顯示壓縮或解壓的過程給用戶

-C:用于指定要解壓到的那個指定的目錄

-f:壓縮或解壓的軟件包名稱

-t:快速列出文件中包含的內容

★示例

1.創建一個 tar 文件,將 /etc/ 目錄和 /root/anaconda-ks.cfg 文件打包進去

[root@localhost ~]# tar -cvf myarchive.tar /etc/ /root/anaconda-ks.cfg

 

以上命令會在當前目錄創建一個名為 “myarchive” 的 tar 文件,內含 /etc/ 目錄和 /root/anaconda-ks.cfg 文件。

其中,-c 選項表示要創建 tar 文件,-v 選項用于輸出 tar 的詳細過程到屏幕上,-f 選項則是指定歸檔文件名稱。

[root@localhost ~]# ls -l myarchive.tar

-rw-r–r– 1 root root 28180480 Dec 31 17:17 myarchive.tar

[root@localhost ~]#

 

2.列出歸檔文件中的內容

在 tar 命令中使用 –t 選項可以不用釋放其中的文件就可以快速列出文件中包含的內容。

[root@linuxtechi ~]# tar -tvf myarchive.tar

 

列出 tar 文件中的指定的文件和目錄。下列命令嘗試查看 anaconda-ks.cfg 文件是否存在于 tar 文件中

[root@localhost ~]# tar -tvf myarchive.tar root/anaconda-ks.cfg

-rw——- root/root????? 1423 2017-11-30 17:59 root/anaconda-ks.cfg

 

3.從 tar 文件中釋放文件以及目錄

-x 選項用于釋放出 tar 文件中的文件和目錄。下面來釋放上邊創建的 tar 文件中的內容。

[root@localhost ~]# tar -xvf myarchive.tar

 

這個命令會在當前目錄中釋放出 myarchive.tar 文件中的內容

 

4.釋放 tar 文件到指定目錄

假如你想要釋放 tar 文件中的內容到指定的文件夾或者目錄,使用 -C 選項后邊加上指定的文件的路徑。

[root@localhost ~]# tar -xvf myarchive.tar -C /tmp/

 

其實最簡單的使用 tar 就只要記憶底下的方式即可:

壓 縮:tar -jcv -f filename.tar.bz2 要被壓縮的文件或目錄名稱

查 詢:tar -jtv -f filename.tar.bz2

解壓縮:tar -jxv -f filename.tar.bz2 -C 欲解壓縮的目錄

2、簡述rpm與yum命令的常見選項,并舉例

rpm——? 包管理器? ??安裝、升級、卸載、查詢和校驗、數據庫維護

★命令格式——rpm [OPTIONS] [PACKAGE_FILE]

★常見選項

-i,–install:安裝

-U,–update,-F,–freshen:升級

-e,–erase:卸載

-q,–query:查詢

-V,–verify:校驗

–builddb,–initdb:數據庫維護

★安裝及子選項

rpm {-i|–install} [install-options] PACKAGE_FILE…

選項:

-v:verbose 顯示詳細信息;

-vv:更詳細的輸出;

-h: hash marks 輸出進度條;每個#號表示2%的進度

–test:測試安裝,檢查并報告依賴關系及沖突關系,但不真正執行安裝;稱為dry run(干跑)模式

–nodeps:忽略依賴關系,不建議;

–replacepkgs:替代原來的包,重新安裝(先把由原來的配置文件刪除再重裝)

–nosignature:不檢查包簽名信息,不檢查來源合法性

–nodigest:不檢查包完整性

注意:rpm自帶四類腳本(–noscripts)

%pre:安裝前腳本; ? –nopre

%post:安裝后腳本; ?–nopost

%preun:卸載前腳本; –nopreun

%postun:卸載后腳本;–nopostun

真正安裝執行操作使用的命令

rpm -ivh PACKAGE_FILE

★升級及子選項

rpm {-U|–upgrade} [install-options] PACKAGE_FILE…

rpm {-F|–freshen} [install-options] PACKAGE_FILE…

注意:

-U(upgrade):安裝有舊版程序包,則“升級”如果不存在舊版程序包,則“安裝”

-F(freshen):安裝有舊版程序包,則“升級”如果不存在舊版程序包,則“不安裝”

舊版程序包,則“升級”如果不存在舊版程序包,則不執行升級操作

升級命令:

rpm -Uvh PACKAGE_FILE …

rpm -Fvh PACKAGE_FILE …

–oldpackage:降級(回滾操作)

–force: 強行升級

注意:

不要對內核做升級操作;Linux支持多內核版本并存,因此,可以直接安裝新版本內核

如果源程序包的配置文件安裝后曾被修改過,升級時,新版本的提供的同一個配置文件不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留

安裝并升級 zsh 軟件包

[root@localhost rpm]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm

Preparing…??????????????? ########################################### [100%]

1:zsh??????????????????? ########################################### [100%]

[root@localhost rpm]# rpm -Uvh zsh-4.3.10-9.el6.x86_64.rpm

Preparing…??????????????? ########################################### [100%]

1:zsh??????????????????? ########################################### [100%]

如果想要將軟件包降級到舊版本,使用?–oldpackage?選項

[root@localhost rpm]# rpm -Uvh –oldpackage zsh-4.3.10-7.el6.x86_64.rpm

Preparing…??????????????? ########################################### [100%]

1:zsh??????????????????? ########################################### [100%]

★卸載及子選項

移除已安裝的程序包

rpm {-e|–erase}[–allmatches][–nodeps][–test]?PACKAGE_NAME

注意:

卸載和查詢是包的名,因為包已經存在了;而安裝和升級,包是不存在的,所以是包的文件路徑

簡單用法

rpm -e PACKAGE_NAME…

選項:

–allmatches:卸載所有匹配名稱的程序包各版本

–nodeps:忽略依賴關系

–test:測試卸載,dry run 模式

★查詢

rpm {-q|–query} [select-options] [query-options]

[select-options] 挑選選項

-q PACKAGE_NAME:查詢指定的程序包是否安裝,及其版本

-qa:查詢已安裝的所有包

-qf FILE:查看指定的文件由哪個程序包安裝生成

-p PACKAGE_FILE:針對尚未安裝的程序包文件做查詢操作;

–whatprovides CAPABILITY(能力):查詢指定的CAPABILITY由哪個包所提供

–whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴

rpm2cpio 包文件|cpio–itv預覽包內文件

rpm2cpio 包文件|cpio–id “*.conf”釋放包內文件

 [query-options] 查詢選項

–changelog:查詢rpm包的changelog(變更記錄)

-c:查詢指定的程序包的配置文件

-d:查詢程序包安裝完成后所生成的幫助文檔

-qi,-info:程序包相關的信息,版本號,大小,所屬的包組等

-l,–list:查看指定的程序包安裝后生成的所有文件列表;

–scripts:查看程序包自帶的腳本片斷

-R,–requires:查詢指定的程序包所依賴的CAPABILITY;

–provides:列出指定程序包所提供的CAPABILITY

常用組合用法:

-qi PACKAGE????? 程序包相關信息

-qf FILE????????????????? 指定文件由那包安裝生成

-qc PACJAGE ? 配置文件

-ql PACKAGE ? 程序包安裝生成的文件列表

-qd PACKAGE 程序包安裝生成的文檔

-qpi PACKAGE_FILE

-qpl PACKAGE_FILE

-qpc PACKAGE_FILE,..

 

rpm -q查詢某包是否已經安裝

rpm -qa查詢所有已安裝的包

rpm -qa tree查詢已安裝的tree包名稱

rpm -qi tree查詢tree包的信息

rpm -ql tree查詢tree包的所有文件

rpm -qf /usr/bin/ls查看/usr/bin/ls由哪個包生成

rpm -q –whatprovides tree查看tree命令來自于哪個包

rpm -q –whatrequires bash查看哪些包依賴于bash

rpm -qpi /misc/cd/Packages/zip-3.0-11.el7.x86_64.rpm查看未安裝的包的信息

rpm -qpl /misc/cd/Packages/zip-3.0-11.el7.x86_64.rpm查看未安裝包的會生成的所有文件

rpm -qpR /misc/cd/Packages/autofs-5.0.7-56.el7.x86_64.rpm查看未安裝包所依賴的

★校驗

rpm {-V|–verify} [select-options] [verify-options]

常見用法:

rpm -V PACHAGE_NAME

當沒有輸出結果時表示軟件包完整ok,當有相應的結果輸出表明對應的內容有修改,及具體如下:

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:mTimediffers 文件的創建時間已被改變;

P:capabilities differ

包來源合法性驗證及完整性驗證:

完整性驗證:SHA256

來源合法性驗證:RSA

數字簽名:用自己私鑰去加密對應數據的特征碼

制包者利用單項加密算法去提取包的特征碼(定長),用自己的私鑰加密特征碼,把特征碼加密后附加到文件

后面生成包成就數字簽名使包者拿到包以后,驗證來源的合法性,拿到制包者的公鑰去解密特征碼,如果能解

密就認為的確是制包者加密的(因為私鑰只有制包者有,就是說加密要制包者一個人做);使包者同樣利用單

項加密算法去提取包的特征碼,并比較特征碼,如果兩者一樣就說明包的完整性得到驗證

獲取并導入信任的包制作者的秘鑰

對于CentOS發行版來說:rpm –import?/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

驗證:

安裝此組織簽名的程序包時,會自動執行驗證;

手動驗證:rpm -K PACKAGE_FILE

加密方法:

公鑰加密:

對稱加密:加密、解密使用同一密鑰;

非對稱加密:密鑰是成對兒的

public key:公鑰,公開所有人

secret key:私鑰, 不能公開

導入所需要的公鑰:

rpm -K |checksigrpmfile:檢查包的完整性和簽名

rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

CentOS 7發行版光盤提供:RPM-GPG-KEY-CentOS-7

rpm -qagpg-pubkey*

★數據庫重建

rpm數據庫路經:

/var/lib/rpm

查詢操作:通過此處得到數據庫進行

用法:

rpm {–initdb|–rebuilddb}

選項:

–initdb: 初始化數據庫。當前無任何數據庫,則新建之;當前有時不執行任何操作。

rpm –initdb 創建一個新的 RPM 數據

如果已經沒有其他別的辦法了,–initdb 會創建一個新的空的 RPM 數據庫。由于新建的數據庫是空的,不要萬不得已不要使用這個命令

–rebuilddb:重新構建。無論當前存在與否,都會直接重新創建數據庫。

rpm –rebuilddb 表示重建數據庫

這個命令會從已安裝的軟件包提取信息重建數據庫,它從 /var/lib/rpm/Packages 這個文件中提取信息,其他所有的數據庫文件都可以由這個文件重建。如果 RPM 的數據庫是完好的,這個命令不會重建,而是對數據庫中未使用的條目進行空間回收

 

獲取幫助

CentOS6 man rpm

CentOS7 man rpmdb

 

[root@centos7?~]#?mkdir /tmp/rpm

[root@centos7?~]#?rpm –initdb –dbpath=/tmp/rpm

[root@centos7?~]#?ls /tmp/rpm

[root@centos7?~]#?rpm –rebuilddb –dbpath=/tmp/rpm

[root@centos7?~]#?ls /tmp/rpm

 

yum——? 包管理器? ??

★命令格式——yum [options] [command] [package …]

★常見參數

顯示倉庫列表

yum repolist?[all|enabled|disabled]:顯示所有,啟用和禁用的;

顯示程序包:

yum list [all?| glob_exp1] [glob_exp2] […] :支持使用glob風格的通配

yum list?{available|installed|updates}?[glob_exp1] 通配符

安裝程序包

yum?install?package1 [package2] […];

yum?reinstall?package1 [package2] […] ?(重新安裝)

升級程序包

yum?update?[package1] [package2] […]

yum downgrade package1 [package2] […] (降級)

檢查可用升級:

yum check-update

卸載程序包

yum?remove?| erase package1 [package2] […]

查看程序包簡要信息information:

yum?info?[…]

查看指定的特性(可以是某文件)是由哪個程序包所提供:

yum ?provides?| whatprovides feature1 [feature2] […]

清理本地緩存

yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

構建緩存:

yum makecache

搜索:

yum search?string1 [string2] […]

以指定的關鍵字搜索程序包名及summary(總結,概括)信息

查看指定包所依賴的capabilities(依賴關系分析):

yum?deplist?package1 [package2] […]

查看yum事務歷史:

yum history [info|list|packages-list|packages-info||redo|undo|rollback|new|sync|summary|stats]

安裝及升級本地程序包

* localinstall rpmfile1 [rpmfile2] […] ??(用install替代)

* localupdate rpmfile1 [rpmfile2] […]??(用update替代)

日志位置:

/var/log/yum.log

包組管理的相關命令:

yum groupinstall group1 [group2] […]

yum?groupupdate group1 [group2] […]

yum?grouplist [hidden] [groupwildcard] […]:列出所有包組

yum?groupremove group1 [group2] […]:卸載

yum?groupinfo group1 […]:顯示指定包組詳情

★常見選項

–nogpgcheck:禁止進行gpgcheck

-y:自動回答為“yes”

-q:靜默模式

–disablerepo=repoidglob:臨時禁用此處指定的repo

–enablerepo=repoidglob:臨時啟用此處指定的repo

–noplugins:禁用所有插件

★常用的命令

自動搜索最快鏡像插件:yum install yum-fastestmirror

安裝yum圖形窗口插件:yum install yumex

查看可能批量安裝的列表:yum grouplist

★示例

1.安裝 httpd

[root@localhost ~]# yum -y install httpd

2.查看程序包簡要信息

[root@localhost ~]# yum info httpd

Loaded plugins: fastestmirror

Loading mirror speeds from cached hostfile

* base: mirror.bit.edu.cn

* extras: mirrors.163.com

* updates: mirror.bit.edu.cn

Installed Packages

Name??????? : httpd

Arch??????? : x86_64

Version???? : 2.4.6

Release???? : 67.el7.centos.6

Size??????? : 9.4 M

Repo??????? : installed

From repo?? : updates

Summary???? : Apache HTTP Server

URL???????? : http://httpd.apache.org/

License???? : ASL 2.0

Description : The Apache HTTP Server is a powerful, efficient, and extensible

: web server.

3.查看指定的特性(可以是某文件)是由哪個程序包所提供

[root@localhost ~]# yum provides httpd

Loaded plugins: fastestmirror

Loading mirror speeds from cached hostfile

* base: mirror.bit.edu.cn

* extras: mirrors.163.com

* updates: mirror.bit.edu.cn

httpd-2.4.6-67.el7.centos.x86_64 : Apache HTTP Server

Repo??????? : CentOS7

 

httpd-2.4.6-67.el7.centos.x86_64 : Apache HTTP Server

Repo??????? : base

 

httpd-2.4.6-67.el7.centos.2.x86_64 : Apache HTTP Server

Repo??????? : updates

 

httpd-2.4.6-67.el7.centos.5.x86_64 : Apache HTTP Server

Repo??????? : updates

 

httpd-2.4.6-67.el7.centos.6.x86_64 : Apache HTTP Server

Repo??????? : updates

 

httpd-2.4.6-67.el7.centos.6.x86_64 : Apache HTTP Server

Repo??????? : @updates

4.查看指定包所依賴的capabilities(依賴關系分析)

[root@localhost ~]# yum deplist httpd

Loaded plugins: fastestmirror

Loading mirror speeds from cached hostfile

* base: mirror.bit.edu.cn

* extras: mirrors.163.com

* updates: mirror.bit.edu.cn

package: httpd.x86_64 2.4.6-67.el7.centos.6

dependency: /bin/sh

provider: bash.x86_64 4.2.46-29.el7_4

dependency: /etc/mime.types

provider: mailcap.noarch 2.1.41-2.el7

dependency: /usr/sbin/groupadd

provider: shadow-utils.x86_64 2:4.1.5.1-24.el7

dependency: /usr/sbin/useradd

provider: shadow-utils.x86_64 2:4.1.5.1-24.el7

dependency: httpd-tools = 2.4.6-67.el7.centos.6

provider: httpd-tools.x86_64 2.4.6-67.el7.centos.6

dependency: libapr-1.so.0()(64bit)

provider: apr.x86_64 1.4.8-3.el7_4.1

dependency: libaprutil-1.so.0()(64bit)

provider: apr-util.x86_64 1.5.2-6.el7

dependency: libc.so.6(GLIBC_2.14)(64bit)

provider: glibc.x86_64 2.17-196.el7_4.2

dependency: libcrypt.so.1()(64bit)

provider: glibc.x86_64 2.17-196.el7_4.2

dependency: libdb-5.3.so()(64bit)

provider: libdb.x86_64 5.3.21-20.el7

dependency: libdl.so.2()(64bit)

provider: glibc.x86_64 2.17-196.el7_4.2

dependency: libexpat.so.1()(64bit)

provider: expat.x86_64 2.1.0-10.el7_3

dependency: liblua-5.1.so()(64bit)

provider: lua.x86_64 5.1.4-15.el7

dependency: libm.so.6()(64bit)

provider: glibc.x86_64 2.17-196.el7_4.2

dependency: libpcre.so.1()(64bit)

provider: pcre.x86_64 8.32-17.el7

dependency: libpthread.so.0()(64bit)

provider: glibc.x86_64 2.17-196.el7_4.2

dependency: libpthread.so.0(GLIBC_2.2.5)(64bit)

provider: glibc.x86_64 2.17-196.el7_4.2

dependency: libselinux.so.1()(64bit)

provider: libselinux.x86_64 2.5-11.el7

dependency: libsystemd-daemon.so.0()(64bit)

provider: systemd-libs.x86_64 219-42.el7_4.4

dependency: libsystemd-daemon.so.0(LIBSYSTEMD_DAEMON_31)(64bit)

provider: systemd-libs.x86_64 219-42.el7_4.4

dependency: libz.so.1()(64bit)

provider: zlib.x86_64 1.2.7-17.el7

dependency: rtld(GNU_HASH)

provider: glibc.x86_64 2.17-196.el7_4.2

provider: glibc.i686 2.17-196.el7_4.2

dependency: system-logos >= 7.92.1-1

provider: centos-logos.noarch 70.0.6-3.el7.centos

dependency: systemd-units

provider: systemd.x86_64 219-42.el7_4.4

3、自建yum倉庫,分別為網絡源和本地源

Yum倉庫

Yum倉庫在單個RPM軟件包的基礎之上,進一步去解決依賴關系

Yum倉庫是簡化rpm軟件包的安裝以及管理的難度,解決rpm軟件包的相互依賴性

解決軟件包之間的依賴關系

yum

所有Yum倉庫的配置文件均需以.repo結尾并存放在/etc/yum.repos.d/目錄中的

[rhel-media]: yum倉庫唯一標識符,避免與其他倉庫沖突

name=linuxprobe : yum倉庫的名稱描述,易于識別倉庫用處

baseurl=file:///media/cdrom :提供方式包括FTP(ftp://..)、HTTP(http://..)、本地(file:///..)

enabled=1 :?設置此源是否可用,1為可用,0為禁用

gpgcheck=1 :?設置此源是否校驗文件,1為校驗,0為不校驗

gpgkey=file:///media/cdrom/RPM-GPG-KEY-redhat-release :若為校驗請指定公鑰文件地址

 

配置網絡源

1.查看網絡源配置文件,如果將yum 網絡源配置文件改名為CentOS-Base.repo.bak,

會先在網絡源中尋找適合的包,改名之后直接從本地源讀取

[root@localhost ~]# cd /etc/yum.repos.d/

[root@localhost yum.repos.d]# ls

CentOS-Base.repo.bak? CentOS-Debuginfo.repo? CentOS-local.repo? CentOS-Sources.repo

CentOS-CR.repo??????? CentOS-fasttrack.repo? CentOS-Media.repo? CentOS-Vault.repo

[root@localhost yum.repos.d]# mv CentOS-Base.repo.bak CentOS-Base.repo

[root@localhost yum.repos.d]# ls

CentOS-Base.repo? CentOS-Debuginfo.repo? CentOS-local.repo? CentOS-Sources.repo

CentOS-CR.repo??? CentOS-fasttrack.repo? CentOS-Media.repo? CentOS-Vault.repo

 

2. 創建配置文件

[root@localhost yum.repos.d]# vi CentOS-Base.repo.bak

 

[bash]

name=Base?Repo

baseurl=https://mirrors.aliyun.com/centos/7.4.1708/os/x86_64/

gpgcheck=0

enabled=1

 

[epel]

name=epel 7 Release 7

baseurl=https://mirrors.aliyun.com/epel/7/x86_64/

gpgcheck=0

enabled=1

 

[root@localhost yum.repos.d]# yum repolist

Loaded plugins: fastestmirror

Loading mirror speeds from cached hostfile

* base: mirrors.aliyun.com

* epel: mirrors.aliyun.com

repo id???????????????????????????????????????????? repo name??????????????????????????????????????????????? status

Base?????????????????????????????????????? ????????Base?Repo

epel??????????????????????????????? ???????????????epel 7 Release 7

 

配置本地源

1.掛載光盤至某目錄,例如/media/cdrom

[root@localhost ~]# mount /dev/cdrom /media/cdrom

2. 創建配置文件

查看repodata倉庫

[root@localhost ~]# cd /media/cdrom/

[root@localhost cdrom]# ls

CentOS_BuildTag? EULA? images??? LiveOS??? repodata????????????? RPM-GPG-KEY-CentOS-Testing-7

EFI????????????? GPL? ?isolinux? Packages? RPM-GPG-KEY-CentOS-7? TRANS.TBL

 

創建配置文件即可

[root@localhost ~]# vi?/etc/yum.repos.d/CentOS-local.repo

[CentOS7]

name=CentOS?7?Release?7.4

baseurl=file:///misc/cd

enabled=1

gpgcheck=0

4、簡述at和crontab命令,制定每周三凌晨三、五點10分執行某個腳本,輸出當前時間,時間格式為 2017-12-28 10:00:00

at——? 未來時間點執行一次任務? ??

at是由atd提供服務的,在使用之前要確認是否開啟;

CentOS 6:service atd {status|start};

CentOS 7:systemctl?{status|start} atd

★命令格式——at [option] TIME

TIME:定義出什么時候執行這項任務

HH:MM [YYYY-mm-dd];

HH:MM[am|pm] [Month] [Date];

noon(正午), midnight(午夜), teatime(下午4點),tomorrow(明天)

now+#{minutes—分鐘,hours—小時,days—天, OR weeks—周}

at 的作業有隊列,存放在/var/spool/at?中,用單個字母來表示,默認都使用 a 隊列;

★常見選項

-q QUEUE:指明隊列;

-l:列出指定隊列中等待運行的作業;相當于atq;

-d #:刪除指定作業號的作業;相當于atrm;

-c #:查看指定作業號的具體作業任務;

-v:可以使用較明顯的時間格式列出at中的工作列表;

-f /path/from/somefile:從指定的文件中讀取任務,不再交互式輸入;(# at -f /testdir/at.txt)

-m:強制at發送郵件,表示執行完畢

★示例

1.HH:MM 如:02:00

在今日的HH:MM 進行,若該時刻已過,則明天此時執行任務

2.HH:MM YYYY-MM-DD 如:04:00 2016-09-20

規定在某年某月的某一天的特殊時刻進行該項任務

3.HH:MM[am|pm] [Month] [Date]

04pm March 17

17:20 tomorrow

4.HH:MM[am|pm] + number [minutes|hours|days|weeks]

在某個時間點再加幾個時間后才進行該項任務

如:now + 5 minutes

04pm + 3 days

5.設定計劃任務,在2分鐘后執行

[root@centos7?~]#?at?now+2min

at>?cat?/etc/issue

at>?ls?/var

at>?echo?“hello?there.”

at>?<EOT>???????????????#?按?Ctrl+d?提交

job?1?at?Sun Dec?24?15:49:00?2017

 

crontab——? 周期性運行某任務? ??

★命令格式——crontab [-u user] [-l | -r | -e] [-i]

★常見選項

-e:打開編輯界面定義任務;

-l:列出所有任務(僅是當前用戶的所有任務);

-r:移除所有任務,即刪除/var/spool/cron/USERNAME文件;
如果,刪除單個任務應該通過編輯界面刪除行實現;

-i:在使用-r選項移除所有任務時提示用戶確認;

-u user:root用戶可為指定用戶管理cron任務(即為某個用戶編輯計劃任務);

★注意:

運行結果以郵件通知給當前用戶;如果拒接接收郵件:

COMMAND > /dev/null (執行成功發送給 /dev/null )

COMMAND &> /dev/null(不管執行成功和錯誤都直接發送給 /dev/null,慎用?。。。?/p>

定義COMMAND時,如果命令需要用到%,需要對其轉義,但放置于單引號中的%不用轉義亦可;

如:touch $(date +%Y-%m-%d-%H-%M-%S)

思考:

某任務在指定的時間因關機未能執行,下次開機會不會自動執行?

不會執行!?如果期望某時間因故未能按時執行,下次開機后無論是否到了相應時間點都要執行一次,

可使用?ancorn?命令

 

[root@localhost ~]# crontab -e

no crontab for root – using an empty one

crontab: installing new crontab

 

[root@localhost ~]# crontab -l

10 3,5 * * 3 /tmp/bin/useradd3.sh /tmp/bin/`date +’%F %X’`

5、簡述sed常用操作命令,并舉例

sed——? 流編輯器? ??

★命令格式——sed [OPTION]… ‘script’ [input-file]…

★常見選項

-n:不輸出模式空間內容至屏幕(靜默模式);

-e script:多點編輯,指定多腳本編輯;

-f /PATH/TO/SCRIPT_FILE:從指定文件中讀取編輯腳本并運行(每行一個編輯命令);

-r:支持使用擴展正則表達式;

-i:原處編輯(直接修改源文件);-i.back(備份)—— 慎用

★注意

模式空間中的內容,默認都會在屏幕上顯示出來;

sed在處理時,把當前要處理的行存儲在“模式空間”中,然后處理模式空間中的內容,如果

不能被模式空間中指定的模式匹配到,就將內容(沒發生改變)送到標準輸出(屏幕);

如果被模式空間中指定的的模式匹配到,就執行對匹配到模式內容對應的編輯命令操作,

然后將操作后的結果送往標準輸出;

★地址界定

不給地址(空地址):

對全文進行處理;

單地址:

#:表示數字,指定的行

$:最后一行;

/pattern/:被此處模式所能夠匹配到的每一行;

地址范圍:

#,#?:從#行,到#行;

#,+n:從#行開始,一直到向下的n行;

/pat1/,/pat2/:從第一次被pat1匹配到的行開始,到第一次被pat2匹配到的行結束,中間的所有行;

#,/pat1/:?從#行開始,到第一次被pat1匹配到的行結束,中間的所有行。

~:步進,指定起始行及步長

1~2:所有奇數行

2~2:所有偶數行

★sed的編輯命令

d:刪除模式空間匹配的行;

p:顯示模式空間中被地址定界匹配到的內容;

a \text:在行后面追加文本;支持使用\n實現多行追加;

i \text:在行前面插入文本;支持使用\n實現多行插入;

c\ text:把指定到的行替換為此處指定的文本“text”;

w /path/to/somefile:保存模式空間中匹配到的行至指定的文件當中;

r /path/from/somefile:讀取指定文件的內容至當前文件被模式匹配到的行處;實現文件合并

=?: 為模式空間中匹配到的行打印行號;

!:條件取反,模式空間中匹配到的行取反處理;

s///:查找替換,其分隔符可自行指定,通常常用的有:s@@@,s###等
替換標記:
g:全局替換;
w /PATH/TO/SOMEFILE:將替換成功后的結果保存至指定文件中;
p:顯示替換成功后的行;
&:代表要查找的字符串

注意:這里添加或替換的內容,只是在模式空間中改變,原文件并沒有被修改,如果要修改源文件 加 -i 選項(慎用)

★示例

1.d: 刪除模式空間匹配的行

[root@localhost ~]# cat -n /etc/fstab

1

2????????#

3????????# /etc/fstab

4????????# Created by anaconda on Thu Nov 30 17:46:50 2017

5????????#

6????????# Accessible filesystems, by reference, are maintained under ‘/dev/disk’

7????????# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

8????????#

9????????UUID=c7d8f391-9c0a-4a23-8b2f-f203b303d7c5 /?????????????????????? ext4??? defaults??????? 1 1

10????????UUID=8c4f6d0e-5c4d-4971-b776-7728ffa0a791 /boot?????????????????? ext4??? defaults??????? 1 2

11????????UUID=601d68f6-bf3c-4e01-9e03-c000bce30829 swap??????????????????? swap??? defaults??????? 0 0

12????????/dev/sr0????????????????????????????????? /media/cdrom?????????? iso9660? defaults??????? 0 0

[root@localhost ~]# cat -n /etc/fstab > sed.txt

 

#?刪除1到5行的內容

[root@localhost ~]# sed ‘1,5d’ sed.txt

6????????# Accessible filesystems, by reference, are maintained under ‘/dev/disk’

7????????# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

8????????#

9????????UUID=c7d8f391-9c0a-4a23-8b2f-f203b303d7c5 /?????????????????????? ext4??? defaults??????? 1 1

10????????UUID=8c4f6d0e-5c4d-4971-b776-7728ffa0a791 /boot?????????????????? ext4??? defaults??????? 1 2

11????????UUID=601d68f6-bf3c-4e01-9e03-c000bce30829 swap??????????????????? swap??? defaults??????? 0 0

12????????/dev/sr0????????????????????????????????? /media/cdrom?????????? iso9660? defaults??????? 0 0

 

#?刪除以UUID開頭的行,被模式??/^UUID/??匹配到的每一行

[root@localhost ~]# sed ‘/^UUID/d’ /etc/fstab

 

#

# /etc/fstab

# Created by anaconda on Thu Nov 30 17:46:50 2017

#

# 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/sr0????????????????????????????????? /media/cdrom?????????? iso9660? defaults??????? 0 0

 

#?刪除以#開頭的行

[root@localhost ~]# sed ‘/^#/d’ /etc/fstab

 

UUID=c7d8f391-9c0a-4a23-8b2f-f203b303d7c5 /?????????????????????? ext4??? defaults??????? 1 1

UUID=8c4f6d0e-5c4d-4971-b776-7728ffa0a791 /boot?????????????????? ext4??? defaults??????? 1 2

UUID=601d68f6-bf3c-4e01-9e03-c000bce30829 swap??????????????????? swap??? defaults??????? 0 0

/dev/sr0????????????????????????????????? /media/cdrom?????????? iso9660? defaults??????? 0 0

 

 

#?刪除奇數行,顯示偶數行

[root@localhost ~]# sed ‘1~2d’ sed.txt

2????????#

4????????# Created by anaconda on Thu Nov 30 17:46:50 2017

6????????# Accessible filesystems, by reference, are maintained under ‘/dev/disk’

8????????#

10????????UUID=8c4f6d0e-5c4d-4971-b776-7728ffa0a791 /boot?????????????????? ext4??? defaults??????? 1 2

12????????/dev/sr0????????????????????????????????? /media/cdrom?????????? iso9660? defaults??????? 0 0

 

2.p: 打印模式空間中的內容

[root@localhost ~]# sed ‘3d’ sed.txt

1

2????????#

4????????# Created by anaconda on Thu Nov 30 17:46:50 2017

5????????#

6????????# Accessible filesystems, by reference, are maintained under ‘/dev/disk’

7????????# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

8????????#

9????????UUID=c7d8f391-9c0a-4a23-8b2f-f203b303d7c5 /?????????????????????? ext4??? defaults??????? 1 1

10????????UUID=8c4f6d0e-5c4d-4971-b776-7728ffa0a791 /boot?????????????????? ext4??? defaults??????? 1 2

11????????UUID=601d68f6-bf3c-4e01-9e03-c000bce30829 swap??????????????????? swap??? defaults??????? 0 0

12????????/dev/sr0????????????????????????????????? /media/cdrom?????????? iso9660? defaults??????? 0 0

 

#?-n?不顯示模式空間中的內容,

[root@localhost ~]# sed -n ‘3d’ sed.txt

 

#?首先顯示模式空間中沒有被匹配到的行(偶數行),然后再顯示被匹配到的指定的行,執行p命令打印出第3行,

#?因為默認模式空間中的內容都會被顯示出來,所以第三行還會再顯示一遍。對比d命令,是把模式空間中匹配到的行

#?刪除,就顯示不出來了

[root@localhost ~]# sed ‘3p’ sed.txt

1

2????????#

3????????# /etc/fstab

3????????# /etc/fstab

4????????# Created by anaconda on Thu Nov 30 17:46:50 2017

5????????#

6????????# Accessible filesystems, by reference, are maintained under ‘/dev/disk’

7????????# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

8????????#

9????????UUID=c7d8f391-9c0a-4a23-8b2f-f203b303d7c5 /?????????????????????? ext4??? defaults??????? 1 1

10????????UUID=8c4f6d0e-5c4d-4971-b776-7728ffa0a791 /boot?????????????????? ext4??? defaults??????? 1 2

11????????UUID=601d68f6-bf3c-4e01-9e03-c000bce30829 swap??????????????????? swap??? defaults??????? 0 0

12????????/dev/sr0????????????????????????????????? /media/cdrom?????????? iso9660? defaults??????? 0 0

 

#?首先,-n選項指明不顯示模式空間中的內容,然后命令p指明顯示指定的行

[root@localhost ~]# sed -n ‘3p’ sed.txt

3????????# /etc/fstab

[root@localhost ~]# sed -n ‘1~2p’ sed.txt

1

3????????# /etc/fstab

5????????#

7????????# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

9????????UUID=c7d8f391-9c0a-4a23-8b2f-f203b303d7c5 /?????????????????????? ext4??? defaults??????? 1 1

11????????UUID=601d68f6-bf3c-4e01-9e03-c000bce30829 swap??????????????????? swap??? defaults??????? 0 0

 

3.i \text,a \text和c \text:在行后面追加文本;支持使用\n實現多行追加

#?默認會顯示模式空間中的所有內容(因為沒有對第3行執行d命令,所以也會顯示出來),然后再在行前插入一行

[root@localhost ~]# sed?‘3i?\new?lines’?sed.txt

1

2 #

new?lines

3 #?/etc/fstab

4 #?Created?by?anaconda?on?Sun?Nov??6?10:30:14?2016

5 #

6 #?Accessible?filesystems,?by?reference,?are?maintained?under?‘/dev/disk’

7 #?See?man?pages?fstab(5),?findfs(8),?mount(8)?and/or?blkid(8)?for?more?info

8 #

9 UUID=7bdf8e89-59c8-425e-a108-5c7c115e0afe?/???????????????????????xfs?????defaults????????0?0

10? UUID=3360e49a-d492-4f98-9957-edcb4db93384?/boot???????????????????xfs?????defaults????????0?0

11? UUID=eb3cdf15-b9e4-4ea6-b28b-75d4b4a54df8?/usr????????????????????xfs?????defaults????????0?0

12? UUID=18deb1ed-ee42-4269-94f3-6791304344e8?swap????????????????????swap????defaults????????0?0

 

#?在行后插入一行

[root@localhost ~]# sed?‘3a?\new?lines’?sed.txt

1

2 #

3 #?/etc/fstab

new?lines

4 #?Created?by?anaconda?on?Sun?Nov??6?10:30:14?2016

5 #

6 #?Accessible?filesystems,?by?reference,?are?maintained?under?‘/dev/disk’

7 #?See?man?pages?fstab(5),?findfs(8),?mount(8)?and/or?blkid(8)?for?more?info

8 #

9 UUID=7bdf8e89-59c8-425e-a108-5c7c115e0afe?/???????????????????????xfs?????defaults????????0?0

10? UUID=3360e49a-d492-4f98-9957-edcb4db93384?/boot???????????????????xfs?????defaults????????0?0

11? UUID=eb3cdf15-b9e4-4ea6-b28b-75d4b4a54df8?/usr????????????????????xfs?????defaults????????0?0

12? UUID=18deb1ed-ee42-4269-94f3-6791304344e8?swap????????????????????swap????defaults????????0?0

 

#?\n?實現多行追加

[root@localhost ~]# sed?‘3a?\new?lines\ntaotao\nxiuxiu’?sed.txt

1

2 #

3 #?/etc/fstab

new?lines

taotao

xiuxiu

4 #?Created?by?anaconda?on?Sun?Nov??6?10:30:14?2016

5 #

6 #?Accessible?filesystems,?by?reference,?are?maintained?under?‘/dev/disk’

7 #?See?man?pages?fstab(5),?findfs(8),?mount(8)?and/or?blkid(8)?for?more?info

8 #

9 UUID=7bdf8e89-59c8-425e-a108-5c7c115e0afe?/???????????????????????xfs?????defaults????????0?0

10? UUID=3360e49a-d492-4f98-9957-edcb4db93384?/boot???????????????????xfs?????defaults????????0?0

11? UUID=eb3cdf15-b9e4-4ea6-b28b-75d4b4a54df8?/usr????????????????????xfs?????defaults????????0?0

12? UUID=18deb1ed-ee42-4269-94f3-6791304344e8?swap????????????????????swap????defaults????????0?0

 

#在匹配的模式后增加內容

[root@localhost ~]# sed?‘/^UUID/a?\#?add?new?line?base?on?UUID’?/etc/fstab

 

#

#?/etc/fstab

#?Created?by?anaconda?on?Sun?Nov??6?10:30:14?2016

#

#?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

#

UUID=7bdf8e89-59c8-425e-a108-5c7c115e0afe?/???????????????????????xfs?????defaults????????0?0

#?add?new?line?base?on?UUID

UUID=3360e49a-d492-4f98-9957-edcb4db93384?/boot???????????????????xfs?????defaults????????0?0

#?add?new?line?base?on?UUID

UUID=eb3cdf15-b9e4-4ea6-b28b-75d4b4a54df8?/usr????????????????????xfs?????defaults????????0?0

#?add?new?line?base?on?UUID

UUID=18deb1ed-ee42-4269-94f3-6791304344e8?swap????????????????????swap????defaults????????0?0

#?add?new?line?base?on?UUID

 

 

#?將指定的行替換為此處的“text”

[root@localhost ~]# sed?‘/^UUID/c?\#?add?new?line?base?on?UUID’?/etc/fstab

 

#

#?/etc/fstab

#?Created?by?anaconda?on?Sun?Nov??6?10:30:14?2016

#

#?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

#

#?add?new?line?base?on?UUID

#?add?new?line?base?on?UUID

#?add?new?line?base?on?UUID

#?add?new?line?base?on?UUID

 

4.w /path/to/somefile:把指定的內容另存至/path/to/somefile路徑所指定的文件中。

[root@localhost ~]# sed?-n?‘/^[^#]/p’?/etc/fstab

UUID=7bdf8e89-59c8-425e-a108-5c7c115e0afe?/???????????????????????xfs?????defaults????????0?0

UUID=3360e49a-d492-4f98-9957-edcb4db93384?/boot???????????????????xfs?????defaults????????0?0

UUID=eb3cdf15-b9e4-4ea6-b28b-75d4b4a54df8?/usr????????????????????xfs?????defaults????????0?0

UUID=18deb1ed-ee42-4269-94f3-6791304344e8?swap????????????????????swap????defaults????????0?0

 

[root@localhost ~]# sed?‘/^[^#]/w?/tmp/fstab.new’?/etc/fstab

 

#

#?/etc/fstab

#?Created?by?anaconda?on?Sun?Nov??6?10:30:14?2016

#

#?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

#

UUID=7bdf8e89-59c8-425e-a108-5c7c115e0afe?/???????????????????????xfs?????defaults????????0?0

UUID=3360e49a-d492-4f98-9957-edcb4db93384?/boot???????????????????xfs?????defaults????????0?0

UUID=eb3cdf15-b9e4-4ea6-b28b-75d4b4a54df8?/usr????????????????????xfs?????defaults????????0?0

UUID=18deb1ed-ee42-4269-94f3-6791304344e8?swap????????????????????swap????defaults????????0?0

 

[root@localhost ~]# cat?/tmp/fstab.new

UUID=7bdf8e89-59c8-425e-a108-5c7c115e0afe?/???????????????????????xfs?????defaults????????0?0

UUID=3360e49a-d492-4f98-9957-edcb4db93384?/boot???????????????????xfs?????defaults????????0?0

UUID=eb3cdf15-b9e4-4ea6-b28b-75d4b4a54df8?/usr????????????????????xfs?????defaults????????0?0

UUID=18deb1ed-ee42-4269-94f3-6791304344e8?swap????????????????????swap????defaults????????0?0

 

5.r /path/from/somefile:在文件的指定位置插入另一個文件的所有內容,完成文件合并。

[root@localhost ~]# sed?‘3r?/etc/issue’?sed.txt

1

2 #

3 #?/etc/fstab

\S

Kernel?\r?on?an?\m

 

Mage?Education?Learning?Services

http://www.magedu.com

 

4 #?Created?by?anaconda?on?Sun?Nov??6?10:30:14?2016

5 #

6 #?Accessible?filesystems,?by?reference,?are?maintained?under?‘/dev/disk’

7 #?See?man?pages?fstab(5),?findfs(8),?mount(8)?and/or?blkid(8)?for?more?info

8 #

9 UUID=7bdf8e89-59c8-425e-a108-5c7c115e0afe?/???????????????????????xfs?????defaults????????0?0

10? UUID=3360e49a-d492-4f98-9957-edcb4db93384?/boot???????????????????xfs?????defaults????????0?0

11? UUID=eb3cdf15-b9e4-4ea6-b28b-75d4b4a54df8?/usr????????????????????xfs?????defaults????????0?0

12? UUID=18deb1ed-ee42-4269-94f3-6791304344e8?swap????????????????????swap????defaults????????0?0

 

6.=?: 為模式空間中的行打印行號

[root@localhost ~]# sed?‘/^UUID/=’?/etc/fstab

 

#

#?/etc/fstab

#?Created?by?anaconda?on?Sun?Nov??6?10:30:14?2016

#

#?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

#

9

UUID=7bdf8e89-59c8-425e-a108-5c7c115e0afe?/???????????????????????xfs?????defaults????????0?0

10

UUID=3360e49a-d492-4f98-9957-edcb4db93384?/boot???????????????????xfs?????defaults????????0?0

11

UUID=eb3cdf15-b9e4-4ea6-b28b-75d4b4a54df8?/usr????????????????????xfs?????defaults????????0?0

12

UUID=18deb1ed-ee42-4269-94f3-6791304344e8?swap????????????????????swap????defaults????????0?0

 

7.!?:模式空間中匹配行取反處理

#?刪除非#號開頭的行,注意“!”的位置

[root@localhost ~]# sed?‘/^#/!d’?/etc/fstab

#

#?/etc/fstab

#?Created?by?anaconda?on?Sun?Nov??6?10:30:14?2016

#

#?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

#

8.s///查找替換,及多點編輯

[root@localhost ~]# cat?/etc/fstab

 

#

#?/etc/fstab

#?Created?by?anaconda?on?Sun?Nov??6?10:30:14?2016

#

#?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

#

UUID=7bdf8e89-59c8-425e-a108-5c7c115e0afe?/???????????????????????xfs?????defaults????????0?0

UUID=3360e49a-d492-4f98-9957-edcb4db93384?/boot???????????????????xfs?????defaults????????0?0

UUID=eb3cdf15-b9e4-4ea6-b28b-75d4b4a54df8?/usr????????????????????xfs?????defaults????????0?0

UUID=18deb1ed-ee42-4269-94f3-6791304344e8?swap????????????????????swap????defaults????????0?0

 

#?刪除/etc/fstab文件中所有以#開頭的行的行首的#及#后面所有的空白字符

[root@localhost ~]# sed?‘s@^#[[:space:]]*@@’?/etc/fstab

 

/etc/fstab

Created?by?anaconda?on?Sun?Nov??6?10:30:14?2016

 

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

 

UUID=7bdf8e89-59c8-425e-a108-5c7c115e0afe?/???????????????????????xfs?????defaults????????0?0

UUID=3360e49a-d492-4f98-9957-edcb4db93384?/boot???????????????????xfs?????defaults????????0?0

UUID=eb3cdf15-b9e4-4ea6-b28b-75d4b4a54df8?/usr????????????????????xfs?????defaults????????0?0

UUID=18deb1ed-ee42-4269-94f3-6791304344e8?swap????????????????????swap????defaults????????0?0

 

#?多點編輯,同時把UUID開頭的行刪除

[root@localhost ~]# sed?-e?‘s@^#[[:space:]]*@@’?-e?‘/^UUID/d’?/etc/fstab

 

 

/etc/fstab

Created?by?anaconda?on?Sun?Nov??6?10:30:14?2016

 

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

 

#刪除/boot/grub/grub2.cfg文件中所有以空白字符開頭的行的行首的所有空白字符

[root@localhost ~]# sed? ‘s@^[[:space:]]\+@@’ /etc/grub2.cfg

 

#刪除/etc/fstab文件中所有以#開頭的行的行首的#號及#后面的所有空白字符

[root@localhost ~]# sed? ‘s@^#[[:space:]]*@@’? /etc/fstab

 

#輸出一個絕對路徑給sed命令,取出其目錄,其行為類似于dirname;

[root@localhost ~]# echo “/var/log/messages/” | sed ‘s@[^/]\+/\?$@@’

[root@localhost ~]# echo “/var/log/messages” | sed -r ‘s@[^/]+/?$@@’

★保持空間

sed 除了“模式空間”(pattern space),還有一個“hold space”的內存空間,稱之為?保持空間。

所謂保持空間,就是對于模式空間處理過的行,可能還有其他的處理,因此可以先把處理過的

行“傳送”至保存空間,然后再后續的處理中再次“傳送”回模式空間中。 這就類似于加工車間和

倉庫的概念,好比模式空間為加工車間,保持空間為倉庫,不過這里的倉庫存放的都是些半成

品的產品

★高級編輯命令

h:把模式空間中的內容覆蓋至保持空間中;

H:把模式空間中的內容追加至保持空間中;

g:從保持空間取出數據覆蓋至模式空間;

G:從保持空間取出內容追加至模式空間;

x:把模式空間中的內容與保持空間中的內容進行互換;

n:覆蓋讀取匹配到的行的下一行至模式空間;

N:追加匹配到的行的下一行至模式空間;

d:刪除模式空間中的行;

D:刪除當前模式空間開端至\n的內容(不在傳至標準輸出),放棄之后的命令,但是對剩余模式空間重新執行sed

★示例

sed? -n? ‘n;p’? FILE:顯示偶數行;

[root@localhost ~]# cat -n /etc/fstab

1

2????????#

3????????# /etc/fstab

4????????# Created by anaconda on Thu Nov 30 17:46:50 2017

5????????#

6????????# Accessible filesystems, by reference, are maintained under ‘/dev/disk’

7????????# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

8????????#

9????????UUID=c7d8f391-9c0a-4a23-8b2f-f203b303d7c5 /?????????????????????? ext4??? defaults??????? 1 1

10????????UUID=8c4f6d0e-5c4d-4971-b776-7728ffa0a791 /boot?????????????????? ext4??? defaults??????? 1 2

11????????UUID=601d68f6-bf3c-4e01-9e03-c000bce30829 swap??????????????????? swap??? defaults??????? 0 0

12????????/dev/sr0????????????????????????????????? /media/cdrom?????????? iso9660? defaults??????? 0 0

[root@localhost ~]# sed -n ‘n;p’ /etc/fstab

#

# Created by anaconda on Thu Nov 30 17:46:50 2017

# Accessible filesystems, by reference, are maintained under ‘/dev/disk’

#

UUID=8c4f6d0e-5c4d-4971-b776-7728ffa0a791 /boot?????????????????? ext4??? defaults??????? 1 2

/dev/sr0????????????????????????????????? /media/cdrom?????????? iso9660? defaults??????? 0 0

 

sed? ‘1!G;h;$!d’? FILE:逆序顯示文件的內容;

[root@localhost ~]# sed ‘1!G;h;$!d’ /etc/fstab

/dev/sr0????????????????????????????????? /media/cdrom?????????? iso9660? defaults??????? 0 0

UUID=601d68f6-bf3c-4e01-9e03-c000bce30829 swap??????????????????? swap??? defaults??????? 0 0

UUID=8c4f6d0e-5c4d-4971-b776-7728ffa0a791 /boot?????????????????? ext4??? defaults??????? 1 2

UUID=c7d8f391-9c0a-4a23-8b2f-f203b303d7c5 /?????????????????????? ext4??? defaults??????? 1 1

#

# 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 Thu Nov 30 17:46:50 2017

# /etc/fstab

#

 

sed? ‘$!d’? FILE:取出最后一行;

[root@localhost ~]# sed ‘$!d’ /etc/fstab

/dev/sr0????????????????????????????????? /media/cdrom?????????? iso9660? defaults??????? 0 0

 

sed? ‘$!N;$!D’ FILE:取出文件后兩行;

[root@localhost ~]# sed ‘$!N;$!D’ /etc/fstab

UUID=601d68f6-bf3c-4e01-9e03-c000bce30829 swap??????????????????? swap??? defaults??????? 0 0

/dev/sr0????????????????????????????????? /media/cdrom?????????? iso9660? defaults??????? 0 0

 

 

sed ‘/^$/d;G’ FILE:刪除原有的所有空白行,而后為所有的非空白行后添加一個空白行;

[root@localhost ~]# sed ‘/^$/d;G’ /etc/fstab

#

 

# /etc/fstab

 

# Created by anaconda on Thu Nov 30 17:46:50 2017

 

#

 

# 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

 

#

 

UUID=c7d8f391-9c0a-4a23-8b2f-f203b303d7c5 /?????????????????????? ext4??? defaults??????? 1 1

 

UUID=8c4f6d0e-5c4d-4971-b776-7728ffa0a791 /boot?????????????????? ext4??? defaults??????? 1 2

 

UUID=601d68f6-bf3c-4e01-9e03-c000bce30829 swap??????????????????? swap??? defaults??????? 0 0

 

/dev/sr0????????????????????????????????? /media/cdrom?????????? iso9660? defaults??????? 0 0

 

sed? ‘n;d’? FILE:顯示奇數行;(先讀第1行,再第2行把第1行覆蓋,然后再刪除第2行)

[root@localhost ~]# sed ‘n;d’ /etc/fstab

 

# /etc/fstab

#

# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

UUID=c7d8f391-9c0a-4a23-8b2f-f203b303d7c5 /?????????????????????? ext4??? defaults??????? 1 1

UUID=601d68f6-bf3c-4e01-9e03-c000bce30829 swap??????????????????? swap??? defaults??????? 0 0

 

sed ‘G’ FILE:在原有的每行后方添加一個空白行;

[root@localhost ~]# sed ‘G’ /etc/fstab

 

 

#

 

# /etc/fstab

 

# Created by anaconda on Thu Nov 30 17:46:50 2017

 

#

 

# 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

 

#

 

UUID=c7d8f391-9c0a-4a23-8b2f-f203b303d7c5 /?????????????????????? ext4??? defaults??????? 1 1

 

UUID=8c4f6d0e-5c4d-4971-b776-7728ffa0a791 /boot?????????????????? ext4??? defaults??????? 1 2

 

UUID=601d68f6-bf3c-4e01-9e03-c000bce30829 swap??????????????????? swap??? defaults??????? 0 0

 

/dev/sr0????????????????????????????????? /media/cdrom?????????? iso9660? defaults??????? 0 0

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/90679

(0)
N28_noonN28_noon
上一篇 2017-12-31
下一篇 2017-12-31

相關推薦

  • rhel6.7安裝pymssql(通過Python連接MSsql數據庫)

    依賴安裝: freetds、python-devel、cython、Python3.x 1、安裝freetds tar -jxvf freetds-dev.0.99.134.tar.bz cd freetds-dev.0.99.134 ./configure –prefix=/usr/local/freetds&nb…

    Linux干貨 2016-05-23
  • 正則表達式和變量寫腳本

    #!/bin/bash 檢查系統所有用戶的shell是否為bash? 注釋:用grep查找是否有此類用戶,如果有則為真,則$?必然為0;顯示的passwd結果對我們沒意義,所以重定向到空。  grep “\bbash\b$” /etc/passwd &> /dev/null  A=`echo $?` …

    Linux干貨 2017-04-16
  • RPM簡述

    RPM 是 Red Hat Package Manager 的縮寫,本意是Red Hat 軟件包管理,顧名思義是Red Hat 貢獻出來的軟件包管理;在Fedora 、Redhat、Mandriva、SuSE、YellowDog等主流發行版本,以及在這些版本基礎上二次開發出來的發行版采用。 RPM包里面都包含什么?里面包含可執行的二進制程序,這個程序和Win…

    Linux干貨 2017-08-12
  • HA Cluster—Keepalived

    HA Cluster 集群類型:LB(lvs/nginx(http/upstream, stream/upstream))、HA、HP 系統可用性的公式:A=MTBF/(MTBF+MTTR) 系統故障: 硬件故障:設計缺陷、wear out、自然災害 軟件故障:設計缺陷 提升系統高用性的解決方案之降低MTTR: 解決方案:冗余(redundant) acti…

    Linux干貨 2017-10-30
  • lvs初探

    1,lvs是什么 lvs是Linux Virtual Server縮寫,linux虛擬服務器,擔任負載調度器(load balance)的角色,它不提供任何服務,用戶請求到這里的時候,它是將客戶需求轉發至后端真正提供服務的服務,LVS分為兩部分組成,ipvsadm管理集群服務的命令行工具,ipvs,是內核模塊。由于ipvs采用基于ip負載均衡技術,所以具有很…

    Linux干貨 2016-10-30
  • httpd功能配置之路徑別名

       httpd的路徑別名功能可以使用資源的訪問不再依賴于站點的根目錄,可以指定任意目錄來設置資源的訪問路徑。    默認站點的根目錄是/var/www/html,如下圖所示。    下面來使用路徑的別名來訪問資源:    1、打開httpd服務的配置文件  &nbsp…

    Linux干貨 2016-03-11

評論列表(1條)

  • 馬哥教育
    馬哥教育 2018-01-07 18:03

    非常贊的博文~希望能繼續保持~加油~

欧美性久久久久