Ubuntu Server 的用户系统与文件系统
最近开始使用云服务器部署一些服务,在使用过程中,我发现云服务器操作系统与日常使用的 macOS 或者 Windows 都不太一样。于是花了点时间想搞清楚这件事情。
背景:我使用的是腾讯云的新加坡服务器,安装的是 Ubuntu Server 24.04 LTS 64bit 操作系统。
什么是 Ubuntu?
Ubuntu 是基于 Debian 的 Linux 发行版。主要分为 Ubuntu Desktop 和 Ubuntu Server,前者是桌面版,面向普通个人用户,带有图形化界面,可用于日常办公、娱乐等,后者是服务器版,专为服务器环境设计,是本文主要讨论的。
Linux 是一个开源的操作系统,类似于 macOS 或者 Windows,但是日常谈论的 Linux 通常指的是 Linux 内核,内核是操作系统的核心部分,直接管理硬件资源(CPU、内存等),充当硬件和软件之间的桥梁。而 Linux 发行版则是由 Linux 内核加上一整套完整的软件组成可直接使用的操作系统,比如 Ubuntu、Debian、CentOS 等都是 Linux 发行版。
Debian 和 Ubuntu 都是 Linux 发行版,但是 Debian 是相当古老而纯粹的一个,同样是开源的,所以成为了很多其他 Linux 发行版的基础。可以理解为 Debian 在 Linux 内核的基础上提供了一些基础的软件形成了一个基础的 Linux 发行版,而 Ubuntu 又在 Debian 的基础上增加了一些更易于用户使用的软件改良后的 Linux 发行版。
而 Ubuntu Server 24.04 LTS 64bit 就是 Ubuntu 的 Server 版本,于 2024 年 4 月(24.04)发布的 LTS 版本,LTS 表示该版本会得到长期支持,通常稳定性更高,不会频繁升级,而 64bit 则是指系统架构,如今几乎所有现代服务器硬件都是 64bit 的。
用户系统
Ubuntu 的用户系统是一个以 root 超级用户为顶点,包含系统用户、普通登录用户和用户组(本文不会深入讨论)的权限管理体系。
root 用户,是系统的超级管理员,拥有至高无上的权限,可以执行任何操作,所以也是极其危险的,日常操作服务器非常不建议直接使用 root 用户进行,Ubuntu 也默认禁止通过 SSH 使用密码直接以 root 用户身份登录。
系统用户,这些用户不是给「人」登录使用的,而是给一些软件和服务使用的,遵循「最小权限原则」,可以让每个服务以独立的低权限用户身份运行。常见的系统用户包括:
- www-data- Nginx/Apache Web 服务器使用的用户
- mysql- MySQL 数据库服务使用的用户
- redis- Redis 缓存服务使用的用户
- nobody- 一个权限最小的用户,常用于需要极低权限的服务
普通登录用户,在 root 用户之下的用户,需要由具有管理员权限的用户创建、管理。普通用户只能在自己的家目录(/home/username)和系统允许的临时目录中拥有完整的读写权限,对于其他系统目录和文件通常只有读取或者完全没有权限。
日常操作服务器建议使用普通用户,需要执行更高权限的管理任务时可以通过权限提升机制(比如 sudo)来临时获取 root 权限。
用户组,是将多个用户组织在一起的机制,方便统一管理权限。每个用户至少属于一个主用户组,也可以属于多个附加用户组。常见的用户组如 sudo(该组用户可以使用 sudo 命令)、docker(该组用户可以执行 docker 命令)等。
文件系统
Ubuntu 的文件系统层次结构都是从一个唯一的根目录(/)开始的,这是整个文件系统的起点,所有其他目录和文件都位于其下。下面介绍一些常见的目录。
系统核心目录
/bin,基本用户命令的二进制文件,在现代 Ubuntu 系统中是指向 /usr/bin 的符号链接,用于存放系统中所有用户都可以执行的命令,比如 ls、cat、cp 等。
/sbin,系统管理员命令的二进制文件,在现代 Ubuntu 系统中是指向 /usr/sbin 的符号链接,用于存放系统管理员可以执行的命令,比如 ifconfig、mount、reboot 等。
/boot,启动引导程序文件,包含 Linux 内核、初始化内存盘和引导加载程序的文件,非常重要,删除会导致系统无法启动。
/dev,设备文件,包含代表硬件设备和虚拟设备的特殊文件,比如 /dev/sda 代表第一块硬盘,/dev/null 代表空设备(可以丢弃任何写入的数据)。
/etc,系统配置文件,包含系统和应用程序的配置信息,比如 /etc/passwd(用户账户信息)、/etc/hostname(主机名配置)、/etc/nginx/nginx.conf(Nginx 配置文件)等。
用户相关目录
/home,用户主目录,每个普通用户在这里都会有一个以自己用户名命名的子目录,比如 /home/ubuntu 代表 ubuntu 用户的主目录,用于存放个人文件、配置等。
/root,root 用户的主目录,用于存放 root 用户的个人文件、配置等。root 用户的主目录单独存放在根目录下,而不是 /home/root,这是为了确保即使 /home 分区出现问题,root 用户仍然可以登录系统。
程序和数据目录
/opt,可选应用软件包目录,用于存放第三方软件包,比如 /opt/redis 代表手动安装的 Redis 软件包。
/usr,用户程序和数据,包含绝大部分用户应用程序、库、文档等。这是系统中最大的目录之一。
/usr/bin,用户二进制文件,在现代 Ubuntu 系统中是实际存储用户和系统命令的地方(/bin 指向此处),比如 /usr/bin/python3 代表 Python 3 解释器。
/usr/sbin,系统管理员二进制文件,在现代 Ubuntu 系统中是实际存储系统管理命令的地方(/sbin 指向此处)。
/usr/lib,用户库文件,用于存放用户应用程序的库文件,比如 /usr/lib/python3 代表 Python 3 的库文件。
可变数据目录
/tmp,临时文件目录,用于存放临时文件,比如缓存文件、日志文件等。根据系统配置,此目录下的文件通常会在系统重启时被清除,或者定期被清理程序删除。
/var,变量数据目录,用于存放可变数据,比如 /var/log(系统和应用程序的日志文件)、/var/www(Web 服务器的网站文件)等。
用户切换
当我在云服务器后台(比如腾讯云控制台)登录时,发现登录的是 root@VM-0-7-ubuntu 这样的用户,这表明我当前是以 root 用户身份登录了主机名为 VM-0-7-ubuntu 的云服务器。
可以通过以下几种方式在用户之间切换:
- su - ubuntu- 切换到 ubuntu 用户身份(可能需要输入 ubuntu 用户的密码)
- sudo -i- 从普通用户切换到 root 用户环境(推荐方式,可能需要使用当前用户密码)
当我们使用 root 身份登录服务器之后,工作目录位于 /root,而使用 ubuntu 用户身份登录服务器之后,工作目录位于 /home/ubuntu。可以通过 pwd 命令确定当前所在目录。