章节目录:
- 一、浏览文件系统
- 1.1 Linux 文件系统
- 1.2 遍历目录
- 二、列出文件和目录
- 三、处理文件
- 3.1 创建文件
- 3.2 复制文件
- 3.3 命令行补全
- 3.4 链接文件
- 3.5 文件重命名
- 3.6 删除文件
- 四、管理目录
- 4.1 创建目录
- 4.2 删除目录
- 五、查看文件内容
- 5.1 查看文件类型
- 5.2 查看整个文件
- 5.3 查看部分文件
- 六、结束语
本章内容:
浏览文件系统
列出文件和目录
管理文件和目录
查看文件内容
一、浏览文件系统
当登录系统并获得
shell
命令提示符后,你通常位于自己的主目录中。一般情况下,除了主目录,你还想探索 Linux 系统中的其他领域。
1.1 Linux 文件系统
-
Windows 中,计算机上安装的物理驱动器的分区决定了文件路径,Windows 会为每个物理磁盘分区分配一个盘符,每个分区都有自己的目录结构,用于访问存储在其中的文件。
-
Linux 的路径中不使用驱动器盘符,Linux 会将文件存储在名为虚拟目录( virtual director )的单个目录结构中,虚拟目录会将计算机中所有存储设备的文件路径都纳入单个目录。
-
Linux 虚拟目录结构只包含一个称为根(
root
)目录的基础目录。根目录下的目录和文件会按照其访问路径一一列出,这点跟 Windows 类似。 -
示意图:
/home/rich/Documents/test.log :表明文件 test.log 位于 Documents 目录,该目录位于 rich 目录,而 rich 目录则包含在
home
目录中。
-
要注意的是,路径本身没有提供任何有关文件究竟存放在哪个物理磁盘中的信息。
-
Linux 虚拟目录中是通过根驱动器来协调管理各个存储设备,根驱动器包含了虚拟目录的核心,其他目录都是从那里开始构建的。
-
Linux 会使用根驱动器上一些特别的目录作为挂载点( mount point )。挂载点是虚拟目录中分配给额外存储设备的目录,即便它们位于其他物理驱动器中。
-
示意图:
- 上图展示了计算机中的两块硬盘,一块硬盘( Disk 1 )与虚拟目录的根目录关联,其他硬盘可以挂载到虚拟目录结构中的任何地方。而另一块硬盘( Disk 2 )被挂载到了用户主目录所在的
/home
位置。(系统文件通常存储在根驱动器中,而用户文件则存储在其他驱动器中。) - 以下列出常见的 Linux 目录名:
目录 | 用途 |
---|---|
/bin | Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。 |
/boot | 这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。 |
/dev | Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。 |
/etc | Etcetera(等等)的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。 |
/home | 用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。 |
/lib | Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,几乎所有的应用程序都需要用到这些共享库。 |
/lost+found | 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。 |
/media | Linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。 |
/mnt | 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。 |
/opt | Optional (可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。 |
/proc | Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。 |
/root | 该目录为系统管理员,也称作超级权限者的用户主目录。 |
/sbin | Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。 |
/selinux | 这个目录是 Redhat / CentOS 所特有的目录,Selinux 是一个安全机制,类似于 Windows 的防火墙,但是这套机制比较复杂,这个目录就是存放 Selinux 相关的文件的。 |
/srv | 该目录存放一些服务启动之后需要提取的数据。 |
/sys | 该文件系统是内核设备树的一个直观反映,当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。 |
/tmp | Temporary(临时) 的缩写这个目录是用来存放一些临时文件的。 |
/usr | Unix Shared Resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。 |
/usr/bin | 系统用户使用的应用程序。 |
/usr/sbin | 超级用户使用的比较高级的管理程序和系统守护程序。 |
/usr/src | 内核源代码默认的放置目录。 |
/var | Variable(变量)的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。 |
/run | 是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。 |
1.2 遍历目录
在 Linux 文件系统中,可以使用目录切换
cd
命令来将 shell 会话切换到另一个目录。
- 应用示例:
# 1.绝对路径切换。
[root@VM-8-11-centos /]# cd /usr/bin/
[root@VM-8-11-centos bin]# pwd
/usr/bin
# 2.从任何一级快速跳回到主目录。
[root@VM-8-11-centos bin]# cd
[root@VM-8-11-centos ~]# pwd
/root
# 3.相对路径切换:单点号表示当前目录。
[root@VM-8-11-centos ~]# cd .
[root@VM-8-11-centos ~]# pwd
/root
# 4.相对路径切换:双点号表示当前目录的父目录。
[root@VM-8-11-centos ~]# cd ..
[root@VM-8-11-centos /]# pwd
/
二、列出文件和目录
要知道系统中都有哪些文件,可以使用列表命令
ls
。
ls
常用命令选项:
选项 | 描述 |
---|---|
-a | 显示隐藏文件。 |
-d | 只列出目录(不递归列出目录内的文件)。 |
-l | 显示长列表。 |
-F | 区分文件和目录。 |
-r | 倒序显示文件和目录。 |
-t | 将按照修改时间排序,最新的文件在最前面。 |
-lh | 以人类可读的方式显示当前目录中的文件和目录大小。 |
通配符 | ? 表示任意单个字符;* 表示零个或多个字符;! 表示将不要的内容排除在外。 |
- 应用示例:
[root@VM-8-11-centos /]# ls
bin boot data dev etc home lib lib64 lost+found media mnt mydata opt proc root run sbin srv sys tmp usr var
三、处理文件
3.1 创建文件
有时应用程序希望在执行写入操作之前日志文件就已经存在。对此,可以使用
touch
命令轻松创建空文件。
- 应用示例:
[root@VM-8-11-centos tmp]# ll
total 0
# 创建`test.log`空文件。
[root@VM-8-11-centos tmp]# touch test.log
[root@VM-8-11-centos tmp]# ll
total 0
-rw-r--r-- 1 root root 0 May 12 22:01 test.log
3.2 复制文件
将文件和目录从文件系统的一个位置复制到另一个位置可谓是系统管理员的日常操作,
cp
命令可以完成这项任务。
cp
常用命令选项:
选项 | 描述 |
---|---|
-a | 此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。 |
-d | 复制时保留链接。这里所说的链接相当于 Windows 系统中的快捷方式。 |
-f | 覆盖已经存在的目标文件而不给出提示。 |
-i | 与 -f 选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答 y 时目标文件将被覆盖。 |
-p | 除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。 |
-r | 若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。 |
-l | 复制文件,只是生成链接文件。 |
- 应用示例:
# 1.查看目标目录和源目录。
[root@VM-8-11-centos home]# ls test01/
[root@VM-8-11-centos home]# ls test02/
2.log
# 2.复制文件至目标目录,并以新文件名进行命名。
[root@VM-8-11-centos home]# cp test02/2.log test01/1.log
# 3.复制结果。
[root@VM-8-11-centos home]# ls test01/
1.log
[root@VM-8-11-centos home]# ls test02/
2.log
[root@VM-8-11-centos home]#
3.3 命令行补全
使用命令行的时候,很容易输错命令、目录名或是文件名。此时,命令行补全(制表键)允许你在输入文件名或目录名的时候,按一下制表键可快速将内容补充完整。
- 应用示例:
[root@VM-8-11-centos tmp]# ll
total 0
# 1.创建一个名字很长的文件。
[root@VM-8-11-centos tmp]# touch really_test_test_test_long_file_name.log
# 2.此处输入`cp`命令后,在输入`r`,按下键盘上的`tab`键可以进行内容补全。
[root@VM-8-11-centos tmp]# cp really_test_test_test_long_file_name.log
3.4 链接文件
系统中维护同一个文件或多个副本,可以使用单个物理副本加多个虚拟副本(链接)的方法代替创建多个物理副本。链接时目录中指向文件真实位置的占位符。Linux 中有两种类型的文件链接,分别是:符号链接,硬链接。
ln
常用命令选项:
选项 | 描述 |
---|---|
-s | 软链接(符号链接)。 |
- 符号链接(也称为软链接):是一个实实在在的文件,该文件指向内存放在虚拟目录结构中某个地方的另一个文件。
[root@VM-8-11-centos tmp]# ll
total 0
-rw-r--r-- 1 root root 0 May 13 08:00 test.log、
# 1.创建软链接。
[root@VM-8-11-centos tmp]# ln -s test.log softLink
[root@VM-8-11-centos tmp]# ll
total 0
lrwxrwxrwx 1 root root 8 May 13 08:01 softLink -> test.log
-rw-r--r-- 1 root root 0 May 13 08:00 test.log
- 硬链接:创建的是一个独立的虚拟文件,其中包含了原始文件的信息以及位置。(要想创建硬链接,原始文件也必须事先存在。)
# 1.创建硬链接。
[root@VM-8-11-centos tmp]# ln test.log hardLink
[root@VM-8-11-centos tmp]# ll
total 0
-rw-r--r-- 2 root root 0 May 13 08:00 hardLink
lrwxrwxrwx 1 root root 8 May 13 08:01 softLink -> test.log
-rw-r--r-- 2 root root 0 May 13 08:00 test.log
-
软链接与硬链接区别:
- 软链接以路径的形式存在,类似于Windows操作系统中的快捷方式;硬链接以文件副本的形式存在。但不占用实际空间。
- 软链接可以跨文件系统 ,硬链接只有在同一个文件系统中才能创建。
- 软链接可以对一个不存在的文件名进行链接。
- 软链接可以对目录进行链接,而硬链接不可以。
3.5 文件重命名
在 Linux 中,重命名文件称为移动( moving )。
mv
命令可以将文件和目录移动到另一个位置或是重新命名。
mv
常用命令选项:
选项 | 描述 |
---|---|
-b | 当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份。 |
-i | 如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件,输入 y 表示直接覆盖,输入 n 表示取消该操作。 |
-f | 如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件。 |
-n | 不要覆盖任何已存在的文件或目录。 |
-u | 当源文件比目标文件新或者目标文件不存在时,才执行移动操作。 |
- 应用示例1:
[root@VM-8-11-centos tmp]# ll
total 0
-rw-r--r-- 1 root root 0 May 13 08:18 aaa.log
# 1.修改文件名。
[root@VM-8-11-centos tmp]# mv aaa.log bbb.log
[root@VM-8-11-centos tmp]# ll
total 0
-rw-r--r-- 1 root root 0 May 13 08:18 bbb.log
- 应用示例2:
# 1.查看当前文件及所在的目录。
[root@VM-8-11-centos test]# ll
total 0
-rw-r--r-- 1 root root 0 May 13 08:18 bbb.log
[root@VM-8-11-centos test]# pwd
/home/test
# 2.移动文件至另一目录,并对目标目录进行查看。
[root@VM-8-11-centos test]# mv bbb.log ../tmp/
[root@VM-8-11-centos test]# ll ../tmp/
total 0
-rw-r--r-- 1 root root 0 May 13 08:18 bbb.log
# 3.查看当前目录,文件已被成功移动。
[root@VM-8-11-centos test]# ll
total 0
[root@VM-8-11-centos test]# pwd
/home/test
3.6 删除文件
在 Linux 中,删除(deleting)叫作移除(removing)。用于删除文件的命令是
rm
。
rm
常用命令选项:
选项 | 描述 |
---|---|
-i | 删除前逐一询问确认。 |
-f | 即使原档案属性设为唯读,亦直接删除,无需逐一确认。 |
-r | 将目录及以下之档案亦逐一删除。 |
-
注意:-i 选项会询问你是否真的要删除该文件。shell 没有回收站或者垃圾箱这样的东西,文件一旦被删除,就再也找不回来了!所以使用
rm
命令时,要养成总是加入 -i 选项的好习惯。 -
应用示例:
[root@VM-8-11-centos test]# ll
total 0
-rw-r--r-- 1 root root 0 May 13 08:32 temp.txt
# 1.询问删除该文件。
[root@VM-8-11-centos test]# rm -i temp.txt
rm: remove regular empty file ‘temp.txt’? y
[root@VM-8-11-centos test]# ll
total 0
四、管理目录
4.1 创建目录
在 Linux 中创建目录很简单,使用
mkdir
命令即可。
mkdir
常用命令选项:
选项 | 描述 |
---|---|
-p | 确保目录名称存在,不存在的就建一个。 |
- 应用示例:
# 1.创建目录`new`及其子目录。
[root@VM-8-11-centos home]# mkdir -p new/tmp/test01
4.2 删除目录
当创建好目录后,必须知道怎样删除目录。对此,可以使用
rmdir
或者rm
命令对目录进行删除。
- 默认情况下,
rmdir
只删除空目录。 - 在整个非空目录中使用
rm
命令,-r 选项可以使rm
进行递归删除,先删除其中的文件,然后再删除目录本身。 - 应用示例1:
# 1.当前所在目录及文件。
[root@VM-8-11-centos test01]# pwd
/home/new/tmp/test01
[root@VM-8-11-centos test01]# ll
total 0
-rw-r--r-- 1 root root 0 May 13 08:50 1.txt
# 2.询问删除`test01`目录及该目录下的文件。
[root@VM-8-11-centos test01]# rm -ir /home/new/tmp/test01/
rm: descend into directory ‘/home/new/tmp/test01/’? y
rm: remove regular empty file ‘/home/new/tmp/test01/1.txt’? y
rm: remove directory ‘/home/new/tmp/test01/’? y
# 3.移动至`test01`的父目录进行查看,确认`test01`目录及其文件已被成功删除。
[root@VM-8-11-centos test01]# cd /home/new/tmp/
[root@VM-8-11-centos tmp]# pwd
/home/new/tmp
[root@VM-8-11-centos tmp]# ll
total 0
- 当需要删除多个文件和子目录的时候,询问删除会显得非常琐碎,此时需要一口气删除目录树,可以使用
rm
-rf 命令。该命令能不声不响,直接删除目录及其所有内容。当然,这也是一个非常危险的命令,所以务必谨慎使用! - 应用示例2:
# 1.强制删除`new`目录下的所有文件。
[root@VM-8-11-centos home]# rm -rf /home/new/*
[root@VM-8-11-centos home]# cd /home/new/
[root@VM-8-11-centos new]# ll
total 0
[root@VM-8-11-centos new]#
五、查看文件内容
5.1 查看文件类型
file
命令是一个方便的小工具,能够探测文件的内部并判断文件类型。
file
常用命令选项:
选项 | 描述 |
---|---|
-b | 列出辨识结果时,不显示文件名称。 |
-c | 详细显示指令执行过程,便于排错或分析程序执行的情形。 |
-v | 显示版本信息。 |
-z | 尝试去解读压缩文件的内容。 |
- 应用示例:
[root@VM-8-11-centos logs]# file naming-server.log.2023-05-12.0
naming-server.log.2023-05-12.0: ASCII text, with CRLF, LF line terminators
5.2 查看整个文件
如果手里有一个很大的文本文件,想要查看里面内容的时候,Linux 有3个不同的命令(
cat
、more
、less
)可以完成这个任务。
cat
命令是显示文本文件中所有数据的工具:cat
常用命令选项:
选项 | 描述 |
---|---|
-n | 由 1 开始对所有输出的行数编号 |
-b | 和 -n 相似,只不过对于空白行不编号。 |
- 应用示例:
# 1.查看整个文本文件的内容及对应行号。
[root@VM-8-11-centos tmp]# cat -n 1.log
1 hello world
2 hello world
3 hello world
4 hello world
-
对于大文件,
cat
命令多少有些烦人。使用后,文件内容会在屏幕上一闪而过。 -
而
more
命令会显示文本文件的内容,但会在每页数据之后暂停下来,它是一个分页工具,支持文本文件基本的移动。 -
more
常用操作命令:- Enter 向下n行,需要定义,默认为1行。
- Ctrl+F 向下滚动一屏。
- 空格键 向下滚动一屏。
- Ctrl+B 返回上一屏。
- = 输出当前行的行号。
- :f 输出文件名和当前行的行号。
- V 调用vi编辑器。
- ! 命令调用 Shell,并执行命令。
- q 退出
more
。
-
less
命令为more
命令的升级版本,它能够实现在文本文件中前后翻动,还有一些高级搜索功能,还可以完成整个文件的读取之前显示文件的内容。 -
less
命令操作和more
命令基本一样,它还包括了更多的操作:- -x <数字> 将"tab"键显示为规定的数字空格。
- / 字符串:向下搜索"字符串"的功能。
- ? 字符串:向上搜索"字符串"的功能。
- n:重复前一个搜索(与 / 或 ? 有关)。
- N:反向重复前一个搜索(与 / 或 ? 有关)。
- b 向上翻一页。
- d 向后翻半页。
- h 显示帮助界面。
- Q 退出
less
命令。 - u 向前滚动半页。
- y 向前滚动一行。
- 空格键 滚动一页。
- 回车键 滚动一行。
- [pagedown]: 向下翻动一页。
- [pageup]: 向上翻动一页。
5.3 查看部分文件
如果数据是在一个大型文件的开头,那就只能干等着
cat
或more
载入整个文件。如果数据是在文件末尾(比如日志文件),则需要翻过成千上万行才能看到最后那部分。好在 Linux 有tail
和head
命令可以解决这两个问题。
tail
命令会显示文件最后几行。默认情况下,它会显示文件的末尾10行。tail
常用命令选项:
选项 | 描述 |
---|---|
-f | 实时循环读取。 |
-n<行数> | 显示文件的尾部 n 行内容。 |
- 应用示例:
[root@VM-8-11-centos tmp]# cat test.log
line1 hello world
line2 hello world
line3 hello world
line4 hello world
line5 hello world
line6 hello world
line7 hello world
line8 hello world
line9 hello world
line10 hello world
line11 hello world
line12 hello world
line13 hello world
line14 hello world
line15 hello world
# 1.显示末尾10行。
[root@VM-8-11-centos tmp]# tail test.log
line6 hello world
line7 hello world
line8 hello world
line9 hello world
line10 hello world
line11 hello world
line12 hello world
line13 hello world
line14 hello world
line15 hello world
head
命令会显示文件开头若干行。默认情况下,它会显示文件的前10行。head
常用命令选项:
选项 | 描述 |
---|---|
-n<行数> | 显示的行数。 |
- 应用示例:
# 显示文本前3行。
[root@VM-8-11-centos tmp]# head -n 3 test.log
line1 hello world
line2 hello world
line3 hello world
- 文件开头部分通常不会改变,因此
head
命令没有tail
命令那样 -f 的选项。
六、结束语
“-------怕什么真理无穷,进一寸有一寸的欢喜。”
微信公众号搜索:饺子泡牛奶。