[toc] # Linux運維工程師面試題(1) > 祝各位小伙伴們早日找到自己心儀的工作。 > 持續學習才不會被淘汰。 > 地球不爆炸,我們不放假。 > 機會總是留給有有準備的人的。 > 加油,打工人! ## 1 別名、內部命令、外部命令的執行順序 命令執行尋找順序:別名 > 內部命令 > 外部命 ...
目錄
Linux運維工程師面試題(1)
祝各位小伙伴們早日找到自己心儀的工作。
持續學習才不會被淘汰。
地球不爆炸,我們不放假。
機會總是留給有有準備的人的。
加油,打工人!
1 別名、內部命令、外部命令的執行順序
命令執行尋找順序:別名 > 內部命令 > 外部命令;
即先尋找是否為別名,然後再找是否為內部命令,最後才找是否為外部命令。
拓展:什麼是內部命令?什麼是外部命令?
內部命令:由shell自帶的,而且通過某命令形式提供
外部命令:在文件系統路徑下有對應的可執行程式文件# 使用type命令判斷是外部命令還是內部命令 [root@waluna ~]# type -a echo echo is a shell builtin echo is /usr/bin/echo # echo 即為內部命令也為外部命令 [root@waluna ~]# type echo echo is a shell builtin # 內部命令顯示結果 [root@waluna ~]# type vim vim is /usr/bin/vim # 外部命令會顯示命令的路徑 # 使用此命令後效果 [root@waluna ~]# vim 1.sh [root@waluna ~]# type vim vim is hashed (/usr/bin/vim) # 會顯示為是hash,因為命令執行後會使用hash緩存在記憶體中,不會再次依次尋找環境變數的路徑,可以直接執行,加速速度
2 linux 系統啟動流程
不同操作系統及版本有所不同,以下以 centos 7 為例。
啟動流程比較複雜,以下簡要描述,詳細看下圖
- UEFI 或 BIOS 初始化,運行 POST 開機加電自檢;
- 載入 BIOS 的硬體信息,獲取第一個啟動設備;
- 讀取第一個啟動設備 MBR 的引導載入程式 (grub) 的啟動信息;
- 引導裝載程式,centos 7 是 grub2,載入裝載程式的配置文件:
- /etc/grub.d/
- /etc/default/grub
- /boot/grub2/grub.cfg
- 載入 initramfs 驅動模塊;
- 載入內核選項;
- 內核初始化,centos7使用systemd代替init;
- 執行 initrd.target 所有單元,包括掛載 /etc/fstab;
- 從 initramfs 根文件系統切換到磁碟根目錄;
- systemd 執行預設 target 配置,配置文件 /etc/systemd/system/default.target;
- systemd 執行 sysinit.target 初始化系統及 basic.target 準備操作系統;
- systemd 啟動 multi-user.target 下的本機與伺服器服務;
- systemd 執行 multi-user.target 下的 /etc/rc.d/rc.local;
- systemd 執行 multi-user.target 下的 getty.target 及登錄服務;
- systemd 執行 graphical 需要的服務。
圖片來自互聯網,略有錯誤,僅供參考
3 破解用戶密碼的方法
方法一:
啟動時任意鍵暫停啟動
選擇內核按e鍵進入編輯模式
將游標移動linux開始的行,添加內核參數rd.break # rd.break為打斷正常啟動
按 ctrl-x 啟動
mount -o remount,rw /sysroot
chroot /sysroot
passwd root
# 如果SELinux是啟用的,才需要執行下麵操作,如查沒有啟動,不需要執行
touch /.autorelabel
exit
reboot
方法二:
啟動時任意鍵暫停啟動
選擇內核按e鍵進入編輯模式
將游標移動linux開始的行,改為將 ro 改為 rw init=/sysroot/bin/sh
按 ctrl-x 啟動
chroot /sysroot
passwd root
# 如果SELinux是啟用的,才需要執行下麵操作,如查沒有啟動,不需要執行
touch /.autorelabel
exit
reboot
4 忘記 grub 密碼怎麼解決
如果 root 密碼忘記了,grub 的密碼也忘記了,可以進救援模式將 /mnt/sysimage/boot/grub/grub.conf
文件里密碼那行刪了即可,或者直接修改 shadow 文件,直接把 root 密碼刪了,即可以使用 root 進行空口令登錄了。
物理安全是系統安全的前提
5 硬碟空間滿了怎麼處理,怎麼找到硬碟中的大文件
首先使用 df -h
查看硬碟的使用情況,找到是哪個分區空間滿了;
然後去對應分區使用 du -sh *
或者 du -a
查看哪個文件占空間比較大,一般是日誌文件。
使用以上方法後沒有發現大文件,該怎麼處理?
特殊情況一:
掛載的時候將有數據的目錄給覆蓋掉了,需要使用df命令查看掛載情況,取消掛載後將原有目錄的里大文件刪除即可。
特殊情況二:
刪除大量的文件沒有被釋放掉,使用 lsof -n | grep deleted
命令查看哪些被刪除文件的pid,將對應的進程停止即可釋放刪除的文件進而釋放硬碟空間。
正確釋放大文件的方法:
cat /dev/null > /data/bigfile 或者 > /data/bigfile 但是後者不通用,有的shell不支持>,比如csh
釋放後再刪除 rm -f /data/bigfile
考察du、df、ls -l命令的區別:
ls -l查看的是文件的實際大小,du查看文件占硬碟空間的實際大小,df查看的是硬碟的實際大小,ext系列預設元數據占用比xfs文件系統的元數據要小很多。
一般情況下du顯示的會比ls -l顯示的大,這主要是因為du顯示的是block的整數倍。
為什麼生成文件前就有33M的數據,因為預設磁碟的元數據也會占用空間。
6 硬碟明明有很多空間,為什麼無法存儲文件
原因是所在分區的inode號滿了,df -i
可以查看 inode 的使用情況。
一般是生成大量的小文件導致inode號耗盡,將這些小文件刪除,釋放inode號即可。
軟鏈接過多也會導致inode耗盡。
7 進程使用記憶體問題
7.1 記憶體泄露:Memory Leak
指程式中用 malloc 或 new 申請了一塊記憶體,但是沒有用 free 或 delete 將記憶體釋放,導致這塊記憶體一直處於占用狀態。
7.2 記憶體溢出:Memory Overflow
指程式申請了10M的空間,但是在這個空間寫入10M以上位元組的數據,就是溢出。
7.3 記憶體不足:OOM
OOM 即 Out Of Memory,“記憶體用完了",在情況在java程式中比較常見。系統會選一個進程將之殺死,在日誌messages中看到類似下麵的提示:
Jul 10 10:20:30 kernel: Out of memory: Kill process 9527(java) score 88 or sacrifice child
當 JVM 因為沒有足夠的記憶體來為對象分配空間並且垃圾回收器也已經沒有空間可回收時,就會拋出這個error,因為這個問題已經嚴重到不足以被應用處理。
原因:
- 給應用分配記憶體太少:比如虛擬機本身可使用的記憶體 (一般通過啟動時的VM參數指定) 太少。
- 應用用的太多,並且用完沒釋放,浪費了。此時就會造成記憶體泄露或者記憶體溢出。
使用的解決辦法:
- 限制 java 進程的 max heap,並且降低 java 程式的 worker 數量,從而降低記憶體使用
- 給系統增加 swap 空間
8 進程、線程和協程的區別
定義:
(1) 進程是系統進行資源分配和調度的獨立單位;
(2) 線程是進程的實體,是CPU調度和分配的基本單位;
(3) 協程,又稱微線程,自帶CUP上下文,是比線程更小的執行單元,占用資源小,效率高。
區別:
(1) 一個程式至少有一個進程,一個進程至少有一個線程;
(2) 線程的劃分尺度小於進程(資源比進程少),使得多線程程式的併發性高;
(3) 進程在執行過程中擁有獨立的記憶體單元,而多個線程共用記憶體,從而極大的提高了程式的運行效率;
(4) 線程不能夠獨立執行,必須依存在進程中。
9 使用 find 命令找出/data目錄下15天以上以log結尾的文件並刪除
find /data -type f -iname "*.log" -mtime +15 -exec rm -rf {} \;
10 su、su - 和 sudo 的區別
su username:非登錄式切換,即不會讀取目標用戶的配置文件,不改變當前工作目錄,即不完全切換
su - username:登錄式切換,會讀取目標用戶的配置文件,切換至自己的家目錄,即完全切換
sudo 是一種許可權管理機制,依賴於/etc/sudoers,其定義了授權給哪個用戶可以以管理員的身份能夠執行什麼樣的管理命令。格式:sudo -u USERNAME COMMAND
使用su切換用戶時需要輸入目標用戶的密碼,使用sudo執行命令的時候需要輸入當前用戶的密碼。
關於我
全網可搜《阿賢Linux》
CSDN、知乎、嗶哩嗶哩、博客園、51CTO、掘金、思否、開源中國、阿裡雲、騰訊雲、華為雲、今日頭條、GitHub、個人博客
公眾號:阿賢Linux
個人博客:blog.waluna.top
https://blog.waluna.top/
原文鏈接: Linux運維工程師面試題(1).