Linux運(yùn)維工程師面試題(1)

Linux運(yùn)維工程師面試題(1)
1 別名、內(nèi)部命令、外部命令的執(zhí)行順序
2 linux 系統(tǒng)啟動(dòng)流程
3 破解用戶密碼的方法
4 忘記 grub 密碼怎么解決
5 硬盤空間滿了怎么處理,怎么找到硬盤中的大文件
6 硬盤明明有很多空間,為什么無(wú)法存儲(chǔ)文件
7 進(jìn)程使用內(nèi)存問題
????7.1 內(nèi)存泄露:Memory Leak
????7.2 內(nèi)存溢出:Memory Overflow
????7.3 內(nèi)存不足:OOM
8 進(jìn)程、線程和協(xié)程的區(qū)別
9 使用 find 命令找出/data目錄下15天以上以log結(jié)尾的文件并刪除
10 su、su - 和 sudo 的區(qū)別
Linux運(yùn)維工程師面試題(1)
祝各位小伙伴們?cè)缛照业阶约盒膬x的工作。 持續(xù)學(xué)習(xí)才不會(huì)被淘汰。 地球不爆炸,我們不放假。 機(jī)會(huì)總是留給有有準(zhǔn)備的人的。 加油,打工人!
1 別名、內(nèi)部命令、外部命令的執(zhí)行順序
命令執(zhí)行尋找順序:別名 > 內(nèi)部命令 > 外部命令;
即先尋找是否為別名,然后再找是否為內(nèi)部命令,最后才找是否為外部命令。
拓展:什么是內(nèi)部命令?什么是外部命令?
內(nèi)部命令:由shell自帶的,而且通過(guò)某命令形式提供
外部命令:在文件系統(tǒng)路徑下有對(duì)應(yīng)的可執(zhí)行程序文件
2 linux 系統(tǒng)啟動(dòng)流程
不同操作系統(tǒng)及版本有所不同,以下以 centos 7 為例。
啟動(dòng)流程比較復(fù)雜,以下簡(jiǎn)要描述,詳細(xì)看下圖
UEFI 或 BIOS 初始化,運(yùn)行 POST 開機(jī)加電自檢;
加載 BIOS 的硬件信息,獲取第一個(gè)啟動(dòng)設(shè)備;
讀取第一個(gè)啟動(dòng)設(shè)備 MBR 的引導(dǎo)加載程序 (grub) 的啟動(dòng)信息;
引導(dǎo)裝載程序,centos 7 是 grub2,加載裝載程序的配置文件:
/etc/grub.d/
/etc/default/grub
/boot/grub2/grub.cfg
加載 initramfs 驅(qū)動(dòng)模塊;
加載內(nèi)核選項(xiàng);
內(nèi)核初始化,centos7使用systemd代替init;
執(zhí)行 initrd.target 所有單元,包括掛載 /etc/fstab;
從 initramfs 根文件系統(tǒng)切換到磁盤根目錄;
systemd 執(zhí)行默認(rèn) target 配置,配置文件 /etc/systemd/system/default.target;
systemd 執(zhí)行 sysinit.target 初始化系統(tǒng)及 basic.target 準(zhǔn)備操作系統(tǒng);
systemd 啟動(dòng) multi-user.target 下的本機(jī)與服務(wù)器服務(wù);
systemd 執(zhí)行 multi-user.target 下的 /etc/rc.d/rc.local;
systemd 執(zhí)行 multi-user.target 下的 getty.target 及登錄服務(wù);
systemd 執(zhí)行 graphical 需要的服務(wù)。

圖片來(lái)自互聯(lián)網(wǎng),略有錯(cuò)誤,僅供參考
3 破解用戶密碼的方法
方法一:
方法二:
4 忘記 grub 密碼怎么解決
如果 root 密碼忘記了,grub 的密碼也忘記了,可以進(jìn)救援模式將 /mnt/sysimage/boot/grub/grub.conf
文件里密碼那行刪了即可,或者直接修改 shadow 文件,直接把 root 密碼刪了,即可以使用 root 進(jìn)行空口令登錄了。
物理安全是系統(tǒng)安全的前提
5 硬盤空間滿了怎么處理,怎么找到硬盤中的大文件
首先使用 df -h
查看硬盤的使用情況,找到是哪個(gè)分區(qū)空間滿了;
然后去對(duì)應(yīng)分區(qū)使用 du -sh *
或者 du -a
查看哪個(gè)文件占空間比較大,一般是日志文件。
使用以上方法后沒有發(fā)現(xiàn)大文件,該怎么處理?
特殊情況一:
掛載的時(shí)候?qū)⒂袛?shù)據(jù)的目錄給覆蓋掉了,需要使用df命令查看掛載情況,取消掛載后將原有目錄的里大文件刪除即可。
特殊情況二:
刪除大量的文件沒有被釋放掉,使用 lsof -n | grep deleted
命令查看哪些被刪除文件的pid,將對(duì)應(yīng)的進(jìn)程停止即可釋放刪除的文件進(jìn)而釋放硬盤空間。
正確釋放大文件的方法:
cat /dev/null > /data/bigfile 或者 > /data/bigfile 但是后者不通用,有的shell不支持>,比如csh 釋放后再刪除 rm -f /data/bigfile
考察du、df、ls -l命令的區(qū)別:
ls -l查看的是文件的實(shí)際大小,du查看文件占硬盤空間的實(shí)際大小,df查看的是硬盤的實(shí)際大小,ext系列默認(rèn)元數(shù)據(jù)占用比xfs文件系統(tǒng)的元數(shù)據(jù)要小很多。
一般情況下du顯示的會(huì)比ls -l顯示的大,這主要是因?yàn)閐u顯示的是block的整數(shù)倍。
為什么生成文件前就有33M的數(shù)據(jù),因?yàn)槟J(rèn)磁盤的元數(shù)據(jù)也會(huì)占用空間。
6 硬盤明明有很多空間,為什么無(wú)法存儲(chǔ)文件
原因是所在分區(qū)的inode號(hào)滿了,df -i
可以查看 inode 的使用情況。
一般是生成大量的小文件導(dǎo)致inode號(hào)耗盡,將這些小文件刪除,釋放inode號(hào)即可。
軟鏈接過(guò)多也會(huì)導(dǎo)致inode耗盡。
7 進(jìn)程使用內(nèi)存問題
7.1 內(nèi)存泄露:Memory Leak
指程序中用 malloc 或 new 申請(qǐng)了一塊內(nèi)存,但是沒有用 free 或 delete 將內(nèi)存釋放,導(dǎo)致這塊內(nèi)存一直處于占用狀態(tài)。
7.2 內(nèi)存溢出:Memory Overflow
指程序申請(qǐng)了10M的空間,但是在這個(gè)空間寫入10M以上字節(jié)的數(shù)據(jù),就是溢出。
7.3 內(nèi)存不足:OOM
OOM 即 Out Of Memory,“內(nèi)存用完了",在情況在java程序中比較常見。系統(tǒng)會(huì)選一個(gè)進(jìn)程將之殺死,在日志messages中看到類似下面的提示:
Jul 10 10:20:30 kernel: Out of memory: Kill process 9527(java) score 88 or sacrifice child
當(dāng) JVM 因?yàn)闆]有足夠的內(nèi)存來(lái)為對(duì)象分配空間并且垃圾回收器也已經(jīng)沒有空間可回收時(shí),就會(huì)拋出這個(gè)error,因?yàn)檫@個(gè)問題已經(jīng)嚴(yán)重到不足以被應(yīng)用處理。
原因:
給應(yīng)用分配內(nèi)存太少:比如虛擬機(jī)本身可使用的內(nèi)存 (一般通過(guò)啟動(dòng)時(shí)的VM參數(shù)指定) 太少。
應(yīng)用用的太多,并且用完沒釋放,浪費(fèi)了。此時(shí)就會(huì)造成內(nèi)存泄露或者內(nèi)存溢出。
使用的解決辦法:
限制 java 進(jìn)程的 max heap,并且降低 java 程序的 worker 數(shù)量,從而降低內(nèi)存使用
給系統(tǒng)增加 swap 空間
8 進(jìn)程、線程和協(xié)程的區(qū)別
定義:
(1) 進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的獨(dú)立單位;
(2) 線程是進(jìn)程的實(shí)體,是CPU調(diào)度和分配的基本單位;
(3) 協(xié)程,又稱微線程,自帶CUP上下文,是比線程更小的執(zhí)行單元,占用資源小,效率高。
區(qū)別:
(1) 一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程;
(2) 線程的劃分尺度小于進(jìn)程(資源比進(jìn)程少),使得多線程程序的并發(fā)性高;
(3) 進(jìn)程在執(zhí)行過(guò)程中擁有獨(dú)立的內(nèi)存單元,而多個(gè)線程共享內(nèi)存,從而極大的提高了程序的運(yùn)行效率;
(4) 線程不能夠獨(dú)立執(zhí)行,必須依存在進(jìn)程中。

9 使用 find 命令找出/data目錄下15天以上以log結(jié)尾的文件并刪除
10 su、su - 和 sudo 的區(qū)別
su username:非登錄式切換,即不會(huì)讀取目標(biāo)用戶的配置文件,不改變當(dāng)前工作目錄,即不完全切換
su - username:登錄式切換,會(huì)讀取目標(biāo)用戶的配置文件,切換至自己的家目錄,即完全切換
sudo 是一種權(quán)限管理機(jī)制,依賴于/etc/sudoers,其定義了授權(quán)給哪個(gè)用戶可以以管理員的身份能夠執(zhí)行什么樣的管理命令。格式:sudo -u USERNAME COMMAND
使用su切換用戶時(shí)需要輸入目標(biāo)用戶的密碼,使用sudo執(zhí)行命令的時(shí)候需要輸入當(dāng)前用戶的密碼。
原文鏈接: [Linux運(yùn)維工程師面試題(1)](https://blog.waluna.top/2023/02/18/1339/).