上篇总结了一下配置Linux网络、修改主机名称、Linux用户管理、打包与压缩和进程管理,言语混乱,不成文章。纵然如此,亦不能自暴自弃,以盼终有一日能小有所成。好了,逼装完了,第三篇正文,起~~~
1.rpm 与 yum:
1.1 rpm:
rpm 是 redhat package manager 的缩写,适用于redhat 和 CentOS。
安装rpm 包:
[root@localhost ~]# rpm -ivh ypserv //vh 参数用于显示安装进度
如果ypserv 已经安装会导致安装失败,强制安装可以使用 --force 参数:
[root@localhost ~]# rpm -ivh ypserv --force
更新rpm 包:
[root@localhost ~]# rpm -Uvh ypserv
查询系统中安装的所有的包:
[root@localhost~ ]# rpm -qa
查询yqserv ……文件是否已经安装:
[root@localhost ~]# rpm -q ypserv //方法一
[root@localhost ~]# rpm -qa | grep ypserv //方法二
查询软件包的详细信息:
[root@localhost ~]# rpm -qi ypserv
查询安装了ypserv 包后都产生了哪些文件:
[root@localhost ~]# rpm -ql ypserv
查询/usr/sbin/ypserv 文件是因为安装哪个包时出现的:(与 rpm -ql 命令作用相反)
[root@localhost ~]# rpm -qf /usr/sbin/ypserv
卸载lrzsz 包:
[root@localhost ~]# rpm -e lrzsz
此时如果有依赖关系可能会导致卸载失败,不管是否依赖都强制删除可以使用 --nodeps 参数:
[root@localhost ~]# rpm -e lrzsz --nodeps
1.2 yum:
在使用 rpm 命令安装包时,有可能会出现循环依赖的问题,比如安装a包需要依赖b包,安装b包需要依赖c包,安装c包需要依赖a包,此时需要使用 yum 命令。
yum 有点类似 app store, 可以从网络上获取安装包进行安装。同时 yum 也可以设置本地源。在设置本地源之前,需要先将所要用到的 iso 文件做成 yum 源:
[root@localhost ~]# mount -o loop /tmp/learn/CentOS-6.6-i386-bin-DVD1.iso /mnt
上条命令将/tmp/learn/CentOS-6.6-i386-bin-DVD1.iso文件做成 yum 源后放置在 /mnt 目录下。做完 yum 源后,需要修改配置,使得 yum 命令可以从本地查找文件,进入如下目录:
[root@localhost ~]# cd /etc/yum.repos.d/
该目录中的文件名均需要以 .repo 结尾。可以在该目录下新建一个文件,命名格式为xxxx.repo,内容如下:
[myiso] //yum 源的名称,自定义
name=mylocalyum //yum 源的描述,自定义
baseurl=file:///mnt //yum 源具体目录,可以为远程也可以为本地,远程的
//话 baseurl=http://www.163.com/xxxx
enabled=1 包 //开启此yum 配置,0则为关闭
gpgcheck=0 //是否检查yum 源中的安装文件,0不检查(信任),1检查
保存退出。之后需要清空yum 缓存:
[root@localhost ~]# yum makecache
之后此yum 源即可使用。
下面来看看yum 的基本命令:
安装单个软件包:
[root@localhost ~]# yum install -y zd1211-fireware //-y 对之后的交互选择yes
删除单个软件包:
[root@localhost ~]# yum remove -y zd1211-fireware
重新安装单个软件包:
[root@localhost ~]# yum reinstall -y zd1211-fireware
查看所有单个软件包列表(包括已安装和未安装的,全部列出):
[root@localhost ~]# yum list //常结合 grep 命令一起使用
相对的,有一组对软件包的集合进行操作的命令:
[root@localhost ~]# yum groupinstall -y ...
[root@localhost ~]# yum groupremove -y ...
[root@localhost ~]# yum groupreinstall -y ...
[root@localhost ~]# yum grouplist //常结合 grep命令一起使用
举例,为Linux安装桌面和中文支持:
[root@localhost ~]# yum groupinstall -y "Desktop" //桌面系统
[root@localhost ~]# yum groupinstall -y "X Window System" //桌面系统
[root@localhost ~]# yum groupinstall -y "Chinese Support" //中文支持
1.3 安装源码包:
yum 上的包通常不是最新版本,如果想要安装软件的最新版本,需要自己下载安装包(又称源码包)进行编译+安装(有时不仅是因为版本问题,可能根本不提供一些安装包)。源码包一般以 .tar.gz 或 .tar.bz2 或 .zip 结尾。源码包一般被放到/usr/local/src/ 目录下。可以通过链接直接下载源码包到当前目录(pwd):
[root@localhost src]# wget http://syslab.comsenz.com/..../memcache-install.tar.gz
下载完成后,通过三步来安装(前提:已经将源码包解压,并且进入到解压后的目录下,这里以nmap-5.51 为例。解压与解包在第二篇中已经做过讲解):
[root@localhost nmap-5.51]# ./configure --prefix=/usr/local/nmap //第一步,检查是否具
//备安装环境 --prefix 参数指定安装目录,方便不使用后删除
[root@localhost nmap-5.51]# make //第二步,编译
[root@localhost nmap-5.51]# make install //第三步,安装
2.计划任务:
计划任务分为一次性计划任何和周期性计划任务两种。
2.1 一次性计划任务:
启动前要确保其守护进程(daemon)已启动,查看该守护进程是否启动:
[root@localhost ~]# /etc/init.d/atd status //方法一
[root@localhost ~]# service atd status //方法二
关闭进程 service atd stop 开启进程 service atd start 重启进程 service atd restart
在 at 启动的情况下,按如下命令可以生成一次性计划任务:
[root@localhost ~]# at 18:10
at> touch /tmp/learn/atfile.log
at> <EOT> //输入完成后,Ctrl + d 退出输入
以上命令的作用是在18点10分创建相应文件。
一次性计划任务的其他常用命令:
[root@localhost ~]# at -l //查看当前的一次性计划任务
[root@localhost ~]# at -c 5 //查看编号为5的一次性计划任务的详细信息,可以看到具体要
//执行的命令
[root@localhost ~]# at -d 5 //删除编号为5的一次性计划任务
2.2 周期性计划任务:
相对于一次新计划任务来说,周期性计划任务更常用也更实用。在使用前同样查看其是否可用:
[root@localhost ~]# /etc/init.d/crond status
[root@localhsot ~]# service crond status
可用的话,实用如下命令开始编辑周期性计划任务:
[root@localhost ~]# crontab -e
*/1 * * * * touch /tmp/learn/crond/`date +\%T`.log
保存退出。上条语句的作用为每分钟在/tmp/learn/crond/目录下创建一个以当前时间命名的文件。`date + \%T`之后会讲到。前面的五列按顺序依次指定的是分、时、日、月、周几。结合/使用,可以定制每30分钟、每两小时等等的定时任务。*代表“每”,几个具体的例子:
*/5 * * * * * CMD --> 每五分钟执行一次CMD
00 03 * * * CMD --> 每天凌晨3点执行一次CMD
00 09,11,13 * * * CMD --> 每天9点,11点,13点执行一次CMD
00 09-12 * * * CMD --> 每天9点,10点,11点,12点执行一次CMD
如果想添加多个周期性计划任务,只需要重新编辑,在下方添加一行输入执行的时间/频率和要执行的命令即可。一般情况下,在周期性计划任务里执行的不是单条命令,而是一个脚本:
*/30 * * * * sh /tmp/learn/shell/touch.sh
具体情况等到涉及脚本以后再进行总结。
其余常用命令:
[root@localhost ~]# crontab -r //删除当前正在运行的周期性计划任务
[root@localhost ~]# crontab -l //查看当前正在运行的周期性计划任务
3.sed 命令:
先来看一个简单的小问题:/root/lines文件共有20行,现在想查看该文件的第5行到第10行,使用什么命令可以做到?
在没有接触 sed 命令之前,我们可能的答案有以下几种:
[root@localhost ~]# head -10 lines | tail -6
[root@localhost ~]# tail -n +5 lines | head -6
[root@localhost ~]# tail -16 lines | head -6 //不推荐该方法,因为必须知道文件总行数
可以看出,这几种方法都需要同时使用 head 命令, tail 命令并结合管道来得到最终结果,然而,使用 sed 命令可以一步到位:
[root@localhost ~]# sed -n '5,10p' lines
相对来说更加快捷和方便。然而 sed 命令的功能还不仅仅如此,来看一下实验:
[root@localhost ~]# cat lines.log
123 123
123 123
123 123
1
[root@localhost ~]# sed 's/123/abc/g' lines.log
abc abc
abc abc
abc abc
1 //不加 -i 参数,不会影响到原文件 lines.log
[root@localhost ~]# sed 's/123/abc/' lines.log
abc 123
abc 123
abc 123
1 //注意,这里正则表达式 /123/abc/ 不同于 /123/abc/g,前者只替换每行第一个匹配的结果
[root@localhost ~]# sed -i 's/123/abc/g' lines.log //原文件被修改,此时没有标准输出
[root@localhost ~]# sed 's/123/& 456/' lines.log //&的作用是在原内容基础上追加&后的 //内容:
123 456 123
123 456 123
123 456 123
1
//修改内容保存到其他文件(没有该文件会自动创建):
[root@localhost ~]# sed 's/123/abc/' lines.log > lines.log.new
[root@localhost ~]# sed '3,3s/123/abc/' lines.log //只替换第三行
[root@localhost ~]# sed '1,3s/123/abc/' lines.log //替换第一行到第三行
[root@localhost ~]# sed '1,$s/123/abc/' lines.log //所有行进行替换,与默认相同 // s/123/abc/
对比在 vim 的底行模式下:
[root@localhost ~]# vim lines.log
:s/123/456/g +回车,替换所有,等同于 :1,$s/123/456/g
注:底行模式下的修改方式需要全局标识g来替换所有,否则只会替换第一个匹配到的结果。
更多实例:
[root@localhost ~]# sed -n "s/123/abc/p" lines.log //pg可以同时使用
abc 123
abc 123
abc 123 // -n 和 p 一起使用,只打印发生替换的行
[root@localhost ~]# sed 's/123/abc/3g' lines.log //每行从匹配的第三个结果替换到最后
[root@localhost ~]# sed 's/123/abc/3' lines.log //只替换每行匹配到的第三个结果
[root@localhost ~]# sed '/^$/'d lines.log //删除空白行
[root@localhost ~]# sed '2'd lines.log //删除第二行
[root@localhost ~]# sed '2,$d' lines.log //删除第二行到最后一行
[root@localhost ~]# sed '$d' lines.log //删除最后一行
[root@localhost ~]# sed '/^test/d' //删除以 test 开头的行
注意!在Linux中单引号和双引号是有区别的,双引号中能够保有变量的内容,而单引号内仅能是一般字符,而不会有特殊符号。比如对于上面的删除第二行到最有一行的例子,如果使用如下这种双引号形式:
[root@localhost ~]# sed "2,$d" lines.log
会报错,因为用双引号包含时会认为 $d 是一个变量。更直观的一个例子:
[root@localhost ~]# testvar="Hello"
[root@localhost ~]# myvar="$testvar world"
[root@localhost ~]# echo $myvar
Hello world
[root@localhost ~]# yourvar='$testvar world'
[root@localhost ~]# echo $myvar
$testvar world
4.tr 命令:
tr命令,常用来做字符的删除替换:
[root@localhost ~]# cat lines.log
123
123
123
1
输入重定向方式:
[root@localhost ~]# tr "123" "456" < lines.log
456
456
456
4 //原文件不改变,此处也被替换,注意与 sed 命令的区别
注:tr 命令需要使用输入重定向,不能直接 tr "123" "456" lines.log
管道方式:
[root@localhost ~]# cat lines.log | tr "123" "456"
456
456
456
4 //原文件不改变,此处也被替换,注意与 sed 命令的区别
对比 sed 命令来看, tr 命令无需全部匹配即可替换,如本例中第四行的 1 被替换成 4 ,而使用 sed 则不被替换,仍为 1 。
三篇并不长的博客肯定不能讲之前所学的知识全部概括,但考虑到会与之后上课所学有重叠,所以暂时将回顾总结告一段落。从下一篇博客开始总结3月9日的上课内容,珍惜时间,加油了!~