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
评论列表(1条)
文章写的很零散,博客不是笔记,不是罗列,需要自己有一个清晰的思路哦。可以多看看优秀的博客,看你看他们是怎么写的,尝试写出优秀的博文。