linux-vi和文件操作

在 Linux 系统的世界里,有一个核心思想贯穿始终,那就是 “万物都是文件”。这一理念极大地简化了系统资源的管理和操作,为用户和开发者提供了统一且高效的交互方式。本文将深入探讨这一理念在 Linux 文件系统中的具体体现,从硬盘分区管理到文件类型、权限,再到目录操作和文本编辑等各个方面。

硬盘分区管理:提升存储效率的基石

硬盘作为数据存储的核心硬件,在 Linux 系统中通过分区管理来提高使用与管理效率。存储被划分为多个逻辑分区,每个逻辑分区都是硬件存储的一部分。每个分区可看作一个独立的逻辑单元,支持诸如格式化、挂载、卸载等操作。

例如,当我们新添加一块硬盘时,通常会先对其进行分区,将其划分为不同用途的逻辑区域,如一个分区用于安装操作系统,一个分区用于存储用户数据等。通过这种方式,不仅可以更好地组织数据,还能在出现问题时,方便地对特定分区进行维护,而不影响其他分区的数据。

创建文件系统:为数据存储搭建框架

在分区之上,需要创建文件系统。这一过程主要包含两个关键步骤:一是将分区初始化为特定的文件系统,从而创建出能够存储文件和数据的结构;二是通过这种初始化,确保文件能够按照预定的规则进行存储、读取和管理。常见的 Linux 文件系统有 ext4、XFS 等,不同的文件系统在性能、可靠性和功能特性上各有差异,用户可根据实际需求选择合适的文件系统进行格式化。

文件系统的组织架构:基于目录的层次体系

整个 Linux 文件系统基于目录来组织,形成了一种类似于树状的结构,即 “目录树”。在这个目录树中,“/” 具有特殊的双重含义:它既是根目录,代表整个文件系统的起点,包含了所有其他目录和文件;同时也是路径分隔符,用于区分不同层级的目录和文件。

文件的广义定义:超越传统的数据单元

在 Linux 的 “万物都是文件” 理念下,文件的定义被大大拓宽。它不仅仅指磁盘上的数据存储单元,还涵盖了物理设备和虚拟实体。这种广泛的设定带来了诸多优点。一方面,统一了对各种资源的操作方式,使得对文件、设备等的操作具有通用性;另一方面,标准化了输入和输出,极大地简化了 I/O 操作。例如,在 Linux 中,我们可以像操作普通文件一样操作硬件设备文件,通过读取和写入设备文件来与硬件进行交互。

文件类型的多样分类

Linux 系统中的文件主要分为三类:

  1. 普通文件:这是用户日常使用最为频繁的文件类型,存储在硬盘等设备上。普通文件又可进一步细分为文本文件,如纯文本文件、配置文件等,其内容以字符形式存储,可直接查看和编辑;以及二进制文件,包括可执行文件、图像、音频等,这类文件的内容以二进制格式存储,通常需要特定的程序来解析和处理。
  2. 目录文件:目录文件并不存储常规的数据,其主要功能是保存其他文件的信息,类似于一个文件索引,通过它可以快速定位和访问文件系统中的其他文件和目录。
  3. 特殊文件:特殊文件与硬件设备紧密相关,通过这些文件,系统能够实现对硬件设备的访问和控制。例如,/dev 目录下的文件大多是特殊文件,它们代表了各种硬件设备,如硬盘、光驱、串口等。

通过 file 命令,我们可以轻松查看对应文件的类型,这为用户准确识别和处理不同类型的文件提供了便利。

遵循 FHS 标准:保障跨平台兼容性

为了确保不同 Linux 发行版之间的跨平台兼容性,Filesystem Hierarchy Standard(FHS)应运而生。FHS 主要包含以下几个方面的规定:

  1. 定义了以树形结构来组织文件的方式,使得文件系统的布局具有一致性和可预测性。
  2. 明确规定了各个目录的名称和作用,让用户和开发者能够清晰了解每个目录的用途。
  3. 定义了两层规范:一是规定了 “/” 目录下应该放置哪些文件;二是对 “/usr” 以及 “/var” 目录的子目录进行了详细定义。例如,“/usr” 目录主要用于存放应用程序,“/var” 目录用于存放经常变化或增长的文件,如日志、缓存、邮件、打印队列等。

系统定义目录的功能与用途

在 Linux 文件系统中,有许多系统定义的目录,它们各自承担着特定的功能:

  1. /:根目录,整个文件系统的根基,包含了文件系统中的所有内容,是目录树的起始点。
  2. /bin:存放着用户可执行的文件,即外部命令,如 cal(日历命令)、date(日期命令)、who(查看在线用户命令)、sh(Bourne shell)、bash(Bourne - Again shell)等。这些命令可供普通用户直接在终端中执行。
  3. /sbin:该目录存放的是管理员可执行的系统管理命令,例如用于系统启动、网络配置、磁盘管理等操作的命令,普通用户通常没有执行这些命令的权限,只有管理员(root 用户)才能使用。
  4. /lib, /lib64:这两个目录用于存放函数库和模块文件,这些文件是程序运行所依赖的基础,不同架构的系统可能会有不同的存放目录,/lib64 一般用于 64 位系统存放 64 位的库文件,/lib 则可能存放 32 位库文件或一些通用的库文件。
  5. /boot:存放 Linux 系统启动时会用到的文件,包括内核文件、引导加载程序(如 GRUB)相关文件等。这些文件对于系统的正常启动至关重要。
  6. /dev:这是设备文件的存放目录,系统中的每一个硬件设备在该目录下都有对应的文件,通过这些文件,用户和程序可以与硬件设备进行交互。例如,/dev/sda 可能代表第一块硬盘,/dev/tty 代表终端设备等。
  7. /mnt, /media:用于临时挂载其他文件系统的目录。/mnt 通常用于手动挂载外部存储设备,如移动硬盘、U 盘等;/media 则一般用于自动挂载可移动设备,当插入设备时,系统会自动将其挂载到 /media 目录下的某个子目录中。
  8. /proc:这是一个虚拟文件系统,它将系统中的进程和内核信息以文本文件的形式呈现出来。我们可以通过 cat 等命令查看对应的进程信息或硬件信息,例如,cat /proc/cpuinfo 可以查看 CPU 的详细信息。/proc 目录下的文件并不实际存储在磁盘上,而是由内核动态生成,反映系统当前的运行状态。
  9. /root:管理员(root 用户)的家目录,root 用户的个人配置文件、数据等通常存储在此目录下。
  10. /home:普通用户的家目录,每个用户在 /home 目录下都有一个以自己用户名命名的子目录,用户的个人文件、配置等都存储在这个目录中,具有较高的私密性。
  11. /etc:用于存储配置文件的重要目录,包含了用户信息、服务的启动信息以及常用服务的配置信息等。例如,/etc/profile 文件用于设置系统环境变量,/etc/passwd 文件存储了用户账户的基本信息。许多系统服务和应用程序在启动时会读取该目录下的配置文件,以确定运行参数和行为。
  12. /usr:存放应用程序的主要目录,类似于 Windows 系统中的 “Program Files” 目录。大部分安装的软件包会将其文件安装到 /usr 目录下的子目录中,如 /usr/bin 存放可执行文件,/usr/lib 存放库文件,/usr/share 存放共享数据等。
  13. /opt:用于存放额外安装的软件目录,通常是一些第三方软件或企业自定义软件的安装位置。与 /usr 目录不同,/opt 目录下的软件相对独立,便于管理和卸载。
  14. /var:如前所述,该目录用于存放经常变化或增长的文件,由于这些文件的内容会不断更新,如日志文件会随着系统运行持续记录新的事件,所以将它们单独存放在 /var 目录下,有利于系统管理和维护,同时也便于对这些动态数据进行监控和分析。
  15. /run:存放程序或服务运行时产生的信息,例如进程的 PID 文件(记录进程 ID)等。这些信息在系统运行期间动态生成,系统重启后可能会重新生成,因此 /run 目录下的内容通常不会被持久保存。
  16. /tmp:用于存放临时文件的目录,许多程序在运行过程中会产生一些临时数据,这些数据通常不需要长期保存,系统会定期清理 /tmp 目录下的文件。用户也可以在该目录下创建临时文件,以满足特定的临时需求。
  17. /sys:存放和内核相关的信息,与 /proc 类似,但 /sys 文件系统更侧重于提供内核对象(如设备驱动程序、总线等)的信息。通过 /sys 目录,用户和管理员可以获取和修改内核对象的一些属性,以调整系统的运行行为。
  18. /srv:存储一些服务启动后需要提取或访问的数据,例如 Web 服务器可能会将网站数据存储在 /srv/www 目录下。不同的服务可以根据自身需求在 /srv 目录下创建相应的子目录来存储数据。

路径表示:绝对路径与相对路径

在 Linux 文件系统中,路径用于定位文件和目录。路径分为绝对路径和相对路径:

  1. 绝对路径:从根目录(/)开始,一直到目标文件或目录的完整路径。例如,/home/user/Documents/file.txt 就是一个绝对路径,它明确地指出了 file.txt 文件位于 /home 目录下的 user 子目录中的 Documents 子目录中。
  2. 相对路径:从当前所在目录出发,到目标文件或目录的路径。相对路径不包含根目录,它是相对于当前工作目录的位置。例如,如果当前工作目录是 /home/user,要访问 Documents 目录下的 file.txt 文件,使用相对路径可以表示为 Documents/file.txt。在相对路径中,可以使用 “..” 来表示回到上一级目录(父目录)。例如,从 /home/user/Documents 目录要回到 /home/user 目录,可以使用 “cd..” 命令。

目录操作命令:管理文件系统的利器

在 Linux 系统中,有一系列用于目录操作的命令,这些命令是用户管理文件系统的常用工具:

  1. pwd:用于显示当前所在目录的绝对路径。当我们在终端中执行复杂的操作,需要明确当前所处的位置时,pwd 命令能提供清晰的信息。例如,在经过多次目录切换后,执行 “pwd” 命令,系统会输出当前所在的完整路径,如 “/home/user/Documents”。
  2. cd:用于切换到某个目录。可以使用绝对路径或相对路径来指定目标目录。例如,“cd /home/user” 会切换到 /home 目录下的 user 子目录;“cd..” 会回到当前目录的父目录;“cd ~” 会回到当前用户的家目录(对于普通用户,通常是 /home/ 用户名;对于 root 用户,是 /root)。
  3. mkdir:用于创建目录。如果要创建单个目录,直接使用 “mkdir 目录名” 即可。例如,“mkdir new_dir” 会在当前目录下创建一个名为 new_dir 的新目录。若要创建多级目录(即递归创建),可以使用 “-p” 选项。例如,“mkdir -p parent_dir/child_dir/grandchild_dir” 会一次性创建 parent_dir 目录及其子目录 child_dir 和孙目录 grandchild_dir,如果这些目录不存在的话。
  4. rmdir:用于删除空目录。其基本语法为 “rmdir 目录名”。例如,“rmdir empty_dir” 会删除当前目录下名为 empty_dir 的空目录。如果目录不为空,rmdir 命令会报错,提示目录非空无法删除。
  5. rm -r:可以递归删除目录及其包含的所有子目录和文件。使用时需谨慎,因为该操作会永久删除指定目录下的所有内容,无法恢复。例如,“rm -r my_dir” 会删除 my_dir 目录及其内部的所有文件和子目录。“-f” 选项用于强制删除,即不提示确认信息直接删除,使用时要格外小心,避免误删重要数据;“-i” 选项用于交互删除,在删除每个文件或目录前,系统会提示用户确认是否删除,这种方式可以减少误操作的风险。
  6. ls:用于展示当前目录中的文件和目录。该命令有多个常用选项:
    • “-i”:显示文件和目录的索引节点号。索引节点是文件系统中用于标识文件的一种数据结构,每个文件和目录在文件系统中都有唯一的索引节点号。
    • “-a”:显示所有文件,包括以点(.)开头的隐藏文件。在 Linux 系统中,以点开头的文件通常被视为隐藏文件,默认情况下,ls 命令不会显示它们。
    • “-l”:以详细信息展示文件和目录,包括文件的权限、所有者、所属组、文件大小、修改时间等信息。例如,“ls -l” 可能会输出类似 “-rwxr - xr-- 1 user group 1024 Apr 15 10:00 example_file” 的信息,其中 “-rwxr - xr--” 表示文件的权限,“1” 表示文件的硬链接数,“user” 是所有者,“group” 是所属组,“1024” 是文件大小(单位为字节),“Apr 15 10:00” 是文件的最后修改时间,“example_file” 是文件名。
    • “-d”:罗列目录本身的信息,而非目录内的文件和子目录信息。例如,当我们只想查看某个目录的属性(如权限、所有者等),而不想查看其内部内容时,可以使用 “ls -ld 目录名”。

文件操作命令:处理文件内容的工具集

除了目录操作命令,Linux 系统还提供了丰富的文件操作命令,用于查看、编辑和处理文件内容:

  1. cat:用于查看文件的内容。它会将文件的全部内容一次性输出到终端。例如,“cat file.txt” 会在终端上显示 file.txt 文件的所有内容。如果文件内容较多,可能会导致终端屏幕快速滚动,不利于查看。
  2. more:用于分页展示文件的内容。使用 “more file.txt” 命令后,文件内容会以一页一页的形式显示,用户可以通过按回车键向下移动一行,按空格键翻页,按 “q” 键退出查看。这种方式适合查看较长的文件,方便用户逐页阅读。
  3. head, tail:这两个命令用于指定输出文件的前面或后面几行。使用 “-n” 选项可以规定输出的行数。例如,“head -n 10 file.txt” 会输出 file.txt 文件的前 10 行内容;“tail -n 5 file.txt” 会输出 file.txt 文件的最后 5 行内容。对于 tail 命令,还有一个 “-f” 选项,它表示持续输出文件的最后几行,直到用户手动停止。这个选项在查看实时更新的日志文件时非常有用,用户可以实时看到日志文件中新增的内容。
  4. wc:用于统计文本文件的行数、单词数和字符数。常用选项如下:
    • “-l”:统计文本文件的行数。例如,“wc -l file.txt” 会输出 file.txt 文件的行数。
    • “-w”:统计文本文件的单词数。单词是以空格或换行符分隔的字符串。
    • “-c”:统计文本文件的字符数,包括所有的字符,如字母、数字、标点符号等。
  5. diff:用于比较两个文件是否相同。通过 “diff file1.txt file2.txt” 命令,系统会逐行对比两个文件的内容,并输出它们之间的差异。如果两个文件完全相同,diff 命令不会输出任何内容;如果存在差异,它会指出哪些行不同以及具体的差异内容,这对于检查文件的修改情况或对比配置文件的变化非常有帮助。

文件权限:保障系统安全与资源控制

在 Linux 系统中,文件权限通过 10 位字母来表示:

  1. 第一位:表示文件的类型。常见的类型有:
    • “d”:表示目录文件。
    • “-”:表示普通文件。
    • “b”:表示块设备文件,这类文件通常用于访问如硬盘等以块为单位进行数据存储和传输的设备。
    • “c”:表示字符设备文件,用于访问如串口、键盘等以字符为单位进行数据传输的设备。
    • “l”:表示链接文件,又分为软链接(符号链接)和硬链接,软链接类似于 Windows 系统中的快捷方式,而硬链接则是为文件创建了一个额外的目录项,多个硬链接可以指向同一个文件实体。
  2. 后面的 9 位:每 3 位一组,分别表示所有者权限、用户组权限和其他人的权限。权限类型包括:
    • 读权限(r)
      • 对于文件:若用户对文件具备读权限,那么该用户能够查看文件的内容。例如,当用户拥有读权限时,可以运用 cat、more 或者 less 等命令来查看文件内容。如果文件权限为 “-r--r--r--”,表示所有者、用户组和其他人都只有读权限,只能查看文件内容,不能进行修改或执行。
      • 对于目录:若用户对目录有读权限,就能够列出该目录下的文件和子目录。可以使用 ls 命令查看目录内容。但仅有读权限,用户无法进入目录或对目录内的文件进行操作。
    • 写权限(w)
      • 对于文件:要是用户对文件有写权限,就可以对文件内容进行修改、删除或者添加。举例来说,借助 nano、vim 等文本编辑器就能修改文件内容。如果文件

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

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

相关文章

Endnote 21显示字段设置与修改详细解析(附Endnote Click)

目录 前言字段设置与详细解释Endnote Click1. 安装 Endnote Click2. 一键获取Edge插件3. 安装完成启动插件4. 检索期刊文献案例5. 在 Endnote Click 我的locker中导入文献 前言 在学术研究的漫漫征途中,高效管理参考文献是每位学者、学生都绕不开的关键环节。Endno…

java使用 ​Stream 流对自定义对象数组去重的

在 Java 中,使用 Stream 流对自定义对象数组去重的核心是确保对象能正确判断“重复”的逻辑。以下是具体实现方法及场景分析: 方法 1:直接使用 distinct()(需重写 equals 和 hashCode) 若自定义对象已正确重写 equals…

C++ (类的设计,对象的创建,this指针,构造函数)

类的设计 C对结构体是有增强的 可以包含函数作为结构体成员 可以直接定义变量 在结构体成员函数里面可以直接访问结构体成员变量 struct student{string name;int age;float score;void play_game(const string &name);}void student::play_game(const string game){}…

《ADVANCING MATHEMATICAL REASONING IN LAN- GUAGE MODELS》全文阅读

《ADVANCING MATHEMATICAL REASONING IN LAN- GUAGE MODELS: THE IMPACT OF PROBLEM-SOLVING DATA, DATA SYNTHESIS METHODS, AND TRAINING STAGES》全文阅读 提升语言模型中的数学推理能力:问题求解数据、数据合成方法及训练阶段的影响 \begin{abstract} 数学推…

网络测试工具:涵盖网络测速、密码查看、故障判断与网络监测

在网络管理与维护的广阔领域中,网络测试工具扮演着至关重要的角色。它们不仅简化了复杂的网络诊断流程,还提升了工作效率。今天推荐一款包含功能全面的网络测试工具:InetTest,是一款免费且开源的网络测试工具,适用于Wi…

小刚说C语言刷题——1005 - 已知一个圆的半径,求解该圆的面积和周长

1.题目描述 已知一个圆的半径,求解该圆的面积和周长。 输入 输入只有一行,只有 1个整数。 输出 输出只有两行,一行面积,一行周长。(保留两位小数)。 令 pi3.1415926。 样例 输入 1 输出 3.14 6.…

【算法】快速排序

算法系列六:快速排序 一、快速排序的递归探寻 1.思路 2.书写 3.搭建 3.1设计过掉不符情况(在最底层时) 3.2查验能实现基础结果(在最底层往上点时) 3.3跳转结果继续往上回搭 4.实质 二、快速排序里的基准排序 …

SoapUI 4.6.4(32位)下载安装教程 - 兼容老旧Windows系统

SoapUI 4.6.4(32位版) 是个老版本的测试工具,专门给 32位 Windows 电脑 用的。现在最新版都是 64 位的了,但如果你还在用老系统,可能还得找这个旧版。 SoapUI 4.6.4工具下载:https://pan.quark.cn/s/c07381db8102 这…

【AI量化第24篇】KhQuant 策略框架深度解析:让策略开发回归本质——基于miniQMT的量化交易回测系统开发实记

我是Mr.看海,我在尝试用信号处理的知识积累和思考方式做量化交易,应用深度学习和AI实现股票自动交易,目的是实现财务自由~ 目前我正在开发基于miniQMT的量化交易系统——看海量化交易系统。 本篇要讲到量化的核心了——策略。说白了每个投资者…

Java面试黄金宝典48

1. C++ 的拷贝构造函数,深拷贝和浅拷贝 定义 拷贝构造函数:在 C++ 里,拷贝构造函数属于特殊的构造函数,其功能是使用一个已存在的对象来初始化一个新对象。当对象以值传递的方式作为参数传给函数、函数返回对象、用一个对象初始化另一个对象时,拷贝构造函数会被调用。浅拷…

OpenCV学习之获取图像所有点的坐标位置(二)

1.功能介绍 (1)使用openCV解析了.jpeg、.jpg、.png格式的图像文件,输出了图像的宽、高、通道数; (2)创建txt格式文件,保存图像中各像素点的rgba值。 2.环境介绍 操作系统:window10 开发语言:visual studio 2015 c++ 3.功能实现过程 3.1环境设置 (1)打开Vs2015…

B2B2C多用户商城平台 的两种创新玩法

以前随便搞个淘宝京东那样的商城就能躺着赚钱的日子早过去了!现在市面上各种电商玩法花样百出:小红书那种刷着刷着就下单的"种草"电商,拼多多那种"帮我砍一刀"的社交电商,还有抖音快手那种看着视频突然就想买…

【Bluedroid】A2DP Sink播放流程源码分析(二)

接上一篇继续分析:【Bluedroid】A2DP Sink播放流程源码分析(一)_安卓a2dp sink播放流程-CSDN博客 AVDTP接收端(Sink)流事件处理 bta_av_sink_data_cback 是 Bluedroid 中 A2DP Sink 角色的 AVDTP 数据回调函数,负责处理接收端的…

抗量子算法验证工具

抗量子算法计算工具 抗量子算法验证工具ML-KEMML-DSASLH-DSA 抗量子算法验证工具 2024年末,美国NIST陆续公布了FIPS-203、FIPS-204、FIPS-205算法标准文档,抽空学习了一下,做了个算法计算工具。 ML-KEM ML-DSA SLH-DSA 需要的朋友可留言交流…

2025年PMP考试有哪些变化?难点在哪里?

PMP(项目管理专业人士资格认证)考试因其广泛的行业认可度和实用性,成为许多专业人士提升职业竞争力的重要选择。然而,对于初次接触PMP考试的考生来说,其广度与深度的平衡、理论与实践的结合,以及跨文化思维…

Docker学习笔记-docker安装、删除

一、在centOS 7中docker的默认安装目录 # Docker 主配置文件目录 ls /etc/docker# Docker 数据目录(镜像、容器、卷等) ls /var/lib/docker# Docker 可执行文件路径 which docker # 输出类似 /usr/bin/docker 二、docker文件目录说明 目录/文件用途/…

MATLAB求和∑怎么用?

MATLAB求和∑怎么用? 一:题目:求下列方程的和 二、代码如下 1.syms函数 (方法一) 代码如下(示例): 1. syms x 2. symsum((x.^22*x).^3,1,100) 3. 2.直接用循环 (方法二) 代码如下&am…

每日算法-链表(2.两数相加、24.两两交换链表中的节点、143.重排链表)

一.两数相加 1.1题目描述 1.2题解思路 定义两个指针l1,l2依次遍历两个链表,用变量add存储l1加l2的值,将add的个位数取出来充当新节点的值,然后将add的个位数删去,即add /10,循环此操作。 重点分析: 1.跟…

Flutter学习 滚动组件(1):ListView基本使用

目录 一、ListView构造方法1.1 常规方法1.2 ListView.builder1.3 ListView.separated 二、自定义ListView样式和布局:三、ListView性能优化:总结: 一、ListView构造方法 主要以下几种方法: 常规方法,直接使用默认的构…

ESLint常见错误

1、Strings must use singlequote —— 字符串必须使用单引号 2、Extra semicolon semi——额外的分号:一行语句结尾不能添加分号 3、Unexpected trailing comma —— 行尾多了一个逗号 4、Newline required at end of file but not found ——文件结尾必须要新加…