权当开篇――Linux学习之路(三)

  上篇总结了一下配置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日的上课内容,珍惜时间,加油了!~

你可能感兴趣的:(权当开篇――Linux学习之路(三))