學習筆記:Linux常見題目解析分享

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了學習筆記:Linux常見題目解析分享相关的知识,希望对你有一定的参考价值。

學習題目分享解答

--此篇博客感謝老男孩老師教學,才得以學習完成此篇博客--


描述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
[[email protected] ~]# 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進程

[[email protected] ~]# 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目錄下面的子目錄及隱藏目錄,即只能是一級目錄)?

正則表達式:

解答:


環境搭建:

[[email protected] ~]# mkdir oldboy
[[email protected] ~]# cd oldboy
[[email protected] oldboy]# mkdir ext/oldboy test xiaodong xiaofan xingfujie -p
[[email protected] oldboy]# touch jeacen oldboy wodi.gz yingsui.gz
[[email protected] oldboy]# tree
.
├── ext
│   └── oldboy
├── jeacen
├── oldboy
├── test
├── wodi.gz
├── xiaodong
├── xiaofan
├── xingfujie
└── yingsui.gz
[[email protected] 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)為開頭的就是目錄


[[email protected] 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的就是目錄(在文件沒有硬鏈接的情況是對的)

[[email protected] 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)

例子:

[[email protected] oldboy]# ls -F
ext/    oldboy  wodi.gz    xiaofan/    yingsui.gz
jeacen  test/   xiaodong/  xingfujie/
[[email protected] oldboy]# ls -F | grep "/$"
ext/
test/
xiaodong/
xiaofan/
xingfujie/


(5)透過find直接查找指定類型的文件(-d就是目錄)

   其實很簡單,下面的ls -l 結果中以d為開頭的就是目錄,我們需要做的就是只能把這些目錄打印出來。

(一)

[[email protected] oldboy]# find ./ -maxdepth 1 -type d   ---->(maxdepth 深度。  maxdepth 1 表示當前的目錄,沒有往下一層
./
./test
./xiaofan
./xiaodong
./ext
./xingfujie

(二)

[[email protected] oldboy]# find ./ -maxdepth 1 -type  d ! -name ‘.‘    --->不會出現./   當前目錄
./test
./xiaofan
./xiaodong
./ext
./xingfujie

(6)

       

 [[email protected] oldboy]# ls -l | sed -n ‘/^d‘/p

(7)

[[email protected] oldboy]# ls -l | awk ‘/^d/‘

(8)

[[email protected] oldboy]# ls -F | awk ‘/\/$/‘    
ext/                                | |______>>>>  /$   以/為結尾
test/                               |________>>>>   \ 因為前後都有/  會沒辦法知道是哪一個為結尾,因此需要轉譯~~
xiaodong/
xiaofan/
xingfujie/

(9)

[[email protected] oldboy]# ls -F | sed -n ‘/\/$/p‘
ext/
test/
xiaodong/
xiaofan/
xingfujie/



2. 假如當前目錄是

[[email protected] oldboy]# pwd 

oldboy

現在因為需要進入到了/tmp目錄下進行操作,執行的命令如下:

[[email protected] oldboy]# cd /tmp

[[email protected] tmp]# pwd

/tmp

操作完畢後,希望快速返回上一層進入的目錄,即/oldboy目錄,該如何做呢?(提示:不能用cd /oldboy命令呦)



解答:

[[email protected] oldboy]# pwd---->查看當前目錄
/root/oldboy
[[email protected] oldboy]# cd /tmp---->切換到/tmp目錄
[[email protected] tmp]# env | grep -i OLDPWD ---->此時系統環境變量OLDPWD的變化
OLDPWD=/root/oldboy
[[email protected] tmp]# cd ----->回到進入/tmp之前的目錄  (本題答案)
/root/oldboy
[[email protected] oldboy]# env | grep -i OLDPWD---->此時系統環境變量OLDPWD的變化
OLDPWD=/tmp

****

環境變量OLDPWD始終記錄當前路徑的前一個路徑內容,而執行cd - 命令正可以進入到這個變量保留的前一個目錄

****


3. 一個目錄中有很多文件(ls 查看時好多屏),想最快速度查找到最近更新的文件。如何看?


解答:

依賴於當前系統時間:

[[email protected] /]# date
2017年 07月 11日 星期二 23:00:57 CST
[[email protected] /]# touch /etc/1.txt
[[email protected] /]# touch /etc/2.txt

[[email protected] /]# 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初學者,本題稍難,認真看題記住就好ㄌ,後面會講解。


[[email protected] oldboy]# mkdir /application/apache2.2.17 -p
[[email protected] oldboy]# ls -ld /application/apache2.2.17/
drwxr-xr-x. 2 root root 4096 Jul 17 23:56 /application/apache2.2.17/
[[email protected] oldboy]# ln -s /application/apache2.2.17/ /application/apache
[[email protected] oldboy]# ls -ld /application/apache
lrwxrwxrwx. 1 root root 26 Jul 17 23:57 /application/apache -> /application/apache2.2.17/
[[email protected] oldboy]# mkdir /application/apache2.2.17/test.txt
[[email protected] oldboy]# ls /application/apache
test.txt


如果企業換了apache的版本,我要怎麼

辦呢?

[[email protected] oldboy]# mkdir /application/apache2.4.2/
[[email protected]dboy oldboy]# mv  /application/apache2.2.17/ /tmp/
[[email protected] oldboy]# rm -f /application/apache
[[email protected] oldboy]# ln -s /application/apache2.4.2/ /application/apache
[[email protected] 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的方式刪除

[[email protected] logs]# find /app/logs/ -type f -mtime +7 | xargs rm -f

方法二:

[[email protected] logs]# find /app/logs/ -type f -mtime +7 -exec rm -f {} \;

方法三:

[[email protected] logs]# \rm - f `find /app/logs/ -type f -mtime +7`


6. 調試系統服務時,希望能實現查看系統日志/var/log/messages 的更新,如何做?


解答:


法一:此方法最常用

[[email protected] 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

法二:

[[email protected] logs]# tailf /var/log/messages   ----> 跟tail -f 類似的功能


法三:--->拓展的方式

[[email protected] logs]# tail -F /var/log/messages    ---->   -F     same as --follow=name --retry  (和-f比多個重試的功能,就是文件不存在了,會不斷嘗試)




7. 打印配置文件nginx.conf內容的行號與內容,該如何做?


解答:**nginx 跟apache是不同的網頁服務軟件,是同類型的!

這裡提供五個方法來實踐:

[[email protected] oldboy]# echo stu {01..20} | xargs -n 1 > nginx.conf    
**法一:(空行不算行號)
 [[email protected] oldboy]# nl nginx.conf 
     1stu
     201
     302
     403
     504
     605


法二:

cat -n nginx.conf  ---->這個方法最常用

法三:

[[email protected] 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
....等等

**法四:

[[email protected] 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    就可以取消行號

法五:

[[email protected] 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

法六:

[[email protected] 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裡

環境演示:

[[email protected] ~]# chkconfig --list sshd
sshd           0:off1:off2:on3:on4:on5:on6:off
[[email protected] ~]# chkconfig sshd off
[[email protected] ~]# chkconfig --list sshd    ----->默認控制2345 級別,那 題目要求我們指控制3級別 該怎麼做呢?
sshd           0:off1:off2:off3:off4:off5:off6:off


****

[[email protected] ~]# chkconfig --level 3 sshd off----> 關掉開機字啟動服務(第三級別)
[[email protected] ~]# chkconfig --list sshd 
sshd           0:off1:off2:off3:off4:off5:off6:off---->第三級別關閉off
[[email protected] ~]# ll /etc/rc.d/rc3.d/ | grep sshd
lrwxrwxrwx. 1 root root 14 Jul 14 00:43 K25sshd -> ../init.d/sshd---->K 表示關閉 
[[email protected] ~]# rm -rf /etc/rc.d/rc3.d/K25sshd ---->刪除
[[email protected] ~]# ll /etc/rc.d/rc3.d/ | grep sshd---->此時找不到任何東西
[[email protected] ~]# cd /etc/rc.d/rc3.d/
[[email protected] rc3.d]# ln -s /etc/init.d/sshd S55sshd---->創建軟鏈接
[[email protected] rc3.d]# ll /etc/rc.d/rc3.d/ | grep sshd
lrwxrwxrwx. 1 root root 16 Jul 14 00:45 S55sshd -> /etc/init.d/sshd---->查看是否創建成功
[[email protected] rc3.d]# chkconfig --list sshd
sshd           0:off1:off2:off3:on4:off5:off6:off---->開機自啟動ㄌ

**那為甚麼會開啟是55  關閉是25?

[[email protected] 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字節廣泛支持



解答:

[[email protected] oldboy]# echo $LANG --->這個系統的環境變量是控制字符顯示的
zh_CN.UTF-8


法一:

[[email protected] oldboy]# export LANG="zh_CN.UTF-8" ---->此法可以執行後,僅在當前窗口生效
[[email protected] oldboy]# echo $LANG
zh_CN.UTF-8

***要注意字符集的大小寫***

法二:

[[email protected] oldboy]# echo ‘LANG="zh_CN.UTF-8"‘ > /etc/sysconfig/i18n   ---->寫到配置文件裡會永久生效
[[email protected] oldboy]# source /etc/sysconfig/i18n  ---->若要讓配置立即生效需要執行這個步驟
[[email protected] 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.關掉全部打開需要的

第一步:

[[email protected] 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
.....等等

第二步:

[[email protected] 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
.....等等

第三步:

[[email protected] 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
.....等等

第四步:

[[email protected] 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
.....等等

第五步:

[[email protected] rc3.d]# chkconfig --list | grep "3:on" | egrep -v "crond|sshd|network|rsyslog|sysstat" | awk ‘{print "chkconfig",$1,"off"}‘ | bash
實現:
[[email protected] 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 查看文件行數
[[email protected] ~]$ wc -l /etc/services 
10774 /etc/services

方法二"

所有查行號的都可以 類似cat -n file | tail -1

[[email protected] ~]$ cat -n /etc/services | tail -1
 10774iqobject        48619/udp               # iqobject


本文出自 “我的Linux之夢” 博客,请务必保留此出处http://12098022.blog.51cto.com/12088022/1950060

以上是关于學習筆記:Linux常見題目解析分享的主要内容,如果未能解决你的问题,请参考以下文章

學習筆記:Linux 文件和目錄屬性及權限

老男孩老師課程學習筆記----第一階段Linux命令行總結

老男孩老師課程學習筆記----linux目錄特點

andorid 學習筆記

Java學習筆記(基本語法)

FPGA學習筆記(貳)--- 流水燈