1. 程式人生 > >第二關練習講解(下部)

第二關練習講解(下部)

臨時 文本 修改時間 傳遞 roo 請問 pass 正則表達 服務

課前習題:
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

第二關練習講解(下部)