Linux 基础
1. 介绍
大部 分用户都已经习惯了 Windows 图形界面化的操作,K1 Pro 日常的基础应用也都可以通过它的图形界面完成,但还是有很多操作无法通过界面完成的,例如系统配置。但是几乎所有的程序都能通过命令行来调用运行,因此,Linux 常用命令的熟练使用在入门学习中占有很高的地位,为更加方便使用 K1 Pro,本章将介绍在 K1 Pro 开发时一些常用的 Linux 命令。
2. 终端简介
-
在 K1 Pro 上,可以通过串口或 SSH 登录进入终端。如果使用本地显示器登录,可以按快捷键
Ctrl+Alt+T
打开默认终端。K1 Pro 的默认提示符如下:linaro
表示当前用户名 / 登录名linaro
表示主机名~
表示当前用户所在的目录是/home/linaro
$
字符表示当前登录的是普通用户#
字符表示登录的是 root 用户
-
K1 Pro 默认登录普通 linaro 用户,想要切换 root 用户,在终端输入:
sudo su root # 普通用户切换 root 用户
su linaro # root 用户切换普通用户
3. Linux 文件目录
在 Windows 中每一个分区都是一个树形结构,有多少个分区就有多少个树形结构,而 Linux 中只有一个树形结构,所有的文件、分区都是存在于一个树形结构中。在这个结构中,最上层的是根目录,其他所有的目录、文件、分区都是在根目录下建立的。常用目录:
/bin
:放置与 K1 Pro 系统有关(包括运行图形界面所需的)的二进制可执行文件。/boot
:引导目录,放置 Linux 内核以及其它用来启动 K1 Pro 的软件包。/dev
:设备目录,在 Linux 系统中,所有设备都视为文件,在这个目录中存放了所有设备,例如第一个 SATA 硬盘或 U 盘会被识别为sda
文件。/etc
:系统管理和配置文 件。/home
:用户目录,除了 root 用户外,其他所有的使用者的数据都存放在这个目录下。/lib
:基本系统的动态链接库文件存放位置。/media
:放置可移动存储驱动器,例如 U 盘、光驱等等。/root
:该目录为系统管理员,也称作超级权限者的用户主目录。
4. 文件系统
在 Linux 操作系统中,一切被操作系统管理的资源,如网络接口卡、磁盘驱动器、打印机、输入输出设备、普通文件或目录等,都被视为文件。这是 Linux 系统中一个重要的概念,即“一切都是文件”。文件系统(File System) 是操作系统用来管理和组织存储设备(如硬盘、SSD、闪存等)上的数据的一种机制。其核心作用是定义如何在存储设备上存储、检索和管理文件。Linux 支持非常广泛的文件系统,常见的文件系统有 EXT 系列(EXT2、EXT3、EXT4),XFS 文件系统,还有专门针对 NAND 类型设备的文件系统 ubifs、jffs2、yaffs2 等。
- EXT2:早期的 Linux 文件系统,没有日志功能,适合小型存储设备,如 USB 驱动器。
- EXT3:EXT2 的升级版,支持日志功能,极大提高了数据的安全性和文件恢复能力。
- EXT4:是目前最常用的 Linux 文件系统,支持大文件(最高支持 16 TB 文件和 1 EB 的文件系统),性能、稳定性和安全性都非常好。
- XFS:是一个高性能 64 位日志文件系统,设计用于处理大文件和高并发的应用。
- JFFS2 和 UBIFS:是专为 FLASH 存储器设计的文件系 统,具有擦写平衡和掉电保护,减少存储损耗。JFFS2 (Journaling Flash File System v2) 提供日志结构和坏块管理,但随着容量增大,其性能和内存占用增加,通过磨损均衡和数据压缩延长寿命。UBIFS (Unsorted Block Image File System) 支持动态文件管理和直接挂载,适合大容量 NAND 闪存,需与 UBI 层配合使用,以实现更有效的磨损均衡和坏块管理,同时采用数据压缩。
4.1 inode 和 block 介绍
Inode(索引节点)是 Linux 文件系统中每个文件或目录的元数据结构,记录了文件的属性(如文件大小、权限、时间戳等),但不包含文件名和文件数据。每个文件或目录在创建时都会分配一个唯一的 Inode,系统通过 Inode 号找到文件的存储位置。文件存储在硬盘上,硬盘的最小存储单位是扇区(sector),每个扇区大小为 512 字节。为了提高效率,操作系统一次性读取多个扇区,组成一个 块(block),通常大小为 4KB(由 8 个扇区组成)。文件的元信息存储在 Inode 中,文件数据则存储在一个或多个 block 中。
- 查看扇区大小:
root@linaro:/home/linaro# fdisk -l /dev/mmcblk1
Disk /dev/mmcblk1: 29.13 GiB, 31272730624 bytes, 61079552 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 46680000-0000-454D-8000-121D00005F9A
Device Start End Sectors Size Type
/dev/mmcblk1p1 16384 24575 8192 4M unknown
/dev/mmcblk1p2 24576 32767 8192 4M unknown
/dev/mmcblk1p3 32768 163839 131072 64M unknown
/dev/mmcblk1p4 163840 425983 262144 128M unknown
/dev/mmcblk1p5 425984 491519 65536 32M unknown
/dev/mmcblk1p6 491520 61079518 60587999 28.9G unknown
root@linaro:/home/linaro# cat /sys/block/mmcblk1/queue/hw_sector_size
512
- 查看
inode
信息:
# 新建文件并写入三行数字
linaro@linaro:~$ tee 1.txt <<EOF
> 1111
> 1111
> 1111
> EOF
# 查看 inode 信息
linaro@linaro:~$ stat 1.txt
File: 1.txt
Size: 15 Blocks: 8 IO Block: 4096 regular file
Device: 179,6 Inode: 95246 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ linaro) Gid: ( 1000/ linaro)
Access: 2024-08-26 12:51:16.816002017 +0000
Modify: 2024-08-26 12:51:35.924002026 +0000
Change: 2024-08-26 12:51:35.924002026 +0000
Birth: 2024-08-26 12:51:16.816002017 +0000
- Access:
(0644/-rw-r--r--)
:文件权限 - Access:
2024-08-26 12:51:16.816002017 +00
:文件上次被访问的时间 - Modify:
2024-08-26 12:51:35.924002026 +0000
:文件内容最后一次被修改的时间。 - Change:
2024-08-26 12:51:35.924002026 +0000
:文件的元数据(如权限或所有者)最后一次被修改的时间 - Birth:
2024-08-26 12:51:16.816002017 +0000
:文件的创建时间(某些文件系统不支持此信息)
4.2 inode 注意事项
-
inode 的数量是有限的,每个文件系统只能包含固定数量的 inode。这意味着当文件系统中的 inode 用完时,无法再创建新的文件或目录,即使磁盘上还有可用空间。因此,在创建文件系统时,需要根据文件和目录的预期数量来合理分配 inode 的数量。
-
文件名包含特殊字符,可能无法正常删除。这时直接删除
inode
,能够起到删除文件的作用。
find ./* -inum 节点号 -delete
4.3 软链接和硬链接
特性 | 硬链接 | 软链接 |
---|---|---|
指向方式 | 指向相同的 inode | 指向路径(文本引用) |
跨文件系统支持 | 不支持 | 支持 |
源文件删除后影响 | 链接仍然有效 | 链接失效(悬挂链接) |
创建命令 | ln filename linkname | ln -s target linkname |
可以链接的对象 | 任何文件 | 任何文件或目录 |
5. Linux 常用命令
ls
命令功能
ls
命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)。
命令格式
ls
[-ahl] directory
参数说明
参数 | 参数说明 | 路径 |
---|---|---|
directory | 要显示的目标目录 | 可以是相对路径或绝对路径。 |
使用实例
ls -a # 显示所有文件及目录 (. 开头的隐藏文件也会列出 )
ls -l # 将文件型态、权限、拥有者、文件大小等资讯详细列出
ls -lh # 文件大小以容易理解的格式列出,例如 4K
ls -i # 查看文件i节点号
cd
命令功能
cd
命令用于改变当前工作目录的命令。
命令格式
cd
[ directory ]
参数说明
参数 | 参数说明 | 取值 |
---|---|---|
directory | 要切换的目标目录,可以是相对路径或绝对路径。 | 字符串形式,不支持空格,绝对路径名长度范围为1~64。 |
使用实例
cd # 返回用户目录
cd .. # 返回上一层目录
cd /bin # 进入 /bin 目录
cd ../.. # 进入当前目录的上两层目录
cd ~ # 进入用户家目录
cd - # 切换到上次访问的目录
pwd
命令功能
pwd
命令用于显示工作目录,执行 pwd 指令可立刻得知您目前所在的工作目录的绝对路径名称。
使用实例
df
命令功能
df
命令用于显示目前在 Linux 系统上的文件系统磁盘使用情况统计。
使用实例
linaro@linaro:~$ df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/root ext4 29G 3.7G 24G 14% /
devtmpfs devtmpfs 1.9G 8.0K 1.9G 1% /dev
tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs tmpfs 781M 1.5M 779M 1% /run
tmpfs tmpfs 5.0M 8.0K 5.0M 1% /run/lock
tmpfs tmpfs 391M 32K 391M 1% /run/user/1000