比ChatGPT4o更“聪明”的甜点级OS Copilot
在写这篇文章时OS Copilot已经安装部署完毕并且正常运行了,我新开通了一台ECS来完成本次评测,以常用情景切入进行评价。如果你还没有安装可以参阅官方的帮助文档,那里有很详细的说明:https://help.aliyun.com/zh/alinux/user-guide/instructions-for-os-copilot
场景一:Linux系统上采集监控日志以FTP的方式上传至日志服务器
Prompt:我需要在Linux操作系统中安装FTP客户端。其次在服务器中创建Linux.bat,获取服务器时间、Hostname、文件系统使用率、文件系统、节点使用率、内存、CPU、进程使用率等服务器信息并写入指定的文件内,最后使用FTP上传至日志服务器中。请给出解决方案。
[Copilot]: 在Alibaba Cloud Linux 3 上安装 FTP 客户端可以使用 `yum` 命令来安装 `filezilla`:
```bash sudo yum install filezilla -y ```
接下来,你需要在服务器上编写一个名为 `Linux.bat` 的脚本(请注意,在Linux中我们通常使用`.sh`扩展名表示脚本)。这个脚本将获取服务器的时间、hostname、文件系统使用率等信息,并将其写入到一个名为 `server_info.txt` 的文件中。以下是一个简单的示例脚本:
```bash #!/bin/bash
# 获取当前时间 current_time=$(date)
# 获取hostname hostname=$(hostname)
# 获取文件系统使用率 df_output=$(df -h) fs_usage=$(echo "$df_output" | awk 'NR==2 {print $5}')
# 获取文件系统 fs=$(echo "$df_output" | awk 'NR==2 {print $1}')
# 获取节点使用率 nodename=$(uname -n) node_load=$(uptime | awk '{print $(NF-2)}')
# 获取内存使用情况 mem_total=$(free | grep Mem | awk '{print $2}') mem_used=$(free | grep Mem | awk '{print $3}') mem_percent=$(echo "scale=2; ($mem_used / $mem_total) * 100" | bc)
# 获取CPU使用情况 cpu_percent=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
# 获取进程数量 process_count=$(ps axo comm | wc -l)
# 将所有信息写入文件 echo "Current Time: $current_time" > server_info.txt echo "Hostname: $hostname" >> server_info.txt echo "File System Usage: $fs_usage" >> server_info.txt echo "File System: $fs" >> server_info.txt echo "Node Name: $nodename" >> server_info.txt echo "Node Load: $node_load" >> server_info.txt echo "Memory Usage: $mem_percent%" >> server_info.txt echo "CPU Usage: $cpu_percent%" >> server_info.txt echo "Process Count: $process_count" >> server_info.txt ```
保存此脚本后,记得赋予执行权限:
```bash chmod +x Linux.sh ```
然后运行此脚本来生成 `server_info.txt` 文件。
最后,你可以使用 FileZilla 客户端将 `server_info.txt` 上传到日志服务器。以下是基本步骤:
1. 打开 FileZilla。 2. 在左侧栏中点击“站点管理器”(Site Manager)。 3. 点击“新建”(New Site)按钮。 4. 输入新站点的详细信息,包括主机名(Host)、用户名(User)、密码(Password)以及端口(Port,通常是21)。 5. 点击“连接”(Connect)按钮以连接到日志服务器。 6. 在右侧栏中浏览日志服务器上的目录。 7. 将 `server_info.txt` 拖拽到右侧栏中的相应位置,或者右键点击目标目录,选择“上传”(Upload)。
注意:这些步骤假设你已经知道日志服务器的登录凭据和网络设置。如果没有,请与系统管理员联系以获取必要的信息。
[Copilot]发现如下命令: 1. sudo yum install filezilla -y 2. current_time=$(date)
hostname=$(hostname)
df_output=$(df -h) fs_usage=$(echo "$df_output" | awk 'NR==2 {print $5}')
fs=$(echo "$df_output" | awk 'NR==2 {print $1}')
nodename=$(uname -n) node_load=$(uptime | awk '{print $(NF-2)}')
mem_total=$(free | grep Mem | awk '{print $2}') mem_used=$(free | grep Mem | awk '{print $3}') mem_percent=$(echo "scale=2; ($mem_used / $mem_total) * 100" | bc)
cpu_percent=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
process_count=$(ps axo comm | wc -l)
echo "Current Time: $current_time" > server_info.txt echo "Hostname: $hostname" >> server_info.txt echo "File System Usage: $fs_usage" >> server_info.txt echo "File System: $fs" >> server_info.txt echo "Node Name: $nodename" >> server_info.txt echo "Node Load: $node_load" >> server_info.txt echo "Memory Usage: $mem_percent%" >> server_info.txt echo "CPU Usage: $cpu_percent%" >> server_info.txt echo "Process Count: $process_count" >> server_info.txt 3. chmod +x Linux.sh
[Copilot]: 请选择要执行的命令,从[1, 3]中进行选择,回复'n'或'no'进行取消,回复'r'或'retry'重新生成回答。 请输入: |
评价:脚本生成的没有问题,但是FTP上传的部分存在问题,OS Copilot告诉我们应该使用 FileZilla 客户端将`server_info.txt` 上传到日志服务器然后给出了一连串FileZilla客户端的操作。问题在于这些操作在Windows系统中可行,Alibaba Cloud Linux 3根本没有图形化界面。OS Copilot在相对复杂的问题下表现不佳,但优化prompt表达能弥补部分缺陷。
该问题相对合理的方法是将通过FTP上传文件这一操作也写入脚本中。
# 设置FTP凭证(在实际环境中,这些变量应该在环境中设置) FTP_SERVER="192.168.1.90" FTP_USER=${FTP_USER:-"your_ftp_username"} FTP_PASS=${FTP_PASS:-"your_ftp_password"} |
这个示例使用lftp
工具,配置了FTPS传输,并包含了错误处理机制:
# 检查FTP凭证是否设置 if [ -z "$FTP_USER" ] || [ -z "$FTP_PASS" ]; then echo "FTP用户名或密码未设置" >&2 exit 1 fi # 使用lftp进行安全的FTPS上传 lftp -e " set ftp:ssl-allow yes open $FTP_SERVER user $FTP_USER $FTP_PASS put $filename -o ftp.log bye " || { echo "日志文件上传失败" >&2 exit 1 } echo "日志文件上传成功" |
场景二:配置NFS服务
Prompt:配置NFS服务
[Copilot]: 要在Alibaba Cloud Linux 3 上配置 NFS(Network File System)服务,你需要按照以下步骤操作:
1. 首先,你需要安装 `nfs-utils` 包,它包含了 NFS 服务器所需的组件。使用 yum 工具来完成这个任务: ```bash sudo yum install nfs-utils ```
2. 安装完成后,你需要编辑 NFS 的配置文件来指定哪些目录可以被共享。默认情况下,配置文件位于 `/etc/sysconfig/nfs` 。打开并编辑此文件: ```bash sudo vi /etc/sysconfig/nfs ``` 在 `[nfsv4]` 或 `[nfsv4.1]` 段落下添加要共享的目录,比如: ```makefile # 共享目录路径及访问权限 export_dir="/path/to/your/shared/directory" # 访问主机列表 hosts_allow="*" ```
保存并关闭文件。
3. 创建一个你要共享的目录(如果尚未创建),并设置适当的权限: ```bash sudo mkdir -p /path/to/your/shared/directory sudo chmod -R 777 /path/to/your/shared/directory ```
4. 开启并启用 NFS 服务: ```bash sudo systemctl start nfs-server sudo systemctl enable nfs-server ```
5. 如果你的网络防火墙是活跃的,可能需要开启 NFS 相关端口(通常是 TCP 和 UDP 端口 2049)。可以使用 firewall-cmd 命令进行配置: ```bash sudo firewall-cmd --permanent --add-service=nfs sudo firewall-cmd --reload ```
6. 重启 NFS 服务以应用更改: ```bash sudo systemctl restart nfs-server ```
现在 NFS 服务已经配置好,其他系统可以通过网络访问你在第2步中指定的共享目录了。
注意:在实际生产环境中,强烈建议不要使用 `hosts_allow="*"` 这样宽松的访问控制,而是具体列出允许访问的IP地址或子网,以提高安全性。此外,确保为共享目录设置合适的权限,只允许必要的操作。 |
评价:`nfs-utils` 包是Alibaba Cloud Linux 3 上默认安装的包,并且通过检索文件发现nfs配置文件并不位于 `/etc/sysconfig/nfs`,而在/etc/nfs.conf。
场景三:小学数学
这是一个部分人类和ChatGPT4o都回答错误的小学数学题,我们看看OS Copilot表现如何。
Prompt:13.11大于13.8评价:OS Copilot赢了,它用及其细致的分析告诉了我们13.11并没有大于13.8。
总体来说
总体来说,OS Copilot的命令行模式非常适合小白学习Linux使用,但是还不够成熟,在复杂情景下存在一定出错率,有很大进步空间。但是在部分基本常识方面秒杀部分人类和ChatGPT4o,很让我惊喜。目前OS Copilot只能用在Alibaba Cloud Linux 3有点遗憾,希望未来能够支持更多的操作系统、增加跨会话的联动功能。此外,OS Copilot作为阿里云生态的产品完全可以与安骑士和云平台的运维监控等功能打通提供更多数据能力。