ZYNQ学习之Ubuntu下Linux文件系统、用户权限与磁盘管理

news2024/11/25 4:35:00

基本都是摘抄正点原子的文章:<领航者 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

3dcc9c0818ee4b00b6471f38f5fd89e3.png

上图中圈起来的就是安装 Ubuntu 的磁盘,在 Linux 下一切皆为文件, “/dev/sda1”就是磁盘的分区,可以看出这个磁盘分区类型是 ext4,它的挂载点是根目录“/”。

1.2 Linux 文件系统结构

Ubuntu 是支持多用户的,Ubuntu 为每个用户创建了一个根目录,比如电脑现在登陆的是“gbxluo”这个用户,因此默认进入的是“gbxluo”这个用户的根目录:

25cd7ab0362d424e86189d15976017cb.png

点击“计算机”进入系统根目录,如下图:

50ca675559bc407b8645f6f2881e00cf.png

1fc226ebfa774b5b803534f34e2d7ea1.png

参数描述
cd ~进入到用户根目录“~”
cd /进入到系统根目录“/”

根目录“/”中的一些重要的文件夹:

7d0855ab95304fddb67916ac8fa8f2df.png

参数描述
/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 的文件,创建过程如下图所示:

fe04110da4b1457a9f1737f21c4cd29d.png

1.3.2 文件夹创建命令—mkdir

既然可以创建文件,那么肯定也可以创建文件夹,创建文件夹使用命令“mkdir”,命令
格式如下:

mkdir [参数] [文件夹名目录名]

主要参数如下:

参数描述
-p
如所要创建的目录其上层目录目前还未创建,那么会一起创建上层目录

在用户根目录下创建名为“archive_test”的文件夹,如下图所示:

b4bd6aba4c6243688f808240a94c53d2.png

1.3.3 文件及目录删除命令—rm

既然有创建文件的命令,那肯定有删除文件的命令,要删除一个文件或者文件夹可以使用命令“rm”,此命令可以完成删除一个文件或者多个文件及文件夹,它可以实现递归删除。

对于链接文件,只删除链接,原文件保持不变,所谓的链接文件,其实就是 Windows 下的快
捷方式文件。

此命令格式如下:

rm [参数] [目的文件或文件夹目录名]

命令主要参数如下:

参数描述
-d直接把要删除的目录的硬连接数据删成 0,删除该目录
-f强制删除文件和文件夹(目录)
-i删除文件或者文件夹(目录)之前先询问用户
-r递归删除,指定文件夹(目录)下的所有文件和子文件夹全部删除掉
-v显示删除过程

使用 rm 命令来删除前面使用命令“touch”创建的 test 文件,操作过程如下图所示:

45933d101722492f85f22d40653543da.png

直接使用命令“rm”是无法删除文件夹(目录)的,需要加上参数“-rf”,也就是强制递归删除文件夹(目录),如下图所示:

5a509c3e94b04fffb50eca06816ba53a.png

1.3.4 文件夹(目录)删除命令—rmdir

Linux 提供了直接删除文件夹(目录)的命令—rmdir,它可以不加任何参数的删除掉指定的文件夹(目录),命令格式如下:

rmdir [参数] [文件夹(目录)]

命令主要参数如下:

参数描述
-p删除指定的文件夹(目录)以后,若上层文件夹(目录)为空文件夹(目录)的话就将其一起删除

使用命令“rmdir”删除掉“archive_test”文件夹,如下图所示:

633634b5bab44a91ab1a3eefc411b761.png

1.3.5 文件复制命令—cp

在 Windows 下可以通过在文件上点击鼠标右键来进行文件的复制和粘贴,在 Ubuntu界面下也可以通过点击文件右键进行文件的复制和粘贴。

但是本节讲解如何在终端下使用命令来进行文件的复制,Linux 下的复制命令为“cp”,命令描述如下:

cp [参数] [源地址] [目的地址]

主要参数描述如下:

参数描述
-a此参数和同时指定“-dpR”参数相同
-d在复制有符号连接的文件时,保留原始的连接
-f强行复制文件,不管要复制的文件是否已经存在于目标目录
-I覆盖现有文件之前询问用户
-p保留源文件或者目录的属性
-r或-R递归处理,将指定目录下的文件及子目录一并处理

在用户根目录下,使用命令“mkdir”创建两个文件夹:test_dir1 和 test_dir2,过程如下图所示:

63884dc606894620b5cab4f143dd8c12.png

在test_dir1文件夹中创建a.c文件,并备份为b.c文件,接着将test_dir1文件中的内容均复制到test_dir2文件夹中,操作过程如下图所示:

8b31a92ff8ad42e9aa36638c121ce93a.png

这里使用了通配符“*”,“*.c”就表示 test1 下的所有以“.c”结尾的文件。

文件夹复制:

将 test2 文件夹复制到同目录下,新拷贝的文件夹命名为 test3,操作如下图所示:

acf0fbe3d9094ca8981be3fc46cb9eac.png

注意:这里cp拷贝文件夹也使用了参数"-rf",即强制递归复制。

1.3.6 文件移动命令—mv

有时需要将一个文件或者文件夹移动到另外一个地方去,或者给一个文件或者文件夹进行重命名,这个时候我们就可以使用命令“mv”了,此命令格式如下:

mv [参数] [源地址] [目的地址]

主要参数描述如下:

参数描述
-d如果要覆盖文件的话覆盖前先进行备份
-f若目标文件或目录与现在的文件重复,直接覆盖目标文件或目录
-I在覆盖之前询问用户

在上面创建的 test_dir1 文件夹里面创建一个 c.c 文件,然后将 c.c 这个文件重命名为 d.c。操作如下图所示:

3145376ab1ce493eac2c453fd4fae0c8.png

最后将test_dir1文件夹中的 d.c 文件移动到 test2 文件夹里面,如下图所示:

372b61ce49974c1dbc010c81cce062d4.png

1.4 文件压缩和解压缩

Ubuntu 下有图形化以及命令行这两种压缩和解压缩操作。

1.4.1 图形化压缩和解压缩

图形化压缩和解压缩和 Windows 下基本一样,在要压缩或者解压的文件上点击鼠标右键,然后选择要进行的操作。

1.4.1.1 图形化压缩

选中文件或文件夹》右键压缩》

907a2e0850d84ef891a55dcfd2b23556.png

弹出创建归档窗口,选择类型与归档名称》创建,如下图所示:

1a7a68617fc841bb8e002507e94815d1.png

可以选择的压缩格式只有三个:.zip、.tar.xz、.7z,是因为这三个压缩格式与所有系统兼容。

压缩结果如下图:

53cfb3f548334ce99190e7c5b06b877e.png

1.4.1.2 图形化解压缩

选中test.zip文件,右键》提取到此处,如下图:

702594e75fb940f99b3732f40b7b1ce9.png

从上图可知,如果已经有解压后的文件,再解压时会创建新的文件夹。

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文件,操作如下图所示:

f7c17afec7304f429837bd10e4c1ead1.png

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 命令进行解压缩,操作如下图所示:

1c63011fc9f042ff901fef0b2e806adb.png

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 格式的压缩文件。

4dd781e278f54da5842f209a2279feff.png

a2c68bd785d54e70854b3fbef8320775.png

tar命令解压缩

使用如下所示两行命令完成.bz2 和.gz 格式文件的解压缩:

tar -vxjf test1.tar.bz2
tar -vxzf test2.tar.gz

上述两行命令中,-vxjf 用来完成.bz2 格式压缩文件的解压,-vxzf 用来完成.gz 格式压缩文件的解压。

e7aa9ad54b5c44799c984d2eedfbe960.png

要求:要熟练掌握使用 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”开头的文件为例,操作如下图所示:

e09f48d54d96418888520f4a80723771.png

从上图可知,在目录/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分万岁”的文件,操作如下图所示:

88174db1b360485d95fcb31bde8c9846.png

1.6 文件类型

在用户根目录下使用命令“ls -l”来查看用户根目录下所有文件的详细信息,如下图所示:

0a5d54c34168471db9c299806cfcde1d.png

在上图中,每个文件的详细信息占一行,每行最前面都是一个符号就标记了当前文件类型,比如 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”这个账户的文件夹。

edc2a7a9bb564fcda6a1bd2712900f90.png

Ubuntu 下用户类型分为以下 3 类:

  1. root 用户,系统管理员,拥有最高权限
  2. 初次创建的用户,此用户可以完成比普通用户更多的功能
  3. 普通用户,安装完操作系统以后被创建的用户

root 用户权限大于装系统时创建的用户的权限;

装系统时创建的用户的权限大于普通用户的权限。

以上三种用户,每个用户都有一个 ID 号,称为 UID,操作系统通过 UID 来识别是哪个用户,用户相关信息可以在文件/etc/passwd 中查看到,

cat /etc/passwd

如下图所示:

c8457ecb0b7f482b9ae8d34a063ec286.png

从配置文件 passwd 中可以看到,每个用户名后面都有两个数字,比如用户“gbxluo”后面“1000:1000”,第一个数字是用户的 ID,另一个是用户的 GID,也就是用户组 ID。

Ubuntu 里面每个用户都属于一个用户组里面,用户组就是一组有相同属性的用户集合。

2.2 权限管理

Ubuntu 下的权限就是用户对于系统资源的使用限制情况,root 用户拥有最大的权限,可以为所欲为,装系统的时候创建的用户拥有 root 用户的部分权限,其它普通用户的权限最低。对于做嵌入式开发的人一般不关注用户的权限问题,因为嵌入式基本是单用户,做嵌入式开发重点关注的是文件的权限问题。

用户的权限与文件的权限,两个概念。

对于一个文件通常有三种权限:读(r)、写(w)和执行(x),使用命令“ls -l”可以查看某个目录下所有文件的权限信息,如下图所示:

375cf889487d414d8a2921dc4da6742d.png

以上图中文件 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 就表示没不具备此权限,如下表所示:

字母二进制八进制
r1004
w0102
x0011

将三种权限 r、w 和x 进行不同的组合,即可得到不同的二进制数和八进制数,3 位权限可以组出 8 种不同的权限组合,如下表所示:

权限二进制数字八进制数字
---0000
--x0011
-w-0102
-wx0113
r--1004
r-x1015
rw-1106
rwx1117

表中权限所对应的八进制数字就是每个权限对应的位相加,比如权限 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,然后查看其默认权限,操作如下图所示:

be1f231cff0f4fde850bab4fadbabb6d.png

在上图中我们创建了一个文件:test,这个文件的默认权限为“rw-rw-r--”,我们将其权限改为“rwxrw-rw”,对应数字就是 766,操作如下:

23f8d30ad85a4a5f87c68af306a67e6b.png

在上图中,我们修改文件 test 的权限为 766,修改完成以后的 test 文件权限为“rwxrwxr-w”,设置的一样,说明权限修改成功。

上面是通过数字来修改权限的,接下来使用字母来修改权限,操作如下图所示:

724c8ba8d02c4d56a707307ceee0fd2a.png

修改文件夹的权限

新建一个 test 文件夹,在文件夹 test 里面创建 a.c、b.c 和 c.c 三个文件,如下图所示:

bd12b576e1be416f9098a553a16bcadd.png

在上图中 test 文件夹下的文件 a.c、b.c 和 c.c 的权限均为“rw-rw-r--”,将 test 文件夹下的所有文件权限都改为“rwxrwxrwx”,也就是数字 777,操作如下图所示:

e2bd946eb46f41e2bd3cbbb8ce19a421.png

2.3.2 文件归属者修改命令 chown

命令 chown 用来修改某个文件或者目录的归属者用户或者用户组,命令格式如下:

chown [参数] [用户名.<组名>] [文件名/目录]

其中[用户名.<组名>]表示要将文件或者目录改为哪一个用户或者用户组用户名和组名用“.”隔开,其中用户名和组名中的任何一个都可以省略,命令主要参数如下:

参数描述
-c效果同-v 类似,但仅回显更改的部分
-f不显示错误信息
-h只对符号连接的文件做修改,不改动其它任何相关的文件
-R递归处理,将指定的目录下的所有文件和子目录一起处理
-v显示处理过程

在用户根目录下创建一个 test 文件,查看其文件夹所属用户和用户组,如下图所示:

5de5ba399b0947feb505e511eca2f812.png

从上图中可以看出,文件 test 的归属用户为 gbxluo,所属的用户组为 gbxluo,将文件 test 归属用户改为 root 用户,所属的用户组也改为 root,操作如下图所示:

e611214cbcf14b6ab14a7106cbaefce7.png

命令 chown 同样也可以递归处理来修改文件夹的归属用户和用户组,用法和命令 chown一样:

833dfb9f69f54689a545dfeb2eb0f883.png

三、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 文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1563719.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JS详解-fetch核心语法

document.querySelector(.btn).addEventListener(click,async () > {const p new URLSearchParams({pname:浙江省,cname:杭州市})//1、如何请求&#xff1f;默认为get&#xff0c;参数1 url地址&#xff0c;返回promiseconst res await fetch(http://hmajax.itheima.net/…

AI提速 OpenAI 新模型GPT-5今年上线?

这两天&#xff0c;有关OpenAI新模型 GPT-5的消息又多了起来。有知情人士称&#xff0c;OpenAI将在今年年中的某个时候发布GPT-5&#xff0c;很可能是在今年夏天期间。OpenAI CEO 萨姆奥特曼在一次播客采访中透露“GPT-5的智能水平得到提升”。 有趣的是&#xff0c;播客的主理…

JavaScript库,编写$()和getElementsByClassName()方法

背景: JavaScript库是一组预先编写好的JavaScript代码集合&#xff0c;旨在简化常见的网页开发任务。这些库通常包含了许多函数和方法&#xff0c;可以帮助开发人员处理各种任务&#xff0c;比如DOM操作、事件处理、动画效果、AJAX请求等等。使用JavaScript库可以节省开发时间…

如何借助AI工具轻松绘制思维导图

前言 思维导图是一种将思维可视化的工具&#xff0c;它可以帮助我们理清思路、提高效率、促进记忆。传统的思维导图绘制方法需要一定的时间和技巧&#xff0c;而借助AI工具&#xff0c;我们可以轻松绘制思维导图&#xff0c;并将更多时间和精力集中在内容本身。 借助AI工具把…

网络以太网之(2)VLAN协议

网络以太网之(1)VLAN协议 Author: Once Day Date: 2024年4月1日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文档可参考专栏&#xff1a;通信网络技术_Once-Day…

输出100~200之间的素数(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//实现素数判断函数&#xff1b; int Prime(int number) {//初始化变量值&#xff1b;int divided 2;int JudgementCondition 0;//循环判断素数&#xff1b;wh…

基于SpringBoot+微信小程序的外卖跑腿点餐(订餐)系统设计与实现+毕业论文(12000字)

介绍 Spring Boot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。通过这种方式&#xff0c;Spring Boot致力于在蓬勃发展的快速应…

美联储,非必要,不降息

美联储“没必要、没空间、没动力”降息&#xff0c;也会尽量避免货币政策干扰大选&#xff0c;用“口头降息”代替实际调整是现实选择&#xff0c;市场降息预期将继续推迟和下调。 前言&#xff1a; 当前美国经济从各个方面看均并未表现出疲态——新增就业持续修复&#xff0c;…

俄罗斯Yandex广告推广如何开户及费用?

作为俄罗斯首屈一指的搜索引擎&#xff0c;Yandex凭借其超过60%的市场份额&#xff0c;成为企业进入俄罗斯、触及俄语消费者的关键入口。然而&#xff0c;对于不熟悉当地市场环境与网络营销规则的企业而言&#xff0c;成功开户并高效运营Yandex广告并非易事。云衔科技凭借专业的…

大模型量化技术-AWQ

大模型量化技术-AWQ 在2023年6月,Ji Lin等人发表了论文AWQ:Activation-aware Weight Quantization for LLM Compression and Acceleration。 这篇论文详细介绍了一种激活感知权重量化算法,可以用于压缩任何基于 Transformer 的语言模型,同时只有微小的性能下降。关于 AWQ 算…

2024 年云繁荣:驾驭人工智能驱动转型浪潮

在人工智能革命的核心&#xff0c;2024 年见证了云计算应用的空前激增。云计算的繁荣不仅仅是异地存储数据&#xff0c;而是创建动态的智能基础设施&#xff0c;推动人工智能的指数级增长。让我们深入探讨推动这一现象的关键因素和趋势。 01 人工智能和云&#xff1a;共生关系…

Mac上怎么合并多张图片?

Mac上怎么合并多张图片&#xff1f;上班过的小伙伴都应该知道&#xff0c;合并拼接图片是一件非常重要且经常需要使用到的图片处理技术&#xff0c;将多张图片合并拼成一张之后能够展现出更多的图片内容。在Mac电脑上&#xff0c;合并多张图片是一项常见的任务&#xff0c;无论…

鸿蒙OS开发实例:【ArkTS类库多线程@Concurrent装饰器校验并发函数】

在使用TaskPool时&#xff0c;执行的并发函数需要使用该装饰器修饰&#xff0c;否则无法通过相关校验。从API version 9开始&#xff0c;该装饰器支持在ArkTS卡片中使用。 装饰器说明 Concurrent并发装饰器说明装饰器参数无。使用场景仅支持在Stage模型的工程中使用。装饰的函…

2024最新软件测试【测试理论+ 接口测试】面试题(内附答案)

一、测试理论 3.1 你们原来项目的测试流程是怎么样的? 我们的测试流程主要有三个阶段&#xff1a;需求了解分析、测试准备、测试执行。 1、需求了解分析阶段 我们的 SE 会把需求文档给我们自己先去了解一到两天这样&#xff0c;之后我们会有一个需求澄清会议&#xff0c; …

【微信小程序】流量主-激励视频(激励广告)下发策略,每天三次免费体验,然后再次点击触发激励视频,当日不再触发。

如题&#xff1a; 允许用户有三次体验效果&#xff0c;然后弹出激励视频弹窗&#xff0c;之后当日不再弹出。 体验小程序&#xff1a; /*** 判断当前项目当天是否点击超过3次&#xff0c;触发广告效果。* 若&#xff0c;当天低于三次&#xff0c;则新增&#xff0c;若高于…

达梦数据库 优化

谁进行优化&#xff1f;优化什么&#xff1f; 优化不能仅从数据库方面考虑&#xff0c;比如&#xff0c;在存储达到数据库极限、应用涉及人员设计的代码稀巴烂的情况下&#xff0c;进行调优就是杯水车薪的效果。 涉及到优化人员&#xff1a; 数据库管理员应用程序架构师应用…

gulp的基本使用(二)

gulp的基本使用&#xff08;二&#xff09; 任务&#xff08;Tasks&#xff09;创建任务&#xff08;Tasks&#xff09;分类 series()和parallel()的区别series()parallel()代码运行命令结果series() 和 parallel()根据环境运行series() 和 parallel()相互深层嵌套当两个任务的…

C语言:二叉树的构建

目录 一、二叉树的存储 1.1 顺序存储 1.2 链式存储 二、二叉树的顺序结构及实现 2.1堆的概念及结构 2.2堆的构建 2.3堆的插入 2.4堆顶的删除 2.5堆的完整代码 三、二叉树的链式结构及实现 3.1链式二叉树的构建 3.2链式二叉树的遍历 3.2.1前序遍历 …

【Zblog搭建博客网站】windows环境搭建属于自己的博客并发布上线 – cpolar内网穿透

目录 1. 前言 2. Z-blog网站搭建 2.1 XAMPP环境设置 2.2 Z-blog安装 2.3 Z-blog网页测试 2.4 Cpolar安装和注册 3. 本地网页发布 3.1. Cpolar云端设置 3.2 Cpolar本地设置 4. 公网访问测试 5. 结语 1. 前言 想要成为一个合格的技术宅或程序员&#xff0c;自己搭建网…

论文精读--GPT4

现有的所有模型都无法做到在线学习&#xff0c;能力有限&#xff0c;而让大模型拥有一个tools工具库&#xff0c;则可以使大模型变成一个交互式的工具去协调调用API完成任务&#xff0c;同时GPT4还联网了&#xff0c;可以不断地更新自己的知识库 多模态模型&#xff0c;接受文…