1. 程式人生 > >老男孩教育-Linux運維就業班入學第一關課前測試考試題及解答

老男孩教育-Linux運維就業班入學第一關課前測試考試題及解答

老男孩教育 linux 入學第一關 課前測試考試題及解答

第一題 創建一個目錄 /data

[[email protected] ~]# mkdir /data

1.1 擴展知識1:

創建目錄 ===== make directory mkdir

1.2 擴展知識2:如果有一個相同的目錄已存在了,會報以下錯誤提示

[[email protected] ~]# mkdir /data
mkdir: cannot create directory `/data‘: File exists

1.3 擴展知識3:查看 顯示目錄下面的內容

[[email protected] ~]# ls /data
[[email protected] ~]# ls -l /data/
total 0

1.4 擴展知識4:進入到別的目錄 進入到目錄

[[email protected] ~]# cd /data/

1.5 擴展知識5:查看當前所在目錄/路徑(定位)

[[email protected] data]# pwd
/data

1.6 擴展知識6:相對路徑和絕對路徑

1.簡單-相對路徑不是從根開始的路徑 從當前位置開始

data

etc/hosts

etc/sysconfig/network-scripts/ifcfg-eth0

2.精確-絕對路徑從根開始的路徑

/data

/etc/hosts

/etc/sysconfig/network-scripts/ifcfg-eth0


第二題 在/data下面創建文件oldboy.txt

[[email protected] data]# touch /data/oldboy.txt
[[email protected] data]# ls -l /data/
total 0
-rw-r--r--. 1 root root 0 Sep  3 15:04 oldboy.txt



第三題 為oldboy.txt增加內容"I am studying linux."

3.1 方法一 :vi或vim

第一步:打開文件

vi /data/oldboy.txt

第二步:編輯文件

按i(a,o)

編輯文件,輸入內容

第三步:退出編輯模式

編程完成,按esc 退出編輯模式

第四步:保存退出

:wq (加!為強制)

:q! 強制退出不保存

:wq! 強制保存退出

其中:w的意思是write,q的意思是quit

第五步:查看

[[email protected] ~]# cat /data/oldboy.txt 
I am studying linux.


NOTE:在Linux中vi相當於Windows中的記事本,而vim相當於Windows中的 notepad++、emeditor、subline


3.2 方法二:使用echo+追加/輸出重定向

[[email protected] ~]# echo "I am studying Linux."
I am studying Linux.
[[email protected] ~]# echo " I am studying Linux.">>/data/oldboy.txt 
[[email protected] ~]# cat /data/oldboy.txt
I am studying Linux.

>> 漏鬥 追加重定向 把內容追加到文件的結尾,相當於“添加”

> 漏鬥 輸出重定向 先把源文件的內容清空 然後再向文件中存放內容,相當於“覆蓋”


3.3 方法三:使用cat命令,向一個文件中追加多行

cat >>/data/oldboy.txt<<EOF
I
am 
oldboy
linux
EOF


EOF的意思是:end of file 這裏可以把EOF替換成任何文字,包括中文,但必須匹配使用。

結束標誌之前不能有任何符號


第四題 把oldboy.txt拷貝(復制)到/tmp下。

cp命令:復制copy

[[email protected] ~]# cp /data/oldboy.txt /tmp/
[[email protected] ~]# ls -l /tmp/
total 4
-rw-r--r--. 1 root root 60 Sep  3 16:02 oldboy.txt
-rw-------. 1 root root  0 Sep  3 11:01 yum.log


擴展知識1:參數-r可以拷貝文件夾並且包括下一級的子文件夾,以及子文件夾中的子文件夾。

[[email protected] ~]# cp -r /data/  /tmp/
[[email protected] ~]# ls -l /tmp/
total 8
drwxr-xr-x. 2 root root 4096 Sep  3 16:05 data
-rw-r--r--. 1 root root   60 Sep  3 16:02 oldboy.txt
-rw-------. 1 root root    0 Sep  3 11:01 yum.log


擴展知識2:cp命令的另一個作用,備份

[[email protected] ~]# cp /data/oldboy.txt /data/oldboy.txt.bak
[[email protected] ~]# ls -l /data/
total 8
-rw-r--r--. 1 root root 60 Sep  3 15:50 oldboy.txt
-rw-r--r--. 1 root root 60 Sep  3 16:22 oldboy.txt.bak


第五題 把 /data 移動到 /root目錄下面

mv命令:移動move

[[email protected] ~]# mv /data/ /root/
[[email protected] ~]# ls -l /root/
total 48
-rw-------. 1 root root  1073 Sep  3 11:11 anaconda-ks.cfg
drwxr-x---. 2 root root  4096 Sep  3 11:30 anaconda-screenshots
drwxr-xr-x. 2 root root  4096 Sep  3 16:22 data
-rw-r--r--. 1 root root 21736 Sep  3 11:11 install.log
-rw-r--r--. 1 root root  5890 Sep  3 11:10 install.log.syslog
[[email protected] ~]# ls /data
ls: cannot access /data: No such file or directory



第六題 進入/root目錄下的data目錄,刪除oldboy.txt文件

NOTE1:我覺得此題描述有問題,是否應改為:如何用一條命令找到/data/文件夾下所有的以.txt結尾的文件,並刪除。


NOTE2:Linux中的/tmp文件夾相當於Windows中的回收站。刪除文件時較為穩妥的方法是先將待刪除文件用mv命令移入/tmp文件夾內,若發現操作後出現問題則可將文件恢復回原文件夾,若操作後沒有問題則可將/tmp文件夾內文件徹底刪除。


創建測試環境:

[[email protected] ~]# mkdir /data 
[[email protected] ~]# touch /data/oldboy.txt /data/alex.txt /data/zbz.txt

6.1 第一步:使用find命令找到文件

[[email protected] ~]# find /root -type f -name "oldboy.txt"
[[email protected] ~]# /root/data/oldboy.txt

#find 查找位置(路徑) -type 什麽類型 -name "什麽名字"

-typef file 文件

d directory 目錄

-name "*.txt"

以.txt結尾的文件

*表示所有


6.2 第二步:使用管道符|(find命令需要同時與|xargs配合使用)

[[email protected] data]# find /data/ -type f -name "*.txt"
/data/zbz.txt
/data/alex.txt
/data/oldboy.txt
[[email protected] data]# find -type f -name "*.txt" |xargs rm
或:
[[email protected] data]# find /data/ -type f -name "*.txt" |xargs -i mv {} /tmp/


小結:

1.rm命令:移除remove

-f參數,不需要確認直接刪除

例:rm -f oldboy.txt

-r參數,刪除文件夾

例:rm -rf /tmp/data/

2.find命令若配合管道符| 需要加xargs

3.管道符後不能識別“別名”,比如ll,故rm不用加-f即可無提示刪除,需註意。

4.xargs的-i參數:



第七題 退出到上一級目錄刪除 data目錄。(原來在/root/data)

[[email protected] data]# cd ..
[[email protected] ~]# rm -rf data/


擴展知識:

.. 上一級目錄,當前目錄的上一級目錄

. 當前目錄,/etc/sysconfig

例:

[[email protected] ~]# cp /tmp/oldboy.txt /etc/sysconfig  
[[email protected] ~]# cp /tmp/oldboy.txt .



第八題 請給出輸出test.txt文件內容時,不包含oldboy字符串的命令

創建試驗環境命令:

[[email protected] ~]# mkdir /data
> cat >/data/test.txt<<EOF
> test
> lidao
> oldboy
> EOF


8.1 方法1:使用grep 命令的-v參數進行過濾

grep命令默認輸出查找到的包含""引號內的內容的行。

[[email protected] data]# grep "oldboy" /data/test.txt 
oldboy
[[email protected] data]# grep "old" /data/test.txt 
oldboy


grep命令-v參數的作用是反轉查找,即輸出所有不包含""引號內的內容的行。

[[email protected] data]# grep -v "oldboy" /data/test.txt 
test
lidao


8.2 方法2:非正常方法:使用head命令

[[email protected] data]# head -n2 /data/test.txt 
test
liyao

因-n參數太常用了,故可以把n省略掉,效果一樣。

[[email protected] data]# head -2 /data/test.txt 
test
liyao


擴展知識:head命令 取出文件的 前幾行 默認取 前10行

tail命令 取出文件的最後幾行 默認取最後10行


8.3 方法3:使用sed命令的d參數

[[email protected] data]# sed ‘/oldboy/d‘ test.txt 
test
liyao


擴展知識:sed命令主要作用是查找替換,d參數的作用是刪除選擇的行。

例:

刪除空白行:

sed ‘/^$/d‘ file

刪除文件的第2行:

sed ‘2d‘ file

刪除文件的第2行到末尾所有行:

sed ‘2,$d‘ file

刪除文件最後一行:

sed ‘$d‘ file

刪除文件中所有開頭是test的行:

sed ‘/^test/‘d file


8.4 方法4:使用awk命令及!

[[email protected] data]# awk ‘/oldboy/‘ test.txt 
oldboy
[[email protected] data]# awk ‘!/oldboy/‘ test.txt 
test
liyao


8.5 其他擴展方法:

[[email protected] data]# sed -n ‘/oldboy/!p‘ test.txt 
test
liyao
[[email protected] data]# grep "^[tl]" test.txt 
test
liyao


第九題 請用一條命令完成創建目錄/oldboy/test,即創建/oldboy目錄及/oldboy/test

使用mkdir命令的-p選項

[[email protected] /]# mkdir -p /oldboy/test


第十題 已知/tmp下已經存在test.txt文件,如何執行命令才能把/mnt/test.txt拷貝到/tmp下覆蓋掉/tmp/test.txt,而讓系統不提示是否覆蓋(root 權限下)。

10.1 方法1:cp命令前加\

[[email protected] mnt]# \cp /mnt/test.txt /tmp/test.txt


10.2 方法2:使用命令的絕對路徑

[[email protected] mnt]# which cp
alias cp=‘cp -i‘
/bin/cp
[[email protected] mnt]# /bin/cp /mnt/test.txt /tmp/test.txt


第十一題 只查看ett.txt文件(共100行)內第20到第30行的內容

創建測試環境

[[email protected] tmp]# seq 100 >ett.txt
[[email protected] tmp]# cat ett.txt


11.1 方法1:head + tail

[[email protected] data]# head -30 ett.txt |tail -11
20
21
22
23
24
25
26
27
28
29
30

11.2 方法2:sed

[[email protected] data]# sed  -n ‘20,30p‘ ett.txt 
20
…
30


11.3 方法3:awk

[[email protected] data]#  awk‘NR==20‘ ett.txt 
20
[[email protected] data]#  awk‘NR==30‘ ett.txt 
30
[[email protected] data]#  awk‘NR==20,NR==30‘ ett.txt 
20
…
30


NOTE:在awk中 NR表示行號


11.4 方法4:grep

[[email protected] data]# grep -A10 "20" ett.txt 
20
…
30


NOTE:-A9 顯示出grep找到的內容及接下來的9行



老男孩教育每日一題-第125天-顯示文件oldboy.txt的第20行到30行請問如何做?

http://lidao.blog.51cto.com/3388056/1961519


小結:

1.head+tail

2.sed 取某一行 取連續的多行

3.了解awk的方法


第十二題 分析圖片服務日誌,把日誌(每個圖片訪問次數*圖片大小的總和)排行,取top10,也就是計算每個url 的總訪問大小【附加題:工作場景高難度加分題,不會的同學可以放棄不答】。

說明:本題生產環境應用:這個功能可以用於IDC 網站流量帶寬很高,然後通過分析服務器日誌哪些元素占用流量過大,

進而進行優化或裁剪該圖片,壓縮js 等措施。


本題需要輸出三個指標: 【訪問次數】 【訪問次數*單個文件大小】 【文件名(可以帶URL)】

測試數據

59.33.26.105 - - [08/Dec/2010:15:43:56 +0800] "GET /static/images/photos/2.jpg HTTP/1.1" 200 11299

"http://oldboy.blog.51cto.com/static/web/column/17/index.shtml?courseId=43" "Mozilla/4.0 (compatible;

MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"

59.33.26.105 - - [08/Dec/2010:15:43:56 +0800] "GET /static/images/photos/2.jpg HTTP/1.1" 200 11299

"http://oldboy.blog.51cto.com/static/web/column/17/index.shtml?courseId=43" "Mozilla/4.0 (compatible;

MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"

59.33.26.105 - - [08/Dec/2010:15:44:02 +0800] "GET /static/flex/vedioLoading.swf HTTP/1.1" 200 3583

"http://oldboy.blog.51cto.com/static/flex/AdobeVideoPlayer.swf?width=590&height=328&url=/[[DYNAMIC]]/2"

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET

CLR 3.5.30729)"

124.115.4.18 - - [08/Dec/2010:15:44:15 +0800] "GET /?= HTTP/1.1" 200 46232 "-" "-"

124.115.4.18 - - [08/Dec/2010:15:44:25 +0800] "GET /static/js/web_js.js HTTP/1.1" 200 4460 "-" "-"

124.115.4.18 - - [08/Dec/2010:15:44:25 +0800] "GET /static/js/jquery.lazyload.js HTTP/1.1" 200 1627 "-" "-"


解答:暫無





第十三題 把/oldboy目錄及其子目錄下所有以擴展名.sh結尾的文件中,文件包含oldboy的字符串全部替換為oldgirl

考察重點:

sed命令如何進行查找替換

find命令與sed命令的配合


創建試驗環境:

mkdir -p /oldboy/test

cd /oldboy

echo "oldboy">test/del.sh

echo "oldboy">test.sh

echo "oldboy">t.sh

touch oldboy.txt

touch alex.txt


檢查試驗環境:

[[email protected] oldboy]# find

.

./t.sh

./test.sh

./test

./test/del.sh

./alex.txt

./oldboy.txt


13.1 第一步:找出/oldboy目錄及其子目錄下所有以擴展名.sh結尾的文件

找出所有文件:

[[email protected] oldboy]# find /oldboy/ -type f 
/oldboy/t.sh
/oldboy/test.sh
/oldboy/test/del.sh
/oldboy/alex.txt
/oldboy/oldboy.txt

找出所有以.sh結尾的文件

[[email protected] oldboy]# find /oldboy/ -type f  -name "*.sh"
/oldboy/t.sh
/oldboy/test.sh
/oldboy/test/del.sh


13.2 第二步:如何把一個文件中的oldboy替換為oldgirl

[[email protected] oldboy]# #sed ‘s#你要找什麽#替換成什麽#g‘ /oldboy/t.sh 
[[email protected] oldboy]# sed ‘s#oldboy#oldgirl#g‘ /oldboy/t.sh 
oldgirl
[[email protected] oldboy]# cat /oldboy/t.sh 
oldboy

NOTE:sed命令不加-i參數的話,只修改顯示到屏幕上的字符,而不修改原文件的字符。

[[email protected] oldboy]# sed -i ‘s#oldboy#oldgirl#g‘ /oldboy/t.sh 
[[email protected] oldboy]# cat /oldboy/t.sh 
oldgirl


13.3 第三步:把find命令找到的內容 傳遞給 sed

[[email protected] oldboy]# find /oldboy/ -type f -name "*.sh"|xargs sed ‘s#oldboy#oldgirl#g‘
oldgirl
oldgirl
oldgirl
[[email protected] oldboy]# find /oldboy/ -type f -name "*.sh"|xargs sed ‘s#oldboy#oldgirl#g‘ -i
[[email protected] oldboy]# find /oldboy/ -type f -name "*.sh"|xargs cat 
oldgirl
oldgirl
oldgirl


NOTE:

1.find命令要與 |xargs 配合

2.sed命令如何進行查找替換

3.sed -i 對文件的內容進行修改


本文出自 “老潘Linux” 博客,請務必保留此出處http://oldpan.blog.51cto.com/1603893/1965211

老男孩教育-Linux運維就業班入學第一關課前測試考試題及解答