Linux发行版
Linux系统是一个自由软件的操作系统,它的内核是Linux内核,由芬兰计算机科学家Linus Torvalds在1991年发布。Linux系统的内核是自由软件,因此任何人都可以基于Linux内核发布自己的操作系统,这些操作系统就是Linux发行版。
文件系统
文件系统在任何一个计算机系统中都是核心功能之一,不同操作系统会使用不同的文件系统,这里我们通过对比Windows系统和Linux系统,来简单了解一下Linux系统中的文件结构。
目录树
计算机中的各种工具、软件程序、数据等都是以文件方式存储的。这些文件大部分存储在计算机的硬盘上,通常以树状结构组织起来,例如在Windows系统中,文件系统的目录树可能如下所示:
|
|
以下是Windows系统中一些比较重要的目录:
-
用户根目录
Windows系统的用户根目录在
C:\Users\
文件夹下,每个用户有一个文件夹,例如我的用户根目录是C:\Users\lijin
。在命令行中,用户根目录可以用~
表示。用户根目录下一般存储用户的个人文件,例如个人的文档、照片、音乐、电影等可以分类存储到用户根目录下的
Documents
、Pictures
、Music
、Videos
等文件夹下。只限当前用户使用的程序一般安装到用户根目录的
AppData
文件夹内,这个文件夹系统默认是隐藏的,用户在一般情况下不应该动这个文件夹。 -
Windows系统目录
Windows系统的系统根目录是
C:\Windows
,操作系统和系统级的软件工具都在这个目录下,用户不应该轻易动这个文件夹,否则可能会损坏系统。 -
应用程序目录
用户一般可以将程序安装到
C:\Program Files (x86)
和C:\Program Files
下,其中C:\Program Files (x86)
一般安装32位程序,C:\Program Files
安装64位程序。安装到这两个目录下的程序对于当前计算机的所有用户都是可见的。但有些商用软件可能会限制使用者,未注册的用户虽然可以看到该软件但却有可能无法运行使用。
在Linux系统中,文件系统的目录树可能如下所示:
|
|
以下是Linux系统中一些比较重要的目录:
-
用户根目录
Linux系统的用户根目录在
/home/
文件夹下,每个用户有一个文件夹,例如我的用户根目录是/home/lijin
。用户根目录下一般存储用户的个人文件,例如个人的文档、照片、音乐、电影等可以分类存储到用户根目录下的
Documents
、Pictures
、Music
、Videos
等文件夹下。只限当前用户使用的程序一般安装到用户根目录的
AppData
文件夹内,这个文件夹系统默认是隐藏的,用户在一般情况下不应该动这个文件夹。 -
Linux系统目录
Linux系统的系统根目录是
/sys
,操作系统在这个目录下,用户不应该轻易动这个文件夹,否则可能会损坏系统。 -
应用程序目录
用户一般可以将程序安装到
/opt
下。 -
库目录
系统默认的一些运行库和工具软件一般在
/usr
下,用户在一般情况下不应该动这个文件夹。
注意:
- 在Windows系统中,路径是带盘符的,例如
C:
表示磁盘C下的路径;而Linux系统中一般不用字母表示的盘符。 - 在Windows系统中,目录分隔符是反斜杠
\
;在Linux系统中,目录分隔符则是斜杠/
。
磁盘分区
对于机械硬盘而言,存储空间的起点在圆盘的外圈,磁头读取数据时也是从外圈开始寻址,位于磁盘外圈的数据访问速度较快。所以我们往往将硬盘进行分区,位于外层的分区用来安装操作系统和软件,内层的分区用来放数据文件,这样可以让系统和软件运行比较流畅。
而对于固态硬盘而言,硬盘各部位的数据访问速度都差不多,因此单就访问速度而言,固态硬盘一般没有必要进行磁盘分区。
除了区分访问速度的不同,硬盘分区的另一个作用是隔离各个分区的数据。例如将操作系统和用户的电影音乐等文件放置在不同分区,这样当需要重新安装操作系统时,只需要格式化操作系统所在的分区,用户的个人文件不会受到影响。
挂载点
在Linux系统中,存储设备需要挂载(mount)到文件目录树的某个位置,这个位置就是挂载点。例如在手动分区并安装Linux系统时,我们往往会创建home
、swap
、usr
等分区,这些分区将被自动挂载到系统根目录/
下。如果我们给计算机外接一个硬盘或U盘,则这个硬盘或U盘一般会被挂载到/mnt/
下。
需要注意的是,挂载的存储设备不一定非得是一块真实的硬盘,也可以是网络云盘、远程的计算机,甚至是本电脑上的一个虚拟的光盘文件!例如在数年前,不少计算机软件或操作系统都存储在光盘上,用户可以购买存储有某个软件的光盘,然后用电脑上的光盘驱动器读取安装软件或操作系统。然而现在许多笔记本电脑为了做得轻便,都取消了光盘驱动器,用户也基本不再购买软件光盘了,取而代之的是在网上下载安装包,而有不少安装包依旧以光盘文件的格式来存储软件,这时用户就可以通过虚拟光驱将这个“虚拟的光盘”挂载到电脑上。
软件安装与管理
我们选择使用某个操作系统的原因可能很多,但有一条原因往往是普遍的,那就是可以方便地使用这个操作系统上的一些特色软件。在安装了某个操作系统之后,我们往往还需要安装各种软件才能真正让这个操作系统发挥它的作用,成为生产力工具。
在大多数用户都熟悉的Windows系统上,我们可以在一些软件应用商店安装某个软件,或者到某个软件的官网下载安装包,双击安装包来安装。但这些都需要在图形界面上点击来完成,但对于某些Linux(例如在Windows上安装的WSL,或者学校的计算集群)而言,我们可能并没有一个可用的图形界面,这时我们就需要熟悉在命令行界面下安装软件的技巧。这里我们介绍在Linux命令行下三种常见的软件安装方法:
- 使用包管理工具
- 手动下载安装包
- 从源码编译安装
使用包管理工具
图形化的操作系统上往往会配备“应用中心”等图形化的软件管理工具,在命令行化的界面上,我们也可以有类似“应用中心”的软件包管理工具。下面以Debian系(包括Debian、Ubuntu、Deepin等系统)常用的包管理工具APT来简单介绍一下在Linux命令行界面内安装软件的方法。
APT简介
APT是Advanced Packaging Tools(高级打包工具)的缩写,是在Debian系操作系统中最常用的包管理工具,它可以自动下载、配置以及安装很多软件包。通常情况下,我们在命令行内通过apt
或apt-get
等命令来使用APT,但需要注意的是,除此之外,APT还可以通过aptitude、Synaptic、GNOME软件商店等前端来使用。这里我们只介绍通过apt
命令使用APT的方法。
使用apt
命令管理软件
-
搜索软件包
1
apt search software_name
-
显示软件包详情
1
apt show software_name
-
安装软件包
1
apt install software_name
-
卸载软件包
1
apt remove software_name
-
卸载软件包并删除配置文件
1
apt purge software_name
-
自动删除不需要的软件包
1
apt autoremove
-
更新软件仓库
1
apt update
-
升级软件仓库
1
apt upgrade
使用以上命令安装、更新或卸载软件时可能需要sudo
权限。
手动下载安装包
有些软件可能不在APT仓库里,无法直接通过APT安装。不过开发者可能提供.deb
或.rpm
格式的安装包,.deb
格式的安装包一般在Debian系系统中使用,.rpm
格式的安装包一般在Red Hat系系统(Red Hat、CentOS、Fedora等)中使用。
例如文本编辑器Visual Studio Code (VS code)就不在APT仓库里,想要在Linux下安装,我们就需要下载它的安装包。
下载完成后,进入存放安装包的文件夹,执行下面的命令就可以安装了:
|
|
从源码编译安装
从源码编译安装的情形一般有3种:
- 有些软件可能连安装包都不提供,开发者只提供源代码,这是我们就需要从源码编译安装。
- 通过APT和安装包安装都需要
sudo
权限,而有时候我们并没有sudo
权限。例如在学校的计算集群上时,我们的账户只是普通用户,没有管理员权限,所以无法使用sudo
。 - 我们需要对软件做一些改动以满足自己具体的需求,这时需要先更改源代码,再自己编译安装。
例如很多Linux用户喜欢使用zsh,而在学校的计算集群上往往只提供bash,且用户没有管理员权限无法使用包管理工具或者安装包直接安装zsh。这时如果依旧想要使用zsh,就需要用户自己从源码编译安装。
图形界面GUI
在Windows系统和macOS系统中,我们通常通过鼠标点击来操作电脑,这种操作方式叫做图形用户界面(Graphical User Interface,GUI),图形界面可以说是Windows和macOS系统的标志,也为计算机在普通人中的普及起到了巨大的作用。
而在Linux系统中,图形界面长久以来未受到足够的重视,这也是Linux系统在普通人中难以普及的原因之一。尽管如此,近年来Linux系统的图形界面还是取得了不小的进步,现在的Linux系统图形界面也越来越美观、易用。
在Windows系统和macOS系统中,图形界面是固定的,也是默认开启的,用户可以开箱即用。而在Linux系统中,图形界面不是必须的,用户可以选择是否安装图形界面,也可以选择安装不止一个图形界面。我们接下来简单介绍一下Linux系统中的图形界面。
Linux图形界面——堆叠式窗口管理器和平铺式窗口管理器
按照操作习惯来分,Linux系统中的图形界面可以分为两大类:堆叠式窗口管理器(Stacking Window Manager)和平铺式窗口管理器(Tiling Window Manager)。
堆叠式窗口管理器
堆叠式窗口管理器是最常见的窗口管理器,它的窗口可以重叠在一起,用户可以通过鼠标点击来切换窗口。常见的堆叠式窗口管理器有GNOME、KDE、Xfce等。
堆叠式窗口管理器也是最常见的桌面环境,包括Windows和macOS系统的图形界面都使用堆叠式窗口管理器。
-
GNOME
GNOME是一个自由软件的桌面环境,它的设计理念是简洁、易用。GNOME的界面风格简洁大方,用户可以通过GNOME的扩展来定制自己的桌面环境。
GNome是很多发行版的默认桌面环境,例如Ubuntu、Fedora等。
-
KDE
KDE是另一个自由软件的桌面环境,它的设计理念是强大、灵活、可定制性强。KDE的界面风格更加华丽,用户可以通过KDE的设置来定制自己的桌面环境。
KDE也是很多发行版的默认桌面环境,例如Kubuntu、openSUSE等。
平铺式窗口管理器
平铺式窗口管理器的窗口一般不重叠在一起,而是平铺在屏幕上,用户可以通过快捷键来切换窗口。常见的平铺式窗口管理器有i3、dwm、bspwm、Hyprland等。
平铺式窗口管理器并不是很常见,一般只有一些专业用户或者极客用户会使用。其特点是很多操作都可以通过快捷键来完成,而且几乎所有设置都可以由用户自定义,因此用户可以高度定制,排除不需要的功能,保持系统的简洁。并且几乎所有操作都可以按照用户自己习惯的方式来配置,因此可以大大提高熟练用户的工作效率。
-
i3
i3是一个自由软件的平铺式窗口管理器,它的设计理念是简洁、高效。i3的界面风格简洁大方,用户可以通过i3的配置文件来定制自己的桌面环境。
-
Hyprland
Hyprland是一个自由软件的平铺式窗口管理器,基于Wayland。它的设计理念是简洁、高效。Hyprland的界面风格简洁大方,内置的窗口切换动画非常优雅流畅。目前Hyprland还在开发中,但已经受到了很多极客用户的喜爱。
Linux图形界面——X Window系统和Wayland
在Linux系统中,图形界面的实现主要有两种技术:X Window系统和Wayland。要想知道自己的Linux系统使用的是哪种技术,可以在终端输入echo $XDG_SESSION_TYPE
,如果输出x11
,则表示使用的是X Window系统;如果输出wayland
,则表示使用的是Wayland。
X Window系统
X Window系统是一个自由软件的图形窗口系统,它是Linux系统中最常用的图形窗口系统。X Window系统的设计理念是基于服务端-客户端的架构,服务端负责管理硬件设备,客户端负责绘制图形界面。
需要注意的是,X Window系统中客户端和服务端的定义与传统意义上的客户端和服务端不同。例如如果你有一台电脑A在远程,然后你在本地的电脑B上使用ssh登录到电脑A,而且在电脑B上显示了电脑A的图形界面。 这时对于ssh服务来说,电脑A是服务端,电脑B是客户端;但对于X Window系统来说,电脑A是客户端,电脑B是服务端。 因为对X Window系统来说,你在电脑B上起了一个X Window服务,而电脑A上的程序是客户端,通过这个服务来显示图形界面。
X Window系统是在1984年发布的,而后快速迭代,不断发布新的版本。到1987年,X Window系统的第11个版本发布,自此版本之后,X Window系统的标准就基本固定下来了,因此我们通常称X Window系统为X11。
Xorg是X11的一个实现,也是Linux系统中最常用的X11实现。
Wayland
随着硬件的发展和用户需求的变化,X Window系统的一些设计理念逐渐显得过时,例如X Window系统的设计理念是基于服务端-客户端的架构,这种架构在现代硬件上显得有些过时,因此一些开发者开始尝试设计新的图形窗口系统。
Wayland是一个自由软件的图形窗口系统,它的设计理念是简单、高效。Wayland的设计理念是基于内核-客户端的架构,内核负责管理硬件设备,客户端负责绘制图形界面。
Wayland的设计理念更加现代化,因此在一些新的Linux发行版中,例如Fedora、Arch Linux等,Wayland已经取代了X Window系统成为默认的图形窗口系统。
而且Wayland对高分辨率屏幕(HiDPI)的支持更好,有些基于X11的软件在高分辨率屏幕下的显示过小,而如果通过缩放来解决这个问题,会导致图形界面模糊,而Wayland则可以更好地支持高分辨率屏幕。