乐闻世界logo
搜索文章和话题

面试题手册

Linux 系统备份和恢复的常用工具、策略和最佳实践有哪些?

Linux 系统备份和恢复是数据安全的重要保障,需要掌握各种备份策略和恢复方法。备份类型:完全备份(Full Backup):备份所有数据增量备份(Incremental Backup):只备份自上次备份以来变化的数据差异备份(Differential Backup):备份自上次完全备份以来变化的数据热备份(Hot Backup):在系统运行时进行备份冷备份(Cold Backup):在系统停止时进行备份备份工具:tar:归档工具常用选项:-c:创建归档-x:提取归档-v:显示详细信息-f:指定归档文件-z:使用 gzip 压缩-j:使用 bzip2 压缩示例:tar -czvf backup.tar.gz /path/to/backup:创建压缩备份tar -xzvf backup.tar.gz:提取压缩备份tar -czvf backup-$(date +%Y%m%d).tar.gz /path/to/backup:带时间戳的备份rsync:同步和备份工具常用选项:-a:归档模式,保留文件属性-v:显示详细信息-z:压缩传输--delete:删除目标中多余的文件--exclude:排除文件或目录示例:rsync -avz /source/ /destination/:同步目录rsync -avz --delete /source/ /destination/:同步并删除多余文件rsync -avz --exclude '*.log' /source/ /destination/:排除日志文件dd:磁盘和分区备份工具示例:dd if=/dev/sda of=/backup/sda.img:备份整个磁盘dd if=/dev/sda1 of=/backup/sda1.img:备份分区dd if=/backup/sda.img of=/dev/sda:恢复磁盘dump/restore:文件系统备份工具(ext2/ext3/ext4)dump -0u -f /backup/root.dump /:备份根文件系统restore -rf /backup/root.dump:恢复文件系统Bacula:企业级备份解决方案Amanda:高级 Maryland 自动网络磁盘归档器Duplicity:加密备份工具Borg:去重备份工具数据库备份:MySQL:mysqldump:逻辑备份工具mysqldump -u root -p database > backup.sql:备份数据库mysqldump -u root -p --all-databases > all.sql:备份所有数据库mysqldump -u root -p --single-transaction database > backup.sql:一致性备份mysql -u root -p database < backup.sql:恢复数据库mysqlhotcopy:物理备份工具(MyISAM)Percona XtraBackup:物理备份工具(InnoDB)PostgreSQL:pg_dump:逻辑备份工具pg_dump database > backup.sql:备份数据库pg_dumpall > all.sql:备份所有数据库psql database < backup.sql:恢复数据库pg_basebackup:物理备份工具MongoDB:mongodump:备份工具mongorestore:恢复工具系统备份策略:3-2-1 原则:3 份备份副本2 种不同介质1 份异地备份备份频率:完全备份:每周一次增量备份:每天一次差异备份:每天一次保留策略:每日备份保留 7 天每周备份保留 4 周每月备份保留 12 个月自动化备份:使用 cron 定时执行备份脚本示例:bash#!/bin/bashBACKUP_DIR="/backup"DATE=$(date +%Y%m%d)tar -czvf $BACKUP_DIR/backup-$DATE.tar.gz /path/to/backupfind $BACKUP_DIR -name "backup-*.tar.gz" -mtime +7 -delete云备份解决方案:AWS S3:对象存储服务Azure Blob Storage:Azure 对象存储Google Cloud Storage:Google 云存储阿里云 OSS:阿里云对象存储腾讯云 COS:腾讯云对象存储rclone:多云存储同步工具备份验证:定期测试恢复流程验证备份完整性检查备份文件大小使用校验和验证数据恢复策略:完全恢复:从完全备份恢复增量恢复:从完全备份开始,依次应用增量备份差异恢复:从完全备份开始,应用最新的差异备份时间点恢复:恢复到指定时间点(需要 binlog)灾难恢复:异地备份恢复备份最佳实践:制定备份策略文档自动化备份流程定期测试恢复加密敏感数据监控备份状态保留多个备份版本异地备份定期审查备份策略文档化恢复流程故障排查:备份失败:检查磁盘空间、权限、网络连接恢复失败:验证备份文件完整性、检查目标路径性能问题:优化备份时间、使用增量备份存储空间不足:清理旧备份、使用压缩
阅读 0·2月17日 23:38

Linux Shell 脚本编程中如何定义变量、编写条件判断和循环语句?

Linux Shell 脚本编程是自动化运维和系统管理的重要技能。变量定义和使用:变量定义:name="value"(注意等号两边不能有空格)变量引用:$name 或 ${name}只读变量:readonly name删除变量:unset name环境变量:export name="value"特殊变量:$0(脚本名)、$1-$9(位置参数)、$#(参数个数)、$*(所有参数)、$@(所有参数)、$?(上一条命令退出状态)、$$(当前进程 PID)、$!(后台进程 PID)条件判断:if 语句:if [ condition ]; then commands; fi文件测试:-f(文件存在)、-d(目录存在)、-e(存在)、-r(可读)、-w(可写)、-x(可执行)字符串比较:=(等于)、!=(不等于)、-z(空字符串)、-n(非空字符串)数值比较:-eq(等于)、-ne(不等于)、-gt(大于)、-lt(小于)、-ge(大于等于)、-le(小于等于)逻辑运算:-a(与)、-o(或)、!(非)循环结构:for 循环:for i in {1..10}; do commands; done 或 for ((i=0; i<10; i++)); do commands; donewhile 循环:while [ condition ]; do commands; doneuntil 循环:until [ condition ]; do commands; done函数定义:函数定义:functionname() { commands; } 或 function functionname { commands; }函数调用:function_name arg1 arg2返回值:return value(0-255)局部变量:local var="value"常用命令:echo:输出文本,echo -n 不换行,echo -e 解析转义字符printf:格式化输出read:读取用户输入,read -p "prompt" vartest:条件测试,[ ] 是 test 的同义词expr:表达式求值let:算术运算awk:文本处理工具sed:流编辑器grep:文本搜索数组操作:定义数组:arr=(item1 item2 item3)访问元素:${arr[0]}、${arr[@]}(所有元素)、${#arr[@]}(元素个数)添加元素:arr+=("new_item")最佳实践:使用 set -e 遇到错误立即退出使用 set -u 使用未定义变量时报错使用 set -o pipefail 管道中任何命令失败都返回失败添加注释说明脚本用途使用引号保护变量
阅读 0·2月17日 23:38

Linux 包管理工具(APT、YUM、PACMAN)的使用方法和常见操作有哪些?

Linux 包管理是系统维护和软件安装的核心技能,不同的发行版使用不同的包管理工具。Debian/Ubuntu 包管理(APT):apt update:更新软件包列表apt upgrade:升级已安装的软件包apt full-upgrade:升级软件包(可能删除依赖包)apt install package:安装软件包apt remove package:删除软件包(保留配置文件)apt purge package:删除软件包及其配置文件apt autoremove:删除不再需要的依赖包apt search keyword:搜索软件包apt show package:显示软件包详细信息apt list --installed:列出已安装的软件包apt-cache depends package:查看软件包依赖关系apt-cache rdepends package:查看依赖该软件包的其他包dpkg -l:列出已安装的软件包dpkg -i package.deb:安装 .deb 文件dpkg -r package:删除软件包dpkg -P package:删除软件包及其配置文件CentOS/RHEL 包管理(YUM/DNF):yum update:更新软件包列表和已安装的软件包yum install package:安装软件包yum remove package:删除软件包yum search keyword:搜索软件包yum info package:显示软件包详细信息yum list installed:列出已安装的软件包yum provides command:查找提供某个命令的软件包yum check-update:检查可更新的软件包yum clean all:清理缓存yum deplist package:查看软件包依赖关系rpm -qa:列出所有已安装的软件包rpm -ivh package.rpm:安装 .rpm 文件rpm -e package:删除软件包rpm -q package:查询软件包是否已安装rpm -ql package:列出软件包安装的文件rpm -qf file:查找文件属于哪个软件包Arch Linux 包管理(PACMAN):pacman -Syu:同步软件包数据库并升级系统pacman -S package:安装软件包pacman -R package:删除软件包pacman -Rs package:删除软件包及其依赖pacman -Rns package:删除软件包、依赖和配置文件pacman -Ss keyword:搜索软件包pacman -Si package:显示软件包详细信息pacman -Qe:列出显式安装的软件包pacman -Qm:列出从 AUR 安装的软件包pacman -Fy:同步文件数据库pacman -Fo command:查找提供某个命令的软件包软件源配置:Debian/Ubuntu:/etc/apt/sources.list 和 /etc/apt/sources.list.d/CentOS/RHEL:/etc/yum.repos.d/Arch Linux:/etc/pacman.conf第三方软件仓库:EPEL(Extra Packages for Enterprise Linux):为 RHEL/CentOS 提供额外软件包PPA(Personal Package Archive):Ubuntu 用户个人软件仓库AUR(Arch User Repository):Arch Linux 用户软件仓库包管理最佳实践:定期更新系统:apt update && apt upgrade 或 yum update使用版本锁定:apt-mark hold package 或 yum versionlock package清理缓存:apt autoremove && apt clean 或 yum clean all备份重要配置:在升级前备份 /etc 目录测试环境验证:在生产环境更新前先在测试环境验证使用自动化工具:Ansible、Chef、Puppet 等进行批量管理常见问题解决:依赖冲突:使用 apt -f install 或 yum --skip-broken软件包损坏:使用 dpkg --configure -a 或 yum reinstall package锁定问题:删除 /var/lib/dpkg/lock 或 /var/run/yum.pid找不到软件包:检查软件源配置,运行 apt update 或 yum makecache
阅读 0·2月17日 23:37

Linux 容器技术(Docker、Kubernetes)的核心概念、常用命令和最佳实践有哪些?

Linux 容器技术是现代应用部署和微服务架构的核心技术,Docker 和 Kubernetes 是最主流的容器解决方案。Docker 基本概念:镜像(Image):只读的文件系统模板,包含运行应用所需的所有依赖容器(Container):镜像的运行实例,轻量级、隔离的运行环境仓库(Repository):存储和分发镜像的地方,如 Docker HubDockerfile:用于构建镜像的文本文件Docker Compose:定义和运行多容器应用的工具Docker 常用命令:镜像管理:docker images:列出本地镜像docker pull image:拉取镜像docker build -t name .:构建镜像docker rmi image:删除镜像docker tag image newname:标记镜像容器管理:docker run:运行容器docker ps:查看运行中的容器docker ps -a:查看所有容器docker stop container:停止容器docker start container:启动容器docker restart container:重启容器docker rm container:删除容器docker exec -it container /bin/bash:进入容器容器操作:docker logs container:查看容器日志docker cp file container:/path:复制文件到容器docker cp container:/path file:从容器复制文件docker inspect container:查看容器详细信息docker stats:查看容器资源使用情况Dockerfile 指令:FROM:指定基础镜像RUN:执行命令COPY:复制文件到镜像ADD:复制文件到镜像(支持解压缩和 URL)CMD:容器启动时执行的命令ENTRYPOINT:容器启动时执行的入口点ENV:设置环境变量ARG:构建时的变量EXPOSE:声明容器监听的端口VOLUME:声明挂载点WORKDIR:设置工作目录USER:设置运行用户Docker Compose:配置文件:docker-compose.yml常用命令:docker-compose up:启动服务docker-compose down:停止并删除服务docker-compose ps:查看服务状态docker-compose logs:查看服务日志docker-compose exec service command:在服务中执行命令配置示例: version: '3' services: web: build: . ports: - "80:80" volumes: - ./data:/data environment: - ENV=valueKubernetes 基本概念:Pod:最小的部署单元,包含一个或多个容器Node:运行 Pod 的物理或虚拟机Service:为 Pod 提供稳定的网络访问Deployment:管理 Pod 的副本和更新ReplicaSet:确保指定数量的 Pod 副本在运行StatefulSet:管理有状态应用DaemonSet:在每个节点上运行一个 PodConfigMap:配置数据Secret:敏感数据Namespace:资源隔离Ingress:HTTP/HTTPS 路由Kubernetes 常用命令:集群管理:kubectl cluster-info:查看集群信息kubectl get nodes:查看节点kubectl get namespaces:查看命名空间Pod 管理:kubectl get pods:查看 Podkubectl describe pod podname:查看 Pod 详情kubectl logs podname:查看 Pod 日志kubectl exec -it podname /bin/bash:进入 Podkubectl delete pod podname:删除 PodService 管理:kubectl get services:查看服务kubectl describe service servicename:查看服务详情Deployment 管理:kubectl get deployments:查看部署kubectl apply -f yaml:应用配置kubectl rollout status deployment/deploymentname:查看部署状态kubectl scale deployment/deploymentname --replicas=3:扩展副本数Kubernetes 配置示例:Pod 配置: apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: mycontainer image: nginx ports: - containerPort: 80Deployment 配置: apiVersion: apps/v1 kind: Deployment metadata: name: mydeployment spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: mycontainer image: nginx ports: - containerPort: 80容器网络:Docker 网络模式:bridge:默认模式,容器通过 Docker 网桥通信host:容器使用主机网络栈none:无网络container:共享另一个容器的网络Kubernetes 网络模型:Pod 网络:所有 Pod 在同一个扁平网络中Service 网络:为 Pod 提供稳定的 IPIngress:外部访问入口容器存储:Docker 存储驱动:overlay2、aufs、btrfs、zfs卷(Volume):持久化存储绑定挂载(Bind Mount):将主机目录挂载到容器Kubernetes 存储类(StorageClass):动态存储分配持久卷(PersistentVolume):集群级别的存储资源持久卷声明(PersistentVolumeClaim):用户对存储的请求容器安全:镜像安全:使用官方镜像或可信镜像定期更新镜像扫描镜像漏洞最小化镜像大小运行时安全:使用非 root 用户运行容器限制容器资源使用只读文件系统限制容器能力Kubernetes 安全:RBAC:基于角色的访问控制Network Policy:网络策略Pod Security Policy:Pod 安全策略容器编排最佳实践:微服务架构:将应用拆分为多个微服务健康检查:配置 liveness 和 readiness 探针资源限制:设置 CPU 和内存限制滚动更新:逐步更新应用,避免服务中断自动扩缩容:根据负载自动调整副本数配置管理:使用 ConfigMap 和 Secret 管理配置日志收集:集中收集和分析容器日志监控告警:监控容器和集群状态
阅读 0·2月17日 23:37

Linux 文本处理中 grep、sed、awk 命令的常用用法和正则表达式有哪些?

Linux 文本处理是系统管理和数据分析的重要技能,掌握这些工具可以大大提高工作效率。grep(文本搜索):基本用法:grep "pattern" file常用选项:-i:忽略大小写-v:反向匹配(显示不匹配的行)-n:显示行号-c:统计匹配行数-r:递归搜索目录-l:只显示包含匹配的文件名-A n:显示匹配行及其后 n 行-B n:显示匹配行及其前 n 行-C n:显示匹配行及其前后各 n 行正则表达式:grep -E "pattern1|pattern2" file(扩展正则)示例:grep -rn "error" /var/log(递归搜索日志中的错误)sed(流编辑器):基本用法:sed 'command' file常用命令:s/pattern/replacement/:替换(只替换第一个匹配)s/pattern/replacement/g:全局替换(替换所有匹配)d:删除行p:打印行n:读取下一行常用选项:-i:直接修改文件-n:抑制自动输出-e:执行多个命令示例:sed 's/old/new/g' file(全局替换)sed '/pattern/d' file(删除匹配的行)sed -i 's/foo/bar/g' file(直接修改文件)awk(文本处理工具):基本用法:awk 'pattern {action}' file内置变量:$0:整行$1, $2, …:第1、2、…个字段NF:字段总数NR:当前行号FNR:当前文件的行号FS:字段分隔符(默认空格)OFS:输出字段分隔符RS:记录分隔符(默认换行符)ORS:输出记录分隔符常用函数:print:打印printf:格式化输出length():字符串长度substr():子字符串split():分割字符串gsub():全局替换示例:awk '{print $1}' file(打印第一个字段)awk -F: '{print $1, $3}' /etc/passwd(以冒号为分隔符)awk 'NR==1,NR==10' file(打印第1-10行)awk '{sum+=$1} END {print sum}' file(计算第一列总和)cut(剪切工具):基本用法:cut [options] file常用选项:-d:指定分隔符-f:指定字段-c:指定字符位置示例:cut -d: -f1 /etc/passwd(以冒号为分隔符,提取第一个字段)cut -c1-10 file(提取每行的前10个字符)sort(排序工具):基本用法:sort [options] file常用选项:-n:按数值排序-r:倒序-k:指定排序字段-t:指定分隔符-u:去重示例:sort -n -k2 file(按第二列数值排序)sort -t: -k3 -n /etc/passwd(按第三列数值排序)uniq(去重工具):基本用法:uniq [options] file常用选项:-c:统计重复次数-d:只显示重复的行-u:只显示不重复的行示例:sort file | uniq -c(排序后统计重复次数)组合使用:统计日志中错误数量:grep "error" log | wc -l查找访问量最高的 IP:awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10提取文件中的邮箱:grep -Eo '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}' file
阅读 0·2月17日 23:37

Linux 管道和重定向的使用方法和常见场景有哪些?

Linux 管道和重定向是命令行操作的核心功能,可以实现进程间通信和数据流控制。标准输入输出:标准输入(stdin,文件描述符 0):默认来自键盘标准输出(stdout,文件描述符 1):默认输出到屏幕标准错误(stderr,文件描述符 2):默认输出到屏幕/dev/stdin:标准输入设备/dev/stdout:标准输出设备/dev/stderr:标准错误设备重定向操作符:输出重定向:>:将标准输出重定向到文件(覆盖)>>:将标准输出追加到文件2>:将标准错误重定向到文件(覆盖)2>>:将标准错误追加到文件&>:将标准输出和标准错误重定向到文件(覆盖)&>>:将标准输出和标准错误追加到文件>file 2>&1:将标准输出和标准错误都重定向到文件2>&1:将标准错误重定向到标准输出输入重定向:<:从文件读取输入<<:here document,从命令行读取输入直到遇到定界符<<<:here string,从字符串读取输入文件描述符重定向:n>&m:将文件描述符 n 重定向到文件描述符 mn<&m:将文件描述符 n 重定向为文件描述符 m 的副本禁用输出:> /dev/null:将输出重定向到空设备(丢弃)2> /dev/null:将错误重定向到空设备(丢弃)管道操作符:|:将前一个命令的标准输出作为后一个命令的标准输入|&:将前一个命令的标准输出和标准错误作为后一个命令的标准输入管道示例:ps aux | grep nginx:查找 nginx 进程cat file.txt | grep "pattern" | wc -l:统计匹配行数ls -l | awk '{print $5}' | sort -n:按文件大小排序find / -name "*.log" 2>/dev/null | xargs grep "error":查找日志中的错误常用管道命令:grep:文本搜索awk:文本处理sed:流编辑器sort:排序uniq:去重cut:剪切head:显示前几行tail:显示后几行wc:统计行数、字数、字符数tee:读取标准输入并写入文件和标准输出xargs:从标准输入构建并执行命令tee 命令:tee:读取标准输入,写入文件和标准输出常用选项:-a:追加到文件(不覆盖)-i:忽略中断信号示例:command | tee output.txt:将输出保存到文件并显示在屏幕command | tee -a output.txt:将输出追加到文件并显示在屏幕xargs 命令:xargs:从标准输入读取参数并执行命令常用选项:-n num:每次使用 num 个参数-I str:用 str 替换输入中的参数-p:执行前提示确认-t:显示执行的命令示例:find . -name "*.txt" | xargs rm -f:删除所有 .txt 文件echo "file1 file2" | xargs -n 1 cat:逐个显示文件内容ls *.jpg | xargs -I {} cp {} /backup/:复制所有 jpg 文件到备份目录进程替换:<(command):将命令的输出作为临时文件>(command):将命令的输入作为临时文件示例:diff <(sort file1) <(sort file2):比较排序后的文件command > >(logger):将输出发送到日志系统命名管道(FIFO):mkfifo:创建命名管道命名管道是文件系统中的特殊文件允许不相关的进程进行通信示例:mkfifo mypipecat > mypipe:向管道写入数据cat < mypipe:从管道读取数据实际应用示例:日志分析:tail -f /var/log/nginx/access.log | grep "404":实时监控 404 错误cat access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -10:统计访问量最高的 IP数据处理:cat data.csv | cut -d, -f1 | sort | uniq:提取第一列并去重ps aux | awk '{sum+=$3} END {print sum}':计算 CPU 总使用率系统监控:vmstat 1 | awk '{print $4}':监控内存使用iostat -x 1 | grep -v "^$": 监控磁盘 I/O批量操作:find . -type f -name "*.sh" | xargs chmod +x:批量添加执行权限cat servers.txt | xargs -I {} ssh {} "uptime":批量查看服务器运行时间最佳实践:使用管道连接简单命令,构建复杂功能合理使用重定向保存输出结果使用 /dev/null 丢弃不需要的输出使用 tee 同时查看和保存输出使用 xargs 处理大量文件注意管道的缓冲区限制处理错误输出时使用 2>&1 或 |&
阅读 0·2月17日 23:36