答案在每个题下的空白处,字体颜色为白色,选中反色查看
解析: 计算机的硬件分成5大组成部件:运算器、控制器、存储器、输入设备和输出设备。按照计算机硬件各部分结构所处的位置不同划分成主机(运算器、控制器、主存储器)和外设两部分。
补充: 命令行临时增加路由,重启失效,永久增加路由方法如下:
【centos7.6】
cd /etc/sysconfig/network-scripts/
cat route-ens33
192.168.3.0/24 via 192.168.1.254 dev ens33
systemctl restart network
route -n
【centos6.8】
cd /etc/sysconfig/
cat static-routes
any net 192.168.3.0 netmask 255.255.255.0 gw 192.168.1.254
service network restart
IP地址组成 | 解析 | 正则表达 |
---|---|---|
0-9 | 一位数,个位是0~9 |
[0-9] |
10-99 | 二位数,十位是1~9 ,个位是0~9 |
[1-9][0-9] |
0~99 | [1-9]?[0-9] | |
100-199 | 三位数,百位是1 ,十位是0~9 ,个位是0~9 |
1[0-9]{2} |
0~199 | (1[0-9]{2})|([1-9]?[0-9]) | |
250-255 | 三位数,百位是2 ,十位是5 ,个位是0~5 |
25[0-5] |
200-249 | 三位数,百位是2 ,十位是0~4 ,个位是0~9 |
2[0-4][0-9] |
0~255 | 25[0-5]|2[0-4][0-9]|((1[0-9]{2})|([1-9]?[0-9]))) |
后面3段的前面使用{3}加上句点.grep -Eo "^(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])){3}$"
匹配邮箱
[root@zycentos7 ~]# egrep '[[:alnum:]]+@[[:alnum:]]+\.[a-z]+' file
[root@zycentos7 ~]# egrep '[a-z0-9]+@[a-z0-9]+\.[a-z]+' file
解析: &> 和 2>&1 结果相同,但过程不同
6. 查询系统中已经安装的软件包:_________,查询指定软件的安装路径与文件列表:_________。
rpm -qa,rpm -ql
rpm -ql 包名 查询软件包安装位置
rpm -qf 系统文件名 查询系统文件属于哪个RPM包
解析: nice值:相对优先级(优先级度量)-20~+19,nice值越低优先级越高;
PR值:0~139:0-99系统进程优先级,100-139用户进程优先级
(将nice值级别显示为映射到更大优先级队列,-20映射到100,+19映射到139)
解析: 注意引号和$符号
echo ${#a} ;速度最快
expr length "$a"
echo $a|wc -L
echo $a|awk '{print length($0)}'
解析: /var/log/lastlog 记录最近几次成功登录事件和最后一次不成功登录事件
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
init 1 root cwd DIR 8,2 4096 2 /
init 1 root rtd DIR 8,2 4096 2 /
init 1 root txt REG 8,2 150352 782041 /sbin/init
(1) COMMAND _______________
USER_________________
FD___________________
TYPE__________________
DEVICE________________
SIZE __________________
NODE________________
(2) 查看 22 端口现在运行的情况________________
(3) 查看所属 root 用户进程所打开的文件类型为 txt 的文件_________________
(4) 查找谁在使用文件系统/home___________________
(1)lsof命令查看到的结果含义如下:
列信息 | 意义 |
---|---|
COMMAND | 进程的名称 |
USER | 进程所有者 |
FD | 文件描述符(如cwd,txt) |
TYPE | 文件类型(如DIR,REG) |
DEVICE | 指定磁盘的名称 |
SIZE | 文件的大小 |
NODE | 索引节点(文件在磁盘上的标识) |
(2)lsof -i:22【lsof -i tcp:22】
(3)lsof -u root -d txt
(4)lsof /home
(4) 写出仅显示一个文件第 5 行到第 8 行的被修改的文件内容___________________________________________________________
sed -n ‘5,8 s/^west/north/p’ file
将5-8行行首的west替换成north并打印被替换过的行
northwest NW Charles Main 4.0 .99 3 35
western WE Sharon Gray 8.3 .97 5 23
southwest SW Lewis Dalsass 4.7 .8 2 19
southern SO Suan Chin 5.1 .96 4 15
southeast SE Patricia Hemenway 4.0 .7 4 16
northwest NW Charles Main 4.0 .99 3 35
western WE Sharon Gray 8.3 .97 5 23
southwest SW Lewis Dalsass 4.7 .8 2 19
[root@zycentos7 ~]# sed -n '5,8 s/^west/north/p' file
northern WE Sharon Gray 8.3 .97 5 23
[root@zycentos7 ~]# crontab -e -u SOD
no crontab for test01 - using an empty one
crontab: installing new crontab
[root@zycentos7 ~]# crontab -l -u SOD
SHELL=/bin/bash #指定shell类型
PATH=/sbin:/bin:/usr/sbin:/usr/bin #指定环境变量
MAILTO=SOD #指定运行用户
#test crontab #注释
30 14 * * * SOD source /etc/profile;sh /home/shell/collect.sh >/dev/null 2>&1
[root@zycentos7 ~]# ls -li /var/spool/cron/SOD
16815066 -rw-------. 1 root root 223 Jan 6 21:21 /var/spool/cron/SOD
shell脚本加载环境变量按非登录式shell,执行语句中若引用了/etc/profile的内容,将执行失败
25. 在 shell 脚本中你知道的$?的用法有哪些?(3 分)_____________________
①命令执行状态 ②exit退出码 ③函数返回值
26.解释一下 shell 中特殊扩展变量表达式的具体含义?(2 分)
${parameter:-work}: ______________________________________________
${parameter:?work}:______________________________________________
${parameter:-work} parameter有值输出值,无则输出work;
${parameter:?work} parameter值为空,work作为标准错误输出
解析: shutdown –h:关机进程–>禁login(发送一个信号给init程序,要求改变runlevel级别)。
halt:杀死运用进程,执行sync系统调运文件系统写操作完成后,停止内核。
poweroff、init 0关机;Ctrl+Alt+Del、 reboot、shutdown –r now重启
解析: -c 计数,-u 只输单独的,-d 只输出重复的
解析: gzip -t 测试压缩文件是否正确无误
解析 diff -b或–ignore-space-change 不检查空格字符的不同;diff -B或–ignore-blank-lines 不检查空白行;diff -i 忽略大小写;diff -c 使用纲要输出的格式。
解析: 硬盘的分区由主分区、扩展分区和逻辑分区组成:主分区(注意扩展分区也是一个主分区)的最大个数是四个,其个数是由硬盘的主引导记录MBR(Master Boot Recorder)决定的,MBR存放启动管理程序(如GRUB)和分区表记录。扩展分区下又可以包含多个逻辑分区 — 所以主分区范围是从1-4,逻辑分区是从5开始的。
解析: 对sshd服务有效
解析: 子进程继承父进程
①用户UID和用户组GID
②环境Environment
③堆栈
④共享内存
⑤打开文件的描述符
⑥执行时关闭(Close-on-exec)标志
⑦信号(Signal)控制设定
⑧进程组号
⑨当前工作目录
⑩根目录
⑪文件方式创建屏蔽字
⑫资源限制
⑬控制终端
子进程独有
①进程号PID
②不同的父进程号
③自己的文件描述符和目录流的拷贝
④子进程不继承父进程的进程正文(text),数据和其他锁定内存(memory locks)
⑤不继承异步输入和输出
⑥父进程和子进程拥有独立的地址空间和PID参数
解析: utmp、wtmp和lastlog日志文件是多数重用UNIX日志子系统的关键–保持用户登录进入和退出的记录。有关当前登录用户的信息(数据交换、关机和重启)记录在文件utmp中,用who命令查看;登录记录和退出记录在文件wtmp中,用last命令查看;最后一次登录文件可以用lastlog命令查看。
解析: 在centos7.6测试uname -a、file /bin/ls和getconf LONG_BIT可以,除此之外,还有echo $HOSTTYPE
26. 有一个文件 ip.txt,每行一条 IP,共若干行,下面那个命令可以实现“统计出现次数最多的前 3 个 ip 以及次
数”?(E)
A.uniq –c ip.txt
B.uniq –c ip.txt |sort –nr |head –n 3
C.cat ip.txt |count –n |sort –rn |head –n 3
D.cat ip.txt |count –n
E.sort -nr ip.txt | uniq -c | sort -nr | head -n 3
解析: 首先sort进行排序,将重复的行都排在了一起,然后使用uniq -c将重复的行的次数放在了行首,在用sort -rn进行反向和纯文本排序,这样就按照重复次数从高到低进行了排列,最后利用head -n 3 输出行首的三行。
解析: /etc/hosts
ip地址与域名快速解析文件;/etc/hostname
(Centos7.6)存放主机名;/etc/resolv.conf
DNS客户机配置文件;/etc/gateways
建立动态路由需要用到的文件;/etc/services
定义了网络服务的端口。
解析: /etc/fstab是用来存放文件系统的静态信息的文件。当系统启动的时候,系统会自动地从这个文件读取信息,并且会自动将此文件中指定的文件系统挂载到指定的目录。
解析: a=10无结果,a没有定义过
防火墙规则设置
iptables -t filter -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -I INPUT 2 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A INPUT -d 192.168.232.0/24 -j REJECT
iptables -t filter -I INPUT 2 -p tcp --dport 80 -j ACCEPT
[root@zylinux ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
829 56727 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
1 60 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
394 28096 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
2 120 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
系统配置:
(1)配置本地 yum,规定镜像挂载点/media,并永久挂载。
[root@localhost ~]# tail -n 1 /etc/fstab
/dev/sr0 /media iso9660 defaults 0 0
[root@localhost ~]# mount -a
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# cat yum.repo
[centos7]
name="centos7"
baseurl=file:///media
gpgcheck=0
enabled=1
[root@localhost yum.repos.d]# mkdir bak
[root@localhost yum.repos.d]# mv Cen* bak
[root@localhost yum.repos.d]# yum clean all
[root@localhost yum.repos.d]# yum makecache
(2)配置网络模板。
服务部署:虚拟机下发:以上述搭建的环境为母版,克隆两台虚拟机,并对虚拟机拍摄快照。
虚拟机配置:配置静态 IP 与 DNS 解析。
将数据盘分区格式化成 xfs,并永久挂载在/data 目录。
[root@localhost ~]# mkfs.xfs /dev/sdb
[root@localhost ~]# tail -n 2 /etc/fstab
/dev/sr0 /media iso9660 defaults 0 0
/dev/sdb /data xfs defaults 0 0
(1)shell 实现 100 台服务器的公钥的批量分发;LLD 规划:100 台服务器 ip 为:192.168.42.101-201,root 密码:123456。(10 分)
ssh-keygen ;生成秘钥对
ssh-copy-id 192.168.232.111 ;发送公钥
sshpass -p 123456 ssh-copy-id -o StrictHostKeyChecking=no [email protected] ;带密码发送公钥(不检查knows_hosts文件)
参考程序
#远程机器的用户名和密码
password=123456
username=root
#将本机的公钥复制到远程机器的authorized_keys文件中
main(){
sshpass -p $password ssh-copy-id -o StrictHostKeyChecking=no $username@192.168.42.$1 >/dev/null 2>&1
if [ $? -eq 0 ]
then
echo "192.168.42.$1 is successful..."
fi
}
#检查sshpass工具是否安装
basecheck(){
which sshpass >/dev/null 2>&1
if [ $? -ne 0 ]
then
yum install sshpass -y >/dev/null 2>&1
fi
}
#检查网络是否畅通,若通畅则发送ssh公钥
netcheck(){
for j in {
101..201}
do
ping -c 1 192.168.42.$j >/dev/null 2>&1
if [ $? -eq 0 ]
then
main $j
else
echo "192.168.42.$j 网络不通畅..."
fi
done
}
basecheck
netcheck
(2)处理以下文件内容,将域名取出并进行计数排序。(10 分)
http://www.baidu.com/index.html
http://www.baidu.com/1.html
http://post.baidu.com/index.html
http://mp3.baidu.com/index.html
http://www.baidu.com/3.html
http://post.baidu.com/2.html
得到如下结果:
域名出现的次数 域名
2 www.baidu.com
2 post.baidu.com
1 mp3.baidu.com
cat <<EOF
域名出现的次数 域名
EOF
array=(
"http://www.baidu.com/index.html"
"http://www.baidu.com/1.html"
"http://post.baidu.com/index.html"
"http://mp3.baidu.com/index.html"
"http://www.baidu.com/3.html"
"http://post.baidu.com/2.html"
)
#检查临时域名文件是否存在,存在则删除
check(){
test -f yuming.txt
if [ $? -eq 0 ]
then
rm -rf yuming.txt
fi
}
#域名统计处理及结果输出
operate(){
for var in ${array[@]}
do
echo $var >> yuming.txt
done
awk -F '/' '{print $3}' yuming.txt |sort -r|uniq -c
}
check
operate
check
其他方法
cut -d / -f3 file.txt |sort -r |uniq -c
awk -F "/"'{S[$3]=S[$3]+1}END{for(k in S) print k,S[k]}' file.txt|sort -r
sed -r 's#http://(.*)/.*#\1#g' file.txt |sort -r|uniq -c
(3)设计一个 shell 程序,在每天凌晨压缩打包/etc 目录下的所有内容,存放在/root/bak 目录里,且文件名为如下形式 yymmdd_etc.tar.gz(yy 为年,mm 为月,dd 为日),该目录保存 7 天内容;Shell 程序 fileback 存放在/usr/bin 目录下。(10 分)
day="`date +%Y%m%d`"
dir=/root/bak
backupdir="`date +%Y%m%d`_etc.tar.gz"
#查看/root/bak目录是否存在,如果不存在,则创建目录
checkbak(){
if [ ! -e $dir ]
then
mkdir $dir
fi
}
#压缩打包/etc目录下,存放在/root/bak目录里
backup(){
tar -zcvf /root/bak/$backupdir /etc/ > /dev/null 2>&1
echo "$backupdir 压缩打包成功 successful"
}
#清除7天前的过期文件
clean(){
find $dir -mtime +7 -exec rm -rf {
} \;
if [ $? -eq 0 ]
then
echo "过期数据清除成功 successful"
else
echo "$day 过期数据清理失败 error,请及时关注"
fi
}
checkbak
backup
clean
[root@localhost ok]# cat /var/spool/cron/root
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
#每天凌晨执行fileback
0 0 1 * * root source /etc/profile;./usr/bin/fileback >> /tmp/fileback.log 2>&1
(4)shell 开发运维管理工具。(10 分)
要求:用户交互,当用户输入菜单号时,打印相关内容。
菜单
4. 磁盘分区
5. CPU 负载
6. 剩余内存
7. 退出
输入:1
输出:(主机名,系统版本,分区情况)
hostname:
system:系统版本
---------分区一-----------(分区变量输出)
path:分区一
size:大小
file_os:分区文件系统类型
mount_on:分区挂载点
----------分区二----------
path:分区二
size:大小
file_os:分区文件系统类型
mount_on:分区挂载点
输入:2
输出:
1 分钟平均负载:
5 分钟平均负载:
15 分钟平均负载:
输入:3
输出:
目前可用内存:
可用 Swap 分区:
输入:4
输出:
Bey…
cat <<EOF
---------------------------
1.磁盘分区
2.CPU负载
3.剩余内存
4.退出
---------------------------
EOF
while true
do
read -p "请选择功能(1~4):" num
case $num in
1)
echo "hostname: `cat /etc/hostname | awk 'BEGIN{FS="."}{print $1}'`"
echo "system: `uname -r`"
echo "------------------/dev/sda1--------------------------"
echo "path:`df -h | awk 'BEGIN{FS=" "}/^\/dev\/sda1/{print $1}'`"
echo "size:`df -h | awk 'BEGIN{FS=" "}/^\/dev\/sda1/{print $2}'`"
echo "file_os:`df -T | awk 'BEGIN{FS=" "}/^\/dev\/sda1/{print $2}'`"
echo "mount_on:`df -h | awk 'BEGIN{FS=" "}/^\/dev\/sda1/{print $6}'`"
echo "------------------/dev/sda2--------------------------"
echo "path:`df -h | awk 'BEGIN{FS=" "}/^\/dev\/sda2/{print $1}'`"
echo "size:`df -h | awk 'BEGIN{FS=" "}/^\/dev\/sda2/{print $2}'`"
echo "file_os:`df -T | awk 'BEGIN{FS=" "}/^\/dev\/sda2/{print $2}'`"
echo "mount_on:`df -h | awk 'BEGIN{FS=" "}/^\/dev\/sda2/{print $6}'`"
;;
2)
echo "1分钟平均负载:`uptime | awk 'BEGIN{FS="[ |,]"}{print $14}'`"
echo "10分钟平均负载:`uptime | awk 'BEGIN{FS="[ |,]"}{print $16}'`"
echo "15分钟平均负载:`uptime | awk 'BEGIN{FS="[ |,]"}{print $18}'`"
;;
3)
echo "目前可用内存:`free -h | awk 'BEGIN{FS=" "} /^M/ {print $4}'`"
echo "可用Swap分区:`free -h | awk 'BEGIN{FS=" "} /^S/ {print $4}'`"
;;
4)
exit 0
;;
*)
echo "请输入正确的菜单项!"
esac
done
(5)shell 编程完成一下需求。(10 分)
1 食堂:中国人(人民币)
2 食堂:外国人(美元)
汇率 6.798
菜单:
宫保鸡丁(1)(荤): 8.6
鱼香肉丝(2)(荤):2.5
豆芽炒青菜(1)(素):5.5
椒盐蘑菇(2)(素):1.9
倘若一哥们每天必须吃一个肉一个素;用脚本实现搭配的最低消费。
array=(
"宫保鸡丁 (1)(荤):8.6"
"鱼香肉丝 (2)(荤):2.5"
"豆芽炒青菜 (1)(素):5.5"
"椒盐蘑菇 (2)(素):1.9"
)
#检查临时菜单是否存在,存在则删除
check(){
test -f caidan.txt
if [ $? -eq 0 ]
then
rm -rf caidan.txt
fi
test -f file01.tmp
if [ $? -eq 0 ]
then
rm -rf file01.tmp
fi
}
#创建临时菜单文件
create(){
for var in ${array[@]}
do
echo $var >> caidan.txt
done
}
#菜单文件处理及结果输出
operate(){
array01=(`cat caidan.txt |grep \(2\)`)
b=`cat caidan.txt |grep \(1\)`
a=`for j in ${
array01[@]};do echo $j;done |awk -F: -v OFS=':' '{print $1,$2*6.798}'`
for i in $b
do
echo $i >> file01.tmp
done
for j in $a
do
echo $j >> file01.tmp
done
array02=(`cat file01.tmp |grep \(荤\)`)
array03=(`cat file01.tmp |grep \(素\)`)
c=`for k in ${
array02[@]};do echo $k;done |sort -n -k2 |head -1`
d=`for z in ${
array03[@]};do echo $z;done |sort -n -k2 |head -1`
echo $c
echo $d
}
check
create
operate
check