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 …. >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