一、压缩软件(二)
tar
tar [OPTION]... (1) 创建归档 tar -c -f / PATH/TO/SOMEFILE .tar FILE... tar cf / PATH/TO/SOMEFILE .tar FILE... (2) 查看归档文件中的文件列表 tar -t -f /PATH/TO/SOMEFILE .tar(3) 展开归档 tar -x -f /PATH/TO/SOMEFILE .tar tar -x -f /PATH/TO/SOMEFILE .tar -C /PATH/ 结合压缩工具实现:归档并压缩 -j: bzip2, -z: gzip, -J: xz
cpio
复制 从或到文件 cpio命令是通过重定向的方式将文件进行打包备份,还原恢复的工具,它可以解压以“.cpio” 或者“.tar” 结尾的文件。 cpio [ 选项] > 文件名或者设备名 cpio [ 选项] < 文件名或者设备名 选项 -o 将文件拷贝打包成文件或者将文件输出到设备上 -i 解包,将打包文件解压或将设备上的备份还原到系统 -t 预览,查看文件内容或者输出到设备上的文件内容 -v 显示打包过程中的文件名称。 -d 解包生成目录,在cpio 还原时,自动的建立目录 -c 一种较新的存储方式
示例
将etc 目录备份: find ./etc -print |cpio -ov >etc.cpio 内容预览 cpio –tv < etc.cpio 要解包文件 cpio –iv <etc.cpio cpio –idv < etc.cpio
二、shell编程(三)(循环)
循环
循环执行 将某代码段重复运行多次 重复运行多少次: 循环次数事先已知 循环次数事先未知 有进入条件和退出条件 for, while, until
for 循环
for 变量名 in 列表;do 循环体 done 执行机制 : 依次将列表中的元素赋值给“变量名”;每次赋值后即执行一次循环体;直到列表中的元素耗尽,循环结束 列表生成方式: (1)直接给出列表 1 2 3 4 5 6 7 8 9 10 (2)整数列表: (a){start..end} echo {1..10} 1 2 3 4 5 6 7 8 9 10 (b)$(seq [start [step]] end) [root@6 bin]# seq 0 10 100 0 10 20 30 40 50 60 70 80 90 100 (3)返回列表的命令 $(COMMAND) (4)使用glob, , 如:*.sh (5)变量引用; $@, $*
while 循环
while CONDITION; do 循环体doneCONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后会再次做判断;条件为“true”,则执行一次循环;直到条件测试状态为“false” 终止循环 因此:CONDTION一般应该有循环控制变量;而此变量的值会在循环体不断地被修正 进入条件:CONDITION 为true; 退出条件:CONDITION 为false
until 循环
until CONDITION; do 循环体done进入条件: CONDITION 为false退出条件: CONDITION 为true
循环控制语句continue
用于循环体中continue [N]:提前结束第N层的本轮循环,而直接进入下一轮判断;最内层为第1层while CONDTIITON1; do CMD1 ... if CONDITION2; then continue fi CMDn ...done
循环控制语句break
用于循环体中break [N] :提前结束第N层循环,最内层为第1层while CONDTIITON1; do CMD1 ... if CONDITION2; then break fi CMDn ...done
创建无限循环
while true; do 循环体doneuntil false; do 循环体 Done
三、软件包管理
软件运行环境
API :Application Programming InterfacePOSIX :Portable OS程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接 静态编译: 共享编译:.soABI :Application Binary InterfaceWindows 与Linux 不兼容 ELF(Executable and Linkable Format) PE(Portable Executable) 库级别的虚拟化: Linux: WINE Windows: Cywin
开发语言
系统级开发 C C++ 应用级开发 java delphi Python go php perl ruby
包管理器
二进制应用程序的组成部分: 二进制文件、库文件、配置文件、帮助文件 程序包管理器: debian :deb 文件, dpkg 包管理器 redhat: rpm 文件, rpm 包管理器 rpm: Redhat Package Manager RPM Package Manager
包命名
源代码:name-VERSION.tar.gz|bz2|xz VERSION: major.minor.release rpm 包命名方式: name-VERSION-release.arch.rpm 例: :bash-4.2.46-19.el7.x86_64.rpm VERSION: major.minor.release release :release.OS 常见的arch: : x86: i386, i486, i586, i686 x86_64: x64, x86_64, amd64 powerpc: ppc 跟平台无关:noarch
包命名和工具
包:分类 和 拆包 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
包管理器
程序包管理器: 功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作1、包文件组成 ( 每个包独有) RPM 包内的文件 RPM 的元数据,如名称,版本,依赖性,描述等 安装 或卸载时运行的脚本2 、数据库( 公共) 程序包名称及版本 依赖关系 功能说明 包安装后生成的各文件路径及校验码信息
程序包的来源
管理程序包的方式: 使用包管理器:rpm 使用前端工具:yum, dnf 获取程序包的途径: (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包管理
CentOS 系统上使用rpm 命令管理程序包: 安装、卸载、升级、查询、校验、数据库维护 安装: rpm {-i|--install} [install-options] PACKAGE_FILE… -v: verbose -vv: -h: 以# 显示程序包管理执行进度 rpm -ivh PACKAGE_FILE ...
rpm 包安装
[install-options] --test: 测试安装,但不真正执行安装;dry run 模式 --nodeps :忽略依赖关系 --replacepkgs (重新安装相同的程序)| replacefiles(有重合的部分安装文件,强制安装) --nosignature: 不检查来源合法性 --nodigest :不检查包完整性 --noscr ipts :不执行程序包脚本片断 %pre: ; 安装前脚本; --nopre %post: ; 安装后脚本; --nopost %preun: ; 卸载前脚本;--nopreun %postun: 卸载后脚本; --nopostun
rpm 包升级
升级:rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...rpm {-F|--freshen} [install-options] PACKAGE_FILE ... upgrade :安装有旧版程序包,则“升级” 如果不存在旧版程序包,则“安装” freshen :安装有旧版程序包,则“升级” 如果不存在旧版程序包,则不执行升级操作 rpm -Uvh PACKAGE_FILE ... rpm -Fvh PACKAGE_FILE ... --oldpackage :降级 --force: 强行升级
升级注意项
注意: (1)不要对内核做升级操作;Linux支持多内核版本并存,因此,对直接安装新版本内核 (2)如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew) 后保留
积累应用
1、for、until、while实现倒三角形
#! /bin/bash #author:lvasu #description: #version:0.1 #date: read -p "请输入三角形行数:" line # 每行左侧空格数=n-i # 每行的*的数量=2*i-1 for ((i=1;i<=line;i++)) do for ((j=1;j<=(line-i);j++)) do echo -n " " done for ((k=(2*i-1);k>=1;k--)) do echo -n "*" done echo done echo '========================' # 每行左侧空格数=n-i # 每行*的数量=2*i-1 i=1; while [ $i -le $line ];do space=$[$line-$i]; #每行左侧的空格数 xing=$[$i*2-1]; #每行*的数量 j=1; while [ $j -le $space ];do echo -n " " let j++ done k=$[space+xing] while [ $k -gt $space ];do echo -n "*" let k-- done echo let i++ done echo '========================' # 每行左侧空格数=n-i # 每行的最后一个*位置=space+xing=n-i+2*i-1=n+i-1 i=1; until [ $i -gt $line ];do j=1; space=$[$line-$i]; #每行左侧的空格数 xing=$[$i*2-1]; #每行*的数量 until [ $j -gt $space ];do echo -n " " let j++ done k=$[space+xing] until [ $k -le $space ];do echo -n "*" let k-- done echo let i++ done
2、for、until、while实现国际象棋棋盘
qipan3.sh #! /bin/bash #author lvasu #description: #version:0.1 #date: i=1; while [ $i -le 8 ];do j=1; while [ $j -le 8 ];do num=$[($i+$j)%2] if [ $num -eq 1 ];then if [ $j -ne 8 ];then echo -ne '\E[41m \E[0m' else echo -e '\E[41m \E[0m' fi else if [ $j -ne 8 ];then echo -ne '\E[42m \E[0m' else echo -e '\E[42m \E[0m' fi fi let j++ done let i++ done #! /bin/bash #author lvasu #description: #version:0.1 #date: i=1; while [ $i -le 8 ];do j=1; while [ $j -le 8 ];do num=$[($i+$j)%2] if [ $num -eq 1 ];then echo -ne '\E[41m \E[0m' else echo -ne '\E[42m \E[0m' fi let j++ done echo let i++ done
原创文章,作者:lvasu,如若转载,请注明出处:http://www.178linux.com/38124
评论列表(1条)
文章整体架构清晰,层次分明,通过实例演示让内容更为充实饱满,再接再厉。