tar ,cpio打包解压. shell脚本for,while,until循环. rpm包管理,循环的特殊用法. select循环菜单,函数function,rpm包查询,yum

tar 

tar -cf 路径+文件名字后续.tar  +路径 创建归档压缩

tar cf /testdir/etc.tar /etc/

tar cvf 可以查看解压过程

tar tvf 预览作用

tar xvf 解压文件 

tar zcvf /testdir/etc2.tar.gz /etc/ 解压再压缩到指定路径,文件格式

tar jcvf  

cpio

复制 从或到文件

cpio 命令是通过重定向的方式将文件进行打包备份,还原恢复的工具,它可以解压以“.cpio”或者".tar"

结尾的文件。

cpio[选项] > 文件名或者设备名

cpio[选项] < 文件名或者设备名

-o 将文件拷贝打包成文件或者将文件输出到设备上

-i 解包,将打包文件解压或将设备上的备份还原到系统

-t 预览,查看文件内容或者输出到设备上的文件内容

-v 显示打包过程中的文件名称。

-d 解包生成目录,在cpio还原时,自动的建立目录

-c 一种较新的存储方式

cpio -ivd < /root/etc.cpio

shell 脚本

循环执行

    将某代码段重复运行多次

重复运行多少次:

循环次数事先已知

循环次数事先未知

有进入条件和退出条件

for, while, until

for

for 变量名 in 列表;do

循环体

;done

for NAME [in WORDS … ] : do COMMANDS :done

循环列表

for id in "$@" 

do

echo "the number is $id"

done

QQ图片20160818145700.png

列表生成方式:

(1) 直接给出列表

(2) 整数列表:

(a) {start..end}

(b) $(seq[start [step]] end)

(3) 返回列表的命令

$(COMMAND)

(4) 使用glob,如:*.sh

(5) 变量引用;

$@, $*

while循环

while CONDITION; do

循环体

done

CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后会再次做判断;条件为“true”,则执行一次循环;直到条件测试状态为“false”终止循环

因此:CONDTION一般应该有循环控制变量;而此变量的值会在循环体不断地被修正

进入条件:CONDITION为true

退出条件:CONDITION为false

until循环

until CONDITION; do

循环体

done

进入条件:CONDITION 为false

退出条件:CONDITION 为true

循环控制语句continue

continue(中断当次循环)

break (打断之后的循环)

exit(直接退出脚本)

while CONDTIITON1; do

CMD1

if CONDITION2; then

continue(break)

fi

CMDn

done

创建无限循环

while true; do

循环体

done

until false; do

循环体

Done

软件包管理

程序源代码–>预处理–>编译–>汇编–>链接

Windows与Linux不兼容

(二进制文件的格式都不相同)

java

二进制文件格式为.class

可以通过进行二次编译使二进制文件能够在各种平台上运行。

包管理器

二进制应用程序的组成部分:

二进制文件、库文件、配置文件、帮助文件

程序包管理器:

debian:deb文件, dpkg包管理器

redhat: rpm文件, rpm包管理器

rpm: RedhatPackage Manager

RPM Package Manager

源代码:name-VERSION.tar.gz|bz2|xz

rpm包命名方式:

name-VERSION-release.arch.rpm

例:bash-4.2.46-19.el7.x86_64.rpm

常见的arch:

x86: i386, i486, i586, i686

x86_64: x64, x86_64, amd64powerpc: ppc

跟平台无关:noarch

noarch是兼容版本,32位文件能在64位系统运行,但64位文件不能在32位系统中运行。

包的分类和拆包

Application-VERSION-ARCH.rpm: 主包

Application-devel-VERSION-ARCH.rpm开发子包

Application-utils-VERSION-ARHC.rpm其它子包

Application-libs-VERSION-ARHC.rpm其它子包

包之间:可能存在依赖关系,甚至循环依赖

解决依赖包管理工具:

yum(主要使用工具):rpm包管理器的前端工具

apt-get:deb包管理器前端工具

zypper: suse上的rpm前端管理工具

dnf(还在测试阶段的新工具): Fedora 18+ rpm包管理器前端管理工具

查看二进制程序所依赖的库文件:

ldd/PATH/TO/BINARY_FILE

管理及查看本机装载的库文件:

ldconfig

/sbin/ldconfig-p: 显示本机已经缓存的所有可用库文件

名及文件路径映射关系

配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf

缓存文件:/etc/ld.so.cache

第三方软件,安装之后要将路径写入库文件夹

才能调进内存中。

包管理器

rpm

程序包管理器:

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

1、包文件组成(每个包独有)

RPM包内的文件

RPM的元数据,如名称,版本,依赖性,描述等

安装或卸载时运行的脚本

(安装包前要看检查包里面的内容,防止恶意脚本运行。)

2、数据库(公共)

程序包名称及版本

依赖关系(包的依赖性全部在)

功能说明

包安装后生成的各文件路径及校验码信息

(可以对比程序是否发生变化)

管理程序包的方式:

使用包管理器:rpm

使用前端工具:yum

获取程序包的途径:

(1) 系统发版的光盘或官方的服务器;

CentOS镜像:

https://www.centos.org/download/

http://mirrors.aliyun.com

http://mirrors.sohu.com

http://mirrors.163.com

(2) 项目官方站点

(3) 第三方组织:

Fedora-EPEL:

Extra Packages for Enterprise Linux

Rpmforge:RHEL推荐,包很全

搜索引擎:

http://pkgs.org

http://rpmfind.net

http://rpm.pbone.net

https://sourceforge.net/

(4) 自己制作

注意:检查其合法性:来源合法性,程序包的完整性

rpm包的管理

rpm -i 安装

CentOS系统上使用rpm命令管理程序包:

安装、卸载、升级、查询、校验、数据库维护

安装:

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

-v: verbose

-vv: 更详细地显示内容

-h: 以#显示程序包管理执行进度

rpm -ivh PACKAGE_FILE …

rpm -ivh

    -e 卸载 

    –test: 测试安装,但不真正执行安装;dry run模式

–nodeps:忽略依赖关系

–replacepkgs| replacefiles

(同一个包,版本一样。覆盖安装 | 版本号,文件名不一样,但里面有重复的文件,覆盖安装。)

–nosignature: 不检查来源合法性

–nodigest:不检查包完整性

–noscipts:不执行程序包脚本片断

%pre: 安装前脚本;–nopre

%post: 安装后脚本;–nopost

%preun: 卸载前脚本;–nopreun

%postun: 卸载后脚本;–nopostun

升级:

rpm -U

rpm -F

upgrade:安装有旧版程序包,则“升级”

如果不存在旧版程序包,则“安装”

freshen:安装有旧版程序包,则“升级”

如果不存在旧版程序包,则不执行升级操作

–oldpackage:降级

–force: 强行升级(强制命令。可以混搭其他指令使用)

注意:

ls kernel-* 查看内核包

内核是安装,rpm -ivh kernel-*. 保留旧内核,安装新内核。可以通过重启开机选择运行的内核版本。

(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,对直接安装新版本内核

(升级会删除旧的内核版本)

(2) 如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留

while

特殊用法

while read line :do

(输入不输入变量都是真$?=0)

while read -p "good morning"hello;do echo $hello ;done (会一直循环访问你)

传一行处理一行

QQ图片20160821141451.png

(( ))

C语言风格的(( ))用法

i=10; let i++;echo $i

i=10; ((i++));echo $i

for循环的特殊格式

for((exp1;exp2;exp3))

do

cmd

done

for ((i=1;i<10;i++));

do

echo $i;

done

打印出数字1到9

QQ图片20160821141846.png

for循环的特殊格式:

for ((控制变量初始化;条件判断表达式;控制变量的修正表达式))

do

循环体

done

    控制变量初始化:仅在运行到循环代码段时执行一次

    控制变量的修正表达式:每轮循环结束会先进行控制变量修正运算,而后再做条件判断

select循环与菜单

select variable in list

do

循环体命令

done

select 循环主要用于创建菜单,按数字顺序排列的菜单项将显示在标准错误上,并显示PS3 提示符,等待用户输入

用户输入菜单列表中的某个数字,执行相应的命令

用户输入被保存在内置变量REPLY 中。

select menu in gbjd kr lm;do echo $menun ;done

$menu 可以被 gbjd kr lm 内容替代,可以通过指定使用变量1,2,3使用。

QQ图片20160821142729.png

可以实现了一个分支判断

$REPLY 显示的是你输入的内容

PS3=" "

            (默认是输入的数值为可选择数值)

select menu 

do

caes $menu in

gbjd)

echo" "

;;

lm)

echo" "

;;

kr)

echo" "

;;

*)

echo" "

;;

esac

done

函数function 

由若干条shell命令组成的语句块,实现代码重用和模块化编程。

函数也是一段代码,与当前shell并行关系。

函数由两部分组成:函数名和函数体。

语法一:

function f_name{

…函数体…

}

语法二:

function f_name(){

…函数体…

}

语法三:

f_name(){

…函数体…

}

function fun1 (){

echo "this is a fun1"

 }

fun1

直接用fun1就等于使用了里面的指令,不等于变量,不需要加$.

QQ图片20160821143846.png

set 用来看内存的环境变量,也可以看到在内存的函数。

unset +函数名 可以释放内存中的函数。

函数返回值

函数有两种返回值:

函数的执行结果返回值:

(1) 使用echo或printf命令进行输出

(2) 函数体中调用命令的输出结果

函数的退出状态码:

(1) 默认取决于函数中执行的最后一条命令的退出状态码

(2) 自定义退出状态码,其格式为:

return 从函数中返回,用最后状态命令决定返回值

return 0 无错误返回。

return 1-255 有错误返回

return +数字 可以用echo $? 查询到函数指定的数值

source funs 当前shell运行

. funs 等于在当前目录下打开一个shell。

QQ图片20160821144323.png

函数的定义和使用:

            可在交互式环境下定义函数

            可将函数放在脚本文件中作为它的一部分

            可放在只包含函数的单独文件中

                        调用:函数只有被调用才会执行;

                            调用:给定函数名

                            函数名出现的地方,会被自动替换为函数代码

                            函数的生命周期:被调用时创建,返回时终止

专门找一个文件放函数,

要使用的时候在shell中使用

.函数 或者 source 函数。

(函数本身不用加执行权限)

函数变量

局部变量

local +变量 定义的变量函数内部使用。

变量作用域:

环境变量:当前shell和子shell有效

本地变量:只在当前shell进程有效,为执行脚本会启动专用子shell进程;因此,本地变量的作用范围是当前shell脚本程序文件,包括脚本中的函数。

局部变量:函数的生命周期;函数结束时变量被自动销毁

注意:如果函数中有局部变量,如果其名称同本地变量,使用局部变量。

在函数中定义局部变量的方法

local NAME=VALUE

fun (){ let i++;echo "$i";fun; }

无限fun

pstree查看父子进程

QQ图片20160821144624.png

包的查询

rpm -q 查询

-a: 所有包

-f: 查看指定的文件由哪个程序包安装生成

rpm -qf 

即使删除了,数据库还有记录,能查询。

rpm -ql 可以查询包里面的文件。

l+包名。

-p rpmfile:针对尚未安装的程序包文件做查询操作;

rpm -qpl /root/tree.rpm

表示查询还没有安装包里面文件查询,要配合p,p+文件名。

–whatprovidesCAPABILITY:查询指定的CAPABILITY由哪个包所提供

CAPABILITY:能力 (关键字作用)

rpm -q –whatprovides bash

查询那个包提供了bash能力

QQ图片20160821144909.png

–whatrequiresCAPABILITY:查询指定的CAPABILITY被哪个包所依赖

rpm -q –whatrequires bash

查询哪个包依赖bash能力

QQ图片20160821145004.png

–changelog:查询rpm包的changelog

-c: 查询程序的配置文件

-d: 查询程序的文档

-i: information 查询包的具体信息

-l: 查看指定的程序包安装后生成的所有文件;

–scripts:程序包自带的脚本片断

-R: 查询指定的程序包所依赖的CAPABILITY;

rpm -qR bash 查看bash依赖哪些包

QQ图片20160821145119.png

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

rpm -q –provides 

QQ图片20160821145226.png

rpm2cpio 包文件|cpio–itv预览包内文件

rpm2cpio tree.rpm |cpio -tv 预览

rpm2cpio 包文件|cpio–id “*.conf”释放包内文件

rpm2cpio tree.rpm |cpio -idv +所选指定文件的路径 

解压缩指定包内的文件

yum是建立在rpm之上

rpm -e +包名字 卸载

rpm -e kernel 卸载内核会卸载不成功

–allmatches 全部卸载

–nodeps 卸载不考虑依耐性

–noscripts 卸载不运行脚本

–notriggers 卸载不触发

–test 不真实卸载

包检验

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

导入公钥

可以通过公钥检测包的签名

rpm -V tree 检查包跟原来的差别

rpm -K|checksigrpmfile检查包的完整性和签名

rpm -K tree.rpm  检查包是否被破坏

检查的前提是要先导入钥匙

包来源合法性验正及完整性验正:

完整性验正:SHA256

来源合法性验正:RSA

公钥加密:

对称加密:加密、解密使用同一密钥;

非对称加密:密钥是成对儿的

public key: 公钥,公开所有人

secret key: 私钥, 不能公开

rpm -V tree 检查包跟原来的差别

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

rpm数据库

/var/lib/rpm

initdb: 初始化

如果事先不存在数据库,则新建之

否则,不执行任何操作

rebuilddb:重建

无论当前存在与否,直接重新创建数据库

yum

解决包的依赖性

YUM:Yellowdog Update Modifier,rpm的前端程序,用来解决软件包相关依赖性,可以在多个库之间点位软件包,up2date的代替工具。

yum的仓库

yum repository: yum repo,存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录repodata下)

路径写父目录

文件服务器:

ftp://

http://

file:///

文件共享yum的仓库

/etc/yum.conf

/etc/yum.repos.d

QQ图片20160821145827.png

repo配置文件

vim base.repo (必须文件repo结尾)

[base]        (仓库名字自定义。但是5版本前的必须使用bash名字,不然会出错)

name=centos 7  (自定义)

baseurl=http://10.1.0.1/cobbler/ks_mirror/7/ (网络上存有的仓库路径,路径写到父目录就可以使用)

gpgcheck=1      (是否使用钥匙鉴定(1是0否))

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Centos-7  (本机自带的公共钥匙库路径)

enabled=1         (是否启用yum仓库)

yum repolist 查看显示资源库的配置

QQ图片20160821150954.png

yum install tree 装tree包

QQ图片20160821151210.png

yum list |grep tree 查看包的出处

QQ图片20160821150643.png

yum remove +包名卸载

QQ图片20160821150513.png

yum客户端配置文件:

/etc/yum.conf:为所有仓库提供公共配置

/etc/yum.repos.d/*.repo:为仓库的指向提供配置

yum-config-manager –add-repo= http://172.16.0.1/cobbler/ks_mirror/CentOS-X-x86_64/

自动生成仓库

yum-config-manager –disable “仓库名" 禁用仓库

yum-config-manager –enable “仓库名” 启用仓库

cat /var/log/yum.log 查看yum的日志

QQ图片20160821151307.png

显示仓库列表:

repolist[all|enabled|disabled]

显示程序包:

list

# yum list [all | glob_exp1] [glob_exp2] […]

# yum list {available|installed|updates} [glob_exp1] […]

安装程序包:

install package1 [package2] […]

reinstall package1 [package2] […] (重新安装)

升级程序包:

update [package1] [package2] […]

downgrade package1 [package2] […] (降级)

检查可用升级:

check-update

卸载程序包:

remove | erase package1 [package2] […]

info […]可安装和可更新的RPM包 信息

查看程序包information。

provides | whatprovidesfeature1 [feature2] […]

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

清理本地缓存:

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

yum clean all 清理所有缓存

(用来清理旧的错误数据)

构建缓存:

makecache

yum makecache 

yum search tree 搜索关键字

blob.png

yum history 查看yum历史

blob.png

用循环实现国际象棋棋盘

blob.png

blob.png

9*9乘法表

blob.png

blob.png

原创文章,作者:swzczx,如若转载,请注明出处:http://www.178linux.com/38250

(0)
swzczxswzczx
上一篇 2016-08-21
下一篇 2016-08-21

相关推荐

  • Shell脚本基础练习

    脚本编程能力是作为运维工程师不可或缺的一项基本技能,各种系统的运维,如果完全靠命令行一条一条命令来执行,工作效率可想而知,而脚本却可以将完成一定功能的各个命令依据一定的流程控制,逻辑判断去完成某种功能,提升工作效率。学习shell脚本,光学习理论是远远不够的,所以在学习中要多多练习,下面就看一些关于shell脚本基础的练习 (1) 编写脚本/root/bin…

    2017-08-05
  • nfs 安装及基于 nfs 安装部署 mysql 与 httpd

    nfs安装及基于nfs安装部署mysql以及httpd.pdf

    Linux干货 2016-11-07
  • 运维学习笔记-看看别人家的Puppet代码

    这篇博客的目的是通过分析Forge上的Puppet模块来加深一些概念的理解,同时了解一些常用用法。 今天的例子是jfryman-nginx模块,它是原puppetlabs-nginx模块的升级版本,依赖3个Puppet公共模块:puppetlabs-apt,puppetlabs-stdlib和puppetlabs-concat。安装非常方便,puppet m…

    Linux干货 2016-06-23
  • Linux命令学习总结:cp命令

    Linux命令学习总结:cp命令 命令简介:      cp命令用来复制文件或目录。指令英文原义:copy,copy files and directories      指令所在路径:/bin/cp 命令语法: cp [OPTION]… [-T]   SO…

    Linux干货 2017-07-23
  • Linux系统认知

    前言 在认识Linux系统之前先介绍下计算机的组成构造及其功能: 1,简单来说计算机可以划分为软件系统和硬件系统: (1)软件系统自不必说就是各种不同的程序,协助用户更好地使用电脑。 (2)硬件系统指的是主机、显示器、鼠键等硬件设备。 2,按冯诺依曼体系可将计算机按逻辑构成分为: (1)CPU(运算器、控制器)。运算器是数据处理装置,用来完成对数据的算术运算…

    Linux干货 2016-09-20
  • 7月19号:计算机基础+在VMware12中安装CentOS6.8

        16号从正下暴雨的武汉来到帝都参加马哥培训班,从清河公寓亮哥开始,到宿舍另外五位室友,渐渐认识更多人,还算适应额不错。但走在北京的马路上,多少还是有些陌生,不过就如宿舍一样,来的时候脏兮兮,经过一番打扫后,干净了不少,我也会很快习惯在这边的生活,精力全放在linux上!   &nb…

    Linux干货 2016-08-05

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-22 13:40

    文章对当天的知识总结的很全面,态度端正,做事看做人,对学习有个好的态度,学习也不会辜负你,加油哦。