tar ,cpio打包解压. shell脚本for,while,until循环. rpm包管理,select循环菜单,函数function,yum

时间:2022-06-20 20:30:10

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

tar ,cpio打包解压. shell脚本for,while,until循环. rpm包管理,select循环菜单,函数function,yum


列表生成方式:

(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 (会一直循环访问你)


传一行处理一行

tar ,cpio打包解压. shell脚本for,while,until循环. rpm包管理,select循环菜单,函数function,yum


(( ))

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

tar ,cpio打包解压. shell脚本for,while,until循环. rpm包管理,select循环菜单,函数function,yum


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使用。

tar ,cpio打包解压. shell脚本for,while,until循环. rpm包管理,select循环菜单,函数function,yum

可以实现了一个分支判断


$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就等于使用了里面的指令,不等于变量,不需要加$.

tar ,cpio打包解压. shell脚本for,while,until循环. rpm包管理,select循环菜单,函数function,yum


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

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


函数返回值

函数有两种返回值:

函数的执行结果返回值:

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

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

函数的退出状态码:

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

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

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

return 0 无错误返回。

return 1-255 有错误返回


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


source funs 当前shell运行

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

tar ,cpio打包解压. shell脚本for,while,until循环. rpm包管理,select循环菜单,函数function,yum

函数的定义和使用:

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

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

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

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

                            调用:给定函数名

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

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

专门找一个文件放函数,

要使用的时候在shell中使用

.函数 或者 source 函数。

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


函数变量


局部变量

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

变量作用域:

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

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

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

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

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

local NAME=VALUE


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

无限fun


pstree查看父子进程

tar ,cpio打包解压. shell脚本for,while,until循环. rpm包管理,select循环菜单,函数function,yum


包的查询

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能力

tar ,cpio打包解压. shell脚本for,while,until循环. rpm包管理,select循环菜单,函数function,yum

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

rpm -q --whatrequires bash

查询哪个包依赖bash能力

tar ,cpio打包解压. shell脚本for,while,until循环. rpm包管理,select循环菜单,函数function,yum

--changelog:查询rpm包的changelog

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

-d: 查询程序的文档

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


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

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


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

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

tar ,cpio打包解压. shell脚本for,while,until循环. rpm包管理,select循环菜单,函数function,yum

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


rpm -q --provides 

tar ,cpio打包解压. shell脚本for,while,until循环. rpm包管理,select循环菜单,函数function,yum

rpm2cpio 包文件|cpio�Citv预览包内文件

rpm2cpio tree.rpm |cpio -tv 预览



rpm2cpio 包文件|cpio�Cid “*.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

tar ,cpio打包解压. shell脚本for,while,until循环. rpm包管理,select循环菜单,函数function,yum

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 查看显示资源库的配置

tar ,cpio打包解压. shell脚本for,while,until循环. rpm包管理,select循环菜单,函数function,yum

yum install tree 装tree包

tar ,cpio打包解压. shell脚本for,while,until循环. rpm包管理,select循环菜单,函数function,yum

yum list |grep tree 查看包的出处

tar ,cpio打包解压. shell脚本for,while,until循环. rpm包管理,select循环菜单,函数function,yum

yum remove +包名卸载

tar ,cpio打包解压. shell脚本for,while,until循环. rpm包管理,select循环菜单,函数function,yum

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的日志

tar ,cpio打包解压. shell脚本for,while,until循环. rpm包管理,select循环菜单,函数function,yum

显示仓库列表:

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 搜索关键字

tar ,cpio打包解压. shell脚本for,while,until循环. rpm包管理,select循环菜单,函数function,yum

yum history 查看yum历史

tar ,cpio打包解压. shell脚本for,while,until循环. rpm包管理,select循环菜单,函数function,yum


用循环实现国际象棋棋盘

tar ,cpio打包解压. shell脚本for,while,until循环. rpm包管理,select循环菜单,函数function,yum

tar ,cpio打包解压. shell脚本for,while,until循环. rpm包管理,select循环菜单,函数function,yum

9*9乘法表

tar ,cpio打包解压. shell脚本for,while,until循环. rpm包管理,select循环菜单,函数function,yum

tar ,cpio打包解压. shell脚本for,while,until循环. rpm包管理,select循环菜单,函数function,yum



本文出自 “zczx_展鸿” 博客,请务必保留此出处http://swzczx.blog.51cto.com/11767585/1840851