Linux&Shell面试知识点总结
一、Linux基础命令
-
进程管理
- 查看系统进程:
ps aux、top/htop(实时监控) - 杀死进程:
kill -9 <PID>、pkill <进程名>
- 查看系统进程:
-
文件操作
- 查看文件尾部:
tail -n 10 filename(末10行) - 实时监控文件变化:
tail -f filename - 批量查找文件内容:
grep -r "keyword" /path(递归搜索)
- 查看文件尾部:
-
权限管理
- 修改权限:
chmod 755 filename(数字模式) - 修改所有者:
chown user:group filename
- 修改权限:
二、Shell脚本核心
-
变量与参数
$*与$@区别:不加引号时功能类似,加引号时"$*"视为整体字符串,"$@"保留参数分隔- 变量作用域:
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
- 循环结构:
# for循环 for i in {1..5}; do echo $i; done # while循环 while [ $count -lt 5 ]; do ((count++)); done
- 条件判断:
-
-
-
输入输出重定向
- 标准输出+错误输出合并:
command &> output.txt - 管道操作:
cat file.txt | grep "error" | sort
4. 单引号和双引号区别
- 单引号 ' '
完全原样输出:单引号内的所有内容均视为纯文本,不解析任何变量、命令或转义字符。
不可嵌套单引号:单引号内无法直接包含单引号(即使用转义符 \ 也不行)。
示例:
echo 'Hello $USER, today is $(date)' 输出: Hello $USER, today is $(date) # 变量和命令均未解析
- 双引号 " "
允许变量替换和命令替换:$VAR 和 $(command) 会被解析。
支持部分转义字符:如 \$(保留 $ 字面值)、\"(保留 ")、\n(换行符)等。
可嵌套单引号:双引号内可以直接包含单引号。
示例:
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参数 - 删除空行:
sed '/^$/d' file.txt - 提取内容: sed -n '10,20p' file.txt # 提取第10-20行内容
- 替换文本:
-
awk (结构化处理,适合复杂数据分析和报告生成)
- 提取列数据:
awk '{print $1,$3}' file.txt # 提取第1列和第3列 - 条件过滤:
awk '$3 > 100 {print $0}' file.txt # 过滤第3列值大约100的数据 - 提取数据进行计算: awk '{sum += $2} END {print sum}' file.txt # 统计第2列总和(数值列)
- 提取列数据:
-
grep (快速搜索,适合简单过滤)
- 搜索包含"error"的行(显示行号): grep -n 'error' file.txt
- 匹配IP地址:
grep -E '([0-9]{1,3}\.){3}[0-9]{1,3}' - 递归搜索目录中文件内容: grep -rn --include="*.java" "TODO" ./src # 递归搜索目录中所有Java文件内的"TODO"注释
- 统计匹配行数: grep -c "success" file.txt
四、高级特性与调试
-
信号处理
- 捕获信号:
trap "echo '程序被中断'" SIGINT
- 捕获信号:
-
脚本调试
- 启用调试模式:
set -x(显示执行命令) - 错误中断:
set -e(任何命令失败立即退出)
-
函数与参数传递
function greet() { echo "Hello, $1!" } greet "World" # 输出:Hello, World!
- 启用调试模式:
五、系统管理相关
-
用户与组
- 创建用户:
useradd -m username - 修改默认Shell:
chsh -s /bin/zsh username
- 创建用户:
-
软件包管理
- RPM安装:
rpm -ivh package.rpm - YUM更新:
yum update package
- RPM安装:
-
磁盘与内存
- 查看磁盘空间:
df -h - 监控内存使用:
free -m
- 查看磁盘空间:
六、面试拓展题
-
实战问题示例
- 如何统计日志文件中每个IP的访问次数?
awk '{print $1}' access.log | sort | uniq -c | sort -nr说明:# uniq命令可以使用参数-c来统计重复行出现次数# sort 命令参数:
-n:按数值大小排序(而非默认的字典序),避免将 10 排在 2 前的错误。
-r:逆序排序(从大到小)。
-k:指定排序的列(如 -k3 按第三列排序)。
-t:指定列分隔符(如 -t':' 以冒号分隔字段)。 - 如何用Shell实现批量文件重命名(添加日期后缀)?
for file in *.txt; do mv "$file" "${file%.txt}_$(date +%F).txt"; done
- 如何统计日志文件中每个IP的访问次数?
-
高频陷阱题
[ $a == $b ]与[[ $a == $b ]]区别(后者支持模式匹配)$(cmd)与\cmd``的区别(推荐使用$(),支持嵌套)
本文来自博客园,作者:业余砖家,转载请注明原文链接:https://www.cnblogs.com/yeyuzhuanjia/p/18840619

浙公网安备 33010602011771号