Linux文件系统管理

本秂侑毒 提交于 2021-02-06 09:02:29

Linux文件系统管理

1 Linux系统目录命名规则与用途

1.1 文件系统目录结构

  • 文件和目录被组织成一个单根倒置树结构

  • 文件系统从根目录下开始,用“/”表示

    Linux文件系统管理

  • 标准Linux文件系统(如:ext4),文件名称大小写敏感。
  • 以.开头的文件为隐藏文件
  • 路径分隔的 /
  • 文件名最长255个字节
  • 包括路径在内文件名称最长4095个字节
  • 蓝色-->目录 绿色-->可执行文件 红色-->压缩文件 浅蓝色-->链接文件 灰色-->其他文件
  • 除了斜杆和NUL,所有字符都有效,有些字符需要用引号来引用
  • 每个文件都有两类相关数据:元数据:metadata,即属性;数据:data,即文件内容

1.2 常见文件系统目录功能

/boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader,grub)都存放于此目录

/bin:所有用户使用的基本命令,不能关联至独立分区,OS启动即会用到的程序

/sbin:管理类的基本命令,不能关联至独立分区,OS启动即会用到的程序

/lib:启动时程序依赖的基本共享库文件已经内核模块文件(/lib/modules)

/lib64:专用于X86_64系统上的辅助共享文件存放文件

/etc:配置文件目录

/home/USERNAME:普通用户Home目录

/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相关的安全策略等信息存储位置

1.3 Linux下的文件类型

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

1.4 Centos 7 以后版本目录结构变化

  1. /bin和/usr/bin
  2. /sbin和/usr/sbin
  3. /lib和/usr/lib
  4. /lib64和/usr/lib64
[root@Centos7 ~]# ls /bin /sbin /lib /lib64 -ld
lrwxrwxrwx. 1 root root 7 Feb  1 23:28 /bin -> usr/bin
lrwxrwxrwx. 1 root root 7 Feb  1 23:28 /lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Feb  1 23:28 /lib64 -> usr/lib64
lrwxrwxrwx. 1 root root 8 Feb  1 23:28 /sbin -> usr/sbin

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

2.1 inode表结构

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

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

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

2.2 查看元数据信息

stat查看文件或目录属性信息

[root@Centos7 data]# stat meta.data 
  File: ‘meta.data’
  Size: 710         Blocks: 8          IO Block: 4096   regular file
Device: 805h/2053d  Inode: 67          Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:etc_runtime_t:s0
Access: 2021-02-03 22:42:14.892841636 +0800
Modify: 2021-02-03 22:47:17.496608628 +0800
Change: 2021-02-03 22:47:17.496608628 +0800
 Birth: -

文件名称(File):文件的名称

文件大小(Size):文件的大小

块数量(Blocks):文件所占块的数量

块的大小(IO Block):每个数据块的大小

文件类型(regular file):表示是什么类型的文件

设备(Device):所在设备

Inode:文件的节点编号

硬链接次数(Links):被硬链接了多少次

权限(access):文件具有的权限

属主(Uid):属主ID号

属组(Gid):属组ID号

访问时间(Access):最后一次访问文件的时间 atime

修改时间(Modify):最后一次文件数据修改时间 mtime

元数据修改时间(Change):最后一次文件元数据修改时间 ctime

2.3 修改文件时间戳

touch命令可以用来创建空文件或刷新文件的时间(修改时间戳)

[root@Centos7 data]# touch --help
Usage: touch [OPTION]... FILE...
Mandatory arguments to long options are mandatory for short options too.
  -a                     change only the access time
  -c, --no-create        do not create any files
    -m                     change only the modification time
   -t STAMP               use [[CC]YY]MMDDhhmm[.ss] instead of current time
      --time=WORD        change the specified time:

-a: 只修改访问文件的时间 atime

-m:只修改文件数据修改的时间 mtime

-t:使用指定的时间,格式为 [[CC]YY]MMDDhhmm[.ss]

CC:世纪 YY:年份 MM:月份 DD:日期 hh:小时 mm:分钟 ss:秒

3 硬链接和软链接区别

3.1 硬链接的特征

  • 文件有相同的inode及data block
[root@Centos7 data]# ln link1.txt link1.txt.link
[root@Centos7 data]# ls -li
total 4
68 -rw-r--r--. 2 root root   0 Feb  3 23:27 link1.txt
68 -rw-r--r--. 2 root root   0 Feb  3 23:27 link1.txt.link  #两个文件的inode号一样都是68 
[root@Centos7 data]# echo 1234556789abc > link1.txt
[root@Centos7 data]# cat link1.txt link1.txt.link           #两者数据一样
1234556789abc
1234556789abc       
  • 只能对已存在的文件进行创建
[root@Centos7 data]# ls
link1.txt  link1.txt.link  link2.txt  link3.txt  link4.txt  link5.txt  meta.data
[root@Centos7 data]# ln link.txt link.txt.link
ln: failed to access ‘link.txt’: No such file or directory
  • 不能跨分区创建硬链接
[root@Centos7 ~]# ls
anaconda-ks.cfg
[root@Centos7 ~]# ln anaconda-ks.cfg /data/anaconda-ks.cfg.link
ln: failed to create hard link ‘/data/anaconda-ks.cfg.link’ => ‘anaconda-ks.cfg’: Invalid cross-device link
  • 不能对目录进行创建,只能对文件创建
[root@Centos7 data]# ls
link1.txt       link2.txt  link4.txt  meta.data
link1.txt.link  link3.txt  link5.txt  testlink
[root@Centos7 data]# ln testlink testlink.link
ln: ‘testlink’: hard link not allowed for directory
[root@Centos7 data]#
  • 删除一个硬链接文件并不影响其他有相同的inode编号的文件
[root@Centos7 data]# cat link1.txt link1.txt.link           
1234556789abc
1234556789abc   
[root@Centos7 data]# ll -i link1.txt link1.txt.link 
68 -rw-r--r--. 2 root root 14 Feb  3 23:31 link1.txt
68 -rw-r--r--. 2 root root 14 Feb  3 23:31 link1.txt.link
[root@Centos7 data]# rm -f link1.txt.link
[root@Centos7 data]# ls -li link1.txt 
68 -rw-r--r--. 1 root root 14 Feb  3 23:31 link1.txt
[root@Centos7 data]# cat link1.txt 
1234556789abc

3.2 软链接的主要特点

  • 软链接有自己的文件属性及权限等
[root@Centos7 data]# ll
total 4
drwxr-xr-x. 2 root root   6 Feb  4 21:38 linkdir
lrwxrwxrwx. 1 root root   7 Feb  4 21:51 linkdir.link -> linkdir #软链接和原文件属性及权限独立
  • 可对不存在的文件或目录创建软链接
[root@Centos7 data]# ls
link1.txt  link2.txt  link3.txt  link4.txt  link5.txt  linkdir  meta.data
[root@Centos7 data]# ln -s text.log text.log.link
[root@Centos7 data]# ll text.log.link               #软链接原文件不存在称为死链接,显示为红色闪烁
lrwxrwxrwx. 1 root root 8 Feb  4 21:44 text.log.link -> text.log
  • 软链接可跨分区创建
[root@Centos7 ~]# ls
anaconda-ks.cfg
[root@Centos7 ~]# ln -s anaconda-ks.cfg /data/anaconda-ks.cfg.link
[root@Centos7 ~]# ll /data/anaconda-ks.cfg.link 
lrwxrwxrwx. 1 root root 15 Feb  4 21:57 /data/anaconda-ks.cfg.link -> anaconda-ks.cfg
  • 软链接可对文件或目录创建
[root@Centos7 data]# ls
link1.txt  link3.txt  link5.txt  meta.data
link2.txt  link4.txt  linkdir    text.log.link
[root@Centos7 data]# ln -s linkdir linkdir.link
[root@Centos7 data]# ll linkdir.link
lrwxrwxrwx. 1 root root 7 Feb  4 21:51 linkdir.link -> linkdir  #软链接指向原目录
  • 创建软链接时,链接计数不会增加
[root@Centos7 ~]# ll 
total 4
-rw-------. 1 root root 1568 Feb  1 23:32 anaconda-ks.cfg
[root@Centos7 ~]# ln -s ../root/anaconda-ks.cfg /data/linkdir.link
[root@Centos7 ~]# ll -di anaconda-ks.cfg 
201326658 -rw-------. 1 root root 1568 Feb  1 23:32 anaconda-ks.cfg
  • 删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接,若被指向路径文件被重新创建,死链接可恢复为正常的软链接Linux文件系统管理

4 Linux文件管理常用命令

4.1 显示当前工作目录

每个shell和系统进程都有一个当前的工作目录CWD:current work directory

显示当前shell的绝对路径

pwd命令:printing working directory

  • -P 显示真实物理路径
  • -L 显示链接路径(默认)
[root@Centos7 data]# pwd
/data
[root@Centos7 data]# cd /bin
[root@Centos7 bin]# pwd
/bin
[root@Centos7 bin]# pwd -P
/usr/bin
[root@Centos7 bin]# 

4.2 绝对路径和相对路径

  • 绝对路径

    以正斜杠?即根目录开始

    ​ 完整的文件的位置路径

    ​ 可用于任何指定一个文件名的时候

  • 相对路径

    不以斜杠开始

    ​ 一般情况下,是指相对于当前工作目录的路径,特殊场景下,是相对于某目录的位置

    ​ 可以作为一个简短的形式指定一个文件名

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

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

[root@Centos7 network-scripts]# basename /etc/sysconfig/network-scripts
network-scripts
[root@Centos7 network-scripts]# dirname /etc/sysconfig/network-scripts
/etc/sysconfig

4.3 更改目录

命令cd:change directory 改变目录

选项 :-P 切换到物理路径,而非软链接目录

可以使用绝对或相对路径

  • 切换至父目录: cd..
  • 切换至当前用户主目录:cd
  • 切换至上一次工作目录:cd -
[root@Centos7 network-scripts]# cd /etc/sysconfig
[root@Centos7 sysconfig]# pwd
/etc/sysconfig
[root@Centos7 sysconfig]# cd ../../data
[root@Centos7 data]# pwd
/data
[root@Centos7 data]# cd /bin
[root@Centos7 bin]# pwd
/bin
[root@Centos7 bin]# cd -P /bin
[root@Centos7 bin]# pwd
/usr/bin

相关环境变量:

  • PWD:当前目录路径
  • OLDPWD:上一次目录路径
[root@Centos7 bin]# cd /data/
[root@Centos7 data]# echo $OLDPWD
/bin
[root@Centos7 data]# cd -
/bin
[root@Centos7 bin]# pwd
/bin

4.4 列出目录内容

ls命令列出当前目录或指定目录的内容

用法:

 ls [options] [file_or_dir]

常用选项:

-a,-all:显示隐藏文件;

-d:仅显示目录名,而不显示目录下的内容列表,显示符号链接文件本身,而不显示其指向的目录列表;

-C:多列显示输出结果,默认选项;

-l:以长格式显示目录下的内容列表,输入从左到右依次包括文件名,文件类型,权限模式,硬链接数,所有者、组、文件大小和文件最后修改时间等;

-t:用于文件和目录的更改时间mtime排序;

-u:配合-t选项,显示并按atime从新到旧排序

[root@Centos7 data]# ls -a
.  ..  linkdir  linkdir.link  meta.data
[root@Centos7 data]# ls -lt
total 4
drwxr-xr-x. 2 root root   6 Feb  4 22:21 linkdir
lrwxrwxrwx. 1 root root   7 Feb  4 21:51 linkdir.link -> linkdir
-rw-r--r--. 1 root root 710 Feb  3 22:47 meta.data

4.5 查看文件状态 stat

文件相关信息: metadata,data

每个文件有三个时间戳:

  • access time 访问时间,atime,读取文件内容
  • modify time 修改时间,mtime,改变文件内容(数据)
  • change time 改变时间,ctime,元数据发生改变
root@Centos7 data]# stat meta.data 
  File: ‘meta.data’
  Size: 710         Blocks: 8          IO Block: 4096   regular file
Device: 805h/2053d  Inode: 67          Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:etc_runtime_t:s0
Access: 2021-02-03 22:42:14.892841636 +0800
Modify: 2021-02-03 22:47:17.496608628 +0800
Change: 2021-02-03 22:47:17.496608628 +0800
 Birth: -

4.6 复制文件和目录

利用 cp 命令可以实现文件或目录的复制

格式:

cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...

常用选项

  • -i 如果目标已存在,覆盖前提示是否覆盖
  • -n 不覆盖,注意顺序
  • -r,-R 递归复制目录及内部所有内容
  • -a 归档,常用于备份功能
  • -d 不复制原文件,只复制链接名
  • -b 目标存在,覆盖前先备份,默认形式 filename~,只保留最近的一个备份
[root@Centos7 data]# cp /etc/sysconfig/ /data/
cp: omitting directory ‘/etc/sysconfig/’
[root@Centos7 data]# cp -r /etc/sysconfig/ /data/
[root@Centos7 data]# ll /data/
total 12
-rw-r--r--. 1 root root   23 Feb  4 23:24 issue.bak
drwxr-xr-x. 2 root root    6 Feb  4 22:21 linkdir
lrwxrwxrwx. 1 root root    7 Feb  4 21:51 linkdir.link -> linkdir
-rw-r--r--. 1 root root  710 Feb  3 22:47 meta.data
drwxr-xr-x. 6 root root 4096 Feb  4 23:28 sysconfig

[root@Centos7 data]# ll /data/
total 12
-rw-r--r--. 1 root root    0 Feb  4 23:29 issue
-rw-r--r--. 1 root root   23 Feb  4 23:24 issue.bak
drwxr-xr-x. 2 root root    6 Feb  4 22:21 linkdir
lrwxrwxrwx. 1 root root    7 Feb  4 21:51 linkdir.link -> linkdir
-rw-r--r--. 1 root root  710 Feb  3 22:47 meta.data
drwxr-xr-x. 6 root root 4096 Feb  4 23:28 sysconfig
[root@Centos7 data]# cp -b /etc/motd /data/issue
cp: overwrite ‘/data/issue’? y
[root@Centos7 data]# ll
total 12
-rw-r--r--. 1 root root    0 Feb  4 23:31 issue
-rw-r--r--. 1 root root    0 Feb  4 23:29 issue~
-rw-r--r--. 1 root root   23 Feb  4 23:24 issue.bak
drwxr-xr-x. 2 root root    6 Feb  4 22:21 linkdir
lrwxrwxrwx. 1 root root    7 Feb  4 21:51 linkdir.link -> linkdir
-rw-r--r--. 1 root root  710 Feb  3 22:47 meta.data
drwxr-xr-x. 6 root root 4096 Feb  4 23:28 sysconfig

4.7 移动和重命名文件 mv

mv命令可以实现文件或目录的移动和改名

用法:

mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...

常用选项:

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

利用rename 可以批量修改文件名

[root@Centos7 data]# mv /etc/motd /data/issue
mv: overwrite ‘/data/issue’? y

#为所有的conf文件加上.bak后缀
rename 'conf' 'conf.bank' f*
#去掉所有的bak后缀
rename '.bak' ''  *.bak

4.8 删除文件 rm

使用 rm 命令可以删除文件

格式:

rm [option]... file...

常用选项:

  • -i 交互式
  • -f 强制删除
  • -r 递归删除
  • --no-preserve-root 删除 /
[root@Centos7 data]# tree
.
├── Aa
│   ├── Bb
│   └── Cc
├── issue
├── issue~
├── issue.bak
├── linkdir
├── linkdir.link -> linkdir
├── meta.data
└── sysconfig
[root@Centos7 data]# rm -rf Aa
[root@Centos7 data]# tree
.
├── issue
├── issue~
├── issue.bak

删除特殊文件

[root@Centos7 data]# ls
~
[root@Centos7 data]# rm -f ~
rm: cannot remove ‘/root’: Is a directory
[root@Centos7 data]# rm -- ~
rm: cannot remove ‘/root’: Is a directory
[root@Centos7 data]# rm -f ./~
[root@Centos7 data]# ls

4.9 查看目录

tree可以显示目录树

选项:

  • -d 只显示目录
  • -L level 指定显示的层级数
  • -P pattern 只显示由指定pattern匹配到的路径
root@Centos7 data]# tree -d
.
└── AA
    └── BB
        └── CC

3 directories
[root@Centos7 data]# tree 
.
└── AA
    └── BB
        └── CC
            ├── f1
            ├── f2
            └── f3

3 directories, 3 files
[root@Centos7 data]# tree -d -L 2
.
└── AA
    └── BB
2 directories

4.10 创建目录 mkdir

常见选项:

  • -p: 存在于不报错,且可自动创建所需的各目录
  • -v: 显示详细信息
  • -m MODE: 创建目录时指定权限
[root@Centos7 data]# mkdir -pv a1/a2/a3/a4
mkdir: created directory ‘a1’
mkdir: created directory ‘a1/a2’
mkdir: created directory ‘a1/a2/a3’
mkdir: created directory ‘a1/a2/a3/a4’
[root@Centos7 data]# ls
a1
[root@Centos7 data]# tree
.
└── a1
    └── a2
        └── a3
            └── a4
4 directories, 0 file

4.11 删除空目录 rmdir

常见选项

  • -p 递归删除父空目录
  • -v 显示详细信息
[root@Centos7 data]# rmdir -pv a1/a2/a3/a4
rmdir: removing directory, ‘a1/a2/a3/a4’
rmdir: removing directory, ‘a1/a2/a3’
rmdir: removing directory, ‘a1/a2’
rmdir: removing directory, ‘a1’
[root@Centos7 data]# ls

4.12 复制/etc/profile至 /tmp/目录,用查找替换命令删除/tmp/profie文件中的行首空白字符

cp /etc/profile /tmp     #复制/etc/profile到/tmp目录
vim /tmp/profile        #用 vim 打开/tmp/proflie文件
:%s/^\s*//g             #扩展模式下

4.13 在 vim 中设置 tab 缩进 4个字符

vim /etc/vimrc      #vim打开全局变量/etc/vimrc文件,也可以修改用户家目录下的.vimrc文件 ~/.vimrc
set tabstop=4       #加入此字段
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!