Linux文件管理

文件系统目录结构

文件系统的目录结构

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

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

  • 根文件系统(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 不一样 一样
链接数 创建或删除链接数不变 随链接创建或删除和相应的增加或减少
相对路径 相对于源文件的相对路径 相对于当前路径
删除源文件 链接文件将无法访问 只是链接数减一,对链接文件的访问不受影响
文件类型 链接文件和源文件无关 和源文件相同
文件大小 源文件路径的大小 和源文件相同
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,367评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,959评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,750评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,226评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,252评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,975评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,592评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,497评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,027评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,147评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,274评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,953评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,623评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,143评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,260评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,607评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,271评论 2 358