一、查找/var目录下不属于root、lp、gdm的所有的文件
find 查找命令的用法总结:
• 格式: find [OPTIONS]... [查找的路径] [查找的条件] [处理的动作]
• 工作特点:
查询速度略慢
需要注意权限,搜索者要有对目录的权限
精确查找并且是实时查询
- 基础用法:
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结尾,> 在前面使用. 表示可以出现任意字符
- 按照用户属性搜索
find /data -user wang ---> 搜索wang用户的文件
find /data -nouser -ls ---> 搜索无主的文件
find /data -nogroup -ls
- 根据文件的类型查找:
find /data -type d
find /data -type c
find /data -type l
find /data -type f
- 搜索空的文件或者目录:
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
- 排除某个目录:
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 统计出连续的重复行数,也就是每一个单词出现的次数, 而后按照数字从高到低再进行一次排序。
涉及到的知识点主要有
- 使用正则表达式中的\b匹配单词,除了字母数字和下划线之外,其它字符均可以被当做定界符,因此对于单词两边有下划线的情况需要再单独处理
- 如果用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两种方法
- 如果使用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
- 如果使用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/basearch
http://192.168.39.101/centos/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帮助配置,删除对应的用户即可