shell编程及rpm包

1. shell编程

   case 实现条件判断, 无论是case后面还是值后面都是没有任何标点符号的。

   case支持通配符, 如果想要表示其他的话, 可以使用*放到最后。 用*表示其他。

 

2. 用tar打包的文件或则目录,这些文件或则目录的的ACL(访问控制列表)权限会丢失。

 

3. tar命令:

-c     打包文件

-t  查看包文件内容

-x     解包

 

4. cpio可用来打包和解包文件:

    cpio -ov  > xxx.cpio

    cpio -tv < xxx.cpio

    要解包文件

cpio -iv < xxx.cpio

cpio -idv < etc.cpio

 

cpio命令可以用来减压rpm包,实际上rpm包其实也是压缩文件。

 

5. basename 这个命令本身就可以求基名

basename  绝对路径   //   命令执行的结果为最后一个字段的值。

[root@centos6 tmp]# basename /etc/fstab/a/

a

 

6. 在使用$@或则是$*的话, 一定要加双引号"", 否则的话, 两则的效果是一样的。

 

7. echo -e "xxxxx"

-e 这个参数, 下面还自带了许多的转译字符。

-e参数作用的字符串。  

\t  表示tab键。     \n   表示换行。   \c  表示不换行

-e参数还可以使字体背景带有颜色。

 

8. /etc/issue 这个配置文件是在系统没有输入用户名和密码之前, 字符界面系统下系统的提示符。

  /etc/bashrc 这些用户启动配置, echo 一些语句, 当你在系统登陆后, 或则是ssh进入系统后, 这些话就会被打印到系统之上。

 

9. for i in `ls /testdir/`;

//这样的话i的值, 为/testdir目录下的文件名,而非整个绝对路径。

  for i in `ls /testdir/*`;

// 这样的话i的值,为/testdir目录下的文件名, 且为绝对路径。

这一点对文件操作的脚本有有一定的帮助, 有时候对文件草错的话, 要的就是绝对路径, 而非只是一个基名。

   

10. 修改密码的另外一种方式:

echo 用户名:密码  | chpasswd

    添加用户的另外一种方式

newuser users_file

 

11. $变量引用变量的时候, 变量直接在后面紧跟着一些字符的话, 但是这些字符并不是变量的组成部分时,一定要用{}大括号将变量括起来。尤其在数组中, 一定要用大括号括起来。 这其实也是${}的作用。

 

12.因为shell是一种弱解释类型的语言。 使用变量的话, 是不需要提前定义的。 直接用就行。 变量的默认为字符串的0, 但是这个0只可以做运算, 是不可以做比较的。

[ $defalut == 0 ]  [ $defalut -eq 0 ]  这些都是不对的

 

13.有时候,在做测试的时候, 当我们不需要防火墙的话,我们可以关闭防火墙这个服务, 也可以将防火前的规则策略清空 iptables -F, 这样的话防火墙就不会影响到我们了。

 

14. $[]   let 运算   for(())  变量前面可以加$, 也可以不加$.

 

15. 软件运行的坏境:

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

静态编译

共享编译: .so

编译后得到的是汇编。

 

16. ldd 二进制文件  // 可用来查看该二进制调用的库

当这些库中有部分库中找不到时, 这个二进制文件就不能使用了。

 

17. 库级别的虚拟化:

Linux: WINE  Linux系统模拟Windows系统

Windows:Cywin  Windows系统模拟Linux系统

就像在Windows下下载一个天天模拟器, 就可以使用安卓系统了。其实这个就用到了库级别的虚拟化。 安装一定的软件就可以模拟出库文件。

 

18. Linux系统下的头文件放在/usr/include文件中。

 

19. 一个二进制文件包括: 库  配置文件  帮助文档

 

20. rpm 包命名方式:

name-VERSION-release.arch.rpm

VERSION: 版本

release: release.OS

arch(硬件平台架构) : X86_86  i686(32为操作系统)  noarch(指该软件和系统硬件架构无关)

 

21. dnf也可以安装yum包, 并且在将来有可能会替代yum.dnf 现在一下fedora系统下测试。

 

22. ldd 二进制文件

    ldconfig -p 二进制文件

 

23. rpm -q name  可用来查看该name名字的rpm是否安装。


24. 二进制引用程序的组成部分:

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

25.  程序包的管理器:

debian: deb文件、dpkg包管理器

redhat: rpm文件,rpm包管理器

rpm: Rredhat Package Manager

RPM Package Manager


26. 包命名:

源代码: 源代码一般都以压缩包的形式存在

name-VERSION.tar.gz|bz2|xz

VERSION: major.minor.release

 

27. rpm包命名方式:

name-VERSION-release.arch.rpm

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

VERSION: major. minor. release

release : release.OS

 

28. 常见的arch:

X86(32位):i386,i486,i586,i686

X86_64:X64,X86_64,amd64

powerpc: ppc

跟平台无关: noarch

 

29. 包分类:

Application-VERSION-ARCH.rpm : 主包

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

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

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

包之间存在依赖关系, 甚至是循环依赖。

 

30. ldd  二进制文件  // 查看依赖的库文件

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

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

名及文件路径映射关系

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

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

 

31. rpm -ivh

-i  –install

-v  — 过程可见

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

 

安装选项:

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

–nodeps :忽略依赖关系

–replacepkgs | replacefiles

–replacepkgs  当系统中已有这个包的时候, 也要装

–replacefiles   当系统中的文件和别的包文件一致的话任要安装的话, 也要装

–replacepkgs  :  

–nosignature:  不检查来源合法性

–nodigest :不检查包完整性

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

%pre: ; 安装前脚本; –nopre

%post: ; 安装后脚本; –nopost

%preun: ; 卸载前脚本; –nopreun

%postun:  卸载后脚本; –nopostun

 

32. rpm 包升级:

升级:

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

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

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

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

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

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

rpm -Uvh PACKAGE_FILE …

rpm -Fvh PACKAGE_FILE …

–oldpackage :降级

–force:  强行升级

 

33. 升级注意事项

v  注意:

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

,对直接安装新版本内核

(2)  如果原程序包的配置文件安装后曾被修改,升级时,新版本

的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而

把新版本的文件重命名(FILENAME.rpmnew)

 

34. 在Windows系统下, 在cmd运行窗口中输入winver 可以查看系统的版本。


 练习题:

1>. 每隔3秒钟到系统上获取已经登录的用户的信息;如果发现用户hacker登录,则将登录时间和1主机记录于日志/var/log/login.log中,并提示该用户退出系统。

until false;
do
        if w | grep -q "^hacker\b" ; then
                echo "hacker is online!"
                echo "GET OUT!!!" | write hacker
                w | grep "^hackerb" | tr -s  " " | cut -d" "  -f4 >> /var/log/login.log
                w | grep "^hackerb" | tr -s  " " | cut -d" "  -f3 >> /var/log/login.log
        fi
 
        sleep 3
done

~       

 

2>.随机生成10以内的数字,实现猜字游戏,提示比较大或小,相等则退出

echo -n "游戏发起者产生一个10以内的数字"
random=`echo "$[$RANDOM%10]"`
echo "随机数:$random"
until false;
do
        read -p "参与游戏着猜一个数:" num
        if [ $num -lt $random ];then
                echo "小了"
        elif [ $num -gt $random ];then
                echo "大了"
        else
                echo "猜对了"
                break
fi
done

3>.随机生成10以内的数字,实现猜字游戏,提示比较大或小,相等则退出

echo -n "游戏发起者产生一个10以内的数字"
max=`echo $RANDOM`
min=$max
tennum="$max"
times=1
until [ $times -gt 9 ];
do
random=`echo $RANDOM`
tennum="${tennum} ${random}"
if [ $random -gt $max ];then
max=$random
elif [ $random -lt $min ];then
min=$random
fi
let times++
done
echo "Ten numbers:"
echo ${tennum}
echo "max=$max"
echo "min=$min"

 

4>. 编写脚本,求100以内所有正整数之和

i=1
sum=0
until [ $i -gt 100 ];
do
        let sum=$sum+$i
        let i++
done
echo "1+2+3+..+100=$sum"
 
5>. 编写脚本,打印九九乘法表

i=1
j=1
until [ $i -gt 9 ];
do
        until [ $j -gt $i ];
        do
                echo -ne "$j*$i=`expr $j \* $i`\t"              
                let j++
        done
j=1
let i++
echo ""
done

 

6>. 随机生成10以内的数字,实现猜字游戏,提示比较大或小,相等则退出

echo -n "游戏发起者产生一个10以内的数字"
random=`echo "$[$RANDOM%10]"`
echo "随机数:$random"
until false;
do
        read -p "参与游戏着猜一个数:" num
        if [ $num -lt $random ];then
                echo "小了"
        elif [ $num -gt $random ];then
                echo "大了"
        else
                echo "猜对了"
                break
fi
done

7>. 编写脚本,实现打印国际象棋棋盘

i=0
j=0
until [ $i -gt 7 ];
do
until [ $j -gt 7 ];
do
bool=$[(i+j)%2]
if [ $bool -eq 0 ];then
echo -en "\033[41m  \033[m"
else
echo -en "\033[47m  \033[m"
fi
let j++
done
echo ""
let i++
j=0
done

8>.打印等腰三角形

#!/bin/bash
read -p "Input the line you want print: " line
nline=1
i=0;j=0
until [ $nline -eq $[line+1] ];do
until [ $[line-nline-i ] -eq 0 ];do
echo -n " "
((i++))
done
i=0
until [ $[ 2*nline-1-$j ] -eq 0 ];do
echo -ne "\e[35;5m*\e[0m"
((j++))
done
j=0
((nline++))
echo ""
done

 

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

(0)
458813466458813466
上一篇 2016-08-18
下一篇 2016-08-18

相关推荐

  • linux的基础小命令

    1、ifconfig,显示主机的IP地址 2、echo 用法echo [short-option]… [string]…     -n:不进行换行     string可以使用单引号或双引号引用变量,单引号变量内容不会替换,双引号会替换  &nb…

    Linux干货 2016-10-30
  • 脚本练习

    脚本练习: 1、编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小。 #!/bin/bash #功能:编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,…

    Linux干货 2016-08-12
  • 虚拟化技术介绍、Xen的简单实现

    虚拟化是什么? 虚拟化是一种资源管理技术, 是将计算机的各实体资源, 如服务、网络、内存及存储等, 予以抽象、转换后呈现出来, 打破实体之间的不可切割的障碍, 使用户可以比原本的配置更好的方式来应用这些资源。这些资源的新虚拟部分是不受现有资源的架设方式, 地域或物理配置所限制。一般情况下, 虚拟化资源包括计算能力和数据存储 —<转自维基百科&…

    2016-05-31
  • 推荐-HA专题: 编译安装并配置DRBD

    HA专题: 编译安装并配置DRBD 前言 实验环境 DRBD介绍 安装前准备工作 获取并编译安装DRBD 配置DRBD 分区 配置文件 启动并设置DRBD 格式化并挂载 验证冗余性 总结 前言 上篇我们讲到使用corosync+pacemaker实现MySQL高可用, 但是NFS容易成为单点故障从而导致数据丢失等严重问题, 我们可以使用drbd来实现MySQ…

    Linux干货 2016-04-12
  • Linux用户及用户组管理

    马哥网络教育22期第三周练习 Linux用户及用户组管理 Linux是个多用户多任务的分时操作系统,所有一个要使用系统资源的用户都必须先向系统管理员申请一个账号,然后以这个账号的身份进入系统。用户的账号一方面能帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也能帮助用户组织文件,并为用户提供安全性保护。每个用户账号都拥有一个惟一的…

    Linux干货 2016-09-19
  • shell脚本语言中的选择执行

    shell脚本语言中的选择执行 概述 程序执行过程分为顺序执行、选择执行和循环执行。顺序执行是指程序按照步骤一步一步地运行。选择执行是指程序根据特定条件选择两项或者多项中的一项运行。循环执行是指程序根据特定条件重复执行直到某个节点结束,继续运行其他步骤。本篇文章从判断条件和条件判断式简要说明shell脚本语言中程序选择执行的用法。 shell脚本中的判断条件…

    Linux干货 2017-04-17

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-21 23:25

    文章写的很零散,博客不是笔记,不是罗列,需要自己有一个清晰的思路哦。可以多看看优秀的博客,看你看他们是怎么写的,尝试写出优秀的博文。