學習題目分享解答
--此篇博客感謝老男孩老師教學,才得以學習完成此篇博客--
描述linux系統的啟動過程? (企業面試題)
(1)簡單描述(口頭)
1.開機BIOS自檢 --->檢查硬件是否正常 自檢完後 根據啟動順序,教給下一個設備處理
2.MBR引導 ---->(硬盤)
硬盤0柱面0磁道1扇區的前446byte (1扇區 512字節) 剩下的(512-446 =66) 其中64用來分區表(4個--->意思是4個主分區或4個擴展分區) 最後兩個(分區的結束標示)
3.grub 引導菜單
cat /etc/grub.conf [root@oldboy ~]# cat /etc/grub.conf # grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/sda3 # initrd /initrd-[generic-]version.img #boot=/dev/sda default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS 6 (2.6.32-696.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=ed6f055b-bc3c-4d26-a7a5-716b97e9b96c rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-696.el6.x86_64.img
4.加載內核kernel
5.啟動init進程
[root@oldboy ~]# ps -ef | grep init root 1 0 0 Jul13 ? 00:00:04 /sbin/init ---->linux啟動的第一個進程 root 1977 1843 0 00:00 pts/0 00:00:00 grep init
6. 讀取inittab文件,執行rc.sysinit , rc 等腳本
/etc/inittab ----->這個腳本的基本功能就是初始化系統(設置主機名,設置運行級別(只執行所欲運行的級別下的腳本) /etc/rc.d/rc.sysinit /etc/rc.d/rc3.d ------> 文本模式
7. 啟動mingetty ,進入系統登入介面
***提示***
以下命令會重點涉及但不限於以下命令:chkconifg cat ls tail ln find wc tar cut grep egrep
**********
1. 如何過濾出已知當前目錄下oldboy中的所有一級目錄(提示:不包含oldboy目錄下面的子目錄及隱藏目錄,即只能是一級目錄)?
正則表達式:
解答:
環境搭建:
[root@oldboy ~]# mkdir oldboy [root@oldboy ~]# cd oldboy [root@oldboy oldboy]# mkdir ext/oldboy test xiaodong xiaofan xingfujie -p [root@oldboy oldboy]# touch jeacen oldboy wodi.gz yingsui.gz [root@oldboy oldboy]# tree . ├── ext │ └── oldboy ├── jeacen ├── oldboy ├── test ├── wodi.gz ├── xiaodong ├── xiaofan ├── xingfujie └── yingsui.gz [root@oldboy oldboy]# ls -l 總用量 20 drwxr-xr-x. 3 root root 4096 7月 10 12:49 ext--->以d為開頭是目錄 -rw-r--r--. 1 root root 0 7月 10 12:50 jeacen -rw-r--r--. 1 root root 0 7月 10 12:50 oldboy drwxr-xr-x. 2 root root 4096 7月 10 12:49 test--->以d為開頭是目錄 -rw-r--r--. 1 root root 0 7月 10 12:50 wodi.gz drwxr-xr-x. 2 root root 4096 7月 10 12:49 xiaodong--->以d為開頭是目錄 drwxr-xr-x. 2 root root 4096 7月 10 12:49 xiaofan--->以d為開頭是目錄 drwxr-xr-x. 2 root root 4096 7月 10 12:49 xingfujie--->以d為開頭是目錄 -rw-r--r--. 1 root root 0 7月 10 12:50 yingsui.gz
分析過程:要完成此題,我們首先要想如何區分目錄和文件?
思錄思想方法:
(1)根據顏色區分文件和目錄(淺藍色是目錄)
(2)ls -l 結果中以d(directory)為開頭的就是目錄
[root@oldboy oldboy]# ls -l | grep "^d" ----->注意!!! (^表示以什麼為開頭) drwxr-xr-x. 3 root root 4096 7月 10 12:49 ext drwxr-xr-x. 2 root root 4096 7月 10 12:49 test drwxr-xr-x. 2 root root 4096 7月 10 12:49 xiaodong drwxr-xr-x. 2 root root 4096 7月 10 12:49 xiaofan drwxr-xr-x. 2 root root 4096 7月 10 12:49 xingfujie
(3)ls -l 輸出結果中第二列數字大於1的就是目錄(在文件沒有硬鏈接的情況是對的)
[root@oldboy oldboy]# ls -l | awk ‘{if($2>1) print $0}‘ ----> $2 就是第二列 $0輸出全部 總用量 20 drwxr-xr-x. 3 root root 4096 7月 10 12:49 ext drwxr-xr-x. 2 root root 4096 7月 10 12:49 test drwxr-xr-x. 2 root root 4096 7月 10 12:49 xiaodong drwxr-xr-x. 2 root root 4096 7月 10 12:49 xiaofan drwxr-xr-x. 2 root root 4096 7月 10 12:49 xingfujie
(4)透過給目錄加標識,然後透過過濾標識,就過濾出目錄(ls -F 或 ls -p)
例子:
[root@oldboy oldboy]# ls -F ext/ oldboy wodi.gz xiaofan/ yingsui.gz jeacen test/ xiaodong/ xingfujie/ [root@oldboy oldboy]# ls -F | grep "/$" ext/ test/ xiaodong/ xiaofan/ xingfujie/
(5)透過find直接查找指定類型的文件(-d就是目錄)
其實很簡單,下面的ls -l 結果中以d為開頭的就是目錄,我們需要做的就是只能把這些目錄打印出來。
(一)
[root@oldboy oldboy]# find ./ -maxdepth 1 -type d ---->(maxdepth 深度。 maxdepth 1 表示當前的目錄,沒有往下一層 ./ ./test ./xiaofan ./xiaodong ./ext ./xingfujie
(二)
[root@oldboy oldboy]# find ./ -maxdepth 1 -type d ! -name ‘.‘ --->不會出現./ 當前目錄 ./test ./xiaofan ./xiaodong ./ext ./xingfujie
(6)
[root@oldboy oldboy]# ls -l | sed -n ‘/^d‘/p
(7)
[root@oldboy oldboy]# ls -l | awk ‘/^d/‘
(8)
[root@oldboy oldboy]# ls -F | awk ‘/\/$/‘ ext/ | |______>>>> /$ 以/為結尾 test/ |________>>>> \ 因為前後都有/ 會沒辦法知道是哪一個為結尾,因此需要轉譯~~ xiaodong/ xiaofan/ xingfujie/
(9)
[root@oldboy oldboy]# ls -F | sed -n ‘/\/$/p‘ ext/ test/ xiaodong/ xiaofan/ xingfujie/
2. 假如當前目錄是
[root@oldboy oldboy]# pwd
oldboy
現在因為需要進入到了/tmp目錄下進行操作,執行的命令如下:
[root@oldboy oldboy]# cd /tmp
[root@oldboy tmp]# pwd
/tmp
操作完畢後,希望快速返回上一層進入的目錄,即/oldboy目錄,該如何做呢?(提示:不能用cd /oldboy命令呦)
解答:
[root@oldboy oldboy]# pwd---->查看當前目錄 /root/oldboy [root@oldboy oldboy]# cd /tmp---->切換到/tmp目錄 [root@oldboy tmp]# env | grep -i OLDPWD ---->此時系統環境變量OLDPWD的變化 OLDPWD=/root/oldboy [root@oldboy tmp]# cd ----->回到進入/tmp之前的目錄 (本題答案) /root/oldboy [root@oldboy oldboy]# env | grep -i OLDPWD---->此時系統環境變量OLDPWD的變化 OLDPWD=/tmp
****
環境變量OLDPWD始終記錄當前路徑的前一個路徑內容,而執行cd - 命令正可以進入到這個變量保留的前一個目錄
****
3. 一個目錄中有很多文件(ls 查看時好多屏),想最快速度查找到最近更新的文件。如何看?
解答:
依賴於當前系統時間:
[root@oldboy /]# date 2017年 07月 11日 星期二 23:00:57 CST [root@oldboy /]# touch /etc/1.txt [root@oldboy /]# touch /etc/2.txt
[root@oldboy /]# ls -lrt /etc---> -r, reverse reverse order while sortin
g
本題答案為:
ls -lrt /etc ----->執行這個命令後最新的文件會在最下面。
#--->以長格式按照修改時間倒序排列文件和目錄,這樣最近創建或修改的文件或目錄就在窗口最下面了。
**第三題總結**
1)本題主要考察ls命令的一個技巧用法,涉及到了-t -r -l等參數
2)涉及到的命令為:ls 、mkdir 、tail 、alias(unalias)
3)綜結以上涉及的命令知識點: 見一個學習一個,學會積累知識是學好運維的關鍵素質!!
4. 在配置apache時,執行了./configure --prefix=/application/apache2.2.17 來編譯apache,在make install完成後,希望用戶的訪問路徑更簡單,需要給/application/apache2.2.17 目錄
做一個軟鏈接/application/apache ,使得內部開發或管理人員透過/application/apache就可以訪問到apache的安裝目錄/application/apache2.2.17下的內容,請你給出實現的命令。
(提示:apache為一個httpd web服務)
解答:(對於Linux初學者,本題稍難,認真看題記住就好ㄌ,後面會講解。
[root@oldboy oldboy]# mkdir /application/apache2.2.17 -p [root@oldboy oldboy]# ls -ld /application/apache2.2.17/ drwxr-xr-x. 2 root root 4096 Jul 17 23:56 /application/apache2.2.17/ [root@oldboy oldboy]# ln -s /application/apache2.2.17/ /application/apache [root@oldboy oldboy]# ls -ld /application/apache lrwxrwxrwx. 1 root root 26 Jul 17 23:57 /application/apache -> /application/apache2.2.17/ [root@oldboy oldboy]# mkdir /application/apache2.2.17/test.txt [root@oldboy oldboy]# ls /application/apache test.txt
如果企業換了apache的版本,我要怎麼
辦呢?
[root@oldboy oldboy]# mkdir /application/apache2.4.2/ [root@oldboy oldboy]# mv /application/apache2.2.17/ /tmp/ [root@oldboy oldboy]# rm -f /application/apache [root@oldboy oldboy]# ln -s /application/apache2.4.2/ /application/apache [root@oldboy oldboy]# ls -ld /application/apache lrwxrwxrwx. 1 root root 25 Jul 18 00:02 /application/apache -> /application/apache2.4.2/
5. 已知道apache服務的訪問日志按天記錄在服務器本地目錄/app/logs下,由於磁盤空間緊張,現在要求只能保留最近7天訪問日志!
請問如何解決? 請給出解決辦法或配置或處理命令。
(提示:可以從apache服務配置上著手,也可以從生成出來的日志上著手)
解答:apache日志測試數據: 企業面試題
方法一:透過find的方式刪除
[root@oldboy logs]# find /app/logs/ -type f -mtime +7 | xargs rm -f
方法二:
[root@oldboy logs]# find /app/logs/ -type f -mtime +7 -exec rm -f {} \;
方法三:
[root@oldboy logs]# \rm - f `find /app/logs/ -type f -mtime +7`
6. 調試系統服務時,希望能實現查看系統日志/var/log/messages 的更新,如何做?
解答:
法一:此方法最常用
[root@oldboy logs]# tail -f /var/log/messages
提示:對於設環境測試的同學可以開兩個窗口,然後自己手工透過echo oldboy >> /var/log/messages的方式模擬messages多次更新測試(也可以寫腳本),然後另一個窗口tail -f /var/log/messages查看。
-f, --follow[={name|descriptor}]
output appended data as the file grows; -f, --follow, and --fol-
low=descriptor are equivalent
法二:
[root@oldboy logs]# tailf /var/log/messages ----> 跟tail -f 類似的功能
法三:--->拓展的方式
[root@oldboy logs]# tail -F /var/log/messages ----> -F same as --follow=name --retry (和-f比多個重試的功能,就是文件不存在了,會不斷嘗試)
7. 打印配置文件nginx.conf內容的行號與內容,該如何做?
解答:**nginx 跟apache是不同的網頁服務軟件,是同類型的!
這裡提供五個方法來實踐:
[root@oldboy oldboy]# echo stu {01..20} | xargs -n 1 > nginx.conf **法一:(空行不算行號) [root@oldboy oldboy]# nl nginx.conf 1stu 201 302 403 504 605
法二:
cat -n nginx.conf ---->這個方法最常用
法三:
[root@oldboy oldboy]# grep -n . nginx.conf 1:stu |_____>意思是任意一個字符 2:01 3:02 4:03 5:04 6:05 7:06 8:07 9:08 10:09 ....等等
**法四:
[root@oldboy oldboy]# vim nginx.conf 1 stu 2 01 3 02 4 03 5 04 6 05 7 06 8 07 9 08 10 09 11 10 12 11 13 12 14 13 15 14 16 15 17 16 18 17 19 18 20 19 21 20 :set nu ------>顯示行號 如果是:set nonu 就可以取消行號
法五:
[root@oldboy oldboy]# awk ‘{print NR,$0}‘ nginx.conf NR表示行號 :set nonu為取消行號 1 stu 2 01 3 02 4 03 5 04 6 05 7 06 8 07 9 08
法六:
[root@oldboy oldboy]# sed = nginx.conf | sed ‘N;s/\n/ /‘ 1 stu 2 01 3 02 4 03 5 04 6 05 7 06 8 07 9 08 10 09 11 10 12 11
8. 裝完系統後,希望讓網絡文件共享服務NFS,僅在3級別上開機自動啟動,該如何做?
解答: 什麼是開機自啟動,例如360等每次開機都會自動起來對吧?我們就需要像360這樣,在Linux下軟件服務隨系統啟動而啟動配置。
第一種文件配置方法,可以把要啟動的服務的命令放在/etc/rc.local裡
環境演示:
[root@oldboy ~]# chkconfig --list sshd sshd 0:off1:off2:on3:on4:on5:on6:off [root@oldboy ~]# chkconfig sshd off [root@oldboy ~]# chkconfig --list sshd ----->默認控制2345 級別,那 題目要求我們指控制3級別 該怎麼做呢? sshd 0:off1:off2:off3:off4:off5:off6:off
****
[root@oldboy ~]# chkconfig --level 3 sshd off----> 關掉開機字啟動服務(第三級別) [root@oldboy ~]# chkconfig --list sshd sshd 0:off1:off2:off3:off4:off5:off6:off---->第三級別關閉off [root@oldboy ~]# ll /etc/rc.d/rc3.d/ | grep sshd lrwxrwxrwx. 1 root root 14 Jul 14 00:43 K25sshd -> ../init.d/sshd---->K 表示關閉 [root@oldboy ~]# rm -rf /etc/rc.d/rc3.d/K25sshd ---->刪除 [root@oldboy ~]# ll /etc/rc.d/rc3.d/ | grep sshd---->此時找不到任何東西 [root@oldboy ~]# cd /etc/rc.d/rc3.d/ [root@oldboy rc3.d]# ln -s /etc/init.d/sshd S55sshd---->創建軟鏈接 [root@oldboy rc3.d]# ll /etc/rc.d/rc3.d/ | grep sshd lrwxrwxrwx. 1 root root 16 Jul 14 00:45 S55sshd -> /etc/init.d/sshd---->查看是否創建成功 [root@oldboy rc3.d]# chkconfig --list sshd sshd 0:off1:off2:off3:on4:off5:off6:off---->開機自啟動ㄌ
**那為甚麼會開啟是55 關閉是25?
[root@oldboy rc3.d]# cat /etc/init.d/sshd #!/bin/bash # # sshdStart up the OpenSSH server daemon # # chkconfig: 2345 55 25
方法一:全部關掉然後開啟需要的級別的服務
chkconfig nfs off ----->默認2,3,4,5都是開啟狀態,所以需要都先關了,當然也可以用chkconfig --level 245 nfs off chkconfig --level 3 nfs on chkconfig --list nfs 來查看
方法二:關掉不需要的級別,啟用需要的級別
chkconfig --level 245 nfs off chkconfig --level 3 nfs on chkconfig --list nfs
提示:
1)操作完別忘了執行chkconfig --list nfs再次檢查結果
2)設置開機自啟動也可以不用chkconfig , 只需把啟動的命令加到/etc/rc.local 就可以達成
9. linux系統運行級別一般是0-6,請分別寫出每個級別的含意
0關機模式
1單用戶模式
2無NFS的多用戶模式
3文本模式(完整的多用戶模式)
4未使用的
5圖形模式
6重啟模式
10. Linux系統中查看中文亂碼,請問該如何解決亂碼問題?什麼字符集?
簡單來說就是一套文字符號及其編碼。常用的字符集有:
GBK定長雙字節不是國際標準
UTF-8非定長1-4字節廣泛支持
解答:
[root@oldboy oldboy]# echo $LANG --->這個系統的環境變量是控制字符顯示的 zh_CN.UTF-8
法一:
[root@oldboy oldboy]# export LANG="zh_CN.UTF-8" ---->此法可以執行後,僅在當前窗口生效 [root@oldboy oldboy]# echo $LANG zh_CN.UTF-8
***要注意字符集的大小寫***
法二:
[root@oldboy oldboy]# echo ‘LANG="zh_CN.UTF-8"‘ > /etc/sysconfig/i18n ---->寫到配置文件裡會永久生效 [root@oldboy oldboy]# source /etc/sysconfig/i18n ---->若要讓配置立即生效需要執行這個步驟 [root@oldboy oldboy]# echo $LANG zh_CN.UTF-8
11. 如何優化linux系統(可以不用說的具體)?
解答:
根據上周和本周所講的,我們先來10點,後續課程會逐漸增加
01)不用root,添加普通用戶,透過sudo授權管理
02)更改默認的遠程連接SSH服務端口及禁止root用戶遠程連接
03)定時自動更新服務器時間
04)配置yum更新源,從國內更新源下載安裝rpm包
05)關閉selinux及iptalbles (iptalbes工作場景如果有wan ip一般要打開,高併發除外)
06)調整文件描述符的數量,進程及文件的打開都會消耗文件描述符
07)定時自動清理/var/spool/clientmquene/目錄垃圾文件,防止inodes節點被占滿(c6.4默認沒有sendmail,因此,可以不配)
08)精簡開機自啟動服務(crond定時任務,sshd,network,rsyslog日誌收集管理,sysstat) ------>(其中sysstat是一個包含軟件包,包含監測系統性能及效率的一套工具,主要有iostat(提供CPU及硬盤吞吐效率的數據),mpstat(提供單個或多個處理器相關數據),sar(負責收集、報告並存儲系統活躍的信息)
(1)執行命令,然後手動選擇處理的方法
方法一:執行ntsysv命令然後在彈出的窗口中進行設置
方法二:執行setup命令--->system service ,然後在彈出的窗口中進行設置
(2)透過一行命令或shell腳本設置
思路:
1.關掉不需要的 2.關掉全部打開需要的
第一步:
[root@oldboy rc3.d]# chkconfig --list | grep "3:on" abrt-ccpp 0:off1:off2:off3:on4:off5:on6:off abrtd 0:off1:off2:off3:on4:off5:on6:off acpid 0:off1:off2:on3:on4:on5:on6:off atd 0:off1:off2:off3:on4:on5:on6:off auditd 0:off1:off2:on3:on4:on5:on6:off blk-availability0:off1:on2:on3:on4:on5:on6:off cpuspeed 0:off1:on2:on3:on4:on5:on6:off .....等等
第二步:
[root@oldboy rc3.d]# chkconfig --list | grep "3:on" | egrep -v "crond|sshd|network|rsyslog|sysstat" abrt-ccpp 0:off1:off2:off3:on4:off5:on6:off abrtd 0:off1:off2:off3:on4:off5:on6:off acpid 0:off1:off2:on3:on4:on5:on6:off atd 0:off1:off2:off3:on4:on5:on6:off auditd 0:off1:off2:on3:on4:on5:on6:off .....等等
第三步:
[root@oldboy rc3.d]# chkconfig --list | grep "3:on" | egrep -v "crond|sshd|network|rsyslog|sysstat" | awk ‘{print $1}‘ abrt-ccpp abrtd acpid atd auditd blk-availability cpuspeed haldaemon .....等等
第四步:
[root@oldboy rc3.d]# chkconfig --list | grep "3:on" | egrep -v "crond|sshd|network|rsyslog|sysstat" | awk ‘{print "chkconfig",$1,"off"}‘ chkconfig abrt-ccpp off chkconfig abrtd off chkconfig acpid off chkconfig atd off chkconfig auditd off chkconfig blk-availability off chkconfig cpuspeed off chkconfig haldaemon off chkconfig ip6tables off .....等等
第五步:
[root@oldboy rc3.d]# chkconfig --list | grep "3:on" | egrep -v "crond|sshd|network|rsyslog|sysstat" | awk ‘{print "chkconfig",$1,"off"}‘ | bash 實現: [root@oldboy rc3.d]# chkconfig --list | grep "3:on" crond 0:off1:off2:on3:on4:on5:on6:off network 0:off1:off2:on3:on4:on5:on6:off rsyslog 0:off1:off2:on3:on4:on5:on6:off sshd 0:off1:off2:on3:on4:on5:on6:off sysstat 0:off1:on2:on3:on4:on5:on6:off
C.P 參考跟老男孩老師學linux運帷 Web集群 3.4.3
09)linux內核參數優化/etc/sysctl/conf 執行sysctl -p 生效
10)更改字符集,支持中文,但建議還是使用英文字符集,防止亂碼問題,不要使用中文
11)鎖定關鍵系統文件
chattr -i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/initab
處理以上內容後把chattr lsattr改名為oldboy就安全多ㄌ
12)清空/etc/issue ,去除系統及內核版本登錄前的屏幕顯示
13)清除無用的默認系統帳號(非必要)
C.P http://oldboy.blog.51cto.com/2561410/988726
12. 如何查看/etc/services文件的有多少行?
解答:
方法一:
wc -l 查看文件行數 [oldboy@oldboy ~]$ wc -l /etc/services 10774 /etc/services
方法二"
所有查行號的都可以 類似cat -n file | tail -1
[oldboy@oldboy ~]$ cat -n /etc/services | tail -1 10774iqobject 48619/udp # iqobject
本文出自 “我的Linux之夢” 博客,请务必保留此出处http://12098022.blog.51cto.com/12088022/1950060
原文地址:http://12098022.blog.51cto.com/12088022/1950060