当前位置: 首页 > news >正文

Linux 是什么?初学者速查表

大家好!我是大聪明-PLUS

什么是 Linux?


您好!本文旨在系统化地讲解一些 Linux 基础知识。对于那些对 Linux 系统经验很少甚至完全没有,不知从何入手,但想尝试一下(无论是自己尝试还是出于操作原因)的高级用户、开发者和 Windows 管理员来说,它或许会有所帮助。每个部分并非包含详尽的信息,而是提供进一步探索的起点(可能需要通过 百度 搜索)

什么是 Linux?



如今,当人们听到 Linux 这个名字时,他们想到的是以下两种情况之一:

  1. 基于 GNU/Linux 的操作系统,或者说,发行版。最受欢迎的有 RedHat/CentOS、Debian、Ubuntu 等等。KDPV 上展示了其中一小部分 :)
  2. Linux 内核以及可选的 GNU coreutils 程序套件。



关于内核,

我先简单介绍一下 GNU/Linux 内核。

首先,你应该知道所有操作系统内核都分为三种类型:

  • 微内核;
  • 整体式(Linux);
  • 混合(OS X、Windows 7)。



单片机和微内核之间的主要区别在于微内核仅包括:

  • IPC(进程间通信系统)、内存管理、调度程序和分派程序。



而单片内核还包括:

  • 文件系统、驱动程序、VFS(对于 Linux 内核而言)。



Linux 内核负责:

  • 流程管理。
  • 内存管理。
  • 与设备交互(通过驱动程序)。
  • 系统调用和安全。



用户启动的所有程序都在所谓的用户空间中运行。这些程序通过系统调用接口 (SCI) 与内核交互。内核还限制用户程序对 CPU 和内存的访问,而内核代码可以不受限制地访问计算机资源。所有用户程序都使用进程间通信 (IPC) 相互通信。

尽管大多数人认为内核是单片的,但它使用模块。模块可以是内置的,也可以是可加载的。可加载模块可以在操作系统运行时启用或禁用。

GNU 核心实用程序 (coreutils)


GNU 核心实用程序 (coreutils) 是几乎所有 GNU/Linux 发行版中都有的一组程序和系统实用程序。它包括:

相当多的实用程序


我的同事一直要求我添加以下内容:您可以随时通过输入“man name_of_the_tool”来获取帮助。另一种选择是“name_of_the_tool --help”,这几乎是所有 CLI(命令行界面)实用程序的标准配置。最后,查找命令文档的另一个方法是输入“info name_of_the_tool”。

现在我们对内核和系统实用程序有了一些了解,在开始使用 GNU/Linux 机器之前,我们需要熟悉一些其他内容,并且可能值得从执行上述所有程序的环境——Bash 命令行开始。

Bash 是一个命令行解释器。


现在我想介绍一下 Linux 中的命令行。命令行是输入命令的界面,而 Bash 是一个 Shell 和命令解释器。大多数人都熟悉 DOS、Windows 中的 command.com,或者更新更高级的 PowerShell,但 Linux 的惊喜在于:它有如此之多的解释器。它有各种各样的解释器,有的简单,有的复杂,有的体积小巧,等等。事实上,如果你使用 Linux 服务器,你肯定会用到其中一种解释器。

多年来,Bash 一直是 Linux 发行版的默认 Shell,并在 RHEL/CentOS、Oracle Linux 等系统中使用。但它也有流行的替代方案:Dash(Debian、Ubuntu)、zsh 等。它们通常彼此相似,因为它们都支持 POSIX 标准,但在细节上略有不同。Bash是 Bourne Again Shell,其名称与 Bourne(出生)一词双关。 Bourne 是原始 Bourne shell(1979 年)的作者,该 shell 是针对 Unix 7 版的,简称为 shell。Bash 的第一个版本由 Brian Fox 编写,并于 1989 年发布,旨在用开源产品取代专有的 Bourne Shell。Bash 在保持与原始 shell 兼容性的同时,引入了许多新功能,并借鉴了其他项目的理念。例如,history 命令就是从 csh 和 ksh 项目中“借用”的。

包管理系统



在 Windows 上,你通常会访问网站,下载程序或安装程序的 .exe 文件,然后复制或安装它。而在 Linux 系统上,这通常以不同的方式进行。虽然你仍然可以下载文件并安装它,但这被认为是最不流行的安装方法。

最流行的安装方法是使用包管理系统进行安装。

以下任何一种方法都会执行以下操作:

  1. 安装软件包(程序),包括其依赖项。
  2. 更新它们。
  3. 卸载它们。



我为什么要特别提到安装依赖项?事实上,Windows 程序通常将其依赖项(例如 *.dll 文件)存储在与程序相同的文件夹中,而在 Linux 系统上,依赖项会安装在所有程序的共享目录中,以便后续重复使用这些依赖项和库。通常,Linux 上库文件的扩展名是 *.so。

当然,随着 .Net Framework 的出现,这个问题变得容易得多,从而减少了所需依赖项的数量,但无论如何,Windows 系统就是这样运作的。Linux的风格是编写精简的小程序,只做好一件事。这也是依赖项数量众多且难以管理的原因之一。GNU/Linux 有两种最流行的软件包管理系统。

第一种是 Yum(或 DNF)。它使用 RPM(RPM 软件包管理器)软件包管理器。它用于以下发行版:

  • RedHat Enterprise Linux/CentOS
  • Fedora
  • Oracle 企业 Linux
  • SUSE/OpenSUSE(可选,本机是 zypper)



第二个是 Apt。它使用 dpkg 作为包管理器。使用它的最流行的发行版有:

  • Debian
  • Ubuntu
  • Linux Mint



Slackware 和 Arch 使用它们自己的软件包管理器:slackpkg 和 pacman。

每个预装了软件包管理系统的 Linux 系统都包含预配置的 Internet 存储库(或者,正如他们所说,repos — 这是行话)。系统管理员也可以轻松添加自己的存储库。

最后,如果您发现自己处于隔离网络中,则可以使用软件包管理器从安装文件安装程序包。

rpm -i filename.rpm

这将在 RHEL/CentOS、Fedora、Oracle Linux、SUSE/OpenSUSE 上安装软件包。

这将在 Debian、Ubuntu、Linux Mint 上安装软件包 。PC 用户的另一种选择。最近,一些最终用户软件开发人员决定使用独立于发行版的软件包管理器。为此,所有依赖项都打包到一个文件中。最受欢迎的选项是 Snap、Flatpak 和 AppImage。前两者提供了通过其存储库下载更新来更新已安装软件的功能;AppImage 没有此功能。Snap 从 16.04 LTS 开始预装在 Ubuntu 中。
dnf install https://mirror.yandex.ru/epel/9/Everything/x86_64/Packages/e/epel-release-9-3.el9.noarch.rpm
dnf install ./skype.rpm



dpkg -i filename.deb


apt install ./filename.deb





初始化系统



另一个不属于内核但重要性仅次于内核的子系统是 init 系统,它用于初始化用户空间并管理用户进程。

这里有几种替代方案;让我们概述一下最受欢迎的几种:

  • SysVinit(sysvinit、sysv,或简称“init”)是 UNIX System V 操作系统中 init 系统的直接继承(移植)。在过去 20 多年(1991-2011 年)中,它一直是最受欢迎的 init 系统。
  • Upstart 是第一个成功替代 SysVinit 的尝试,它解决了 SysVinit 的缺点,但后来它的受欢迎程度逐渐下降。Upstart 最初由 Canonical 于 2006 年开发,目前唯一使用它的操作系统(虽然不是 GNU/Linux)是 Chrome OS。
  • OpenRC 是 sysvinit 的一个轻量级、简单的替代方案。它被用在 Gentoo Linux、Alpine Linux 和其他一些轻量级发行版中。
  • systemd 是目前大多数 Linux 发行版的解决方案。



Slackware 是一款流行的发行版,它使用类似于 BSD 的 init 系统,与众不同。

在 Linux 中,所有进程都有一个进程 ID (PID)。启动时,内核会初始化所有内部结构,并启动第一个 PID 为 1 的用户空间进程——通常,这就是 init 系统。它还充当所有用户进程的父进程。顺便提一句,Linux 的一个实用功能是不仅显示进程本身的 PID,还会显示其父进程。您可以像这样查看父进程:
ps -efj

进程终止时,有时会留下没有父进程的进程(从技术上讲,init 成为它们的父进程)——这些进程称为孤立进程,表示系统可能存在问题。您可能遇到的另一个问题是显示为Terminated终止状态的进程。这些进程又称为僵尸进程。

系统



您可能会用到这个 init 系统。首先要用到的是 systemctl 和 journalctl 这两个实用程序。前者的语法相当简单
systemctl command service。例如, [systemctl]systemctl status networking将显示网络接口守护进程(服务)的当前状态。[ systemctl restart mysqlsystemctl] 将重新启动 MySQL 服务器守护进程。[systemctl] 将停止或启动指定的守护进程。

为了进行调试,您需要经常检查日志中的错误
journalctl -xe

[systemctl] 可用于将常规程序转换为服务。

首次登录 Linux 服务器


当然,您可以使用键盘、鼠标和显示器连接到服务器。但是,大多数人都是远程连接到服务器。sshd 服务(ssh 守护进程或 ssh 服务器)就是为此目的而生的。它监听 TCP 端口 22,并允许使用登录名、密码和密钥进行连接。登录设置取决于具体的安装。Windows10 自某个时间点起就内置了 ssh 客户端。对于旧版本的 Windows,可以使用 Putty 客户端——一个用于登录远程 Linux 服务器的小型、简单且免费的客户端。需要注意的是,Putty 无法使用常规密钥对登录,需要 .ppk 格式的密钥。

如果要设置基于密钥的登录,则需要生成一个密钥对(私钥和公钥),并将远程服务器上的公钥内容输入到位于 .ppk 文件夹中的 authorized_keys 文件中~/.ssh。~ — 表示用户的主目录,“。” — 表示该文件或文件夹是隐藏的。如果该文件夹不存在,您需要使用命令 创建它mkdir .ssh,使用命令 访问它cd .ssh,然后创建文件vi authorized_keys。重要提示:要退出 vi 文本编辑器,请按esc,然后键入:wq(exit with write)。之后,您需要使用命令 设置此文件的正确权限chmod 0600 authorized_keys。其中 0600 表示所有者用户可以读取(4)和写入(2),因此总共 6 个权限,而其所​​在组的用户(0)和其他用户(0)均不允许对此文件执行任何操作。
还有一种“人性化”的方法:ssh-copy-id

此外,权限系统还可以指示文件的可执行性(1)。例如,一个用户可以允许其他用户运行某个文件,则权限为 0755 — 即他拥有完全权限(4+2+1),其他用户可以读取(4)并运行(1)该可执行文件。

权限通常以文本形式表示。因此,rwx 表示 7,rw- 表示 6,rx 表示 5,依此类推。例如,r--r--r-- 表示 444——该文件对所有用户(包括所有者)都是只读的。

用户管理



大多数情况下,新服务器都会被分配一个 root 帐户,该帐户被视为超级用户(Linux 术语中称为“admin”)。但是,强烈建议不要在日常操作中使用 root 用户。为此,您需要学习如何管理用户。这非常简单明了:

  • useradd— 创建新用户,-d 开关允许您指定主目录;
  • usermod- 更改用户;
  • userdel -r— 删除用户及其主文件夹;
  • passwd $username— 更改用户密码。



有一个命令chage (-l)允许您设置(查看)密码有效期,还有一个选项可以完全阻止用户或仅阻止用户登录(行为和确切命令取决于分布)

网络



以前,net-tools 是最流行的网络实用程序包。它提供了诸如 ifconfig(用于查看网络接口)、netstat(用于查看网络连接)等实用工具。但时代变了,现在 net-tools 不再是默认安装的

,而是被更现代的 iproute2 包取代。

因此,ifconfig它被ip addrip link、取代ip -s
arpip n
iptunnel、、取代。它被、、、取代。设置和配置网络适配器有几个“基本”选项,因此最好在您的发行 版中查找如何具体执行此操作(记住指定其版本)。ip tunnel例如 ,在 RedHat 中,接口设置位于。 在较旧的 Ubuntu 系统中, 而在较新的系统中,一切都是通过 netplan 实用程序完成的,配置文件本身可以在这里找到: 某些系统(并非全部)安装了NetworkManager,然后可以在这里找到静态配置文件: 您可以检查是否已安装 NetworkManager,如下所示:或者 在遗嘱中,我被要求提及(嗯,systemd-networkd。已更正,我提到了它。 还值得注意的是内置防火墙 - 旧系统使用 iptables,它为 Netfilter 内核组件定义规则;现在建议使用 ufw 实用程序(一个 iptables 附加组件),因为它具有更加用户友好的界面。iwconfigiwnameifip link
netstatss
netstat -rip route
netstat -iip -s link
netstat -gip maddr



/etc/sysconfig/network-scripts/

/network/interfaces

/etc/network/interfaces


/etc/NetworkManager/NetworkManager.conf

/usr/sbin/NetworkManager --versionnmcli --version






FHS — 文件系统层次结构标准


我以前很喜欢 Windows 的简洁。A:\ 用来放软盘(没错,我年纪大了),C:\ 用来放系统盘,而且通常它是唯一一个驱动器(如果不是,D:\ 用来放游戏发行版、照片和视频),最后 E:\ 用来放 CD-ROM。就是这么简单!

现在我来给你展示一下大多数发行版中都能找到的最低配置,哈哈:

/
/boot — 引导加载程序文件
/dev — 设备文件
/root — root 用户的主文件夹(可选)。可以与 /home/root 链接
/etc — 存储机器配置
/home — 用户“hamsters”的根目录
/lib — 存储重要的共享库和内核模块
/media — 可移动驱动器的挂载点
/mnt — 临时挂载文件系统(闪存驱动器、外部驱动器、网络驱动器)的挂载点
/usr — 存储用户安装的软件
/opt — 也存储用户安装的软件
/var — 存储非静态内容。例如,日志 /var/logs
/sbin — 系统可执行文件
/bin — 共享可执行文件
/srv — 用于存储服务数据(例如 Web 服务器)
/tmp — 临时分区;其中的数据在服务器重启、用户注销、服务关闭等情况下会被删除。

大多数文件可以根据两个标准分为四类:
“可共享”和“不可共享”。可

共享文件存储在一台机器上,可以从其他机器访问。“不可共享”文件不用于共享访问。“

静态”和“可变”。

“静态”文件包括库、二进制文件、文档和其他仅在系统管理员干预下才会更改的文件。

“可变”文件是指非静态文件,可以在系统、用户或程序运行期间进行修改。例如,在组织备份时,此类文件需要更频繁的备份计划。

理解这一概念将有助于理解标准文件系统的层次结构和组织结构。

此外,还值得一提的是 inode(文件描述符)。它们包含正在创建的文件的元数据。在某些安装中,如果您向磁盘写入大量小文件(例如聊天记录),它们可能会耗尽。虽然可能有足够的可用空间,但您将无法创建新文件。您可以使用以下命令检查当前状态df -hTi

我还想指出的是,虽然 NTFS 是 Windows 的默认文件系统,但 Linux 有更多选择。常用的文件系统包括 ext3、ext4、xfs 和 btrfs。每种文件系统都用于特定的发行版,并且各有优缺点。

窗口服务器/显示系统


好吧,既然你已经了解了命令行,你可能会想:“啊哈,这就是 Linux 在普通用户中不受欢迎的原因!” 幸运的是,原因并非如此。Linux 目前有两种流行的显示服务器:X11(虽然比较老旧,但仍然是最受欢迎的选择)和 Wayland。后者已经实验了大约十年。桌面环境 (DE) 安装在显示服务器上,而且有很多。最受欢迎的有 Gnome、KDE、Unity 等等。安装了显示服务器和桌面环境后,系统看起来几乎就像一台普通的 PC,包含窗口、桌面、面板等等。

http://www.dtcms.com/a/392501.html

相关文章:

  • openharmony之AV_CodeC音视频编解码模块驱动实现原理详解(三)
  • Llamaindex-Llama_indexRAG进阶_Embedding_model与ChromaDB-文档切分与重排序
  • 如何使用WordToCard自动拆分文章制作小红书卡片
  • RTX 4090重塑数字内容创作:4K视频剪辑与3D渲染的效率革命
  • Spring AI开发指导-MCP
  • C++/操作系统
  • 动手学深度学习(pytorch版):第八章节—循环神经网络(4)循环神经网络
  • Jenkins与Arbess,CICD工具一文全面对比分析
  • 矩阵、线性代数
  • react常用的hooks
  • 重构的艺术:从‘屎山’恐惧到优雅掌控的理性之旅
  • 在c++中,怎么理解把析构函数设置为virtual呢?
  • CUDA性能优化 ---- 通过矢量化内存访问提高性能
  • 【序列晋升】39 Spring Data REST 的优雅实践,让数据交互更符合 REST 规范
  • 能当关系型数据库还能玩对象特性,能拆复杂查询还能自动管库存,PostgreSQL 凭什么这么香?
  • 【2025PolarCTF秋季个人赛】WEB方向wp
  • Go基础:Go语言函数和方法详解
  • Redis 遍历指定格式的所有key
  • 插入mathtype/latex公式在word中行间距变高了
  • 设计模式学习(四)代理模式、适配器模式
  • ​​[硬件电路-279]:DRV8818PWP功能概述、管脚定义
  • 【51单片机】【protues仿真】基于51单片机恒温箱系统
  • zk管理kafka有哪些不足
  • Java 大视界 -- Java 大数据机器学习模型在金融衍生品复杂风险建模与评估中的应用
  • 半导体制造中常见工艺之LPCVD
  • D01粉尘传感器详解(STM32)
  • 【小程序】微信小程序页面之间数据传递的五种方法
  • Taichi太极图形编程语言实践demo
  • [xboard]07-Makefile逐行分析1
  • 基于规则的专家系统对自然语言处理深层语义分析的影响与启示:历史演进、技术局限与未来融合路径