Day 12 第二关练习题下部


例题一

1.1 /etc/hosts /etc/fstab   文件打包压缩到/backup目录conf.tar.gz 

1.2 解压到/opt目录下面

1.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

 

例题二

2.1打印配置文件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

 [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

2.1.1方法1 cat  

[root@oldboyedu50-lnb /oldboy]# cat -n nginx.conf

     1 stu01

     2 stu02

     3 stu03

     4 stu04

     5 stu05

   

2.1.2方法2 vim

最后输入

:set nu         #显示行号 

#nu === number

 

:set nonu       #取消显示行号

 

2.1.3方法3  awk

显示某一列

[root@oldboyedu50-lnb ~]# awk  '{print NR,$1}' /oldboy/nginx.conf

1 stu01

2 stu02

3 stu03

4 stu04

5 stu05

 

NR   行号

$1   1

$2   2

$0   一整行内容

例如:

显示/proc/mounts 文件的行号和第1列和第3列

awk '{print NR,$1,$3}' /proc/mounts

 

2.1.4方法4  grep -n

grep -n  "."   nginx.conf

 

.   正则表达式  任意一个字符

-n  显示行号

 

2.1.5方法5  nl    number of lines

nl  nginx.conf

 

2.1.6方法6 sed

sed = nginx.conf    =显示行号

 

 

2.2小结:

2.2.1cat -n /vim (必会)

2.2.2 grep awk    (必会)

2.2.3nl sed

例题三

3.1已知nginx服务的访问日志按天记录在服务器本地目录/app/logs下,由于磁盘空间紧张,现在要求只能保留最近7天访问日志!请问如何解决? 请给出解决办法或配置或处理命令。

3.1.1删除7天之前的日志

  准备环境

mkdir -p /app/logs

cd /app/logs

for  time in  {01..20};do  date -s "201805$time"; touch access_www_$(date +%F).log ;done

date -s "20180520 00:00:00"   (循环)

 

date 显示时间 修改时间

-mtime   modify  time 修改时间

 [root@oldboyedu50-lnb /app/logs]# find  -mtime +7|xargs ls –l (+7=7天之前,-7=最近七天)

-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

 

3.1.2找出/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.2linux系统运行级别一般为0-6,请分别写出每个级别的含义。

3.2.1-1) 0-6  级别的含义

     0   关机(不能设置)

   1   单用户模式

   2   多用户模式(无法使用NFS

   3   完全多用户模式/命令行模式/文本模式(工作默认环境)

   4   待开发

   5   x11 桌面模式

   6          重启 (不能设置)

3.2.2-2) 运行  runlevel

3.2.3-3) 修改  init

 

例题四

4.1装完系统后,希望让网络文件共享服务NFS(iptables),仅在3级别上开机自启动,该如何做?

4.1iptables开机自启动?

 

[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

 

例题五

5.1linux系统中查看中文,但是乱码了,请问如何解决乱码问题?

5.1.1乱码原因:     

5.1.2如何排查:    

5.1.3如何解决:

dsd.png

例题六

6.1已知如下命令及结果:

[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

6.1.1a.现在需要从文件中过滤出“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

[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

 

cut

-d 指定分隔符(菜刀)

-f 某一列

 

6.1.2b.如果需要从文件中过滤出“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,$6}' oldboy.txt

Oldboy 31333741

 

方法5 sed  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

 

 

 

6.2小结:

1.sed /tr + awk /cut

2.awk

 

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

 

例题七

7.1显示 /etc/passwd 1列和第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

 

例题八

8.1如何查看/etc/services文件的有多少行?

8.1.1显示行号 只保留最后一行

 

[root@oldboyedu50-lnb /oldboy]# wc  /etc/services

 10774  58108 641020 /etc/services

[root@oldboyedu50-lnb /oldboy]# wc  -l /etc/services

10774 /etc/services

 

例题九

9.1统计总数 ——统计出 /etc目录下面 .conf结尾的文件的数量

 

|(管道) 传递的是文字

|xargs 传递的是文件名

[root@oldboyedu50-lnb /oldboy]# find /etc/ -type f -name "*.conf" | wc -l

195

 

例题十

10.1过滤出/etc/services 文件包含33061521两数字所在的行的内容。

[root@oldboyedu50-lnb /oldboy] #  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

 

10.2总结:

10.2.1显示行号

10.2.2find命令mtime *3

10.2.3运行级别 启动流程

10.2.4linux显示乱码排查过程

10.2.5awk取出某一列 指定分隔符

10.2.6其他命令

 

10.3预习:

10.3.1linux文件属性

10.3.2软连接与硬链接区别

10.3.3磁盘空间不足及排查解决过程