老男孩教育-第2周課前測試考試題

第2章 第2周課前測試考試題


2.1 過濾一級目錄

第1題如何過濾出已知當前目錄下oldboy中的所有一級目錄

(提示:不包含oldboy目錄下面目錄的子目錄及隱藏目錄,即只能是一級目錄)?

[root@lb01 ~]# mkdir /oldboy/{a..b}/{c..g}/{e..f} -p

方法一

[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

方法二

[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

方法四

[root@lb01 ~]# ls -F /oldboy/|grep /
[root@lb01 ~]# ls -p /oldboy/|grep /
a/
b/

ls的參數

-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 內容的行號及內容,該如何做?

1、cat -n 顯示行號

[root@lb01 ~]# cat -n nginx.conf 
     1  chen001
     2  chen002
     3  chen003
     4  chen004
     5  chen005

2、nl  專業顯示行號的命令

[root@lb01 ~]# nl nginx.conf 
     1  chen001
     2  chen002
     3  chen003
     4  chen004
     5  chen005

3、grep  點代表所有的內容,先把所有的內容過濾出來,接着在前面分別加上行號

[root@lb01 ~]# grep -n . nginx.conf 
1:chen001
2:chen002
3:chen003
4:chen004
5:chen005

4、awk  NR代表行號,逗號代表默認的分隔符是空格,$0代表所有域,即整行內容

[root@lb01 ~]# awk '{print NR,$0}' nginx.conf 
1 chen001
2 chen002
3 chen003
4 chen004
5 chen005

5、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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章