3.Linux文件管理

1.Linux系统目录结构

1.1目录及功能

目录规范参考网站:http://www.pathname.com/fhs/

/bin:用户基本命令

/sbin:系统管理类命令

/lib:启动时程序依赖的基本共享库文件以及内核模块文件

/lib64:专用于x86_64系统上的辅助共享库文件存放位置

(以上目录在centos8中变为、usr对应目录的软链接)

/usr: the second major section of the filesystem,shareable, read-only data

  • bin:可执行命令的主目录
  • sbin:系统管理员专用命令
  • lib:32位使用
  • lib64:64位系统专用
  • share:应用程序资源保存位置如帮助文档、字体等
  • local:第三方应用程序安装位置

/boot:系统引导文件存放目录

/etc:配置文件目录

/home:用户家目录

/root:管理员家目录

/media:便携式移动设备挂载点

/mnt:临时文件系统挂载点

/dev:设备文件及特殊文件存储位置

/opt:第三方应用程序的安装位置

/tmp:临时文件存储位置

/var:可变数据文件目录(日志,管理数据等)

  • cache: 应用程序缓存数据目录
  • lib: 应用程序状态信息数据
  • local:专用于为/usr/local下的应用程序存储可变数据
  • lock: 锁文件
  • log: 日志目录及文件
  • opt: 专用于为/opt下的应用程序存储可变数据
  • run: 运行中的进程相关数据,通常用于存储进程pid文件
  • spool: 应用程序数据池
  • tmp: 保存系统两次重启之间产生的临时数据

/proc: 用于输出内核与进程信息相关的虚拟文件系统

/sys:用于输出当前系统上硬件设备相关信息虚拟文件系统

/selinux: security enhanced Linux,selinux相关的安全策略等信息的存储位置

1.2文件类型及组成

每个文件都有两类相关数据:元数据:metadata,即属性, 数据:data,即文件内容

1.2.1 文件组成

-:表示普通文件

d:目录文件

b:块设备文件(以块为单位如磁盘,U盘等设备)

c:字符设备(以字符为单位,并按一定的顺序进行输入输出,如鼠标键盘等设备)

l:链接文件(可以简单理解为windows中的软链接)

p:管道文件(特殊文件类型,主要是为了实现进程间的通信,采用半双工通信)

s:套接字文件socket:(全双工通信,通常用于基于网络的数据通讯)

2.文件操作命令

2.1 pwd

pwd:查看用户当前所在目录

  • -L 显示链接路径(默认)
  • -P 显示真实物理路径
[root@centos8 bin]# ll /bin
lrwxrwxrwx. 1 root root 7 May 11  2019 /bin -> usr/bin
[root@centos8 bin]# pwd -L
/bin
[root@centos8 bin]# pwd -P
/usr/bin

2.2基名字和目录名

基名:basename,路径只取文件名

目录名:dirname,路径只取路径

[root@centos8 bin]# basename /etc/sysconfig/network
network
[root@centos8 bin]# dirname !*
dirname /etc/sysconfig/network
/etc/sysconfig

2.3 cd

cd: cd [-L|[-P [-e]] [-@]] [dir]
Change the shell working directory.

快捷用法

  • 切换至父目录 cd ..
  • 切换至当前工作目录 cd .
  • 切换至上一次工作目录 cd -

注意:这里上一次工作目录是保存在OLDPWD变量当中的,所以只能切换到上一次工作目录,而无法返回再往前的目录

[root@centos8 bin]# cd /
[root@centos8 /]# echo $OLDPWD
/bin
[root@centos8 /]# cd -
/bin

2.4 ls

ls :列出当前目录内容或指定目录内容

SYNOPSIS
ls [OPTION]... [FILE]...

常用选项

  • -a 列出所有文件,包括隐藏文件
  • -l 显示更为详细的信息
  • -R 递归展示目录
  • -d 展示目录而不显示目录的内容
  • -s 按照大小排序
  • -t 按照mtime排序

说明:

ls 查看不同后缀文件时的颜色由 /etc/DIR_COLORS 和@LS_COLORS变量定义

ls是'ls --color=auto'别名

[root@centos8 etc]# ls -ld /etc/
drwxr-xr-x. 78 root root 8192 Dec  6 06:19 /etc/

2.5 stat

stat:显示文件或文件系统的状态

文件三个时间戳及其含义:

  • atime 访问时间,如执行读取文件操作可以改变访问时间
  • mtime 修改时间 ,如利用vim修改文件时时间会发生改变
  • ctime 改变时间,元数据(文件属性)发生改变时
[root@centos8 ~]# stat ls
  File: ls
  Size: 116       	Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d	Inode: 201327540   Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2020-11-29 22:04:36.787356892 +0800
Modify: 2020-11-29 22:04:36.787356892 +0800
Change: 2020-11-29 22:04:36.787356892 +0800
 Birth: -
 
 #使用ll就能查看到文件的元数据
 [root@centos8 ~]# ll
-rw-------. 1 		root root 		1548 Nov 21 03:24 anaconda-ks.cfg	
-rw-r--r--. 1 		root root    		0 Dec  7 05:01 lx.txt
#权限	引用计数	所有者和所属组		大小	 修改时间	文件名

2.6 file

file:判断文件类型

file [options] <filename>...

常用选项:

  • -b 只显示判断的文件类型,不显示文件名
  • -f 判断文件File中文件名的类型
  • -F 使用指定分隔符号替换输出文件名后默认的”:”分隔符
  • -L 查看对应软链接对应文件的文件类型
[root@centos8 ~]# cat lx.txt 
/root/lx.txt
/root/ls
/etc/sysconfig
[root@centos8 ~]# file -f lx.txt 
/root/lx.txt:   ASCII text
/root/ls:       ASCII text
/etc/sysconfig: directory
[root@centos8 ~]# file -L /bin/
/bin/: directory
[root@centos8 ~]# file /bin
/bin: symbolic link to usr/bin

注意:windows文件系统和linux是不同的,即使windows文本格式文件在linux系统中以16进制查看所显示内容也是有区别的,所以尽量不要在Linux系统中使用windows的文件,如要使用也最好进行文件转换

[root@centos8 data]#cat linux.txt
a
b
c
[root@centos8 data]#cat win.txt
a
b
c[root@centos8 data]#file win.txt linux.txt
win.txt:   ASCII text, with CRLF line terminators
linux.txt: ASCII text
[root@centos8 data]#hexdump -C linux.txt
00000000  61 0a 62 0a 63 0a                                 |a.b.c.|
00000006
[root@centos8 data]#hexdump -C win.txt
00000000  61 0d 0a 62 0d 0a 63                             |a..b..c|
00000007
#安装转换工具
[root@centos8 data]#dnf -y install dos2unix
#将Windows的文本格式转换成的Linux文本格式
[root@centos8 data]#dos2unix win.txt
dos2unix: converting file win.txt to Unix format...
[root@centos8 data]#file win.txt
win.txt: ASCII text
#将Linux的文本格式转换成Windows的文本格式
[root@centos8 data]#unix2dos win.txt
unix2dos: converting file win.txt to DOS format...
[root@centos8 data]#file win.txt
win.txt: ASCII text, with CRLF line terminators

转换文件字符集编码

#显示支持字符集编码列表
[root@centos8 ~]#iconv -l
#windows10上文本默认的编码ANSI(GB2312)
[root@centos8 data]#file windows.txt
windows.txt: ISO-8859 text, with no line terminators
[root@centos8 data]#echo $LANG
en_US.UTF-8
#默认在linux无法正常显示文本内容
[root@centos8 data]#cat windows11.txt
▒▒▒▒▒▒[root@centos8 data]#
#将windows10上文本默认的编码ANSI(GB2312)转换成UTF-8
[root@centos8 data]#iconv -f gb2312 windows.txt -o windows1.txt
[root@centos8 data]#cat windows1.txt
123[root@centos8 data]#ll windows1.txt
-rw-r--r-- 1 root root 12 Mar 23 10:13 windows1.txt
[root@centos8 data]#file windows1.txt
windows1.txt: UTF-8 Unicode text, with no line terminators
#将UTF-8转换成windows10上文本默认的编码ANSI(GB2312)
[root@centos8 data]#iconv -f utf8 -t gb2312 windows1.txt -o windows11.txt
[root@centos8 data]#file windows11.txt
windows11.txt: ISO-8859 text, with no line terminators

示例

#将windows10上文本默认的编码ANSI(GB2312)转换成UTF-8
[15:34:50 root@centos8 ~]#iconv -f gb2312 win.txt -o win2.txt  
[15:34:50 root@centos8 ~]#file linux.txt
linux.txt: ASCII text
[15:34:31 root@centos8 ~]#file windows.txt
windows.txt: ASCII text, with CRLF line terminators
#将windows的文本格式转换成Linux的文本格式
[15:35:26 root@centos8 ~]#dos2unix windows.txt
dos2unix: converting file windows.txt to Unix format...
[15:36:00 root@centos8 ~]#file windows.txt
windows.txt: ASCII text

示例

[root@centos8 ~]#cat list.txt
/etc/
/bin
/etc/issue
[root@centos8 ~]#file -f list.txt
/etc/:     directory
/bin:       symbolic link to usr/bin
/etc/issue: ASCII text

2.7通配符

用来匹配符合条件的文件

常见的通配符

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

系统中预定义的字符类:man 7 glob

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

2.8 touch

touch:创建空文件和改变文件时间

 touch [OPTION]... FILE...

选项:

  • -a 仅改变 atime和ctime
  • -m 仅改变 mtime和ctime
  • -t [[CC]YY]MMDDhhmm[.ss] 指定atime和mtime的时间戳
  • -c 如果文件不存在,则不予创建
#touch命令最常用的用法就是用来创建空文件
[root@centos8 data]#touch `date -d "-1 day" +%F_%T`.log
[root@centos8 data]#ll
-rw-r--r-- 1 root root   0 Dec  6 22:00 2020-12-05_22:00:15.log
[root@centos8 data]#touch $(date -d "1 year" +%F_%T).log
[root@centos8 data]#ll
-rw-r--r-- 1 root root   0 Dec  6 22:00 2021-12-06_22:00:38.log

2.9 cp

cp:复制文件或目录

cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
alias cp='cp -i'

常用选项

  • -a 归档,相当于-dR --preserv=all,常用于备份功能
  • -i 如果目标已存在,覆盖前提示是否覆盖
  • -r, -R 递归复制目录及内部的所有内容
  • -b 目标存在,覆盖前先备份,默认形式为 filename~ ,只保留最近的一个备份
  • --backup=numbered 目标存在,覆盖前先备份加数字后缀,形式为 filename.# ,可以保留多 个版本
  • -v 显示复制过程
#复制文件
[root@centos8 /]# cp -a /root/lx.txt /data/
[root@centos8 /]# ls /data/
lx.txt
#复制目录
[root@centos8 /]# cp -r /etc/sysconfig/ /data
[root@centos8 /]# ll /data/
total 8
-rw-r--r-- 1 root root  253 Dec  6 21:55 lx.txt
drwxr-xr-x 6 root root 4096 Dec  6 22:15 sysconfig

2.10 mv

mv:对文件或目录进行移动和改名

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

常用选项

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

使用rename可以完成对文件的批量改名

SYNOPSIS
rename [options] expression replacement file...

[root@centos8 data]# ls
file10.txt  file2.txt  file4.txt  file6.txt  file8.txt  lx.txt
file1.txt   file3.txt  file5.txt  file7.txt  file9.txt  sysconfig
[root@centos8 data]# rename '.txt' '' *.txt
[root@centos8 data]# ls
file1  file10  file2  file3  file4  file5  file6  file7  file8  file9  lx  sysconfig
[root@centos8 data]# 

2.11 rm

rm:删除文件或目录

rm [OPTION]... [FILE]...

常用选项

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

删除特殊文件:-f

1.rm -- -foo
2.rm ./-foo
[root@centos8 data]# touch ./-f
[root@centos8 data]# ls
-f
[root@centos8 data]# rm -rf -- -f

使用shred可以对磁盘惊醒覆盖,从而彻底删除文件

2.12 目录命令

2.12.1 tree:显示目录树

常用选项

  • -d: 只显示目录
  • -L level:指定显示的层级数目
  • -P pattern: 只显示由指定wild-card pattern匹配到的路径

2.12.2 mkdir

mkdir:创建目录

常用选项:

  • -v: 显示详细信息

2.12.3 rmdir

rmdir:删除空目录,使用较少

3.EXT文件系统和链接

3.1文件系统组成

3.1.1 superblock

superblock:记录文件系统整体信息,如inode/block的总量、使用量、剩余及档案系统格式等信息

3.1.2 inode结构

inode块中保存的是文件的属性信息,包括以下内容

  • inode number 节点号
  • 文件类型
  • 权限
  • UID
  • GID
  • 链接数
  • 文件大小和atime、ctime、mtime
  • 文件内容的真正位置
  • 其他文件相关数据

3.1.3 目录

目录是个特殊文件,檔案系統会分配一个 inode 与至少一个 block 给目录。其中,inode 记录目录相关权限与属性,和可分配到的block块的号码; 而 block 则是记录在这个目录下的文件名占用的inode number节点号。

cp和inode

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

rm和inode

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

mv和inode

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

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

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

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

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

3.2硬链接

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

2

硬链接特性

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

为什么不能硬链接目录

链接目录时会多出一个.,而.又会让目录产生一个新的链接,这会导致错误循环问题

ln [OPTION]... TARGET... DIRECTORY

3.3符号 symbolic (或软 soft)链接

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

2

软链接特点

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

3.4软链接和硬链接的区别

  1. 本质:

    硬链接:本质是同一个文件

    软链接:本质不是同一个文件

  2. 跨区

    硬链接:不支持

    软链接:支持

  3. inode

硬链接:相同

软链接:不同

  1. 链接数

    硬链接:创建新的硬链接,链接数会增加,删除硬链接,链接数减少

    软链接:创建或删除,链接数不会变化

  2. 目录

    硬链接:不支持

    软链接:支持

  3. 相对路径

    硬链接:原始文件相对路径是相对于当前工作目录

    软链接:原始文件的相对路径是相对于链接文件的相对路径

  4. 删除源文件

    硬链接:只是链接数减一,但链接文件的访问不受影响

    软链接:链接文件将无法访问

  5. 文件类型

    硬链接:和源文件相同

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

原文地址:https://www.cnblogs.com/bestvae/p/14096835.html