四、查找-文本处理工具-yum工具使用-仓库搭建-源码编译-总结

一、查找/var目录下不属于root、lp、gdm的所有的文件

find 查找命令的用法总结:

• 格式: find [OPTIONS]... [查找的路径] [查找的条件] [处理的动作]
• 工作特点:
查询速度略慢
需要注意权限,搜索者要有对目录的权限
精确查找并且是实时查询

  1. 基础用法:

find 什么都不跟,就是当前目录下的所有文件全部列出来
find -maxdepth 1 /data ---> 搜索1级目录下的文件
find -maxdepth 2 /data ---> 显示2级和1级目录下的文件
find -maxdepth 2 -mindepth 2 /data --> 只搜索2级目录
find /data -depth
find /data -name test.sh --> 精确搜索 test.sh
find /data -name "test.sh" --> 使用通配符,模糊搜索,全路径中包含 test.sh
find /data -name ".sh" ---> 按照通配符名称匹配
find /data -iname "
.SH" ---> 忽略大小写
find /data -inumer 68 ---> 按照节点编号查找
find /data -samefile /data/f1.sh --> 在data目录下搜索和 f1.sh有相同节点编号的文件
find /data -links 2 --> 查找链接次数为2 的文件
find /data -regex '..sh$' -> 注意,这里所匹配的是完整的路径,而不是部分路径,以.sh结尾,> 在前面使用. 表示可以出现任意字符

  1. 按照用户属性搜索

find /data -user wang ---> 搜索wang用户的文件
find /data -nouser -ls ---> 搜索无主的文件
find /data -nogroup -ls

  1. 根据文件的类型查找:

find /data -type d
find /data -type c
find /data -type l
find /data -type f

  1. 搜索空的文件或者目录:

find /data -empty -ls ---> 搜索空的文件或者目录
find /data -type -d -empty -ls

5 组合查询条件: -a -o ! -not

find /data -name ".sh" -a -user rooter
find /data -maxdepth 1 -a -type d -a -user root -ls
find /data -maxdepth 1 -a -type d -a -user root -ls
find /data "
.sh" -o user root ---> 或的关系
find /data ( ".sh" -o -user root ) -ls ---> 用括号括起来作为一个整体 括号要使用\转义,并且括号两侧要留有空格
find /data -not -name "
.sh"
find /data ! ( -user wang -name "*.txt" )
find -user joe -not -group joe
find -/data not ( -user joe -o -user jane )
find /data -user joe -o -uid 500

  1. 排除某个目录:

find /data -path "/data/bin" -a -purne -o -name ".conf"
find /data ( -path "/data/bin" -o -path "/data/etc" ) -a -purne -o -name "
.conf"

根据以上的总结,查找不属于某几个用户需要用到选项 -user 取反 -not 以及组合查询中的 -a , 所以命令如下:

find /var -not -user root -a -not -user lp -a -not -user gdm -ls 

二、统计/etc/rc.d/init.d/functions文件中每一个单词的出现次数,并进行排序(用grep和sed两种方法分别实现)

思路:

使用正则表达式 中的元字符 \b 即定界符分离出文件中的单词,按照每个单词占一行的格式显示出来,然后sort命令排序,再通过uniq -c 统计出连续的重复行数,也就是每一个单词出现的次数, 而后按照数字从高到低再进行一次排序。

涉及到的知识点主要有

  1. 使用正则表达式中的\b匹配单词,除了字母数字和下划线之外,其它字符均可以被当做定界符,因此对于单词两边有下划线的情况需要再单独处理
  2. 如果用sed,是利用了sed的查找替换功能,即将文件中除了字母以外的其他字符通通替换为换行符,然后将空行删除,再进行排序和uniq命令统计连续重复行

脚本如下:

方法1: 使用grep :
cat /etc/rc.d/init.d/functions |tr -s "_" "\n"|grep -oE "\b[[:alpha:]]{2,}\b"|sort|uniq -c |sort -nr
说明: 这里用tr命令对下划线进行了处理,统一替换为换行符

方法2:使用sed 
sed -nr 's@[^[:alpha:]]@\n@gp' /etc/rc.d/init.d/functions|sed '/^$/d'|sed '/^[[:alpha:]]$/d'|sort|uniq -c|sort -nr
说明: sed替换搜索要开启行内全局替换功能 也即 g 选项

三、利用sed取出ifconfig命令中本机的ipv4地址

思路:

同样可以使用grep 和 sed两种方法

  1. 如果使用grep,先找到ipv4地址所在的行即第二行,然后按照ip地址的格式写出正则表达式匹配 ,这时候会得出来三个地址,取出第一个即可:
ip地址的通用匹配格式为: 1?[0-9]?[0-9]|2[0-4][0-9]|25[0-9]
ifconfig ens33|head -n 2|tail -n 1|grep -Eo "((1?[0-9]?[0-9]|2[0-4][0-9]|25[0-9])\.){3}(1?[0-9]?[0-9]|2[0-4][0-9]|25[0-9])" | head -n 1

  1. 如果使用sed ,总体的思路和grep有所不同,用的是sed的查找替换思想。先直接定位到第2行,然后定义出该整行的正则匹配模式,将ip地址通过分组放在分组的变量中,再进行替换
ifconfig ens33| sed -n '2p'| sed -nr 's@.*net (.*) netmask.*@\1@p'

说明: 
  1 sed命令可以通过管道接收某个命令的标准输出结果   
  2 .*net (.*) netmask.* 这就是ip所在行的匹配模式 从头到inet空格 一段
  然后ip地址分一段,之后空格和字符netmask又分为一段,这样就将ip分割开来放到\1变量里边,在替换时直接后向引用就得到了ip地址

四、总结yum的配置和使用,包括yum仓库的创建

yum的工作原理:

yum底层基于rpm实现,突出优势是解决了包依赖的问题。一个yum的仓库由仓>库内的rpm包文件和元数据信息组成,客户端通过配置文件找到yum源地址,>通过网络直接下载yum仓库的元数据信息repodata到本地缓存中,根据repodata中存放的包名称、包之间依赖关系等,自动再到仓库中下载相应的包到本地。

yum的常见的用法:

yum info 包名 --> 可以查看包的详细信息
yum list 包名 --> 查看某一个包的信息,最后一列可以看出该包是否已经安装过
yum search 包名 --> 搜索某一个带有特定关键字的包
yum deplist 包名--> 查询某一个包依赖于哪些的包
yum install 包名 -y --> 安装某一个包,自动回答yes
yum remove 包名 --> 卸载某一个包,连同依赖的包也会一并删除
yum 也可以支持直接安装本地光盘的rpm包 : 比如:
yum install /misc/cd/Packages/tree-1.6.0-10.el7.x86_64.rpm
yum clean all --> 清空yum在本地的元数据缓存信息
yum history ---> 查看yum安装包的历史
yum history undo 3 --> ID 为3号下所安装的httpd服务的所有的包将全部被删除:
yum history redo 3 ---> 这样就能把上面删除的ID3号重装回来
yum grouplist ---> 查看系统的包组信息,哪些已安装,哪些未安装
yum groupinstall "包组名" -y --> 安装某一个包组。自动回答yes
yum groupremove "包组名" -y --> 卸载包组
yum repolist --> 列出可用的仓库信息: 仓库的ID 仓库的名称 仓库的包数量
注意:卸载A包的时候,A包依赖的其它的包并不会一并删除。因为这些其他的>包有可能会被一些包所依赖

yum仓库的创建:

如何配置本地yum仓库,也即将光盘当成yum的服务端:
1 切换到配置文件目录下
cd /etc/yum.repos.d/ -> 该目录下所有创建的.repo结尾的文件都会起作用,有其中一个的配置出现问题都会影响yum的使用
2 cd /misc/cd -> 挂载光盘
3 把repos.d 下其他互联网的yum源暂时先放在其他目录
mkdir bak
mv *.repo bak/
4 配置repodata所在的目录作为仓库的路径
vim base.repo -> 创建yum仓库的配置文件,起名要以 .repo为后缀
# 第一行
[base] --> 仓库名称 不用留有空格
# 第二行
baseurl=file:///misc/cd -> 定义仓库的路径 为本地的光盘路径
仓库路径分为有四种:
http:// 走网络
https:// 走网络
ftp:// 走网络
file:// 走本地的文件系统
# 第三行
mirrorlist=http://服务端的IP/filelist.txt
yum源的路径也可以使用文件列表,即mirrorlist的格式
服务端将rpm包的路径写在一个文件列表filelist.txt里面,对外开放http给客户端调用
在服务端的根目录下创建一个filelist.txt 的文件 一行写一个yum源的路径,注意baseurl这个字符串不用写
http://192.168.39.101/centos/releasever/os/basearch
http://192.168.39.101/centos/releasever/os/basearch
file:///mnt/cdrom](file:///mnt/cdrom
#第四行
name=cdrom -> 第三行 这是描述信息,可不写
#第五行
gpgcheck=0
每安装一个包自动检查包的来源,这一行就是在定义rpm是否需要包的来源校验,默认如果不写gpgcheck的值1即进行校验,校验需要秘钥,而如果没有导入秘钥系统yum就会拒绝安装
如果想绕过这个包的来源检查,可以将gpgcheck参数设置为0
生产中为了安全一般需要检查包的来源,如又不希望手工导入秘钥,可以将秘钥的信息配置在文件里,让yum自动去寻找和导入,下面第六行就是秘钥的配置方法:
# 第六行
gpgkey=file:///misc/cd/RPM-GPG-KEY-CentOS-7 -->
# 第七行
enable=0 ---> 这个enable 是说当前的这个仓库是否启用,如果仓库指向的yum源是互联网上,可以临时禁用该仓库 , 其中1表示临时禁用
# 第八行
failovermethod=roundrobin ---> 设置url的冗余路径,即指定多个url , 如果遇到无效的可以访问其他的url
访问的方式分为 roundrobin 随机挑选 以及 priority 安装顺序访问

五、编写初始化脚本reset.sh , 包含别名、提示符颜色、yum仓库的配置文件

#!/bin/bash 
#
##########################################################
# Description : configuration of alias, cmd promt color ,yum configuration 
# Date : 2019-07-22 1:01
# FileName: reset.sh 
# Author: zhengsy 
# Version: 1.0
##########################################################
# 定义磁盘扫描的别名scandisk 
sed -i.bak '$i\alias scandisk="echo - - -> /sys/class/scsi_host/host2/scan"' /etc/bashrc  
# 定义网络目录别名 cdnet 
sed -i.bak '$i\alias cdnet="cd /etc/sysconfig/network-scripts/"' /etc/bashrc
# 生效配置文件
source /etc/bashrc 
# 配置本地光盘的yum 源:
mkdir /etc/yum.repos.d/net_base_bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/net_base_bak
cat > /etc/yum.repos.d/local_base.repo << END
[CentOS7_Base]
name=Centos7_Local_Base
gpgcheck=1
baseurl=file:///misc/cd/
gpgkey=file:///misc/cd/RPM-GPG-KEY-CentOS-7
END
# 设置命令提示符的颜色
touch /etc/profile.d/env.sh 
sed -i.bak 'i\PS1="\[\e[1;33m\][\u@\h \W \t]\\$\[\e[0m\]"'    /etc/profile.d/env.sh 
# 关闭防火墙和selinux 
systemctl disable firewalld
systemctl stop firewalld  
sed -i.bak -r 's@^SELINUX=.*@SELINUX=disable@' /etc/selinux/config    
# CentOS7 下实现启动系统 进入目录 /misc/cd 即自动挂载光盘
yum install autofs -y     
systemctl enable autofs 
systemctl start autofs 

六、安装tree、ftp、lftp、telnet等包

思路: 配置好了本地光盘的yum源,直接从光盘上安装即可:

yum clean all 
yum repolist 
rpm -q "*tree*" || yum install tree -y
rpm -q "*ftp*" || yum install ftp -y 
rpm -q "*lftp*" || yum install lftp -y 
rpm -q "*telnet*" || yum install telnet -y 

七、在CentOS7上编译安装apache2.4源码包,并启动此服务

步骤如下:

以httpd-2.4 服务为例演示源码安装
1 安装开发包组:
yum groupinstall "development tools" -y
2 下载源码包并解压源码包:
tar xf httpd-2.4.35.tar.bz2
3 进入解压目录
cd httpd-2.4.35
4 浏览 README INSTALL 文档 看看具体的用法
5 rpm -q --scripts httpd
有些服务需要创建特定的用户账号
useradd -r -u 80 -d /data/www -s /sbin/nologin httpd
6 在安装目录下配置 ./configure
configure --help 查看配置选项信息
--prefix=PREFIX --> 软件的安装的总路径
...
7 指定软件存放的路径: ./config --prefix=/app/httpd
指定配置文件的路径: --sysconfig=/etc/httpd24
指定启用或者禁用功能: --enable-ssl --disable-status
8 有执行过程中可能会有报错信息,一般会提示 XX Not Found
yum install xxx-devel --> 缺少的这些包一般是开发包,需要使用yum安装
9 生成了MakeFile
10 调用make命令
make --> 根据makefile 文件生成二进制文件
11 拷贝应用程序到相应的目录下
make install
12 修改man帮助的配置文件,配置man帮助的搜索路径:
/etc/man_db.conf
13 配置环境变量:
echo 'PATH=/app/httpd/bin:$PATH' > /etc/profile.d/httpd.sh
source /etc/profile.d/httpd.sh
14 执行apache 服务:
apachectl start
/app/httpd/htdocs 目录下放了网站文件
15 修改httpd服务的用户为httpd
vim /etc/httpd24/httpd.conf
修改
USER httpd
USER httpd
16 重启服务:
apachectl stop
apachectl start
17 删除httpd 服务只需要将配置时的路径全部删除。还原man帮助配置,删除对应的用户即可

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容