千家信息网

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

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,tartar -cf 路径+文件名字后续.tar +路径 创建归档压缩tar cf /testdir/etc.tar /etc/tar cvf 可以查看解压过程tar tvf 预览作用tar xvf
千家信息网最后更新 2026年11月02日tar ,cpio打包解压. shell脚本for,while,until循环. rpm包管理,select循环菜单,函数function,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


列表生成方式:

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


传一行处理一行


(( ))

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


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

可以实现了一个分支判断


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


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

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


函数返回值

函数有两种返回值:

函数的执行结果返回值:

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

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

函数的退出状态码:

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

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

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

return 0 无错误返回。

return 1-255 有错误返回


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


source funs 当前shell运行

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

函数的定义和使用:

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

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

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

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

调用:给定函数名

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

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

专门找一个文件放函数,

要使用的时候在shell中使用

.函数 或者 source 函数。

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


函数变量


局部变量

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

变量作用域:

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

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

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

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

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

local NAME=VALUE


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

无限fun


pstree查看父子进程


包的查询

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

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

rpm -q --whatrequires bash

查询哪个包依赖bash能力

--changelog:查询rpm包的changelog

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

-d: 查询程序的文档

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


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

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


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

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

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


rpm -q --provides

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

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

yum install tree 装tree包

yum list |grep tree 查看包的出处

yum remove +包名卸载

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

显示仓库列表:

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

yum history 查看yum历史


用循环实现国际象棋棋盘

9*9乘法表



文件 函数 程序 循环 变量 管理 查询 脚本 仓库 升级 命令 条件 路径 运行 配置 内核 工具 版本 检查 数据 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳市人人互联网科技有限公司 西安纸贵互联网科技有限公司 科技互联网公司装修 朗新科技与工业互联网 万易互联网科技 西安互联网科技 世界互联网领先科技成果 互联网金融科技创新 亿账通互联网科技 四川狮子座互联网科技 衡水科技产业互联网平台 安控科技rtu产品工业互联网 新华互联网科技2019 赶超互联网科技 微信多开 玉溪互联网科技怎么选 世界互联网领先科技成果获奖 伊宁互联网科技做什么的 上海乐五互联网科技有限公司 优雇互联网科技有限公司 高科技和互联网的现代国家 咖啡 深圳恒合互联网络科技有限公司 北京互联网科技有限公司 互联网科技公司电话 科技与互联网的利与弊 青岛中康互联网医疗科技有限公司 苏州铭阳互联网科技有限公司 互联网企业科技类企业如何做账 产业互联网科技服务公司 北京品多多互联网科技有限公司
0