Linux 基础知识
1. 介绍
大多数用户已经习惯了 Windows 的图形界面操作,但由于开发板资源有限,默认系统不带桌面环境,许多操作(如系统配置)无法通过图形界面完成。不过,几乎所有程序都可以通过命令行调用和运行,因此熟练掌握常用的 Linux 命令在入门学习中至关重要。为了更方便地使用 Luckfox Pico,本章将介绍在 Luckfox Pico 开发过程中常用的 Linux 命令。
2. 终端简介
在 luckfox pico 系列开发板上,可以通过ADB、串口 或 SSH 登录进入终端。Luckfox Pico 的默认提示符如下:
[root@luckfox ]#
root
表示当前用户名 / 登录名luckfox
表示主机名$
字符表示当前登录的是普通用户#
字符表示登录的是 root 用户
3. Linux 文件目录
在 Windows 中每一个分区都是一个树形结构,有多少个分区就有多少个树形结构,而 Linux 中只有一个树形结构,所有的文件、分区都是存在于一个树形结构中。在这个结构中 , 最上层的是根目录,其他所有的目录、文件、分区都是在根目录下建立的。常用目录:
- /bin:放置与 Luckfox Pico系统 有关 ( 包括运行图形界面所需的 ) 的二进制可执行文件。
- /dev:设备目录,在 Linux 系统中,所有设备都视为文件,在这个目录中存放了所有设备,例如第一个 SATA 硬盘或 U 盘会被识别为 sda 文件。
- /etc:系统管理和配置文件。
- /lib:基本系统的动态链接库文件存放位置。
- /media:放置可移动存储驱动器,例如 U 盘、光驱等等。
- /root:该目录为系统管理员,也称作超级权限者的用户主目录。
4. 存储介质以及⽂件系统类型
在 Linux 操作系统中,一切被操作系统管理的资源,如网络接口卡、磁盘驱动器、打印机、输入输出设备、普通文件或目录等,都被视为文件。这是 Linux 系统中一个重要的概念,即"一切都是文件"。文件系统(File System) 是操作系统用来管理和组织存储设备(如硬盘、SSD、闪存等)上的数据的一种机制。其核心作用是定义如何在存储设备上存储、检索和管理文件。Linux 支持非常广泛的文件系统,常见的文件系统有 EXT 系列(EXT2、EXT3、EXT4),XFS 文件系统,还有专门针对 NAND 类型设备的文件系统 ubifs、jffs2、yaffs2 等。
存储介质 | ⽀持的可读可写⽂件系统格式 | ⽀持的只读⽂件系统格式 |
---|---|---|
eMMC | ext4 | squashfs |
spi nand 或slc nand | ubifs | squashfs |
spi nor | jffs2 | squashfs |
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 分区表
SDK 使⽤ env 分区设置分区表,分区表信息配置在
/project/cfg/BoardConfig*.mk ⾥的 RK_PARTITION_CMD_IN_ENV 参数中。存储介质 | 分区表 |
---|---|
eMMC | RK_PARTITION_CMD_IN_ENV="32K(env),512K@32K(idblock),256K(uboot),32M(boot),512M(oem),256M(userdata),6G(rootfs)" |
spi nand | RK_PARTITION_CMD_IN_ENV="256K(env),256K@256K(idblock),512K(uboot),4M(boot),30M(oem),10M(userdata),80M(rootfs)" |
注意事项:
- 分区之间⽤英⽂逗号","隔开。
- 分区⼤⼩的单位有:K/M/G/T/P/E,不区分⼤⼩写,⽆单位则默认为byte;"-"表⽰该分区⼤⼩为剩余容量。
- 第⼀个分区若从0x0地址开始时,不加偏移量,反之,则必须添加偏移量。后续分区任意选择是否添加偏移量。
- idblock分区的偏移和⼤⼩是固定的,请勿修改。
- 不建议修改env分区名。(如果要修改env地址和⼤⼩,需要修改对应U-Boot的defconfig 配置CONFIG_ENV_OFFSET和CONFIG_ENV_SIZE,重新⽣成固件,擦除板端0地址的env数据,再烧录新的固件)
4.2 分区挂载信息
df -Th
命令显示的是当前系统挂载的文件系统,告诉我们哪些分区已经被挂载,并显示每个挂载点的类型、大小和使用情况。
[root@luckfox ]# df -Th
Filesystem Type Size Used Available Use% Mounted on
ubi0:rootfs ubifs 67.1M 62.0M 5.1M 92% /
devtmpfs devtmpfs 16.4M 0 16.4M 0% /dev
tmpfs tmpfs 16.5M 0 16.5M 0% /dev/shm
tmpfs tmpfs 16.5M 168.0K 16.4M 1% /tmp
tmpfs tmpfs 16.5M 520.0K 16.0M 3% /run
/dev/ubi4_0 ubifs 22.4M 17.1M 5.3M 76% /oem
/dev/ubi5_0 ubifs 4.5M 24.0K 4.5M 1% /userdata
ubi0:rootfs
是根文件系统(/
),挂载在 UBIFS(UBI Flash 文件系统)上devtmpfs
和tmpfs
是虚拟文件系统,分别用于设备节点和临时文件的存储,它们是在内存中创建的,并不会占用实际的闪存空间/dev/ubi4_0
是oem
分区,主要存放RK
相关驱动/dev/ubi5_0
是userdata
分区,主要存放的是rkipc
配置文件和MAC
地址等信息
5. 常用命令说明
ls
命令功能
ls 命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录 )。
命令格式
ls [-ahl] directory]
参数说明
参数 | 参数说明 | 路径 |
---|---|---|
directory | 要显示的目标目录 | 可以是相对路径或绝对路径。 |
使用实例
ls -a # 显示所有文件及目录 (. 开头的隐藏文件也会列出 )
ls -l # 将文件型态、权限、拥有者、文件大小等资讯详细列出
ls -lh # 文件大小以容易理解的格式列出,例如 4K
cd
命令功能
cd 命令用于改变当前工作目录的命令,LuckFox Pico 、LuckFox Pico Mini A/B 和 LuckFox Pico Plus 默认为根目录。
命令格式
cd [ directory ]
参数说明
参数 | 参数说明 | 取值 |
---|---|---|
directory | 要切换的目标目录,可以是相对路径或绝对路径。 | 字符串形式,不支持空格,绝对路径名长度范围为1~64。 |
使用实例
cd # 返回用户目录
cd .. # 返回上一层目录
cd /bin # 进入 /bin 目录
cd ../.. # 进入当前目录的上两层目录
cd ~ # 进入用户家目录
cd - # 切换到上次访问的目录
pwd
命令功能
pwd 命令用于显示工作目录,执行 pwd 指令可立刻得知您目前所在的工作目录的绝对路径名称。
使用实例
# pwd
/bin #输出结果
df
df 命令用于显示目前在 Linux 系统上的文件系统磁盘使用情况统计。
使用实例
[root@luckfox ]# df -Th
Filesystem Type Size Used Available Use% Mounted on
ubi0:rootfs ubifs 67.1M 62.0M 5.1M 92% /
devtmpfs devtmpfs 16.4M 0 16.4M 0% /dev
tmpfs tmpfs 16.5M 0 16.5M 0% /dev/shm
tmpfs tmpfs 16.5M 164.0K 16.4M 1% /tmp
tmpfs tmpfs 16.5M 528.0K 16.0M 3% /run
/dev/ubi4_0 ubifs 22.4M 17.1M 5.3M 76% /oem
/dev/ubi5_0 ubifs 4.5M 24.0K 4.5M 1% /userdata
touch
命令功能
touch 命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。
使用实例
touch file.txt # 新建一个file文件
mkdir
命令功能
mkdir 命令用于创建目录。
命令格式
mkdir [ options ] directory
参数说明
参数 | 参数说明 |
---|---|
options | -p 原来的目录不存在则新建一个 |
directory | 指定被创建的文件名。 |
使用实例
mkdir luckfox # 建立一个名为 luckfox 的子目录
mkdir -p luckfox/test # 建立一个名为 luckfox/test 的目录
cp
命令功能
cp 命令主要用于复制文件或目录。
命令格式
cp [ options ] source dest
参数说明
参数 | 参数说明 |
---|---|
options | -r、-f 等选项 |
source | 指定被复制文件的路径及源文件名。 |
dest | 指定目标文件的路径及目标文件名。 |
使用实例
cp test.txt /bin # 将 test.txt 复制到 /bin 目录下
cp –r test/ /usr/newtest # 将 test 文佳夹复制到 /usr 目录下并重新命名为 newtest
mv
命令功能
mv 用来为文件或目录改名、或将文件或目录移入其它位置。
命令格式
mv [ options ] source dest
参数说明
参数 | 参数说明 |
---|---|
options | -i、-f 等选项 |
source | 指定被移动文件的路径及源文件名。 |
dest | 指定目标文件路径及目标文件名。 |
使用实例
mv file1 /userdata # 将 file1 文件移动到 /userdata 目录下
rm
命令功能
rm 命令用于删除一个文件或者目录。
命令格式
rm [ options ] file/directory
参数说明
参数 | 参数说明 |
---|---|
options | -r、-f 等选项 |
file/directory | 要删除的目标文件名或目录名。 |
使用实例
rm test.txt # 删除 test.txt 文件
rm -r Luckfox # 删除 Luckfox 目录
chmod
命令功能
chmod 命令是控制用户对文件的权限的命令。
命令详解
Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。
在下面终端中,显示了 Linux 根目录下的详细文件信息。在这些文件信息中 , 最重要的就是第一列,它详细描述了文件和目录的权限 , 而第三与第四列则显示了这个文件和目录属于哪一个用户或组。
# ls -lh
drwxr-xr-x 2 1002 1002 160 media
lrwxrwxrwx 1 1002 1002 3 lib64 -> lib
lrwxrwxrwx 1 1002 1002 3 lib32 -> lib
drwxrwxr-x 6 1002 1002 664 rockchip_test
drwxrwxr-x 5 1002 1002 576 userdata
lrwxrwxrwx 1 1002 1002 11 linuxrc -> bin/busybox
drwxr-xr-x 2 1002 1002 160 root
drwxrwxr-x 2 1002 1002 2.2K sbin
dr-xr-xr-x 114 root root 0 proc
lrwxrwxrwx 1 1002 1002 8 data -> userdata
drwxrwxr-x 6 1002 1002 544 usr
drwxr-xr-x 4 1002 1002 672 var
dr-xr-xr-x 13 root root 0 sys
drwxrwxrwt 2 root root 60 tmp
drwxr-xr-x 3 root root 80 run
drwxr-xr-x 2 1002 1002 160 opt
drwxrwxr-x 3 1002 1002 296 oem
drwxr-xr-x 3 1002 1002 224 mnt
drwxrwxr-x 3 1002 1002 2.0K lib
drwxrwxr-x 6 1002 1002 1.5K etc
drwxr-xr-x 12 root root 1.9K dev
drwxrwxr-x 2 1002 1002 4.1K binLinux 的文件属性可以分为三种:只读(r)、写(w)和可执行(x)。但是上面的文件属性却分为 10 小格,这是因为除了第一格显示目录外,另外三组每组三格分别表示文件所有者权限、同一组内的权限以及其他用户权限。第一栏中如果显示 d,则表示这是一个目录;如果是链接文件,则在这里显示 l;如果是设备文件,则显示 c。
- 第一个 rwx 栏位:- rwx --- --- 表示文件拥有者所拥有的权限。
- 第二个 rwx 栏位:- --- rwx --- 表示同一工作组内用户权限。
- 第三个 rwx 栏位:- --- --- rwx 表示其他用户权限。
- rwx rwx rwx 表示无论哪个用户都可以对这个文件读写与执行。
- rw- --- --- 表示只有文件拥有者有读写权限,但是没有执行权限。
- rw- rw- rw- 表示所有用户都有读写权。
符号模式
who(用户类型)
who 用户类型 说明 u user 文件所有者 g group 文件所有者所在组 o others 所有其他用户 a all 所用用户, 相当于 ugo operator(符号模式表)
Operator 说明 + 为指定的用户类型增加权限 - 去除指定用户类型的权限 = 设置指定用户权限的设置,即将用户类型的所有权限重新设置 permission (符号模式表)
模式 名字 说明 r 读 设置为可读权限 w 写 设置为可写权限 x 执行权限 设置为可执行权限 X 特殊执行权限 只有当文件为目录文件,或者其他类型的用户有可执行权限时,才将文件权限设置可执行 s setuid/gid 当文件被执行时,根据who参数指定的用户类型设置文件的setuid或者setgid权限 t 粘贴位 设置粘贴位,只有超级用户可以设置该位,只有文件所有者u可以使用该位 实例
chmod a+r file #给 file 的所有用户增加读权限
chmod a-x file #删除 file 的所有用户的执行权限
chmod a+rw file #给 file 的所有用户增加读写权限
chmod +rwx file #给 file 的所有用户增加读写执行权限
chmod u=rw,go= file #对 file 的所有者设置读写权限,清空该用户组和其他用户对 file 的所有权限(空格代表无权限)
chmod -R u+r,go-r LUCKFOX #对目录 LUCKFOX 和其子目录层次结构中的所有文件给用户增加读权限,而对用户组和其他用户删除读权限
数值模式
八进制语法
# 权限 rwx 二进制 7 读 + 写 + 执行 rwx 111 6 读 + 写 rw- 110 5 读 + 执行 r-x 101 4 只读 r-- 100 3 写 + 执行 -wx 011 2 只写 -w- 010 1 只执行 --x 001 0 无 --- 000 例如:765 的解释如下:
- 所有者的权限用数字表达:属主的那三个权限位的数字加起来的总和。如 rwx, 也就是 4 + 2 + 1 , 应该是 7。
- 用户组的权限用数字表达:属组的那个权限位数字的相加的总和。如 rw-, 也就是 4 + 2 + 0 ,应该是 6。
- 其它用户的权限数字表达:其它用户权限位的数字相加的总和。如 r-x , 也就是 4 + 0 + 1, 应该是 5。
常用数字权限
- 400 - r-- --- --- 拥有者能够读,其他任何人不能进行任何操作;
- 644 - rw- r-- r-- 拥有者都能够读,但只有拥有者可以编辑;
- 660 - rw- rw- --- 拥有者和组用户都可读和写,其他人不能进行任何操作;
- 664 - rw- rw- r-- 所有人都可读,但只有拥有者和组用户可编辑;
- 700 - rwx --- --- 拥有者能够读、写和执行,其他用户不能任何操作;
- 744 - rwx r-- r-- 所有人都能读,但只有拥有者才能编辑和执行;
- 755 - rwx r-x r-x 所有人都能读和执行,但只有拥有者才能编辑;
- 777 - rwx rwx rwx 所有人都能读、写和执行(该设置不建议使用)。
实例
chmod 664 file #给 file 的所有用户增加读权限 , 拥有者和组用户可编辑权限