使用bash shell提供的基本命令操作Linux文件和目录

Linux shell 是个交互式工具,使用户可以启动程序、管理文件以及管理Linux系统上的进程。shell的核心是命令行提示符,是shell的交互部分,它允许你输入文本命令,之后解释命令并在内核中执行。

shell包含了一组内置命令,可以用来完成一系列的操作,比如复制文件、移动文件、重命名文件以及显示和终止系统上正在运行的程序。

shell命令也可以写入文件中作为程序来执行,这些文件被称作shell脚本。

1.启动shell
大多数Linux发行版的默认shell都是GNU bash shell,它是作为常规程序运行的,通常是在用户登录终端时启动,登录时系统启动的shell取决于用户账户的配置。

/etc/passwd 文件中包含了所有用户列表以及每个用户的基本配置信息。

2.shell提示符
默认的shell提示符是美元符号$,这个符号表明shell在等待用户输入。

3.Linux文件系统
首先我们先了解一下Linux的文件系统的构建方式,这和Windows有很大区别。
Windows为每个物理磁盘驱动器分配一个盘符,每个驱动器都会有自己的目录结构,以便访问存储在其上的文件。区别于Windows,Linux在路径名中不使用驱动器盘符,Linux将文件存储在单个目录结构中,这个目录我们称之为 虚拟目录

虚拟目录结构包含一个称为根(root)目录的基础目录,根目录下的目录和文件会按照访问它们的目录路径一一列出,这点和Windows类似。

举个例子,Linux文件路径/home/valie/Document/read.txt,表明read.txt位于Document目录,Document又位于valie目录,valie则在home目录中,但并没有说明home目录存在于哪个物理磁盘中。

Linux的根驱动器一般用来存储系统文件,而用户文件通常存储在另一个驱动器里,上面所举例的home目录就是位于这个驱动启器中,那么在没有给出驱动器盘符的情况下,系统又是如何访问到home目录的呢?

这里就要提到 ‘挂载点 ’的概念,那么什么是挂载点?
Linux会在根驱动器中创建一些特别的目录,这些目录称之为‘挂载点’,但事实上这些目录并不是存储在根驱动器上,而是存储在另一个驱动器上。

Linux的虚拟目录

  • / : 虚拟目录的根目录,通常不会在这里存储文件
  • /usr :用户安装软件的目录
  • /var :可变目录,用以存放经常变化的文件,比如日志文件
  • /bin :二进制目录,存放许多GNU用户级的工具
  • /dev :设备目录,Linux在这里创建设备节点
  • /home :主目录,Linux在这里创建用户目录
  • /etc :系统配置文件目录
  • /boot :启动目录,存放启动文件
  • /opt :可选目录,通常用于存放可选的软件包
  • /lib :库目录,存放系统和应用程序的库文件
  • /tmp :临时目录,可以在该目录创建和删除临时工作文件

在启动一个新的shell提示符后,会话通常是从用户的主目录开始。

4.切换目录

cd + 绝对路径

cd ..  //切换到当前目录的父目录

5.文件和目录列表

  • ls 显示当前目录下的文件和目录
  • ls -F 添加-F参数用于区分目录和文件,它会在目录名后添加正斜线/,另外会在可执行文件后加星号*
  • ls -a 显示当前目录下的全部文件,包括隐藏文件(以点.开头,通常用来保存配置信息)
  • ls -R 列出当前目录下的所有文件和目录,包括子目录下的文件和目录
  • ls -l 参数-l会以长列表的格式输出,每一行都列出了单个文件或目录的更多信息。

6.ls命令的两种命令行参数

  • 单字母参数:以英文破折号开始
  • 全字母参数:以双英文破折号开始

大部分参数都有单字母和双字母两种版本,而有的则只有一种,部分列举如下:

单字母 全字母 含义
-a --all 输出包括以.开头的隐藏文件
-F --classify 给条目追加文件类型标识符
-R --recursive 递归地列出子目录内容
-i --inode 显示每个文件的索引节点
-h --human-readable 输出文件或目录的大小,以字节为单位
-s --size 输出每个文件的块大小
-l 按长列表格式输出
--author 输出每个文件的作者

另外,也可以一次使用多个参数。多个双破折线参数必须分开输入,而多个单破折线可以组合成一个字符串,如用-s参数列出文件的块大小,用-a参数列出所有文件,用-i参数列出每个文件的索引点,用-l参数产生一个长列表,组合起来就是:
ls -sail

终端输出结果

7.过滤输出列表
ls + 文件名:当使用文件名作为过滤器时,ls命令只显示这个文件的信息;

有时候我们并不确定文件的确切名称,或者文件的类型,这时候可以使用标准通配符来输出满足要求的文件:

  • 问号?代表一个字符
  • 星号*代表零个或多个字符

比如我想查找Applet文件,但是并不确定它的文件类型,这时候可以这样使用过滤方法:
ls Applet*

终端输出结果

并不确定文件名时的查找方法

8.创建文件
有时,在写入数据之前我们希望这个文件就已经存在,这时可以用touch命令来创建空文件。
touch + 文件名,例如:

创建并打印 time.txt文件

9.复制文件

  • cp命令用于将文件或目录复制到另一个位置,最基本的用法就是cp+源文件名+目标文件名,例如:

复制 time.txt文件到当前目录下,新文件名为 time1.txt

从上图可以看出,time.txt是一个全新的文件,有自己的索引节点。

另外,也可以采用绝对路径来复制文件:

使用绝对路径将源文件time.txt复制到当前目录中,新文件与源文件同名

  • 在cp命令中使用命令行参数,以下是部分参数

| 参数 | 含义 |
| :--: | -- |
| -a | 归档文件,并保留原有的属性 |
| -b | 创建已存在的目标文件的备份,而非覆盖它 |
| -f | 强制覆盖已存在的目标文件,不提示 |
| -p | 保留文件属性,如访问时间、修改时间等 |
| -r | 递归地复制文件 |
| -R | 递归地复制目录 |

使用 -p 参数复制源文件

从上图可以看出对于已经存在的time1.txt文件,强行复制之后拥有和源文件time.txt一样的修改时间。

使用 -R 参数递归地复制整个目录的内容

使用通配符将所有以time开头的文件复制到simple目录中

使用 -a 参数将以time开头的文件归档到 simple目录中,文件属性保留

10.使用ln命令创建链接文件
有时,我们需要在系统上维护同一份文件的一到多个副本,用上面个的cp命令复制多个副本并同时维护的方式虽然可行,但很费时费力。这时我们可以用创建虚拟副本的方法来完使维护工作变得轻松起来,这个虚拟副本就称为链接。链接是目录中指向文件真实位置的占位符。

Linux下的两种不同类型的文件链接:

  • 硬链接,创建方式:ln + 源文件名 + 目标文件名
  • 软连接,即符号链接,创建方式:ln -s + 源文件名 + 目标文件名

硬链接与软链接的区别在于,硬链接只能在同种存储媒体上的文件之间创建,不能在不同挂载点下的文件间创建,也就是说不在同一个磁盘分区中文件之间不能创建硬链接,而是使用软链接。

创建一个指向 time.txt文件的硬链接 time1.txt

从上图可以看出,time1.txt和time.txt文件的索引节点号是相同的,表明实际上它们是同一个文件,并且在我修改了time.txt文件后(time.txt中添加了一行‘This is the first modification.’),time1.txt文件中的内容也同步改变了。

创建一个指向time.txt文件的软连接time2.txt
从上图看到,文件time2.txt的索引节点号与time.txt不同,说明time2.txt是一个单独的文件,并且文件变小了,是因为它只需要存储源文件的信息,并不需要存储文件中的数据。

10.重命名/移动文件或目录
在Linux中,文件和目录的重命名和移动使用的是mv命令(moving),例如:

将time.txt文件重命名为time1.txt

需要注意的是,移动一个有软链接指向的文件会使得它的软链接失效,如下图time1.txt是一个指向time.txt的硬链接,time2.txt是一个指向time.txt的软链接,当time.txt重命名为time3.txt后,time2.txt软链接已不再是一个有效链接,已经无法访问到它所指向的源文件中的内容:

time.txt重命名后,它的软链接 time2.txt失效,硬链接保持有效

另外mv命令也用于将文件移动到别的目录中,如下:

将 time.txt文件移动到当前目录中的 dir目录中

11.删除文件
删除文件的操作命令是rm,常用参数如下:

参数 含义
-i interactive,即删除前询问是否确认删除
-f force ,即无视提示符,强制删除
-r recursive,删除目录,在删除这一目录前会事先删除目录中的内容

同样需要注意的是,当删除一个带有软链接的文件时,它的软链接会失效,硬链接保持有效。这是因为硬链接文件具有和源文件相同的索引节点号,硬链接会维持这个索引节点号来保留数据,直到你删除了最后一个指向这个索引节点的硬链接。这一点类似于OC中的引用计数。软链接存放的是源文件的路径,当源文件已经不存在时,软链接中所指向的源文件路径也就不可用了,所以软链接失效。

删除 time.txt源文件后,软链接 time2.txt无法访问到源文件的内容

12.创建目录
创建目录不能使用touch命令,而是使用mkdir命令,如:
mkdir dir

13.删除目录

· 删除目录的基本命令是rmdir, 但是rmdir只能删除空目录,当目录下有文件时,这个目录就不能被删除:

dir目录下有 time.txt文件

要想删除一个非空目录,我们得用到rm命令,rm -r + 目录名称 会递归地删除目录中的文件,最后再删除目录本身:

使用 rm -r 命令删除非空目录 dir

14.查看文件信息
stat + 文件名 可以查看文件的所有状态信息
file + 文件名 查看文件类型
file命令将文件分为3类:

  • 文本文件:包含可打印字符的文件
  • 可执行文件:可在系统上运行的文件
  • 数据文件:包含不可打印的二进制字符,又不能在系统上运行的文件

15.查看文件内容

  • 使用cat命令查看文件所有数据内容,cat命令常用的参数如下:
参数 含义
-n 给所有行添加行号
-b 只给有文本的行添加行号
-s 将多个空白行压缩成单个空白行
-e 在每行结束处添加美元符$
-t 用^+竖线去替代文中的制表符(ps:简书写作格式bug)

使用 cat命令打印文件内容

使用 -n 参数给所有行添加行号

使用 -b参数给只有文本的行添加行号

使用 -s参数将多个空白行压缩到单个空白行

使用 -e 参数在每行结束处显示 $

使用 -t参数将制表符用 ^| 代替

使用cat命令会打印出文件的全部内容,但是如果文件内容非常多,那么查看文件内容非常不便,这时可以使用more命令。

  • 使用more命令查看文件内容 -- 实现分页查看

more命令常用的参数列举:

参数 含义
+n 从第n行开始显示
-n 设置每屏大小为n行
-s 将多个空白行压缩成单个空白行

使用的常用操作符有:

操作命令 含义
Enter 向下n行,默认为1行,需要设置
cmd + F 向下滚动一屏
空格键 向下滚动一屏
cmd + B 返回上一屏
= 输出当前行的行号
V 调出vi编辑器
Q 退出more命令
  • 使用head命令查看文件的开头内容,默认显示10行
  • 使用tail命令查看文件的尾部内容,默认显示10行

版权声明:本文为博主原创文章,欢迎转载,转载请注明作者、原文超链接。
✿ 获取更多,请戳这儿

Comments
Write a Comment