初步使用 Linux
这一部分只介绍
CLI
(命令行界面)的使用,不涉及图形界面。
安装软件
在 Linux 安装软件有很多种方式。下面介绍几种常见的方式。
本地编译
这一方式是 Linux 下最原始的安装方式,即下载源代码,编译安装。这种安装方式适用于开源软件,好处是可以直接生成适合当前系统的二进制文件,缺点是需要安装编译工具链,且编译时间较长。
下面是一个使用 cmake
编译安装的例子:
tar zxvf application.tar.gz
cd application
mkdir build
cd build
cmake ..
make VERBOSE=1
su -
make install
2
3
4
5
6
7
8
大致的流程为:下载源代码,解压,创建编译目录,(安装编译工具),编译,安装。
包管理器
Linux 下有很多种包管理器,如 apt
、yum
等。这些包管理器可以自动化地下载、安装、升级软件,并解决依赖关系,极大地方便了软件的安装。这些包管理器一般是与发行版绑定的,如 apt
适用于 Debian
系列的发行版,yum
适用于 RedHat
系列的发行版,等等。
下面是一个在 ubuntu
下使用 apt
安装软件的例子:
sudo apt update
sudo apt install <application_name>
2
虚拟终端
在多数 Linux 发行版,控制台都是通过模拟一系列虚拟终端实现的。虚拟终端是一个模拟的终端,可以在一个物理屏幕上显示多个终端。一般情况下,Linux 发行版默认提供了 6 个虚拟终端,即 tty1
到 tty6
。用户可以通过 Alt + Fn
(或 Ctrl + Alt + Fn
)快捷键切换不同的终端。
Linux 系统结构
// TODO
Linux 命令
使用 Linux 的一个重要部分就是使用命令行,用命令行可以做到几乎所有事情。为了输入命令,需要启动一个虚拟终端。Linux 启动时一般会自动启动一个虚拟终端,用户可以在这个终端上输入命令。如果是图形界面,也可以通过终端模拟器启动一个虚拟终端。
一般来说,Linux 命令主要的模式为 command option(s) argument(s)
。其中 command
是命令,option
是选项,argument
是参数。选项和参数可以有多个。选项一般以 -
开头;参数往往紧跟在命令后面或者选项后面,不以 -
开头。
常用的命令有很多,下面列出一些常用的命令。
命令 | 用途 | 示例 |
---|---|---|
passwd | 修改当前用户密码 | passwd |
mkpasswd | 生成随机密码 | mkpasswd -l 12 (生成12位随机密码) |
date | 显示或设置系统日期和时间 | date "+%Y-%m-%d" (格式化输出日期) |
cal | 显示日历 | cal 12 2023 (显示2023年12月的日历) |
who | 显示当前登录系统的用户 | who |
clear | 清空终端屏幕 | clear |
echo | 输出文本或变量内容 | echo "Hello World" |
write | 向指定用户发送实时消息 | write username (输入后键入消息内容) |
wall | 向所有用户广播消息 | wall "System maintenance in 10min" |
talk | 与其他用户实时聊天 | talk user@host (启动聊天会话) |
mesg | 控制是否接收其他用户的实时消息 | mesg n (拒绝消息)/ mesg y (允许) |
// TODO: 补充常用命令
文件类型 常考
文件是一种存储数据的载体,也是读写的对象。Linux 的理念是“一切皆文件”。而文件在 Linux 中有很多种类型,但主要分为七种:
- Regular File:常规文件是最常见的文件类型,包含文本、二进制数据或程序代码等,无固定内部结构。例如,纯文本文件、脚本、可执行程序或压缩包均属于此类。系统工具(如
cat
、vim
)可直接操作这些文件,其内容由应用程序定义和解析。 - Character Special File:字符设备文件用于与硬件设备进行逐字符的交互,如键盘、终端(TTY)或串口。它们位于
/dev
目录,通过直接读写字符流控制设备,例如/dev/tty
代表当前终端,输入/输出操作无缓存,实时响应。 - Block Special File:块设备文件代表支持随机访问的存储设备(如硬盘、U盘),数据以固定大小的块为单位传输。例如
/dev/sda
表示首个硬盘,通常用于文件系统挂载。与字符设备不同,块设备的读写经过缓存,适用于大容量数据操作。 - Socket:Socket 文件用于进程间网络或本地通信,提供双向数据流。例如,MySQL 可能使用本地 socket 文件
/var/run/mysqld/mysqld.sock
进行客户端通信。它允许不同主机或同一主机的进程通过协议(如TCP/IP)交换数据。 - Symbolic Link:符号链接是指向其他文件/目录的快捷方式,自身仅存储目标路径。例如,通过
ln -s
创建后,操作链接文件会直接影响目标。与硬链接不同,符号链接可跨文件系统,且目标删除后链接将失效(称为“悬空链接”)。 - Directory:目录是一种特殊文件,本质是存储子文件和子目录的列表及其元数据(如 inode)。通过
ls
可查看内容,mkdir
或rmdir
可创建/删除。目录权限控制用户对其内容的访问(读/写/执行分别对应查看、修改、进入权限)。 - Pipe:管道是一种进程间通信的方式,分为匿名管道和命名管道。匿名管道用于父子进程间临时通信,如
command1 | command2
;命名管道(通过mkfifo
创建)允许无关进程通过固定路径通信,数据按写入顺序读取,无存储能力。
Linux 目录结构
Linux 的目录结构是一个树形结构,根目录为 /
。其他所有目录都是在根目录下的子目录,所有文件都是在某个目录下的。
Linux 中目录的组织并非随意,为了方便管理和维护,Linux 的目录结构是有一定规则的。下面是 Linux 的一些常见目录:
/(根目录,所有文件和目录的起点)
├── bin (用户二进制命令目录,存放普通用户可执行命令)
├── boot (系统启动文件,包含内核、引导加载程序等核心文件)
├── dev (设备文件目录,提供物理/虚拟设备的接口)
├── etc (系统全局配置文件,存储系统和服务配置信息)
├── lib (共享库目录,为/bin和/sbin中的程序提供基础库支持)
├── media (可移动设备挂载点,如U盘、光盘自动挂载至此)
├── mnt (临时挂载目录,用于手动挂载临时文件系统)
├── proc (虚拟文件系统,存储内核和进程信息)
├── opt (可选应用目录,通常用于安装第三方独立软件)
├── sbin (系统管理命令目录,存放需要root权限的工具)
├── srv (服务数据目录,存储Web服务/FTP等特定服务的数据)
├── tmp (临时文件目录,允许所有用户读写,定期自动清理)
├── usr (用户资源目录,包含多用户共享的应用程序和文档)
│ ├── bin 用户级应用程序(非核心命令)
│ ├── lib 应用程序库文件(64位)
│ ├── local 本地编译安装的软件
│ └── sbin 系统管理非核心命令
├── home (普通用户主目录,每个用户拥有独立的子目录)
└── root (超级用户root的主目录,独立于/home结构)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
文件权限
Linux 中文件权限是通过三组权限来控制的,分别是所有者权限、用户组权限和其他用户权限。每组权限又分为读、写和执行三种权限。这三种权限分别用 r
、w
和 x
表示。文件权限可以通过 ls -l
命令查看。
对于 ls -l
中的第一个字段,其组成如下:
- 第一个字符表示文件类型,如
-
表示普通文件,d
表示目录,l
表示链接文件,c
表示字符设备文件,b
表示块设备文件,等等。 - 接下来的 9 个字符分为三组,每组三个字符分别表示所有者权限、用户组权限和其他用户权限。其中,
r
表示读权限,w
表示写权限,x
表示执行权限,-
表示无权限。 - 例如,
-rwxr-xr--
表示该文件为普通文件,所有者有读、写、执行权限,用户组有读、执行权限,其他用户有读权限。
文件权限还可以通过三位八进制数表示,分别对应所有者权限、用户组权限和其他用户权限。对于每个八进制数,其从高位到低位分别代表读(644
为 110 100 100
,即 rw r r
,说明所有者有读写权限,用户组和其他用户有读权限;754
说明所有者有读写执行权限,用户组有读执行权限,其他用户只有读权限。
重定向和管道
重定向指将命令的输入输出从标准设备(如终端)转移到文件或其他设备。Linux 中有三种重定向方式:输出重定向、输入重定向和错误重定向;分别用 >
、<
和 2>
表示。其中重定向的方式也有两种:覆盖和追加,分别用 >
和 >>
表示。
例如,将命令的输出重定向到文件:
ls -l > file.txt
常用的重定向方式为:
kill –HUP 1234 > killout.txt 2> killerr.txt # 将标准输出和标准错误分别重定向到文件
kill –HUP 1234 > killout.txt 2>& 1 # 将标准输出和标准错误合并重定向到文件
2