运维学习涉及对服务器管理基础的全面掌握,包括运维基础知识、操作系统管理、网络配置、服务部署和日志监控等。本文详细介绍了运维人员需要掌握的各项技能和常用命令,旨在帮助读者轻松入门运维领域。运维学习还包括使用监控工具如Zabbix和Nagios实现系统监控,以及编写自动化运维脚本以提高工作效率。
运维基础知识介绍什么是运维
运维(Operations and Maintenance,简称O&M)是指对硬件、软件和网络等基础设施进行日常管理、维护、优化和故障排除的过程。运维的目标是确保系统稳定运行、提高系统的可用性和可靠性,同时尽可能减少停机时间。运维包括但不限于数据中心管理、系统监控、性能优化、安全防护等。
运维的基本职责
运维的基本职责可以归纳如下:
- 系统监控:监控系统运行状态、资源使用情况和性能指标,确保系统正常运行。
- 故障处理:及时发现并排除系统故障,确保服务连续性。
- 性能优化:优化系统性能,提高系统响应速度和资源利用率。
- 数据备份:定期备份系统数据,防止数据丢失。
- 安全防护:维护系统安全,防止黑客攻击、病毒入侵等安全事件。
- 文档记录:记录系统操作日志、配置变更等,方便后续维护。
运维人员需要掌握的技能
运维人员需要掌握以下技能:
- 操作系统管理:熟悉Linux、Windows等常用操作系统的基本命令和配置方法。
- 网络配置:理解TCP/IP模型,掌握常见网络协议和网络设备配置。
- 服务部署:能够部署和管理Web服务、数据库服务等常用服务。
- 日志管理:能够读取和分析系统日志文件,快速定位和解决故障。
- 监控工具:熟悉Zabbix、Nagios等监控工具的使用。
- 脚本编写:能够使用Shell、Python等脚本语言编写自动化运维脚本。
- 安全防护:掌握基本的安全防护知识,如防火墙配置、加密通信等。
- 文档撰写:能够撰写清晰的技术文档和操作手册。
Linux系统常用命令
Linux系统中,常用命令包括但不限于以下几种:
- 文件和目录操作
ls
:列出指定目录的内容。cd
:改变当前目录。mkdir
:创建新的目录。rm
:删除文件或目录。mv
:移动文件或重命名文件。touch
:创建空文件或修改文件的最后修改时间。cp
:复制文件或目录。
示例代码:
# 列出当前目录下的所有文件
ls
# 创建一个新的目录
mkdir new_directory
# 删除一个空目录
rmdir empty_directory
# 移动文件到另一个目录
mv file.txt /new_directory/
# 创建一个空文件
touch new_file.txt
- 文件权限管理
chmod
:更改文件权限。chown
:更改文件所有者。chgrp
:更改文件所属组。
示例代码:
# 更改文件权限,为文件赋予可读、可写、可执行权限
chmod 777 file.txt
# 更改文件所有者
chown new_user file.txt
# 更改文件所属组
chgrp new_group file.txt
- 用户与权限
useradd
:添加新用户。userdel
:删除用户。passwd
:修改用户密码。groupadd
:添加新用户组。groupdel
:删除用户组。
示例代码:
# 添加新用户
useradd newuser
# 删除用户
userdel olduser
# 修改用户密码
passwd newuser
# 添加新用户组
groupadd newgroup
# 删除用户组
groupdel oldgroup
- 进程管理
ps
:显示当前运行的进程。top
:实时显示系统中各个进程的资源占用情况。kill
:终止指定的进程。killall
:终止指定名称的所有进程。
示例代码:
# 显示当前运行的进程
ps aux
# 实时显示系统中各个进程的资源占用情况
top
# 终止指定的进程
kill 1234
# 终止指定名称的所有进程
killall process_name
- 文件压缩与解压
tar
:打包或解包文件。gzip
:压缩或解压文件。bzip2
:压缩或解压文件。zip
:压缩或解压文件到zip格式。
示例代码:
# 打包文件并压缩
tar -czvf archive.tar.gz file1 file2
# 解压文件
tar -xzvf archive.tar.gz
# 使用gzip压缩文件
gzip file.txt
# 使用gzip解压文件
gunzip file.txt.gz
# 使用bzip2压缩文件
bzip2 file.txt
# 使用bzip2解压文件
bunzip2 file.txt.bz2
# 使用zip压缩文件
zip archive.zip file1 file2
# 使用zip解压文件
unzip archive.zip
Windows系统常用命令
Windows系统中,常用命令包括但不限于以下几种:
- 文件和目录操作
dir
:列出指定目录的内容。cd
:改变当前目录。mkdir
:创建新的目录。rmdir
:删除空目录。del
:删除文件。move
:移动文件或重命名文件。echo
:创建空文件。copy
:复制文件或目录。
示例代码:
# 列出当前目录下的所有文件
dir
# 创建一个新的目录
mkdir new_directory
# 删除一个空目录
rmdir empty_directory
# 删除文件
del file.txt
# 移动文件到另一个目录
move file.txt new_directory
# 创建一个空文件
echo > new_file.txt
- 文件权限管理
icacls
:更改文件权限。takeown
:更改文件所有者。net localgroup
:添加或删除用户组和用户权限。
示例代码:
# 更改文件权限
icacls file.txt /grant Everyone:F
# 更改文件所有者
takeown /f file.txt
# 添加或删除用户组
net localgroup Administrators /add new_user
- 用户与权限
net user
:添加或删除用户。net localgroup
:添加或删除用户组。
示例代码:
# 添加新用户
net user newuser password /add
# 删除用户
net user olduser /delete
# 添加新用户组
net localgroup newgroup /add
- 进程管理
tasklist
:显示当前运行的进程。taskkill
:终止指定的进程。
示例代码:
# 显示当前运行的进程
tasklist
# 终止指定的进程
taskkill /PID 1234
- 文件压缩与解压
compress
:压缩文件。expand
:解压文件。zip
:压缩或解压文件到zip格式。
示例代码:
# 使用compress压缩文件
compress file.txt
# 使用expand解压文件
expand file.txt
# 使用zip压缩文件
zip archive.zip file1 file2
# 使用zip解压文件
unzip archive.zip
常见操作系统安装与配置方法
操作系统安装与配置方法主要包括以下几个步骤:
- 安装操作系统
- 准备安装介质(ISO镜像或USB启动盘)。
- 设置BIOS/UEFI启动顺序。
- 从安装介质启动。
- 按照安装向导完成安装。
示例代码(以Linux Ubuntu为例):
# 使用ISO镜像安装Ubuntu
# 执行以下命令刻录ISO镜像到USB启动盘
sudo dd if=/path/to/ubuntu.iso of=/dev/sdX bs=4M status=progress && sync
# where /dev/sdX 是USB启动盘的设备名
- 系统配置
- 设置用户账户。
- 安装必要的软件包。
- 配置网络设置。
示例代码(以Linux Ubuntu为例):
# 设置用户账户
sudo adduser newuser
# 安装必要的软件包
sudo apt-get update
sudo apt-get install vim
# 配置网络设置
sudo nano /etc/netplan/01-netcfg.yaml
- 系统优化
- 配置防火墙。
- 启用或禁用不必要的服务。
- 配置系统定时任务。
示例代码(以Linux Ubuntu为例):
# 配置防火墙
sudo ufw enable
sudo ufw allow 22/tcp
# 启用或禁用服务
sudo systemctl enable ssh
sudo systemctl disable ssh
# 配置系统定时任务
sudo crontab -e
# 添加定时任务
0 0 * * * /path/to/script.sh
网络基础及配置
IP地址与子网掩码
IP地址是一种用于标识网络设备的数字标识符,通常分为IPv4和IPv6两种。IPv4地址由四个八位字节组成(例如192.168.1.1),IPv6地址则由八个16位的十六进制数组成(例如2001:0db8:85a3:0000:0000:8a2e:0370:7334)。
子网掩码用于划分IP地址的网络部分和主机部分。常见的子网掩码有:
- IPv4:
255.255.255.0
(表示一个C类网络) - IPv6:
ffff:ffff:ffff:ffff::
(表示一个/64子网)
常见网络协议介绍
网络协议是计算机网络中的通信规则,用于控制数据的传输方式。以下是一些常见的网络协议:
-
TCP/IP
- TCP(传输控制协议):一种面向连接的、可靠的协议,用于保证数据的正确传输。
- IP(互联网协议):一种无连接的、不可靠的协议,用于将数据包从源地址传输到目的地址。
- UDP(用户数据报协议):一种无连接的、不可靠的协议,用于实时传输数据。
-
HTTP/HTTPS
- HTTP(超文本传输协议):一种用于Web传输的标准协议。
- HTTPS(安全的HTTP):在HTTP的基础上增加了SSL/TLS加密,确保数据传输的安全性。
-
FTP
- FTP(文件传输协议):用于在客户端和服务器之间传输文件。
- DNS
- DNS(域名系统):用于将域名转换为IP地址。
示例代码(以Linux为例,使用curl
命令访问HTTP和HTTPS服务):
# 访问HTTP服务
curl http://example.com
# 访问HTTPS服务
curl https://example.com
网络设备配置及故障排查
网络设备的配置和故障排查是运维人员需要掌握的重要技能。
- 配置路由器
- 配置IP地址。
- 配置子网掩码。
- 配置默认网关。
- 配置静态路由。
示例代码(以Cisco路由器为例,配置IP地址和子网掩码):
# 进入全局配置模式
configure terminal
# 配置接口的IP地址和子网掩码
interface GigabitEthernet0/0
ip address 192.168.1.1 255.255.255.0
- 配置交换机
- 配置VLAN。
- 配置端口聚合。
- 配置STP(生成树协议)。
- 配置端口安全。
示例代码(以Cisco交换机为例,配置VLAN):
# 进入全局配置模式
configure terminal
# 创建VLAN
vlan 10
name VLAN10
# 将端口添加到VLAN
interface GigabitEthernet0/1
switchport mode access
switchport access vlan 10
- 故障排查
- 使用
ping
命令测试网络连通性。 - 使用
traceroute
命令跟踪数据包的传输路径。 - 使用
netstat
命令查看网络连接状态。
- 使用
示例代码(以Linux为例,使用ping
和traceroute
命令):
# 测试网络连通性
ping 192.168.1.1
# 跟踪数据包的传输路径
traceroute 192.168.1.1
常用服务部署
Web服务 (如Apache, Nginx)
Web服务是为用户提供网页服务的软件,常见的Web服务器包括Apache、Nginx等。
- Apache
- 安装
- 配置
- 基本操作
示例代码(以Ubuntu为例,安装和配置Apache):
# 安装Apache
sudo apt-get update
sudo apt-get install apache2
# 启动Apache
sudo systemctl start apache2
# 设置Apache开机自启
sudo systemctl enable apache2
# 配置Apache虚拟主机
sudo nano /etc/apache2/sites-available/000-default.conf
# 添加虚拟主机配置
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ServerName example.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# 启用虚拟主机配置
sudo a2ensite 000-default.conf
- Nginx
- 安装
- 配置
- 基本操作
示例代码(以Ubuntu为例,安装和配置Nginx):
# 安装Nginx
sudo apt-get update
sudo apt-get install nginx
# 启动Nginx
sudo systemctl start nginx
# 设置Nginx开机自启
sudo systemctl enable nginx
# 配置Nginx虚拟主机
sudo nano /etc/nginx/sites-available/default
# 添加虚拟主机配置
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
# 启用虚拟主机配置
sudo systemctl restart nginx
数据库服务 (如MySQL, MongoDB)
数据库服务是用于存储和管理数据的软件。常见的数据库服务包括MySQL、MongoDB等。
- MySQL
- 安装
- 配置
- 基本操作
示例代码(以Ubuntu为例,安装和配置MySQL):
# 安装MySQL
sudo apt-get update
sudo apt-get install mysql-server
# 启动MySQL
sudo systemctl start mysql
# 设置MySQL开机自启
sudo systemctl enable mysql
# 配置MySQL
sudo mysql_secure_installation
# 会提示设置root密码、删除匿名用户、禁止root远程登录等安全设置
# 登录MySQL
sudo mysql -u root -p
- MongoDB
- 安装
- 配置
- 基本操作
示例代码(以Ubuntu为例,安装和配置MongoDB):
# 安装MongoDB
sudo apt-get update
sudo apt-get install mongodb
# 启动MongoDB
sudo systemctl start mongod
# 设置MongoDB开机自启
sudo systemctl enable mongod
# 连接MongoDB
mongo
其他常用服务 (如DNS, FTP)
除了Web服务和数据库服务之外,还有其他一些常用的网络服务,如DNS、FTP等。
- DNS
- 安装
- 配置
- 基本操作
示例代码(以Ubuntu为例,安装和配置DNS服务使用BIND):
# 安装BIND
sudo apt-get update
sudo apt-get install bind9
# 启动BIND
sudo systemctl start bind9
# 设置BIND开机自启
sudo systemctl enable bind9
# 配置BIND
sudo nano /etc/bind/named.conf.local
# 添加DNS记录
zone "example.com" {
type master;
file "/etc/bind/db.example.com";
};
sudo nano /etc/bind/db.example.com
# 添加DNS记录
$ORIGIN example.com.
$TTL 86400
@ IN SOA ns.example.com. admin.example.com. (
2023100101 ; Serial
86400 ; Refresh
7200 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ns.example.com.
ns IN A 192.168.1.1
www IN A 192.168.1.2
- FTP
- 安装
- 配置
- 基本操作
示例代码(以Ubuntu为例,安装和配置FTP服务使用vsftpd):
# 安装vsftpd
sudo apt-get update
sudo apt-get install vsftpd
# 启动vsftpd
sudo systemctl start vsftpd
# 设置vsftpd开机自启
sudo systemctl enable vsftpd
# 配置vsftpd
sudo nano /etc/vsftpd.conf
# 修改配置选项
local_enable=YES
write_enable=YES
chroot_local_user=YES
日志管理和监控工具
日志文件基本概念
日志文件是系统运行过程中生成的记录文件,用于记录系统的操作日志、错误信息等。常见的日志文件包括系统日志、应用日志等。系统日志通常位于/var/log
目录下,常见的日志文件有syslog
、auth
、kern
等。
常见日志文件位置及内容
常见的日志文件位置及内容包括:
-
系统日志
/var/log/syslog
:系统日志文件,记录系统启动、关机、错误信息等。/var/log/auth.log
:用户认证日志文件,记录用户登录、密码认证等信息。/var/log/kern.log
:内核日志文件,记录内核错误信息。
- 应用日志
/var/log/apache2/access.log
:Apache访问日志文件,记录HTTP请求信息。/var/log/mysql/error.log
:MySQL错误日志文件,记录MySQL运行错误信息。
使用监控工具 (如Zabbix, Nagios) 实现系统监控
监控工具用于监控系统的运行状态,常见的监控工具有Zabbix、Nagios等。
- Zabbix
- 安装
- 配置
- 基本操作
示例代码(以Ubuntu为例,安装和配置Zabbix):
# 安装Zabbix
sudo apt-get update
sudo apt-get install zabbix-server-mysql zabbix-agent zabbix-web-nginx
sudo mysql -u root -p
# 创建数据库
CREATE DATABASE zabbix DEFAULT CHARACTER SET utf8;
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
# 初始化数据库
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql zabbix
sudo zcat /usr/share/doc/zabbix-server-mysql*/schema.sql | mysql zabbix
sudo zcat /usr/share/doc/zabbix-server-mysql*/images.sql | mysql zabbix
sudo zcat /usr/share/doc/zabbix-server-mysql*/data.sql | mysql zabbix
# 启动Zabbix
sudo systemctl start zabbix-server
sudo systemctl start zabbix-agent
sudo systemctl start nginx
sudo systemctl enable zabbix-server
sudo systemctl enable zabbix-agent
sudo systemctl enable nginx
- Nagios
- 安装
- 配置
- 基本操作
示例代码(以Ubuntu为例,安装和配置Nagios):
# 安装Nagios
sudo apt-get update
sudo apt-get install nagios3 nagios-nrpe-plugin
# 启动Nagios
sudo systemctl start nagios3
sudo systemctl start nagios-nrpe-server
sudo systemctl enable nagios3
sudo systemctl enable nagios-nrpe-server
# 配置Nagios
sudo nano /etc/nagios3/conf.d/localhost.cfg
# 添加主机和服务配置
define host {
use generic-host
host_name localhost
address 127.0.0.1
check_command check-host-alive
notification_enabled 0
}
define service {
use generic-service
host_name localhost
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}
# 其他服务配置
define service {
use generic-service
host_name localhost
service_description Apache
check_command check_http!192.168.1.1
}
# 设定警报通知
sudo nano /etc/nagios3/conf.d/localhost.cfg
# 添加警报通知配置
define command {
command_name notify-by-email
command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $HOSTLONGDATETIME$\n" | /bin/mail -s "**$NOTIFICATIONTYPE$ Host Alert** $HOSTNAME$ is $HOSTSTATE$" $CONTACTEMAIL$
}
运维自动化脚本编写
常见脚本语言介绍 (如Shell, Python)
运维自动化脚本编写是运维人员提高工作效率的重要手段。常见的脚本语言包括Shell、Python等。
- Shell
- 介绍
- 基本语法
- 示例代码
示例代码(Shell脚本示例):
#!/bin/bash
# 变量定义
username="admin"
password="password"
# 输出变量
echo "Username: $username"
echo "Password: $password"
# 条件判断
if [ "$username" == "admin" ]; then
echo "Welcome admin!"
fi
# 循环
for ((i=1; i<=5; i++)); do
echo "Loop $i"
done
# 函数定义
function print_message() {
echo "Hello, $1!"
}
print_message "World"
- Python
- 介绍
- 基本语法
- 示例代码
示例代码(Python脚本示例):
# 变量定义
username = "admin"
password = "password"
# 输出变量
print("Username:", username)
print("Password:", password)
# 条件判断
if username == "admin":
print("Welcome admin!")
# 循环
for i in range(1, 6):
print("Loop", i)
# 函数定义
def print_message(name):
print("Hello,", name)
print_message("World")
常用命令行工具 (如SSH, SCP)
命令行工具是运维人员常用的工具,用于远程管理和传输文件。常用的命令行工具包括SSH、SCP等。
- SSH
- 介绍
- 基本语法
- 示例代码
示例代码(SSH示例):
# 连接远程服务器
ssh username@remote_host
# 执行远程命令
ssh username@remote_host 'ls /'
# 确认密码
ssh -o StrictHostKeyChecking=no username@remote_host 'ls /'
# 登录并执行脚本
ssh username@remote_host 'bash -s' < local_script.sh
- SCP
- 介绍
- 基本语法
- 示例代码
示例代码(SCP示例):
# 不出显进度条
scp local_file.txt username@remote_host:/path/to/destination/file.txt
# 显示进度条
scp -v local_file.txt username@remote_host:/path/to/destination/file.txt
# 递归复制目录
scp -r local_directory username@remote_host:/path/to/destination/directory
编写简单的自动化运维脚本
编写简单的自动化运维脚本有助于提高工作效率,减少手动操作的错误。
示例代码(Shell脚本示例,自动备份文件):
#!/bin/bash
# 变量定义
backup_dir="/path/to/backup"
source_file="/path/to/source/file"
# 创建备份目录(如果不存在)
mkdir -p $backup_dir
# 获取当前日期
current_date=$(date +%Y%m%d_%H%M%S)
# 复制文件到备份目录
cp $source_file $backup_dir/backup_$current_date.txt
# 输出备份信息
echo "Backup complete: $source_file -> $backup_dir/backup_$current_date.txt"
示例代码(Python脚本示例,自动检查磁盘空间):
import os
import psutil
# 获取磁盘使用情况
disk_usage = psutil.disk_usage('/')
# 输出磁盘使用情况
print(f"Total: {disk_usage.total / (1024.0 ** 3):.2f} GB")
print(f"Used: {disk_usage.used / (1024.0 ** 3):.2f} GB")
print(f"Free: {disk_usage.free / (1024.0 ** 3):.2f} GB")
# 检查磁盘空间是否低于阈值
threshold_gb = 10
if disk_usage.free / (1024.0 ** 3) < threshold_gb:
print("Disk space is low!")
通过以上介绍和示例代码,希望能够帮助运维人员掌握运维基础,提高工作效率。
共同学习,写下你的评论
评论加载中...
作者其他优质文章