第一关考试及解答


老男孩教育Linux运维就业班第一关课后学习效果能力上机大考察

(每题10分共130分,过100即可,请给出详细步骤)

 

1、创建目录/data/oldboy,并且在该目录下创建文件oldboy.txt,然后在文件oldboy.txt里写入内容”inet addr:10.0.0.8 Bcast:10.0.0.255 Mask:255.255.255.0”(不包含引号)。

解答:

[root@oldboy ~]# mkdir -p /data/oldboy
[root@oldboy ~]# cd /data/oldboy/
[root@oldboy oldboy]# touch oldboy.txt
[root@oldboy oldboy]# echo "inet addr:10.0.0.8 Bcast:10.0.0.255 Mask:255.255.255.0" > oldboy.txt

验证:

[root@oldboy oldboy]# cat oldboy.txt
inet addr:10.0.0.8 Bcast:10.0.0.255 Mask:255.255.255.0

 

2、将题1中的oldboy.txt文件内容通过命令过滤只输出如下内容:

10.0.08 10.0.0.255 255.255.255.0

解答:

方法一:

[root@oldboy oldboy]# sed 's#[a-zA-Z]##g' oldboy.txt | sed 's#:##g'
 10.0.0.8 10.0.0.255 255.255.255.0

方法二:

[root@oldboy oldboy]# awk -F '[: ]+' '{print $3" "$5" "$7}' oldboy.txt
10.0.0.8 10.0.0.255 255.255.255.0

 

3、将题1中的oldboy目录移动到/tmp目录下,并将/etc/passwd文件复制到/tmp/oldboy下。

解答:

[root@oldboy oldboy]# cd /tmp
[root@oldboy tmp]# mv /data/oldboy/ .
[root@oldboy tmp]# cp /etc/passwd /tmp/oldboy/.

验证:

[root@oldboy tmp]# ls -lrt /tmp/oldboy/passwd
-rw-r--r-- 1 root root 1097 Apr  6 17:54 /tmp/oldboy/passwd

4、在题3的基础上使用awk取passwd文件的第10行到20行的第三列重定向到/tmp/oldboy/test.txt文件里。

解答:

[root@oldboy oldboy]# awk -F ':' 'NR>=10 && NR<=20 {print $3}' passwd
10
11
12
13
14
99
81
69
173
68
38

5、在题3的基础上要求用命令rm删除文件时提示如下禁止使用rm的提示,并使该效果永久生效。

[root@oldboy oldboy]#rm -f passwd

Do not use rm command.

解答:

方法一:

在/etc/bashrc中添加rm别名,然后source /etc/bashrc,如下:

[root@oldboy oldboy]# tail -3 /etc/bashrc
###add rm alias by mofei at 2016-04-07####
alias rm='echo "Do not use rm command." #'
 
[root@oldboy oldboy]# source /etc/bashrc

验证:

[root@oldboy oldboy]# rm -f passwd
Do not use rm command.

此处添加配置可以是/etc/bashrc、/etc/profile或者~/.bashrc、~/.bashrc_profile

方法二:

将/bin/rm命令备份,然后将”echo “Do not use rm command.” #”重定向到/bin/rm中,并赋可执行权限。

[root@oldboy oldboy]# mv /bin/rm /bin/rm-$(date +%F)
[root@oldboy oldboy]# echo "echo Do not use rm command. #" > /bin/rm
[root@oldboy oldboy]# chmod u+x /bin/rm
[root@oldboy oldboy]# cat /bin/rm
echo Do not use rm command. #

验证:

[root@oldboy oldboy]# rm -f passwd
Do not use rm command.

此题中#号至关重要,且#前必须有个空格。此处#是起到注释作用,把后面-f passwd等内容不显示,不加空格的话,会把#当作字符输出,就不能起到注释作用。

此题考察点其实alias别名的使用,方法二是简单粗暴的一种方法,但是也能用来解决问题。其实,对于方法二,还可以做的更隐藏些,写C程序,编译成二进制文件。不过实际工作,以简单为好,没必要搞得太复杂。

 

6、在题3的基础上,删除/tmp/oldboy/下移除passwd以外的其他文件。

解答:

方法一:

[root@oldboy oldboy]# find /tmp/oldboy -type f ! -name passwd | xargs rm -f

方法二:

[root@oldboy oldboy]# find /tmp/oldboy -type f ! -name passwd -exec rm -f {} \;

方法三:

[root@oldboy oldboy]# rm -f `find /tmp/oldboy -type f ! -name passwd`

方法四:

[root@oldboy oldboy]# ls | grep -v passwd | xargs rm -f

/tmp/oldboy目录下无子目录时可用这个方法,不是太专业的做法。

注:如果不加-f参数,方法一、二、三的区别是方法三在只有passwd文件时或没有文件时会报错,说rm命令缺少参数,如下:

[root@oldboy oldboy]# find /tmp/oldboy -type f ! -name passwd -exec rm {} \;   
[root@oldboy oldboy]# find /tmp/oldboy -type f ! -name passwd -exec rm {} \;   
[root@oldboy oldboy]# rm `find /tmp/oldboy -type f ! -name passwd`          
rm: missing operand
Try `rm --help' for more information.

 

7、在题3的基础上,请打印/etc/passwd文件中的第2-5行(不低于三种方法)

解答:

方法一:

[root@oldboy oldboy]# sed -n '2,5p' passwd 
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

方法二:

[root@oldboy oldboy]# awk 'NR>1 &&NR< 6 {print $0}' passwd 
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

此处可以不加{print $0}

[root@oldboy oldboy]# awk 'NR>1 &&NR< 6' passwd 
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

方法三:

[root@oldboy oldboy]# head -5 passwd | tail -4
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin


8、在题3的基础上,使用命令调换passwd文件root位置和/bin/bash位置?即将所有的第一列和最后一列位置调换?

例:

默认:root:x:0:0:root:/root:/bin/bash

修改后:/bin/bash/:x:0:0:root:/root:root

解答:

方法一:

[root@oldboy oldboy]# awk -F ':' '{print $7":"$2":"$3":"$4":"$5":"$6":"$1}' passwd


9、/data目录及其子目录下所有以扩展名.txt结尾的文件中包含oldgirl的字符串全部替换为oldboy

解答:

生成测试文件:

[root@oldboy data]# for file_name in {1..10}.sh
> do
>   echo "just for a test $file_name oldgirl." > $file_name
> done
[root@oldboy data]# cat 1.sh 
just for a test 1.sh oldgirl.
[root@oldboy data]# for file_name in {1..10}.txt
> do
>   echo "just for a test $file_name oldgirl." > $file_name
> done
[root@oldboy data]# cat 1.txt 
just for a test 1.txt oldgirl.

方法一:

[root@oldboy data]# find /data -type f -name "*.txt" | xargs sed -i 's#oldgirl#oldboy#g'

方法二:

[root@oldboy data]# find /data -type f -name "*.txt" -exec sed -i 's#oldgirl#oldboy#g' {} \;

方法三:

[root@oldboy data]# sed -i 's#oldgirl#oldboy#g' `find /data -type f -name "*.txt"`

方法四:

[root@oldboy data]# for file_name in $(find /data -type f -name "*.txt")
> do
>   sed -i 's#oldgirl#oldboy#g' $file_name
> done

验证:

[root@oldboy data]# cat 1.txt 
just for a test 1.txt oldboy.
[root@oldboy data]# cat 1.sh 
just for a test 1.sh oldgirl.

 

10、查找/oldboy下所有七天以前以log结尾的大于1M的文件移动/tmp下。

解答:

方法一:

[root@oldboy data]# find /oldboy/ -type f -name "*.log" -mtime +7 -size +1M|xargs -I mv {} /tmp

方法二:

[root@oldboy data]# find /oldboy/ -type f -name "*.log" -mtime +7 -size +1M -exec mv {} /tmp \;

方法三:

[root@oldboy data]# for file_name in $(find /oldboy/ -type f -name "*.log" -mtime +7 -size +1M)
> do
>   mv $file_name /tmp/.
> done

 

11、什么是Linux的运行级别,请描述Linux的运行级别不同数字的含义?(附加题)

解答:

# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)

0:关机。

1:单用户模式,也称作救援模式。

2:没有NFS服务的多用户模式,没有网络。

3:全多用户模式,有NFS服务,有网络。一般服务器都是这个模式。

4:未使用。

5X window模式,图形界面模式,需要桌面环境的话,一般用这个模式。

6:重启。

 

12、请描述buffercache的区别?(附加题)

解答:

写数据到内存里,这个数据的内存空间称为缓冲区(buffer);从内存读取数据,这个存数据的内存空间称为缓存区(cache)。

 

13、请说出你知道的下列字符在Linux里可以代表的意义。(附加题)

~ - . .. | > >> < << !

解答:

~:用户家目录

-:上一次所在工作目录,由环境变量OLDPWD控制。

.1、当前目录 2、正则表达式中表示任意一个字符。

..:上一层目录。

|:管道符。

>:重定向输出。(一般是由标准输出等输出到文件)

>>:追加重定向输出。

<:重定向输入。(一般是由文件输入到标准输出)

<<:追加重定向输入。

!1!+数字N,表示历史执行过(history)的命令中的第N条命令;2、正则表达式中表示取反(非)的意思。


你可能感兴趣的:(linux,命令,考试题)