老男孩教育-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/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運維就業班入學第一關課前測試考試題及解答