Linux&Shell面試知識點總結(jié)
一、Linux基礎(chǔ)命令
-
?進程管理?
- 查看系統(tǒng)進程:
ps aux、top/htop(實時監(jiān)控) - 殺死進程:
kill -9 <PID>、pkill <進程名>
- 查看系統(tǒng)進程:
-
?文件操作?
- 查看文件尾部:
tail -n 10 filename(末10行) - 實時監(jiān)控文件變化:
tail -f filename - 批量查找文件內(nèi)容:
grep -r "keyword" /path(遞歸搜索)
- 查看文件尾部:
-
?權(quán)限管理?
- 修改權(quán)限:
chmod 755 filename(數(shù)字模式) - 修改所有者:
chown user:group filename
- 修改權(quán)限:
二、Shell腳本核心
-
?變量與參數(shù)?
$*與$@區(qū)別:不加引號時功能類似,加引號時"$*"視為整體字符串,"$@"保留參數(shù)分隔- 變量作用域:
var=value(局部變量) vsexport var=value(全局變量)
-
?流程控制?
-
-
- ?條件判斷?:
if [ $a -gt $b ]; then echo "a大于b" elif [ $a -eq $b ]; then echo "a等于b" else echo "a小于b" fi
- ?循環(huán)結(jié)構(gòu)?:
# for循環(huán) for i in {1..5}; do echo $i; done # while循環(huán) while [ $count -lt 5 ]; do ((count++)); done
- ?條件判斷?:
-
-
-
?輸入輸出重定向?
- 標準輸出+錯誤輸出合并:
command &> output.txt - 管道操作:
cat file.txt | grep "error" | sort
4. 單引號和雙引號區(qū)別
- ?單引號 ' '?
? 完全原樣輸出?:單引號內(nèi)的所有內(nèi)容均視為純文本,?不解析任何變量、命令或轉(zhuǎn)義字符?。
? 不可嵌套單引號?:單引號內(nèi)無法直接包含單引號(即使用轉(zhuǎn)義符 \ 也不行)。
? 示例?:
echo 'Hello $USER, today is $(date)' ?輸出?: Hello $USER, today is $(date) # 變量和命令均未解析
- 雙引號 " "?
? 允許變量替換和命令替換?:$VAR 和 $(command) 會被解析。
? 支持部分轉(zhuǎn)義字符?:如 \$(保留 $ 字面值)、\"(保留 ")、\n(換行符)等。
? 可嵌套單引號?:雙引號內(nèi)可以直接包含單引號。
? 示例?:
name="Alice" echo "Hello $name, today is $(date +%F)" ? 輸出?: Hello Alice, today is 2023-12-25 # 變量和命令已解析
三、文本處理三劍客
-
?sed? (精準編輯,適合批量修改)
- 替換文本:
sed 's/old/new/g' file.txt # 直接修改使用-i參數(shù) - 刪除空行:
sed '/^$/d' file.txt - 提取內(nèi)容: sed -n '10,20p' file.txt # 提取第10-20行內(nèi)容
- 替換文本:
-
?awk? (結(jié)構(gòu)化處理,適合復(fù)雜數(shù)據(jù)分析和報告生成)
- 提取列數(shù)據(jù):
awk '{print $1,$3}' file.txt # 提取第1列和第3列 - 條件過濾:
awk '$3 > 100 {print $0}' file.txt # 過濾第3列值大約100的數(shù)據(jù) - 提取數(shù)據(jù)進行計算: awk '{sum += $2} END {print sum}' file.txt # 統(tǒng)計第2列總和(數(shù)值列)
- 提取列數(shù)據(jù):
-
?grep (快速搜索,適合簡單過濾)
- 搜索包含"error"的行(顯示行號): grep -n 'error' file.txt
- 匹配IP地址:
grep -E '([0-9]{1,3}\.){3}[0-9]{1,3}' - 遞歸搜索目錄中文件內(nèi)容: grep -rn --include="*.java" "TODO" ./src # 遞歸搜索目錄中所有Java文件內(nèi)的"TODO"注釋
- 統(tǒng)計匹配行數(shù): grep -c "success" file.txt
四、高級特性與調(diào)試
-
?信號處理?
- 捕獲信號:
trap "echo '程序被中斷'" SIGINT
- 捕獲信號:
-
?腳本調(diào)試?
- 啟用調(diào)試模式:
set -x(顯示執(zhí)行命令) - 錯誤中斷:
set -e(任何命令失敗立即退出)
-
?函數(shù)與參數(shù)傳遞?
function greet() { echo "Hello, $1!" } greet "World" # 輸出:Hello, World!
- 啟用調(diào)試模式:
五、系統(tǒng)管理相關(guān)
-
?用戶與組?
- 創(chuàng)建用戶:
useradd -m username - 修改默認Shell:
chsh -s /bin/zsh username
- 創(chuàng)建用戶:
-
?軟件包管理?
- RPM安裝:
rpm -ivh package.rpm - YUM更新:
yum update package
- RPM安裝:
-
?磁盤與內(nèi)存?
- 查看磁盤空間:
df -h - 監(jiān)控內(nèi)存使用:
free -m
- 查看磁盤空間:
六、面試拓展題
-
?實戰(zhàn)問題示例?
- 如何統(tǒng)計日志文件中每個IP的訪問次數(shù)?
awk '{print $1}' access.log | sort | uniq -c | sort -nr說明:# uniq命令可以使用參數(shù)-c來統(tǒng)計重復(fù)行出現(xiàn)次數(shù)# sort 命令參數(shù):
-n:按數(shù)值大小排序(而非默認的字典序),避免將 10 排在 2 前的錯誤。
?-r?:逆序排序(從大到小)。
-k:指定排序的列(如 -k3 按第三列排序)。
-t:指定列分隔符(如 -t':' 以冒號分隔字段)。 - 如何用Shell實現(xiàn)批量文件重命名(添加日期后綴)?
for file in *.txt; do mv "$file" "${file%.txt}_$(date +%F).txt"; done
- 如何統(tǒng)計日志文件中每個IP的訪問次數(shù)?
-
?高頻陷阱題?
[ $a == $b ]與[[ $a == $b ]]區(qū)別(后者支持模式匹配)$(cmd)與\cmd``的區(qū)別(推薦使用$(),支持嵌套)
本文來自博客園,作者:業(yè)余磚家,轉(zhuǎn)載請注明原文鏈接:http://www.rzrgm.cn/yeyuzhuanjia/p/18840619

浙公網(wǎng)安備 33010602011771號