linux零基础之计划任务及程序包管理

linux的任务计划,周期性任务

linux系统是由cron(crond)这个系统服务来控制的。linux系统上面原本有很多的计划性工作,因此这个服务是默认启动的。另个,使用者也可以根据自己的需求设置计划任务。linux计划任务可分类:

  • a . 未来的某时间点执行一次某任务:常用命令有 at,batch

  • b. 周其性运行某个任务 : 常用命令有 crontab.

crond 简介

crond 是linux系统下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似。当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

任务计划执行的结果:会通过邮件发送给用户。一般位于/var/spool/mail/USERNAME

邮件服务

  • 本地电子邮件服务
    • smtp : simple mail transmission protocol 简单邮件传输协议;只能发不能接收。
    • pop3: post office protocol
    • imap4: Internet Mail Access Protocol
  • 查看系统有无开启邮件服务。
    • 用命令 :ss -tnl 或者 netstat -tnl

例如:

[root@localhost ~]# ss -tnl
State       Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN      0      128     *:111                *:*                  
LISTEN      0      5      192.168.122.1:53      *:*                  
LISTEN      0      128     *:22                 *:*                  
LISTEN      0      128    127.0.0.1:631         *:*                  
LISTEN      0      100    127.0.0.1:25          *:*                  
LISTEN      0      128    :::111                :::*                  
LISTEN      0      128    :::22                 :::*                  
LISTEN      0      128    ::1:631               :::*                  
LISTEN      0      100    ::1:25                :::*                  
[root@localhost ~]# 

************************************************************************************** 

[root@localhost ~]# netstat -ntl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN     
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
tcp6       0      0 :::111                  :::*                    LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 ::1:631                 :::*                    LISTEN     
tcp6       0      0 ::1:25                  :::*                    LISTEN     
[root@localhost ~]# 

其中上面有一个25号的端口属于邮件的监听状态。

  • mail : 命令 (centos 5,6 系列): send and receive Internet mail

  • mailx : 命令 (centos 7 系列 ) : send and receive Internet mail

  • mua : mail user agent : 用户收发邮件的工具程序。

  • mail 命令格式

    • mail [-s ‘subject’] USERNAME [@hostname]
    • 邮件正文生成:
      • 1 . 交互式输入 : .点号单独行可以表示正文单独一行结束;CTRL+d 提交邮件。
      • 2 . 通过输入重定向。
      • 3 . 通过管道。

mail 命令不带任何参数表示:接收邮件

at 一次性执行的任务命令

作用:未来某时间点一次执行某任务。

  • 格式 : at [OPTION]… TIME
  • 常用选项:

    • -m:当at工作完成后,无论是否命令有输出,都用email通知执行at命令的用户。
    • -c 工作号:显示该at工作的实际内容。
  • 时间格式:

    • HH:MM 例如 02:30。
    • HH:MM YYYY-MM-DD例如 02:30 2016-08-20。
    • HH:MM[am|pm] [month] [date] 例如 02:30 July 25 。
    • HH:MM[am|pm] + [minutes|hours|days|weeks]例如 now+5 minutes 。
    • HH:MM[YYYY-mm-dd]
    • noon(正中午),midnight (晚上12点),teatime(下午4点) 。
    • tomorrow (明天) 。
    • now+# (#) unit : minutes,hours,days, OR weeks

例如:

[root@localhost ~]# at now+1 minutes
at> ls /etc                                      # 输入要执行的命令。
at> <EOT>                                        # 按CRTl+d结束,提交。
job 1 at Sun Jun 10 12:33:00 2018
  • 常用选项:
    --l: 查看作业队列。
    • -f/PATH/FROM/SOMEFILe: 从指定文件中读取作业任务,而不用再交互式输入。
      --d: 删除指定的作业。
    • -c: 想看指定作业的具体内容。
    • -q: queue ; 指明队列。

      at的作业有队列,用单个字母表示,默认都使用 a 队列。


注意:作业执行结果以邮件发送给提交作业的用户。在 /var/spool/mail/USERNAME 下。

batch 命令

作用:batch 会让系统自行选择在系统资源较空闲的时间去执行指定的任务。

  • 常用参数:

    • -l : 查看作业队列。
      --f/PATH/FROM/SOMEFILe : 从指定文件中读取作业任务,而不用再交互式输入。
      --d: 删除指定的作业。
      --c: 想看指定作业的具体内容。
    • -q : queue ; 指明队列。

周期性任务计划 cron crontab

服务主程序包:cronie : 提供了crond守护进程及相关辅助工具。
确保crond守护进程(deamon)处于运行状态。

  • 查看crond运行命令格式:

    • centos 5,6系列: service crond status
    • centos 7 系列: systemctl status crond.service

例如:

[root@caibird ~]# uname -r
2.6.32-696.el6.x86_64
[root@caibird ~]# service crond status        # centos 6.9
crond (pid  1471) 正在运行...
[root@caibird ~]# 

************************************************************************

[root@localhost ~]# cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core) 
[root@localhost ~]# systemctl status crond.service             #centos 7.4
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since 日 2018-06-03 10:37:08 CST; 1 weeks 0 days ago
 Main PID: 967 (crond)
   CGroup: /system.slice/crond.service
           └─967 /usr/sbin/crond -n

603 10:37:08 localhost.localdomain systemd[1]: Started Command...
603 10:37:08 localhost.localdomain systemd[1]: Starting Comman...
603 10:37:08 localhost.localdomain crond[967]: (CRON) INFO (RA...
603 10:37:08 localhost.localdomain crond[967]: (CRON) INFO (ru...
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost ~]# 

周期性任务crond

向 crond 提交作业的方式不同于 at ,它需要使用专用的配置文件,此文件有固定的格式。
不建议使用文件编辑器直接编辑此文件;要使用 crontab 命令;

  • cron任务分为两类:

    • 系统cron任务:系统周期性所要执行的工作,主要用于实现 系统 自身的维护。比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。即位于:/etc/crontab
    • 用户cron任务:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab 文件都被保存在 /var/spool/cron/USERNAME 目录中,其文件名与用户名一致。

系统 cron

  • 系统cron的配置格式

例如:

[root@caibird ~]# cat /etc/crontab 
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

[root@caibird ~]# 
  • cron文件格式说明 :

    • 前四行是用来配置crond任务运行的环境变量,第一行SHELL变量指定了系统要使用哪个shell,这里是bash。
    • 第二行PATH变量指定了系统执行命令的路径。
    • 第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户。
    • 第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。

注意:

  • 1 . 每一行定义一个周期任务:各字段之间都使用空格 字符分开。

    • * * * * * : 定义周期性时间,中间用空格隔开。
    • user-name : 运行任务的用户身份。
    • command to be executed : 运行的任务。
  • 2 . 此处的环境变量不同于用户登录后获取的环境。因此,建议命令使用绝对路径,或者自定义PATH环境变量。

  • 3 . 执行结果邮件发送给MAILTO指定的用户。

用户cron任务

  • 用户cron的配置格式:

例如:

[root@caibird ~]# cat /etc/crontab 
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

\# 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
[root@caibird ~]# 

注意: 用户cron的配置格式比系统cron配置格式少了一个 username

  • 1 . 每一行定义一个cron任务。
  • 2 . 结果由邮件发送给当前用户。

用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段.

  • 任务格式如下:

    • minute hour day month week command
  • 其中:
    -minute : 表示分钟,可以是从0到59之间的任何整数。

    • hour :表示小时,可以是从0到23之间的任何整数。

    • day:表示日期,可以是从1到31之间的任何整数。

    • month :表示月份,可以是从1到12之间的任何整数。

    • week :表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。

    • command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

注意: 在以上各个字段中,还可以使用以下特殊字符表示时间法:

  • 特定值: 给定时间点有效取值范围内的值。
    • 注意: day of weekday of month一般不同时使用。
  • 星号(*):代表所有可能的值,表示 “ 每 …”例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
    • 例如1 : 3 * * * * command : 每小时第三分钟执行任务(每小时候任务),如果都 是星号,则找出最小一级的星号为标准。
      • 例如2 : 3 4 * * 5 command : 每周执行一次;每周5的4点3分执行任务(每周任务)
      • 例如3 : 5 6 7 * * command : 每月执行一次;每月的7号的6点5分执行任务 (每月任务)
      • 例如4 :7 8 9 10 * command : 每年执行一次,每年的10月9号8点分执行任务(每年任务)
  • 逗号(,):指定时间点离散取值,可以用逗号隔开的值指定一个列表范围,中间没有空格 ,例如,“1,2,5,7,8,9”。

    • 例如5:9 8 * * 3,7 command : 每周三和周日8点9分执行任务一次。
    • 例如6:0 8,20 * * 3,7 command : 每周三和周日8点,和20点执行任务一次。
  • 中杠(-):连续取值,可以用整数之间的中杠表示一个整数范围,来表示 时间的开头与结束。例如“2-6”表示“2,3,4,5,6” 。

    • 例如7: 0 9-18 * * 1-5 command : 每周一到周五工作内的每小时执行任务一次(9点-18点)
  • 正斜线(/):可以用正斜线指定时间的间隔频率,即 /# ,#即步长。例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

    • 例如8: /5 * * * command : 每5分钟执行任务一次 ( 每分钟任务)
    • 例如9: * * * * * command : 每分钟r执行任务一次。

注意:

  • 指定的时间点不能被步长整除时,其意将不复存在。
    • 例如: /7 * * * command
  • 最小时间单位为 分钟 , 如果想完成 级任务,得需要额外借助于其他机制来实现;利用shell脚本的循环来实现,定义成每分钟任务,再利用脚本实现在每分钟之内循环执行多次,从而实现 级任务。

crontab 命令

  • 命令格式:

    • crontab [-u user] file

    • crontab [-u user] [ -e | -l | -r ] [-i]

  • 命令功能:

通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常适合周期性的日志分析或数据备份等工作。

  • 常用选项:

    • -u user:用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。

    • -file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。

    • -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。

    • -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。

    • -r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。

    • -i:在删除用户的crontab文件时给确认提示。

注意:

  • 1 . 运行结果以由邮件通知给当前用户,如何拒绝接收邮件:

    • (a) . command > /dev/null
    • (b) . commnad &> /dev/null # 这个有风险。
  • 2 . 在定义command 时,如果命令需要用到 % ,则需要对其转义;但放置于单引号中的%号不用户转义亦可。

  • 3 . 如果某任务在指定的时间因关机未能执行,下次开机不会自动执行。只会到了下一个时间执行的时候,才会执行。如果希望某时间因故未能按时执行,下次开机后无论是否到了相应赶时间做要执行一次,可以使用 anacron命令来实现 。

  • 例题:制定 每周三凌晨三、五点10分执行某个脚本,输出当前时间,时间格式为 2017-12-28 10:00:00

[root@localhost ~]# date +%F\ %T
2018-06-10 17:07:16

[root@localhost ~]# crontab -e 
no crontab for root - using an empty one

10 3,5 * * 3 date +%F\ %T
~
[root@localhost ~]# crontab -e 
crontab: installing new crontab
[root@localhost ~]# crontab -l
10 3,5 * * 3 date +%F\ %T
[root@localhost ~]# 

linux程序包管理

应用程序接口分为:API(Application Program Interface)和ABI(Application Binary Interface)两类。

  • ABI(Application Binary Interface):描述了应用程序与OS之间的底层接口,允许编译好的目标代码在使用兼容ABI的系统中无需改动就能运行。
  • API(Application Programming Interface:定义了源代码和库之间的接口,因此同样的源代码可以在支持这个API的任务系统中编译。

  • 执行文件格式:

    • Unix-like : ELE
    • Windows : EXE
  • 库级别的虚拟化
    • Linux : Cywin
    • Windows : WinE

程序软件的分类

  • 系统开发
    • c/c++ ,
      • 利用c/c++开发的有:httpd , vsftpd , nginx , go 。
        • 应用级开发
        • java/python/perl/ruby/php
        • 利用jave开发的有:hadoop , hbase , ELK 。
        • 利用python开发的有 :OpenStack
  • 应用开发依赖的虚拟解释器
    • jave –> jvm
    • python –> pvm
    • perl –> perl
    • ruby –> ruby
    • php –> PHP

系统程序格式 (c/c++)

  • 源代码 :文本格式的程序代码。
  • 二进制格式: 文本格式的程序代码–>编译器–二进制格式(二进制程序,库文件,配置文件,帮助文件)
  • 编译开发环境:编译器,头文件,开发库
  • 应用程序格式 :java/python ; 开发环境 :编译器,开发库
  • 源代码:编译成能够在虚拟机(jvm/pvm)运行的格式。

项目构建工具 :c/c++ --> make ; java--> maven

程序包管理器

作用: 源代码–>目标二进制格式–>组织成为一个或有限几个”包“ ,能够实现 程序的安装,升级,卸载,查询和校验,数据库维护等功能。

程序包管理器

  • 系统程序包管理器及程序包扩展名,如下表格 :
系统 程序包管理器 程序包扩展名
debian dpt , dpkg .deb
RHEL rpm .rpm
S.u.S.E rpm .rpm
Gentoo port
Archlinux …. ….
  • 程序包格式
程序包类型 命名格式
源代码 name-VERSION.tar.gz
源代码 VERSION:major.minor.release
rpm name-VERSION-release.arch.rpm
rpm VERSION:major.minor.release
rpm release.arch.rpm 包的发行号
rpm release.os.2.el7.i386.rpm

常用架构 :(architecture):i386 ,x64(amd64), ppc(powerpc) ,noarch(无平台限制)

  • 折包 : 主包和支包
    • 主包: name-VERSION-release.arch.rpm
    • 支包: name-function-VERSION-release.arch.rpm

function包括:devel,utils ,libs

  • 依赖关系:

    • 安装包 x , y , z
    • 安装 X –> 需要先安装 y , z
    • 安装 y –> 则需要 先安装 –> a ,b, c
    • 安装 c –> 则需要 先安装 –>y
    • 上述这种关系 ,就称为依赖关系。
  • 前端工具 : 自动解决依赖关系
    -yum: rhel系列rpm管理的前端工具

    • apt-get(apt-cache) : debian系列deb包的管理器的前端式具。
    • zypper: S.uS.E的rpm的管理前端工具。
    • dnf : fedora 22+以后的系统上的rpm包管理器的前端 工具。

程序包管理器

  • 功能 : 将编译好的应用程序的各组文件打包成一个或几个程序包文件。从而更方便地实现程序包的安装,升级,查询和卸载等管理的操作。

    • 程序包的组成清单(每个程序包都单独实现),文件清单,安装或卸载时运行的脚本 。
    • 数据库(公共),位于/var/lib/rpm
      • 1,程序包的名称和版本。
      • 2, 依赖关系。
      • 3, 功能 说明 。
      • 4, 安装生成的各文件路径及校验码信等等。

获取程序包的途径

建议:校验,检查其合法性。 1,来源的合法性;2,程序包的完整性。

centos系统上rpm命令管理程序包

RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序”.
rpm命令管理程序包的功能包括:安装,升级,卸载,查询和校验,数据库维护等等。

RPM包管理的用途

  • 可以安装、删除、升级和管理软件;当然也支持在线安装和升级软件;
  • 通过RPM包管理能知道软件包包含哪些文件,也能知道系统中的某个文件属于哪个软件包;
  • 可以在查询系统中的软件包是否安装以及其版本;
  • 作为开发者可以把自己的程序打包为RPM 包发布;
  • 软件包签名GPG和MD5的导入、验证和签名发布
  • 依赖性的检查,查看是否有软件包由于不兼容而扰乱了系统;

RPM 的使用权限

RPM软件的安装、删除、更新只有root权限才能使用;对于查询功能任何用户都可以操作;如果普通用户拥有安装目录的权限,也可以进行安装;

rpm 命令格式

  • rpm [OPTION] [PACKAGE_FILe]

    • 安装 :-i ; --install
    • 升级 :-U ; --update or -F ; --Freshen
    • 卸载 :-e ; --erase
    • 查询 :-q ; --query
    • 校验 :-V ; --verify
    • 数据库维护 :--builddb ; --initdb

安装

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

  • 通用选项:
    • -v: verbose ,详细信息。
    • -vv :更详细的输出信息。
  • [Install_Option]

    • -h: hash marks输出进条,每个#表示2%的进度。

    rpm -ivh PACKAGE _file…

    • --test:测试安装,检查并报告依赖关系及冲突消息等。
    • --nodeps:忽略依赖关系。 不建议这么做。
    • --replacekgs:重新安装。
    • --noscripts:不运行脚本。
    • --nosignature:不检查包签名信息,不检查 来源全法性。
    • --nodigest:不检查包完整性信息。

注意:
rpm可以自带脚本。常用的脚本可分为四类:

  • preinstall:安装过程开始之前运行的脚本,%pre , –nopre
  • postinstall :安装过程完成之后运行的脚本 ,%post , –nopost
  • preuninstall : 卸载过程真正开始执行之前运行的脚本, %preun , –nopreun
  • postuninstall :卸载过程完成之后运行的脚本, %postun, –nopostun

例如:

[root@caibird ~]# rpm -ivh zsh-4.3.11-4.el6.centos.2.x86_64.rpm         
Preparing...                ########################################### [100%]
   1:zsh                    ########################################### [100%]
[root@caibird ~]# rpm -q zsh-4.3.11-4.el6.centos.2.x86_64.rpm 
package zsh-4.3.11-4.el6.centos.2.x86_64.rpm is not installed
[root@caibird ~]# rpm -ivh zsh-4.3.11-4.el6.centos.2.x86_64.rpm 
Preparing...                ########################################### [100%]
    package zsh-4.3.11-4.el6.centos.2.x86_64 is already installed
[root@caibird ~]# rpm -q zsh-4.3.11-4.el6.centos.2.x86_64.rpm 
package zsh-4.3.11-4.el6.centos.2.x86_64.rpm is not installed

升级或安装

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

  • 格式 :

    rpm -Uvh PACKAGE_FILE…

    • -U :升级或安装。

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

    • -F :升级。
  • [install-options]:

    • --oldpackage:降级。
    • --force:强制升级。

注意:

  • a, 不要对内核做升级操作。linux支持多内核并存。因此,可直接安装新版本内核。
  • b .如果某原程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重名(FILENAME.rpmnew)后提供。

卸载

rpm {-e | –erase} [–allmatches] [–justdb] [–nodeps] [–noscripts] [–notriggers] [–test] PACKAGE_NAME …

  • 格式:

    rpm { -e | –erase } [erase-option] PACKAGE_name…

    • [erase-option]
    • --allmatches:卸载所有匹配指定名称的程序包的各 版本。
    • --nodeps:忽略依赖关系。
    • --test : 测试卸载。dry run 模式。

例如:

[root@caibird ~]# rpm -e --test tree
[root@caibird ~]# rpm -q tree
tree-1.5.3-3.el6.x86_64
[root@caibird ~]# rpm -e tree
[root@caibird ~]# rpm -q tree
package tree is not installed
[root@caibird ~]# 

查询

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

  • 格式:
    rpm {q | –query } [select-options] [ query-options]

    • [select-options]
      • PACKAGE_NAME :查询指定的程序包是否已经安装,及其版本号。
      • -a,--all : 查询所有已经安装过的包。
      • -f FILE :查询指定的文件由哪个安装包生成。
      • -p,--package PACKAGE-file : 用于实现未安装的程序包执行查询操作。
      • --whatprovides CAPABILITY :查询指定的CAPABILITY由哪个程序包提供。
      • --whatrequires CAPABILITY :查询指定的CAPABILITY被哪个包所依赖。
    • [query-options]
      • --changelog :查询rpm包的changelog。
      • -l, --list : 程序安装产生的所有文件列表。
      • -i,--info :程序包相关信息,版本号,大小,所属的包组,等等。
      • -c, --configfiles:查询指定的程序包提供的配置文件。
      • -d, --docfiles : 查询指定的程序包提供的文档。
      • --provides :列出指定的程序包所提供的所有的CAPABILITY。
      • -R, --requires
  • 查询一些常用 用法:

    • -qi PACKAGE
    • -qf FILE
    • -ql PACKAGE
    • -qc PACKAGE
    • -qd PACKAGE
    • -qpi PACKAGE-FILE
    • -qpc PACKAGE-FILE

例如:

[root@caibird ~]# rpm -q -f /etc/issue          # /ect/issue 是由哪个程序产生的
centos-release-6-9.el6.12.3.x86_64
[root@caibird ~]# 

[root@caibird ~]# rpm -q -c bash               # bash程序产生的配置文件
/etc/skel/.bash_logout
/etc/skel/.bash_profile
/etc/skel/.bashrc
[root@caibird ~]# 

[root@caibird ~]# rpm -q -i bash                 # bash程序包相关信息,版本号,大小,所属的包组,等等。
Name        : bash                         Relocations: (not relocatable)
Version     : 4.1.2                             Vendor: CentOS
Release     : 48.el6                        Build Date: 20170323日 星期四 081720秒
Install Date: 20180429日 星期日 231250秒      Build Host: c1bm.rdu2.centos.org
Group       : System Environment/Shells     Source RPM: bash-4.1.2-48.el6.src.rpm
Size        : 3142529                          License: GPLv3+
Signature   : RSA/SHA1, 20170323日 星期四 225939秒, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://www.gnu.org/software/bash
Summary     : The GNU Bourne Again shell
Description :
The GNU Bourne Again shell (Bash) is a shell or command language
interpreter that is compatible with the Bourne shell (sh). Bash
incorporates useful features from the Korn shell (ksh) and the C shell
(csh). Most sh scripts can be run by bash without modification.
[root@caibird ~]# 

[root@caibird ~]# rpm -q -l  bash           # bash程序包安装后产生的文件列表 。
/bin/bash
/bin/sh
/etc/skel/.bash_logout
/etc/skel/.bash_profile
/etc/skel/.bashrc
/usr/bin/bashbug-64
/usr/share/doc/bash-4.1.2/COPYING
/usr/share/info/bash.info.gz
/usr/share/locale/af/LC_MESSAGES/bash.mo
/usr/share/locale/bg/LC_MESSAGES/bash.mo
/usr/share/locale/ca/LC_MESSAGES/bash.mo
/usr/share/locale/cs/LC_MESSAGES/bash.mo
/usr/share/locale/de/LC_MESSAGES/bash.mo
/usr/share/locale/en@boldquot/LC_MESSAGES/bash.mo
/usr/share/locale/en@quot/LC_MESSAGES/bash.mo
/usr/share/locale/eo/LC_MESSAGES/bash.mo
/usr/share/locale/es/LC_MESSAGES/bash.mo
/usr/share/locale/et/LC_MESSAGES/bash.mo
/usr/share/locale/fi/LC_MESSAGES/bash.mo
/usr/share/locale/fr/LC_MESSAGES/bash.mo
/usr/share/locale/ga/LC_MESSAGES/bash.mo
/usr/share/locale/hu/LC_MESSAGES/bash.mo
/usr/share/locale/id/LC_MESSAGES/bash.mo
/usr/share/locale/ja/LC_MESSAGES/bash.mo
/usr/share/locale/lt/LC_MESSAGES/bash.mo
/usr/share/locale/nl/LC_MESSAGES/bash.mo
/usr/share/locale/pl/LC_MESSAGES/bash.mo
/usr/share/locale/pt_BR/LC_MESSAGES/bash.mo
/usr/share/locale/ro/LC_MESSAGES/bash.mo
/usr/share/locale/ru/LC_MESSAGES/bash.mo
/usr/share/locale/sk/LC_MESSAGES/bash.mo
/usr/share/locale/sv/LC_MESSAGES/bash.mo
/usr/share/locale/tr/LC_MESSAGES/bash.mo
/usr/share/locale/vi/LC_MESSAGES/bash.mo
/usr/share/locale/zh_TW/LC_MESSAGES/bash.mo
/usr/share/man/man1/..1.gz
/usr/share/man/man1/:.1.gz
/usr/share/man/man1/[.1.gz
/usr/share/man/man1/alias.1.gz
/usr/share/man/man1/bash.1.gz
/usr/share/man/man1/bashbug.1.gz
/usr/share/man/man1/bg.1.gz
/usr/share/man/man1/bind.1.gz
/usr/share/man/man1/break.1.gz
/usr/share/man/man1/builtin.1.gz
/usr/share/man/man1/builtins.1.gz
/usr/share/man/man1/caller.1.gz
/usr/share/man/man1/cd.1.gz
/usr/share/man/man1/command.1.gz
/usr/share/man/man1/compgen.1.gz
/usr/share/man/man1/complete.1.gz
/usr/share/man/man1/compopt.1.gz
/usr/share/man/man1/continue.1.gz
/usr/share/man/man1/declare.1.gz
/usr/share/man/man1/dirs.1.gz
/usr/share/man/man1/disown.1.gz
/usr/share/man/man1/enable.1.gz
/usr/share/man/man1/eval.1.gz
/usr/share/man/man1/exec.1.gz
/usr/share/man/man1/exit.1.gz
/usr/share/man/man1/export.1.gz
/usr/share/man/man1/fc.1.gz
/usr/share/man/man1/fg.1.gz
/usr/share/man/man1/getopts.1.gz
/usr/share/man/man1/hash.1.gz
/usr/share/man/man1/help.1.gz
/usr/share/man/man1/history.1.gz
/usr/share/man/man1/jobs.1.gz
/usr/share/man/man1/let.1.gz
/usr/share/man/man1/local.1.gz
/usr/share/man/man1/logout.1.gz
/usr/share/man/man1/mapfile.1.gz
/usr/share/man/man1/popd.1.gz
/usr/share/man/man1/pushd.1.gz
/usr/share/man/man1/read.1.gz
/usr/share/man/man1/readonly.1.gz
/usr/share/man/man1/return.1.gz
/usr/share/man/man1/set.1.gz
/usr/share/man/man1/sh.1.gz
/usr/share/man/man1/shift.1.gz
/usr/share/man/man1/shopt.1.gz
/usr/share/man/man1/source.1.gz
/usr/share/man/man1/suspend.1.gz
/usr/share/man/man1/times.1.gz
/usr/share/man/man1/trap.1.gz
/usr/share/man/man1/type.1.gz
/usr/share/man/man1/typeset.1.gz
/usr/share/man/man1/ulimit.1.gz
/usr/share/man/man1/umask.1.gz
/usr/share/man/man1/unalias.1.gz
/usr/share/man/man1/unset.1.gz
/usr/share/man/man1/wait.1.gz
[root@caibird ~]# 

校验

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                         # MD5校验和
 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 7RPM-GPG-KEY-CENTOS-7 ; centos 6 RPM-GPG-KEY-CentOS-6
  • 导入密钥文件的命令:rpm -import /media/cdrom/RPM-GPG-KEY-CentOS
  • 在本地系统上密钥文件位于:centos 6 /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 ; centos7 /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
  • 获取并导入 信任的包制作者的密钥,对于centos发行版本来说: 以centos 7为例:
    • rpm -import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
      验证: 1.。安装此组织签名的程序时,会自动执行验证。2。 手动验证: rpm -k PACKAGE-FILe.

数据库重建

rpm 管理数据库路径: /var/lib/rmp/ ; 查询操作是通过此数据库进行。

  • 数据库重建
    • 获取rpm有关数据库帮助
      • centos 6 –> man rpm
      • centos 7 –> man rpmdb
    • 数据库重建命令格式: rpm { --initdb | --rebuilddb}
      • --initdb :初始化数据库,当前无任何数据库可实现初始化创建一个新的;当前有时不执行任何操作。
      • --rebuilddb :重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建。

yum

  • 简介

    • Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
    • yum 属于 c/s 架构,即client and server.
  • yum的工作原理

yum的工作需要两部分来合作,一部分是yum服务器端,还有就是client的yum工具客户端。

  • yum 服务器端

所有要发行的rpm包都放在yum服务器上以提供别人来下载,rpm包根据kernel的版本号,cpu的版本号分别编译发布。yum服务器只要提供简单的下载就可以了,例如:ftp://[path],nft:://[path]或者httpd://[path]的形式都可以,本地刚使用file://[localpath]。yum服务器有一个最重要的环节就是整理出每个rpm包的基本信息,包括rpm包对应的版本号,conf文件,binary信息,以及很关键的依赖信息。在yum服务器上提供了createrepo工具,用于把rpm包的基本概要信息做成一张”清单”,这张”清单”“就是描述每个rpm包的spec文件中信息。
yum repository (yum repo) :存储了众多的rpm包,以及包相关的元数据文件(放置于特定的目录下:repodata)

  • yum client端

client每次调用yum install或者search的时候,都会去解析/etc/yum.repos.d下面所有以.repo结尾的配置文件,这些配置文件指定了yum服务器的地址。yum会定期去”更新”yum服务器上的rpm包”清单”,然后把”清单”下载保存到yum自己的cache里面,根据/etc/yum.conf里配置(默认是在/var/cache/yum下面),每次调用yum装包的时候都会去这个cache目录下去找”清单”,根据”清单”里的rpm包描述从而来确定安装包的名字,版本号,所需要的依赖包等,然后再去yum服务器下载rpm包安装。(前提是不存在rpm包的cache)
/etc/yum.conf:为所有仓库提供公共配置的。
/ect/yum.repos.d/*.repo :为某一个仓库提供特有的配置的。

仓库的定义

[repositoryID]
name=some name for this repository    # 定义仓库的名字
baseurl=URL://path/to/repository/     # '='两边不能有空格,否则会出现语法错误,可以指定多个URL。
enable={1|0}                          # 是否启用此仓库。默认启用, 为 1。
gpgcheck={1|0}                        # 是否对仓库所有程序包在安装之前检查完整性,来源合法性。
repo-gpgcheck={1|0}                   # 是否对repo源数据文件检查签名信息。
gpgkel=URL                            # 密钥文件的访问路径,GPG的密钥文件 -->RPM-GPG-KEY-CENTOS-7  
enablegroups={1|0}                    #是否在仓库使用组来批量管理程序包。
failovermethod={roundrobin|priority}  #故障转移方法,随机选一个(roundrobin)优先级自上而下(priority),默认为roundrobin,意为随机。
cost=1000                             #开销数字,默认为1000。

创建本地仓库

[root@caibird cdrom]# cat /etc/yum.repos.d/CentOS-Base.repo
[base]
name=local repository centos6
baseurl=file:///mnt/cdrom
enable=1
gpgcheck=1
pgpkey=/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

[root@caibird cdrom]# yum repolist
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
仓库标识                                              仓库名称                                                              状态
base                                                  local repository centos6                                              6,706
repolist: 6,706
[root@caibird cdrom]# 

创建网络源仓库

[root@localhost yum.repos.d]# vim CentOS-Base.repo
[root@localhost yum.repos.d]# yum repolist
已加载插件:fastestmirror, langpacks
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
Loading mirror speeds from cached hostfile
源标识                                              源名称                                                                  状态
!base                                               network repository centos7                                              9,911
repolist: 9,911
[root@localhost yum.repos.d]# yum makecache
已加载插件:fastestmirror, langpacks
base                                                                                                      | 3.4 kB  00:00:00     
(1/4): base/prestodelta                                                                                   | 255 kB  00:00:00     
(2/4): base/filelists_db                                                                                  | 1.5 MB  00:00:05     
(3/4): base/other_db                                                                                      | 248 kB  00:00:00     
(4/4): base/primary_db                                                                                    | 2.7 MB  00:00:05     
Loading mirror speeds from cached hostfile
元数据缓存已建立
[root@localhost yum.repos.d]# cat CentOS-Base.repo
[base]
name=network repository centos7
baseurl=https://mirrors.aliyun.com/centos/7.5.1804/updates/x86_64/
enabel=1
gpgcheck=0

[root@localhost yum.repos.d]# 

yum 命令使用格式

  • yum [options] [command] [package …]

[options]常用选项:

  • -h, --help : # 显示此帮助消息并退出
  • -t, --tolerant :# 忽略错误
  • -C, --cacheonly : # 完全从系统缓存运行,不升级缓存
  • -c [config file], --config=[config file]: #配置文件路径
  • -R [minutes], --randomwait=[minutes] : # 命令最长等待时间
  • -d [debug level], --debuglevel=[debug level] : # 调试输出级别
  • --showduplicates : # 在 list/search 命令下,显示源里重复的条目
  • -e [error level], --errorlevel=[error level]:# 错误输出级别
  • --rpmverbosity=[debug level name]:# RPM 调试输出级别
  • -q, --quiet :# 静默执行
  • -v, --verbose :# 详尽的操作过程
  • -y, --assumeyes :# 回答全部问题为是
  • --assumeno :# 回答全部问题为否
  • --version :# 显示 Yum 版本然后退出
  • --installroot=[path]:# 设置安装根目录
  • --enablerepo=[repo] :#启用一个或多个软件源(支持通配符)
  • --disablerepo=[repo] :#禁用一个或多个软件源(支持通配符)
  • -x [package], --exclude=[package]:# 采用全名或通配符排除软件包
  • --disableexcludes=[repo]:# 禁止从主配置,从源或者从任何位置排除
  • --disableincludes=[repo] :# disable includepkgs for a repo or for everything
  • --obsoletes :# 更新时处理软件包取代关系
  • --noplugins :# 禁用 Yum 插件
  • --nogpgcheck :# 禁用 GPG 签名检查
  • --disableplugin=[plugin] :# 禁用指定名称的插件
  • --enableplugin=[plugin]:# 启用指定名称的插件
  • --skip-broken :# 忽略存在依赖关系问题的软件包
  • --color=COLOR :# 配置是否使用颜色
  • --releasever=RELEASEVER:# 在 yum 配置和 repo 文件里设置 $releasever 的值
  • --downloadonly :# 仅下载而不更新
  • --downloaddir=DLDIR :# 指定一个其他文件夹用于保存软件包
  • --setopt=SETOPTS :# 设置任意配置和源选项
  • --bugfix :# Include bugfix relevant packages, in updates
  • --security :# Include security relevant packages, in updates

[command]选项:

  • yum check-update :     # 检查可更新的所有软件包
  • yum update :        #下载更新系统已安装的所有软件包
  • yum upgrade :        #大规模的版本升级,与yum update不同的是,连旧的淘汰的包也升级
  • yum install:         #安装新软件包
  • yum update :         #更新指定的软件包
  • yum remove :         #卸载指定的软件包
  • yum groupinstall :      #安装指定软件组中的软件包
  • yum groupupdate :      #更新指定软件组中的软件包
  • yum groupremove :       #卸载指定软件组中的软件包
  • yum grouplist:       # 查看系统中已经安装的和可用的软件组
  • yum list:          #列出资源库中所有可以安装或更新以及已经安装的rpm包
  • yum list:          #列出资源库中与正则表达式匹配的可以安装或更新以及已经安装的rpm包
  • yum list available :    #列出资源库中所有可以安装的rpm包
  • yumlist available :    #列出资源库中与正则表达式匹配的所有可以安装的rpm包
  • yumlist updates :    #列出资源库中所有可以更新的rpm包
  • yum list updates :   #列出资源库中与正则表达式匹配的所有可以更新的rpm包
  • yum list installed :   # 列出资源库中所有已经安装的rpm包
  • yum list installed :  #列出资源库中与正则表达式匹配的所有已经安装的rpm包
  • yum list extras  :   #列出已经安装的但是不包含在资源库中的rpm包
  • yum list extras :    # 列出与正则表达式匹配的已经安装的但是不包含在资源库中的rpm包
  • yum list recent  :   #列出最近被添加到资源库中的软件包
  • yum search  :      #检测所有可用的软件的名称、描述、概述和已列出的维护者,查找与正则表达式匹配的值
  • yum provides :      #检测软件包中包含的文件以及软件提供的功能,查找与正则表达式匹配的值
  • yum clean headers :    #清除缓存中的rpm头文件
  • yum clean packages :   # 清除缓存中rpm包文件
  • yum clean all :      #清除缓存中的rpm头文件和包文件
  • yum deplist :       # 显示软件包的依赖信息

注意: 当第一次使用yum 或yum 资源库有更新时,yum 会自动下载所有所需的he ade rs放置于 /var/cache /yum 目录下,所需时间可能较长。还可以使用 yum info 命令列出包信息,yum info 可用的参数与 yum list 的相同。 yum 命令还可以使用 -y 参数用于用 ye s 回答命令运行时所提出的问题,比如 yum -y install vsftpd,这样在安装软件的时候就不用输入yes/y了。

如何使用光盘当作本地的YUM仓库

  • 首先挂载光盘到某目录 ,例如 :/media/cdrom
  • 第二步创建配置文件。

    [centos 7]
    name=
    baseurl=
    gpgcheck=
    enable=

    • yum的repo配置文件中可用的变量
    • $releasever #代表当前的操作系统
    • $arch : #代表当前系统的平台 x86,i386,x64(amd)…
    • $bashearch #代表基础平台、
  • 第三步:配置仓库后,运行yum repolist 命令列出所有可用的仓库,第一次用的时候会先从服务器下载元数据 base/primary_db到本地。
  • 第四步,运行yum makecache,命令,运行yum makecache生成缓存。

sed 命令

简介
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

sed : Stream Editor,流编辑器。是一种以行为单位处理的文字编辑器。
grep , egrep , fgrep:文本过滤器。
awk:文本格式化工具,报告生成器。

sed 命令格式

sed [OPTION]… ‘script’ [input=file]…

常用选项:

  • -n :不输出模式空间中的内容到屏幕。
  • -e script ; –exprision=script; 多点编辑,能同时指定多个’script’.
  • -f/PATH/TO/SED_SCRIPT_FILE :以文件的内容为脚本格式执行命令。
  • r , –regexp_extended : 支持使用扩展正则表达式。
  • -i [SUFFIX],–in-place[=SUFFIX] : 直接编辑原文件。

地址定界

  • a. 不给地址(空地址):作用域是对全文进行处理。
  • b . 单地址:

    • . # : 指定行
    • /pattern/ : 被此模式所匹配到的每一行。
  • c . 地址范围

    • #1,# 2:从#1到#2之间的行。
    • #,+#2 : 从#1形始到#2的行。
    • #,/pat/ :
    • /pat1/,/pat2/ :
    • $ : 最后一行。
  • d. 步进

    • 1-2 :所有奇数行。
    • 2-2 : 所有偶数行。

    编辑命令

  • d :删除,整行删除。
  • p: 显示模式空间中的内容。
  • a \text:在行后面追加文本’text’,支持使用\n实现多行追加。
  • i \text:在行前面插入文本’text’,支持使用\n实现 多行插入。
  • c\ text:把匹配到的行替换为此处指定的文本’text‘。
  • w /PATH/TO/SOMEFILE:保存模式空间匹配到的行到指定的文件中。
  • r /PATH/TO/SOMEFILE:读取指定文件的内容至当前文件被模式匹配到的行后面,实现文件合并。
  • = :为模式匹配到的行打印行号。
  • :条件取反。 地址定界!编辑命令
  • s/// : 查找替换,其分隔符可以自行指定,常用的有s@@@ , S### 等。
  • g: 全局替换。
  • w /PATH/TO/FILENAME: 将替换成功的结果保存至指定文件中。
  • p: 显示替换成功的行。
例子:

sed -n '2p' test.txt 打印第二行的信息(注意:-n是不打印不匹配的信息,若没加-n,则打印文件的所有信息而不是匹配信息)
sed -n '1,4p' test.txt 打印第一行到第四行的信息
sed -n '/los/p' test.txt模式匹配los,并打印出来
sed -n '2,/los/p' test.txt 从第二行开始。。知道匹配第一个los
sed -n '/^$/p' test.txt 匹配空行
sed -n -e '/^$/p' -e '/^$/=' test.txt 打印空行及行号
sed -n '/good/a\morning' test.txt 在匹配到的good后面附加morning
sed -n '/good/i\morning' test.txt 在匹配到的good前面插入morning
sed -n '/good/c\morning' test.txt 将匹配到的good替换成morning
sed '1,2d' test.txt 删除第12行
sed 's/good/good morning/g' test.txt 匹配good并替换成goodmorning
send 's/good/& hello /p' test.txt 匹配到good就在其后面加上hello
send 's/good/ hello &/p' test.txt 匹配到good就在其前面加上hello
高级编辑命令
  • -h :把模式空间的内容覆盖到保持空间中。
  • -H : 把模式空间的内容追加到保持空间中。
  • -g : 把保持空间中的的内容覆盖至模式空间中。
  • -G : 把保持空间中的内容追加至模式空间中。
  • -x : 把模式空间中的内容与保持空间中的内容互换。
  • -n :读取匹配到的行的下一行覆盖至模式空间中。
  • -N : 追加读取匹配到的行的下一行到模式空间中。
  • -d :删除模式空间中的
  • -D :删除多行模式空间中的所有行。

示例

sed -n 'n;p' file :             #显示偶数行
sed ' 1!G;h;$1d' file :         #逆序显示
sed '$!d'  file :               #取出最后一行
sed '$!N;$!D'  file :           #取出最后二行
sed '/^$/d;G' file :            #删除原有的所有空行,而后为所有的非空白添加一个空白行。
sed 'n;d' file :                #显示奇数行  
sed 'G' file :                  #在原有的每行后方添加一个空白行。
[root@caibird ~]# cat -n /etc/fstab 
     1  
     2  #
     3  # /etc/fstab
     4  # Created by anaconda on Sun Apr 29 23:12:37 2018
     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=586c8191-c63f-4263-8eed-01f0655513f2 /                       ext4    defaults        1 1
    10  UUID=f971264c-f0f7-4150-a22a-914c00dcb16e /boot                   ext4    defaults        1 2
    11  UUID=e12d2a8f-f7ba-4bd3-87ae-e1b755ee627c swap                    swap    defaults        0 0
    12  tmpfs                   /dev/shm                tmpfs   defaults        0 0
    13  devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
    14  sysfs                   /sys                    sysfs   defaults        0 0
    15  proc                    /proc                   proc    defaults        0 0
[root@caibird ~]# cat -n /etc/fstab | sed 'G'     #在原文的第一行后方添加一个空白行
     1  

     2  #

     3  # /etc/fstab

     4  # Created by anaconda on Sun Apr 29 23:12:37 2018

     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=586c8191-c63f-4263-8eed-01f0655513f2 /                       ext4    defaults        1 1

    10  UUID=f971264c-f0f7-4150-a22a-914c00dcb16e /boot                   ext4    defaults        1 2

    11  UUID=e12d2a8f-f7ba-4bd3-87ae-e1b755ee627c swap                    swap    defaults        0 0

    12  tmpfs                   /dev/shm                tmpfs   defaults        0 0

    13  devpts                  /dev/pts                devpts  gid=5,mode=620  0 0

    14  sysfs                   /sys                    sysfs   defaults        0 0

    15  proc                    /proc                   proc    defaults        0 0

[root@caibird ~]# 

[root@caibird ~]# cat -n /etc/fstab | sed -n '1,5p'   #打印第一行到第五行
     1  
     2  #
     3  # /etc/fstab
     4  # Created by anaconda on Sun Apr 29 23:12:37 2018
     5  #
[root@caibird ~]# 

[root@caibird ~]# cat -n /etc/fstab | sed  '1,5d'              #删除第1到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=586c8191-c63f-4263-8eed-01f0655513f2 /                       ext4    defaults        1 1
    10  UUID=f971264c-f0f7-4150-a22a-914c00dcb16e /boot                   ext4    defaults        1 2
    11  UUID=e12d2a8f-f7ba-4bd3-87ae-e1b755ee627c swap                    swap    defaults        0 0
    12  tmpfs                   /dev/shm                tmpfs   defaults        0 0
    13  devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
    14  sysfs                   /sys                    sysfs   defaults        0 0
    15  proc                    /proc                   proc    defaults        0 0
[root@caibird ~]# 

[root@caibird ~]# sed -n 3p /etc/fstab           # 显示第三行
# /etc/fstab
[root@caibird ~]# 

[root@caibird ~]# sed -n  /^UUID/p /etc/fstab    # 显示以UUID开头的行
UUID=586c8191-c63f-4263-8eed-01f0655513f2 /                       ext4    defaults        1 1
UUID=f971264c-f0f7-4150-a22a-914c00dcb16e /boot                   ext4    defaults        1 2
UUID=e12d2a8f-f7ba-4bd3-87ae-e1b755ee627c swap                    swap    defaults        0 0
[root@caibird ~]# 

[root@caibird ~]# cat -n /etc/fstab | sed 'n;d';=:  /etc/fstab   #显示奇数行并打印等号。
     1  
     3  # /etc/fstab
     5  #
     7  # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
     9  UUID=586c8191-c63f-4263-8eed-01f0655513f2 /                       ext4    defaults        1 1
    11  UUID=e12d2a8f-f7ba-4bd3-87ae-e1b755ee627c swap                    swap    defaults        0 0
    13  devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
    15  proc                    /proc                   proc    defaults        0 0
-bash: =:: command not found
[root@caibird ~]# 


[root@caibird ~]# cat -n /etc/issue
     1  CentOS release 6.9 (Final)
     2  Kernel \r on an \m
     3  
[root@caibird ~]# sed s/release/banben/ /etc/issue              #替换release为banben
CentOS banben 6.9 (Final)
Kernel \r on an \m

[root@caibird ~]# 


[root@caibird ~]# sed /UUID/a\newUUID /etc/fstab              #在文件内容UUID行下面行添加newUUID

#
# /etc/fstab
# Created by anaconda on Sun Apr 29 23:12:37 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
#
UUID=586c8191-c63f-4263-8eed-01f0655513f2 /                       ext4    defaults        1 1
newUUID
UUID=f971264c-f0f7-4150-a22a-914c00dcb16e /boot                   ext4    defaults        1 2
newUUID
UUID=e12d2a8f-f7ba-4bd3-87ae-e1b755ee627c swap                    swap    defaults        0 0
newUUID
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
[root@caibird ~]# 

猜你喜欢

转载自blog.csdn.net/qq_34150037/article/details/80679679