金鱼哥戏说RHCSA认证:五、从命令行管理文件

简介: 第五章 从命令行管理文件
🎹 个人简介:大家好,我是 金鱼哥,CSDN运维领域新星创作者,华为云·云享专家,阿里云社区·专家博主
📚个人资质: CCNA、HCNP、CSNA(网络分析师),软考初级、中级网络工程师、RHCSA、RHCE、RHCA、RHCI、ITIL😜
💬格言:努力不一定成功,但要想成功就必须努力🔥

🎈支持我:可点赞👍、可收藏⭐️、可留言📝


本章节介绍如何从命令行管理文件。里面有些知识点需要记忆和操作去好好理解。

image-20211223101237626


📜5.1 文件系统目录结构

  • 文件和目录被组织成一个单根倒置树结构
  • 文件系统从根目录下开始,用“/”表示
  • 根文件系统(rootfs):root filesystem
  • 标准Linux文件系统(如:ext4),文件名称大小写敏感,例如:MAIL, Mail, mail, mAiL
  • 以 . 开头的文件为隐藏文件
  • 路径分隔的 /
  • 文件名最长255个字节
  • 包括路径在内文件名称最长4095个字节
  • 蓝色-->目录 绿色-->可执行文件 红色-->压缩文件 浅蓝色-->链接文件 灰色-->其他文件
  • 除了斜杠和NULL,所有字符都有效.但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引
    号来引用
  • 每个文件都有两类相关数据:元数据:metadata,即属性, 数据:data,即文件内容

Linux的文件系统分层结构:FHS Filesystem Hierarchy Standard

image-20210325130559088\

/boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader, grub)都存放于此目录
/bin:所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序
/sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序
/lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
/lib64:专用于x86_64系统上的辅助共享库文件存放位置
/etc:配置文件目录
/home/USERNAME:普通用户家目录
/root:管理员的家目录
/media:便携式移动设备挂载点
/mnt:临时文件系统挂载点
/dev:设备文件及特殊文件存储位置
    b: block device,随机访问
    c: character device,线性访问
/opt:第三方应用程序的安装位置
/srv:系统上运行的服务用到的数据
/tmp:临时文件存储位置
/usr: universal shared, read-only data
    bin: 保证系统拥有完整功能而提供的应用程序
    sbin:
    lib:32位使用
    lib64:只存在64位系统
    include: C程序的头文件(header files)
    share:结构化独立的数据,例如doc, man等
        local:第三方应用程序的安装位置
            bin, sbin, lib, lib64, etc, share
/var: variable data files
    cache: 应用程序缓存数据目录
    lib: 应用程序状态信息数据
    local:专用于为/usr/local下的应用程序存储可变数据
    lock: 锁文件
    log: 日志目录及文件
    opt: 专用于为/opt下的应用程序存储可变数据
    run: 运行中的进程相关数据,通常用于存储进程pid文件
    spool: 应用程序数据池
    tmp: 保存系统两次重启之间产生的临时数据
/proc: 用于输出内核与进程信息相关的虚拟文件系统
/sys:用于输出当前系统上硬件设备相关信息虚拟文件系统
/selinux: security enhanced Linux,selinux相关的安全策略等信息的存储位置

image-20210325130947217\

范例:

[root@servera ~]# ls /bin /sbin /lib /lib64 -ld
lrwxrwxrwx. 1 root root 7 Aug 12  2018 /bin -> usr/bin
lrwxrwxrwx. 1 root root 7 Aug 12  2018 /lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Aug 12  2018 /lib64 -> usr/lib64
lrwxrwxrwx. 1 root root 8 Aug 12  2018 /sbin -> usr/sbin

[root@centos6 ~]#ls /bin /sbin /lib /lib64 -ld
dr-xr-xr-x. 2 root root 4096 Mar 20 09:14 /bin
dr-xr-xr-x. 11 root root 4096 Dec 12 2018 /lib
dr-xr-xr-x. 9 root root 12288 Mar 20 09:13 /lib64
dr-xr-xr-x. 2 root root 12288 Mar 20 09:14 /sbin

📜5.2 Linux下的文件类型

  • - 普通文件
  • d 目录文件
  • l 符号链接文件link
  • b 块设备block
  • c 字符设备character
  • p 管道文件pipe
  • s 套接字文件socket

范例:

[root@servera ~]# ls -l /run

📜5.3 文件操作命令


📑5.3.1 显示当前工作目录

每个shell和系统进程都有一个当前的工作目录 CWD:current work directory
显示当前shell CWD的绝对路径
pwd命令: printing working directory

范例:

[root@servera ~]# ll /bin
lrwxrwxrwx. 1 root root 7 Aug 12  2018 /bin -> usr/bin
[root@servera ~]# cd /bin/
[root@servera bin]# pwd
/bin
[root@servera bin]# pwd -P
/usr/bin

📑5.3.2 绝对和相对路径

  • 绝对路径

    以正斜杠/ 即根目录开始
    完整的文件的位置路径
    可用于任何想指定一个文件名的时候

    [root@servera tmp]# cat /etc/sysconfig/network-scripts/ifcfg-ens160
  • 相对路径

    不以斜线开始
    一般情况下,是指相对于当前工作目录的路径,特殊场景下,是相对于某目录的位置
    可以作为一个简短的形式指定一个文件名

    • ~ 当前用户的家目录
    • - 上一个工作目录
    • ~student 该用户的家目录
    • . 代表当前路径
    • .. 上一级目录
    [root@servera test2]# pwd
    /tmp/test/test2
    [root@servera test2]# cd ../../
    [root@servera tmp]#

    基名:basename,只取文件名而不要路径
    目录名:dirname,只取路径,不要文件名

    范例:

    [root@centos8 bin]#basename /etc/sysconfig/network
    network
    [root@centos8 bin]#dirname /etc/sysconfig/network
    /etc/sysconfig
    [root@centos8 ~]#dirname /etc/sysconfig/network-scripts/ifcfg-eth0
    /etc/sysconfig/network-scripts
    [root@centos8 ~]#basename /etc/sysconfig/network-scripts/ifcfg-eth0
    ifcfg-eth0

📑5.3.3 更改目录

命令 cd : change directory 改变目录
可以使用绝对或相对路径

  • 切换至父目录: cd ..
  • 切换至当前用户主目录: cd
  • 切换至上一个的工作目录: cd -

范例:

[root@centos8 ~]#cd /etc/sysconfig
[root@centos8 sysconfig]#pwd
/etc/sysconfig
[root@centos8 sysconfig]#cd ../../data
[root@centos8 data]#pwd
/data
[root@centos8 data]#cd /bin
[root@centos8 bin]#pwd
/bin
[root@centos8 bin]#cd -P /bin
[root@centos8 bin]#pwd
/usr/bin

📑5.3.4 列出目录内容

ls 命令可以列出当前目录的内容或指定目录
用法:

ls [options] [files_or_dirs]

常见选项:

  • -a 包含隐藏文件
  • -h 以人类易读的方式显示free -h
  • -l 显示额外的信息
  • -R 目录递归
  • -ld 目录和符号链接信息
  • -1 文件分行显示
  • -S 按从大到小排序
  • -t 按mtime排序
  • -u 配合-t选项,显示并按atime从新到旧排序
  • -U 按目录存放顺序显示
  • -X 按文件后缀排序

📑5.3.5 文件通配符模式

image-20210325150504324\

文件通配符可以用来匹配符合条件的多个文件,方便批量管理文件
通配符采有特定的符号,表示特定的含义,此特符号称为元 meta 字符
常见的通配符如下:

* 匹配零个或多个字符,但不匹配 "." 开头的文件,即隐藏文件
? 匹配任何单个字符
~ 当前用户家目录
~mage 用户mage家目录
~+和. 当前工作目录
~- 前一个工作目录
[0-9] 匹配数字范围
[a-z] 字母
[A-Z] 字母
[hao] 匹配列表中的任何的一个字符
[^hao] 匹配列表中的所有字符以外的字符

别外还有在Linux系统中预定义的字符类:man 7 glob

[:digit:]:任意数字,相当于0-9
[:lower:]:任意小写字母,表示 a-z
[:upper:]: 任意大写字母,表示 A-Z
[:alpha:]: 任意大小写字母
[:alnum:]:任意数字或字母
[:blank:]:水平空白字符
[:space:]:水平或垂直空白字符
[:punct:]:标点符号
[:print:]:可打印字符
[:cntrl:]:控制(非打印)字符
[:graph:]:图形字符
[:xdigit:]:十六进制字符

范例: [ ] 和 { }

[root@servera tmp]# ll f{1..5}
ls: cannot access 'f1': No such file or directory
ls: cannot access 'f2': No such file or directory
-rw-r--r--. 1 root root 0 Mar 25 15:48 f3
-rw-r--r--. 1 root root 0 Mar 25 15:48 f4
-rw-r--r--. 1 root root 0 Mar 25 15:48 f5
[root@servera tmp]# ll f[1-5]
-rw-r--r--. 1 root root 0 Mar 25 15:48 f3
-rw-r--r--. 1 root root 0 Mar 25 15:48 f4
-rw-r--r--. 1 root root 0 Mar 25 15:48 f5

[root@servera tmp]# ll f[a-c]
-rw-r--r--. 1 root root 0 Mar 25 15:51 fa
-rw-r--r--. 1 root root 0 Mar 25 15:51 fA
-rw-r--r--. 1 root root 0 Mar 25 15:51 fb
-rw-r--r--. 1 root root 0 Mar 25 15:51 fB
-rw-r--r--. 1 root root 0 Mar 25 15:51 fc
[root@servera tmp]# ll f{a..c}
-rw-r--r--. 1 root root 0 Mar 25 15:51 fa
-rw-r--r--. 1 root root 0 Mar 25 15:51 fb
-rw-r--r--. 1 root root 0 Mar 25 15:51 fc

📑5.3.6 查看文件状态 stat

文件相关信息:metadata, data
每个文件有三个时间戳:

  • access time 访问时间,atime,读取文件内容
  • modify time 修改时间,mtime,改变文件内容(数据)
  • change time 改变时间,ctime,元数据发生改变

📑5.3.7 复制文件和目录

image-20210325161014213

利用 cp(copy)命令可以实现文件或目录的复制
格式:

cp [OPTION]... SOURCE... DIRECTORY
  • -a 归档,相当于-dR --preserv=all,常用于备份功能
  • -r, -R 递归复制目录及内部的所有内容

范例:

[root@servera tmp]# cp /etc/passwd .
[root@servera tmp]# ls
passwd

[root@servera tmp]# cp -a /etc/ . 
[root@servera tmp]# ls
etc

📑5.3.8 移动以及重命名文件

mv (move)命令可以实现文件或目录的移动和改名
同一分区移动数据,速度很快:数据位置没有变化
不同分区移动数据,速度相对慢:数据位置发生了变化

格式:

mv [OPTION]... SOURCE... DIRECTORY

常用选项:

-i 交互式
-f 强制
-b 目标存在,覆盖前先备份

后面跟的是源文件和目标路径,意思是要把文件移动到哪个目录下面,如果目标路径不存在那就是重命名

范例:

[root@servera tmp]# ls
passwd
[root@servera tmp]# mkdir ./test
[root@servera tmp]# mv passwd ./test/;ls /tmp /tmp/test
/tmp:
test
/tmp/test:
passwd

[root@servera tmp]# mv test/passwd ./pass;ls /tmp/ /tmp/test/
/tmp/:
pass  test
/tmp/test/:

📑5.3.9 删除文件

使用 rm (remove)命令可以删除文件
注意:此命令非常危险,慎重使用,建议使用mv 代替 rm

格式:

rm [OPTION]... FILE...

常用选项:

-i 交互式
-f 强制删除
-r 递归

范例:

[root@servera tmp]# ls
pass  test
[root@servera tmp]# rm pass
rm: remove regular file 'pass'? y
[root@servera tmp]# ls
test

[root@servera tmp]# ls
passwd  test
[root@servera tmp]# rm -f passwd
[root@servera tmp]# ls
test

[root@servera tmp]# rm -f test/
rm: cannot remove 'test/': Is a directory
[root@servera tmp]# rm -rf test/
[root@servera tmp]# ls
[root@servera tmp]# 

📑5.3.10 目录操作

🔖5.3.10.1 显示目录树 tree

常见选项:

-d:只显示目录
-L level:指定显示的层级数目

🔖5.3.10.2 创建目录mkdir

常见选项:

-p:存在于不报错,且可自动创建所需的各目录
-v:显示详细信息
-m MODE:创建目录时直接指定权限

🔖5.3.10.3 删除空目录rmdir

常见选项:

-p 递归删除空父目录
-v 显示详细信息

注意:rmdir只能删除空目录,如果想删除非空目录,可以使用rm -r 命令,递归删除目录树


📜5.4 文件元数据和节点表结构

inode表结构:

每个文件的属性信息,比如:文件的大小,时间,类型等,称为文件的元数据(meta data)。这此元数
据是存放在node(index node)表中。node 表中有很多条记录组成,第一条记录对应的存放了一个文
件的元数据信息
第一个node表记录对应的保存了以下信息:

  • inode number 节点号
  • 文件类型
  • 权限
  • UID
  • GID
  • 链接数(指向这个文件名路径名称个数)
  • 该文件的大小和不同的时间戳
  • 指向磁盘上文件的数据块指针
  • 有关文件的其他数据

image-20210521235432181


📑5.4.1 文件访问原理

image-20210325170455933

cp和inode
cp 命令:

  • 分配一个空闲的inode号,在inode表中生成新条目
  • 在目录中创建一个目录项,将名称与inode编号关联
  • 拷贝数据生成新的文件

rm和inode
rm 命令:

  • 链接数递减,从而释放的inode号可以被重用
  • 把数据块放在空闲列表中
  • 删除目录项
  • 数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖

mv和inode

  • 如果mv命令的目标和源在相同的文件系统,作为mv 命令

    ​ 用新的文件名创建对应新的目录项

    ​ 删除旧目录条目对应的旧的文件名

    ​ 不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!

  • 如果目标和源在一个不同的文件系统, mv相当于cp和rm

📑5.4.2 硬(hard)链接

硬链接本质上就给一个文件起一个新的名称,实质是同一个文件
硬链接特性

  • 创建硬链接会在对应的目录中增加额外的记录项以引用文件
  • 对应于同一文件系统上一个物理文件
  • 每个目录引用相同的inode号
  • 创建时链接数递增
  • 删除文件时:rm命令递减计数的链接,文件要存在,至少有一个链接数,当链接数为零时,该文
    件被删除
  • 不能跨越驱动器或分区
  • 不支持对目录创建硬链接

格式:

ln filename [linkname]

范例:

[root@servera tmp]# ll
total 4
-rw-r--r--. 1 root root 2723 Mar 25 17:12 passwd
[root@servera tmp]# ln passwd passwd1
[root@servera tmp]# ll
total 8
-rw-r--r--. 2 root root 2723 Mar 25 17:12 passwd
-rw-r--r--. 2 root root 2723 Mar 25 17:12 passwd1

📑5.4.3 符号 ( symbolic ) 或 软 (soft)链接

一个符号链接指向另一个文件,就像 windows 中快捷方式,软链接文件和原文件本质上不是同一个文件
软链接特点

  • 一个符号链接的内容是它引用文件的名称
  • 可以对目录创建软链接
  • 可以跨分区的文件实现
  • 指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的
    引用计数
  • 在创建软链接时, 如果源文件使用相对路径,是相对于软链接文件的路径,而非相对于当前工作目

    录,但是软链接的路径如果是相对路径,则是相对于当前工作目录

格式:

ln -s filename [linkname]

范例:

#绝对路径
ln -s /data/dir /data/dirlink
#相对路径
cd /data
ln -s ../data/dir /root/dirlink
rm -rf /data/dirlink #删除软链接本身,不会删除源目录内容
rm -rf /data/dirlink/ #删除源目录的文件,不会删除链接文件
#查看链接文件指向的原文件
readlink /data/dirlink

📑5.4.4 硬链接与软链接区别总结

  1. 本质
    硬链接:本质是同一个文件起了多个名字
    软链接:本质不是同一个文件
  2. 跨设备
    硬链接:不支持
    软链接:支持
  3. inode
    硬链接:相同
    软链接:不同
  4. 链接数
    硬链接:创建新的硬链接,链接数会增加,删除硬链接,链接数减少
    软链接:创建或删除,链接数不会变化
  5. 文件夹
    硬链接:不支持
    软链接:支持
  6. 相对路径
    硬链接:原始文件相对路径是相对于当前工作目录
    软链接:原始文件的相对路径是相对于链接文件的相对路径
  7. 删除源文件
    硬链接:只是链接数减一,但链接文件的访问不受影响
    软链接:链接文件将无法访问
  8. 文件类型
    硬链接:和源文件相同
    软链接:链接文件和源文件无关

💡总结

  • 介绍文件系统目录结构。
  • 介绍Linux下的文件类型。
  • 介绍文件操作命令。
  • 介绍文件元数据和节点表结构。

RHCSA认证作为基础认证,涉及的基础内容需要大家好好进行学习并巩固。有良好的基础才能更上一层楼。
好好加油,可以噶🤪。

以上就是【金鱼哥】对 第五章 从命令行管理文件 的简述和讲解。希望能对看到此文章的小伙伴有所帮助。

💾 红帽认证专栏系列:
RHCSA专栏: 戏说 RHCSA 认证
RHCE专栏: 戏说 RHCE 认证
此文章收录在RHCA专栏: RHCA 回忆录

如果这篇【文章】有帮助到你,希望可以给【金鱼哥】点个赞👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点。

如果有对【运维技术】感兴趣,也欢迎关注❤️❤️❤️ 【金鱼哥】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!

目录
相关文章
|
运维 Shell Linux
|
运维 监控 安全
|
运维 Linux 项目管理
金鱼哥戏说RHCE认证:部署Ansible--管理ansible配置文件
第二章 部署Ansible--管理ansible配置文件
238 0
金鱼哥戏说RHCE认证:部署Ansible--管理ansible配置文件
|
运维 安全 Linux
|
运维 监控 网络协议
|
存储 缓存 运维
|
运维 监控 测试技术
|
运维 安全 Ubuntu
|
运维 监控 安全
|
运维 监控 网络协议
下一篇
无影云桌面