> 文章列表 > 回炉重造三---文件管理

回炉重造三---文件管理

回炉重造三---文件管理

1、文件管理

Linux一切皆文件

1.1文件系统的目录结构

  • 每个文件的数据都分为metadata(元数据):即文件的属性(所有者、所属组等),data(数据):即文件的内容
  • 蓝色:目录;绿色:可执行文件;红色:压缩文件;浅蓝色:链接文件;灰色:其他文件
  • 以.开头的文件是隐藏文件,需ls -a才能看见
  • 根文件系统(rootfs)

1.2常见文件系统目录的功能

  • /boot:系统引导文件存放的目录,如:内核文件、引导加载器等
  • /bin:所有用户使用的基本命令,系统启动时用到的文件
  • /sbin:类似/bin
  • /lib:系统启动时程序依赖的基本共享库文件以及内核模块文件(这个目录的文件不要乱动,以免系统无法启动)
  • /etc:存放程序的配置文件
  • /home: 家目录
  • /dev:设备文件
  • /var/log:存放日志文件的目录
  • /proc:用于输出内核与进程信息相关的虚拟文件系统

1.3应用程序的组成部分

  • 二进制程序:/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

1.4文件类型

  • -:普通文件
  • d:目录文件
  • l:软链接文件
  • b:块设备
  • c:字符设备
  • p:管道文件
  • s:套接字文件

1.5文件的操作命令

1.5.1 绝对路径与相对路径

  • 绝对路径:以“/"开头的路径
  • 相对路径:不以“/"开头的路径
  • 基名(basename):只取文件名
  • 目录名(dirname):只取路径

例如:

/etc/nginx/nginx.conf
基名:nginx.conf
目录名:/etc/nginx

1.5.2文件常用的命令

(1)ls

-a:列出所有的文件
-l:显示文件的详细信息
-R:目录递归
-S:文件从大到小列出
-d:显示目录信息

(2)stat:查看文件的状态(如文件的权限,属性等)

[root@wengsq ~]# stat anaconda-ks.cfg 文件:"anaconda-ks.cfg"大小:1259      	块:8          IO 块:4096   普通文件
设备:802h/2050d	Inode:67160130    硬链接:1
权限:(0600/-rw-------)  Uid:(    0/    root)   Gid:(    0/    root)
环境:system_u:object_r:admin_home_t:s0
访问时间:2023-04-15 07:38:56.936942396 +0800   # atime:读取文件内容
修改时间:2023-04-15 07:38:56.939942395 +0800   #mtime:改变文件的数据内容
改变时间:2023-04-15 07:38:56.939942395 +0800   #ctime:改变文件的元数据(文件的权限,属主等发生了改变)
创建时间:-

(3)file:检查文件的类型

(4)touch:创建文件

-a 仅改变 atime和ctime
-m 仅改变 mtime和ctime
-t [[CC]YY]MMDDhhmm[.ss] 指定atime和mtime的时间戳

(5)cp:复制文件

-a:复制原文件全部信息
-R:递归复制目录以及内容的所有内容
-i:如果目标已存在,覆盖前提示“是否覆盖”
-f: 强制复制

(6)mv:移动或者重命名文件

-f:强制命名或者移动文件

(7)rm:删除文件(注意:删除文件前先备份)

-f:强制删除
-r:删除目录

(8)mkdir:创建目录

-p 递归创建目录

1.5.3文件通配符

*:匹配0个或多个字符,但不匹配隐藏文件
?:匹配任何单个字符
[0-9]:匹配数字的范围
[wang]:匹配列表中的任何一个字符
[^wang]:匹配除了列表中的任何字符
[:alpha:]: 任意大小写字母
[:blank:]:水平空白字符

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

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

每一个inode表记录对应的保存了以下信息:
inode number 节点号
文件类型
权限
UID
GID
链接数(指向这个文件名路径名称个数)
该文件的大小和不同的时间戳
指向磁盘上文件的数据块指针
有关文件的其他数据

范例:

1、查看文件的节点数:df -i
2、删除大文件:cat  /dev/null  > filename
3、创建硬链接 ln filename 
4、创建软链接  ln -s  原文件  软链接文件

硬链接

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

软链接

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

软链接和硬链接的区别

1. 本质:
硬链接:本质是同一个文件
软链接:本质不是同一个文件
2. 跨设备
硬链接:不支持
软链接:支持
3. inode
硬链接:相同
软链接:不同
4. 链接数
硬链接:创建新的硬链接,链接数会增加,删除硬链接,链接数减少
软链接:创建或删除,链接数不会变化
5. 文件夹
硬链接:不支持
软链接:支持
6. 相对路径
硬链接:原始文件相对路径是相对于当前工作目录
软链接:原始文件的相对路径是相对于链接文件的相对路径
7. 删除源文件
硬链接:只是链接数减一,但链接文件的访问不受影响
软链接:链接文件将无法访问
8. 文件类型
rm -rf /data/dirlink   #只删除软链接本身,不会删除源目录内容
rm -rf /data/dirlink/  #删除源目录的文件,但不会删除链接文件,此方法非常危险
#注意: 删除此软链接务必不要加-r选项
硬链接:和源文件相同
软链接:链接文件,和源文件无关
9. 文件大小
硬链接: 和源文件相同
软链接: 源文件的路径的长度

2.IO重定向和管道

2.1 IO重定向

2.1.1 IO输出重定向的概念

1>或者> :把输出内容重定向到文件
2> :把错误内容重定向到文件
&>:把标注输出和错误输出都重定向到文件

2.1.2IO输出重定向的用法

CMD  >/2>/&>  filename
#实例:
1、输出重定向
[root@wengsq ~]# ll anaconda-ks.cfg > 2.txt
[root@wengsq ~]# cat 2.txt 
-rw-------. 1 root root 1259 415 07:38 anaconda-ks.cfg
2、错误输出重定向
[root@wengsq ~]# rm /data/log 2> 1.log
[root@wengsq ~]# cat 1
cat: 1: 没有那个文件或目录

3.用户组和权限的管理

3.1 用户和组的主要配置文件

  • /etc/passwd: 用户及其属性信息(名称、UID、主组ID等)
  • /etc/shadow:用户密码及其相关属性
  • /etc/group:组及其属性信息
  • /etc/gshadow:组密码及其相关属性

3.2 用户和组的管理命令

3.2.1 用户管理命令

  • useradd:创建用户
  • usermod:修改用户的权限
  • userdel:删除用户

3.2.2 组的管理命令

  • groupadd:创建组
  • groupmod:修改组的权限
  • groupdel:删除组

3.3 创建用户

-u UID
-g GID 指明用户所属基本组,可为组名,也可以GID
-c "COMMENT“ 用户的注释信息
-d HOME_DIR 以指定的路径(不存在)为家目录
-s SHELL 指明用户的默认shell程序,可用列表在/etc/shells文件中
-G GROUP1[,GROUP2,...] 为用户指明附加组,组须事先存在
-r 创建系统用户 CentOS 6之前: ID<500,CentOS7 以后: ID<1000
-m 创建家目录,用于系统用户
[root@wengsq ~]# useradd -u 66 -g weng -s /sbin/bin -d /var/www -c "weng" weng
[root@wengsq ~]# id weng
uid=66(weng) gid=1000(weng)=1000(weng)
#验证
[root@wengsq ~]# cat /etc/default/useradd  或者 cat /etc/passwd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

3.4修改用户属性

-u UID:UID
-g GID: 新主组
-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使
用-a选项
-s SHELL:新的默认SHELL
-c 'COMMENT':新的注释信息
-d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项

3.5删除用户

userdel  username

3.6设置密码

  • 交互式修改密码 password

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6HZGytDr-1681553155588)(C:\\Users\\wengsq\\AppData\\Roaming\\Typora\\typora-user-images\\1681542138905.png)]

  • 非交互修改密码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eBstlUSw-1681553155589)(C:\\Users\\wengsq\\AppData\\Roaming\\Typora\\typora-user-images\\1681542209814.png)]

3.7 创建用户组和修改组的权限及删除组

#创建组
groupadd weng
#修改组的权限groupmod -g 1002 qiang#删除组groupmod -g 1002 qiang

4.文件权限的管理

4.1文件所有者和所属组的属性

4.1.1 chown:修改文件的所有者或者所属组

1)owenr:只修改所有者
[root@wengsq ~]# ll 4.txt 
-rw-r--r--. 1 root root 0 415 14:39 4.txt
[root@wengsq ~]# chown admin 4.txt 
[root@wengsq ~]# ll 4.txt 
-rw-r--r--. 1 admin root 0 415 14:39 4.txt2)owner:group:同时修改所有者和所属组
[root@wengsq ~]# ll 3.txt 
-rw-r--r--. 1 root root 5 415 14:38 3.txt
[root@wengsq ~]# chown admin:admin 3.txt 
[root@wengsq ~]# ll 3.txt 
-rw-r--r--. 1 admin admin 5 415 14:38 3.txt3):group:只修改所属组
[root@wengsq ~]# ll 2.txt 
-rw-r--r--. 1 root root 60 415 14:33 2.txt
[root@wengsq ~]# chown :admin 2.txt 
[root@wengsq ~]# ll 2.txt 
-rw-r--r--. 1 root admin 60 415 14:33 2.txt4)-R:递归[root@wengsq ~]# ll weng/
总用量 0
-rw-r--r--. 1 root root 0 415 17:11 1.txt
-rw-r--r--. 1 root root 0 415 17:11 2.txt
-rw-r--r--. 1 root root 0 415 17:11 3.txt
[root@wengsq ~]# ll
总用量 8
-rw-r--r--. 1 root root   57 415 14:27 1.log
-rw-------. 1 root root 1259 415 07:38 anaconda-ks.cfg
drwxr-xr-x. 2 root root   45 415 17:11 weng
[root@wengsq ~]# chown  -R admin:admin weng/
[root@wengsq ~]# ll weng/
总用量 0
-rw-r--r--. 1 admin admin 0 415 17:11 1.txt
-rw-r--r--. 1 admin admin 0 415 17:11 2.txt
-rw-r--r--. 1 admin admin 0 415 17:11 3.txt
[root@wengsq ~]# ll
总用量 8
-rw-r--r--. 1 root  root    57 415 14:27 1.log
-rw-------. 1 root  root  1259 415 07:38 anaconda-ks.cfg
drwxr-xr-x. 2 admin admin   45 415 17:11 weng

4.1.2.chgrp:修改文件的所属组

[root@wengsq ~]# chgrp weng weng
[root@wengsq ~]# ll
总用量 8
-rw-r--r--. 1 root  root   57 415 14:27 1.log
-rw-------. 1 root  root 1259 415 07:38 anaconda-ks.cfg
drwxr-xr-x. 2 admin weng   45 415 17:11 weng

4.2文件的权限

4.2.1 文件属性的说明

  • owner:所有者 ,u
  • group:所属组 , g
  • other:其他者,o

注意:

(1)用户的最终权限,是从左向右进行顺序匹配,即,所有者,所属组,其他人,一旦匹配权限立即生效,不再向
右查看其权限
(2)r和w权限对root 用户无效
(3)只要所有者,所属组或other三者之一有x权限,root就可以执行

4.2.2 文件权限的说明

  • r:读权限(4)
  • w:写权限(2)
  • x:可执行权限(1)

4.2.3 修改文件的权限

1、给文件的所有者添加可执行权限
chmod u+x  1.txt
2、给文件的除root用户外的用户有读写的权限
chmod o=rw 2.txt

注意:

  • 新建文件的默认权限是:666-umask,如果所得结果某位存在执行(奇数)权限,则将其权限+1,偶数则保持不变
  • 新建目录的默认权限是:777-umask(其中root用户的umask默认是022,非root用户的umask默认是002)

4.3文件特殊权限

http://t.csdn.cn/eQTpH

一旦匹配权限立即生效,不再向
右查看其权限
(2)r和w权限对root 用户无效
(3)只要所有者,所属组或other三者之一有x权限,root就可以执行

4.2.2 文件权限的说明

  • r:读权限(4)
  • w:写权限(2)
  • x:可执行权限(1)

4.2.3 修改文件的权限

1、给文件的所有者添加可执行权限
chmod u+x  1.txt
2、给文件的除root用户外的用户有读写的权限
chmod o=rw 2.txt

注意:

  • 新建文件的默认权限是:666-umask,如果所得结果某位存在执行(奇数)权限,则将其权限+1,偶数则保持不变
  • 新建目录的默认权限是:777-umask(其中root用户的umask默认是022,非root用户的umask默认是002)

4.3文件特殊权限

http://t.csdn.cn/eQTpH