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

Linux

Linux 是一个广泛使用的开源操作系统内核,由林纳斯·托瓦兹(Linus Torvalds)于1991年创建。它是 Unix-like 操作系统的一个重要分支,并且它的设计和实现遵循了模块化的设计原则。Linux 内核本身可以与不同的用户空间组件配合,形成完整的操作系统。这些完整的系统被称为 Linux 发行版,例如 Ubuntu、Fedora、Debian、CentOS 和 Arch Linux 等。
Linux
查看更多相关内容
Linux 定时任务 cron 的时间格式、常用命令和最佳实践有哪些?Linux 定时任务(cron)是自动化运维的重要工具,可以定期执行脚本和命令。 cron 基本概念: - cron 是 Linux 系统的定时任务调度器 - 由 cron 守护进程(crond)负责执行定时任务 - 配置文件:/etc/crontab(系统级)、/var/spool/cron/username(用户级) - 时间格式:分 时 日 月 周 命令 时间格式说明: - 分(0-59):每小时的第几分钟 - 时(0-23):每天的第几小时 - 日(1-31):每月的第几天 - 月(1-12):每年的第几个月 - 周(0-7,0 和 7 都表示周日):每周的第几天 特殊符号: - *:匹配所有值 - ,:分隔多个值,如 1,3,5 表示第 1、3、5 - -:表示范围,如 1-5 表示 1 到 5 - /n:表示间隔,如 */5 表示每 5 个单位 常用示例: - 每分钟执行:* * * * * command - 每小时执行:0 * * * * command - 每天凌晨 2 点执行:0 2 * * * command - 每周一凌晨 3 点执行:0 3 * * 1 command - 每月 1 号凌晨 4 点执行:0 4 1 * * command - 每 5 分钟执行一次:*/5 * * * * command - 工作日(周一到周五)每天上午 9 点执行:0 9 * * 1-5 command crontab 命令: - crontab -e:编辑当前用户的定时任务 - crontab -l:列出当前用户的定时任务 - crontab -r:删除当前用户的所有定时任务 - crontab -u username -e:编辑指定用户的定时任务(需要 root 权限) 系统级定时任务: - /etc/crontab:系统级定时任务配置文件 - /etc/cron.hourly/:每小时执行的任务目录 - /etc/cron.daily/:每天执行的任务目录 - /etc/cron.weekly/:每周执行的任务目录 - /etc/cron.monthly/:每月执行的任务目录 环境变量: - cron 任务执行时环境变量与用户登录时不同 - 可以在 crontab 文件中定义环境变量 - 建议在脚本中使用绝对路径 - 可以在脚本开头 source 环境变量文件:source ~/.bashrc 日志和调试: - cron 日志位置:/var/log/syslog 或 /var/log/cron - 查看日志:grep CRON /var/log/syslog - 调试技巧:将输出重定向到日志文件:command >> /tmp/cron.log 2>&1 - 发送邮件:cron 默认会将输出发送到用户邮箱 最佳实践: - 使用绝对路径 - 在脚本中设置正确的环境变量 - 添加日志记录便于调试 - 使用锁文件防止重复执行 - 测试脚本后再添加到 cron - 合理设置执行时间,避免系统高峰期 - 定期检查 cron 任务执行情况 常见问题: - 脚本权限不足:确保脚本有执行权限(chmod +x script.sh) - 环境变量问题:在脚本中显式设置环境变量 - 路径问题:使用绝对路径或切换到正确目录 - 时区问题:确保系统时区正确 - cron 服务未启动:systemctl status cron 或 systemctl start cron anacron(异步 cron): - 用于不是 24 小时运行的系统 - 配置文件:/etc/anacrontab - 适合笔记本电脑等不常开机的设备 - 会检查上次执行时间,如果错过则补执行 systemd 定时器: - systemd 的定时任务替代方案 - 配置文件:/etc/systemd/system/*.timer - 查看定时器:systemctl list-timers - 更灵活的调度选项 - 更好的日志集成
服务端 · 2月17日 23:39
Linux 磁盘管理和文件系统操作中如何进行分区、格式化、挂载和管理磁盘空间?Linux 磁盘管理和文件系统是系统管理员的核心技能,涉及磁盘分区、格式化、挂载和维护等操作。 磁盘分区: - fdisk:传统的磁盘分区工具 - 查看分区:fdisk -l - 进入交互模式:fdisk /dev/sdb - 常用命令:n(新建分区)、p(打印分区表)、d(删除分区)、w(保存并退出)、q(不保存退出) - parted:现代磁盘分区工具,支持 GPT 分区表 - 查看分区:parted -l - 进入交互模式:parted /dev/sdb - 创建分区:mkpart primary ext4 1MiB 100% - 设置分区表:mklabel gpt - lsblk:列出块设备信息 - blkid:查看块设备 UUID 和文件系统类型 文件系统: - 常见文件系统类型:ext4、xfs、btrfs、ntfs、vfat - mkfs:创建文件系统,如 mkfs.ext4 /dev/sdb1、mkfs.xfs /dev/sdb1 - mkfs.ext4:创建 ext4 文件系统 - mkfs.xfs:创建 xfs 文件系统 磁盘挂载: - mount:挂载文件系统,如 mount /dev/sdb1 /mnt/data - umount:卸载文件系统,如 umount /mnt/data - 查看挂载点:mount、df -h - /etc/fstab:自动挂载配置文件 - 格式:设备 挂载点 文件系统类型 挂载选项 dump fsck - 示例:/dev/sdb1 /mnt/data ext4 defaults 0 2 - 使用 UUID:UUID=xxx /mnt/data ext4 defaults 0 2(推荐) - 查看设备 UUID:blkid /dev/sdb1 磁盘空间管理: - df:查看磁盘空间使用情况,df -h(人类可读格式) - du:查看目录或文件大小,du -sh directory(显示目录总大小) - du -h --max-depth=1 /:查看根目录下各目录的大小 - 清理磁盘空间: - 清理包缓存:apt clean(Debian/Ubuntu)、yum clean all(CentOS/RHEL) - 清理旧日志:logrotate - 查找大文件:find / -type f -size +100M LVM(逻辑卷管理): - pvcreate:创建物理卷,如 pvcreate /dev/sdb1 - vgcreate:创建卷组,如 vgcreate vgname /dev/sdb1 - lvcreate:创建逻辑卷,如 lvcreate -L 10G -n lvname vgname - lvextend:扩展逻辑卷,如 lvextend -L +5G /dev/vgname/lvname - lvreduce:缩减逻辑卷,如 lvreduce -L -5G /dev/vgname/lvname - resize2fs:调整 ext4 文件系统大小,如 resize2fs /dev/vgname/lvname - xfs_growfs:扩展 xfs 文件系统 - pvdisplay、vgdisplay、lvdisplay:查看物理卷、卷组、逻辑卷信息 RAID(磁盘阵列): - mdadm:管理软件 RAID - 创建 RAID 0:mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb1 /dev/sdc1 - 创建 RAID 1:mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1 - 创建 RAID 5:mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1 - 查看 RAID 状态:cat /proc/mdstat、mdadm --detail /dev/md0 磁盘性能优化: - 使用 SSD:提高 I/O 性能 - 调整 I/O 调度器:echo deadline > /sys/block/sda/queue/scheduler - 增加文件系统块大小:mkfs.ext4 -b 4096 /dev/sdb1 - 使用 noatime 挂载选项:减少磁盘写入 - 启用文件系统日志:提高数据安全性 磁盘故障排查: - 查看磁盘健康:smartctl -a /dev/sda(需要安装 smartmontools) - 查看磁盘 I/O:iostat -x 1 - 查看磁盘错误:dmesg | grep -i error - 修复文件系统:fsck /dev/sdb1(需要先卸载)
服务端 · 2月17日 23:38
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/bash BACKUP_DIR="/backup" DATE=$(date +%Y%m%d) tar -czvf $BACKUP_DIR/backup-$DATE.tar.gz /path/to/backup find $BACKUP_DIR -name "backup-*.tar.gz" -mtime +7 -delete ``` 云备份解决方案: - AWS S3:对象存储服务 - Azure Blob Storage:Azure 对象存储 - Google Cloud Storage:Google 云存储 - 阿里云 OSS:阿里云对象存储 - 腾讯云 COS:腾讯云对象存储 - rclone:多云存储同步工具 备份验证: - 定期测试恢复流程 - 验证备份完整性 - 检查备份文件大小 - 使用校验和验证数据 恢复策略: - 完全恢复:从完全备份恢复 - 增量恢复:从完全备份开始,依次应用增量备份 - 差异恢复:从完全备份开始,应用最新的差异备份 - 时间点恢复:恢复到指定时间点(需要 binlog) - 灾难恢复:异地备份恢复 备份最佳实践: - 制定备份策略文档 - 自动化备份流程 - 定期测试恢复 - 加密敏感数据 - 监控备份状态 - 保留多个备份版本 - 异地备份 - 定期审查备份策略 - 文档化恢复流程 故障排查: - 备份失败:检查磁盘空间、权限、网络连接 - 恢复失败:验证备份文件完整性、检查目标路径 - 性能问题:优化备份时间、使用增量备份 - 存储空间不足:清理旧备份、使用压缩
服务端 · 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; done - while 循环:while [ condition ]; do commands; done - until 循环:until [ condition ]; do commands; done 函数定义: - 函数定义:function_name() { commands; } 或 function function_name { commands; } - 函数调用:function_name arg1 arg2 - 返回值:return value(0-255) - 局部变量:local var="value" 常用命令: - echo:输出文本,echo -n 不换行,echo -e 解析转义字符 - printf:格式化输出 - read:读取用户输入,read -p "prompt" var - test:条件测试,[ ] 是 test 的同义词 - expr:表达式求值 - let:算术运算 - awk:文本处理工具 - sed:流编辑器 - grep:文本搜索 数组操作: - 定义数组:arr=(item1 item2 item3) - 访问元素:${arr[0]}、${arr[@]}(所有元素)、${#arr[@]}(元素个数) - 添加元素:arr+=("new_item") 最佳实践: - 使用 set -e 遇到错误立即退出 - 使用 set -u 使用未定义变量时报错 - 使用 set -o pipefail 管道中任何命令失败都返回失败 - 添加注释说明脚本用途 - 使用引号保护变量
服务端 · 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
服务端 · 2月17日 23:37
Linux 文件权限系统如何工作,包括读、写、执行权限以及特殊权限(SUID、SGID、Sticky Bit)的作用是什么?Linux 文件权限系统是 Unix-like 操作系统的核心安全机制之一。每个文件和目录都有三组权限:所有者(owner)、所属组(group)和其他用户(others)。每组权限包含读(r=4)、写(w=2)和执行(x=1)三种基本权限。 权限表示方法有两种:符号表示法(如 rwxr-xr-x)和数字表示法(如 755)。符号表示法中,r 表示读权限,w 表示写权限,x 表示执行权限。数字表示法中,读权限为 4,写权限为 2,执行权限为 1,通过相加得到组合权限值。 常用权限命令包括: - chmod:修改文件权限,如 chmod 755 filename 或 chmod u+x filename - chown:修改文件所有者,如 chown user:group filename - chgrp:修改文件所属组,如 chgrp group filename 特殊权限包括: - SUID(Set User ID):当执行设置了 SUID 的程序时,程序会以文件所有者的权限运行,而不是执行者的权限 - SGID(Set Group ID):对于文件,执行时以文件所属组的权限运行;对于目录,新创建的文件会继承目录的所属组 - Sticky Bit:对于目录,只有文件所有者和 root 才能删除目录中的文件,即使其他用户有写权限 理解文件权限对于系统安全至关重要,需要根据最小权限原则合理设置。
服务端 · 2月17日 23:37
Linux 容器技术(Docker、Kubernetes)的核心概念、常用命令和最佳实践有哪些?Linux 容器技术是现代应用部署和微服务架构的核心技术,Docker 和 Kubernetes 是最主流的容器解决方案。 Docker 基本概念: - 镜像(Image):只读的文件系统模板,包含运行应用所需的所有依赖 - 容器(Container):镜像的运行实例,轻量级、隔离的运行环境 - 仓库(Repository):存储和分发镜像的地方,如 Docker Hub - Dockerfile:用于构建镜像的文本文件 - 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:在服务中执行命令 - 配置示例: ```yaml version: '3' services: web: build: . ports: - "80:80" volumes: - ./data:/data environment: - ENV=value ``` Kubernetes 基本概念: - Pod:最小的部署单元,包含一个或多个容器 - Node:运行 Pod 的物理或虚拟机 - Service:为 Pod 提供稳定的网络访问 - Deployment:管理 Pod 的副本和更新 - ReplicaSet:确保指定数量的 Pod 副本在运行 - StatefulSet:管理有状态应用 - DaemonSet:在每个节点上运行一个 Pod - ConfigMap:配置数据 - Secret:敏感数据 - Namespace:资源隔离 - Ingress:HTTP/HTTPS 路由 Kubernetes 常用命令: - 集群管理: - kubectl cluster-info:查看集群信息 - kubectl get nodes:查看节点 - kubectl get namespaces:查看命名空间 - Pod 管理: - kubectl get pods:查看 Pod - kubectl describe pod podname:查看 Pod 详情 - kubectl logs podname:查看 Pod 日志 - kubectl exec -it podname /bin/bash:进入 Pod - kubectl delete pod podname:删除 Pod - Service 管理: - 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 配置: ```yaml apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: mycontainer image: nginx ports: - containerPort: 80 ``` - Deployment 配置: ```yaml 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 提供稳定的 IP - Ingress:外部访问入口 容器存储: - 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 管理配置 - 日志收集:集中收集和分析容器日志 - 监控告警:监控容器和集群状态
服务端 · 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
服务端 · 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 重定向到文件描述符 m - n<&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 mypipe - cat > 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 或 |&
服务端 · 2月17日 23:36
Linux 系统启动流程包括哪些阶段,从 BIOS/UEFI 到用户登录的详细过程是什么?Linux 系统启动流程是理解系统工作原理的重要知识,掌握启动流程有助于故障排查和系统优化。 BIOS/UEFI 启动阶段: - BIOS(Basic Input/Output System): - 传统固件接口 - 执行 POST(Power-On Self-Test)自检 - 检测硬件设备 - 查找可启动设备 - 加载 MBR(Master Boot Record) - UEFI(Unified Extensible Firmware Interface): - 现代固件接口 - 支持 GPT 分区表 - 启动速度更快 - 支持安全启动 - 加载 EFI 应用程序 引导加载程序阶段: - GRUB(Grand Unified Bootloader): - 最常用的 Linux 引导加载程序 - 支持 GRUB Legacy(0.97)和 GRUB 2 - 配置文件:/boot/grub/grub.cfg(GRUB 2)、/boot/grub/menu.lst(GRUB Legacy) - 支持 Linux、Windows 等多系统引导 - 提供命令行界面进行故障恢复 - LILO(Linux Loader): - 传统的 Linux 引导加载程序 - 配置文件:/etc/lilo.conf - 已被 GRUB 取代 - systemd-boot: - 简单的 UEFI 引导加载程序 - 配置文件:/boot/loader/entries/*.conf - 适合简单的启动场景 内核加载阶段: - 加载内核镜像:/boot/vmlinuz-* - 加载 initramfs(初始 RAM 文件系统):/boot/initrd.img-* - 内核解压缩并初始化 - 检测和初始化硬件设备 - 挂载根文件系统 - 启动 init 进程(PID 1) init 进程阶段: - SysVinit(传统 init 系统): - 配置文件:/etc/inittab - 运行级别(runlevel):0-6 - 0:关机 - 1:单用户模式 - 2:多用户模式(无网络) - 3:多用户模式(有网络) - 4:未使用 - 5:图形界面模式 - 6:重启 - 启动脚本:/etc/rc.d/rc*.d/ 或 /etc/rc*.d/ - 使用 chkconfig 管理服务 - systemd(现代 init 系统): - 配置文件:/etc/systemd/system/ - 目标(target):类似于运行级别 - poweroff.target:关机 - rescue.target:救援模式 - multi-user.target:多用户模式 - graphical.target:图形界面模式 - reboot.target:重启 - 使用 systemctl 管理服务 - 支持并行启动,启动速度更快 - 更好的日志集成(journalctl) 系统服务启动阶段: - SysVinit: - 按 runlevel 顺序启动服务 - 执行 /etc/rc.d/rcN.d/ 目录下的脚本 - S 开头的脚本表示启动(Start) - K 开头的脚本表示停止(Kill) - systemd: - 并行启动服务 - 根据依赖关系确定启动顺序 - 执行 .service 文件定义的服务 登录阶段: - 显示登录提示符 - 用户输入用户名和密码 - 验证用户凭据 - 启动用户 shell - 执行用户配置文件:~/.bash_profile、~/.bashrc 启动过程的关键文件: - /boot/grub/grub.cfg:GRUB 2 配置文件 - /boot/grub/menu.lst:GRUB Legacy 配置文件 - /etc/inittab:SysVinit 配置文件 - /etc/systemd/system/default.target:systemd 默认启动目标 - /etc/fstab:文件系统挂载配置 - /etc/hostname:主机名配置 - /etc/hosts:主机名到 IP 映射 启动故障排查: - GRUB 故障: - 修复 GRUB:grub-install /dev/sda - 重建 GRUB 配置:update-grub 或 grub2-mkconfig -o /boot/grub2/grub.cfg - 进入 GRUB 命令行:按 'c' 键 - 内核故障: - 查看内核日志:dmesg、journalctl -k - 尝试恢复模式:在 GRUB 菜单选择 recovery mode - 使用旧内核启动 - 文件系统故障: - 修复文件系统:fsck /dev/sda1 - 检查 /etc/fstab 配置 - 服务启动故障: - 查看服务状态:systemctl status service - 查看服务日志:journalctl -u service - 禁用故障服务:systemctl disable service 启动优化: - 减少 GRUB 等待时间:修改 /etc/default/grub 中的 GRUB_TIMEOUT - 禁用不必要的启动服务:systemctl disable service - 使用 systemd-analyze 分析启动时间: - systemd-analyze:查看总启动时间 - systemd-analyze blame:查看各服务启动时间 - systemd-analyze critical-chain:查看关键启动链 - 使用并行启动:systemd 默认支持 - 优化内核参数:修改 /etc/default/grub 中的 GRUB_CMDLINE_LINUX
服务端 · 2月17日 23:36