# 实战 # IT 全面管理 ## 工具 以下工具可用于服务器连接:
工具描述
[概述](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/use/manage-servers#overview)查看服务器详细信息和控制服务器状态
[Active Directory](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/use/manage-servers#active-directory-preview)管理 Active Directory
[备份](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/use/manage-servers#backup)查看和配置Azure 备份
[证书](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/use/manage-servers#certificates)查看和修改证书
[容器](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/use/manage-servers#containers)查看容器
[设备](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/use/manage-servers#devices)查看和修改设备
[DHCP](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/use/manage-servers#dhcp)查看和管理 DHCP 服务器配置
[DNS](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/use/manage-servers#dns)查看和管理 DNS 服务器配置
[事件](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/use/manage-servers#events)查看事件
[文件和文件共享](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/use/manage-servers#files-and-file-sharing)浏览文件和文件夹
[防火墙](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/use/manage-servers#firewall)查看和修改防火墙规则
[已安装的应用](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/use/manage-servers#installed-apps)查看和删除已安装的应用
[本地用户和组](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/use/manage-servers#local-users-and-groups)查看和修改本地用户和组
[Network](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/use/manage-servers#network)查看和修改网络设备
[数据包监视](https://aka.ms/wac1908)监视网络数据包
[性能监视器](https://aka.ms/perfmon-blog)查看性能计数器和报表
[PowerShell](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/use/manage-servers#powershell)通过 PowerShell 与服务器交互
[进程](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/use/manage-servers#processes)查看和修改正在运行的进程
[注册表](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/use/manage-servers#registry)查看和修改注册表项
[远程桌面](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/use/manage-servers#remote-desktop)通过远程桌面与服务器交互
[角色和功能](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/use/manage-servers#roles-and-features)查看和修改角色和功能
[计划的任务](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/use/manage-servers#scheduled-tasks)查看和修改计划任务
[服务](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/use/manage-servers#services)查看和修改服务
[设置](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/use/manage-servers#settings)查看和修改服务
[存储](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/use/manage-servers#storage)查看和修改存储设备
[存储迁移服务](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/use/manage-servers#storage-migration-service)将服务器和文件共享迁移到 Azure 或 Windows Server 2019
[存储副本](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/use/manage-servers#storage-replica)使用存储副本管理服务器到服务器存储复制
[系统见解](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/use/manage-servers#system-insights)系统Insights可让你深入了解服务器的运行情况。
[更新](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/use/manage-servers#updates)查看已安装并检查是否有新更新
[虚拟机](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/use/manage-virtual-machines)查看和管理虚拟机
[虚拟交换机](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/use/manage-servers#virtual-switches)查看和管理虚拟交换机
## 概述 **概述** 允许查看 CPU、内存和网络性能的当前状态,以及在目标计算机或服务器上执行操作和修改设置。 ### 概述功能 服务器管理器概述中支持以下功能: - 查看服务器详细信息 - 查看 CPU 活动 - 查看内存活动 - 查看网络活动 - 重新启动服务器 - 关闭服务器 - 在服务器上启用磁盘指标 - 在服务器上编辑计算机 ID - 使用超链接 (查看 BMC IP 地址需要 IPMI 兼容的 BMC) 。 ## Active Directory (预览版) **Active Directory** 是 [扩展源](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/configure/using-extensions)上提供的早期预览版。 ### Active Directory 功能 以下 Active Directory 管理可用: - 创建用户 - 创建组 - 搜索用户、计算机和组 - 在网格中选择用户、计算机和组的详细信息窗格 - 全局网格操作用户、计算机和组 (禁用/启用,删除) - 重置用户密码 - 用户对象:配置基本属性 & 组成员身份 - 计算机对象:配置到单个计算机的委派 - 组对象:一次管理 (添加/删除 1 个用户的成员身份) ## 备份 **通过备份**,可以通过将服务器直接备份到Microsoft Azure来保护Windows服务器免受损坏、攻击或灾难的影响。 [详细了解Azure 备份。](https://aka.ms/windows-admin-center-backup) [在 Windows Admin Center 中提供有关备份的反馈](https://aka.ms/backup-wac-feedback) ### 备份功能 备份支持以下功能: - 查看 Azure 备份状态的概述 - 配置备份项和计划 - 启动或停止备份作业 - 查看备份作业历史记录和状态 - 查看恢复点和恢复数据 - 删除备份数据 ## 证书 **证书** 允许管理计算机或服务器上的证书存储。 ### 证书功能 证书支持以下功能: - 浏览和搜索现有证书 - 查看证书详细信息 - 导出证书 - 续订证书 - 请求新证书 - 删除证书 ## 容器 **使用容器**可以查看Windows服务器容器主机上的容器。 在运行Windows Server Core 容器的情况下,可以查看事件日志并访问容器的 CLI。 ## 设备 **设备** 允许管理计算机或服务器上的已连接设备。 ### 设备功能 设备支持以下功能: - 浏览和搜索设备 - 查看设备详细信息 - 禁用设备 - 更新设备上的驱动程序 ## DHCP **DHCP** 允许管理计算机或服务器上的已连接设备。 ### DHCP 功能 - 创建/配置/查看 IPV4 和 IPV6 范围 - 创建地址排除项并配置起始和结束 IP 地址 - 创建地址预留并配置客户端 MAC 地址 (IPV4) 、DUID 和 IAID (IPV6) ## DNS **DNS** 允许管理计算机或服务器上的已连接设备。 ### DNS 功能 - 查看 DNS 转发查找区域、反向查找区域和 DNS 记录的详细信息 - (主、辅助或存根) 创建正向查找区域,并配置正向查找区域属性 - 创建主机 (A 或 AAAA) 、CNAME 或 MX 类型的 DNS 记录 - 配置 DNS 记录属性 - (主要区域、辅助区域和存根) 创建 IPV4 和 IPV6 反向查找区域,配置反向查找区域属性 - 在反向查找区域下创建 PTR、CNAME 类型的 DNS 记录。 ## 事件 **事件** 允许你在计算机或服务器上管理事件日志。 ### 事件功能 “事件”中支持以下功能: - 浏览和搜索事件 - 查看事件详细信息 - 从日志中清除事件 - 从日志中导出事件 - 创建工作区(预览) - 保存工作区 (预览版) - 删除工作区 (预览版) - 查看堆积条形图格式的事件, (预览) ## 文件和文件共享 **文件和文件共享** 允许管理计算机或服务器上的文件和文件夹。 ### 文件和文件共享功能 文件和文件共享支持以下功能: - 浏览文件和文件夹 - 搜索文件或文件夹 - 创建新文件夹 - 删除文件或文件夹 - 下载文件或文件夹 - 上传文件或文件夹 - 重命名文件或文件夹 - 提取 zip 文件 - 复制和移动文件和文件夹 - 查看文件或文件夹属性 - 添加、编辑或删除文件共享 - 修改文件共享的用户和组权限 - 修改文件服务器安全性 ## 防火墙 **防火墙** 允许你在计算机或服务器上管理防火墙设置和规则。 ### 防火墙功能 防火墙支持以下功能: - 查看防火墙设置概述 - 查看传入防火墙规则 - 查看传出防火墙规则 - 搜索防火墙规则 - 查看防火墙规则详细信息 - 创建新防火墙规则 - 启用或禁用防火墙规则 - 删除防火墙规则 - 编辑防火墙规则的属性 ## 已安装的应用 **“已安装的应用** ”允许列出并卸载已安装的应用程序。 ## 本地用户和组 **使用本地用户和组** 可以管理计算机或服务器上本地存在的安全组和用户。 ### 本地用户和组功能 本地用户和组支持以下功能: - 查看和搜索用户和组 - 创建新用户或组 - 管理用户的组成员身份 - 删除用户或组 - 更改用户的密码 - 编辑用户或组的属性 ## 网络 **网络** 允许你在计算机或服务器上管理网络设备和设置。 ### 网络功能 网络支持以下功能: - 浏览和搜索现有网络适配器 - 查看网络适配器的详细信息 - 编辑网络适配器的属性 - 创建 [Azure 网络适配器 (预览版功能) ](https://blogs.technet.microsoft.com/networking/2018/09/05/azurenetworkadapter/) ## PowerShell **PowerShell** 允许通过 PowerShell 会话与计算机或服务器进行交互。 ### PowerShell 功能 PowerShell 支持以下功能: - 在服务器上创建交互式 PowerShell 会话 - 从服务器上的 PowerShell 会话断开连接 ## 进程 **进程** 允许管理计算机或服务器上的正在运行的进程。 ### 处理功能 进程支持以下功能: - 浏览并搜索正在运行的进程 - 查看进程详细信息 - 启动进程 - 结束进程 - 创建进程转储 - 查找进程句柄 ## 注册表 **注册表** 允许你在计算机或服务器上管理注册表项和值。 ### 注册表功能 注册表支持以下功能: - 浏览注册表项和值 - 添加或修改注册表值 - 删除注册表值 ## 远程桌面 **远程桌面** 允许通过交互式桌面会话与计算机或服务器进行交互。 ### 远程桌面功能 远程桌面支持以下功能: - 启动交互式远程桌面会话 - 断开与远程桌面会话的连接 - 将 Ctrl+Alt+Del 发送到远程桌面会话 ## 角色和功能 **角色和功能** 允许你在服务器上管理角色和功能。 ### 角色和功能功能 角色和功能支持以下功能: - 浏览服务器上的角色和功能列表 - 查看角色或功能详细信息 - 安装角色或功能 - 删除角色或功能 ## 计划任务 **计划任务** 允许管理计算机或服务器上的计划任务。 ### 计划任务功能 计划任务支持以下功能: - 浏览任务计划程序库 - 编辑计划的任务 - 启用“禁用 & 计划任务” - 启动 & 停止计划任务 - 创建计划的任务 ## 服务 **服务** 允许你在计算机或服务器上管理服务。 ### 服务功能 Services 支持以下功能: - 在服务器上浏览和搜索服务 - 查看服务的详细信息 - 启动服务 - 暂停服务 - 重启服务 - 编辑服务的属性 ## 设置 **设置**是管理计算机或服务器上的设置的中心位置。 ### 设置功能 - 查看和修改用户和系统环境变量 - 查看用于从 [Azure Monitor](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/azure/azure-monitor) 监视警报的配置 - 查看和修改电源配置 - 查看和修改远程桌面设置 - 查看和修改基于角色的访问控制设置 - 查看和修改 Hyper-V 主机设置(如果适用) ## 存储 **存储**允许管理计算机或服务器上的存储设备。 ### 存储功能 存储支持以下功能: - 浏览和搜索服务器上的现有磁盘 - 查看磁盘详细信息 - 创建卷 - 初始化磁盘 - 创建、附加和分离虚拟硬盘 (VHD) - 使磁盘脱机 - 设置卷的格式 - 重设卷大小 - 编辑卷属性 - 删除卷 - 安装配额管理 - 存储[->Create/Update 配额管理](https://docs.microsoft.com/zh-cn/windows-server/storage/fsrm/quota-management)文件服务器资源管理器配额 ## 存储迁移服务 **存储迁移服务**允许将服务器和文件共享迁移到 Azure 或 Windows Server 2019,而无需应用或用户更改任何内容。 [获取存储迁移服务的概述](https://docs.microsoft.com/zh-cn/windows-server/storage/storage-migration-service/overview) 备注 存储迁移服务需要Windows Server 2019。 ## 存储副本 使用**存储副本**管理服务器到服务器存储复制。 [详细了解存储副本](https://docs.microsoft.com/zh-cn/windows-server/storage/storage-replica/server-to-server-storage-replication) ## 系统见解 **系统Insights**在 Windows Server 中本机引入预测分析,从而帮助你深入了解服务器的运行情况。 [获取系统Insights概述](https://docs.microsoft.com/zh-cn/windows-server/manage/system-insights/overview) 备注 系统Insights需要Windows Server 2019。 ## 更新 **更新**允许你在计算机或服务器上管理 Microsoft 和/或Windows更新。 ### 更新功能 更新支持以下功能: - 查看可用的Windows或 Microsoft 更新 - 查看更新历史记录列表 - 安装更新 - 联机检查 Microsoft 更新中的更新 - 管理 [Azure 更新管理](https://docs.microsoft.com/zh-CN/azure/automation/update-management/overview) 集成 ## 虚拟机 请参阅[使用 Windows Admin Center 管理虚拟机](https://docs.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/use/manage-virtual-machines) ## 虚拟交换机 **虚拟交换机** 允许在计算机或服务器上管理 Hyper-V 虚拟交换机。 ### 功能 虚拟交换机支持以下功能: - 浏览和搜索服务器上的虚拟交换机 - 创建新的虚拟交换机 - 重命名虚拟交换机 - 删除现有虚拟交换机 - 编辑虚拟交换机的属性 # 金步国作品集 ## ## Apache - [《Apache 2.2 中文手册》](http://www.jinbuguo.com/apache/manual/index.html) ## Systemd - [《Systemd 中文手册》(v241)(RHEL8,Debian10)](http://www.jinbuguo.com/systemd/systemd.index.html) ## Linux 内核 - [Linux-4.4-x86\_64 内核配置选项简介](http://www.jinbuguo.com/kernel/longterm-linux-kernel-options.html) - [Linux 内核引导选项简介](http://www.jinbuguo.com/kernel/boot_parameters.html) - [Linux 设备文件简介](http://www.jinbuguo.com/kernel/device_files.html) - [\[八卦故事\]内核头文件传奇](http://www.jinbuguo.com/kernel/header_story.html) ## Linux 基础系统 - [《Linux 系统构建指南》(v6.2)](http://www.jinbuguo.com/lfs/lfs62/index.html) - [DIY 一个实用的 miniLAPP 服务器](http://www.jinbuguo.com/lfs/minilapp_x86.html) - [深入理解软件包的配置、编译与安装](http://www.jinbuguo.com/linux/understand_package_install.html) - [GCC 编译优化指南](http://www.jinbuguo.com/linux/optimize_guide.html) - [Sysklogd 系统日志记录器](http://www.jinbuguo.com/linux/sysklogd.html) - [简单、严谨、安全 —— Dcron 简介](http://www.jinbuguo.com/linux/dcron.html) - [Linux PAM 学习笔记](http://www.jinbuguo.com/linux/pam.html) - [Glibc Binutils GCC 安装指南](http://www.jinbuguo.com/linux/glibc_gcc_binutils.html) - [GRUB2配置文件"grub.cfg"详解(GRUB2实战手册)](http://www.jinbuguo.com/linux/grub.cfg.html) - [sysctl 中文手册](http://www.jinbuguo.com/man/sysctl.html) - [sysctl.conf 中文手册](http://www.jinbuguo.com/man/sysctl.conf.html) - [agetty 中文手册](http://www.jinbuguo.com/man/agetty.html) - [gendiff 中文手册](http://www.jinbuguo.com/man/gendiff.html) ## Linux 基础服务 - [vsftpd.conf 中文版](http://www.jinbuguo.com/vsftpd/vsftpd.conf.html) - [OpenSSL 安装与配置](http://www.jinbuguo.com/linux/openssl_install.html) - [OpenSSH 安装指南](http://www.jinbuguo.com/openssh/openssh_install.html) - [moduli 中文手册](http://www.jinbuguo.com/openssh/moduli.html) - [ssh-keygen 中文手册](http://www.jinbuguo.com/openssh/ssh-keygen.html) - [sshd\_config 中文手册](http://www.jinbuguo.com/openssh/sshd_config.html) - [sshd 中文手册](http://www.jinbuguo.com/openssh/sshd.html) - [sftp-server 中文手册](http://www.jinbuguo.com/openssh/sftp-server.html) ## Linux 软件包管理器 - [emerge 中文手册](http://www.jinbuguo.com/pkgmanager/gentoo/emerge.html) - [rpm 中文手册](http://www.jinbuguo.com/pkgmanager/redhat/rpm.html) - [rpmbuild 中文手册](http://www.jinbuguo.com/pkgmanager/redhat/rpmbuild.html) ## Linux 图形界面 - [fonts.conf 中文手册](http://www.jinbuguo.com/gui/fonts.conf.html) - [Linux字体美化实战(Fontconfig配置)](http://www.jinbuguo.com/gui/linux_fontconfig.html) ## PostgreSQL - [《PostgreSQL 8.2.3 中文文档》](http://www.jinbuguo.com/postgresql/manual/index.html) - [在原生 Windows 上安装和运行 PostgreSQL](http://www.jinbuguo.com/postgresql/postgresql_windows.html) - [phpPgAdmin 安装指南](http://www.jinbuguo.com/postgresql/phppgadmin/install.html) - [phpPgAdmin config.inc.php 中文版](http://www.jinbuguo.com/postgresql/phppgadmin/config.inc.php.html) - [phpPgAdmin 常见问题解答](http://www.jinbuguo.com/postgresql/phppgadmin/faq.html) ## 硬件规范 - [高级配置和电源接口(ACPI)简介](http://www.jinbuguo.com/hardware/acpi-introduction.html)\[陈浩\] ## 存储与文件系统 - [GPT 分区详解](http://www.jinbuguo.com/storage/gpt.html) - [三种 Linux RAID 简要说明](http://www.jinbuguo.com/storage/raid_types.html) - [SSD(固态硬盘)简介](http://www.jinbuguo.com/storage/ssd_intro.html) - [Linux 环境 SSD(固态硬盘)使用指南](http://www.jinbuguo.com/storage/ssd_usage.html) - [sfdisk 中文手册](http://www.jinbuguo.com/man/sfdisk.html) - [fstrim 中文手册](http://www.jinbuguo.com/man/fstrim.html) - [e2fsck 中文手册](http://www.jinbuguo.com/man/e2fsck.html) - [mount 中文手册](http://www.jinbuguo.com/man/mount.html) - [mount.cifs 中文手册](http://www.jinbuguo.com/man/mount.cifs.html) - [umount 中文手册](http://www.jinbuguo.com/man/umount.html) - [umount.cifs 中文手册](http://www.jinbuguo.com/man/umount.cifs.html) ## PHP与Web - [php.ini 中文版(PHP7,PHP8)](http://www.jinbuguo.com/php/php.ini.html) - [PHP-LDAP 学习笔记](http://www.jinbuguo.com/php/php-ldap.html) - [memcached 中文手册](http://www.jinbuguo.com/man/memcached.html) - [简明 CSS 2.1 参考手册](http://www.jinbuguo.com/w3c/css21.html) - [简明 XHTML 1.0 参考手册](http://www.jinbuguo.com/w3c/xhtml.html) ## Java - [HotSpot选项笔记](http://www.jinbuguo.com/java/hotspot_options.html) ## 算法 - [针对字符串排序进行改进的一种快速排序算法](http://www.jinbuguo.com/theory/str_qsort.html) # 安装Linux操作系统 由于操作系统安装镜像文件不同,安装步骤若稍有不同,请根据实际的安装界面提示进行操作。本小节以“Ubuntu 14.04”操作系统为例,指导用户在虚拟机上安装Linux操作系统。 #### 前提条件 已获取ISO镜像文件,假设为“Ubuntu-14.04-server.iso”。 #### 操作步骤 使用ISO文件为新创建的空虚拟机安装操作系统。
1. 在VirtualBox管理器中,选择新创建的虚拟机,单击“设置”弹出设置对话框。
**图1** 设置虚拟机 ![](https://support.huaweicloud.com/bestpractice-ims/zh-cn_image_0268393798.png)
2. 选择“存储 > 没有盘片”,在属性区域单击![](https://support.huaweicloud.com/bestpractice-ims/zh-cn_image_0268393752.png)图标,选择ISO镜像文件“Ubuntu-14.04-server.iso”。
**图2** 选择ISO文件挂载(挂载前) ![](https://support.huaweicloud.com/bestpractice-ims/zh-cn_image_0268393846.png)
**图3** 选择ISO文件挂载(挂载后) ![](https://support.huaweicloud.com/bestpractice-ims/zh-cn_image_0268394299.png)
3. 单击“OK”,确认挂载。 4. 在VirtualBox管理器中,选择新创建的虚拟机,单击“启动”。
**图4** 启动虚拟机 ![](https://support.huaweicloud.com/bestpractice-ims/zh-cn_image_0268337032.png)
5. 进入操作系统安装界面后,您可以根据具体的需求进行安装,本文不再赘述安装过程。
**图5** 安装OS ![](https://support.huaweicloud.com/bestpractice-ims/zh-cn_image_0268395369.png)
![](https://res-img3.huaweicloud.com/content/dam/cloudbu-site/archive/china/zh-cn/support/resource/framework/v3/images/support-doc-new-note.svg)说明:
安装OS时,推荐只使用一个分区,即根分区。 自定义根分区时,首先择标准分区Standard Partition方式,文件系统推荐使用ext3/ext4,指定root分区都要为主分区,分区表推荐采用MSDOS。
# 量化指标 性能参数 - 最佳并发用户数 - 最大并发用户数 - 最大 TCP连接数 - 最大 UDP连接数 - 每个 tcp连接占用内存 - 每个 socket 是一个文件描述符 - 每个socket占用内存在15~20k之间 - 磁盘 IOPS:每秒进行 I/O 读写次数 - 磁盘吞吐量:每秒读写 I/O 的流量,即磁盘写入加上读出的数据的大小 - IOPS 与吞吐量的关系:每秒 I/O 吞吐量= IOPS\* 平均 I/O SIZE。从公式可以看出: I/O SIZE 越大,IOPS 越高,那么每秒 I/O 的吞吐量就越高。因此,我们会认为 IOPS 和吞吐量的数值越高越好。实际上,对于一个磁盘来讲,这两个参数均有其最大值,而且这两个参数也存在着一定的关系。 #### 提升方法 - 增加内存 - 修改最大文件描述符个数 #### 衡量性能的指标 机械硬盘的连续读写性能很好,但随机读写性能很差,这主要是因为磁头移动到正确的磁道上需要时间,随机读写时,磁头需要不停的移动,时间都浪费在了磁头寻址上,所以性能不高。衡量磁盘的重要主要指标是IOPS和吞吐量。 1\. IOPS IOPS(Input/Output Per Second)即每秒的输入输出量(或读写次数),即指每秒内系统能处理的I/O请求数量。随机读写频繁的应用,如小文件存储等,关注随机读写性能,IOPS是关键衡量指标。可以推算出磁盘的IOPS = 1000ms / (Tseek + Trotation + Transfer),如果忽略数据传输时间,理论上可以计算出随机读写最大的IOPS。常见磁盘的随机读写最大IOPS为: - 7200rpm的磁盘 IOPS = 76 IOPS - 10000rpm的磁盘IOPS = 111 IOPS - 15000rpm的磁盘IOPS = 166 IOPS 2\. 吞吐量 吞吐量(Throughput),指单位时间内可以成功传输的数据数量。顺序读写频繁的应用,如视频点播,关注连续读写性能、数据吞吐量是关键衡量指标。它主要取决于磁盘阵列的架构,通道的大小以及磁盘的个数。不同的磁盘阵列存在不同的架构,但他们都有自己的内部带宽,一般情况下,内部带宽都设计足够充足,不会存在瓶颈。磁盘阵列与服务器之间的数据通道对吞吐量影响很大,比如一个2Gbps的光纤通道,其所能支撑的最大流量仅为250MB/s。最后,当前面的瓶颈都不再存在时,硬盘越多的情况下吞吐量越大。 # 开发微信小程序 # 用 Vue.js开发微信小程序——mpvue # ![Superscalar](https://openingsource.org/wp-content/uploads/2018/01/portrait_logo.png)
Superscalar
## 简单介绍 一个使用 [Vue.js](https://www.google.com/url?q=https://vuejs.org/&sa=D&ust=1520870059849000&usg=AFQjCNH0GnEWfAl78sVkK_ufY5SruWS0Zg) 开发小程序的前端框架。框架基于 Vue.js 核心,mpvue 修改了 Vue.js 的 runtime 和 compiler 实现,使其可以运行在小程序环境中,从而为小程序开发引入了整套 Vue.js 开发体验。该框架有以下优点: 1.彻底的组件化开发能力:提高代码复用性 2.完整的 Vue.js 开发体验 3.方便的 Vuex 数据管理方案:方便构建复杂应用 4.快捷的 webpack 构建机制:自定义构建策略、开发阶段 hotReload 5.支持使用 npm 外部依赖 6.使用 Vue.js 命令行工具 vue-cli 快速初始化项目 7.H5 代码转换编译成小程序目标代码的能力 ## 安装 首先,你需要已经安装微信开发者工具,链接: [https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html](https://www.google.com/url?q=https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html&sa=D&ust=1520870059850000&usg=AFQjCNHVwj4iqMWSjdJfH1Dg_VeBwrtPpA) 其次,你需要安装node.js: [https://nodejs.org/](https://www.google.com/url?q=https://nodejs.org/&sa=D&ust=1520870059851000&usg=AFQjCNHHNUr53elhKDkO0_ZR1n_HyNXTqA) 然后你应该能愉快的开始玩耍了 1.切换源
``` npm set registry https://registry.npm.taobao.org/ ```
2\. 全局安装vue-cli(vue 官方的一个命令行工具)
``` npm install --global vue-cli ```
3.创建新项目
``` vue init mpvue/mpvue-quickstart test ```
4.进入文件夹,安装依赖
``` cd testnpm installnpm run dev ```
成功的话,在test目录下应该能看见一个dist文件夹 当然,以上是快速搭建的方法,想要自行配置的同学请自行参考: [http://mpvue.com/build/#\_2](https://www.google.com/url?q=http://mpvue.com/build/%23_2&sa=D&ust=1520870059854000&usg=AFQjCNHbJv4thM_Nxki99JQkv5EIfqSEqg) ## 使用 打开你的 ![开源项目精选: 用Vue.js开发微信小程序——mpvue](https://openingsource.org/wp-content/uploads/2018/03/mpvue_usage_step_1.png) 然后进入 ![开源项目精选: 用Vue.js开发微信小程序——mpvue](https://openingsource.org/wp-content/uploads/2018/03/mpvue_usage_step_2.png) 目录请选择之前提到的那个dist文件夹 AppID影响能否真机调试 确定后,便能进入如下界面: ![开源项目精选: 用Vue.js开发微信小程序——mpvue](https://openingsource.org/wp-content/uploads/2018/03/mpvue_usage_step_3.png) 然后轻松愉快的用自己的方式打开src下的代码进行更改就ok了 mpvue是一个不错的框架,不论你是想玩一玩(例如我)还是进行开发都是不错的选择,vue的学习也不难,预测该项目下周还会在周榜上(笑) ## 你可能会用到的工具: mpvue-loader 提供 webpack 版本的加载器:[http://mpvue.com/build/mpvue-loader](https://www.google.com/url?q=http://mpvue.com/build/mpvue-loader&sa=D&ust=1520870059856000&usg=AFQjCNH2GB23ApyrUyWPSLMlEn1vpGIaFw) mpvue-webpack-target webpack 构建目标:[http://mpvue.com/build/mpvue-webpack-target](https://www.google.com/url?q=http://mpvue.com/build/mpvue-webpack-target&sa=D&ust=1520870059856000&usg=AFQjCNEjz_yYJWSZw7MU2F1VDv1s-o_iMQ) postcss-mpvue-wxss 样式代码转换预处理工具:[http://mpvue.com/build/postcss-mpvue-wxss](https://www.google.com/url?q=http://mpvue.com/build/postcss-mpvue-wxss&sa=D&ust=1520870059856000&usg=AFQjCNE-Yl5IGoFeervG4HRsV01MjJen_g) px2rpx-loader 样式转化插件:[http://mpvue.com/build/px2rpx-loader](https://www.google.com/url?q=http://mpvue.com/build/px2rpx-loader&sa=D&ust=1520870059857000&usg=AFQjCNF7zGjQIX-pLg9Z5h9VhaSm-RPZkg) mpvue-quickstart mpvue-quickstart:[http://mpvue.com/mpvue/quickstart](https://www.google.com/url?q=http://mpvue.com/mpvue/quickstart&sa=D&ust=1520870059857000&usg=AFQjCNE_1ciUvEitlYI_zcI5yNZ8xjuLcg) mpvue-simple 辅助 mpvue 快速开发 Page / Component 级小程序页面的工具[http://mpvue.com/mpvue/simple](https://www.google.com/url?q=http://mpvue.com/mpvue/simple&sa=D&ust=1520870059857000&usg=AFQjCNH38SmlLk9zmS-989Y8IaSqGaAuZA) ## 关于webpack 该项目还十分贴心的配了一张图: ![开源项目精选: 用Vue.js开发微信小程序——mpvue](https://openingsource.org/wp-content/uploads/2018/03/mpvue_webpack.png) 和webpack的文档链接:[https://doc.webpack-china.org/](https://www.google.com/url?q=https://doc.webpack-china.org/&sa=D&ust=1520870059858000&usg=AFQjCNEop7JcQGTZjpYQKWujgai3Yf6yFw) # 安装 WordPress # 如何在CentOS 7上安装WordPress ### 导言 WordPress是一个使用PHP和MySQL的免费开源网站和博客工具。WordPress是目前互联网上最受欢迎的CMS(内容管理系统),拥有超过20,000个插件来扩展其功能。这使得WordPress成为快速轻松地启动和运行网站的绝佳选择。 在本指南中,我们将演示如何在CentOS 7上使用Apache Web服务器设置WordPress实例。 ## 先决条件 在开始学习本指南之前,需要先完成几个步骤。 您需要安装CentOS 7服务器,并配置具有`sudo`特权的非root用户。如果您尚未这样做,您可以运行[CentOS 7初始服务器设置指南](http://book.321jr.com/books/0336d/page/centos-7 "使用CentOS 7进行初始服务器设置")中的步骤1-4来创建此帐户。 此外,您需要在CentOS 7服务器上安装LAMP(Linux、Apache、MySQL和PHP)堆栈。如果您尚未安装或配置这些组件,您可以使用本指南了解如何在[CentOS 7上安装LAMP。](http://book.321jr.com/books/0336d/page/lamplinuxapachemysqlphp "LAMP堆栈:Linux、Apache、MySQL、PHP") 完成这些步骤后,您可以继续安装WordPress。 ## 第一步——为WordPress创建MySQL数据库和用户 我们将采取的第一步是准备。WordPress使用关系数据库来管理网站及其用户的信息。我们已经安装了MariaDB(MySQL的一个分叉),它可以提供此功能,但我们需要为WordPress创建一个数据库和一个用户。 首先,请通过发出以下命令登录MySQL的`root`(行政)帐户: ``` mysql -u root -p ``` 安装MySQL时,系统将提示您输入为根帐户设置的密码。提交该密码后,您将获得MySQL命令提示。 首先,我们将创建一个WordPress可以控制的新数据库。你可以随心所欲地称呼这个,但在这个例子中,我会称之为`wordpress`。 ``` CREATE DATABASE wordpress; ``` **注意:**每个MySQL语句或命令都必须以分号(`;`)结尾,因此如果您遇到任何问题,请检查以确保存在分号。 接下来,我们将创建一个新的MySQL用户帐户,我们将专门用于在WordPress的新数据库上操作。创建单功能数据库和帐户是一个好主意,因为它可以更好地控制权限和其他安全需求。 我将给新帐户`wordpressuser`打电话,并为它分配`password`。您绝对应该使用不同的用户名和密码,因为这些示例不是很安全。 ``` CREATE USER wordpressuser@localhost IDENTIFIED BY 'password'; ``` 此时,您有一个专门为WordPress制作的数据库和用户帐户。然而,用户无法访问数据库。我们需要通过授予用户对数据库的访问权限将这两个组件链接在一起。 ``` GRANT ALL PRIVILEGES ON wordpress.* TO wordpressuser@localhost IDENTIFIED BY 'password'; ``` 既然用户可以访问数据库,我们需要刷新特权,以便MySQL了解我们最近所做的特权更改: ``` FLUSH PRIVILEGES; ``` 一旦这些命令都执行完毕,我们可以通过键入:退出MySQL命令提示符: ``` exit ``` 您现在应该回到常规的SSH命令提示符。 ## 第二步——安装WordPress 在我们下载WordPress之前,我们需要安装一个PHP模块,以确保它正常工作。没有这个模块,WordPress将无法调整图像大小以创建缩略图。我们可以使用`yum`直接从CentOS的默认存储库获取该软件包: ``` sudo yum install php-gd ``` 现在我们需要重新启动Apache,以便它识别新模块: ``` sudo service httpd restart ``` 我们现在准备从项目网站上下载并安装WordPress。幸运的是,WordPress团队总是将他们软件的最新稳定版本链接到同一个URL,因此我们可以通过键入以下内容来获得最新版本的WordPress: ``` cd ~ wget http://wordpress.org/latest.tar.gz ``` 这将下载一个压缩的存档文件,其中包含我们需要的所有WordPress文件。我们可以提取存档文件,以使用`tar`重建WordPress目录: ``` tar xzvf latest.tar.gz ``` 您现在的个人目录中将有一个名为`wordpress`的目录。我们可以通过将未打包的文件传输到Apache的文档根目录来完成安装,在那里它可以提供给我们网站的访问者。我们可以使用`rsync`将WordPress文件传输到那里,这将保留文件的默认权限: ``` sudo rsync -avP ~/wordpress/ /var/www/html/ ``` `rysnc`将安全地将您解封的目录中的所有内容复制到文档根目录at`/var/www/html/`。然而,我们仍然需要为WordPress添加一个文件夹来存储上传的文件。我们可以通过`mkdir`命令做到这一点: ``` mkdir /var/www/html/wp-content/uploads ``` 现在,我们需要为我们的WordPress文件和文件夹分配正确的所有权和权限。这将提高安全性,同时仍然允许WordPress按预期运行。为此,我们将使用`chown`将所有权授予Apache的用户和组: ``` sudo chown -R apache:apache /var/www/html/* ``` 通过此更改,Web服务器将能够创建和修改WordPress文件,并允许我们将内容上传到服务器。 ## 第三步——配置WordPress 使用WordPress所需的大多数配置稍后将通过Web界面完成。然而,我们需要从命令行做一些工作,以确保WordPress可以连接到我们为其创建的MySQL数据库。 首先进入安装WordPress的Apache根目录: ``` cd /var/www/html ``` WordPress依赖的主要配置文件称为`wp-config.php`。默认情况下,包含一个与我们需要的设置基本匹配的示例配置文件。我们所要做的就是将其复制到默认配置文件位置,以便WordPress可以识别和使用该文件: ``` cp wp-config-sample.php wp-config.php ``` 现在我们有一个配置文件可以处理,让我们在文本编辑器中打开它: ``` nano wp-config.php ``` 我们需要对该文件进行的唯一修改是对保存我们数据库信息的参数进行修改。我们需要找到标题为`MySQL settings`的部分,并更改`DB_NAME`、`DB_USER`和`DB_PASSWORD`变量,以便WordPress正确连接到和验证我们创建的数据库。 用您创建的数据库的信息填充这些参数的值。应该如下所示: ``` // ** MySQL settings - You can get this info from your web host ** // /** The name of the database for WordPress */ define('DB_NAME', 'wordpress'); /** MySQL database username */ define('DB_USER', 'wordpressuser'); /** MySQL database password */ define('DB_PASSWORD', 'password'); ``` 这些是您需要更改的唯一值,因此请在完成后保存和关闭文件。 ## 第四步——通过Web界面完成安装 现在您的文件已经就位,软件也已配置,您可以通过Web界面完成WordPress安装。在网页浏览器中,导航到服务器的域名或公共IP地址: ``` http://server_domain_name_or_IP ``` 首先,您需要选择要使用WordPress安装的语言。选择语言并单击“**继续”**后,您将看到WordPress初始配置页面,您将在那里创建一个初始管理员帐户: ![WordPress网页安装](https://assets.digitalocean.com/articles/wordpress_centos7/wordpress_web_install.png) 填写您想要制作的网站和管理帐户的信息。完成后,单击底部的“**安装WordPress**”按钮以继续。 WordPress将确认安装,然后要求您使用您刚刚创建的帐户登录: ![WordPress成功](https://assets.digitalocean.com/articles/wordpress_centos7/wordpress_success.png) 要继续,请点击底部的“**登录**”按钮,然后填写您的管理员帐户信息: ![WordPress登录](https://assets.digitalocean.com/articles/wordpress_centos7/wordpress_login.png) 点击**登录**后,您将看到新的WordPress仪表板: ![WordPress仪表板](https://assets.digitalocean.com/articles/wordpress_centos7/wordpress_dashboard.png) ## 结论 您现在应该有一个WordPress实例在CentOS 7服务器上启动并运行。你可以从这里走很多路。我们在下面列出了一些常见的选项: - [使用多站点设置多个WordPress网站](http://book.321jr.com/books/0336d/page/wordpress-7as "如何使用多站点设置多个WordPress网站") # 从BFS到ZFS:文件系统的过去、现在和未来
## 什么是文件系统? 简而言之,文件系统是计算机操作系统用于存储、编目和检索文件的明确定义的方法。文件是我们使用计算机进行的一切的核心:所有应用程序、图像、电影和文档都是文件,它们都需要存储在某个地方。对于大多数计算机来说,这个地方是硬盘驱动器,但文件可以存在于各种媒体上:闪存驱动器、CD和DVD光盘,甚至磁带备份系统。 文件系统不仅需要跟踪构成文件本身的位以及它们在逻辑上放置在硬盘驱动器上的位置,还需要存储有关文件的信息。它必须存储的最重要的东西是文件的名称。没有这个名字,人类几乎不可能再次找到文件。此外,文件系统必须知道如何在层次结构中组织文件,这同样是为了那些讨厌的人的利益。这个层次结构通常被称为目录。文件系统最不担心的是元数据。 ### 元数据 元数据的字面意思是“关于数据的数据”,这正是它。虽然元数据听起来可能相对较新和现代,但所有文件系统从一开始就必须至少存储*一些*元数据以及文件和文件名。其中一个重要的元数据是文件的修改日期——对计算机来说并不总是必要的,但对这些人类来说也很重要,这样他们才能确保他们正在处理最新版本的文件。对人们来说不重要但对计算机至关重要的一点元数据是存储设备上文件的确切物理位置(或多个位置)。 元数据的其他示例包括操作系统用来决定如何显示文件以及谁可以修改文件的属性,例如隐藏或只读。多用户操作系统将文件权限存储为元数据。现代文件系统绝对会对元数据着迷,添加了各种可以为特定类型的文件量身定制的疯狂属性:音乐文件的艺术家和相册名称,或照片的标签,使它们更容易以后排序。 ### 高级文件系统功能 随着操作系统的成熟,他们的文件系统增加了越来越多的功能。更多的元数据选项就是这样一个改进,但还有其他改进,例如为文件编制索引以加快搜索的能力,减少文件碎片的新存储设计,以及更强大的纠错能力。文件系统的最大进步之一是增加了*日志记录*,记录了计算机即将对每个文件所做的更改。这意味着,如果计算机在文件操作中途崩溃或停电,它将能够检查日志,并在不损坏文件的情况下快速完成或放弃操作。这使得重新启动计算机的速度要快得多,因为操作系统不需要扫描整个文件系统来发现是否有任何不同步的东西。 ## 侏罗纪文件系统
![带Dectape的DEC PDP 11](https://cdn.arstechnica.net/wp-content/uploads/archive/journals/microsoft.media/dectape.jpg) 带DECTape的DEC PDP-11微型计算机
在计算机的早期,当恐龙自由漫游,IBM像巨像一样站在地球上空时,文件系统诞生了。当时,他们很少有名字,因为他们只是被认为是运行计算机的操作系统的一部分,在那些日子里,操作系统本身相当新颖和花哨。首批命名的文件系统之一是DECTape,它以制造它的公司(数字设备公司)和存储文件的物理系统(那些巨大的旋转卷轴到卷轴磁带录音机,你经常在20世纪60年代的电影中看到)命名。这些磁带就像非常慢的磁盘驱动器,如果你足够绝望,你甚至可以在上面运行整个操作系统。 DECTape在DEC流行的早期微型计算机PDP-8上存储了每盘惊人的184千字节(千字节,不是兆字节)的数据。它之所以被称为微型计算机,只是因为虽然它有冰箱那么大,但仍然比占据整个房间的IBM庞然大主机小。当然,晶体管和集成电路(或硅芯片)的发明允许另一轮小型化。当世界其他地区移动*微型*计算机或我们大多数人称之为计算机时,DEC慢慢灭绝。(IBM奇迹般地活了下来,但没人完全确定如何生存下来。) ### CP/M
![带Dectape的DEC PDP 11](https://cdn.arstechnica.net/wp-content/uploads/archive/journals/microsoft.media/garykildall.jpg) Gary Kildall在他的电脑前工作
加里·基尔德尔在1973年发明了CP/M,因为他很懒。他的工作是为一些大型恐龙电脑编程,但他不想每天开车上班。因此,他写了一个名为“微机控制程序”的程序,该程序允许他在家里的小电脑上存储文件并从8英寸的舒加特软盘驱动器运行程序。 CP/M有一个文件系统,但它没有名称。如果它被称为任何东西,那就是“CP/M文件系统”。这很简单,主要是因为加里的需求很简单。它将文件存储在一个完全平坦的层次结构中,没有目录。文件名限制为八个字符,外加一个决定文件类型的三个字符的“扩展”。这是完全明智的,因为它与基尔德尔正在使用的大型计算机完全相同的限制。 Gary Kildall和他为销售CP/M而成立的公司,星际数字研究,很快就变得非常富有。事实证明,许多微型计算机公司都需要一个操作系统,Gary的设计方式将所有计算机专用位(称为BIOS)与操作系统的其他部分分开。Kildall也出于懒惰而这样做,因为他不想继续为每台新计算机重写整个CP/M。这个故事的寓意是,懒惰有时可能是一件非常聪明的事情。 对基尔代尔来说,不幸的是,其他人很快就有了同样的想法。一位名叫Tim Patterson的程序员编写了自己的操作系统,名为“QDOS”(用于快速和肮脏的操作系统),这是CP/M所做的一切的快速和肮脏的克隆,因为他需要在一台花哨的新16位计算机上运行操作系统,而Gary还没有费心编写16位版本的CP/M。(这就是懒惰可以对你不利的地方!)QDOS的文件系统与CP/M略有不同,尽管它基本上做了同样的事情,也没有目录。Patterson的文件系统基于1977年微软名为Microsoft Disk Basic的程序,该程序基本上是Basic的一个版本,可以将其文件写入软盘。它使用一种名为文件分配表的组织方法,因此文件系统本身被赋予了FAT令人难以置信的富有想象力的名称。 然后,比尔·盖茨以更壮观的方式应用了懒惰理论,以5万美元的价格购买了蒂姆·帕特森的QDOS锁、股票和桶,并将其更名为MS-DOS。他现在能够将其出售给IBM和每家公司克隆IBM,可怜的Gary发现自己很快就被护送出个人计算阶段。从现在开始,世界将不得不处理所有血腥的脂肪。我说的是血腥吗?我的意思是荣耀。 鉴于它最初是20世纪70年代为8位微型计算机设计的文件系统的快速肮脏的克隆,而文件系统本身就是一个模仿十年前微型计算机的快速肮脏的黑客,FAT并没有真正达到很大作用。它保留了CP/M的“8和3”文件名限制,以及它围绕当天主要存储设备软盘驱动器的物理结构设计的存储方式。 文件分配表描述了磁盘的哪些区域分配给了文件,哪些是可用空间,哪些是损坏和无法使用(称为“坏扇区”)。由于每个软盘的空间很小(IBM PC中的第一批单面磁盘只能存储160千字节),因此表本身需要非常小。为了保持其小,磁盘被划分为*集群*——磁盘上相邻存储的扇区组。FAT的第一个版本被称为FAT-12,因为它使用12位数来计算集群(12的功率为4096,每个集群为8KB,因此最大音量大小为32MB)。
![5.25英寸软盘的大量存储](https://cdn.arstechnica.net/wp-content/uploads/archive/journals/microsoft.media/floppy425.jpg) 原始的IBM PC 5.25英寸软盘,带有叠加轨道/扇区
FAT对目录或优化文件存储一无所知,只是将所有文件片段扔到了磁盘的第一部分,在那里它找到了任何空间。对于软盘来说,这并不重要,因为无论如何,您通常只在上面存储几个文件。然而,IBM正准备发布带有可选20MB硬盘的PC-XT。这个(在当时)巨大的空间意味着FAT需要一种将文件存储在适当的层次结构中的方法。对于MS-DOS 2.0,微软添加了嵌套目录,并标记为反斜杠()作为分隔符,因此文件可能会存储在C:MYFILESNOTES中。为什么像上帝(和Unix)打算的那样是反斜杠,而不是向前斜杠?好吧,一些MS-DOS 1.0程序已经将正斜杠用作修饰参数(例如,格式A:/S在格式化后添加系统文件),现在更改它太难了。为什么C:?好吧,A:和B:是为硬盘成为标准之前每个人都必须拥有的第一和第二软盘驱动器保留的。 ### 过时 硬盘的引入很快就使FAT-12过时,因此微软在1987年发布的DOS 3.31中提出了16位版本。它有32KB集群,可以访问其中216个,最大磁盘大小惊人2GB。 存储优化的问题呢?使用硬盘驱动器,用户总是复制和删除文件,这留下了新文件塞进的漏洞(因为FAT刚刚寻找第一个可以存储东西的空间),这导致了*碎片化*的真正问题。这使得硬盘驱动器比以往任何时候都更加努力地工作,随意跳来跳去,试图找到散落在驱动器上的文件的所有位。微软用FAT解决这个问题了吗?一点也不。他们让其他公司制作Norton Utilities和PC-Tools等程序,一次性对整个磁盘进行碎片整理,让用户永远记住快乐的夜晚,坐着看着屏幕移动小矩形。 到1995年,硬盘越来越大于2GB的限制,8.3文件名限制似乎比20年前更过时。为了解决这两个问题,微软推出了FAT-32,具有8TB(TB)限制和名为VFAT的特殊魔法能力,使FAT能够在没有真正拥有长文件名的情况下拥有长文件名。 VFAT采用了一个长文件名(最多255个字符),并创建了一个适合8.3紧身衣的简短版本。例如,“超长文件名.txt”将存储为“SUPER-~1”。TXT。剩下的字母被扔进了一种非常奇怪的不存在,就像生活在星体平面上一样。它们被切成13个字母的块,并存储为幻影目录,这些目录标有卷标签、系统、隐藏*和*只读的元数据属性,这种组合使旧版本的MS-DOS如此混乱,以至于它们完全忽略了它们。但是,如果从DOS中删除了一个长文件名,它会认为充满卷标签条目的关联幻影目录是空的,并删除了它。甚至添加了更奇怪的技巧来检查长文件名是否与8.3文件名匹配。 由于VFAT摇摇欲坠的第三方实现,其中一些技巧今天仍然困扰着我们。例如,在撰写本文时,我有一种有趣的体验,在将文件传输到我的iBook时,看着USB闪存驱动器上的目录自发地从“Williams文件”更改为“WILLIA~1”。 那么,微软是否也解决了这个版本中FAT的可怕碎片化问题?答案是:没有那么多。但它至少包括一个与Windows 95一起自制的碎片整理程序。多亏了多任务处理的力量,你甚至可以在碎片整理时做其他事情!除了你不能,因为它会抱怨“文件变了”,然后重新开始。 这个奇怪的VFAT解决方案是一个可怕的黑客,但它确实允许将DOS和Windows 3.1系统无缝升级到Windows 95和长文件名,同时仍然允许贫穷的DOS用户访问这些文件。它还导致Macintosh用户大笑,并开出没有人理解的“MICROS~1”笑话。然而,他们可能不应该笑,因为Macintosh文件系统有更奇怪的限制。 ## 你好,HFS! 大多数人用一种浪漫的阴霾来记住1984年的麦金塔,忘记了原始单元的巨大局限性。当PC用户开始习惯硬盘时,Mac附带了一个软盘驱动器。最初的文件系统被称为Macintosh文件系统(MFS),限制为20MB和4,096个文件。它都有目录,也没有。用户可以创建图形“文件夹”并将文件拖入其中,但它们不会显示在应用程序的打开/保存对话框中。相反,所有文件和目录信息都存储在单个“空文件夹”中,如果以任何方式修改,该文件夹将消失,仅被一个新的“空文件夹”取代。这在软盘上效果很好,但确实减缓了硬盘驱动器的性能。文件名可以是63个字符。
![1984年麦金塔](https://cdn.arstechnica.net/wp-content/uploads/archive/articles/culture/total-share.media/mac128.jpg) 原始的128K Macintosh,显示为可选的第二个软盘驱动器
1985年,MFS被一个具有适当层次目录的系统所取代。因此,它被称为分层文件系统或HFS。出于某种原因,文件名现在限制在31个字符,这足够短,很烦人。文件、目录和可用空间信息存储在B-Tree中,这是一种二进制存储结构,允许快速排序和检索信息。HFS使用512KB集群和16位指针,因此驱动器的最大尺寸为32GB。后来的版本将指针增加到32位,因此可以同时访问2TB。 MFS和HFS引入了一种处理文件的创新方法,称为“叉子”。HFS没有将元数据存储在单独的地方(例如存储的地方目录),而是将每个文件分为两个文件:文件本身(“数据分叉”)和包含结构化数据的隐形“资源分叉”,包括有关文件的信息,例如其图标。然而,资源分叉用于的远不止元数据——例如,它们在pre-PowerPC mac中保存了应用程序界面和可执行代码的详细信息。就像叉子上的叉子一样,数据和资源一直一起传播,直到文件被发送到另一种不知道叉子的计算机。幸运的是,当时电脑非常势利,从未交谈过,所以这很少成为问题。 HFS没有使用微小的三字母文件扩展名来确定文件类型,而是使用一个巨大的*四*字母“类型代码”和另一个创建者代码,这些代码存储在文件系统的元数据中,被视为文件创建日期等信息的对等。 HFS没有乱搞斜杠或反斜杠来分离目录名称。相反,它使用冒号(:),然后确保人类永远不会在系统的任何地方看到这个字母,直到他们试图在文件名中包含一个。 开玩笑的,HFS是历史上第一个专门为适应当时新的图形用户界面需求而设计文件系统的例子。Macintosh GUI 设计的整个理念是向用户隐藏不重要的细节。这种“以人为本”的设计旨在帮助人们更专注于他们的工作,而不是文件系统的技术细节。 当然,没有什么是完美的,所有试图抽象讨厌的技术片段的系统偶尔都会与Joel Spolsky所谓的[泄漏抽象定律](http://www.joelonsoftware.com/articles/LeakyAbstractions.html)相冲突。当某些东西坏了,例如当文件发送到另一台计算机并返回Macintosh时丢失资源分叉时,并不总是清楚该怎么做才能解决问题。 HFS还有其他一些技术限制,偶尔可能会泄露出去。文件和目录的所有记录都存储在一个名为*目录文件*的单个位置,只有一个程序可以同时访问此文件。这种方法有一些好处,比如非常快的文件搜索。第一个Macintoshes没有多任务处理,所以这不是一个问题,但当后来添加多任务处理时,它导致某些程序“堵塞系统”的问题。文件也可能损坏,这可能会使整个文件系统无法使用。其他文件系统将文件和目录信息存储在不同的地方,因此即使一个目录损坏,系统的其余部分仍然可以访问。 与迄今为止涵盖的其他文件系统一样,集群的数量(称为“块”)被固定为16位数,因此单个分区上只能有65,535个块,无论大小。由于HFS(像大多数文件系统一样)只能将文件存储在单个块中,因此更大的块大小意味着浪费大量空间:即使是一个小的1KB文件也会在1GB驱动器上占用满16K。对于8GB驱动器来说,问题恶化了8倍,以此类推。 最后一个问题由苹果于1998年与HFS+修复,HFS+与Mac OS 8.1的发布捆绑在一起。HFS+使用32位数字进行编号块,还允许255个字符的文件名,尽管“经典”Mac OS(9.2.2及更低版本)仅支持32个字符的文件名。奇怪的是,Mac版Microsoft Office直到2004年才支持超过32个字符的名称。 ## Amiga文件系统 [Amiga](http://arstechnica.com/articles/culture/amiga-history-4-commodore-years.ars/2)在Macintosh发布一年后发布,具有先进的多媒体功能,这些功能似乎来自未来的十年。然而,由于将原始AmigaOS推出门的时间压力很大,文件系统是其最薄弱的部分之一。它来自TripOS,这是一个由MetaComCo开发的操作系统。它使用512KB块,但为元数据保留了每个块的24KB。Amiga工程师将文件系统称为OFS为“旧文件系统”,他们尽可能快地更换了它。
![Amiga 1000](https://cdn.arstechnica.net/wp-content/uploads/archive/journals/microsoft.media/amiga1000.jpg) Amiga 1000
FFS或Fast File System于1987年与Amiga 500、2000和AmigaOS 1.3一起发布。主要区别在于元数据从每个块移动到一个单独的空间。与HFS一样,它仅限于32个字符的文件名。 为了支持OFS和FFS,Amiga操作系统进行了重新设计,以便它可以接受插件格式的多个文件系统,并记录了这种格式,以便任何人可以根据需要编写自己的文件系统。许多人这样做了,一些结果,如专业文件系统(PFS)和智能文件系统(SFS),至今仍被Amiga粉丝使用。PowerPC Amigas的[Amiga OS4](http://arstechnica.com/reviews/os/amigaos4.ars)操作系统也支持FFS2,由于原始实现代码不便携,其内部工作和数据结构的文档很难获得,因此很难进行重大重写。FFS2增加了支持105个字符的文件名的功能。 ## Unix和Linux文件系统 ### UFS(FFS) Unix在MULTICS上以双关语开始其生活,MULTICS是一个非常严重的多用户分时系统,不喜欢被取笑,但后来又将其严肃的竞争对手留在了历史的垃圾箱中。Unix几乎完全主导了科学工作站和服务器的市场,然后被一个名为Linux的同类克隆巧妙地取代,该克隆最初是Unix上的双关语。这个故事的寓意?双关语可以是强大的东西。 在此过程中,Unix为用户如何存储文件设置了各种标准。当加州大学伯克利分校的研究人员开发了原始Unix文件系统的大幅改进版本时,Unix文件系统(UFS),也被称为伯克利快速文件系统,成为标准。 Unix起源于黑客文化,而不是商业部门,其文件系统反映了这些根源。首先,该系统*区分大小写*,这意味着README.TXT是一个与readme.txt完全不同的文件,后者也与Readme.Txt不同。大多数其他文件系统都保留文件名的情况,但不在乎用户如何访问它。这种相当神秘和以计算机为中心的文件名视图一直保存到今天,因为现在更改它会破坏依赖它的软件。有时,这两个世界可能会发生剧烈碰撞:当服务器要求some\_file.htm时,将网站从Windows服务器移动到Linux,有时会导致链接损坏,而最后一个编辑它的人将其保存为Some\_File.htm。 除了对案件挑剔外,文件系统还以其他方式暴露了其黑客根源。UFS用于定位磁盘上文件的指针称为*inodes*,与其他操作系统不同,Unix非常乐意向最终用户显示此inode数据。UFS一开始没有写日记,因此崩溃或停电可能会导致损坏的inode和丢失文件。解决方案是运行一个名为*fsck*(用于文件系统检查)的实用程序,并观看操作系统告诉您其所有肮脏的inode秘密。 与其他文件系统一样,数据存储在称为块的独立组件中。随着磁盘变大,标准块大小不断增加,但最终标准化为8KB。由于如此大的块大小会浪费大量磁盘空间,BSD实现了一种名为*块子分配*的聪明算法,其中来自多个文件的部分填充块可以存储在单个块中。 UFS还试图通过将文件和元数据存储在称为*圆柱体的*组中,以最小化硬盘驱动器头*的*过度移动,并试图将所有文件从相邻的圆柱体中的单个目录中保存。 许多Unix供应商实现了自己的UFS版本,通常使它们与其他Unices不兼容。Sun在Solaris 7的版本中添加了日记,NeXT为NeXTstep创建了自己的UFS版本。 ### 分机2 ext2受到UFS设计的“启发”,本质上是UFS的类似工作克隆,就像Linux是Unix的类似工作克隆一样。这允许轻松移植许多Unix实用程序,如*fsck*,如果你说得足够快,这听起来有点像亵渎。与UFS一样,ext2缺乏日志记录,但它也避免了UFS为了运行得更快而进行的其他一些安全检查。因此,有时有必要一遍又一遍地说“fsck”。 Linux始于1991年,是一个业余爱好项目,以取代Andrew Tanenbaum的教学OS Minix,最初克隆了Minix文件系统,但它仅限于64MB,并很快被ext2取代。ext2于1993年开发,以解决原始分机的一些限制,此后存活了多年。ext2具有与UFS相同的“缸”系统,但称它们为*块组*。 ### ReiserFS 由于ext2缺乏日志记录,Linux是基于开源精神和任何人的贡献,因此有很多人想构建更好的Linux文件系统。一个真正成功的人是Hans Reiser,他适度地将他的作品命名为ResierFS。 ReiserFS不仅添加了日志记录,还试图改进ext2的许多其他方面。B-Tree索引和高级块子分配例程显著加快了文件系统,特别是在处理1KB级的小文件时。 ReiserFS获得了SuSE等Linux发行版的大量赞誉,甚至获得了主要行业支持,直到车轮因主要非技术原因而开始脱落。 首先,Hans Reiser决定不再支持或更新ReiserFS,更愿意研究其继任者,称为Reiser4。新版本运行良好,但它不是ReiserFS的干净更新,需要用户重新格式化。关于Reiser4的可靠性和稳定性存在一些问题,但这些问题本可以及时解决。 真正让社区陷入循环的是没有人能预见到的东西。2006年,Hans Reiser的妻子Nina被宣布失踪。在汉斯汽车的睡袋上发现了与她的DNA轮廓相匹配的血液。汉斯[不认罪](http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2006/11/28/BAGERMLCGJ38.DTL),他的刑事审判目前正在进行中。 ### 分机3 ReiserFS的受欢迎程度已经开始下降,在对ReiserFS未来的困惑中,许多仍在使用它的人切换到更安全的ext3,这基本上是ext2,并增加了日志支持。虽然不太可能赢得任何速度德比,但ext3保留了其前身久经考验的可靠性遗产。 ### JFS JFS是IBM进入Unix文件系统游戏的条目,并在UFS中添加了日志记录。这是IBM独特的Unix版本AIX使用的旧专有系统的开源再实现。JFS使用B-Trees来加快文件访问速度,并引入了*范围*的概念,即128字节的inodes块。这防止了文件系统不得不像ext2和ext3那样为inodes专用固定空间。 ### XFS XFS来自Silicon Graphics版本的Unix,称为Irix。XFS于1994年首次与Irix 5.3一起推出,针对速度和可靠性进行了优化,赢得了许多速度比较测试。这是一个64位文件系统,最大音量大小为8兆字节。它使用范围,并具有许多高级功能,例如针对多线程进行优化——多个线程可以同时在同一文件系统上运行。 2000年,SGI在GNU公共许可证下发布了XFS源代码,在接下来的几年里,许多Linux发行版增加了对该文件系统的支持。 ## IBM和微软决斗 ### OS/2和HPFS 今天大多数孩子都不会记得了,但IBM曾经短暂地玩弄过直接与微软竞争个人计算机操作系统主导地位的想法。更不寻常的是,这次竞争最初是一种伙伴关系。
![OS/2翘曲](https://cdn.arstechnica.net/wp-content/uploads/archive/journals/microsoft.media/os2logo.gif) IBM的OS/2翘曲(3.0版)
即使是拥有10,000层管理层和比苏联更多官僚机构的IBM,也意识到国防部迫切需要更换。IBM决定设计一个继任者——名为OS/2——然后将完全拥有,但微软将完成所有实际写作工作。Steve Ballmer在以上下跳跃和扔椅子而闻名之前,曾描述过当时计算机行业如何看待IBM。他们是熊,你可以骑熊,也可以在熊下面!因此,微软同意了这个疯狂的计划。 OS/2将是一个多任务操作系统,其花哨的GUI稍后将安装。它花了很长时间才到达,运行DOS应用程序时遇到困难,并且需要比大多数计算机用户一生中负担得起的更多的RAM,所以它和New Coke一样。对于1987年发布的1.2版本,IBM想要一个新的文件系统来取代糟糕的FAT。因此,HPFS诞生于高性能文件系统,由微软员工Gordon Letwin领导的一个小团队编写。 HPFS使用B-Trees,支持255个字符的文件名,并使用范围。根目录存储在磁盘中间而不是开头,以加快平均访问时间。它不支持日记,但它确实支持分叉,并具有广泛的元数据能力。这些新的元数据被称为*扩展属性*,甚至可以通过将自己保存在名为EA\_DATA.SF的文件中存储在FAT分区上。HFS+也支持扩展属性,但直到Mac OS X 10.4才在Apple OS中公开。 就在Windows 3准备发布时,微软和IBM经历了一场相当混乱的离婚。(IBM也想拥有它,而微软*真的*不想要它。)在版本3取得成功后,微软重新将精力集中在Windows上,而IBM保留了其拥有的代码,并添加了一堆额外的用户界面代码,这些代码来自与苹果和NeXT的各种联系。因此,OS/2 2.0和面向对象的Workplace Shell诞生了,在Windows 95到达并将其压入地下之前,它在阳光下度过了短暂的一天(甚至奇怪地在嘉年华碗上做了广告)。IBM后来将JFS移植到OS/2,这让仍在使用它的三个人非常高兴。 ## NTFS
![Windows NT 3.1安装CD。](https://cdn.arstechnica.net/wp-content/uploads/archive/journals/microsoft.media/winnt.jpg) Windows NT 3.1安装CD。注意支持的平台!
微软也知道DOS需要更换,但对其在IBM的体验感到酸痛。在比尔·盖茨第二次壮观地应用懒惰理论时,他聘请了DEC坚如磐石的VMS操作系统的建筑师Dave Cutler,就在DEC陷入螺旋式下降时,它永远不会从中恢复。 Dave Cutler带着他的团队,尽管垂死的DEC提起诉讼,但他还是实施了全新的操作系统的洁净室实施。随着一个全新的操作系统,出现了一个全新的文件系统,该系统最初没有名称,但后来在操作系统本身被命名为Windows NT时被称为NTFS。NT是一个代表新技术的营销名称,但WNT是VMS,每个字母都被下一个字母取代,这仍然是一个有趣的巧合。 NTFS是一个全面、球到墙的实现,在文件系统中,Cutler的团队可以想到的所有最佳想法。这是一个64位文件系统,最大文件和卷大小为264(16兆字节),将所有文件名存储在Unicode中,以便支持任何语言。甚至文件日期属性也被拉伸到荒谬的极限:文艺复兴时期的时间旅行者最早可以在公元1601年愉快地设置他们的文件日期,并且支持到公元60056年的日期,尽管如果到那时人类仍在使用NTFS,这将表明我们的文明存在严重问题。它首次向公众公布了Windows NT的第一个版本(出于不正当的营销原因称为3.1版本)。 NTFS使用B+Trees(HFS+也支持的增强和更快的B-Trees版本),从第一天起就支持日志记录,具有内置的透明压缩能力,并通过使用访问控制列表具有极其细粒度的安全设置(ACL与NT 3.5一起添加,于1994年发布)。它的设计是为了让微软可以添加额外的元数据支持,直到奶牛回家。事实上,NTFS对元数据的支持是如此广泛,以至于有时微软的操作系统团队需要一段时间才能赶上已经存在的功能。 例如,自Windows 2000发布以来,NTFS对文件和元数据进行了超快的索引搜索,但直到2005年,微软才发布了支持此功能的图形界面,直到2006年Windows Vista才成为操作系统本身的一部分。嘿,有时事情会被遗忘。有人想重新设计[添加新字体](http://bink.nu/photos/news_article_images/category1022/picture13552.aspx)对话框吗? 在后来版本的Windows NT中,NTFS中添加了其他功能。与Windows 2000一起发布的3.0版本添加了上述索引元数据搜索,以及加密和磁盘配额,以便学生无法再用盗版MP3填充文件服务器。 NTFS将其所有元数据信息存储在单独的文件中,通过以$字符开头的文件名,从操作系统的常规操作中隐藏起来。通过将所有内容存储为文件,NTFS允许文件系统结构动态增长。文件系统还通过尝试将文件存储在有足够的连续空间的地方来抵抗碎片化,而不仅仅是在驱动器上的第一个可用空间中。 为了方便从基于FAT的操作系统过渡到NTFS操作系统,微软为Windows 98及更早版本的用户提供了一个方便的工具,可以安全地将他们的FAT16和FAT32分区转换为NTFS。它不会反过来,但老实说,你想吗? 唯一能真正找到抱怨NTFS的是,它的设计是微软拥有的专有秘密。尽管存在这一挑战,但开源编码器还是能够逆向工程支持从其他操作系统读取NTFS分区,以及更晚的写入NTFS分区。NTFS-3G项目允许任何操作系统读取和写入NTFS分区。 ## 死胡同和大道 ### BeOS和BFS 1990年,苹果法国热情洋溢的前负责人Jean-Louis Gasee顿悟。他决定,Mac OS和Windows等当前桌面操作系统的问题在于,它们因支持自己的旧版本而负担过重。他的解决方案是从头开始,使用所有可用的最佳想法创建一个全新的硬件和操作系统平台。他受到Amiga团队的启发——Amiga团队早在1982年就做了同样的事情——甚至为他的汽车获得了“AMIGA96”虚荣车牌。 当硬件团队选择处理器——AT&T Hobbit——被其母公司停止时,几乎立即遇到了麻烦。切换到PowerPC,该团队实现了极客的梦想:一台快速、经济实惠的多处理器计算机,配有大量端口和光滑的赛昂式闪烁灯。不幸的是,1995年底发货的BeBox总共售出了不到500台。正如史蒂夫·乔布斯在NeXT发现的那样,桌面市场的现实是,不再有新的硬件平台的空间了。Be, Inc.将其操作系统快速移植到Power Macintosh平台,然后移植到更大的x86兼容PC领域。
![BeBox和BeOS](https://cdn.arstechnica.net/wp-content/uploads/archive/reviews/os/zeta-1.0.media/bebox.jpg) 运行BeOS的PPC BeBox
BeOS需要一个文件系统,其最初的目标确实是宏伟的。BeBox上的原始分层文件系统(称为OFS)直接链接到关系数据库,允许各种灵活性和功能。不幸的是,数据库驱动的设计太慢,保持数据库和文件系统同步存在问题。随着转向PowerPC Mac,BeOS现在也必须支持HFS,因此文件系统基础设施需要更改。因此,Be File System(BFS)诞生了。 BFS由Dominic Giampaolo和Cyril Meurillon编写,是一个64位文件系统,支持日志记录并使用B+Trees,就像NTFS一样。它还需要支持原始BeBox操作系统使用的数据库功能,这些功能允许用户将他们想要的任何文件信息存储在一系列记录和字段中。这些信息被放入元数据中,用户可以向每个文件添加尽可能多的字段。 这个可扩展的元数据想法在当时似乎很新颖,但重要的是要认识到NTFS已经支持基本相同的东西。主要区别在于用户界面:BeOS目录窗口支持按任何元数据字段添加、编辑、排序和索引搜索。这对于组织一个人的MP3收藏非常方便。 早在1996年,很少有人使用Windows NT和NTFS,因此BFS的64位支持、日志记录和可扩展元数据都给BeOS的印象增添了BeOS是一个先进操作系统的印象。不幸的是,对Be, Inc.来说,该公司无法找到销售操作系统的可持续商业模式,在灾难性的“焦点”转向疯狂命名的索尼eVilla等专用互联网电器后,该公司资金耗尽,并于2001年出售给Palm。 ### Mac OS X和HFS+ Be, Inc.倒闭的原因之一是Jean-Louis Gassee指望他的老公司苹果,通过购买BeOS用于他们的下一个操作系统来拯救他。苹果的传统Mac OS并没有很好地老化。缺乏内存保护、自动内存分配和先发制人的多任务处理开始对公司造成非常严重的伤害,当苹果的内部替代品Copland在一堆粘性内脏中崩溃时,该公司开始购买替代品。Solaris、BeOS甚至讨厌的Windows NT都在争夺该奖项,BeOS是领先的候选人。五颜六色的Gassee说,他“把苹果的蛋蛋边,要挤到疼为止。” 他挤得有点太紧了。苹果内部有人给NeXT的史蒂夫·乔布斯打了电话,剩下的就是历史了。Steve骑着白色充电器回到苹果,带着他的NeXTstep团队。在对苹果是否会同时提供传统Mac OS和名为Rhapsody的高端版本感到困惑后,Steve完全控制了局面,并决定合并两者。因此诞生了[Mac OS X](http://arstechnica.com/reviews/01q2/macos-x-final/macos-x-1.html)。
![Mac OS X 10.0版本](https://cdn.arstechnica.net/wp-content/uploads/archive/reviews/01q2/macos-x-final/images/first-boot.jpg) Macintosh OS X 10.0,2001年发布。
合并并不完全漂亮。NeXT的核心是基于Mach,Mach本身早在学术过去就与BSD Unix混杂在一起。Unix为命令行而活,而MacOS则避开了CLI,认为它不友好。Unix使用传统的文件扩展名来识别文件类型,而MacOS将此信息隐藏在资源分叉中。最后,Unix的文件系统是UFS,而Mac OS在HFS+上运行。决定支持哪一方总是一场战斗。 在其中一些战斗中,NeXTies赢了。文件扩展名被倡导为识别文件类型的“新方法”。对于 OS X 的第一个版本,用户在新的硬盘驱动器分区上安装 OS 时,系统要求在 UFS 和 HFS+ 之间进行选择。然而,出于兼容性原因,选择了HFS+作为默认值。也不建议选择UFS,因为它区分大小写,因此会破坏一些在文件名大写方面草率的第三方应用程序。 随着时间的推移,NeXT人群的影响减弱,他们的一些强硬决定被重新审视了。UFS支持终于在最新版本的OS X Leopard中删除了。文件扩展名虽然仍然受支持,但不再是强制性的。 仍然存在将HFS+提升到更现代标准的问题。在OS X 10.2(Jaguar)中,日志记录被添加到文件系统中,尽管它默认关闭,并且只能通过命令行启用。在10.3(黑豹)中,默认启用了它。苹果还聘请了BFS的联合创始人Dominic Giampaolo,他致力于添加可扩展的元数据、日志记录、Spotlight的初始实现和FSEvents。最后,在Mac OS X Server 10.4中添加了NTFS风格的细粒度文件权限。 ## ZFS和文件系统的未来 许多人想知道为什么苹果不放弃HFS+,代之以更新、更性感的东西,比如Sun的ZFS。2004年宣布的Zettabyte文件系统是一个128位文件系统,支持荒谬的文件大小(16兆字节)的文件,对于文件系统的总可访问大小,绝对可笑的限制为256 zettabytes(2到78字节)。项目负责人Jeff Bonwick表示:“填充128位文件系统将超过基于地球的存储的量子极限。如果不煮沸海洋,你就无法装满128位的储物池。”从字面上看,需要一台由纯能量组成的计算机,释放足够的能量将整个世界的海洋带到沸点,来填补128位文件系统的极限。似乎不太可能有人会在短期内构建256位文件系统。 ZFS还有一种处理多个分区的旧bugbear的新方法。ZFS建立在称为*zpools*的虚拟存储池之上,因此所有连接的驱动器似乎都是单个巨大分区的一部分。驱动器可以无缝串通各种虚拟 RAID 配置,如果一面镜面上的数据损坏,则可以自动“自行修复”。ZFS还可以自动拍摄对文件所做的每个更改的快照,仅保存差异,因此永远不会丢失数据。
![ZFS存储池](https://cdn.arstechnica.net/wp-content/uploads/archive/journals/microsoft.media/540/zfs_pool.gif) ZFS存储池。进来吧,水很好!它甚至还没有沸腾!
还有其他花哨的ZFS功能太多,无法在这里列出。除了给你做晚饭外,它基本上什么都做,那么苹果为什么不把它放进Mac OS X呢? 部分问题是ZFS仍在成熟,Sun仍在解决纠结。然而,更大的问题是,即使所有错误都已修复,将整个用户群转移到新的文件系统也是一项艰巨的任务。 文件系统应该完全可靠,用户通常会将旧数据保存在使用传统文件系统格式化的驱动器上。微软设法通过Windows内置的转换实用程序将一些FAT用户转移到NTFS,但这一转变主要是通过自然减员实现的,因为旧的Windows 98时代计算机被扔掉,取而代之的是预装XP的新机器。直到今天,FAT仍然困扰着我们,因为大多数闪存驱动器都是用FAT32格式化的。为什么?因为作为最古老的文件系统之一,它也是最容易理解和最容易实现的。 通常,即使切换成本表面上是“免费的”,坚持使用成熟的文件系统也更容易。Linux的例子非常有用,它完全开源,允许任何人为它编写新的文件系统。尽管勇敢地试图将ReiserFS建立为新标准,并且XFS等系统[具有可衡量](http://www.debian-administration.org/articles/388)的[优势](http://www.debian-administration.org/articles/388),但大多数Linux用户仍在使用ext3。ext3并不新。不是超级快。这并不性感。它不会做你的晚餐。但这是经过考验和真实的,对许多人来说,这更重要。 微软最近试图用WinFS恢复最初的BeOS数据库驱动的文件系统想法,WinFS原计划包含在Windows Vista中。然而,发布操作系统的延迟导致微软将[WinFS从](http://arstechnica.com/news.ars/post/20060625-7128.html)操作系统[中删除](http://arstechnica.com/news.ars/post/20060625-7128.html),而是将其作为其SQL数据库产品的可选部分移动。WinFS的未来仍然模糊不清,但微软可能会试图为未来的Windows版本复活它。 NTFS将来可能会持续多年,纯粹出于惰性。HFS+也可能再持续几年。甚至脂肪可能仍然在我们的拇指驱动器上,在每个人都忘记了那是什么之后很久,CP/M的幽灵一直困扰着我们。 虽然文件系统本身可能并不令人兴奋,但它们的历史告诉我们计算机和操作系统多年来是如何演变的。“根据他的作品,你们会认识他”对人类和文件系统都是真的。通过了解操作系统如何存储一个不起眼的文件,人们可以一窥其设计师的局限性和愿望。
# 如何基于VirtualBox使用ISO制作镜像 VirtualBox介绍 VirtualBox是一款开源免费跨平台的虚拟机软件。VirtualBox是由德国InnoTek软件公司出品的虚拟机软件,现在则由甲骨文公司进行开发,是甲骨文公司xVM虚拟化平台技术的一部分。用户可以基于VirtualBox提供的32位或64位的Windows、Solaris及Linux操作系统虚拟其他x86的操作系统,即用户可以在VirtualBox上安装并且运行Solaris、Windows、DOS、Linux、OS/2 Warp、OpenBSD及FreeBSD等系统作为客户端操作系统。 更多VirtualBox信息请参考Oracle官方网站。 VirtualBox官方下载地址:https://www.virtualbox.org/wiki/Downloads 基于VirtualBox使用ISO制作镜像流程 本文指导用户基于VirtualBox使用ISO文件制作镜像,操作流程如下图所示: 图1操作流程 ![如何基于VirtualBox使用ISO制作镜像](https://res-static.hc-cdn.cn/cloudbu-site/china/zh-cn/article-pic/%E5%A6%82%E4%BD%95%E5%9F%BA%E4%BA%8EVirtualBox%E4%BD%BF%E7%94%A8ISO%E5%88%B6%E4%BD%9C%E9%95%9C%E5%83%8F.jpg) 安装VirtualBox:用户首先需要准备一台宿主机,建议使用Windows 64位操作系统,然后在该宿主机上安装VirtualBox。 创建虚拟机:在VirtualBox上创建一台空虚拟机,作为镜像的原始框架。 安装操作系统:通过挂载ISO文件的方式为空虚拟机安装操作系统,您希望最终的镜像是什么系统,就要在这一步准备什么系统的ISO文件。 安装软件和插件:为保证最终制作的镜像可以成功发放弹性云服务器,并且弹性云服务器运行正常,那么在制作时必须在虚拟机中安装所依赖的软件和插件,包括UVP VMTools、Cloudbase-Init、一键式重置密码插件等。 获取镜像文件:在VirtualBox上导出vhd格式的镜像文件。 注册私有镜像:将导出的vhd镜像文件上传至OBS桶,并注册为私有镜像。这样,您在创建弹性云服务器时,就可以使用该私有镜像了。 # Windows 虚拟机安装 ## 安装 ### 准备 为了获得良好的性能水平,我们将在[Windows安装](https://pve.proxmox.com/wiki/Windows_VirtIO_Drivers "Windows VirtIO驱动程序")期间安装Windows [VirtIO驱动程序](https://pve.proxmox.com/wiki/Windows_VirtIO_Drivers "Windows VirtIO Drivers")。 - 创建新的虚拟机,选择“Microsoft Windows 10/2016/2019”作为来宾操作系统,并在“系统”选项卡中启用“Qemu Agent”。继续并将Windows 10 ISO安装在CDROM驱动器中 - 对于您的虚拟硬盘,选择“SCSI”作为总线,并选择“VirtIO SCSI”作为控制器。将“回写”设置为最佳性能的缓存选项(“无缓存”默认值更安全,但速度较慢),并勾选“丢弃”以优化磁盘空间(TRIM)。 - 根据需要配置内存设置,继续并将“虚拟化(虚拟化)”设置为网络设备,完成虚拟机创建。 - 对于VirtIO驱动程序,将驱动程序ISO(使用稳定的VirtIO ISO,[从这里下载](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso))上传到您的存储中,创建一个新的CDROM驱动器(在硬件选项卡中使用“添加-> CD/DVD驱动器”)**,总线“IDE”和数字0**。在新的虚拟CDROM驱动器中加载Virtio Drivers ISO。 - 现在您已经准备好启动虚拟机了,只需按照Windows安装程序操作即可。 ### 启动Windows安装 - 启动虚拟机后,启动noVNC控制台 - 按照安装程序步骤操作,直到您到达安装类型选择,您需要选择“自定义(高级)” - 现在单击“加载驱动程序”以安装硬盘和网络的VirtIO驱动程序。 - 硬盘:浏览到您安装VirtIO驱动程序的CD驱动器,然后选择文件夹“vioscsi\\w10\\amd64”并确认。选择“红帽VirtIO SCSI直通控制器”,然后单击下一步进行安装。现在你应该看看你的车道。 - 网络:重复上面的步骤(再次单击“加载驱动程序”等),然后选择文件夹“NetKVM\\w10\\amd64”,进行确认并选择“Redhat VirtIO以太网适配器”,然后单击下一步。 - 内存气球:再次重复这些步骤,但这次选择“气球\\w10\\amd64”文件夹,然后选择“VirtIO气球驱动程序”,然后单击下一步安装。有了这三个驱动程序,您应该能够很好地运行快速虚拟化的Windows 10系统。 - 选择驱动器并继续Windows安装程序步骤。 **提示:**有一个[视频显示了](https://www.proxmox.com/en/training/video-tutorials/item/install-windows-2016-server-on-proxmox-ve)Windows Server 2016安装[过程](https://www.proxmox.com/en/training/video-tutorials/item/install-windows-2016-server-on-proxmox-ve),与Windows 10相同。 ## 安装客人代理和服务 ### 客座代理 如果您为虚拟机启用了Qemu Agent选项,鼠标指针可能会在第一次启动后关闭。 要解决这个问题,请安装“Qemu Guest Agent”。安装程序位于驱动程序CD的来宾代理\\qemu-ga-x86\_64.msi下。 ### 驱动程序和服务
[![](https://pve.proxmox.com/mediawiki/images/thumb/f/fd/Win10_virtio_guest_tool_installer.png/200px-Win10_virtio_guest_tool_installer.png)](https://pve.proxmox.com/wiki/File:Win10_virtio_guest_tool_installer.png)
VirtIO客人工具安装程序
安装丢失的驱动程序和服务的最简单方法是使用提供的MSI安装程序。它自“[virtio-win-0.1.173-2](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/)”版本开始在驱动程序CD上可用。 直接在CD上运行“virtio-win-gt-x64.msi”文件。如果您不打算使用[SPICE](https://pve.proxmox.com/wiki/SPICE "香料"),您可以取消选择“Qxl”和“Spice”功能。安装程序完成后重新启动虚拟机。 毕竟,RAM使用和IP配置应该在虚拟机的摘要页面中正确显示。 有关气球的更多信息和配置,请参阅[动态内存管理](https://pve.proxmox.com/wiki/Dynamic_Memory_Management "动态内存管理") ### 检查是否有丢失的司机
*另请参阅:[适用于Windows的虚拟化块驱动程序](https://pve.proxmox.com/wiki/Paravirtualized_Block_Drivers_for_Windows "适用于Windows的虚拟化块驱动程序")*
[![](https://pve.proxmox.com/mediawiki/images/thumb/9/9c/Win10_unknown_dev.png/200px-Win10_unknown_dev.png)](https://pve.proxmox.com/wiki/File:Win10_unknown_dev.png)
设备管理器中的未知设备
[![](https://pve.proxmox.com/mediawiki/images/thumb/5/5e/Win10_update_driver_cd_selection.png/200px-Win10_update_driver_cd_selection.png)](https://pve.proxmox.com/wiki/File:Win10_update_driver_cd_selection.png)
确保包含子文件夹
前往设备管理器,看看是否缺少任何驱动程序。对于任何未知设备: - 右键单击选择“更新驱动程序”。 - 选择“浏览我的电脑获取驱动程序软件”。 - 选择驱动程序CD。确保选中“包括子文件夹”。 - 找到驱动程序后,系统可能会提示您发出安全警告,询问您是否“想安装此设备软件”。点击“安装”。 ## 更多信息 ### 磁盘映像格式:原始与qcow2 原始文件格式提供了略微更好的性能,而qcow2提供了写入复制和[Live\_Snapshots](https://pve.proxmox.com/wiki/Live_Snapshots "实时快照")等高级功能。由于V2.3,qcow2是默认格式。 ### VirtIO司机 变得非常简单:使用已包含的驱动程序构建ISO:[Windows客人-构建包含VirtIO驱动程序的ISO](https://pve.proxmox.com/wiki/Windows_guests_-_build_ISOs_including_VirtIO_drivers "Windows客人-构建ISO,包括VirtIO驱动程序") VirtIO驱动程序的最新iso:[https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/) ## 另见 [Windows 2012 客人最佳实践](https://pve.proxmox.com/wiki/Windows_2012_guest_best_practices "Windows 2012 客人最佳实践") [Windows 8来宾最佳实践](https://pve.proxmox.com/wiki/Windows_8_guest_best_practices "Windows 8来宾最佳实践") # VM img 转 vdmk 工具:[starwindconverter.exe](http://3cz.321jr.com:30001/down/ljU1I9wtSTqq) - 选择转换类型 [![image-1645290085048.png](http://book.321jr.com/uploads/images/gallery/2022-02/scaled-1680-/NcwzUq8MFNNtXEfQ-image-1645290085048.png)](http://book.321jr.com/uploads/images/gallery/2022-02/NcwzUq8MFNNtXEfQ-image-1645290085048.png) - 选择要转换的对象 [![image-1645290179510.png](http://book.321jr.com/uploads/images/gallery/2022-02/scaled-1680-/YxGYlyFLFXtB9cGd-image-1645290179510.png)](http://book.321jr.com/uploads/images/gallery/2022-02/YxGYlyFLFXtB9cGd-image-1645290179510.png) - 按图示选择并点击 [![image-1645290258129.png](http://book.321jr.com/uploads/images/gallery/2022-02/scaled-1680-/PfCgUh8238skjUeY-image-1645290258129.png)](http://book.321jr.com/uploads/images/gallery/2022-02/PfCgUh8238skjUeY-image-1645290258129.png) [![image-1645290295553.png](http://book.321jr.com/uploads/images/gallery/2022-02/scaled-1680-/z8xv5qRx8ioLMtbV-image-1645290295553.png)](http://book.321jr.com/uploads/images/gallery/2022-02/z8xv5qRx8ioLMtbV-image-1645290295553.png) [![image-1645290314331.png](http://book.321jr.com/uploads/images/gallery/2022-02/scaled-1680-/wnnOJwamxvXcQM0i-image-1645290314331.png)](http://book.321jr.com/uploads/images/gallery/2022-02/wnnOJwamxvXcQM0i-image-1645290314331.png) [![image-1645290323800.png](http://book.321jr.com/uploads/images/gallery/2022-02/scaled-1680-/v5wJY1lbmLrTTF9c-image-1645290323800.png)](http://book.321jr.com/uploads/images/gallery/2022-02/v5wJY1lbmLrTTF9c-image-1645290323800.png) # Meteor 安装 #### Meteor是什么 `Meteor`是一种最新的`JavaScript`框架,用于自动化和简化实时运行的Web应用程序的开发,它使用分布式数据协议-`(Distributed Data Protocol,DDP)`的协议来处理实时通信,使用支持`WebSocket`的浏览器以及使用`Asynchronous JavaScript +XML(Ajax)`长轮询的旧浏览器支持这种协议,浏览器到服务器的通信是透明的。 `Meteor`提供了两个`MongoDB`数据库:一个客户端缓存库和服务器上的一个`MongoDB`数据库。当一个用户更改数据时,在浏览器中运行的`JavaScript`代码会更新本地的`MongoDB`中的相应的数据库项,然后向服务器发出一个`DDP`请求。 该代码会立即执行,就和服务器执行成功那样继续运行,因为它不需要等待服务器回复。与此同时,服务器在后台更新。如果服务器操作失败或者返回一个以为结果,那么客户端`JavaScript`代码会依据从服务器新返回的数据立即进行调整。这种调整称为延迟补偿,向用户提供了更高的认知速度。 甚至连 `Meteor` 的模板系统也是为简化实时通信而设计的,Meteor中的模板系统会根据用户记录在模板中的数据,自动回调,以便在底层数据更改时调用此`HTML`,使实时模板变得更加简单快捷。 `Meteor`网站地址:[https://www.meteor.com/](https://link.jianshu.com?t=https://www.meteor.com/) #### 安装 Meteor 运行命令: > curl [https://install.meteor.com/](https://link.jianshu.com?t=https://install.meteor.com/) | sh
```bash eteor 1.1.0.3 has been installed in your home directory (~/.meteor). Writing a launcher script to /usr/local/bin/meteor for your convenience. This may prompt for your password. To get started fast: $ meteor create ~/my_cool_app $ cd ~/my_cool_app $ meteor Or see the docs at: docs.meteor.com ```
#### 新建Meteor项目 使用`meteor create`可以创建一个新项目: > meteor create test-meteor
```bash test-meteor: created. To run your new app: cd test-meteor meteor ```
#### 运行Meteor 运行`meteor`可以直接运行`meteor`项目: > meteor
```ruby [[[[[ ~/Documents/workspace/node/test-meteor ]]]]] => Started proxy. => Started MongoDB. => Started your app. => App running at: http://localhost:3000/ ```
在浏览器中输入 [http://localhost:3000/](https://link.jianshu.com?t=http://localhost:3000/) 就可以看到一个网页: [![image-1645358063240.png](http://book.321jr.com/uploads/images/gallery/2022-02/scaled-1680-/9XS9iS27OcjTE11B-image-1645358063240.png)](http://book.321jr.com/uploads/images/gallery/2022-02/9XS9iS27OcjTE11B-image-1645358063240.png)
[原文链接](https://www.jianshu.com/p/183185d2b9b1)
# Node.js 安装配置 本章节我们将向大家介绍在 Windows 和 Linux 上安装 Node.js 的方法。 本安装教程以 Node.js v4.4.3 LTS(长期支持版本)版本为例。 Node.js 安装包及源码下载地址为:[https://nodejs.org/en/download/](https://nodejs.org/en/download/)。 ![nodejs_download](https://www.runoob.com/wp-content/uploads/2014/03/download-page.jpg) 你可以根据不同平台系统选择你需要的 Node.js 安装包。 Node.js 历史版本下载地址:[https://nodejs.org/dist/](https://nodejs.org/dist/) **注意:**Linux 上安装 Node.js 需要安装 Python 2.6 或 2.7 ,不建议安装 Python 3.0 以上版本。 - - - - - - ## Mac OS 上安装 你可以通过以下两种方式在 Mac OS 上来安装 node: - 1、在[官方下载网站](https://nodejs.org/en/download/)下载 pkg 安装包,直接点击安装即可。 - 2、使用 brew 命令来安装(前置条件 [安装 Homebrew](https://brew.sh/index_zh-cn)): ``` brew install node ``` - - - - - - ## Windows 上安装 Node.js 你可以采用以下两种方式来安装。 ### 1、Windows 安装包(.msi) ![](https://www.runoob.com/wp-content/uploads/2014/03/4530AA77-2208-47FA-A900-91C93AEC95AF.jpg) 本文实例以 v0.10.26 版本为例,其他版本类似, 安装步骤: 步骤 1 : 双击下载后的安装包 **v0.10.26**,如下所示: ![install-node-msi-version-on-windows-step1](https://www.runoob.com/wp-content/uploads/2014/03/install-node-msi-version-on-windows-step1.png) 步骤 2 : 点击以上的Run(运行),将出现如下界面: ![install-node-msi-version-on-windows-step2](https://www.runoob.com/wp-content/uploads/2014/03/install-node-msi-version-on-windows-step2.png) 步骤 3 : 勾选接受协议选项,点击 next(下一步) 按钮 : ![install-node-msi-version-on-windows-step3](https://www.runoob.com/wp-content/uploads/2014/03/install-node-msi-version-on-windows-step3.png) 步骤 4 : Node.js默认安装目录为 "C:\\Program Files\\nodejs\\" , 你可以修改目录,并点击 next(下一步): ![install-node-msi-version-on-windows-step4](https://www.runoob.com/wp-content/uploads/2014/03/install-node-msi-version-on-windows-step4.png) 步骤 5 : 点击树形图标来选择你需要的安装模式 , 然后点击下一步 next(下一步) ![install-node-msi-version-on-windows-step5](https://www.runoob.com/wp-content/uploads/2014/03/install-node-msi-version-on-windows-step5.png) 步骤 6 :点击 Install(安装) 开始安装Node.js。你也可以点击 Back(返回)来修改先前的配置。 然后并点击 next(下一步): ![install-node-msi-version-on-windows-step6](https://www.runoob.com/wp-content/uploads/2014/03/install-node-msi-version-on-windows-step6.png) 安装过程: ![install-node-msi-version-on-windows-step7](https://www.runoob.com/wp-content/uploads/2014/03/install-node-msi-version-on-windows-step7.png) 点击 Finish(完成)按钮退出安装向导。 ![install-node-msi-version-on-windows-step8](https://www.runoob.com/wp-content/uploads/2014/03/install-node-msi-version-on-windows-step8.png) 检测PATH环境变量是否配置了Node.js,点击开始=》运行=》输入"cmd" => 输入命令"path",输出如下结果: ``` PATH=C:\oraclexe\app\oracle\product\10.2.0\server\bin;C:\Windows\system32; C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\; c:\python32\python;C:\MinGW\bin;C:\Program Files\GTK2-Runtime\lib; C:\Program Files\MySQL\MySQL Server 5.5\bin;C:\Program Files\nodejs\; C:\Users\rg\AppData\Roaming\npm ``` 我们可以看到环境变量中已经包含了C:\\Program Files\\nodejs\\ 检查Node.js版本 ![node-version-test](https://www.runoob.com/wp-content/uploads/2014/03/node-version-test.png) ### 2、Windows 二进制文件 (.exe)安装 32 位安装包下载地址 : [http://nodejs.org/dist/v0.10.26/node.exe](http://nodejs.org/dist/v0.10.26/node.exe) 64 位安装包下载地址 : [http://nodejs.org/dist/v0.10.26/x64/node.exe](http://nodejs.org/dist/v0.10.26/x64/node.exe) **安装步骤** 步骤 1 : 双击下载的安装包 Node.exe ,将出现如下界面 : ![install-node-exe-on-windows-step1](https://www.runoob.com/wp-content/uploads/2014/03/install-node-exe-on-windows-step1.png) 点击 Run(运行)按钮将出现命令行窗口: ![install-node-exe-on-windows-step21](https://www.runoob.com/wp-content/uploads/2014/03/install-node-exe-on-windows-step21.png) ### 版本测试 进入 node.exe 所在的目录,如下所示: ![node-version](https://www.runoob.com/wp-content/uploads/2014/03/node-version.png) 如果你获得以上输出结果,说明你已经成功安装了Node.js。 - - - - - - ## Linux 上安装 Node.js ### 直接使用已编译好的包 Node 官网已经把 linux 下载版本更改为已编译好的版本了,我们可以直接下载解压后使用: ``` # wget https://nodejs.org/dist/v10.9.0/node-v10.9.0-linux-x64.tar.xz // 下载 # tar xf node-v10.9.0-linux-x64.tar.xz // 解压 # cd node-v10.9.0-linux-x64/ // 进入解压目录 # ./bin/node -v // 执行node命令 查看版本 v10.9.0 ``` 解压文件的 bin 目录底下包含了 node、npm 等命令,我们可以使用 ln 命令来设置软连接: ``` ln -s /usr/software/nodejs/bin/npm /usr/local/bin/ ln -s /usr/software/nodejs/bin/node /usr/local/bin/ ``` ### Ubuntu 源码安装 Node.js 以下部分我们将介绍在 Ubuntu Linux 下使用源码安装 Node.js 。 其他的 Linux 系统,如 Centos 等类似如下安装步骤。 在 Github 上获取 Node.js 源码: ``` $ sudo git clone https://github.com/nodejs/node.git Cloning into 'node'... ``` 修改目录权限: ``` $ sudo chmod -R 755 node ``` 使用 **./configure** 创建编译文件,并按照: ``` $ cd node $ sudo ./configure $ sudo make $ sudo make install ``` 查看 node 版本: ``` $ node --version v0.10.25 ``` ### Ubuntu apt-get 命令安装 命令格式如下: ``` sudo apt-get install nodejs sudo apt-get install npm ``` ### CentOS 下源码安装 Node.js 1、下载源码,你需要在[https://nodejs.org/en/download/](https://nodejs.org/en/download/)下载最新的Nodejs版本,本文以v0.10.24为例: ``` cd /usr/local/src/ wget http://nodejs.org/dist/v0.10.24/node-v0.10.24.tar.gz ``` 2、解压源码 ``` tar zxvf node-v0.10.24.tar.gz ``` 3、 编译安装 ``` cd node-v0.10.24 ./configure --prefix=/usr/local/node/0.10.24 make make install ``` 4、 配置NODE\_HOME,进入profile编辑环境变量 ``` vim /etc/profile ``` 设置 nodejs 环境变量,在 ***export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL*** 一行的上面添加如下内容: ``` #set for nodejs export NODE_HOME=/usr/local/node/0.10.24 export PATH=$NODE_HOME/bin:$PATH ``` :wq保存并退出,编译/etc/profile 使配置生效 ``` source /etc/profile ``` 验证是否安装配置成功 ``` node -v ``` 输出 v0.10.24 表示配置成功 npm模块安装路径 ``` /usr/local/node/0.10.24/lib/node_modules/ ``` **注:**Nodejs 官网提供了编译好的 Linux 二进制包,你也可以下载下来直接应用。 # Node.js 使用 #### 使用的版本 我们可以使用以下命令来查看当前的 Node 版本: ``` $ node -v v4.4.3 ``` **注意:**不同版本间可能是有差异的。 - - - - - - ### 第一个Node.js程序:Hello World! #### 脚本模式 以下是我们的第一个Node.js程序: #### 实例
console.log("Hello World");
[运行实例 »](https://www.runoob.com/try/shownodejs.php?filename=helloworld)
保存该文件,文件名为 helloworld.js, 并通过 node命令来执行: ``` node helloworld.js ``` 程序执行后,正常的话,就会在终端输出 Hello World。 #### 交互模式 打开终端,键入node进入命令交互模式,可以输入一条代码语句后立即执行并显示结果,例如: ``` $ node > console.log('Hello World!'); Hello World! ``` - - - - - - #### Gif 实例演示 接下来我们通过 Gif 图为大家演示实例操作: ![](https://www.runoob.com/wp-content/uploads/2014/03/nodejs-gif1.gif) # 如何使用多站点设置多个WordPress网站 ## 关于多个WordPress安装 2010年,WordPress发布了3.0版本的热门内容管理平台。在版本中包含的许多改进中,WordPress社区将WordPress MU合并到WordPress主配置中。自更改以来,WordPress使在一台服务器上创建多个WordPress站点变得更加容易。早些时候,服务器上的每个WordPress博客都需要有自己的安装,但现在可以安装一次新的WordPress网站,也可以在WordPress仪表板内设置其他博客。 ### 设置 本教程中的步骤要求用户拥有根权限。您可以在[初始服务器设置](http://book.321jr.com/books/0336d/page/13f98 "设置")中了解如何设置 在使用WordPress之前,您需要在虚拟专用服务器上安装LAMP。如果您的服务器上没有Linux、Apache、MySQL、PHP堆栈,您可以在[Ubuntu LAMP教程](http://book.321jr.com/books/0336d/page/lamplinuxapachemysqlphp "LAMP堆栈:Linux、Apache、MySQL、PHP")中找到设置它的教程。 一旦您拥有了用户和所需的软件,请继续[安装WordPress](http://book.321jr.com/books/0336d/page/wordpress "安装 WordPress")。**然而——请确保您在第4步结束时停止**(我们将在下一步向Wordpress配置文件添加另一件事) ## 第一步——设置WordPress安装 - - - - - - 安装WordPress后,我们需要在各种配置文件中采取一系列步骤。 首先,修改WordPress配置,激活多站点网络: ``` sudo nano /var/www/wp-config.php ``` 在上面添加以下一行“*/\*仅此而已,停止编辑!博客快乐。\*/*" ``` /* 多站点 */define('WP_ALLOW_MULTISITE', true); ``` 之后保存文件并退出。您可以通过按下**CTRL+O**保存,然后按**CTRL+X**退出来做到这一点。 激活apache Mod\_Rewrite模块: ``` sudo a2enmod重写 ``` 跟进,允许在虚拟文件中更改.htaccess。打开您的虚拟主机文件(我只是在默认的Apache文件中进行这些更改)。 ``` sudo nano /etc/apache2/sites-enabled/000-default ``` 在以下部分中,将“允许覆盖”更改为“全部”: ``` <目录/var/www/>选项索引关注SymLinks MultiViews允许覆盖所有订单允许,否认允许所有 ``` 重新启动apache: ``` sudo service apache2重新启动 ``` 完成后,WordPress在线安装页面就开始了,正在等待您: 通过将/wp-admin/install.php添加到站点的域或IP地址(例如 example.com/wp-admin/install.php)来访问页面,并填写简短的在线表格。 ## 第二步——设置多个WordPress网站 进入WordPress仪表板,选择名为工具的部分: ![网络设置](https://assets.digitalocean.com/tutorial_images/oxaEO.png?1) 填写完必填字段后,请浏览下一页的说明(我在图像下进一步阐述了它们): ![下一页](https://assets.digitalocean.com/tutorial_images/rjwIc.png?1) 1. 为您的新网站创建一个目录: ``` sudo mkdir /var/www/wp-content/blogs.dir ``` 1. 更改您的WordPress配置。确保将此粘贴到行上方*/\*仅此而已,停止编辑!博客快乐。\*/*: ``` sudo nano /var/www/wp-config.php ``` ``` define('MULTISITE', true);define('SUBDOMAIN_INSTALL', false); $base = '/'; define('DOMAIN_CURRENT_SITE', 'YOUR IP ADDRESS HERE'); define('PATH_CURRENT_SITE', '/'); define('SITE_ID_CURRENT_SITE', 1);define('BLOG_ID_CURRENT_SITE', 1); ``` 2. 最后,将WordPress的重写规则添加到/var/www htaccess文件中: ``` sudo nano /var/www/.htaccess ``` ``` RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] ``` # 已上传的文件 重写规则^(\[\_0-9a-zA-Z-\]+/)?files/(.+) wp-includes/ms-files.php?file=$2 \[L\] # 向/wp-admin添加尾随斜杠 重写规则^(\[\_0-9a-zA-Z-\]+/)?wp-admin$ $1wp-admin/ \[R=301,L\] RewriteCond %{REQUEST\_FILENAME} -f \[OR\]RewriteCond %{REQUEST\_FILENAME} -dRewriteRule ^ - \[L\] RewriteRule ^\[\_0-9a-zA-Z-\]+/(wp-(content|admin|includes).*)$1 \[L\]RewriteRule ^\[\_0-9a-zA-Z-\]+/(.*.php)$ $1 \[L\]RewriteRule .index.php \[L\] 进行所有必要的更改后,再次登录WordPress。 ## 第三步——设置您的新WordPress网站 再次登录网站后,您会注意到标题栏现在有一个名为“我的网站”的部分,而不仅仅是显示博客名称: ![标题](https://assets.digitalocean.com/tutorial_images/rPn5f.png?1) 您可以通过以下方式创建新网站:前往顶部的“我的网站”,单击“网络管理”,然后单击“网站”: ![创建新网站](https://assets.digitalocean.com/tutorial_images/OoYcp.png?1) # 演示站点 该演示站点具有以下凭据: **邮箱:** [admin@example.com](mailto:admin@example.com) **密码:** password [您可以通过单击此处使用预先填写的上述凭据访问登录页面](https://demo.bookstackapp.com/login?email=admin@example.com&password=password)

**演示数据库和图像存储每半小时自动重置一次**

使用提供的管理员登录可以使用大多数标准操作,但下面列出的一些操作已被限制以保持演示实例打开和可用。也就是说,所有选项和操作至少对演示管理员用户可见。
**演示中限制的操作**- 用户删除 - 用户更新 - 设置更新
# 创建空虚拟机 在安装VirtualBox后请参考本节操作创建空虚拟机。 #### 前提条件 已安装VirtualBox。 #### 操作步骤
1. 打开VirtualBox,单击“新建”,在弹出的“新建虚拟电脑”对话框中输入虚拟机名称,并选择类型和版本,单击“下一步”。以Ubuntu为例,类型选择:Linux。 请确保选择的版本与待安装的操作系统版一致。
**图1** 创建虚拟机 ![](https://support.huaweicloud.com/bestpractice-ims/zh-cn_image_0268280658.png)
2. 在选择内存的对话框中,选择内存大小并单击“下一步”。 选择内存时请参考虚拟机配置及待安装操作系统的官方要求。默认最小为256MB,本文以设置为512MB为例。
**图2** 选择内存大小 ![](https://support.huaweicloud.com/bestpractice-ims/zh-cn_image_0268284967.png)
3. 在虚拟硬盘对话框中,选择“现在创建虚拟硬盘”,并单击“创建”。
**图3** 创建虚拟硬盘 ![](https://support.huaweicloud.com/bestpractice-ims/zh-cn_image_0268287010.png)
4. 选择虚拟硬盘文件类型为“VHD”,单击“下一步”。
**图4** 虚拟硬盘文件类型 ![](https://support.huaweicloud.com/bestpractice-ims/zh-cn_image_0268287244.png)
5. 选择磁盘分配方式为“动态分配”,单击“下一步”。
**图5** 磁盘分配 ![](https://support.huaweicloud.com/bestpractice-ims/zh-cn_image_0268288436.png)
6. 设置磁盘大小及存储位置。 本文以设置磁盘大小为20GB为例。
**图6** 设置磁盘大小及存储位置 ![](https://support.huaweicloud.com/bestpractice-ims/zh-cn_image_0268290676.png)
7. 单击“创建”,完成空虚拟机的创建。
# 网页变 App #### 前置条件 [安装 Node.js](http://book.321jr.com/books/9be40/page/nodejs "Node.js 安装配置") [使用 Node.js](http://book.321jr.com/books/9be40/page/nodejs-Tde "Node.js 使用") #### 安装工具 第一行命令: `npm install nativefier -g` #### 制作应用 第二行命令: `nativefier "https://mr-houzi.github.io/"` 到目前,一个桌面应用已经打造完成 #### 效果 应用目录: [![image-1645357370503.png](http://book.321jr.com/uploads/images/gallery/2022-02/scaled-1680-/F7DgJLv8NGGlzXGe-image-1645357370503.png)](http://book.321jr.com/uploads/images/gallery/2022-02/F7DgJLv8NGGlzXGe-image-1645357370503.png) 点击`.exe`文件,启动应用。激不激动 [![image-1645357400605.png](http://book.321jr.com/uploads/images/gallery/2022-02/scaled-1680-/cuyCoxHFwi3cVaRk-image-1645357400605.png)](http://book.321jr.com/uploads/images/gallery/2022-02/cuyCoxHFwi3cVaRk-image-1645357400605.png) 本文到这里已经结束!您可以关闭这个博客了!如果您还想了解更多关于`nativefier`,欢迎您往下看! ### 附加内容 #### 设置名字 nativefier在制作应用的时候,可以自动识别网站的名字,您也可以自己设置名字。 `nativefier --name "AppName" "https://mr-houzi.github.io/"` #### 设置图标 `nativefier --icon ` #### Windows和Linux打包 icon参数应该是.png文件的路径。 #### OSX打包 如果安装了可选的依赖关系,icon参数可以是a .icns或.png文件。 #### 指定输出不同系统的应用 默认情况下,会根据当前操作系统,输出对应系统的应用。如果您需要特殊指定转换成不同系统的应用,可以 使用一下命令。 `nativefier --p ` 可选参数`linux`、`windows`、`osx`。 替代值`win32`(用于Windows)或`darwin`,`mac`(对于OSX)也可以使用。 #### 显示菜单栏 `-m, --show-menu-bar` 指定是否应该显示菜单栏。 #### 禁用上下文菜单 `--disable-context-menu` 禁用上下文菜单 #### 单实例 `--single-instance` 阻止应用程序多次运行。如果发生这种尝试,那么已经运行的实例就会出现在前面。 #### 托盘 `--tray` 应用程序将保留为系统托盘中的图标。通过点击窗口关闭按钮来防止关闭应用程序。 #### 设置应用版权 `nativefier --app-copyright ` 应用的版权信息会映射到Windows系统的`LegalCopyright`和OS X系统的`NSHumanReadableCopyright`的元数据属性。 #### 设置显示 ##### 宽度 `--width ` 打包应用程序的宽度,默认为1280px。 ##### 高度 `--height ` 打包应用程序的高度,默认为800px。 ##### 最小宽度 `--min-width ` 打包应用程序的最小宽度,默认为0。 ##### 最小高度 `--min-height ` 打包应用程序的最小高度,默认为0。 ##### 最大宽度 `--max-width ` 打包应用程序的最大宽度,默认为无限制。 ##### 最大高度 `--max-height ` 打包应用程序的最大高度,默认为无限制。 ##### X `--x ` 打包的应用程序窗口的X位置。 ##### Y `--y ` 打包的应用程序窗口的Y位置。 [原文链接](https://segmentfault.com/a/1190000013125023)