第五周 程序包管理

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,慎用!!!)

定义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.178linux.com/90679

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

相关推荐

  • 软件包管理

    软件运行环境 ABI(应用程序的二进制接口):Application Binary Interface Windows 与Linux 不兼容 ELF(Executable and Linkable Format)           —&…

    Linux干货 2017-04-23
  • 在Linux中使用计算器遇到的问题

    进制转换的时候出现了与理解不同的结果

    Linux干货 2017-11-14
  • LVS基本原理

    LVS基本原理 简介 负载调度器、真实服务器群节点一起被称为LVS。LVS负载调度器(有时也称为负载平衡器),接收所服务的所有接入服务集群的请求,并决定集群中的哪个节点应该回复其请求。 1)负载调度器(Director):作为整个集群的前端,主要将用户请求分发至真实服务器中进行处理。 2)真实服务器池:由多个功能相同的真实服务器组成,为用户提供真正的网络服务…

    Linux干货 2016-12-27
  • 计算机的组成及功能

    计算机的组成及功能 计算机的组成 计算机的组成,简单地来说,包含硬件和软件两部分,两者相辅相成,缺一不可。在计算机网络发展的今天,网络也已成为计算机不可或缺的一部分。 计算机硬件 可以分为如下5个部分: 控制器 负责对程序的控制信息进行分析,控制并协调输入、输出操作或内存访问,如CPU 运算器 负责数据的算术运算和逻辑运算,如C…

    Linux干货 2016-10-29
  • MongoDB

    Edit MongoDB 手册 MongoDB 手册 第一章 Introduction MongoDB入门学习目录(建议) Databases Collections Documents 第二章 部署安装 1. Import the MongoDB public key 2. Configure the package management system (…

    Linux干货 2017-04-08
  • Linux系统的介绍及如何获取帮助?(学习笔记)

    第一、Linux 基础   CPU架构:      x86      x64 (amd64)      m68000,m68k      arm    &nbs…

    Linux干货 2016-12-12

评论列表(1条)

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

    非常赞的博文~希望能继续保持~加油~