基本都是摘抄正点原子的文章:<领航者 ZYNQ 之嵌入式Linux 开发指南 V3.2.pdf,因初次学习,仅作学习摘录之用,有不懂之处后续会继续更新~
一、Linux 文件系统
1.1 Linux 文件系统简介以及类型
操作系统的基本功能之一就是文件管理,而文件的管理是由文件系统来完成的。Linux支持多种文件系统。
1.1.1、Linux 文件系统简介
文件系统的目的就是实现数据的查询和存储,由于使用场合、使用环境的不同,Linux 有多种文件系统,不同的文件系统支持不同的体系。文件系统是管理数据的,而可以存储数据的物理设备有硬盘、U 盘、SD 卡、NAND FLASH、NOR FLASH、网络存储设备等。
不同的存储设备其物理结构不同,不同的物理结构就需要不同的文件系统去管理,比如管理 NAND FLASH 的话使用 YAFFS 文件系统,管理硬盘、SD 卡的话就是 ext 文件系统等等。
磁盘的分割:
Linux 下常用的磁盘分割工具为:fdisk,fdisk 这个工具后面会详细讲解怎么用,因为我们移植 Linux 的时候需要将SD卡分为两个分区来存储不同的东西
格式化与文件系统:
创建一个新的盘符以后都要做格式化处理,格式化其实就是给这个盘符创建文件系统的过程。
Windows 下一般有 FAT、NTFS 和 exFAT这些文件系统。同样的,在 Linux 下、使用 fdisk 创建好分区以后也是要先在创建好的分区上面创建文件系统,也就是格式化。
挂载点:
在 Windows 下有磁盘分区的概念,比如 C,D,E 盘等,在 Linux 下没有这个概念,因此Linux 下找不到像 C、D、E 盘这样的东西。
Linux 下可以给磁盘分割,但是没有 C、D、E 盘那怎么访问这些分区呢?
在 Linux 下创建一个分区并且格式化好以后需要将其“挂载”到一个目录下才能访问这个分区。Windows 的文件系统挂载过程是其内部完成的,用户是看不到的,Linux 使用 mount 命令来挂载磁盘。
挂载磁盘的时候是需要确定挂载点的,也就是这个磁盘要挂载到哪个目录下。
1.1.2、Linux 文件系统类型
ext2 文件系统:
ext2 是 Linux 早期的文件系统,但是随着技术的发展 ext2 文件系统已经不推荐使用了,ext2 是一个非日志文件系统,大多数的 Linux 发行版都不支持 ext2 文件系统了。
ext3 文件系统:
ext3 是在 ext2 的基础上发展起来的文件系统,完全兼容 ext2 文件系统,ext3 是一个日志文件系统,ext3 支持大文件,ext3 文件系统的特点有如下:
高可靠性:
使用 ext3 文件系统的话,即使系统非正常关机、发生死机等情况,恢复 ext3文件系统也只需要数十秒。
数据完整性:
ext3 提高了文件系统的完整性,避免意外死机或者关机对文件系统的伤害。
文件系统速度:
ext3 的日志功能对磁盘驱动器读写头进行了优化,文件系统速度相对与ext2 来说没有降低。
数据转换:
从 ext2 转换到 ext3 非常容易,只需要两条指令就可以完成转换。用户不需要花时间去备份、恢复、格式化分区等,用 ext3 文件系统提供的工具 tune2fs 即可轻松的将 ext2文件系统转换为 ext3 日志文件系统。ext3 文件系统不需要经过任何修改,可以直接挂载成ext2 文件系统。
ext4 文件系统:
ext4 相比与 ext3 提供了更佳的性能和可靠性,并且功能更丰富,ext4 向下兼容 ext3 和 ext2,因此可以将 ext2 和 ext3 挂载为 ext4。
那么我们安装的 Ubuntu 使用的哪个版本的文件系统呢?
在终端中输入如下命令来查询当前磁盘挂载的是什么文件系统:
df -T –h
上图中圈起来的就是安装 Ubuntu 的磁盘,在 Linux 下一切皆为文件, “/dev/sda1”就是磁盘的分区,可以看出这个磁盘分区类型是 ext4,它的挂载点是根目录“/”。
1.2 Linux 文件系统结构
Ubuntu 是支持多用户的,Ubuntu 为每个用户创建了一个根目录,比如电脑现在登陆的是“gbxluo”这个用户,因此默认进入的是“gbxluo”这个用户的根目录:
点击“计算机”进入系统根目录,如下图:
参数 | 描述 |
cd ~ | 进入到用户根目录“~” |
cd / | 进入到系统根目录“/” |
根目录“/”中的一些重要的文件夹:
参数 | 描述 |
/bin | 存储一些二进制可执行命令文件,/usr/bin 也存放了一些基于用户的命令文件 |
/sbin | 存储了很多系统命令,/usr/sbin 也存储了许多系统命令 |
/root | 超级用户 root 的根目录文件 |
/home | 普通用户默认目录,在该目录下,每个用户都有一个以本用户名命名的文件夹 |
/boot | 存放 Ubuntu 系统内核和系统启动文件 |
/mnt | 通常包括系统引导后被挂载的文件系统的挂载点 |
/dev | 存放设备文件,学习 Linux 驱动主要是跟这个文件夹打交道 |
/etc | 保存系统管理所需的配置文件和目录 |
/lib | 保存系统程序运行所需的库文件,/usr/lib 下存放了一些用于普通用户的库文件 |
/lost+found | 一般为空,当系统非正常关机以后,此文件夹会保存一些零散文件 |
/var | 存储一些不断变化的文件,比如日志文件 |
/usr | 包括与系统用户直接有关的文件和目录,比如应用程序和所需的库文件 |
/media | 存放 Ubuntu 系统自动挂载的设备文件 |
/proc | 虚拟目录,不实际存储在磁盘上,通常用来保存系统信息和进程信息 |
/tmp | 存储系统和用户的临时文件,该文件夹对所有的用户都提供读写权限 |
/opt | 可选文件和程序的存放目录 |
/sys | 系统设备和文件层次结构,并向用户程序提供详细的内核数据信息 |
1.3 文件操作命令
1.3.1 创建新文件命令—touch
vi/vim 指令用来创建一个文本文档,touch 不仅可以用来创建文本文档,其它类型的文档也可以创建。
命令格式如下:
touch [参数] [文件名]
使用 touch 创建文件的时候,如果[文件名]的文件不存在,那就直接创建一个以[文件名]
命名的文件,如果[文件名]文件存在的话就仅仅修改一下此文件的最后修改日期,常用的命
令参数如下:
参数 | 描述 |
-a | 只更改存取时间 |
-c | 不建立任何文件 |
-d<日期> | 使用指定的日期,而并非现在日期 |
-t<时间> | 使用指定的时间,而并非现在时间 |
进入到用户根目录下,直接使用命令“cd ~”即可快速进入用户根目录,进入用户根目
录以后使用 touch 命令创建一个名为 test 的文件,创建过程如下图所示:
1.3.2 文件夹创建命令—mkdir
既然可以创建文件,那么肯定也可以创建文件夹,创建文件夹使用命令“mkdir”,命令
格式如下:
mkdir [参数] [文件夹名目录名]
主要参数如下:
参数 | 描述 |
-p | 如所要创建的目录其上层目录目前还未创建,那么会一起创建上层目录 |
在用户根目录下创建名为“archive_test”的文件夹,如下图所示:
1.3.3 文件及目录删除命令—rm
既然有创建文件的命令,那肯定有删除文件的命令,要删除一个文件或者文件夹可以使用命令“rm”,此命令可以完成删除一个文件或者多个文件及文件夹,它可以实现递归删除。
对于链接文件,只删除链接,原文件保持不变,所谓的链接文件,其实就是 Windows 下的快
捷方式文件。
此命令格式如下:
rm [参数] [目的文件或文件夹目录名]
命令主要参数如下:
参数 | 描述 |
-d | 直接把要删除的目录的硬连接数据删成 0,删除该目录 |
-f | 强制删除文件和文件夹(目录) |
-i | 删除文件或者文件夹(目录)之前先询问用户 |
-r | 递归删除,指定文件夹(目录)下的所有文件和子文件夹全部删除掉 |
-v | 显示删除过程 |
使用 rm 命令来删除前面使用命令“touch”创建的 test 文件,操作过程如下图所示:
直接使用命令“rm”是无法删除文件夹(目录)的,需要加上参数“-rf”,也就是强制递归删除文件夹(目录),如下图所示:
1.3.4 文件夹(目录)删除命令—rmdir
Linux 提供了直接删除文件夹(目录)的命令—rmdir,它可以不加任何参数的删除掉指定的文件夹(目录),命令格式如下:
rmdir [参数] [文件夹(目录)]
命令主要参数如下:
参数 | 描述 |
-p | 删除指定的文件夹(目录)以后,若上层文件夹(目录)为空文件夹(目录)的话就将其一起删除 |
使用命令“rmdir”删除掉“archive_test”文件夹,如下图所示:
1.3.5 文件复制命令—cp
在 Windows 下可以通过在文件上点击鼠标右键来进行文件的复制和粘贴,在 Ubuntu界面下也可以通过点击文件右键进行文件的复制和粘贴。
但是本节讲解如何在终端下使用命令来进行文件的复制,Linux 下的复制命令为“cp”,命令描述如下:
cp [参数] [源地址] [目的地址]
主要参数描述如下:
参数 | 描述 |
-a | 此参数和同时指定“-dpR”参数相同 |
-d | 在复制有符号连接的文件时,保留原始的连接 |
-f | 强行复制文件,不管要复制的文件是否已经存在于目标目录 |
-I | 覆盖现有文件之前询问用户 |
-p | 保留源文件或者目录的属性 |
-r或-R | 递归处理,将指定目录下的文件及子目录一并处理 |
在用户根目录下,使用命令“mkdir”创建两个文件夹:test_dir1 和 test_dir2,过程如下图所示:
在test_dir1文件夹中创建a.c文件,并备份为b.c文件,接着将test_dir1文件中的内容均复制到test_dir2文件夹中,操作过程如下图所示:
这里使用了通配符“*”,“*.c”就表示 test1 下的所有以“.c”结尾的文件。
文件夹复制:
将 test2 文件夹复制到同目录下,新拷贝的文件夹命名为 test3,操作如下图所示:
注意:这里cp拷贝文件夹也使用了参数"-rf",即强制递归复制。
1.3.6 文件移动命令—mv
有时需要将一个文件或者文件夹移动到另外一个地方去,或者给一个文件或者文件夹进行重命名,这个时候我们就可以使用命令“mv”了,此命令格式如下:
mv [参数] [源地址] [目的地址]
主要参数描述如下:
参数 | 描述 |
-d | 如果要覆盖文件的话覆盖前先进行备份 |
-f | 若目标文件或目录与现在的文件重复,直接覆盖目标文件或目录 |
-I | 在覆盖之前询问用户 |
在上面创建的 test_dir1 文件夹里面创建一个 c.c 文件,然后将 c.c 这个文件重命名为 d.c。操作如下图所示:
最后将test_dir1文件夹中的 d.c 文件移动到 test2 文件夹里面,如下图所示:
1.4 文件压缩和解压缩
Ubuntu 下有图形化以及命令行这两种压缩和解压缩操作。
1.4.1 图形化压缩和解压缩
图形化压缩和解压缩和 Windows 下基本一样,在要压缩或者解压的文件上点击鼠标右键,然后选择要进行的操作。
1.4.1.1 图形化压缩
选中文件或文件夹》右键压缩》
弹出创建归档窗口,选择类型与归档名称》创建,如下图所示:
可以选择的压缩格式只有三个:.zip、.tar.xz、.7z,是因为这三个压缩格式与所有系统兼容。
压缩结果如下图:
1.4.1.2 图形化解压缩
选中test.zip文件,右键》提取到此处,如下图:
从上图可知,如果已经有解压后的文件,再解压时会创建新的文件夹。
1.4.2命令行进行文件的压缩和解压缩
命令行下进行压缩和解压缩常用的命令有三个:zip、unzip 和 tar
1.4.2.1 命令 zip
zip 命令看名字就知道是针对.zip 文件的,用于将一个或者多个文件压缩成一个.zip 结尾的文件,命令格式如下:
zip [参数] [压缩文件名.zip] [被压缩的文件]
主要参数函数如下:
参数 | 描述 |
-b<工作目录> | 指定暂时存放文件的目录 |
-d | 从 zip 文件中删除一个文件 |
-F | 尝试修复已经损毁的压缩文件 |
-g | 将文件压缩入现有的压缩文件中,不需要新建压缩文件 |
-h | 帮助 |
-j | 只保存文件的名,不保存目录 |
-m | 压缩完成以后删除源文件 |
-n<字尾符号> | 不压缩特定扩展名的文件 |
-q | 不显示压缩命令执行过程 |
-r | 递归压缩,将指定目录下的所有文件和子目录一起压缩 |
-v | 显示指令执行过程 |
-num | 压缩率,为 1~9 的数值 |
使用命令“zip”对 test文件夹进行压缩为test.zip文件,操作如下图所示:
1.4.2.2 命令 unzip
unzip 命令用于对.zip 格式的压缩包进行解压,命令格式如下:
unzip [参数] [压缩文件名.zip]
主要参数如下:
参数 | 描述 |
-l | 显示压缩文件内所包含的文件 |
-t | 检查压缩文件是否损坏,但不解压 |
-v | 显示命令显示的执行过程 |
-Z | 只显示压缩文件的注解 |
-C | 压缩文件中的文件名称区分大小写 |
-j | 不处理压缩文件中的原有目录路径 |
-L | 将压缩文件中的全部文件名改为小写 |
-n | 解压缩时不要覆盖原有文件 |
-P<密码> | 解压密码 |
-q | 静默执行,不显示任何信息 |
-x<文件列表> | 指定不要处理.zip 中的哪些文件 |
-d | <目录> 把压缩文件解到指定目录下 |
对上面压缩的 test.zip 文件使用 unzip 命令进行解压缩,操作如下图所示:
1.4.2.3 命令 tar
我们前面讲的 zip 和 unzip 这两个是命令只适用于.zip 格式的压缩和解压,其它压缩格式
就用不了了,比如 Linux 下最常用的.bz2 和.gz 这两种压缩格式。其它格式的压缩和解压使用
命令 tar,tar 将压缩和解压缩集合在一起,使用不同的参数即可,命令格式如下:
tar [参数] [压缩文件名] [被压缩文件名]
常用参数如下:
参数 | 描述 |
-c | 创建新的压缩文件 |
-C<目的目录> | 切换到指定的目录 |
-f<备份文件> | 指定压缩文件 |
-j | 用 tar 生成压缩文件,然后用 bzip2 进行压缩 |
-k | 解开备份文件时,不覆盖已有的文件 |
-m | 还原文件时,不变更文件的更改时间 |
-r | 新增文件到已存在的备份文件的结尾部分 |
-t | 列出备份文件内容 |
-v | 显示指令执行过程 |
-w | 遭遇问题时先询问用户 |
-x | 从备份文件中释放文件,也就是解压缩文件 |
-z | 用 tar 生成压缩文件,用 gzip 压缩 |
-Z | 用 tar 生成压缩文件,用 compress 压缩 |
tar命令压缩
使用如下tar命令将 test文件夹压缩为.bz2 和.gz 这两个格式:
tar -vcjf test.tar.bz2 test1
tar -vczf test.tar.gz test1
在上面两行命令中,-vcjf 表示创建 bz2 格式的压缩文件,-vczf 表示创建.gz 格式的压缩文件。
tar命令解压缩
使用如下所示两行命令完成.bz2 和.gz 格式文件的解压缩:
tar -vxjf test1.tar.bz2
tar -vxzf test2.tar.gz
上述两行命令中,-vxjf 用来完成.bz2 格式压缩文件的解压,-vxzf 用来完成.gz 格式压缩文件的解压。
要求:要熟练掌握使用 tar 命令来完成.bz2 和.gz 格式的文件压缩和解压缩。
1.5 文件查询和搜索
find 命令用于在目录中搜索文件,grep 命令用于查找包含指定关键字的文件。
1.5.1 命令 find
find 命令用于在目录结构中查找文件,其命令格式如下:
find [路径] [参数] [关键字]
路径是要查找的目录路径,如果不写的话表示在当前目录下查找,关键字是文件名的一
部分,主要参数如下:
参数 | 描述 |
-name<filename> | 按照文件名称查找,查找与 filename 匹配的文件,可使用通配符 |
-depth | 从指定目录下的最深层的子目录开始查找 |
-gid<群组识别码> | 查找符合指定的群组识别码的文件或目录 |
-group<群组名称> | 查找符合指定的群组名称的文件或目录 |
-size<文件大小> | 查找符合指定文件大小的文件 |
-type<文件类型> | 查找符合指定文件类型的文件 |
-user<拥有者名称> | 查找符合指定的拥有者名称的文件或目录 |
find 命令的参数有很多,常用的就这些,关于其它的参数可以自行上网查找。
来看一下如何使用 find 命令进行文件搜索,搜索目录/etc 中以“vim”开头的文件为例,操作如下图所示:
从上图可知,在目录/etc 下,包含以“vim*”开头的文件有:
/etc/alternatives/vimdiff
/etc/alternatives/vim
/etc/vim
/etc/vim/vimrc
/etc/vim/vimrc.tiny
1.5.2 命令 grep
grep 命令用于查找包含指定关键字的文件,如果发现某个文件的内容包含所指定的关键字,grep 命令就会把包含指定关键字的这一行标记出来。
grep 命令格式如下:
grep [参数] 关键字 文件列表
grep 命令一次只能查一个关键字,主要参数如下:
参数 | 描述 |
-b | 在显示符合关键字的那一列前,标记处该列第 1 个字符的位编号 |
-c | 计算符合关键字的列数 |
-d<进行动作> | 当指定要查找的是目录而非文件时,必须使用此参数!否则 grep 指令将回报信息并停止搜索 |
-i | 忽略字符大小写 |
-v | 反转查找,只显示不匹配的行 |
-r | 在指定目录中递归查找 |
比如在用户根目录/桌面文件夹下递归查找包含字符“60分万岁”的文件,操作如下图所示:
1.6 文件类型
在用户根目录下使用命令“ls -l”来查看用户根目录下所有文件的详细信息,如下图所示:
在上图中,每个文件的详细信息占一行,每行最前面都是一个符号就标记了当前文件类型,比如 C_program的第一个字符是“d”,examples.desktop文件第一个字符是“-”。
这些字符表示的文件类型如下:
参数 | 描述 |
- | 普通文件,一些应用程序创建的,比如文档、图片、音乐等等 |
d | 目录文件 |
c | 字符设备文件,Linux 驱动里面的字符设备驱动,比如串口设备,音频设备等 |
b | 块设备文件,存储设备驱动,比如硬盘,U 盘等 |
l | 符号连接文件,相当于 Windwos 下的快捷方式 |
s | 套接字文件 |
p | 管道文件,主要指 FIFO 文件 |
注意:学习 Linux 驱动开发的时候基本是在和字符设备文件和块设备文件打交道。
二、Linux 用户权限管理
2.1 Ubuntu 用户系统
Ubuntu 是一个多用户系统,可以给不同的使用者创建不同的用户账号,每个用户使用各自的账号登陆,使用用户账号的目的一是方便系统管理员管理,控制不同用户对系统的访问权限,另一方面是为用户提供安全性保护。
在安装 Ubuntu 系统的时候被要求创建一个账户,当创建好账号以后,系统会在目录/home下以该用户名创建一个文件夹,所有与该用户有关的文件都会被存储在这个文件文件夹中。同样的,创建其它用户账号的时候也会在目录/home下生成一个文件夹来存储该用户的文件,下图就是我的电脑上“gbxluo”这个账户的文件夹。
Ubuntu 下用户类型分为以下 3 类:
- root 用户,系统管理员,拥有最高权限
- 初次创建的用户,此用户可以完成比普通用户更多的功能
- 普通用户,安装完操作系统以后被创建的用户
root 用户权限大于装系统时创建的用户的权限;
装系统时创建的用户的权限大于普通用户的权限。
以上三种用户,每个用户都有一个 ID 号,称为 UID,操作系统通过 UID 来识别是哪个用户,用户相关信息可以在文件/etc/passwd 中查看到,
cat /etc/passwd
如下图所示:
从配置文件 passwd 中可以看到,每个用户名后面都有两个数字,比如用户“gbxluo”后面“1000:1000”,第一个数字是用户的 ID,另一个是用户的 GID,也就是用户组 ID。
Ubuntu 里面每个用户都属于一个用户组里面,用户组就是一组有相同属性的用户集合。
2.2 权限管理
Ubuntu 下的权限就是用户对于系统资源的使用限制情况,root 用户拥有最大的权限,可以为所欲为,装系统的时候创建的用户拥有 root 用户的部分权限,其它普通用户的权限最低。对于做嵌入式开发的人一般不关注用户的权限问题,因为嵌入式基本是单用户,做嵌入式开发重点关注的是文件的权限问题。
用户的权限与文件的权限,两个概念。
对于一个文件通常有三种权限:读(r)、写(w)和执行(x),使用命令“ls -l”可以查看某个目录下所有文件的权限信息,如下图所示:
以上图中文件 test.txt 为例讲解,文件 test.txt 文件信息如下:
-rw-rw-r-- 1 gbxluo gbxluo 376 3 月 23 14:16 test.txt
其中“-rw-rw-r--”表示文件权限与用户和用户组之间的关系,第一位表示文件类型,"-"表示普通文件(一些应用程序创建的,比如文档、图片、音乐等等)。
剩下的 9 位以 3 位为一组,分别表示文件拥有者的权限,文件拥有者所在用户组的权限以及其它用户权限。
后面的“gbxluo gbxluo ”分别代表文件拥有者(用户)和该用户所在的用户组。
因此文件 test.txt 的权限情况如下:
①、文件 test.txt 的拥有者是用户 zuozhongkai,其对文件 tesst.txt 的权限是“rw-”,也就是对该文件拥有读和写两种权限。
②、用户 gbxluo 所在的用户组也叫做 gbxluo (系统默认的),其组内用户对于文件 test.txt 的权限是“rw-”,也是拥有读和写这两种权限。
③、其它用户对于文件 test.txt 的权限是“r--”,也就是只读权限。
对于文件,可读权限表示可以打开查看文件内容,可写权限表示可以对文件进行修改, 可执行权限就是可以运行此文件(如果是软件的话)。
对于文件夹,拥有可读权限才可以使用命令 ls 查看文件夹中的内容,拥有可执行权限才能进入到文件夹内部。
文件的权限有三种:读(r)、写(w)和执行(x),除了用r、w和x表示以外,可以使用二进制数表示,三种权限就可以使用 3 位二进制数来表示,一种权限对应一个二进制位,如果该位为 1 就表示具备此权限,如果该位为 0 就表示没不具备此权限,如下表所示:
字母 | 二进制 | 八进制 |
r | 100 | 4 |
w | 010 | 2 |
x | 001 | 1 |
将三种权限 r、w 和x 进行不同的组合,即可得到不同的二进制数和八进制数,3 位权限可以组出 8 种不同的权限组合,如下表所示:
权限 | 二进制数字 | 八进制数字 |
--- | 000 | 0 |
--x | 001 | 1 |
-w- | 010 | 2 |
-wx | 011 | 3 |
r-- | 100 | 4 |
r-x | 101 | 5 |
rw- | 110 | 6 |
rwx | 111 | 7 |
表中权限所对应的八进制数字就是每个权限对应的位相加,比如权限 rwx 就是 4+2+1=7。前面的文件 test.txt 其权限为“rw-rw-r--”,因此其十进制表示就是:664。 另外也开始使用 a、u、g 和 o 表示文件的归属关系,用=、+和-表示文件权限的变化,如下表所示:
字母 | 意义 |
r | 可读权限 |
w | 可写权限 |
x | 可执行权限 |
a | 所有用户 |
u | 归属用户 |
g | 归属组 |
o | 其他用户 |
= | 具备权限 |
+ | 添加某权限 |
- | 去除某权限 |
对于文件 test.txt,我们想要修改其归属用户(gbxluo)对其拥有可执行权限,那么就可以使用:u+x。如果希望设置归属用户及其所在的用户组都对其拥有可执行权限就可以使用:gu+x。
2.3 权限管理命令
也可以使用 Shell 来操作文件的权限管理,主要用到“chmod”和“chown”这两个命令。
2.3.1 权限修改命令 chmod
命令“chmod”用于修改文件或者文件夹的权限,权限可以使用前面讲的数字表示也可 以使用字母表示,命令格式如下:
chmod [参数] [文件名/目录名]
主要参数如下:
参数 | 描述 |
-c | 效果类似“-v”参数,但仅回显更改的部分 |
-f | 不显示错误信息 |
-R | 递归处理,指定目录下的所有文件及其子文件目录一起处理 |
-v | 显示指令的执行过程 |
修改文件的权限
先学习如何使用命令“chmod”修改一个文件的权限,在用户根目录下创建一个文件 test,然后查看其默认权限,操作如下图所示:
在上图中我们创建了一个文件:test,这个文件的默认权限为“rw-rw-r--”,我们将其权限改为“rwxrw-rw”,对应数字就是 766,操作如下:
在上图中,我们修改文件 test 的权限为 766,修改完成以后的 test 文件权限为“rwxrwxr-w”,设置的一样,说明权限修改成功。
上面是通过数字来修改权限的,接下来使用字母来修改权限,操作如下图所示:
修改文件夹的权限
新建一个 test 文件夹,在文件夹 test 里面创建 a.c、b.c 和 c.c 三个文件,如下图所示:
在上图中 test 文件夹下的文件 a.c、b.c 和 c.c 的权限均为“rw-rw-r--”,将 test 文件夹下的所有文件权限都改为“rwxrwxrwx”,也就是数字 777,操作如下图所示:
2.3.2 文件归属者修改命令 chown
命令 chown 用来修改某个文件或者目录的归属者用户或者用户组,命令格式如下:
chown [参数] [用户名.<组名>] [文件名/目录]
其中[用户名.<组名>]表示要将文件或者目录改为哪一个用户或者用户组,用户名和组名用“.”隔开,其中用户名和组名中的任何一个都可以省略,命令主要参数如下:
参数 | 描述 |
-c | 效果同-v 类似,但仅回显更改的部分 |
-f | 不显示错误信息 |
-h | 只对符号连接的文件做修改,不改动其它任何相关的文件 |
-R | 递归处理,将指定的目录下的所有文件和子目录一起处理 |
-v | 显示处理过程 |
在用户根目录下创建一个 test 文件,查看其文件夹所属用户和用户组,如下图所示:
从上图中可以看出,文件 test 的归属用户为 gbxluo,所属的用户组为 gbxluo,将文件 test 归属用户改为 root 用户,所属的用户组也改为 root,操作如下图所示:
命令 chown 同样也可以递归处理来修改文件夹的归属用户和用户组,用法和命令 chown一样:
三、Linux 磁盘管理
3.1 磁盘管理基本概念
“挂载点”就是将一个硬盘的一部分做成文件夹的形式,这个文件夹的名字就是“挂载点”,不管在哪个发行版的 Linux 中,用户是绝对看到不到 C 盘、D 盘这样的概念的,只能看到以文件夹形式存在的“挂载点”。
Linux 的磁盘管理体系和 Windows 有很大的区别,在 Windows 下经常会遇到“分区”这个概念,在 Linux 中一般不叫“分区”而叫“挂载点”。
文件/etc/fstab 详细的记录了 Ubuntu 中硬盘挂载点的情况,查看fstab文件内容,如下图:
cat /etc/fstab
上图中有一行“/ was on /dev/sda1 during installation”,意思是/dev/sda1 的挂载点是根目录“/”,其中“/”是挂载点,“/dev/sda1”就是装 Ubuntu 系统的硬盘。
由于系统是安装在虚拟机中的,因此上图中没有出现实际的硬盘。可以通过如下命令查看当前系统中的磁盘:
ls /dev/sd*
上述命令就是打印出所有以/dev/sd 开头的设备文件,如下图所示:
上图中有2个磁盘设备文件,其中 sd 表示是 SATA硬盘或者其它外部设备,最后面的数字表示该硬盘上的第 n 个分区,比如/dev/sda1 就表示磁盘 sda 上的第一个分区。
注意:这里有两个磁盘设备文件,但只有一个分区;这里将磁盘设备文件与分区的概念分开了。
上图中都是以/dev/sda 开头的,说明当前只有一个硬盘。如果再插上 U 盘、SD 卡啥的就可能会出现/dev/sdb,/dev/sdc等等。如果 U盘有两个分区那么可能就会出现/dev/sdb1、dev/sdb2 这样的设备文件。
比如现在插入 U 盘,插入 U 盘会提示 U 盘是接到主机还是虚拟机,如下图所示:
设置以后,点击“确定”按钮 U 盘就会自动连接到虚拟机中,也就是连接到 Ubuntu 系统中,再次使用命令“ls /dev/sd*”来查看当前的“/dev/sd*”设备文件,如下图所示:
从上图可以看出,一共5个磁盘设备文件,又多了/dev/sdb、 /dev/sdb1和/dev/sdb2 这3个磁盘设备文件,其中/dev/sdb 就是 U 盘文件,/dev/sdb1 表示 U 盘的第一个分区,/dev/sdb2 表示 U 盘的第二个分区,查看Ubuntu系统桌面,可以看到 U 盘的两个分区,如下图。
3.2 磁盘管理命令
3.2.1 磁盘分区命令 fdisk
如果要对某个磁盘进行分区,可以使用命令 fdisk,命令格如下:
fdisk [参数]
主要参数如下:
参数 | 描述 |
-b<分区大小> | 指定每个分区的大小 |
-l | 列出指定设备的分区表 |
-s<分区编号> | 将指定的分区大小输出到标准的输出上,单位为块 |
-u | 搭配“-l”参数,会用分区数目取代柱面数目,来表示每个分区的起始地址 |
比如对 U 盘进行分区,千万不要对自己装 Ubuntu 系统进行分区!!!可以使用如下命令:
sudo fdisk /dev/sdb
结果如下图所示:
输入q退出。
常用的命令如下:
参数 | 描述 |
p | 显示现有的分区 |
n | 建立新分区 |
t | 更改分区类型 |
d | 删除现有的分区 |
a | 更改分区启动标志 |
w | 对分区的更改写入到硬盘或者存储器中 |
q | 不保存退出 |
3.2.2 格式化命令 mkfs
使用命令 fdisk 创建好一个分区以后,需要对其格式化,也就是在这个分区上创建一个文件系统,Linux 下的格式化命令为 mkfs,命令格式如下:
mkfs [参数] [-t 文件系统类型] [分区名称]
主要参数如下:
参数 | 描述 |
fs | 指定建立文件系统时的参数 |
-V | 显示版本信息和简要的使用方法 |
-v | 显示版本信息和详细的使用方法 |
比如要格式化 U 盘的分区/dev/sdb1 为 FAT 格式,那么就可以使用如下命令:
mkfs –t vfat /dev/sdb1
3.2.3 卸载命令 umount
当用户不在需要访问已经挂载的 U 盘,可以通过 umount 将其从卸载点卸除,命令格式如下:
umount [参数] -t [文件系统类型] [设备名称]
命令主要参数有:
参数 | 描述 |
-a | 卸载/etc/mtab 中的所有文件系统 |
-h | 显示帮助 |
-n | 卸载时不要将信息存入到/etc/mtab 文件中 |
-r | 如果无法成功卸载,则尝试以只读的方式重新挂载 |
-t <文件系统类型> | 仅卸载选项中指定的文件系统 |
-v | 显示执行过程 |
接下来演示如何卸载掉磁盘设备文件/dev/sdb2分区。
U盘被Ubuntu系统识别后自动给sdb的两个分区设置挂载点,通过输入如下命令查看文件系统类型与挂载点:
df -T
输出如下图所示结果:
从上图可知,U 盘的/dev/sdb2分区被挂载到了文件夹/media/gbxluo/EFI目录下,其文件系统类型为vfat,接下来使用下述命令 umount 将其卸载掉,
sudo umount -t vfat /dev/sdb2
操作如下图所示:
从上图可以看出,磁盘设备文件/dev/sdb2已经没有了挂载点,也就无法访问磁盘设备文件/dev/sdb2中的内容了,但是/dev/sdb1磁盘设备文件在挂载点/media/gbxluo/gbxluo下,仍然可以访问,如下图:
3.2.4 挂载分区命令 mount
创建好分区并且格式化以后肯定是要使用硬盘或者 U 盘的,那么如何访问磁盘呢?
比如 U 盘有两个分区,分别为/dev/sdb1、dev/sdb1,如果直接打开文件/dev/sdb1 会发现根本就不是用户要的结果。用户需要将/dev/sdb1 这个分区挂载到一个文件夹中,然后通过这个文件访问 U 盘,磁盘挂载命令为 mount,命令格式如下:
mount [参数] -t [类型] [设备名称] [目的文件夹]
命令主要参数有:
参数 | 描述 |
-V | 显示程序版本 |
-h | 显示辅助信息 |
-v | 显示执行过程详细信息 |
-o ro | 只读模式挂载 |
-o rw | 读写模式挂载 |
-s-r | 等于-o ro |
-w | 等于-o rw |
挂载点是一个文件夹,因此在挂载之前先要创建一个文件夹,一般把挂载点放到“/mnt”目录下,在“/mnt”下创建一个 tmp 文件夹,然后将 U 盘的/dev/sdb2 分区挂载到/mnt/tmp 文件夹里面,操作如下图所示:
上图中将 U 盘的第二个分区/dev/sdb2磁盘文件挂载到了/mnt/tmp目录下,并可以成功访问U 盘 /dev/sdb2磁盘文件中的内容了。
这里注意:/mnt/tmp目录下本来有一个“just_show_in_ubuntu.txt”文件,但是挂载U盘的/dev/sdb2磁盘文件到/mnt/tmp目录下后,再访问/mnt/tmp目录只能看到/dev/sdb2磁盘文件中的内容,“just_show_in_ubuntu.txt”文件被“屏蔽”了。
参考链接:
ZYNQ领航者V2开发板 — 正点原子资料下载中心 1.0.0 文档