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

来源:https://www.cnblogs.com/waluna/archive/2023/08/23/17649628.html
-Advertisement-
Play Games

[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 為例。

啟動流程比較複雜,以下簡要描述,詳細看下圖

  1. UEFI 或 BIOS 初始化,運行 POST 開機加電自檢;
  2. 載入 BIOS 的硬體信息,獲取第一個啟動設備;
  3. 讀取第一個啟動設備 MBR 的引導載入程式 (grub) 的啟動信息;
  4. 引導裝載程式,centos 7 是 grub2,載入裝載程式的配置文件:
  • /etc/grub.d/
    • /etc/default/grub
    • /boot/grub2/grub.cfg
  1. 載入 initramfs 驅動模塊;
  2. 載入內核選項;
  3. 內核初始化,centos7使用systemd代替init;
  4. 執行 initrd.target 所有單元,包括掛載 /etc/fstab;
  5. 從 initramfs 根文件系統切換到磁碟根目錄;
  6. systemd 執行預設 target 配置,配置文件 /etc/systemd/system/default.target;
  7. systemd 執行 sysinit.target 初始化系統及 basic.target 準備操作系統;
  8. systemd 啟動 multi-user.target 下的本機與伺服器服務;
  9. systemd 執行 multi-user.target 下的 /etc/rc.d/rc.local;
  10. systemd 執行 multi-user.target 下的 getty.target 及登錄服務;
  11. 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參數指定) 太少。
  • 應用用的太多,並且用完沒釋放,浪費了。此時就會造成記憶體泄露或者記憶體溢出。

使用的解決辦法:

  1. 限制 java 進程的 max heap,並且降低 java 程式的 worker 數量,從而降低記憶體使用
  2. 給系統增加 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).


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • # [The database operation was expected to affect 1 row(s), but actually affected 0 row(s); 解決樂觀併發](https://www.raokun.top/archives/thedatabaseoperatio ...
  • Trigger:當某些條件滿足時會觸發一個行為。 一、觸發器的類型 數據變化觸髮型:Trigger / DataTrigger 多條件觸髮型:MultiTrigger / MultiDataTrigger 事件觸髮型:EventTrigger 二、Trigger Trigger:Property用來 ...
  • # Unity UGUI的Toggle(覆選框)組件的介紹及使用 ## 1. 什麼是Toggle組件? Toggle(覆選框)是Unity UGUI中的一個常用組件,用於實現覆選框的功能。它可以被選中或取消選中,並且可以代碼通過其制控狀態。 ## 2. Toggle組件的工作原理 組Toggle件由 ...
  • 圖形系部分主要有`Shape`和`Goemetry`兩大類,可以直接對`Shape`進行排版、設定風格和數據綁定,後者則需要通過視覺元素才能在屏幕上顯示出來。動畫則一般分為簡單動畫、關鍵幀動畫以及沿路徑運動的動畫,日常使用過程種應該是關鍵幀動畫用的多一點,當然除了文章中例舉的關鍵幀類型,還有其他很多... ...
  • 哈嘍大家好,我是鹹魚 在《[SELinux 入門 pt.1](https://mp.weixin.qq.com/s?__biz=MzkzNzI1MzE2Mw==&mid=2247486365&idx=1&sn=4b81b3cc70b085eec6f0a595fda719fb&chksm=c2930b ...
  • 平時使用windows電腦和手機的時候,配置時間、時區都非常的簡便。但在命令行的linux下,就不知如何下手。本文就Centos7舉例,依次說明下時間日期和NTP\CHRONY的配置。 由於在伺服器側時間同步常用於集群之間,所以本文後面會針對集群間的配置做舉例。文中涉及到的網路安裝軟體部分,預設為在 ...
  • 虛擬記憶體的主要作用是提供更大的地址空間,使得每個進程都可以擁有大量的虛擬記憶體,而不受物理記憶體大小的限制。此外,虛擬記憶體還可以提供記憶體保護和共用的機制,保護每個進程的記憶體空間不被其他進程非法訪問,並允許多個進程共用同一份物理記憶體數據,提高了系統的資源利用率。虛擬記憶體的實現方式有分段和分頁兩種,其中分頁... ...
  • linux內核為用戶態進程提供了一組IO相關的系統調用: select/poll/epoll, 這三個系統調用功能類似, 在使用方法和性能等方面存在一些差異. 使用它們, 用戶態的進程可以"監控"自己感興趣的文件描述符, 當這些文件描述符的狀態發生改變時, 比如可讀或者可寫了, 內核會通知進程去處理... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...