1 Linux运维基础测试题(第一关)
通过这段时间学习Linux基础命令,为了检测自己对Linux基础命令掌握的情况,从网上整理13到测试题,并将其整理出来供大家参考学习。
1.1 习题实例
1、创建目录/data/oldboy,并且在该目录下创建文件oldboy.txt,然后在文件oldboy.txt里面写入内容“inet addr:172.16.0.2 Bcast:172.16.0.255 Mask:255.255.255.0”(不包含引号)。
实例演示: [root@oldboy ~]# mkdir -p /data/oldboy [root@oldboy ~]# cd /data/oldboy/ [root@oldboy oldboy]# pwd /data/oldboy [root@oldboy oldboy]# ifconfig eth0 | sed -n '2p'| xargs > oldboy.txt [root@oldboy oldboy]# cat oldboy.txt inet addr:172.16.0.2 Bcast:172.16.0.255 Mask:255.255.255.0 [root@oldboy oldboy]# ls -l total 4 -rw-r--r-- 1 root root 71 Apr 7 14:54 oldboy.txt [root@oldboy oldboy]#
2、将题1中的oldboy.txt文件内容通过命令过滤只输出如下内容:172.16.0.2 172.16.0.255 255.255.255.0
实例演示: 方法一: [root@oldboy oldboy]# awk -F '[ :]+' '{print $3,$5,$7}' oldboy.txt 172.16.0.2 172.16.0.255 255.255.255.0 方法二: [root@oldboy oldboy]# sed 's/ /:/g' oldboy.txt | awk -F ':' '{print $3,$5,$7}' 172.16.0.2 172.16.0.255 255.255.255.0
3、将题1中的oldboy目录移动到/tmp目录下,并将/etc/passwd文件复制到/tmp/oldboy下。
实例演示: [root@oldboy oldboy]# cd /data/ [root@oldboy data]# pwd /data [root@oldboy data]# ls -l total 4 drwxr-xr-x 2 root root 4096 Apr 7 14:54 oldboy [root@oldboy data]# mv oldboy/ /tmp && cp -p /etc/passwd /tmp/oldboy [root@oldboy data]# tree /tmp/ /tmp/ `-- oldboy |-- oldboy.txt `-- passwd 1 directory, 2 files [root@oldboy data]#
4、在题3的基础上使用awk取passwd文件的第10行到20行的第三列重定向到/tmp/oldboy.txt文件里。
实例演示: [root@oldboy data]# cd /tmp/oldboy/ [root@oldboy oldboy]# pwd /tmp/oldboy [root@oldboy oldboy]# awk -F ':' 'NR>=10&&NR<=20{print $3}' passwd > oldboy.txt [root@oldboy oldboy]# cat oldboy.txt 10 11 12 13 14 99 81 69 173 68 38 [root@oldboy oldboy]#
5、在题3的基础上要求用命令rm删除文件时提示如下禁止使用rm的提示,并使该效果永久生效。
[root@oldboy oldboy]# rm -f passwd
Do not use command -f passwd
实例演示: [root@oldboy oldboy]# alias rm='echo "Do not use command"' [root@oldboy oldboy]# alias | grep rm alias rm='echo "Do not use command"' [root@oldboy oldboy]# echo "alias rm='echo "Do not use command"'" >> /etc/profile [root@oldboy oldboy]# echo "alias rm='echo "Do not use command"'" >> /etc/bashrc [root@oldboy oldboy]# rm -f passwd Do not use command -f passwd [root@oldboy oldboy]#
6、在题3的基础上,删除/tmp/oldboy下除了passwd以外的其他文件。
演示实例: [root@oldboy ~]# find /tmp/oldboy/ -type f -name 'passwd' /tmp/oldboy/passwd [root@oldboy ~]# find /tmp/oldboy/ -type f ! -name 'passwd' /tmp/oldboy/oldboy.txt [root@oldboy ~]# find /tmp/oldboy/ -type f ! -name 'passwd' | \rm -rf
7、在题3的基础上,请打印/etc/passwd文件中第2-5行(不低于三种方法)。
实例演示: 方法一: [root@oldboy ~]# head -n 5 /etc/passwd | tail -n 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 方法二: [root@oldboy ~]# sed -n '2,5'p /etc/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 ~]# awk 'NR>=2 && NR<=5 {print $0}' /etc/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 ~]# 方法四: [root@oldboy ~]# awk '{if(NR>=2&&NR<=5) print $0}' /etc/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
8、在题3的基础上,使用命令调换passwd文件里root位置和/bin/bash位置?即将所有的第一列和最后一列位置调换?例如:默认:root:x:0:0:root:/root:/bin/bash修改后:/bin/bash:x:0:0:root:/root:root
实例演示: 方法一: [root@oldboy ~]# awk -F ':' '{num=$1;$1=$NF;$NF=num;print $0}' /tmp/oldboy/passwd | tr " " ":" /bin/bash:x:0:0:root:/root:root /sbin/nologin:x:1:1:bin:/bin:bin /sbin/nologin:x:2:2:daemon:/sbin:daemon /sbin/nologin:x:3:4:adm:/var/adm:adm /sbin/nologin:x:4:7:lp:/var/spool/lpd:lp /bin/sync:x:5:0:sync:/sbin:sync /sbin/shutdown:x:6:0:shutdown:/sbin:shutdown /sbin/halt:x:7:0:halt:/sbin:halt /sbin/nologin:x:8:12:mail:/var/spool/mail:mail /sbin/nologin:x:10:14:uucp:/var/spool/uucp:uucp /sbin/nologin:x:11:0:operator:/root:operator /sbin/nologin:x:12:100:games:/usr/games:games /sbin/nologin:x:13:30:gopher:/var/gopher:gopher /sbin/nologin:x:14:50:FTP:User:/var/ftp:ftp /sbin/nologin:x:99:99:Nobody:/:nobody /sbin/nologin:x:81:81:System:message:bus:/:dbus /sbin/nologin:x:69:69:virtual:console:memory:owner:/dev:vcsa /sbin/nologin:x:173:173::/etc/abrt:abrt /sbin/nologin:x:68:68:HAL:daemon:/:haldaemon /sbin/nologin:x:38:38::/etc/ntp:ntp /sbin/nologin:x:499:76:"Saslauthd:user":/var/empty/saslauth:saslauth /sbin/nologin:x:89:89::/var/spool/postfix:postfix /sbin/nologin:x:74:74:Privilege-separated:SSH:/var/empty/sshd:sshd /sbin/nologin:x:72:72::/:tcpdump /bin/bash:x:500:500::/home/oldboy:gandalf 方法二: [root@oldboy ~]# awk -F ':' '{OFS=":";num=$1;$1=$NF;$NF=num;print $0}' /tmp/oldboy/passwd 方法三: [root@oldboy ~]# awk -F ':' '{print $NF":"$2":"$3":"$4":"$5":"$6":"$1}' /tmp/oldboy/passwd /bin/bash:x:0:0:root:/root:root /sbin/nologin:x:1:1:bin:/bin:bin /sbin/nologin:x:2:2:daemon:/sbin:daemon /sbin/nologin:x:3:4:adm:/var/adm:adm /sbin/nologin:x:4:7:lp:/var/spool/lpd:lp /bin/sync:x:5:0:sync:/sbin:sync /sbin/shutdown:x:6:0:shutdown:/sbin:shutdown /sbin/halt:x:7:0:halt:/sbin:halt /sbin/nologin:x:8:12:mail:/var/spool/mail:mail /sbin/nologin:x:10:14:uucp:/var/spool/uucp:uucp /sbin/nologin:x:11:0:operator:/root:operator /sbin/nologin:x:12:100:games:/usr/games:games /sbin/nologin:x:13:30:gopher:/var/gopher:gopher /sbin/nologin:x:14:50:FTP User:/var/ftp:ftp /sbin/nologin:x:99:99:Nobody:/:nobody /sbin/nologin:x:81:81:System message bus:/:dbus /sbin/nologin:x:69:69:virtual console memory owner:/dev:vcsa /sbin/nologin:x:173:173::/etc/abrt:abrt /sbin/nologin:x:68:68:HAL daemon:/:haldaemon /sbin/nologin:x:38:38::/etc/ntp:ntp /sbin/nologin:x:499:76:"Saslauthd user":/var/empty/saslauth:saslauth /sbin/nologin:x:89:89::/var/spool/postfix:postfix /sbin/nologin:x:74:74:Privilege-separated SSH:/var/empty/sshd:sshd /sbin/nologin:x:72:72::/:tcpdump /bin/bash:x:500:500::/home/oldboy:gandalf [root@oldboy ~]# 方法四: [root@oldboy oldboy]# sed -nr 's#([^:]+)(:.*:)(/.*$)#\3\2\1#gp' /etc/passwd /bin/bash:x:0:0:root:/root:root /sbin/nologin:x:1:1:bin:/bin:bin /sbin/nologin:x:2:2:daemon:/sbin:daemon /sbin/nologin:x:3:4:adm:/var/adm:adm /sbin/nologin:x:4:7:lp:/var/spool/lpd:lp /bin/sync:x:5:0:sync:/sbin:sync /sbin/shutdown:x:6:0:shutdown:/sbin:shutdown /sbin/halt:x:7:0:halt:/sbin:halt /sbin/nologin:x:8:12:mail:/var/spool/mail:mail /sbin/nologin:x:10:14:uucp:/var/spool/uucp:uucp /sbin/nologin:x:11:0:operator:/root:operator /sbin/nologin:x:12:100:games:/usr/games:games /sbin/nologin:x:13:30:gopher:/var/gopher:gopher /sbin/nologin:x:14:50:FTP User:/var/ftp:ftp /sbin/nologin:x:99:99:Nobody:/:nobody /sbin/nologin:x:81:81:System message bus:/:dbus /sbin/nologin:x:69:69:virtual console memory owner:/dev:vcsa /sbin/nologin:x:173:173::/etc/abrt:abrt /sbin/nologin:x:68:68:HAL daemon:/:haldaemon /sbin/nologin:x:38:38::/etc/ntp:ntp /sbin/nologin:x:499:76:"Saslauthd user":/var/empty/saslauth:saslauth /sbin/nologin:x:89:89::/var/spool/postfix:postfix /sbin/nologin:x:74:74:Privilege-separated SSH:/var/empty/sshd:sshd /sbin/nologin:x:72:72::/:tcpdump /bin/bash:x:500:500::/home/oldboy:gandalf /sbin/nologin:x:48:48:Apache:/var/www:apache
9、把/data目录及其子目录下所有以扩展名.txt结尾的文件中包含oldgirl的字符串全部替换为oldboy
实例演示: [root@oldboy ~]# cd /data/ [root@oldboy data]# ls [root@oldboy data]# mkdir 330{6..7} [root@oldboy data]# echo "oldgirl1" > a.txt [root@oldboy data]# echo "oldgirl1" > 3306/b.txt [root@oldboy data]# echo "oldgirl1" > 3307/c.txt [root@oldboy data]# tree /data/ /data/ |-- 3306 | `-- b.txt |-- 3307 | `-- c.txt `-- a.txt 2 directories, 3 files [root@oldboy data]# find /data/ -type f -name "*.txt" | xargs sed -i 's/oldgirl1/oldboy/' [root@oldboy data]# find /data/ -type f -name "*.txt" | xargs cat oldboy oldboy oldboy [root@oldboy data]#
10、查找/oldboy下所有7天以前以.log结尾的大于1M的文件移动到/tmp目录下。
实例演示: [root@oldboy /]# mkdir /oldboy [root@oldboy /]# cat >> test.log < /var/log/messages [root@oldboy /]# ls -lh test.log -rw-r--r-- 1 root root 1.8M Apr 7 16:02 test.log [root@oldboy /]# mv test.log /oldboy/ [root@oldboy /]# cd /oldboy/ [root@oldboy oldboy]# ls -lh test.log -rw-r--r-- 1 root root 1.8M Apr 7 16:02 test.log [root@oldboy oldboy]# date Sat Apr 7 16:05:00 CST 2018 [root@oldboy oldboy]# date -s 20180420 Fri Apr 20 00:00:00 CST 2018 [root@oldboy oldboy]# stat test.log File: `test.log' Size: 1834246 Blocks: 3584 IO Block: 4096 regular file Device: 803h/2051d Inode: 8421 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2018-04-07 16:01:16.450486273 +0800 Modify: 2018-04-07 16:02:29.271489023 +0800 Change: 2018-04-07 16:03:52.383492492 +0800 方法一: [root@oldboy oldboy]# find /oldboy/ -type f -name "*.log" -mtime +7 -size +1M | xargs -i mv {} /tmp/ 方法二: [root@oldboy oldboy]# find /oldboy/ -type f -name "*.log" -mtime +7 -size +1M -exec mv {} /tmp \; 方法三: [root@oldboy oldboy]# mv `find /oldboy/ -type f -name '*.log' -mtime +7 -size +1M ` /tmp
11、什么是linux的运行级别,请描述linux的运行级别不同数字的含义?
答:系统当前运行中所使用的运行模式,就像手动档汽车拥有不同的档位,不同的档位代表
不同的速度工作状态。 0-6运行级别的解释: 0 关机 1 代表单用户模式(系统崩溃、root密码忘记) 2代表多用户模式,无NFS网络文件系统的功能 3代表完全多用户模式,系统默认的运行级别(即文本模式) 4代表未使用 5代表图形桌面 6代表关机
12、请描述buffer和cache的区别?
答:从互联网下载文件,现将文件写入到系统内存中,然后再慢慢往硬盘中写,这个过程称为buffer(缓冲区),如(下载)互联网上的用户,访问自己本地硬盘里的数据,硬盘将要访问的应用、文件等缓存到内存中,
互联网用户读取内存中的已缓存的应用、文件等,这个过程称为cache(缓存区),如上传
13、请说出你知道的下列字符在linux里可以代表的意义。~ - . .. | > >> < << !
答:~ 代表用户的家目录 - 代表上一次目录 . 代表当前目录 .. 代表上一级目录 | 代表管道,将前面命令的输出作为后面命令的输入 > 代表覆盖式输出重定向 >> 代表追加式输出重定向 < 代表输入重定向(前面命令执行参数可以从后面的文件中获取) >> 代表追加输入重定向(cat >> filename <EOF)! 代表取反(给find搭配)
2 Linux运维基础测试题(第二关)
2.1 习题实例
1、如何取得/etiantian文件的权限对应的数字内容,如-rw-r--r—为644,要求使用命令取得644或0644这样的数字。
解题思路:
1) 通过stat输出包含目标的内容 2) 通过head,tail,sed,awk,grep定位到行(即取行) 3) 通过cut,awk等设置分隔符取出需要段内容(即取列)
实例演示:
查看演示文件属性信息: [root@oldboy oldboy]# touch etiantian [root@oldboy oldboy]# stat etiantian File: `etiantian' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 803h/2051d Inode: 130147 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2018-04-23 05:24:50.648787149 +0800 Modify: 2018-04-23 05:24:36.355780254 +0800 Change: 2018-04-23 05:24:36.355780254 +0800
方法一:
[root@oldboy oldboy]# ls -ld etiantian | cut -c2-10 rw-r--r-- [root@oldboy oldboy]# ls -ld etiantian | cut -c2-10 | tr "rwx-" "4210" | awk -F "" '{print $1+$2+$3$4+$5+$6$7+$8+$9}' 644
方法二:
[root@oldboy oldboy]# stat -c %a etiantian 644 [root@oldboy oldboy]# stat -c %A etiantian -rw-r--r--
方法三:
[root@oldboy oldboy]# stat etiantian | awk -F "[0/]" 'NR==4 {print $2}' 644
方法四:
[root@oldboy oldboy]# stat etiantian | grep -o "0644" 0644 [root@oldboy oldboy]# stat etiantian | grep -o "644" 644
方法五:
[root@oldboy oldboy]# stat etiantian | sed -nr 's#^.*\(0(.*)/-r.*$#\1#gp' 644 [root@oldboy oldboy]# stat etiantian | sed -nr 's#^.*\(0([0-6]+)/-r.*$#\1#gp' 644 [root@oldboy oldboy]# stat etiantian | sed -nr 's#^.*\(0([0-6]*)/-r.*$#\1#gp' 644
方法六:
[root@oldboy ~]# stat /etc/hosts | awk NR==4 | grep -Po '(?<=0)\d+' 644
2、linux下通过mkdir命令创建一个新目录/oldboy/ett,ett的硬链接数是多少,为什么?
解答如下: 1) ett目录硬链接数量为2 [root@oldboy oldboy]# ls -ld ett drwxr-xr-x 2 root root 4096 Apr 24 22:11 ett 2) 包括ett目录本身和ett目录下面的”.” [root@oldboy oldboy]# ls -ld ett drwxr-xr-x 2 root root 4096 Apr 24 22:11 ett [root@oldboy oldboy]# ls -ld ett/. drwxr-xr-x 2 root root 4096 Apr 24 22:11 ett/. 3) 硬链接代表inode相同
3、请执行命令取出linux中eth0的IP地址(请用cut,awk,sed命令答)
演示内容:
[root@oldboy ~]# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:0C:29:E6:9D:C9 inet addr:172.16.0.2 Bcast:172.16.0.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fee6:9dc9/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2175 errors:0 dropped:0 overruns:0 frame:0 TX packets:1232 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:185495 (181.1 KiB) TX bytes:135164 (131.9 KiB)
实例演示:
方法一: [root@oldboy ~]# ifconfig eth0 | sed -n "2p" | cut -d ":" -f2 | cut -d " " -f1 172.16.0.2 方法二: [root@oldboy ~]# grep "IPADDR" /etc/sysconfig/network-scripts/ifcfg-eth0 | cut -d "=" -f2 172.16.0.2 方法三: [root@oldboy ~]# ifconfig eth0 | awk -F "[ :]+" 'NR==2 {print $4}' 172.16.0.2 方法四: [root@oldboy ~]# ifconfig eth0 | sed -nr '2s#^.*dr:(.*) B.*$#\1#gp' 172.16.0.2 [root@oldboy ~]# ifconfig eth0 | sed -n 's#^.*addr:\([0-9].*\) B.*$#\1#gp' 172.16.0.2 [root@oldboy ~]# ifconfig eth0 | sed -nr 's#^.*addr:([0-9].*) B.*$#\1#gp' 172.16.0.2 方法五: [root@oldboy ~]# ifconfig eth0 | grep "inet addr" | awk -F ":" '{print $2} ' | awk '{print $1}' 172.16.0.2 方法六: [root@oldboy ~]# ifconfig eth0 | sed -n '2p' | awk -F "[ :]+" '{print $4}' 172.16.0.2 awk命令-F “:”,-F指定分隔符”:”,如果不加-F默认分隔符为空格 NR 显示当前行的记录号即行号 NF 表示当前行记录域或列的个数 $1 第一列,$2第二列,$0整行 $NF 最后一列,倒数第二列$(NF-1) 方法七: [root@oldboy ~]# ifconfig eth0 | sed -nr '/inet addr/s#^.*dr:(.*) B.*$#\1#gp' 172.16.0.2 方法八: [root@oldboy ~]# ifconfig eth0 | grep -Po '(?<=dr:)\S+' 172.16.0.2 注意: Sed可以过滤想要的内容 [root@oldboy ~]# ifconfig eth0 | sed -n '/inet addr/p' inet addr:172.16.0.2 Bcast:172.16.0.255 Mask:255.255.255.0
4、请给出默认情况eth0网卡配置文件的路径以及客户端DNS的路径
解答如下: a) eth0网卡配置文件路径: /etc/sysconfig/network-scripts/ifcfg-eth0 b) DNS配置文件路径: /etc/resolv.conf 说明:如果配置DNS,ifcfg-eth0优先于resolv.conf,即先配置DNS配置文件,再配置eth0配置文件将会覆盖DNS里面配置的DNS
5、企业案例:查找当前目录下所有文件,并把文件中的www.etiantian.org字符串替换成www.etiantian.me
解答如下: [root@oldboy oldboy]# find . -type f | xargs sed -i 's#www.etiantian.org#www.etiantian.me#g'
6、问题:如何赋予oldboy文件-rw-r--r-x权限属性
解答如下: 方法一: [root@oldboy oldboy]# ls -ld oldboy -rw-r--r-- 1 root root 0 Apr 23 05:34 oldboy [root@oldboy oldboy]# chmod o+x oldboy [root@oldboy oldboy]# ls -ld oldboy -rw-r--r-x 1 root root 0 Apr 23 05:34 oldboy 方法二: [root@oldboy oldboy]# ls -ld oldboy -rw-r--r-- 1 root root 0 Apr 23 05:34 oldboy [root@oldboy oldboy]# chmod 645 oldboy [root@oldboy oldboy]# ls -ld oldboy -rw-r--r-x 1 root root 0 Apr 23 05:34 oldboy
7、执行下面命令时发现提示需要输入密码,请问提示输入的密码是哪个用户的密码?[test@oldboy ~]$ sudo su - gandalf
解答如下: [test@oldboy ~]$ sudo su - gandalf [sudo] password for test: [gandalf@oldboy ~]$ 当前执行命令test账户的密码
8、问题:请问在一个命令上加上什么参数可以实现下面命令的内容在同一行输出。
[gandalf@oldboy ~]$ echo "oldboy";echo "oldboy" 解答如下: [gandalf@oldboy ~]$ echo -n "oldboy";echo "oldboy" oldboyoldboy 说明:echo命令常用的参数 echo参数: -n do not output the trailing newline #不换行,即两个命令输出在同一行 -e enable interpretation of backslash escapes #命令中可以包含“\n,\t等” [gandalf@oldboy ~]$ echo -e "oldboyoldgril" oldboyoldgril [gandalf@oldboy ~]$ echo -e "oldboy\noldgril\told" oldboy oldgril old
9、问题:请给出如下格式的date命令 例:11-02-26。再给出实现按周输出 比如:周二输出为2,请分别给出命令(标黄即本题答案)
解答如下: [root@oldboy ~]# date Tue Apr 24 23:37:03 CST 2018 [root@oldboy ~]# date +%F 2018-04-24 [root@oldboy ~]# date +%y-%m-%d 18-04-24 [root@oldboy ~]# date +%w 2 [root@oldboy ~]# date +%u 2 [root@oldboy ~]# date +%X 23:44:02 [root@oldboy ~]# date +%T 23:44:08 [root@oldboy ~]# date +%F,%T 2018-04-24,23:45:05 [root@oldboy ~]# date +%F" "%T 2018-04-24 23:45:09 [root@oldboy ~]# date +%y-%m-%d" "%H:%M:%S 18-04-24 23:46:48 [root@oldboy ~]# date -s "2018/04/25 21:43" ##手动修改系统日期和时间 Wed Apr 25 21:43:00 CST 2018
特殊引用时间方法:
[root@oldboy ~]# echo $(date +%y-%m-%d" "%H:%M:%S) 18-04-24 23:47:26 [root@oldboy ~]# echo `date +%y-%m-%d" "%H:%M:%S` 18-04-24 23:47:36
生产环境一般是做定时任务时间同步,机器少可以直接和互联网的时间同步,如:
时间扩展问题:如打印三天前或三天后的日期格式如:2018-04-22/28
[root@oldboy ~]# date +%F 2018-04-25 [root@oldboy ~]# date +%F -d "-3days" 2018-04-22 [root@oldboy ~]# date +%F -d "3 day ago" 2018-04-22 [root@oldboy ~]# date +%F -d "3days" 2018-04-28 [root@oldboy ~]# date +%F -d "+3days" 2018-04-28
10、问题:环境变量如何查看及添加
解答如下: PATH 所有命令的路径所在地,用冒号分隔 [root@oldboy ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin #临时生效,永久生效需要添加到/etc/profile配置文件,使用source(.) /etc/profile立即生效 #$HOME代表普通用户家目录的全路径 [root@oldboy ~]# export PATH=$PATH:$HOME/bin:/sbin [root@oldboy ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin:/sbin
11、已知/oldboy/test.txt文件内容为:
[root@oldboy oldboy]# cat test.txt oldboy xizi xiaochao
请问如何把文件中的空行过滤掉?
解答如下:
方法一(推荐): [root@oldboy oldboy]# grep -v "^$" test.txt oldboy xizi xiaochao 方法二(推荐): [root@oldboy oldboy]# sed '/^$/d' test.txt oldboy xizi xiaochao 方法三: [root@oldboy oldboy]# sed -nr '/^[^$]/p' test.txt oldboy xizi xiaochao 方法四: [root@oldboy oldboy]# awk '/^[^$]/' test.txt oldboy xizi xiaochao
12、请描述下列路径的内容时做什么的?
/var/log/messages 系统日志 /var/log/secure 系统安全日志 /var/spool/clientmqueue 邮件临时目录(临时队列) /proc/interrupts 查看中断文件 /etc/fstab 磁盘文件系统开机自动挂载文件 /etc/profile 全局的环境变量配置文件
13、如何快速查到ifconfig的全路径,请给出命令:
解答如下: [root@oldboy ~]# which ifconfig /sbin/ifconfig [root@oldboy ~]# whereis ifconfig ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz [root@oldboy ~]# whereis -b ifconfig ifconfig: /sbin/ifconfig [root@oldboy ~]# locate ifconfig /sbin/ifconfig /usr/sbin/pifconfig /usr/share/man/de/man8/ifconfig.8.gz /usr/share/man/fr/man8/ifconfig.8.gz /usr/share/man/man8/ifconfig.8.gz /usr/share/man/man8/pifconfig.8.gz /usr/share/man/pt/man8/ifconfig.8.gz [root@oldboy ~]# find / -name "ifconfig" /sbin/ifconfig
14、每周日上午9:30来linux培训机构上课(用/oldboy.sh代替),请用linux定时任务命令表示
解答如下: 模拟题意: [root@oldboy ~]# echo "echo "welcome to learning linux"" > oldboy.sh [root@oldboy ~]# ls -ld oldboy.sh -rw-r--r-- 1 root root 31 Apr 25 22:36 oldboy.sh [root@oldboy ~]# cat oldboy.sh echo welcome to learning linux [root@oldboy ~]# /bin/sh oldboy.sh welcome to learning linux 演示实例: [root@oldboy ~]# crontab -e #创建定时任务 no crontab for root - using an empty one #learning linux 9:30 sunday by wolf_dreams 2018-04-25 30 09 * * 0 /bin/sh /root/oldboy.sh > /dev/null 2>&1 [root@oldboy ~]# crontab -l #查看已经创建的定时任务 #learning linux 9:30 sunday by wolf_dreams 2018-04-25 30 09 * * 0 /bin/sh /root/oldboy.sh > /dev/null 2>&1
15、请给出查看当前哪些用户在线的linux命令
解答如下: [root@oldboy ~]# who #当前登录linux系统的用户 root pts/0 Apr 24 23:06 (172.16.0.100) [root@oldboy ~]# w #当前登录系统用户详细信息 22:47:19 up 3:22, 1 user, load average: 0.08, 0.05, 0.01 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 172.16.0.100 Tue23 0.00s 0.28s 0.00s w [root@oldboy ~]# last #最近登录系统用户及对系统做何种操作 root pts/0 172.16.0.100 Tue Apr 24 23:06 still logged in root pts/0 172.16.0.100 Tue Apr 24 21:33 - 23:06 (01:32) reboot system boot 2.6.32-431.el6.x Tue Apr 24 21:33 - 22:47 (1+01:14) [root@oldboy ~]# lastlog #系统所有用户登录日志情况 Username Port From Latest root pts/0 172.16.0.100 Tue Apr 24 23:06:40 +0800 2018 bin **Never logged in** daemon **Never logged in** adm **Never logged in** lp **Never logged in** sync **Never logged in** shutdown **Never logged in** halt **Never logged in** mail **Never logged in** uucp **Never logged in** operator **Never logged in** games **Never logged in** gopher **Never logged in** ftp **Never logged in** nobody **Never logged in** dbus **Never logged in** vcsa **Never logged in** abrt **Never logged in** haldaemon **Never logged in** ntp **Never logged in** saslauth **Never logged in** postfix **Never logged in** sshd **Never logged in** tcpdump **Never logged in** apache **Never logged in** gandalf **Never logged in** test **Never logged in** [root@oldboy ~]# users #当前正在工作的用户 root
16、公司开发人员申请对某一台服务器10天的普通用户权限,请问你如何操作只给此用户10天的使用权限
解答如下: [root@oldboy ~]# date +%F 2018-04-25 [root@oldboy ~]# chage -l test Last password change : Apr 24, 2018 Password expires : never Password inactive : never Account expires : never Minimum number of days between password change : 0 Maximum number of days between password change : 99999 Number of days of warning before password expires : 7 #普通账户test,10天后过期 [root@oldboy ~]# usermod -e "$(date +%F -d "+10day")" test [root@oldboy ~]# chage -l test Last password change : Apr 24, 2018 Password expires : never Password inactive : never Account expires : May 05, 2018 Minimum number of days between password change : 0 Maximum number of days between password change : 99999 Number of days of warning before password expires : 7 #取消test普通用户添加的过期期限 [root@oldboy ~]# chage -E -1 test [root@oldboy ~]# chage -l test Last password change : Apr 24, 2018 Password expires : never Password inactive : never Account expires : never Minimum number of days between password change : 0 Maximum number of days between password change : 99999 Number of days of warning before password expires : 7
17、关机、重启、注销命令总结
关机: Shutdown -h now #立刻关机 Shutdown -h +1 #1分钟后关机 init 0 halt poweroff 重启: reboot shutdown -r now shutdown -r +1 init 6 注销: logout exit Ctrl+d #快捷键注销
3 Linux运维基础测试题(第三关)
通过一段时间对linux系统的基本命令、文件属性及权限、三剑客grep、sed、awk正则表达式以及常用的通配符、VI编辑器的学习,进行掌握测试是否形成自己潜意识的知识等
3.1 习题实例
1、每隔1分钟,打印一个+号到oldboy.log,请给出crontab完整命令
#系统定时任务配置文件 [root@oldboy ~]# cat /etc/crontab #创建定时任务 [root@oldboy ~]# crontab -e #echo + oldboy.log file by wolf_dreams 2018-05-01 */1 * * * * echo "+" > /root/oldboy/oldboy.log #查看已创建的定时任务 [root@oldboy ~]# crontab -l #echo + oldboy.log file by wolf_dreams 2018-05-01 */1 * * * * echo "+" > /root/oldboy/oldboy.log #显示实时写入动作 [root@oldboy ~]# tail -f /root/oldboy/oldboy.log + tail: /root/oldboy/oldboy.log: file truncated +
2、每隔2个小时将系统文件/etc/services文件打包备份到/tmp目录下(每次备份按时间生成不同的备份包)
#打包脚本实例 [root@oldboy oldboy]# vi backup_service.sh #!/bin/bash cd / /bin/tar -czvf /tmp/$(date +%F-%T).tar.gz etc/services [root@oldboy oldboy]# chmod u+x backup_service.sh [root@oldboy oldboy]# ls -l backup_service.sh -rwxr--r-- 1 root root 65 May 1 11:45 backup_service.sh #查看定时任务每分钟执行一次 [root@oldboy oldboy]# crontab -l | tail -2 ####tar ***/etc/services */1 * * * * /bin/sh /root/oldboy/backup_service.sh > /dev/null 2>&1 #查看定时任务每两个小时执行一次 [root@oldboy oldboy]# crontab -l | tail -2 ####tar ***/etc/services 00 */2 * * * /bin/sh /root/oldboy/backup_service.sh > /dev/null 2>&1 #显示演示结果(每隔1分钟) [root@oldboy tmp]# ls -l total 256 -rw-r--r-- 1 root root 127303 May 1 12:10 2018-05-01-12:10:01.tar.gz -rw-r--r-- 1 root root 127303 May 1 12:11 2018-05-01-12:11:01.tar.gz #显示演示结果(每隔2个小时) [root@oldboy tmp]# ls -l total 256 -rw-r--r-- 1 root root 127303 May 1 14:00 2018-05-01-14:00:05.tar.gz -rw-r--r-- 1 root root 127303 May 1 16:00 2018-05-01-16:00:28.tar.gz
3、每天晚上12点,打包站点目录/var/www/html备份到/data目录下(每次备份按时间生成不同的备份包)
#打包备份脚本实例 [root@oldboy oldboy]# vi backup_html.sh #!/bin/bash cd / /bin/tar -czvf /data/backup_$(date +%F).tar.gz var/www/html #给备份脚本赋予x执行权限 [root@oldboy oldboy]# chmod u+x backup_html.sh [root@oldboy oldboy]# ls -ld backup_html.sh -rwxr--r-- 1 root root 79 May 1 17:59 backup_html.sh #查看定时任务每天晚上12:00执行备份脚本 [root@oldboy oldboy]# crontab -l |tail -2 ###tar /var/www/html file /data 00 00 * * * /bin/sh /root/oldboy/backup_html.sh > /dev/null 2>&1 #显示备份脚本执行结果 [root@oldboy tmp]# ls -l /data/ total 12 -rw-r--r-- 1 root root 167 May 1 00:00 backup_2018-05-01.tar.gz -rw-r--r-- 1 root root 167 May 2 00:00 backup_2018-05-02.tar.gz -rw-r--r-- 1 root root 167 May 3 2018 backup_2018-05-03.tar.gz 4`;do date -s "2018-05-$n 00:00";sleep 60;done Tue May 1 00:00:00 CST 2018
4、写一个定时任务,每天晚上0点删除第三题中生成的过期的压缩包(只保留最近7天)
#循环设置时间的脚本实例 [root@oldboy tmp]# for n in `seq 1 1 14`;do date -s "2018-05-$n 00:00";sleep 60;done Tue May 1 00:00:00 CST 2018 Wed May 2 00:00:00 CST 2018 Thu May 3 00:00:00 CST 2018 Fri May 4 00:00:00 CST 2018 Sat May 5 00:00:00 CST 2018 Sun May 6 00:00:00 CST 2018 Mon May 7 00:00:00 CST 2018 Tue May 8 00:00:00 CST 2018 Wed May 9 00:00:00 CST 2018 Thu May 10 00:00:00 CST 2018 Fri May 11 00:00:00 CST 2018 Sat May 12 00:00:00 CST 2018 Sun May 13 00:00:00 CST 2018 Mon May 14 00:00:00 CST 2018 #查看/data目录下的文件 [root@oldboy ~]# ls -l /data/ total 56 -rw-r--r-- 1 root root 167 May 1 00:00 backup_2018-05-01.tar.gz -rw-r--r-- 1 root root 167 May 2 00:00 backup_2018-05-02.tar.gz -rw-r--r-- 1 root root 167 May 3 00:00 backup_2018-05-03.tar.gz -rw-r--r-- 1 root root 167 May 4 00:00 backup_2018-05-04.tar.gz -rw-r--r-- 1 root root 167 May 5 00:00 backup_2018-05-05.tar.gz -rw-r--r-- 1 root root 167 May 6 00:00 backup_2018-05-06.tar.gz -rw-r--r-- 1 root root 167 May 7 00:00 backup_2018-05-07.tar.gz -rw-r--r-- 1 root root 167 May 8 00:00 backup_2018-05-08.tar.gz -rw-r--r-- 1 root root 167 May 9 00:00 backup_2018-05-09.tar.gz -rw-r--r-- 1 root root 167 May 10 00:00 backup_2018-05-10.tar.gz -rw-r--r-- 1 root root 167 May 11 00:00 backup_2018-05-11.tar.gz -rw-r--r-- 1 root root 167 May 12 00:00 backup_2018-05-12.tar.gz -rw-r--r-- 1 root root 167 May 13 00:00 backup_2018-05-13.tar.gz -rw-r--r-- 1 root root 167 May 14 00:00 backup_2018-05-14.tar.gz #删除/data目录下文件的脚本实例 [root@oldboy oldboy]# vi remove_backup.sh #!/bin/bash /bin/find /data/ -type f -name "*.tar.gz" ! -mtime -7 | xargs /bin/rm –f [root@oldboy oldboy]# chmod u+x remove_backup.sh [root@oldboy oldboy]# ls -ld remove_backup.sh -rwxr--r-- 1 root root 82 May 14 00:09 remove_backup.sh #查看设置的定时任务(每天晚上12点) [root@oldboy oldboy]# crontab -l | tail -2 ###remove /data directory *.tar.gz files 00 00 * * * /bin/sh /root/oldboy/remove_backup.sh > /dev/null 2>&1 #再次查看/data目录确认是否把7天以前以及第7天的压缩包是否删除 [root@oldboy ~]# ls -l /data/ total 28 -rw-r--r-- 1 root root 167 May 8 00:00 backup_2018-05-08.tar.gz -rw-r--r-- 1 root root 167 May 9 00:00 backup_2018-05-09.tar.gz -rw-r--r-- 1 root root 167 May 10 00:00 backup_2018-05-10.tar.gz -rw-r--r-- 1 root root 167 May 11 00:00 backup_2018-05-11.tar.gz -rw-r--r-- 1 root root 167 May 12 00:00 backup_2018-05-12.tar.gz -rw-r--r-- 1 root root 167 May 13 00:00 backup_2018-05-13.tar.gz -rw-r--r-- 1 root root 167 May 14 00:00 backup_2018-05-14.tar.gz
5、请描述下列路径的内容时做什么的?
/etc/sysctl.conf 配置一些系统信息,而且它的内容全部是对应于/proc/sys/这个目录的子目录及文件 /etc/rc.local 开机自启动程序放置目录 /etc/hosts LAN域名解析 /etc/fstab 系统开机自动挂载文件系统 /var/log/secure 安全日志
6、请说出下列grep正则表达式的含义
^ 表示以什么开头 $ 表示以什么结尾 .(点号) 表示任意单个字符 \ 表示转义 * 表示任意0个、1个及多个字符 \{n,m\} 表示匹配前面字符n-m次 [^t] 表示匹配不包含t字符的内容 ^[^t] 表示匹配非t开头的任意字符
7、vi命令考察,根据中文给出命令
退出保存 表示:wq 退出并强制保存 表示:wq! 强制退出,不保存 表示:q! 光标移动到文件的最后一行 表示G 光标移动到文件的第一行 表示gg 从光标所在位置将光标移动到当前行的开头 表示0或^或home 从光标所在位置将光标移动到当前行的结尾 表示$或Shift+a(到结尾处于编辑模式)或end 取消上一次的动作 表示u 删除一行及删除包含改行的10行 表示dd、10dd 复制一行及复制包含改行的10行 表示yy、10yy 粘贴复制的内容 表示p 向下搜索 表示/ 继续搜索n,反向搜索N 向上搜索 表示? 继续搜索n,反向搜索N
8、授权oldboy目录及其子目录755的权限,请给出命令
[root@oldboy ~]# ls -ld oldboy drw-r--r-- 2 root root 4096 Apr 29 18:59 oldboy [root@oldboy ~]# chmod -R 755 oldboy [root@oldboy ~]# ls -ld oldboy drwxr-xr-x 2 root root 4096 Apr 29 18:59 oldboy [root@oldboy ~]# ls -l oldboy total 8 -rwxr-xr-x 1 root root 120 Apr 29 18:59 guanggao.txt -rwxr-xr-x 1 root root 121 Apr 29 18:59 guanggao.txt.ogi
9、把oldboy目录及其子目录的属主改为oldboy,组改为root,请给出命令
[root@oldboy ~]# ls -ld oldboy;ls -l oldboy drwxr-xr-x 2 test test 4096 Apr 29 18:59 oldboy total 8 -rwxr-xr-x 1 test test 120 Apr 29 18:59 guanggao.txt -rwxr-xr-x 1 test test 121 Apr 29 18:59 guanggao.txt.ogi [root@oldboy ~]# chown -R oldboy:root oldboy [root@oldboy ~]# ls -ld oldboy;ls -l oldboy drwxr-xr-x 2 oldboy root 4096 Apr 29 18:59 oldboy total 8 -rwxr-xr-x 1 oldboy root 120 Apr 29 18:59 guanggao.txt -rwxr-xr-x 1 oldboy root 121 Apr 29 18:59 guanggao.txt.ogi
10、描述下umask的作用,并举例
解答: umask值是控制linux系统默认创建文件默认权限是644和目录的默认权限是755,umask值默认为0022,umask是由八进制数组成0-7,计算umask值由三种方法:1、数字计算2、二进制换算3、第三方计算工具;
文件的计算方法是:如果umask位是偶数,则使用文件权限666减去umask值得出linux系统创建文件的默认权限;如果umask位是奇数,则使用文件权限666减去umask值后在奇数位上加1得出linux系统创建文件的默认权限;
目录的计算方式是:使用目录权限777减去umask值得出linux系统创建目录的默认权限
11、添加一个用户oldman,并指定属于sa组,要求组ID为801,uid为808,并且不建立家目录及禁止其登陆
[root@oldboy ~]# groupadd -g 801 sa [root@oldboy ~]# useradd -g sa -u 808 -s /sbin/nologin -M oldman [root@oldboy ~]# tail -1 /etc/passwd oldman:x:808:801::/home/oldman:/sbin/nologin [root@oldboy ~]# tail -1 /etc/group sa:x:801:
12、如何查看第十一题中用户的uid及属于组的信息
[root@oldboy ~]# id oldman uid=808(oldman) gid=801(sa) groups=801(sa)
13、查看当前系统每IP连接数
[root@cobbler-node1 ~]# netstat -n Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 180 172.16.0.3:2201 172.16.0.100:49278 ESTABLISHED tcp 0 0 172.16.0.3:5389 172.16.0.100:54140 TIME_WAIT tcp 0 0 172.16.0.3:21 172.16.0.100:54139 TIME_WAIT Active UNIX domain sockets (w/o servers) Proto RefCnt Flags Type State I-Node Path unix 2 [ ] DGRAM 9741 /var/run/portreserve/socket unix 6 [ ] DGRAM 9773 /dev/log unix 2 [ ] DGRAM 7937 @/org/kernel/udev/udevd unix 2 [ ] DGRAM 28397 unix 2 [ ] DGRAM 27407 unix 2 [ ] DGRAM 9866 unix 2 [ ] DGRAM 9840 unix 3 [ ] DGRAM 7957 unix 3 [ ] DGRAM 7956 [root@cobbler-node1 ~]# netstat -n|awk '/^tcp/{print $4}'|awk -F ":" '{print $1}'|sort -n |uniq -c 3 172.16.0.3
14、请列出(http|https|ftp|telnet|ssh|rsync|dns|mysql)服务使用的端口
[root@cobbler-node1 ~]# awk --posix '$1~/^(http|https|ftp|telnet|ssh|rsync|dns|mysql)$/ {print $0}' /etc/services ftp 21/tcp ftp 21/udp fsp fspd ssh 22/tcp # The Secure Shell (SSH) Protocol ssh 22/udp # The Secure Shell (SSH) Protocol telnet 23/tcp telnet 23/udp http 80/tcp www www-http # WorldWideWeb HTTP http 80/udp www www-http # HyperText Transfer Protocol http 80/sctp # HyperText Transfer Protocol https 443/tcp # http protocol over TLS/SSL https 443/udp # http protocol over TLS/SSL https 443/sctp # http protocol over TLS/SSL rsync 873/tcp # rsync rsync 873/udp # rsync mysql 3306/tcp # MySQL mysql 3306/udp # MySQL ftp 21/sctp # FTP ssh 22/sctp # SSH