第2章 第2周課前測試考試題node
2.1 過濾一級目錄mysql
第1題如何過濾出已知當前目錄下oldboy中的全部一級目錄linux
(提示:不包含oldboy目錄下面目錄的子目錄及隱藏目錄,即只能是一級目錄)?nginx
[root@lb01 ~]# mkdir /oldboy/{a..b}/{c..g}/{e..f} -p
方法一
web
[root@lb01 ~]# tree -L 1 -dfi /oldboy/ /oldboy /oldboy/a /oldboy/
tree命令參數
算法
-d List directories only -f Prints the full path prefix for each file -i Makes tree not print the indentation lines -L Max display depth of the directory tree
方法二
sql
[root@lb01 ~]# find /oldboy/ -maxdepth 1 -type d /oldboy/ /oldboy/b /oldboy/a
方法三數據庫
[root@lb01 ~]# ls -l /oldboy/|grep ^d|awk '{print $9}' [root@lb01 ~]# ls -l /oldboy/|sed -n '/^d/p'|awk '{print $9}' [root@lb01 ~]# ls -l /oldboy/|awk '/^d/'|awk '{print $9}' a b
方法四
apache
[root@lb01 ~]# ls -F /oldboy/|grep / [root@lb01 ~]# ls -p /oldboy/|grep / a/ b/
ls的參數
vim
-F, --classify append indicator (one of */=>@|) to entries -p, --indicator-style=slash append / indicator to directories
2.2 切換到上一次目錄
第2題/oldboy 和 /tmp目錄這間來回切換
[root@lb01 oldboy]# pwd#當前路徑 /oldboy [root@lb01 oldboy]# cd /tmp/#切換到/tmp [root@lb01 tmp]# cd -#切換回上一次的目錄 /oldboy [root@lb01 oldboy]# pwd#檢查 /oldboy [root@lb01 oldboy]# echo $OLDPWD#可以來回切換,是由這個變量控制的 /tmp
2.3 查看最近的文件
第3題一個目錄中有不少文件(ls -l 查看時好多屏),想用一條命令最快速度查看到最近更新的文件。如何看?
[root@lb01 oldboy]# ls -lrt 總用量 20 -rw-r--r-- 1 root root 16 8月 25 22:24 c.sh -rw-r--r-- 1 root root 16 8月 25 22:24 b.sh -rw-r--r-- 1 root root 16 8月 25 22:24 a.sh drwxr-xr-x 7 root root 4096 8月 26 09:12 a drwxr-xr-x 7 root root 4096 8月 26 09:12 b -rw-r--r-- 1 root root 0 8月 26 09:35 chen.txt -rw-r--r-- 1 root root 0 8月 26 09:36 oldboy.txt
總結:
當ls -l列出目錄條目時,默認是按文件名來排序的,若是想看到最新更新的文件,則應該加-t參數,它表明按修改時間排序,可是若是隻加-t參數,列表的排序默認是最近更新的條目在最上方,但題目中很文件特別多,放在屏幕最上方就須要再滑滾輪來看了,因此應該再加-r參數,表明逆序排序,就是跟默認的排序相反。
2.4 軟連接
第4題/application/apache2.2.17 -> /application/apache
在配置apache時 執行了./configure --prefix=/application/apache2.2.17 來編譯apche,在make install 完成後,但願用戶訪問 apache 路徑更簡單,須要給/application/apache2.2.17 目錄作一個軟連接/application/apache,使得內部開發或管理人員經過/application/apache 就能夠訪問到 apache 的安裝目錄/application/apache2.2.17 下的內容,請你給出實現的命令。(提示:apache 爲一個 web 服務)
[root@lb01 ~]# mkdir -p /application/apache2.2.17 [root@lb01 ~]# ln -s /application/apache2.2.17/ /application/apache [root@lb01 ~]# ls -lid /application/apache2.2.17/ /application/apache 142163 lrwxrwxrwx 1 root root 26 8月 26 09:43 /application/apache -> /application/apache2.2.17/ 142162 drwxr-xr-x 2 root root 4096 8月 26 09:41 /application/apache2.2.17/
總結:
1.目錄只能作軟連接,不能作硬連接
2.符號鏈接目錄的inode不一樣,而硬鏈接文件原文件或目錄的inode是相同的
3.軟連接至關於文件或目錄的快捷方式
4.刪除符號鏈接,對原文件或目錄無影響
5.刪除原文件或目錄,會致使符號鏈接失效
2.5 刪7天前的文件
第5題考查find命令
已知 apache 服務的訪問日誌按天記錄在服務器本地目錄/app/logs 下,因爲磁盤空間緊張,如今要求只能保留最近 7 天的訪問日誌!請問如何解決? 請給出解決辦法或配置或處理命令。(提示:能夠從 apache 服務配置上着手,也能夠從生成出來的日誌上着手。)
解答:
查找出7天之前的日誌文件,將它們給刪了,能夠把這條命令放到定時任務的配置文件裏,這樣就能夠實現自動刪除了。
準備素材
mkdir /app/logs -p cd /app/logs/ touch {1..10}.log
把系統時間日後調,這樣如今建立的文件能夠是7天前的
[root@lb01 logs]# date 2016年 09月 09日 星期五 00:00:01 CST
方法一
[root@lb01 logs]# find ./ -type f -name "*.log" -mtime +7|xargs rm # 找文件類型,名字是以.log結尾的,並且是7天之前就建立了的,找到後就刪掉。把找到的結果塞進管道,接着用xargs命令處理成一行內容,再所有給rm命令處理掉。
方法二
[root@lb01 logs]# rm -f `find ./ -type f -name "*.log" -mtime +7` # 注意尖角號
方法三
[root@lb01 logs]# find ./ -type f -name "*.log" -mtime +7 -exec rm {} \;
2.6 實時查看文件的動態改變
第6題調試系統服務時,但願能實時查看/var/log/messages 系統日誌的更新,如何作?
解答:
[root@lb01 ~]# tail -f /var/log/messages# 實時查看這個文件尾部的變化 [root@lb01 ~]# tailf /var/log/messages# 獨立存在的命令,生產環境不建議使用
驗證:
能夠克隆一個會話,輸入命令/etc/init.d/network restart,能夠觀察到文件/var/log/messages是有變化的
總結:
-f 參數的意思是當文件增加時,會實時輸出被增長的數據 -F 參數和-f不同的是,它會不斷的重次
2.7 顯示行號
第7題打印輕量級 web 服務的配置文件 nginx.conf 內容的行號及內容,該如何作?
一、cat -n 顯示行號
[root@lb01 ~]# cat -n nginx.conf 1 chen001 2 chen002 3 chen003 4 chen004 5 chen005
二、nl 專業顯示行號的命令
[root@lb01 ~]# nl nginx.conf 1 chen001 2 chen002 3 chen003 4 chen004 5 chen005
三、grep 點表明全部的內容,先把全部的內容過濾出來,接着在前面分別加上行號
[root@lb01 ~]# grep -n . nginx.conf 1:chen001 2:chen002 3:chen003 4:chen004 5:chen005
四、awk NR表明行號,逗號表明默認的分隔符是空格,$0表明全部域,即整行內容
[root@lb01 ~]# awk '{print NR,$0}' nginx.conf 1 chen001 2 chen002 3 chen003 4 chen004 5 chen005
五、vim顯示行號
[root@lb01 ~]# vim nginx.conf # 顯示行號 :set nu 去掉行號 :set nonu 1 chen001 2 chen002 3 chen003 4 chen004 5 chen005
總結:
專業顯示行號的命令是nl,正則表達示中的特殊符號,點表明任意字符,^表明以…開頭,$符號表明以…結尾,\表明轉義字符,awk的打印功能不要忘記加單引號括起來。
2.8 開機自啓動服務
第8題裝完 Centos 系統後,但願網絡文件共享服務 NFS,僅在 3 級別上開機自啓動,該如何作?
[root@lb01 ~]# chkconfig --level 3 nfs on [root@lb01 ~]# chkconfig --list nfs nfs 0:關閉 1:關閉 2:關閉 3:啓用 4:關閉 5:關閉 6:關閉
2.9 系統運行級別
第9題linux 系統運行級別通常爲 0-6,請分別寫出每一個級別的含義。
Linux系統運行級別的配置文件是:/etc/inittab
0 - halt (Do NOT set initdefault to this)# 關機,別設置默認級別爲0 1 - Single user mode # 單用戶模式 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 沒有網絡文件系統的多用戶模式,其它和3都同樣 3 - Full multiuser mode# 完整的多用戶模式 4 - unused# 未使用 5 - X11# 桌面 6 - reboot (Do NOT set initdefault to this)# 重啓,若是設置爲默認,則開機後就重啓,不斷循環 id:3:initdefault: # 默認的級別是3級別,修改默認級別,就在這個地方改
2.10 中文亂碼
第10題linux 系統中查看中文亂碼,請問如何解決亂碼問題?
方法一:當前生效
[root@lb01 ~]# echo $LANG# 先看當前的環境變量LANG en_US.UTF-8 [root@lb01 ~]# export LANG='zh_CN.UTF-8'# 修改字符集的環境變量爲中國中文 [root@lb01 ~]# echo $LANG zh_CN.UTF-8
方法二:永久生效,寫到配置文件裏
[root@lb01 ~]# cat /etc/sysconfig/i18n # 先看字符集配置文件 LANG="en_US.UTF-8" SYSFONT="latarcyrheb-sun16" [root@lb01 ~]# echo 'LANG="zh_CN.UTF-8"' >/etc/sysconfig/i18n # 修改字符集,將美國英語改爲中國中文 [root@lb01 ~]# source /etc/sysconfig/i18n # 使字符集配置文件生效
方法三:永久生效,放到系統全局環境變量配置文件裏
[root@lb01 ~]# echo "export LANG='zh_CN.UTF-8'" >>/etc/profile [root@lb01 ~# . /etc/profile # 使配置文件立馬生效
驗證:
[root@lb01 ~]# echo $LANG# 把變量LANG打印出來
zh_CN.UTF-8
總結:
中文亂碼是由於字符集不一致而致使的,因此須要把默認的字符集變量改成中文的UTF-8類型就能夠了,還要記得source這個文件下,將配置文件生效。
2.11 優化系統
第11題如何優化 linux 系統(能夠不說太具體)?
1.關防火牆
2.關selinux
3.設置開機默認的運行級別爲3
4.精簡開機自啓動服務,只保留5個:network、network、crond、rsyslog、sysstat
5.作定時任務,同步時間
6.中文字符集
7.增大文件描述符
8.註釋多餘的系統虛擬賬號
9.隱藏linux版本信息的顯示
10.bash安全,例如,空閒超時時間,命令歷史記錄的數量
11.定時清理郵件服務臨時目錄垃圾文件
12.優化內核參數
13.鎖定關鍵系統文件,防止提權篡改
14.優化sshd服務,例如:不容許空密碼、不容許root用戶遠程鏈接,修改遠程鏈接的端口等
15.sudo受權普通用戶能遠程管理服務器
16.給grub菜單加密碼,防止進入單用戶模式,破解root密碼
17.禁止ping
18.升級不漏洞的軟件
2.12 打包和壓縮
第12題/etc/目錄爲 linux 系統的默認的配置文件及服務啓動命令的目錄
1.請用 tar 打包/etc 整個目錄(打包及壓縮)
2.請用 tar 打包/etc 整個目錄(打包及壓縮,但須要排除/etc/services 文件)
3.請把 a 點命令的壓縮包,解壓到/tmp 指定目錄下(最好只用 tar 命令實現)
解答:
第一小題
[root@lb01 ~]# cd /# 先切換到上級目錄 [root@lb01 /]# tar zcvf etc.tar.gz ./etc # z表明支持gzip解壓文件,c表明創建新的壓縮檔案,v表明顯示操做過程,f表明指定壓縮文件,切記,f這個參數是最後一個參數,後面只能接檔案名。 [root@lb01 /]# du -h etc.tar.gz # 可看到單個壓縮文件的大小是9.3M 9.3M etc.tar.gz
第二小題
[root@lb01 /]# tar zcf etc.tar.gz ./etc --exclude=./etc/services [root@lb01 /]# tar tf etc.tar.gz |grep /etc/services # 驗證:t表明列出檔案的內容,看不到文件
第三小題
[root@lb01 /]# mkdir /tmp/etcbak# 準備好解壓的目錄 [root@lb01 /]# tar -zxf etc.tar.gz -C /tmp/etcbak/ # x表明解壓,C表明指定解壓後的目錄 [root@lb01 /]# ll /tmp/etcbak/etc/#驗證
總結:
通常用法:打包參數:zcvf解包參數:zxvf
注:tar是打包,不是壓縮!
打包和壓縮的概念
打包是指將一大堆文件或目錄變成一個總的文件
壓縮則是將一個大的文件經過一些壓縮算法變成一個小文件
爲何要區分這兩個概念呢?這源於Linux中不少壓縮程序只能針對一個文件進行壓縮,這樣當你想要壓縮一大堆文件時,你得先將這一大堆文件先打成一個包(tar命令),而後再用壓縮程序進行壓縮(gzip bzip2命令)。
linux下最經常使用的打包程序就是tar了,使用tar程序打出來的包咱們常稱爲tar包,tar包文件的命令一般都是以.tar結尾的。生成tar包後,就能夠用其它的程序來進行壓縮。
tar命令經常使用參數
-z, --gzip#壓縮爲gzip包 filter the archive through gzip -c, --create#建立一個檔案 create a new archive -v, --verbose#顯示詳細信息,可省略…… verbosely list files processed -f, --file=ARCHIVE#指定檔案的名稱 use archive file or device ARCHIVE -t, --list #列出檔案內的內容 list the contents of an archive -x, --extract, --get#解包 extract files from an archive -C, --directory=DIR #指定解包的目錄 change to directory DIR --exclude=PATTERN#排除 exclude files, given as a PATTERN
2.13 過濾指定字符串
第13題考查grep命令
已知以下命令及結果:
[oldboy@test ~]$ echo "I am oldboy,myqq is 31333741">>oldboy.txt [oldboy@test ~]$ cat oldboy.txt I am oldboy,myqq is 31333741
如今須要從文件中過濾出「oldboy」和「31333741」字符串,請給出命令。
解答:
[root@lb01 ~]# awk -F '[ ,]+' '{print $3,$6}' oldboy.txt oldboy 31333741
總結:
-F指定分隔符,這個文件的內容只有一行,但分隔符有空格和逗號,因此再用[ ]把多個分隔符括起來,後面的+號表明把這多個分隔符當作是一個分隔符。
2.14 統計行號
第14題如何查看/etc/services 文件內容有多少行?
方法一:先用wc輸出總數,再過濾
[root@lb01 ~]# wc /etc/services 10774 58104 641020 /etc/services 總行數 單詞數 字節數 [root@lb01 ~]# wc /etc/services |awk '{print $1}' 10774
方法二:直接用wc的-l參數來統計共多少行
[root@lb01 ~]# wc -l /etc/services 10774 /etc/services
總結:
wc命令能夠給每一個文件打印字節數,字符數,總行數,單詞總數,最長行的長度
wc命令的參數
-c, --bytes print the byte counts -m, --chars print the character counts -l, --lines print the newline counts -w, --words print the word counts -L, --max-line-length print the length of the longest line # 最長行的長度:字符數,計空格
2.15 過濾指定字符串所在的行
第15題過濾出/etc/services 文件包含 3306 或 1521 兩數據庫端口的行的內容。
方法一
[root@lb01 ~]# grep -E "3306|1521" /etc/services mysql 3306/tcp # MySQL mysql 3306/udp # MySQL ncube-lm 1521/tcp # nCube License Manager ncube-lm 1521/udp # nCube License Manager
方法二
[root@lb01 ~]# egrep --color=auto "3306|1521" /etc/services mysql 3306/tcp # MySQL mysql 3306/udp # MySQL ncube-lm 1521/tcp # nCube License Manager ncube-lm 1521/udp # nCube License Manager