五、从命令行管理文件-灵析社区

秋月无边

5.1 文件系统目录结构

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

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


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

范例:

[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 -

范例:

  1. [root@centos8 ~]#cd /etc/sysconfig
  2. [root@centos8 sysconfig]#pwd
  3. /etc/sysconfig
  4. [root@centos8 sysconfig]#cd ../../data
  5. [root@centos8 data]#pwd
  6. /data
  7. [root@centos8 data]#cd /bin
  8. [root@centos8 bin]#pwd
  9. /bin
  10. [root@centos8 bin]#cd -P /bin
  11. [root@centos8 bin]#pwd
  12. /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 文件通配符模式

文件通配符可以用来匹配符合条件的多个文件,方便批量管理文件

通配符采有特定的符号,表示特定的含义,此特符号称为元 meta 字符

常见的通配符如下:

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

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

  1. [:digit:]:任意数字,相当于0-9
  2. [:lower:]:任意小写字母,表示 a-z
  3. [:upper:]: 任意大写字母,表示 A-Z
  4. [:alpha:]: 任意大小写字母
  5. [:alnum:]:任意数字或字母
  6. [:blank:]:水平空白字符
  7. [:space:]:水平或垂直空白字符
  8. [:punct:]:标点符号
  9. [:print:]:可打印字符
  10. [:cntrl:]:控制(非打印)字符
  11. [:graph:]:图形字符
  12. [: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 复制文件和目录

利用 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

常用选项:

  1. -i 交互式
  2. -f 强制
  3. -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...

常用选项:

  1. -i 交互式
  2. -f 强制删除
  3. -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

常见选项:

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

5.3.10.3 删除空目录rmdir

常见选项:

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

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

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

inode表结构:

每个文件的属性信息,比如:文件的大小,时间,类型等,称为文件的元数据(meta data)。这此元数

据是存放在node(index node)表中。node 表中有很多条记录组成,第一条记录对应的存放了一个文

件的元数据信息

第一个node表记录对应的保存了以下信息:

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


5.4.1 文件访问原理


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.文件类型

硬链接:和源文件相同

软链接:链接文件和源文件无关

阅读量:865

点赞量:0

收藏量:0