Skip to content

Unix / Linux - 入门

类 Unix 操作系统(OS)充当计算机硬件和用户之间的中介。它管理系统资源,并为应用程序提供运行环境。

操作系统的核心,负责管理硬件资源(CPU、内存、设备)和基本任务,称为内核(kernel)。

用户通常通过一个称为 shell 的程序间接与内核交互。Shell 是一个命令行解释器:它接收您输入的命令,解释它们,并指示内核或其他程序执行操作。流行的现代 shell 包括 Bash (Bourne Again SHell) 和 Zsh (Z Shell)。

  • Unix 最初于 1969 年左右在 AT&T Bell 实验室开发,由 Ken Thompson、Dennis Ritchie 等人创建。其设计原则对后续操作系统产生了深远影响。
  • 如今,存在许多类 Unix 系统。例如,商业 Unix 版本(如 Solaris、AIX)、开源 BSD 变体(FreeBSD、OpenBSD),以及最重要的 Linux。从技术上讲,Linux 只是内核,但像 Ubuntu、Fedora 和 Debian 等发行版将内核与实用工具和应用程序捆绑在一起,创建了一个完整的操作系统。macOS 也是一个经过认证的 Unix 系统。
  • 这些系统本质上是多用户的,允许多人同时使用计算机,每个人都有自己的环境和权限。
  • 它们也是多任务的,使用户和系统能够并发运行多个程序。

典型的类 Unix 系统架构的简化视图涉及几个层次:

  • **硬件:**计算机的物理组成部分(CPU、内存、磁盘、网络接口等)。
  • **内核:**操作系统的核心。它直接与硬件交互,管理系统资源(内存管理、进程调度、文件系统访问),并通过系统调用提供基本服务。
  • **Shell:**命令行界面 (CLI),允许用户与系统交互。它读取命令,解释命令,并执行程序。常见的 shell 是 Bash(Linux 上通常是默认的)和 Zsh(较新 macOS 的默认)。
  • **命令和工具:**大量执行特定任务的标准程序集合(例如,cp 用于复制,mv 用于移动/重命名,ls 用于列出文件,grep 用于搜索文本)。这些工具是系统管理和日常使用的基本工具。通过包管理器可以获得更多工具。
  • 文件和目录:数据和程序组织成文件。文件被分组到目录(文件夹)中。目录可以包含其他目录,形成称为文件系统的分层树状结构。这种标准化结构(通常遵循文件系统层次结构标准 - FHS)有助于组织系统(例如,/bin 存放基本二进制文件,/etc 存放配置,/home 存放用户目录)。

可以将其想象成用积木搭建:硬件是基础,内核是管理基础的基本地基,shell 是您告诉系统在哪里放置积木的工具,而命令/工具是您用来构建应用程序或管理结构(文件系统)的特定积木。

如果您安装了类 Unix 系统(如 Linux 或 macOS),启动计算机将启动引导过程(涉及固件如 BIOS/UEFI、引导加载程序如 GRUB 和 init 系统如 systemd 或 launchd),最终会显示一个登录提示符,可以是图形界面或文本界面的。

对于远程访问,您通常会使用 SSH (Secure Shell) 协议,通过 SSH 客户端从本地机器安全地连接到服务器的命令行。

无论是通过终端模拟器本地连接还是通过 SSH 远程连接,系统通常会提示您输入用户名和密码:

login: your_username
Password:
  • 确保您拥有一个用户名(用户 ID)和密码。如果没有,请联系您的系统管理员。
  • 在 login: 提示符下输入您的用户名并按回车。用户名通常区分大小写。
  • 在 Password: 提示符下输入您的密码并按回车。出于安全考虑,您的密码字符通常在您输入时不会显示。密码几乎总是区分大小写。
  • 成功身份验证后,您通常会看到一些系统消息(例如上次登录时间/位置),然后是 shell 提示符。此提示符表示 shell 已准备好接受您的命令。常规用户提示符通常以 $ 结尾,root(管理员)用户以 # 结尾。
Last login: Mon Jul 29 10:15:00 2024 from 192.168.1.10
your_username@hostname:~$

在提示符下,您可以输入命令。例如,要显示当前月份的日历,请使用 cal 命令:

$ cal
July 2024
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
$

定期更改密码并使用强大且唯一的密码对于安全至关重要。大多数类 Unix 系统提供 passwd 命令来实现此操作:

步骤 1:在命令提示符下输入 passwd 并按回车。

步骤 2:系统将提示您输入当前密码进行验证。

步骤 3:系统会要求您输入新密码。选择一个强大的密码(大小写字母、数字、符号的组合)。避免字典词汇或个人信息。

步骤 4:您需要重新输入新密码进行确认。

$ passwd
Changing password for your_username.
(当前) UNIX 密码:
新密码:
重新输入新密码:
passwd: 密码更新成功
$

注意:与登录一样,出于安全考虑,密码输入通常是隐藏的。考虑使用密码管理器来生成和存储强大且唯一的密码。

如前所述,数据组织在文件和目录中。ls (list) 命令是查看目录内容的基本命令。

使用 ls 结合 -l(长格式)选项可以提供详细信息:

$ ls -l
total 24
drwxr-xr-x 2 user group 4096 Jul 29 10:30 Documents
-rw-r--r-- 1 user group 8752 Jul 29 10:25 report.txt
-rwxr-xr-- 1 user group 5120 Jul 20 15:00 process_data.sh
drwxrwxr-- 3 user group 4096 Jul 15 09:00 Projects

解释 ls -l 输出列:

  • **第一个字符:**文件类型(d 表示目录,- 表示常规文件,l 表示符号链接等)。
  • **权限:**九个字符,表示所有者、组和其他用户的读(r)、写(w)、执行(x)权限。
  • **链接数:**硬链接计数。
  • **所有者:**文件所有者的用户名。
  • **组:**与文件关联的组。
  • **大小:**文件大小(以字节为单位)(使用 ls -lh 显示人可读的大小,如 KB、MB)。
  • **修改时间:**文件最后修改的日期和时间。
  • **名称:**文件或目录的名称。

要查看隐藏文件(名称以点 . 开头的文件),请使用 -a 选项:ls -la 或 ls -lha。

要快速检查您当前登录的用户账户,请使用 whoami 命令:

$ whoami
your_username
$

这对于管理多个账户或需要确认当前用户上下文时非常有用。

在多用户系统上,您可能想查看当前还有谁登录了。有几个命令提供此信息,详细程度各不相同:

  • users:列出登录用户的用户名,用空格分隔。
  • who:显示登录的用户、他们的终端行、登录时间,以及可能的源主机。
  • w:比 who 提供更多细节,包括每个用户当前正在运行什么命令、系统正常运行时间以及平均负载。
$ users
user1 admin guest
$ who
user1 tty1 2024-07-29 09:15
guest pts/0 2024-07-29 10:30 (192.168.1.10)
admin pts/1 2024-07-29 11:00 (client.example.com)
$ w
11:05:30 up 1:50, 3 users, load average: 0.10, 0.15, 0.12
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
user1 tty1 - 09:15 1:50m 0.20s 0.10s -bash
guest pts/0 192.168.1.10 10:30 5.00s 0.05s 0.01s vim config.txt
admin pts/1 client.example.com 11:00 0.00s 0.15s 0.02s w
$

这些命令对于系统监控和了解系统活动非常有用。

当您完成命令行会话后,应该注销以确保账户安全并释放系统资源。

  • 在提示符下输入 logout 命令。
  • 或者,您通常可以输入 exit。
  • 在许多 shell 中,在空命令行上按 Ctrl+D 也表示输入结束并会注销您。

系统通常会关闭您的会话并断开连接(如果通过远程连接)。

正确地关闭或重启类 Unix 系统对于确保数据完整性很重要。这些操作通常需要管理员(root)权限。

常见命令包括:

CommandDescription
shutdown -h now or poweroff立即干净地关闭机器并断电。shutdown 允许计划关机(例如,shutdown -h +10 在 10 分钟后关机)。
shutdown -r now or reboot立即干净地关闭机器然后重启。shutdown -r 也允许计划重启。
halt历史上用于停止系统进程,但可能不会给硬件断电;现在通常首选 poweroff。
systemctl poweroff在使用 systemd init 系统的系统上(现代 Linux 上很常见),此命令会干净地关闭系统并断电。
systemctl reboot在 systemd 系统上,此命令会干净地关闭系统并重启系统。

始终使用这些命令,而不是简单地切断电源,尤其是在服务器上,以防止数据损坏或文件系统问题。如果您不是以 root 用户登录,通常需要在使用这些命令前加上 sudo(例如,sudo poweroff)。