第二关练习讲解(下部)

课前习题:
1.把/etc/hosts /etc/fstab 文件打包压缩到/backup目录 conf.tar.gz
2.解压到/opt目录下面
3.检查 /opt/etc/hosts /opt/etc/fstab
[root@oldboyedu50-lnb ~]# mkdir -p /backup
[root@oldboyedu50-lnb ~]# tar zcf /backup/conf.tar.gz /etc/hosts /etc/fstab
tar: Removing leading `/' from member names
[root@oldboyedu50-lnb ~]# tar xf /backup/conf.tar.gz -C /opt/
[root@oldboyedu50-lnb ~]# ll /opt/etc/
total 8
-rw-r--r-- 1 root root 805 Jul 10 18:21 fstab
-rw-r--r-- 1 root root 177 Jul 19 18:05 hosts

第1章 Awk
打印配置文件nginx.conf内容的行号及内容,该如何做?
[root@oldboyedu50-lnb /oldboy]# #{1..5} 生成序列
[root@oldboyedu50-lnb /oldboy]# echo {1..10}
1 2 3 4 5 6 7 8 9 10
[root@oldboyedu50-lnb /oldboy]# echo {01..10}
01 02 03 04 05 06 07 08 09 10
[root@oldboyedu50-lnb /oldboy]# echo stu{01..10} |xargs -n1
stu01
stu02
stu03
stu04
stu05
stu06
stu07
stu08
stu09
stu10
[root@oldboyedu50-lnb /oldboy]# echo stu{01..10} |xargs -n1 >nginx.conf
stu01 stu01 stu01 stu01 stu01 stu01 stu01 stu01
stu02 stu02 stu02 stu02 stu02 stu02 stu02 stu02
stu03 stu03 stu03 stu03 stu03 stu03 stu03 stu03
stu04 stu04 stu04 stu04 stu04 stu04 stu04 stu04
stu05 stu05 stu05 stu05 stu05 stu05 stu05 stu05
stu06 stu06 stu06 stu06 stu06 stu06 stu06 stu06
stu07 stu07 stu07 stu07 stu07 stu07 stu07 stu07
stu08 stu08 stu08 stu08 stu08 stu08 stu08 stu08
stu09 stu09 stu09 stu09 stu09 stu09 stu09 stu09
stu10 stu10 stu10 stu10 stu10 stu10 stu10 stu10
方法1 cat
[root@oldboyedu50-lnb /oldboy]# cat -n nginx.conf
1 stu01
2 stu02
3 stu03
4 stu04
5 stu05
6 stu06
7 stu07
8 stu08
9 stu09
10 stu10
方法2 vim
:set nu #显示行号
#nu === number

:set nonu #取消显示行号
方法3 awk
显示某一列
[root@oldboyedu50-lnb ~]# awk '{print NR,$1}' /oldboy/nginx.conf
1 stu01
2 stu02
3 stu03
4 stu04
5 stu05
6 stu06
7 stu07
8 stu08
9 stu09
10 stu10

NR 行号
$1 第1列
$2 第2列
$0 一整行内容
显示/proc/mounts 文件的行号和第1列和第3列
awk '{print NR,$1,$3}' /proc/mounts
方法4 grep -n
grep -n "." nginx.conf
. 正则表达式 任意一个字符
-n 显示行号
方法5 nl number of lines
nl nginx.conf
方法6 sed
=显示行号
第2章 删除日志
题:已知nginx服务的访问日志按天记录在服务器本地目录/app/logs下,由于磁盘空间紧张,现在要求只能保留最近7天访问日志!请问如何解决? 请给出解决办法或配置或处理命令。
删除7天之前的日志
mkdir -p /app/logs
cd /app/logs
for time in {01..20};do date -s "201805$time"; touch accesswww$(date +%F).log ;done
date -s "20180520 00:00:00"
date 显示时间 修改时间
find
-mtime
modify time 修改时间
[root@oldboyedu50-lnb /app/logs]# find -mtime +7|xargs ls -l
-rw-r--r-- 1 root root 0 May 1 00:00 ./access_www_2018-05-01.log
-rw-r--r-- 1 root root 0 May 2 00:00 ./access_www_2018-05-02.log
-rw-r--r-- 1 root root 0 May 3 00:00 ./access_www_2018-05-03.log
-rw-r--r-- 1 root root 0 May 4 00:00 ./access_www_2018-05-04.log
-rw-r--r-- 1 root root 0 May 5 00:00 ./access_www_2018-05-05.log
-rw-r--r-- 1 root root 0 May 6 00:00 ./access_www_2018-05-06.log
-rw-r--r-- 1 root root 0 May 7 00:00 ./access_www_2018-05-07.log
-rw-r--r-- 1 root root 0 May 8 00:00 ./access_www_2018-05-08.log
-rw-r--r-- 1 root root 0 May 9 00:00 ./access_www_2018-05-09.log
-rw-r--r-- 1 root root 0 May 10 00:00 ./access_www_2018-05-10.log
-rw-r--r-- 1 root root 0 May 11 00:00 ./access_www_2018-05-11.log
-rw-r--r-- 1 root root 0 May 12 00:00 ./access_www_2018-05-12.log
题:找出/app/logs 下面以.log结尾的7天之前的文件 显示详细信息(ls -l) (3种方法)
find /app/logs/ -type f -name ".log" -mtime +7
方法1
find /app/logs/ -type f -name "
.log" -mtime +7|xargs ls -l
方法2
ls -l $(find /app/logs/ -type f -name ".log" -mtime +7)
ls -l `find /app/logs/ -type f -name "
.log" -mtime +7`
方法3
find /app/logs/ -type f -name "*.log" -mtime +7 -exec ls -l {} \;
第3章 Linux系统的运行级别
题:linux系统运行级别一般为0-6,请分别写出每个级别的含义。
0 关机
1 单用户模式
2 多用户模式无法使用NFS
3 完全多用户模式 命令行模式 文本模式
4 待开发
5 x11 桌面模式 图形化界面模式
6 重启
题:装完系统后,希望让网络文件共享服务NFS(iptables),仅在3级别上开机自启动,该如何做?
让iptables开机自启动?
[root@oldboyedu50-lnb ~]# chkconfig --level 3 iptables on
[root@oldboyedu50-lnb ~]# chkconfig |grep ipt
iptables 0:off 1:off 2:off 3:on 4:off 5:off 6:off

linux系统中查看中文,但是乱码了,请问如何解决乱码问题?
乱码原因:Linux系统的字符集和远程连接工具字符集不同
如何排查:1查看系统字符集(echo $LANG)
2检查xshell使用的字符集
如何解决:修改xshell字符集
修改系统的字符集:
临时修改字符集 重新登录之后失败-ecportLANG=en_US UTF-8
永久修改字符集 重启登录之后生效-把/etc/sysconfig/18n 里面的字符集修改LANG=”en_USUTF-8”
检查:echo $LANG和查看字符集文件

第4章 过滤
题: 已知如下命令及结果:
[oldboy@test ~]$ mkdir /oldboy ; echo "I am oldboy,myqq is 31333741">/oldboy/oldboy.txt
[oldboy@test ~]$ cat oldboy.txt
I am oldboy,myqq is 31333741
a.现在需要从文件中过滤出“oldboy”和“31333741”字符串,请给出命令.
b.如果需要从文件中过滤出“oldboy,31333741”字符串,请再给出命令.

a.现在需要从文件中过滤出“oldboy”和“31333741”字符串,请给出命令.
方法1 sed+awk
[root@oldboyedu50-lnb /oldboy]# sed 's#,# #g' oldboy.txt
I am oldboy myqq is 31333741
[root@oldboyedu50-lnb /oldboy]# sed 's#,# #g' oldboy.txt |awk '{print $3,$6}'
oldboy 31333741
方法2 tr+awk
[root@oldboyedu50-lnb /oldboy]# tr "," " " <oldboy.txt
I am oldboy myqq is 31333741
[root@oldboyedu50-lnb /oldboy]# tr "," " " <oldboy.txt |awk '{print $3,$6}'
oldboy 31333741
tr sed命令阉割版
[root@oldboyedu50-lnb /oldboy]# echo 123123|tr "123" "abc"
abcabc
[root@oldboyedu50-lnb /oldboy]# echo 112233|tr "123" "abc"
aabbcc
[root@oldboyedu50-lnb /oldboy]# #tr 1对1的替换
方法3 tr+cut
[root@oldboyedu50-lnb /oldboy]# cut -d " " -f2,3,4 oldboy.txt
am oldboy,myqq is
[root@oldboyedu50-lnb /oldboy]# cut -d " " -f2-5 oldboy.txt
am oldboy,myqq is 31333741
-d 指定分隔符(菜刀)
-f 某一列

a.现在需要从文件中过滤出“oldboy”和“31333741”字符串,请给出命令.
[root@oldboyedu50-lnb /oldboy]# tr "," " " <oldboy.txt
I am oldboy myqq is 31333741
[root@oldboyedu50-lnb /oldboy]# tr "," " " <oldboy.txt |cut -d " " -f3,6
oldboy 31333741
方法4 awk
[root@oldboyedu50-lnb /oldboy]# cat oldboy.txt
I am oldboy,myqq is 31333741
[root@oldboyedu50-lnb /oldboy]# awk -F "," '{print $2}' oldboy.txt
myqq is 31333741
#-F 指定分隔符(菜刀)
#-F指定多个分隔符
[root@oldboyedu50-lnb /oldboy]# awk -F "[, ]" '{print $3}' oldboy.txt
oldboy
方法5 sed
[root@oldboyedu50-lnb /oldboy]# ca时t oldboy.txt
I am oldboy,myqq is 31333741
[root@oldboyedu50-lnb /oldboy]# sed 's#I am ##g' oldboy.txt
oldboy,myqq is 31333741
[root@oldboyedu50-lnb /oldboy]# sed 's#I am ##g' oldboy.txt |sed 's#,myqq is##g'
oldboy 31333741

b.如果需要从文件中过滤出“oldboy,31333741”字符串,请再给出命令.
[root@oldboyedu50-lnb /oldboy]# awk -F"[ ,]" '{print $3"_"$NF}' oldboy.txt
oldboy_31333741
[root@oldboyedu50-lnb /oldboy]# awk -F"[ ,]" '{print $3":)"$NF}' oldboy.txt
oldboy:)31333741
[root@oldboyedu50-lnb /oldboy]# awk -F"[ ,]" '{print $3","$NF}' oldboy.txt
oldboy,31333741
#显示 /etc/passwd 第1列和第3列内容 要求格式显示为:
USER:第1列内容 UID:第3列内容
USER:第1列内容 UID:第3列内容
USER:第1列内容 UID:第3列内容
USER:第1列内容 UID:第3列内容
USER:第1列内容 UID:第3列内容
[root@oldboyedu50-lnb /oldboy]# awk -F":" '{print "USER:"$1,"UID:"$3}' /etc/passwd
USER:root UID:0
USER:bin UID:1
USER:daemon UID:2
USER:adm UID:3
USER:lp UID:4
USER:sync UID:5
[root@oldboyedu50-lnb /oldboy]# awk -F":" '{print "USER:"$1,"UID:"$3}' /etc/passwd|column -t
USER:root UID:0
USER:bin UID:1
USER:daemon UID:2
USER:adm UID:3
USER:lp UID:4

题:如何查看/etc/services文件的有多少行?
显示行号 只保留最后一行
[root@oldboyedu50-lnb /oldboy]# wc /etc/services
10774 58108 641020 /etc/services
[root@oldboyedu50-lnb /oldboy]# wc -l /etc/services
10774 /etc/services
统计总数
统计出 /etc目录下面 以.conf结尾的文件的数量
|传递的是文字
|xargs 传递的是文件名
[root@oldboyedu50-lnb /oldboy]# find /etc/ -type f -name "*.conf" | wc -l
195

题:过滤出/etc/services 文件包含3306或1521两数字所在的行的内容。
egrep "3306或1521" /etc/services
egrep "3306|1521" /etc/services
mysql 3306/tcp # MySQL
mysql 3306/udp # MySQL
ncube-lm 1521/tcp # nCube License Manager
ncube-lm 1521/udp # nCube License Manager
| 扩展正则表达式 egrep == grep -E

猜你喜欢

转载自blog.51cto.com/13860447/2149604
今日推荐