文件系统目录结构
文件系统的目录结构
文件和目录被组织成单根倒置的树结构
文件系统从根目录下开始,用“/”表示
根文件系统(rootfs):root filesystem
标准Linux文件系统(如:ext4),对大小写敏感 ,例如:MAIL, Mail, mail, mAiL
以 . 开头的文件为隐藏文件
路径用“/”分割
文件名最长255个字节
包括路径在内文件名最长4095个字节
蓝色:目录,绿色:可执行文件,红色:压缩文件,浅蓝色:链接文件,白色:普通文件
除了/和NULL,所有字符都有效,但使用特殊字符的目录名和文件名不推荐使用,有些字符需要用引号来引用
每个文件都有两类相关的数据,元数据:metadate,即属性,数据:data,即文件内容
Linux的文件系统分层结构: FHS Filesystem Hierarchy Standard
参考文档:http://www.pathname.com/fhs/
常见的文件系统目录功能
/boot: 引导文件存放的目录,内核文件(vmlinuz),引导加载器(bootlader,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相关的安全策略等信息的存储位置
应用程序的组成部分
二进制文件:/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin
库文件:/lib, /lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64
配置文件:/etc, /etc/DIRECTORY, /usr/local/etc
帮助文件:/usr/share/man, /usr/share/doc, /usr/local/share/man, /usr/local/share/doc
1.4 CentOS 7以后版本的目录结构变化
/bin 和 /usr/bin
/sbin 和 /usr/sbin
/lib 和/usr/lib
/lib64 和 /usr/lib64
[11:15:30 root@centos8 ~]#ls -ld /bin /sbin /lib /lib64
lrwxrwxrwx. 1 root root 7 May 11 2019 /bin -> usr/bin
lrwxrwxrwx. 1 root root 7 May 11 2019 /lib -> usr/lib
lrwxrwxrwx. 1 root root 9 May 11 2019 /lib64 -> usr/lib64
lrwxrwxrwx. 1 root root 8 May 11 2019 /sbin -> usr/sbin
[09:59:25 root@centos6 ~]#ls -ld /bin /sbin /lib /lib64
dr-xr-xr-x. 2 root root 4096 Jul 29 08:39 /bin
dr-xr-xr-x. 8 root root 4096 Jul 29 08:39 /lib
dr-xr-xr-x. 7 root root 12288 Jul 29 08:39 /lib64
dr-xr-xr-x. 2 root root 4096 Jul 29 08:40 /sbin
Linux下的文件类型
- 普通文件
d 目录di'rectory
l 符号链接文件link
b 块设备文件block
p 管道文件pipe
c 字符设备文件character
s 套接字文件按socket
文件操作命令
显示当前工作目录
每个shell和系统进程都有一个当前的工作目录CWD: current work directory
显示当前shell,CWD的绝对路径
pwd命令:printing working directory
-P:显示真是的物理路径
-L:显示连接路径(默认)
[11:33:11 root@centos8 bin]#pwd
/bin
[11:34:56 root@centos8 bin]#pwd -P
/usr/bin
绝对路径和相对路径
-
绝对路径
以正斜线/即根目录开始
完整的文件位置路径
用于任何想指定一个文件的时候
-
相对路径
不以斜线开始
一般情况下,是指相对于当前工作目录的路径,特殊情况下,是相对于某目录的位置
可以作为一个简短形式表示指定一个文件名
基名:basename,只去文件名而不取路径
目录名:dirname,只取路径,不要文件名
更改目录
命令 cd :change director 改变目录
选项 -p:切换至物理路径,而不是软链接目录,可以使用相对路径和绝对路径
切换至父目录: cd ..
切换至当前用户家目录:cd
切换至上一次的工作目录:cd -
15:03:51 root@centos8 ~]#cd /etc/sysconfig/
[15:13:09 root@centos8 sysconfig]#pwd
/etc/sysconfig
[15:13:41 root@centos8 sysconfig]#cd ../../data
[15:13:48 root@centos8 data]#pwd
/data
[15:14:28 root@centos8 data]#cd /bin
[15:14:46 root@centos8 bin]#pwd
/bin
[15:14:48 root@centos8 bin]#cd -P
/bin
[15:15:03 root@centos8 bin]#pwd
/usr/
[15:15:06 root@centos8 bin]#cd -
/bin
相关的环境变量
PWD:当前工作路径
OLDPWD:上一次工作路径
[15:20:18 root@centos8 ~]#echo $OLDPWD
/etc/sysconfig
[15:20:30 root@centos8 ~]#cd -
/etc/sysconfig
列出目录内容
ls 命令可以列出当前目录下的内容或指定目录下的内容
常用选项
-a 包含隐藏文件
-l 显示额外信息,以长格式显示
-R 目录递归
-ld 目录和符号链接信息
-i 查看文件inode编号
-1 文件分行显示
-S 按文件大小从大到小排序
-t 按mtime排序
-u 配合-t选项,按atime从新到旧排序
-U 按目录存放的顺序排列
-X 按文件后缀排序
-F 对不同的文件类型附加不同的符号
-C 文件多时,以多列的方式显示文件,默认时一列(标准输出)
说明:ls 查看不同后缀的文件时的颜色由/etc/DIR_COLORS和 $LS_COLORS 变量控制
别名
#centos8
[15:40:03 root@centos8 sysconfig]#alias ll
alias ll='ls --color=auto'
#ubuntu
[07:41:33 root@ubuntu2004 ~]#alias ll
alias ll='ls -alF'
查看文件状态 stat
文件相关信息:metadata,data
每个文件有3个时间戳:
access time 访问时间,atime,读取文件按内容
modify time 修改时间,mtime,改变文件内容
change time 改变时间,ctime,元数据发生改变
[15:46:12 root@centos8 sysconfig]#stat /etc/passwd
File: /etc/passwd
Size: 1075 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 67831142 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:passwd_file_t:s0
Access: 2020-07-29 08:57:48.327471934 +0800
Modify: 2020-07-29 08:57:48.292471932 +0800
Change: 2020-07-29 08:57:48.293471932 +0800
确定文件类型
文件可以包含多种类型的数据,使用file命令查看文件的类型,然后确定适当的打开命令或应用程序使用
命令格式
file [options] <filename>...
常用选项:
-b:列出文件辨识结果,不显示文件名称
-f:filelist 列出文件filelist中文件名的文件类型
-F:使用指定的分隔符号替换输出文件名后默认的“ : ”分隔符
-L:查看对应软连接对应的文件类型
--help:显示命令在线帮助
范例: windows的文本格式和Linux的文本格式的区别
[16:19:31 root@centos8 ~]#cat linux.txt
a
b
c
[16:19:35 root@centos8 ~]#cat win.txt
a
b
c[16:19:39 root@centos8 ~]#file linux.txt win.txt
linux.txt: ASCII text
win.txt: ASCII text, with CRLF line terminators
[16:20:09 root@centos8 ~]#hexdump win.txt
0000000 0d61 620a 0a0d 0063
0000007
[16:21:12 root@centos8 ~]#hexdump linux.txt
0000000 0a61 0a62 0a63
0000006
#安装转换工具
[16:22:27 root@centos8 ~]#yum install -y dos2unix
#将window文本格式转换成Linux文本格式
[16:22:27 root@centos8 ~]#dos2unix win.txt
dos2unix: converting file win.txt to Unix format...
[16:24:10 root@centos8 ~]#file win.txt
win.txt: ASCII text
#将Linux的文本格式转换成Windows的文本格式
[16:28:44 root@centos8 ~]#unix2dos win.txt
unix2dos: converting file win.txt to DOS format...
[16:30:53 root@centos8 ~]#file win.txt
win.txt: ASCII text, with CRLF line terminators
转换文件字符编码集
#显示支持字符集编码列表
[root@centos8 ~]#iconv -l
#windows7上文本默认的编码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 windows.txt
▒▒▒▒▒▒[root@centos8 data]#
#将windows7上文本默认的编码ANSI(GB2312)转换成UTF-8
[root@centos8 data]#iconv -f gb2312 windows.txt -o windows1.txt
[root@centos8 data]#cat windows1.txt
世界你好!
[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 windows2.txt
[root@centos8 data]#file windows2.txt
windows2.txt: ISO-8859 text, with no line terminators
范例
[16:37:15 root@centos8 ~]#file -f list.txt
/etc: directory
/bin: symbolic link to usr/bin
/etc/issue: ASCII text
文件通配符模式 wildcard pattern
文件通配符可以匹配符合条件的多个文件,方便批量管理多个文件
通配符采用特定的符号,表示特定的含义,此特定的符号成为元 meta字符
常见的通配字符
* 匹配零个或多个字符,但不匹配“.”开头的文件按,即隐藏文件
? 匹配任何单个字符
~ 当前用户家目录
~ding 用户ding的家目录
~+和. 当前工作目录
~- 前一个工作目录
[0-9] 匹配数字范围
[a-z] 匹配字母
[A-Z] 匹配字母
[ding] 匹配列表任意一个字符
[^ding] 匹配列表中所有字符之外的字符
[^a-z] 匹配列表中所有字符之外的字符
另外还有在Linux系统中的预定义的字符类:man 7 golb
[:diget:] 任意数字,等于[0-9]
[:alpha:] 任意大小写字母
[:lower:] 任意小写字母,表示a-z
[:upper:] 任意大写字母,表示A-Z
[:space:] 水平或垂直空白字符
[:alnum:] 任意字母或数字
[:blank:] 水平空白字符
[:punct:] 标点符号
[:print:] 可打印字符
[:cntrl:] 控制(非打印)字符
[:graph:] 图形字符
[:xdigit:] 十六进制字符
范例
[17:02:56 root@centos8 ~]#echo $OLDPWD
/tmp
[17:03:07 root@centos8 ~]#ll -/
ls: invalid option -- '/'
Try 'ls --help' for more information.
[17:03:32 root@centos8 ~]#ll ~-/
.font-unix/ .Test-unix/ .XIM-unix/
.ICE-unix/ vmware-root_734-2991268422/
ks-script-1auw1mdh .X11-unix/
[17:03:32 root@centos8 ~]#ll ~-/ks-script-1auw1mdh
-rwx------. 1 root root 1379 Jul 29 08:58 /tmp/ks-script-1auw1mdh
范例
[17:05:40 root@centos8 ~]#touch file{a..z}.txt file{A..Z}.txt file{1..9}.txt
[17:10:02 root@centos8 ~]#ll file{1..9}.txt
-rw-r--r--. 1 root root 0 Jul 29 17:10 file1.txt
-rw-r--r--. 1 root root 0 Jul 29 17:10 file2.txt
-rw-r--r--. 1 root root 0 Jul 29 17:10 file3.txt
-rw-r--r--. 1 root root 0 Jul 29 17:10 file4.txt
-rw-r--r--. 1 root root 0 Jul 29 17:10 file5.txt
-rw-r--r--. 1 root root 0 Jul 29 17:10 file6.txt
-rw-r--r--. 1 root root 0 Jul 29 17:10 file7.txt
-rw-r--r--. 1 root root 0 Jul 29 17:10 file8.txt
-rw-r--r--. 1 root root 0 Jul 29 17:10 file9.txt
[17:11:13 root@centos8 ~]#ll file[1-9].txt
-rw-r--r--. 1 root root 0 Jul 29 17:10 file1.txt
-rw-r--r--. 1 root root 0 Jul 29 17:10 file2.txt
-rw-r--r--. 1 root root 0 Jul 29 17:10 file3.txt
-rw-r--r--. 1 root root 0 Jul 29 17:10 file4.txt
-rw-r--r--. 1 root root 0 Jul 29 17:10 file5.txt
-rw-r--r--. 1 root root 0 Jul 29 17:10 file6.txt
-rw-r--r--. 1 root root 0 Jul 29 17:10 file7.txt
-rw-r--r--. 1 root root 0 Jul 29 17:10 file8.txt
-rw-r--r--. 1 root root 0 Jul 29 17:10 file9.txt
[17:11:22 root@centos8 ~]#ls file[a-c].txt
filea.txt fileA.txt fileb.txt fileB.txt filec.txt
[17:12:06 root@centos8 ~]#ls file[A-C].txt
fileA.txt fileb.txt fileB.txt filec.txt fileC.txt
[17:12:23 root@centos8 ~]#ls file[ding].txt
filed.txt fileg.txt filei.txt filen.txt
[17:13:34 root@centos8 ~]#ls file[^ding].txt
17:13:40 root@centos8 ~]#ls file[:lower:].txt
filee.txt filel.txt fileo.txt filer.txt filew.txt
[17:14:47 root@centos8 ~]#ls file[[:lower:]].txt
filea.txt filed.txt fileg.txt filej.txt filem.txt filep.txt files.txt filev.txt filey.txt
fileb.txt filee.txt fileh.txt filek.txt filen.txt fileq.txt filet.txt filew.txt filez.txt
filec.txt filef.txt filei.txt filel.txt fileo.txt filer.txt fileu.txt filex.txt
比较有无*的功能区别
#*号不匹配以"."开头的文件
[17:17:35 root@centos8 ~]#ls -a
. file2.txt fileA.txt filef.txt fileJ.txt fileo.txt fileS.txt filex.txt win.txt
[17:17:39 root@centos8 ~]#ls -a *
anaconda-ks.cfg file8.txt filed.txt fileh.txt filel.txt filep.txt filet.txt filex.txt win.txt
[17:17:43 root@centos8 ~]#ls -d /etc/*/
[root@centos8 ~]#l. #显示所有隐藏文件
#用通配符*做文件名会出现的问题
[17:22:04 root@centos8 data]#touch file*.log
[17:22:21 root@centos8 data]#touch file1.log
[17:22:33 root@centos8 data]#ls file*.log
file1.log 'file*.log'
[17:22:48 root@centos8 data]#ls 'file*.log'
'file*.log'
创建空文件和刷新时间
touch命令可以用来创建新文件或者刷新文件时间
格式
touch [OPTION]... FILE...
选项说明
-a:仅改变atime和ctime
-m:改变mtime和ctime
-t: [[CC]YY]MMDDhhmm[.ss] 指定atime和mtime的时间戳
-c:如果文件不存在,则不创建
范例
[root@centos8 data]#touch f1.txt
[root@centos8 data]#ll
total 0-rw-r--r-- 1 root root 0 Mar 23 11:30 f1.txt
[root@centos8 data]#ll /etc/issue
-rw-r--r--. 1 root root 23 Jan 2 23:21 /etc/issue
[root@centos8 data]#touch /etc/issue
[root@centos8 data]#ll /etc/issue
-rw-r--r--. 1 root root 23 Mar 23 11:31 /etc/issue
[root@centos8 data]#stat /etc/issue
File: /etc/issue
Size: 23 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 134345998 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-03-23 11:31:20.030291332 +0800
Modify: 2020-03-23 11:31:20.030291332 +0800
Change: 2020-03-23 11:31:20.030291332 +0800
Birth: -
[root@centos8 data]#date
Fri Dec 13 16:11:55 CST 2019
[root@centos8 data]#touch `date -d "-1 day" +%F_%T`.log
[root@centos8 data]#ls
2019-12-12_16:11:48.log
[root@centos8 data]#touch $(date -d "1 year" +%F_%T).log
[root@centos8 data]#ls
2019-12-12_16:11:48.log 2020-12-13_16:13:11.log
复制文件和目录
利用cp(copy)命令可以复制文件或目录
格式
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
常用选项
-i:如果目标文件存在,覆盖前询问是否覆盖
-n:不覆盖,注意两者的顺序
-r,-R:递归复制目录及内部的所有内容
-a:归档, 相当于-dR --preserv=all,常用于备份功能
-d: --no-dereference --preserv=links 不复制原文件,只复制链接名
-
--preserv[=ATTR_LIST]
mode:权限
ownership: 属主属组
imestamp:
inks
xattr
context
all
-p :等同于--preserv=mode,ownership,timestamp
-v :--verbose
-f :--force
-u :--update,只复制源比目标更新文件按或目标文件不存在的文件
-b :目标存在,覆盖前先备份,默认形式为
filename~
,只保留最近的一份--backup=numbered 目标存在,覆盖前先备份加数字后缀,形式为
filename.~#~
,可以保留多个版本
源目标 | 不存在 | 存在为文件 | 存在为目录 |
---|---|---|---|
一个文件 | 新建DEST,并将SRC中的内容填充至DEST中去 | 将SRC的内容填充至DEST中去,注意数据丢失的风险!建议用-i选项 | 在DEST下新建与原文件同名的文件,并将SRC中内容填充至新文件中 |
多个文件 | 提示错误 | 提示错误 | 在DEST下新建与原文件同名的文件,并将原文件内容复制进新文件中 |
目录须使用-r选项 | 创建同名DEST目录,复制SRC目录下所有文件至DEST下 | 提示错误 | 在DEST下新建与原目录同名的目录,并将SRC中内容复制至新目录中 |
范例
19:31:36 root@centos8 ~]#cp /etc/issue /data/issue_ding.bak
[19:32:05 root@centos8 ~]#ll !*
ll /etc/issue /data/issue_ding.bak
-rw-r--r--. 1 root root 23 Jul 29 19:32 /data/issue_ding.bak
-rw-r--r--. 1 root root 23 Aug 14 2019 /etc/issue
[19:32:47 root@centos8 ~]#cp -p /etc/issue /data/issue_ding2.bak
[19:33:56 root@centos8 ~]#ll /etc/issue /data/issue_ding2.bak
-rw-r--r--. 1 root root 23 Aug 14 2019 /data/issue_ding2.bak
-rw-r--r--. 1 root root 23 Aug 14 2019 /etc/issue
[19:35:16 root@centos8 ~]#cp /etc/sysconfig/ /data/
cp: -r not specified; omitting directory '/etc/sysconfig/'
[19:36:32 root@centos8 ~]#cp -r /etc/sysconfig/ /data/
[19:36:54 root@centos8 ~]#ll /data/
total 12
-rw-r--r--. 1 root root 0 Jul 29 17:22 file1.log
-rw-r--r--. 1 root root 0 Jul 29 17:22 'file*.log'
-rw-r--r--. 1 root root 23 Aug 14 2019 issue_ding2.bak
-rw-r--r--. 1 root root 23 Jul 29 19:32 issue_ding.bak
drwxr-xr-x. 6 root root 4096 Jul 29 19:36 sysconfig
19:37:02 root@centos8 ~]#cp -r /etc/sysconfig/ /data/sysconfig.bak
[19:39:53 root@centos8 ~]#ll /data
total 16
-rw-r--r--. 1 root root 0 Jul 29 17:22 file1.log
-rw-r--r--. 1 root root 0 Jul 29 17:22 'file*.log'
-rw-r--r--. 1 root root 23 Aug 14 2019 issue_ding2.bak
-rw-r--r--. 1 root root 23 Jul 29 19:32 issue_ding.bak
drwxr-xr-x. 6 root root 4096 Jul 29 19:36 sysconfig
drwxr-xr-x. 6 root root 4096 Jul 29 19:39 sysconfig.bak
[19:40:57 root@centos8 ~]#cp -b /etc/motd /data/issue
cp: overwrite '/data/issue'? y
[19:46:20 root@centos8 ~]#ll /data
total 16
-rw-r--r--. 1 root root 0 Jul 29 19:45 issue
-rw-r--r--. 1 root root 0 Jul 29 19:40 issue~
[19:46:22 root@centos8 ~]#cp --backup=numbered /etc/fstab /data/issue
cp: overwrite '/data/issue'? y
[19:49:05 root@centos8 ~]#cp --backup=numbered /etc/shadow /data/issue
cp: overwrite '/data/issue'? y
[19:49:23 root@centos8 ~]#cp --backup=numbered /etc/os-release /data/issue
cp: overwrite '/data/issue'? y
[19:49:30 root@centos8 ~]#ll /data
total 28
-rw-r--r--. 1 root root 420 Jul 29 19:49 issue
-rw-r--r--. 1 root root 0 Jul 29 19:40 issue~
-rw-r--r--. 1 root root 0 Jul 29 19:45 issue.~1~
-rw-r--r--. 1 root root 709 Jul 29 19:49 issue.~2~
----------. 1 root root 760 Jul 29 19:49 issue.~3~
特殊范例
[19:49:34 root@centos8 ~]#cp /dev/zero /data/zero.bak
移动和重命名文件
mv命令可以实现文件或目录的移动和改名
同一分区移动数据,速度很快,数据位置没有变
不同分区移动数据,速度相对慢,数据位置改变了
格式
mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
常用选项
-i :交互式
-f :强制
-b :目标存在,覆盖前先备份
rename:批量修改文件名
格式
rename [options] <expression> <replacement> <file>...
范例
#为所有的conf文件加上.bak后缀:
rename 'conf' 'conf.bak' f*
#去掉所有的bak后缀:
rename '.bak' '' *.bak
删除文件
使用rm命令可以删除文件
注意:此命令非常危险,慎重使用,建议使用mv代替rm
格式
rm [OPTION]... FILE...
常用选项
-i :交互式
-f :强制删除
-r :递归删除
--no-preserve-root 删除/
范例
[20:11:13 root@centos8 ~]#rm -rf /
rm: it is dangerous to operate recursively on '/'
rm: use --no-preserve-root to override this failsafe
#思考删除/ 文件,如何验证
[root@centos8 ~]#rm -rf /*
[root@centos8 ~]#/2TAB
[root@centos8 ~]#echo *
删除特殊文件
#将名为 “/data/-f” 的文件删除
[root@centos8 data]#rm -f -f
#此方式错误
[root@centos8 data]#rm -- -f
[root@centos8 data]#rm ./-f
[root@centos8 data]#rm /data/-f
[root@centos8 data]#touch '~'
[root@centos8 data]#ls'~'
[root@centos8 data]#rm -f ~
rm: cannot remove '/root': Is a directory
[root@centos8 data]#rm -- ~
rm: cannot remove '/root': Is a directory
[root@centos8 data]#rm -f ./~shred
rm虽然删除了文件,但是被删除的文件仍然可能被恢复,在安全要求比较高的场景下,可以使用shred安全删除文件
格式
shred [OPTION]... FILE...
常见选项
-z :最后一次覆盖添加0,以隐藏覆盖操作
-v :能够显示操作进度
-u :覆盖后截断并删除文件
-n #:指定覆盖文件内容的次数(默认次数是3)
范例
[20:22:22 root@centos8 ~]#shred -zvun 5 /data/issue
shred: /data/issue: pass 1/6 (random)...
shred: /data/issue: pass 2/6 (ffffff)...
shred: /data/issue: pass 3/6 (random)...
shred: /data/issue: pass 4/6 (000000)...
shred: /data/issue: pass 5/6 (random)...
shred: /data/issue: pass 6/6 (000000)...
shred: /data/issue: removing
shred: /data/issue: renamed to /data/00000
shred: /data/00000: renamed to /data/0000
shred: /data/0000: renamed to /data/000
shred: /data/000: renamed to /data/00
shred: /data/00: renamed to /data/0
shred: /data/issue: removed
[20:22:34 root@centos8 ~]#ls /data/issue
ls: cannot access '/data/issue': No such file or directory
目录操作
显示目录树 tree
常见选项
-d :只显示目录
-L level:指定显示层级的数目
-P pattern :只显示由指定 wild-card pattern匹配到的路径
创建目录 mkdir
常见选项
-p :存在于不报错,且可自动创建所需的各目录
-v :显示详情
-m MODE:创建目录时指定权限
删除空目录 rmdir
常见选项
-p :递归删除父空目录
-v :显示详情
注意:rmdir只能删除空目录,如果要删除非空目录,可以使用rm -r命令,递归删除目录树
范例:
alias rm='DIR=/data/backup`date +%F%T`;mkdir $DIR;mv -t $DIR'
文件元数据和节点表结构
inode结构表
每个文件的属性,比如:文件的类型,大小,时间等,称为文件的元(metadata)属性,这些元属性存放在node(index node)表中。node表中由很多条记录组成,第一条记录了对应的存放了一个文件的元数据信息。
每个分区都有各自的节点编号。
第一个node表对应的记录了以下信息:
inode number :节点号
文件类型
权限
GID
UID
链接数(指向这个文件名路径名称的数量)
该文件的大小和时间戳
指向磁盘上文件的数据块指针
有关文件的其他数据
目录
目录是一个特殊文件,目录文件的内容保存了此目录中文件的列表及inode number的对应关系
文件引用一个是inode节点号
人是通过一个文件名来引用一个文件
一个目录是目录下文件名与inode节点号之间的映射
cp 和 inode
cp 命令
分配一个空闲inode号,在inode表中生成新的条目
在目录中创建一个目录项,将名称与inode号关联
拷贝数据生成新的文件
rm 和 inode
rm 命令
链接数递减,从而释放的inode号可以被重用
把数据库放在空闲列表中
删除目录项
数据实际不会马上被删除,但当另一个文件使用数据块是将被覆盖
mv 和 inode
-
如果mv的目标和源在相同的文件系统,作为mv命令
用新的文件名对应新的目录项
删除旧目录项对应的旧文件名
不影响inode表(除时间戳)或磁盘的上的数据位置,没有数据被移动
如果目标和源在不同的文件系统,mv相当于rm和cp
范例
[07:44:51 root@centos8 ~]#df -i /boot
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 65536 310 65226 1% /boot
[07:45:31 root@centos8 ~]#touch /boot/test/file{1..65226}.txt
-bash: /usr/bin/touch: Argument list too long
[07:45:43 root@centos8 ~]#touch /boot/test/file{1..65226}
[07:47:45 root@centos8 ~]#touch /boot/test/new.txt
touch: cannot touch '/boot/test/new.txt': No space left on device
[07:48:03 root@centos8 ~]#df /boot
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 999320 123780 806728 14% /boot
[07:48:25 root@centos8 ~]#df -i /boot
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 65536 65536 0 100% /boot
删除大文件
[07:48:03 root@centos8 ~]#cat /dev/null > /var/log/huge.log
硬(hard)链接
硬链接本质就是给一个文件起一个新的名称,本质上是同一个文件
硬链接的特性
创建硬链接会在对用的目录中额外增加一个新的目录项以引用文件
对应于同一个文件系统上的物理文件
每个目录引用相同的inode号
创建时链接数递增
删除文件时:rm命令递减链接的数量,文件要存在,至少要有一个链接数,当链接数为零时,该文件被删除
文件不能跨分区和驱动器
不支持对目录创建硬链接
格式
ln filename [linkname ]
符号symbolic(或软(soft))链接
一个符号链接指向另一个文件,类似于windows中的快捷方式,软连接文件和源文件本质上不是同一个文件
软连接的特点
一个符号链接引用的内容是它指向的文件
可以对目录创建软连接
可以跨分区创建软链接
指向的是另一个文件的路径,其大小为指向的路径的字符串的长度,不增加或减少目标文件的inode的引用计数
软链接如果使用相对路径,是相对与源文件的路径,而不是相对于当前路径
格式
link -s filename [linkname]
范例
#绝对路径
[08:26:16 root@centos8 data]#ln -s /data/dir /data/dirlink
#相对路径
[08:26:16 root@centos8 data]#cd /data
[08:26:16 root@centos8 data]#ln -s ../data/dir /root/dirlink
[08:26:16 root@centos8 data]#rm -rf /data/dirlink #删除软链接本身,不会删除源目录内容
[08:26:16 root@centos8 data]#rm -rf /data/dir #删除源目录的文件,不会删除链接文件
#查看链接文件指向的原文件
[08:26:16 root@centos8 data]#readlink /proc/$/exe
/usr/bin/bash
硬链接和软链接的区别总结
特性 | 软链接 | 硬链接 |
---|---|---|
本质 | 不是同一个文件 | 是同一个为文件 |
跨设备 | 支持 | 不支持 |
文件夹 | 支持 | 不支持 |
inode | 不一样 | 一样 |
链接数 | 创建或删除链接数不变 | 随链接创建或删除和相应的增加或减少 |
相对路径 | 相对于源文件的相对路径 | 相对于当前路径 |
删除源文件 | 链接文件将无法访问 | 只是链接数减一,对链接文件的访问不受影响 |
文件类型 | 链接文件和源文件无关 | 和源文件相同 |
文件大小 | 源文件路径的大小 | 和源文件相同 |