老男孩教育-Linux运维就业班入学第一关课前测试考试题及解答

时间:2022-06-09 21:51:45

第一题 创建一个目录 /data

[root@oldboyedu41 ~]# mkdir /data

1.1 扩展知识1:

创建目录 ===== make directory  mkdir

1.2 扩展知识2:如果有一个相同的目录已存在了,会报以下错误提示

[root@oldboyedu41 ~]# mkdir /datamkdir: cannot create directory `/data': File exists

1.3 扩展知识3:查看 显示目录下面的内容

[root@oldboyedu41 ~]# ls /data[root@oldboyedu41 ~]# ls -l /data/total 0

1.4 扩展知识4:进入到别的目录 进入到目录 

[root@oldboyedu41 ~]# cd /data/

1.5 扩展知识5:查看当前所在目录/路径(定位) 

[root@oldboyedu41 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 

[root@oldboyedu41 data]# touch /data/oldboy.txt[root@oldboyedu41 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 

第五步:查看

[root@oldboyedu41 ~]# cat /data/oldboy.txt I am studying linux.


NOTE:在Linux中vi相当于Windows中的记事本,而vim相当于Windows中的 notepad++、emeditor、subline


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

[root@oldboyedu41 ~]# echo "I am studying Linux."I am studying Linux.[root@oldboyedu41 ~]# echo " I am studying Linux.">>/data/oldboy.txt [root@oldboyedu41 ~]# cat /data/oldboy.txtI am studying Linux.

>> 漏斗 追加重定向 把内容追加到文件的结尾,相当于“添加” 

> 漏斗  输出重定向 先把源文件的内容清空 然后再向文件中存放内容,相当于“覆盖” 


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

cat >>/data/oldboy.txt<<EOFIam oldboylinuxEOF


EOF的意思是:end of file 这里可以把EOF替换成任何文字,包括中文,但必须匹配使用。

结束标志之前不能有任何符号


第四题 把oldboy.txt拷贝(复制)到/tmp下。

cp命令:复制copy

[root@oldboyedu41 ~]# cp /data/oldboy.txt /tmp/[root@oldboyedu41 ~]# 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可以拷贝文件夹并且包括下一级的子文件夹,以及子文件夹中的子文件夹。

[root@oldboyedu41 ~]# cp -r /data/  /tmp/[root@oldboyedu41 ~]# ls -l /tmp/total 8drwxr-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命令的另一个作用,备份

[root@oldboyedu41 ~]# cp /data/oldboy.txt /data/oldboy.txt.bak[root@oldboyedu41 ~]# 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 

[root@oldboyedu41 ~]# mv /data/ /root/[root@oldboyedu41 ~]# ls -l /root/total 48-rw-------. 1 root root  1073 Sep  3 11:11 anaconda-ks.cfgdrwxr-x---. 2 root root  4096 Sep  3 11:30 anaconda-screenshotsdrwxr-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[root@oldboyedu41 ~]# ls /datals: cannot access /data: No such file or directory



第六题 进入/root目录下的data目录,删除oldboy.txt文件

NOTE1:我觉得此题描述有问题,是否应改为:如何用一条命令找到/data/文件夹下所有的以.txt结尾的文件,并删除。


NOTE2:Linux中的/tmp文件夹相当于Windows中的回收站。删除文件时较为稳妥的方法是先将待删除文件用mv命令移入/tmp文件夹内,若发现操作后出现问题则可将文件恢复回原文件夹,若操作后没有问题则可将/tmp文件夹内文件彻底删除。


创建测试环境:

[root@oldboyedu41 ~]# mkdir /data [root@oldboyedu41 ~]# touch /data/oldboy.txt /data/alex.txt /data/zbz.txt

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

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

#find 查找位置(路径)  -type 什么类型   -name "什么名字"

-typef  file       文件

d  directory  目录 

-name "*.txt"

以.txt结尾的文件  

*表示所有


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

[root@oldboyedu41 data]# find /data/ -type f -name "*.txt"/data/zbz.txt/data/alex.txt/data/oldboy.txt[root@oldboyedu41-001 data]# find -type f -name "*.txt" |xargs rm或:[root@oldboyedu41-001 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)

[root@oldboyedu41-001 data]# cd ..[root@oldboyedu41-001 ~]# rm -rf data/


扩展知识:

..   上一级目录,当前目录的上一级目录 

.    当前目录,/etc/sysconfig

例:

[root@oldboyedu41 ~]# cp /tmp/oldboy.txt /etc/sysconfig  [root@oldboyedu41 ~]# cp /tmp/oldboy.txt .



第八题 请给出输出test.txt文件内容时,不包含oldboy字符串的命令

创建试验环境命令:

[root@oldboyedu41 ~]# mkdir /data> cat >/data/test.txt<<EOF> test> lidao> oldboy> EOF


8.1 方法1:使用grep 命令的-v参数进行过滤 

grep命令默认输出查找到的包含""引号内的内容的行。

[root@oldboyedu41 data]# grep "oldboy" /data/test.txt oldboy[root@oldboyedu41 data]# grep "old" /data/test.txt oldboy


grep命令-v参数的作用是反转查找,即输出所有不包含""引号内的内容的行。

[root@oldboyedu41 data]# grep -v "oldboy" /data/test.txt testlidao


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

[root@oldboyedu41 data]# head -n2 /data/test.txt testliyao

因-n参数太常用了,故可以把n省略掉,效果一样。

[root@oldboyedu41 data]# head -2 /data/test.txt testliyao


扩展知识:head命令   取出文件的  前几行 默认取  前10行

tail命令   取出文件的最后几行 默认取最后10行


8.3 方法3:使用sed命令的d参数 

[root@oldboyedu41 data]# sed '/oldboy/d' test.txt testliyao


扩展知识: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命令及!

[root@oldboyedu41 data]# awk '/oldboy/' test.txt oldboy[root@oldboyedu41 data]# awk '!/oldboy/' test.txt testliyao


8.5 其他扩展方法:

[root@oldboyedu41 data]# sed -n '/oldboy/!p' test.txt testliyao[root@oldboyedu41 data]# grep "^[tl]" test.txt testliyao


第九题 请用一条命令完成创建目录/oldboy/test,即创建/oldboy目录及/oldboy/test

使用mkdir命令的-p选项

[root@oldboyedu41-001 /]# mkdir -p /oldboy/test


第十题 已知/tmp下已经存在test.txt文件,如何执行命令才能把/mnt/test.txt拷贝到/tmp下覆盖掉/tmp/test.txt,而让系统不提示是否覆盖(root 权限下)。

10.1 方法1:cp命令前加\

[root@oldboyedu41-001 mnt]# \cp /mnt/test.txt /tmp/test.txt


10.2 方法2:使用命令的绝对路径

[root@oldboyedu41-001 mnt]# which cpalias cp='cp -i'/bin/cp[root@oldboyedu41-001 mnt]# /bin/cp /mnt/test.txt /tmp/test.txt


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

创建测试环境 

[root@oldboyedu41 tmp]# seq 100 >ett.txt[root@oldboyedu41 tmp]# cat ett.txt


11.1 方法1:head + tail 

[root@oldboyedu41 data]# head -30 ett.txt |tail -112021222324252627282930

11.2 方法2:sed 

[root@oldboyedu41 data]# sed  -n '20,30p' ett.txt 20…30


11.3 方法3:awk 

[root@oldboyedu41 data]#  awk'NR==20' ett.txt 20[root@oldboyedu41 data]#  awk'NR==30' ett.txt 30[root@oldboyedu41 data]#  awk'NR==20,NR==30' ett.txt 20…30


NOTE:在awk中 NR表示行号


11.4 方法4:grep

[root@oldboyedu41 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


检查试验环境:

[root@oldboyedu41 oldboy]# find

.

./t.sh

./test.sh

./test

./test/del.sh

./alex.txt

./oldboy.txt


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

找出所有文件:

[root@oldboyedu41 oldboy]# find /oldboy/ -type f /oldboy/t.sh/oldboy/test.sh/oldboy/test/del.sh/oldboy/alex.txt/oldboy/oldboy.txt

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

[root@oldboyedu41 oldboy]# find /oldboy/ -type f  -name "*.sh"/oldboy/t.sh/oldboy/test.sh/oldboy/test/del.sh


13.2 第二步:如何把一个文件中的oldboy替换为oldgirl

[root@oldboyedu41 oldboy]# #sed 's#你要找什么#替换成什么#g' /oldboy/t.sh [root@oldboyedu41 oldboy]# sed 's#oldboy#oldgirl#g' /oldboy/t.sh oldgirl[root@oldboyedu41 oldboy]# cat /oldboy/t.sh oldboy

NOTE:sed命令不加-i参数的话,只修改显示到屏幕上的字符,而不修改原文件的字符。

[root@oldboyedu41 oldboy]# sed -i 's#oldboy#oldgirl#g' /oldboy/t.sh [root@oldboyedu41 oldboy]# cat /oldboy/t.sh oldgirl


13.3 第三步:把find命令找到的内容 传递给 sed 

[root@oldboyedu41 oldboy]# find /oldboy/ -type f -name "*.sh"|xargs sed 's#oldboy#oldgirl#g'oldgirloldgirloldgirl[root@oldboyedu41 oldboy]# find /oldboy/ -type f -name "*.sh"|xargs sed 's#oldboy#oldgirl#g' -i[root@oldboyedu41 oldboy]# find /oldboy/ -type f -name "*.sh"|xargs cat oldgirloldgirloldgirl


NOTE:

1.find命令要与 |xargs 配合

2.sed命令如何进行查找替换

3.sed -i 对文件的内容进行修改


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