本文是 i 春秋作家「xiehudie」表哥分享的技术文章,旨在为大家提供更多的学习方法与技能技巧,文章仅供学习参考。本套Linux进阶教程共分为14章,欢迎大家前来系统学习。
前期回顾>>第1章:访问命令行
![Linux进阶教程丨第2章:从命令行管理文件](https://p1-tt.byteimg.com/origin/pgc-image/cd1318395163497db4a70b69d6ebd8f9.png?from=pc)
第2章:从命令行管理文件
文件系统层次结构
Linux系统中的所有文件存储在文件系统中。它们被组织到一个颠倒的目录树中,被称为文件系统层次结构。这棵树是颠倒的,因为树根在该层次结构的顶部,树根的下方延伸出目录和子目录的分支。
![Linux进阶教程丨第2章:从命令行管理文件](https://p6-tt.byteimg.com/origin/pgc-image/9f752a7aee2f4cfab28f50d710f8b14d.png?from=pc)
/目录是根目录,位于文件系统层次结构的顶部。/字符还用作文件名中的目录分隔符。举个例子,如果etc是/目录的子目录,我们就可以将该目录指代为/etc。类似的,如果/etc目录包含一个名字叫xxx的文件,我们也可以将该文件指代为/etc/xxx。
/的子目录用于标准化的用途,以便我们根据文件和用途组织文件。这很方便我们查找文件。举个例子:在根目录中,子目录/boot用于存储启动系统所需的文件。
下表是我根据名称和用途列出的一些系统中最重要的目录。
![Linux进阶教程丨第2章:从命令行管理文件](https://p3-tt.byteimg.com/origin/pgc-image/cd39e0edcef940e0aa9b7b014b617e2f.png?from=pc)
通过名称指定文件
1、绝对路径和相对路径
文件或目录的路径指定其唯一的文件系统位置。跟随文件路径会遍历一个或多个指定的子目录,用正斜杠(/)分隔,直到达到目标位置。目录也称为文件夹,包含其他文件和其他子目录。它们的引用方式可以与文件相同。
注意:Linux文件名中可以接受空格字符作为其一部分。但是,shell也使用空格来分隔命令行上的选项和参数。如果我们输入的命令中包含了名称带有空格的文件,则shell可能会误解译该命令,并认为我们要在空格处开始一个新文件名或其他参数。通过将文件名放在引号中可以避免这种情况,但如果我们并不需要在文件名中使用空格,直接避免使用空格更简单。
2、绝对路径
绝对路径是一个完全限定的名称,用于指定文件存在系统层次结构中的确切位置。它从(/)目录开始,并指定为到达特定文件所必须遍历的每个子目录。文件系统中的每个文件都有一个唯一绝对路径名,可通过一个简单的规则识别:第一个字符是正斜杠(/)的路径名是绝对路径名。例如,系统消息日志文件的绝对路径是/var/log/messages。绝对路径写入起来可能会太长,所有也可以通过相对于shell提示符当前工作目录的位置来查找文件。
3、当前工作目录和相对路径
当用户登录并打开命令窗口时,初始位置通常是该用户的主目录。系统进程也有初始目录,用户和进程根据需要导航至其它目录;术语工作目录或当前工作目录指它们的当前位置。
于绝对路径一样,相对路径也标识唯一文件,仅指定从工作目录到达该文件所需的路径。识别相对路径名遵循一个简单规则:第一个字符是正斜杠之外的其他字符的路径名是相对路径名。位于/var目录的用户可以将消息日志文件指代为log/messages。
Linux文件系统,包含但不限于ext4、XFS、GFS2和GlusterFS,都是区分大小写的。在同一目录中创建FileCase.txt和filecase.txt将生成两个不同的文件。
![Linux进阶教程丨第2章:从命令行管理文件](https://p1-tt.byteimg.com/origin/pgc-image/739502e9bf514352851c54268cb13d1d.png?from=pc)
4、导航路径
pwd命令显示该shell的当前工作目录的完整路径名。这可以帮助我们确定使用相对路径名来访问文件的语法。ls命令列出指定目录的目录内容;如果未指定目录,则列出当前工作目录的内容。
![Linux进阶教程丨第2章:从命令行管理文件](https://p1-tt.byteimg.com/origin/pgc-image/11bf977321a64205a92112e078461681.png?from=pc)
使用cd命令可更改shell的当前工作目录。如果没有为该命令指定r任何参数,它将切换到我们的主目录。(下图是展示了cd命令混用路径和更改shell的当前工作目录)
touch该命令通常将文件的时间戳更新为当前日期和时间,而不进行其他修改。这通常可用于创建空文件夹,因为“触碰”不存在的文件名而导致会创建该文件。(如下图所示)
![Linux进阶教程丨第2章:从命令行管理文件](https://p6-tt.byteimg.com/origin/pgc-image/117491257ba043be8e1a4f33b553c081.png?from=pc)
ls命令具有多个选项,用于显示文件的属性。最常见且最有用的选项是-l(长列表格式)、-a(包含隐藏文件在内的所有文件),以及-R(递归方式,包含所有子目录的内容)。(如下图所示)
![Linux进阶教程丨第2章:从命令行管理文件](https://p6-tt.byteimg.com/origin/pgc-image/04722ee171b54aa58876ec8b634f44b5.png?from=pc)
![Linux进阶教程丨第2章:从命令行管理文件](https://p3-tt.byteimg.com/origin/pgc-image/0c335b90617247a196653cb34105beb7.png?from=pc)
注意:开头为句号(.)的文件名表示隐藏文件;在使用ls和其他命令时,我们无法在普通视图中看到这些文件。这不是一种安全功能,而是隐藏文件用于防止必要的用户配置文件让主目录凌乱不堪。许多命令仅通过特定的命令行选项处理隐藏文件,这样可以预防一个用户的配置被意外复制到其他目录或其他用户。要防止文件内容被不当查看,需要使用文件权限。
cd命令有许多选项,其中一些非常有用,比如cd– :可更改到用户在进入当前目录之前所处的目录和cd .. :隐藏目录上移一个级别,进入其父目录而不必知道确切的父目录名称。(如下图所示)
![Linux进阶教程丨第2章:从命令行管理文件](https://p1-tt.byteimg.com/origin/pgc-image/78ca542cc3c0426d8eb6e6c6ac59633e.png?from=pc)
![Linux进阶教程丨第2章:从命令行管理文件](https://p1-tt.byteimg.com/origin/pgc-image/0d7660dc50434571b1cebe3f296ef506.png?from=pc)
命令行文件管理
要管理文件,我们需要能创建、删除、复制和移动文件。此外,我们还需要按逻辑关系将它们整理到目录中,这就需要我们能创建、删除、复制和移动文件。(下表是作者整理出来的最常见的文件管理命令)
![Linux进阶教程丨第2章:从命令行管理文件](https://p6-tt.byteimg.com/origin/pgc-image/b32cc4197bc745febcd47b197bf51694.png?from=pc)
1、创建文件
mkdir命令可以创建一个或多个目录或子目录,它取我们要创建的目录的路径列表作为参数。如果该目录已存在,或者我们将试图在一个不存在的目录中创建子目录,这个时候就需要我们谨慎的使用mkdir –p该命令,因为拼写错误可能会创建非预期的目录,而不会生成错误消息。(如下图所示,假如我们需要在xxx/user目录下创建文件,我们把目录打成xxx/use,那么就会报错)
![Linux进阶教程丨第2章:从命令行管理文件](https://p6-tt.byteimg.com/origin/pgc-image/8838d15d74f64b38846e491626e36387.png?from=pc)
2、复制文件
cp命令可复制文件,在当前目录或指定目录中创建新文件。它也可以将多个文件复制到某一目录中。在通过一个命令复制多个文件时,最好一个参数必须为目录。复制的文件在新的目录中保留其原有名称。如果目标目录中存在相同名称的文件,则会覆盖现有文件。默认情况下,cp不复制目录,而会忽略它们。
![Linux进阶教程丨第2章:从命令行管理文件](https://p6-tt.byteimg.com/origin/pgc-image/ab57e44c758b4ecfa6fca4e99ab055f3.png?from=pc)
3、移动文件
mv命令可以将文件从一个位置移动到另一个位置。如果我们将文件的绝对路径视为它的全名,那么移动文件上和重命名一样,文件内容不变。(如下图所示)
![Linux进阶教程丨第2章:从命令行管理文件](https://p6-tt.byteimg.com/origin/pgc-image/3d73e98e76d74a1ea3dc29b47f52c149.png?from=pc)
4、删除文件和目录
rm命令可删除文件,默认情况下,除非添加了-r或—recusive选项,否则rm不会删除包含文件的目录。rm –r命令首先遍历每个子目录,在删除每个目录之前逐一删除其中的文件,我们可以使用rm –ri命令以交互方式提示确认,然后再删除。这基本上于使用-f选项相反,后者强制删除不提示用户进行确认。