GNU/Linux 操作系统简介
Rocky Linux 中文社区投稿人:陸風睿

GNU/Linux 操作系统简介

本篇将带您了解 GNU/Linux 发行版。

什么是操作系统?

GNU/Linux、UNIX、BSD、Windows 和 MacOS 都是操作系统

摘要
操作系统是 管理计算机可用资源的一组程序 。

作为资源管理的一部分,操作系统必须:

  • 管理 物理虚拟 内存。
    • 物理内存是用于执行程序的内存条和处理器缓存组成。
    • 虚拟内存是硬盘上的一个位置( swap 分区),它允许在计算机断电期间取下物理内存的情况下,能够保存系统的当前状态。
  • 拦截 访问外设。软件很少被允许直接访问硬件(除了用于非常特殊需求的显卡)。
  • 为应用程序提供适当的 任务管理。操作系统负责调度进程以充分使用处理机。
  • 保护文件 不受未经授权的访问。
  • 收集有关正在使用或正在进行的程序信息

UNIX - GNU/Linux 概述

信息
名称争议:尽管人们习惯于口头上称呼 Linux 为操作系统,但严格来说 Linux 只是一个内核。不能忘记 GNU 项目对开源事业的发展和贡献,所以笔者更愿意将它称为 GNU/Linux 操作系统。

历史

下文介绍了 UNIX 到 GNU/Linux 的发展历史。

UNIX

  • 20 世纪 60 年代:麻省理工大学希望对当时的兼容分时系统 CTSS (Compatible Time-Sharing System) 进行升级,做出一套面向大众提供服务的信息处理工具,于是找到了著名的硬件公司——美国通用电气公司。
信息
CTSS:是麻省理工大学在1959年开始开发并于1961年首次演示的第一个兼容分时系统,运行在 IBM 709、IBM 7090、IBM 7094 的计算机上。该系统允许计算机把时间平均分配给不同用户指定的任务,每个任务轮流运行一定时间,从而允许多个用户同时使用一台计算机。CTSS开创了用户硬件隔离和独立的用户文件系统。
  • 1964 年:AT&T 的贝尔实验室加入到由美国麻省理工学院(MIT)和通用电气公司(CE)合作的计划中去,准备联合启动一个叫做 MULTICS (MULTiplexed Information and Computing System,多功能信息和计算服务) 的工程项目,项目目标是开发一个具有多用户(Multi-user)、多任务(Multi-processor)、多层级(Multi-level)的操作系统,以完成对 CTSS 的升级。计划跑在由美国通用电气公司生产的 GE-645 大型机上,目的是连接 1000 部终端设备并支持 300 个用户同时上线。

  • 1969 年:经过了几年的开发,MULTICS 因追求的目标过于庞大且复杂、项目进度远远落后于计划(当时并没有现在这种完善的项目管理)、项目资金(1969 年发生金融危机)等等各方面问题,最终导致贝尔实验室宣布退出该项目,但美国麻省理工学院和通用电气则继续开发着 MULTICS。

  • 1969 年:当时参与 MULTICS 项目的肯·汤姆森(一名贝尔实验室工程师)在工作期间为跑在大型机 GE-645 上的 MULTICS 编写了一款游戏 —— 「space travel」(星际旅行)。游戏画面为二维画面,由黑色背景以及白色线条组成,玩家需要控制太空船在宇宙中的不同行星和卫星之间着陆,没有特定的目标。

在贝尔实验室退出 MULTICS 后,昂贵的大型机 GE-645 依然被留在实验室。肯·汤姆森将自己的游戏代码转化成了 fortran 语言,以便让游戏可以继续在 GE-645 已有的 GECOS 操作系统上运行。肯·汤姆森和贝尔实验室的其他员工(如拉维·塞西和丹尼斯·里奇)都在该操作系统上游玩着这款游戏。然而,GECOS 采用的是 「交互式批处理」模式,即当几个计算机终端同时连接到中央计算机时,每个终端的程序作业必须以队列的形式提交,这也导致了当 GE-645 为其他终端处理作业时,游戏会出现长时间的暂停;GECOS 要求用户输入命令而不是按下按钮,这导致飞船难以控制;游戏在 GECOS 系统上的表现还不如 MULTICS 系统;在当时,计算机都属于非常昂贵的产品,只有少部分的科研机构、实验室以及高校才拥有,是的,当时采用收费系统来统计计算机的使用情况,这意味着每次游玩该游戏的成本大约在 50~75 美元。

为了解决上面提到的运行效率、游戏控制、游玩成本、大型机 GE-645 被搬走等问题,需要找到更好的办法运行「space travel」。方法之一是找实验室申请购买 DEC PDP-10 大型机,这既能完成自己新操作系统的开发,也能将这款游戏更好的运行,但当时的贝尔实验室刚刚退出 MULTICS 项目,不会再花钱对操作系统的开发感兴趣,肯·汤姆森的申请被驳回。8 月份,肯·汤姆森找到了实验室里一台老旧的、很少使用的、只有 16 KB 内存的 DEC PDP-7 小型计算机,该机器于 1964 年出产,在当时已过去了 5 年,属于过时的设备,但好在其配备了图形终端且拥有出色的图形功能,于是他决定使用 GECOS 系统上的交叉编译器将「space travel」移植到该平台,将生成的机器码写入到打孔纸带中并将其加载到 DEC PDP-7 上。在移植期间,肯·汤姆森没有利用任何已在 DEC PDP-7 上的代码,而是决定重新从头开始写一个新程序,包括浮点库和其他低级工具;肯·汤姆森为 DEC PDP-7 编写了汇编器,来减少繁重的体力劳动;肯·汤姆森根据 丹尼斯·里奇 (Dennis Ritchie)鲁德-卡纳迪 (Rudd Canaday) 的一些黑板想法设计了自己的简单文件系统,以提升游戏的运行速度,这些想法都源自于他们在 MULTICS 文件系统上的经验。在团队合作下(当时有六七个贝尔实验室的工程师参与项目),经过一系列的功能添加与改进后,这套东西变成了一个简单的操作系统——使用汇编语言编写的 UNIX 雏形。于此同时,在丹尼斯·里奇的帮助下,肯·汤姆森使用 DEC PDP-7 上的汇编语言重写了「space travel」游戏并使其在 DEC PDP-7 上正常运行。

团队将 Uniplexed Information and Computing Service 命名为 UNICS,与 MULTICS 相比,UNICS 更加的小且每个部件只限完成一件事并把它做好。

  • 1970 年初:面对硬件性能羸弱且过时的 DEC PDP-7,其无法发挥 UNICS 的全部实力,所以当务之急就是换上性能更好的计算机。在当时,肯·汤姆森看上了各个高校以及科研机构最受欢迎的 DEC PDP-10,其性能强悍,肯·汤姆森于是向贝尔实验室申请购买 DEC PDP-10,但因高达 50 w 美元的高昂价格,申请最终被驳回。要想换高性能的计算机,必须首先证明 UNICS 是有用的。

  • 1970 年:贝尔实验室是一个巨大的科研机构,每年都会产出大量的专利,专利申请的文档有非常严格的格式要求,现有的计算机系统无法满足要求,贝尔实验室只能通过购买专门的硬件进行处理,但有些格式与功能依旧无法实现。于是开发小组提议购买一台 DEC PDP-11 并在其上面编写专门用来申请专利的程序。 DEC PDP-11 是当时 DEC 公司新推出的计算机,拥有 24 KB 内存以及 512 KB 的磁盘,但价格只有 PDP-10 的十分之一,相对便宜的价格使领导们通过了小组的提议。开发小组利用 UNICS 创造了许多文档编辑工具,不仅提高了专利申请的效率,还帮助自家技术书籍的出版,这也被证明 UNICX 是有用的。同年,UNICS 被改名为 UNIX。

  • 1971 年:肯·汤姆森和丹尼斯·里奇把之前在 PDP-7 上使用汇编语言编写的 UNIX 雏形移植到了 DEC PDP-11 上。UNIX V1(UNIX 第一版)诞生,11 月 3 日出版了《Unix 程序员手册》(UNIX Programmer's Manual),将 1970-01-01 定义为 UNIX 起始的纪元日期(参考日期)。

  • 1971 年:丹尼斯·里奇开始改进肯·汤姆森的 B 语言。B 语言是一门诞生于 1969 年前后的语言,它是肯·汤姆森在丹尼斯·里奇的支持下被设计出来的。

  • 1972 年:改进的 B 语言被称为 C 语言。UNIX V2(UNIX 第二版) 发布。

  • 1973 年 10 月:在 IBM 举办的操作系统原理专题研讨会上,肯·汤姆森与丹尼斯·里奇发表了一篇论文并展示了 UNIX,这是 UNIX 操作系统首次正式对外界进行展示。

  • 1973 年:C 语言主体完成,这一年,UNIX V4 系统绝大部分都被 C 语言进行重写,这也为后来 UNIX 的可移植性打下了基础(注:早先使用汇编语言编写的 UNIX 特别依赖硬件)。

  • 1974 年 7 月:UNIX 发展到第 5 个版本,肯·汤姆森与丹尼斯·里奇合作在 ACM 通信上发表了一篇关于 UNIX 的论文,UNIX 第 5 个版本以「仅用于教育目的」的协议提供给各大高校作为教学使用,成为当时操作系统课程的范例教材。各大学与公司开始通过 UNIX 源码对 UNIX 进行了各种各样的改进和拓展,这也就是我们现在称呼「UNIX 变体」名称的由来。

信息
UNIX 首次诞生于1969年,是贝尔实验室的员工肯·汤姆森的个人项目,最终的版权归母公司AT&T所有,AT&T 被法院明确禁止从中获利,起因是1958年的和解协议——「AT&T 垄断了美国长途电话业务,该和解协议是为了避免被美国司法部起诉它违反了《反垄断法》而签订的,AT&T 被禁止进入计算机行业,不能销售任何与计算机有关的产品」。UNIX 是计算机操作系统,所以 AT&T 不能销售它,任何要求得到源码的机构,名义上都能免费得到。
  • 1974 年:美国司法部再次起诉AT&T违法《反垄断法》。

  • 1975 年:UNIX 第 6 版发布,这是第一个在贝尔实验室之外被广泛使用的版本。肯·汤姆森从贝尔实验室休假回来,以客座教授来到了自己的毕业大学——加州大学伯克利分校,开始教授操作系统的课程。肯·汤姆森帮助安装了 UNIX 的第 6 版,并开始为该系统实现 Pascal 编程语言。在教授操作系统课程期间,研究生查克·哈利(Chuck Haley)和比尔·乔伊(Bill Joy)帮忙改进了 Pascal 以及文本编辑器。

  • 1977 年: 其他大学对伯克利软件(Berkeley Software)感兴趣,于是比尔·乔伊开始编译第一个伯克利软件发行版(the first Berkeley Software Distribution,1 BSD)。

  • 1978 年 3 月 9 日:1 BSD 发布,大约发出了 30 多份拷贝。请注意!这里的 1 BSD 并不是一个完整的操作系统,而是以一个 UNIX 的附加组件存在,和 AT&T 的代码交织在一起。

  • 1979 年 5 月:2 BSD(the second Berkeley Software Distribution) 发布,大约发出了 75 份的拷贝,包含 1 BSD 软件的更新以及比尔·乔伊开发的两个新程序,这两个新程序依旧被保留在现如今的 UNIX 变体以及各种 GNU/Linux 发行版中—— vi 编辑器和 C Shell 。现如今,人们普遍将 1979 年看做 BSD 诞生的年份。

比尔·乔伊
威廉·纳尔逊·乔伊:BSD操作系统的主要设计者,对C、TCP/IP、NFS拥有令人注目的贡献,是 C Shellvi 等程序的原始作者,SUN微系统公司的建立者之一,设计了Sparc微处理器,是JAVA以及Jini/JAVASpaces的主要作者之一。
  • 1979 年:UNIX 第 7 版发布,该版本是第一个真正意义上的完整 UNIX 操作系统。

  • 1980 年:微软从 AT&T 那里获得授权,准备为英特尔的处理器开发一个全新的操作系统——Xenix,以在个人电脑和微型计算机中使用。

  • 1981 年末:AT&T 的 UNIX 系统组(UNIX System Group,USG)发布了 System III,并于次年对外发布商业版。该版本是各种 AT&T UNIX 系统的混合体。之所以称为 System III(不存在称为 System I 或 System II 的 Unix 版本),是因为这是 UNIX/TS 3.0.1 和 CB UNIX 3 的外部版本,而在之前,UNIX/TS 3.0.1 和 CB UNIX 3 只存在于贝尔实验室 UNICS 内部。

  • 1982 年:从法庭败诉后的新 AT&T 意识到 UNIX 的商业价值,于是开始停止提供 UNIX 的源代码,发布商业版的 UNIX System III,收取高昂的授权费。同时,不再授权高校可以使用免费 UNIX。此时的 UNIX 发展成了两条线路——AT&T 的官方 UNIX 商业版以及 BSD 版。

信息
1982年:哥伦比亚地区法庭判决AT&T败诉,必须被拆成8家小公司(专营长途电话业务的新AT&T公司和其他7个本地电话公司),但这个判决也意味着1958年的和解协议失效,AT&T从此可以进入计算机业。
说明
从20世纪80年中后期开始,伯克利大学(包含学生成立的 BSDI 公司)和 AT&T 围绕着 UNIX 的版权、商标、源代码等问题,展开了多年的官司拉锯战。时间来到 1994 年1月,双方和解,伯克利大学基本胜诉。版权官司结束后的1995年,伯克利大学的CSRG(Computer Systems Research Group)解散,BSD 又开始内部分裂——变成现如今的 FreeBSDOpenBSDNetBSDDragonFly BSD
不断卖身
1993年初,AT&T 将其 USL(UNIX System Laboratories) 卖给了 Novell 公司,该公司的 UNIX 操作系统被称为UNIXWare;1995年,Novell 又把 UNIXWare 的技术和版权卖给了 SCO(Santa Cruz Operation)公司 ;SCO 关于 IBM 抄袭自己 UNIX/UNIXware 的知识产权问题,从2001年打到2021年,期间 SCO 又将资产出售给了 Xinuos 公司。
  • 20 世纪 80 年代中期:为了让程序可以在不同的「UNIX 变体」都能运行,需要统一操作系统接口 API。1988 年,IEEE(美国电气电子工程师学会)将这些标准汇总为 POSIX(Portable Operating System Interface),正式成为行业规范。

UNIX 是一种开放且不断发展的操作系统,在计算机的历史上发挥了重要作用。它已成为许多其他系统的基础,如 GNU/Linux、BSD、Mac OSX 等。直到今天,它仍然很重要。

GNU 计划

  • 1971 年:理查德·马修·斯托曼(Richard Mathew Stallman)开启了他在 MIT 的职业生涯,工作在一个专门使用自由软件的工作小组。在当时,不仅计算机公司经常发布自由软件,而且程序员之间也经常自由相互地合作(如果你对别人的代码感兴趣但不太熟悉,你总是可以得到一份源代码,你可以自由的阅读源代码、修改源代码乃至把代码拆分并用来构建新程序)

  • 1983 年:理查德·马修·斯托曼发起了 GNU(GNU's Not Unix) 计划并成立自由软件基金会。GNU 计划的目的在于建立一个自由的、开放的 Unix 系统,其中比较重要的工具有:gcc 编译器、bash shell、Emacs 编辑器等。

  • 1990 年:我们找到或写出了一个类似 UNIX 操作系统所需的所有主要组件,但唯独缺少一成熟的、自由的内核。

  • 1991 年-1992 年:1991 年,林纳斯·托瓦兹在 1991 年开发了一个类似 UNIX 的 Linux 内核,并在 1992 年将其变成自由软件。将 GNU 的组件与 Linux 内核结合,就形成了一个完整的操作系统——GNU/Linux 系统(也称 GNU/Linux 发行版)。

GNU 计划不仅是开源事业的基石,其特有的 GPL 开源许可证协议 也帮助了开源软件的发展,今天我们熟知的 RHEL 就采用了该开源许可证协议。

MINIX

  • 1987:由前面可知,1982 年,AT&T 的 UNIX 就化身成了商业版,不仅需要付费购买,而且不允许自由传播以及复制。受 BSD 的影响,民间高手纷纷写出自己的类 UNIX。出于教授操作系统课程的教学目的,荷兰大学的一位教授 Andrew S. Tanenbaum 开发出了 MINIX(一种简化版的 UNIX,参考了当时 UNIX 的第 7 个版本),学生可以阅读并完全获取该操作系统的源代码。现如今,你依旧可以下载到最新版本的 MINIX —— http://www.minix3.org/

Linux

  • 1991 年:一名芬兰赫尔辛基大学的大学生林纳斯·托瓦兹(Linus Torvalds),专业为计算机,当时学习的操作系统是 MINIX。后来,Linus 和一些爱好者,以 MINIX 为模板,利用 bash、gcc 等工具,结合自己的补丁和其他人的补丁,写出了第一版本的 Linux 内核(符合 POSIX 标准),同时放到网上供人们下载、学习、改进等。9 月,Linux 内核版本 0.01 在芬兰大学和研究网络(FUNET)的 FTP 服务器(ftp. Funet. Fi)上发布,它有 10239 行代码。10 月,0.02 版本的内核发布了。12 月,0.11 版本的内核发布。

  • 1992 年 2 月:发布 0.12 版本并采用了 GNU 通用公共许可证(GPL),而在此之前的版本是不允许商业再分发的。
  • 1994 年 3 月 14 日:Linux 内核 1.0.0 版本发布。

把 Linus 叫做 Linux 之父其实并不准确,确切的说法是 Linus 对 Linux 内核的贡献度最大。

信息
区别于 GNU HURD 微内核,Linux 内核采用的是和 UNIX 一样的宏内核架构,即将文件系统、IPC、虚拟内存、驱动、内存管理、进程管理、线程管理等很多东西集成到内核,说人话就是耦合度高。
  • 1993: 创建 Debian 发行版。 Debian 是一个基于社区的非商业发行版。最初是为了在服务器上使用而开发的,其非常适合这一角色;然而,它是一个通用的系统,所以也可以在个人计算机上使用。 Debian 是许多其他发行版的基础,比如 Mint 或 Ubuntu 。

  • 1994:商业发行版 Red Hat 是由 Red Hat 公司创建的,该公司现在是 GNU/Linux 操作系统的领先经销商。Red Hat 公司支持社区版 Fedora 以及最近的免费发行版 CentOS。

  • 1997:创建 KDE 桌面环境。它基于 Qt 组件库和 C++ 开发语言。

  • 1999:创建 GNOME 桌面环境。它基于 GTK+ 组件库。

  • 2002:创建 Arch 发行版。它的独特之处在于它提供滚动发布(持续更新)。

  • 2004:Canonical 公司(Mark Shuttleworth)创建 Ubuntu。它基于 Debian,但包括自由和专有软件。

  • 2021:基于 Red Hat 发行版创建 Rocky Linux。

架构设计

  • kernel 是首要的软件组件。

    • 它是 GNU/Linux 系统的核心。
    • 它管理系统的硬件资源。
    • 其他软件组件必须通过它才能访问硬件。
  • shell 是一个解释并执行用户命令的工具。

    • 主要的 shell:Bourne shell、C shell、Korn shell 和 Bourne-Again shell (bash)。
  • Applications 是用户程序,包括但不限于:

    • 互联网浏览器
    • 文字处理程序
    • 电子表格

多任务

GNU/Linux 属于分时操作系统家族。它在几个程序之间分配处理时间,以对用户透明的方式从一个程序切换到另一个程序。这意味着:

  • 同时执行多个程序。
  • 调度程序分配 CPU 时间。
  • 减少由失败的应用程序导致的问题。
  • 在程序运行过多的情况下降低性能。

多用户

MULTICS 的目的是允许多个用户在一台计算机上(当时非常昂贵)通过多个终端(屏幕和键盘)工作。受这种操作系统的启发,GNU/Linux 保留了这种同时让多用户一起独立工作的能力,每个用户都有自己的用户帐户、内存空间以及对文件和软件的访问权限。

多处理器

GNU/Linux 能够在多处理器计算机或多核处理器上工作。

多平台

GNU/Linux 是用高级语言编写的,在编译过程中可以适应不同类型的平台。这允许它运行在:

  • 家用电脑(个人电脑或笔记本电脑)
  • 服务器(数据、应用程序)
  • 便携式电脑(智能手机或平板电脑)
  • 嵌入式系统(车载电脑)
  • 有源网络元件(路由器、交换机)
  • 家用电器(电视、冰箱)

开放

GNU/Linux 基于 POSIXTCP/IPNFSSamba 等公认的标准,这些标准允许 GNU/Linux 与其他应用程序系统共享数据和服务。

UNIX/Linux 哲学

  • 一切皆文件。
  • 重视移植性。
  • 做一件事且把它做好。
  • KISS 原则:保持简单化和傻瓜化。
  • "UNIX 基本上是一个简单的操作系统,但你必须是一个天才才能理解它的简单性。" (Dennis Ritchie)
  • "UNIX 对用户是友好的,只不过他在对哪个用户友好的问题上,用情比较专一而已。" (Steven King)

桌面环境

有许多图形环境,如 GNOMEKDELXDEXFCEUnityMateCinnamon 等。每个桌面环境都有自己的东西,它们的人机交互设计可与微软或苹果系统相媲美。

自由/开源

Microsoft 或 Mac 操作系统的用户必须购买许可证才能使用其操作系统。尽管许可证通常是透明的(许可证的价格包含在电脑的价格中),但它是有成本的。

GNU/Linux世界中,自由软件运动提供了大部分的自由发行版。

自由 并不意味着免费!

开源:可获取源代码,因此可以在特定条件下查阅和修改它。

自由软件必然是开源的,但反之则不然,因为开源软件与 GPL 开源许可所提供的自由是分开的。

GNU GPL (GNU 通用公共许可证)

GPL 保证软件的作者拥有其知识产权,但允许第三方修改、再分发或转售软件,前提是软件需要包含源代码。 GPL 是来自 GNU(GNU is Not UNIX)项目的许可证,该项目在创建 Linux 时起到了重要作用。

这暗示着使用者可以:

  • 有出于任何目运行程序的自由。
  • 研究程序如何工作并根据需要进行调整的自由。
  • 重新分发副本的自由。
  • 为了整个社区的利益,有改进且发布这些改进的自由。

另一方面,即使是在 GPL 许可下的产品也可以有付费。但这并不是为产品本身付费,而是 保证开发团队将继续致力于该产品,以使其发展和排除错误,甚至为用户提供支持

使用领域

GNU/Linux 发行版在以下方面表现出色:

  • 服务器:HTTP、电子邮件、群件、文件共享等。
  • 安全:网关、防火墙、路由器、代理等。
  • 中央计算机:银行、保险、工业等。
  • 嵌入式系统:路由器、网络盒子、智能电视等。

简而言之,GNU/Linux 几乎可以做任何事情,这也就解释了特定发行版的数量。

Shell

概述

shell 称为 命令接口,允许用户向操作系统发送命令。由于图形界面的实现,它在如今已经不是那么明显了,但在 GNU/Linux 系统上仍然是一种特权手段,GNU/Linux 系统并非都具有图形界面,并且其服务并不总是存在设置界面。

它提供了一种真正的编程语言,包括经典结构(循环、选择)以及常见组成部分(变量、参数传递和子程序)。它允许创建脚本以自动执行某些操作(如备份、创建用户、系统监控等)。

根据用户的喜好,平台上有几种类型的 shell 可供使用和配置: 以下是一些例子:

  • sh,POSIX 标准 shell
  • csh,C 语言中面向命令的 shell
  • bash,Bourne-Again Shell,Linux shell
  • zsh
  • ps, PowerShell
  • tcsh

功能

  • 命令执行(检查给定的命令并执行它)。
  • 输入/输出重定向(将数据返回到文件而不是将其打印在屏幕上)。
  • 连接过程(管理用户的连接)。
  • 解释型编程语言(允许创建脚本)。
  • 环境变量(在操作期间访问系统特定的信息)。

参考资料

用一杯咖啡支持我们,每一篇 [文档] 都经过我们实操,并非从网上一味的copy,期间花费了大量的心思,希望能够帮忙到您。

评论

  1. ttyhtg
    7月前
    2023-12-09 22:01:40

    好文章,用心了

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇