2、Linux文件、文件夹管理

1 ls

蓝色:文件夹
黑色:普通文件
绿色:可执行文件,命令、脚本
青色:软链接
红底黑字、黄底黑字:具有特殊权限的文件

options
-R递归显示,将子目录以及以下的目录全都显示
-d显示文件本身信息,而不是文件夹内部文件信息
-i显示文件的inode信息

[root@node1 ~]$ ll -d /root/ 
dr-xr-x---. 10 root root 4096 Oct 31 11:51 /root/

[root@node1 ~]$ ls -i anaconda-ks.cfg 
33575004 anaconda-ks.cfg

2 ll文件信息详解

每一条记录共分7个部分,每个部分含义如下

  1. 10位信息12345678910:
    1表示文件类型:-普通文件,d文件夹,c/b字符/块文件,s socket文件,l 链接文件
    234表示文件所有者权限
    567表示文件所有组权限
    8910表示其他用户权限
    如果设置特殊权限如facl,将出现第11位+,表示文件有特殊权限
    -rw-rwxr--+ 1 root root 0 Oct 29 12:16 服务器.txt
    对于文件:rwx代表读、写、执行
    对于文件夹:r能够读取文件夹下文件名,w能在文件夹下进行文件的创建和删除,x能够进入文件夹。对于文件夹一般都要赋予r+x的权限。
  2. 链接数,创建硬链接会+1,软链接不会。如果文件是文件夹,链接数等于文件夹下的子文件夹数。

创建目录时,默认会生成两个目录项:"."和".."。前者的inode号码就是当前目录的inode号码,等同于当前目录的"硬链接";后者的inode号码就是当前目录的父目录的inode号码,等同于父目录的"硬链接"。所以,任何一个目录的"硬链接"总数,总是等于2加上它的子目录总数(含隐藏目录),这里的2是父目录对其的“硬链接”和当前目录下的".硬链接“。

  1. 文件所有者
  2. 文件所有组
  3. 文件大小,单位是字节
  4. 文件的mtime
  5. 文件绝对路径

2.1 特殊权限 suid、sgid、stick

suid:
属主的执行位变成s,属主须有x权限,否则显示S,不生效
含义:将文件属主拥有的能力,分配给所有能够执行这个文件的人
设置方法:

  • chmod 4777
  • chmod u+/-s

sgid:
属组的执行位变成s,属组须有x权限,否则显示S,不生效
含义:将文件属组拥有的能力,分配给所有能够执行这个文件的人
设置方法:

  • chmod 2777
  • chmod g+/-s

sticky bit:
其他用户的执行位变成t,一般配置给777权限的共享文件夹
含义:赋予文件夹,实现将不同用户的文件放入共享文件夹,不同用户数据可以相互查看,但不能修改
设置方法:

  • chmod 1777
  • chmod o+/-t

3 cp

options
-r递归拷贝,将文件夹及其目录下的全部文件拷贝,否则cp不能拷贝文件夹
-p保留权限和时间戳

4 mv

可以移动文件和文件夹,保留时间戳信息

5 mkdir

options
-p递归创建父文件夹,如mkdir -p /a/b/c/d,会依次创建/a、/a/b、/a/b/c、/a/b/c/d文件夹

6 rm

不加参数只能删除文件,不能删除文件夹
-r递归删除,可以删除文件夹
-fforce,强制删除,不询问

#删除/tmp/root文件夹及文件夹内文件
[root@node1 ~]$ rm -rf /tmp/root
[root@node1 ~]$ rm -rf /tmp/root/
#只删除/tmp/root文件夹下的文件,保留文件夹
[root@node1 ~]$ rm -rf /tmp/root/*

7 文件系统详解

Linux文件系统(如ext2、ext3)规定,一个文件由目录项、inode和数据块组成:

  • 目录项:包括文件名和inode节点号。
  • Inode:又称文件索引节点,包含文件的基础信息以及数据块的指针。
  • 数据块:包含文件的具体内容。

目录项

Linux系统中,目录(directory)也是一种文件。打开目录,实际上就是打开目录文件。
目录文件的结构非常简单,就是一系列目录项(dirent)的列表。每个目录项,由两部分组成:

  • 所包含文件的文件名。(目录r权限)
  • 以及该文件名对应的inode号码。(目录x权限)

inode

理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector),每个扇区储存512字节(相当于0.5KB)。

操作系统读取硬盘的时候,不会一个扇区一个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。

文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。

inode包含文件的元信息,具体来说有以下内容:

  • 文件的字节数。
  • 文件拥有者的User ID。
  • 文件的Group ID。
  • 文件的读、写、执行权限。
  • 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
  • 链接数,即有多少文件名指向这个inode。
  • 文件数据block的位置。

可以用stat命令,查看某个文件的inode信息:
stat demo.txt
总之,除了文件名以外的所有文件信息,都存在inode之中。

8 ln

硬链接

一般情况下,文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名。但是,Linux系统允许,多个文件名指向同一个inode号码。这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为"硬链接"(hard link)。

ln source_file target_file

软链接

除了硬链接以外,还有一种特殊情况。文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打开哪一个文件,最终读取的都是文件B。这时,文件A就称为文件B的"软链接"(soft link)或者"符号链接(symbolic link)。

这意味着,文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错:"No such file or directory"。这是软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode"链接数"不会因此发生变化。

ln -s source_file target_file

区别

硬链接:

  • 不同路径的文件指定的是同一个inode
  • 硬链接不能跨分区存在
  • 硬链接不能链接到目录(要避免循环引用)
  • 删除硬链接只会减少文件被硬链接的次数,源文件不会动.

软链接:

  • 是一个独立的文件,有自己独立的inode,引用的是路径本身,不是inode
  • 删除软链接,跟源文件没任何关系
  • 软链接没有存储任何数据,只是存储了访问文件的另一种路径.
  • 软链接可以对目录创建,也可以跨分区
  • 源文件被删除,软连接将不可用。

9 touch

创建一个空文件,刷新文件的时间戳,默认atime、mtime、ctime全部刷新

touch [OPTION]... FILE...
A FILE argument that does not exist is created empty, unless -c or -h
is supplied.

A FILE argument string of - is handled specially and causes touch to
change the times of the file associated with standard output.

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
  -d, --date=STRING      parse STRING and use it instead of current time
  -f                     (ignored)
  -h, --no-dereference   affect each symbolic link instead of any referenced
                         file (useful only on systems that can change the
                         timestamps of a symlink)
  -m                     change only the modification time
  -r, --reference=FILE   use this file's times instead of current time
  -t STAMP               use [[CC]YY]MMDDhhmm[.ss] instead of current time
      --time=WORD        change the specified time:
                           WORD is access, atime, or use: equivalent to -a
                           WORD is modify or mtime: equivalent to -m
      --help     display this help and exit
      --version  output version information and exit

10 stat

查看文件的详细信息

[root@node1 ~]$ stat f1.txt 
  File: ‘f1.txt’
  Size: 4402            Blocks: 16         IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 34690030    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-10-31 11:59:42.914676527 +0800
Modify: 2020-10-26 12:23:46.584552943 +0800
Change: 2020-10-26 12:23:46.584552943 +0800
 Birth: -

10.1 文件的时间戳

Access Time:文件最后的访问时间
Modify Time:文件内容最后的修改时间
Change Time:文件状态最后的变更时间,包括文件的大小、权限等

10.2 atime的更新规则

为了防止文件被频繁访问,atime频繁更新,增大系统写IO的负担,atime的更新有两个限定条件。

  • 当mtime和ctime大于等于atime时,发生文件访问操作时更新atime
  • 不停的访问该文件,atime不会一直更新,atime每24h更新一次

11 chown

改变文件的所有者

chown [OPTION]... [OWNER][:[GROUP]] FILE

Options:
  -R, --recursive        operate on files and directories recursively

12 chgrp

改变文件的所有组

chgrp [OPTION]... GROUP FILE...

Options:
  -R, --recursive        operate on files and directories recursively

13 chmod

改变文件权限
字符方式修改:
user(u)、group(g)、other(o)、all(a)
+添加权限,-减少权限,=赋予权限

chmod [OPTION]... MODE[,MODE]... FILE...
Each MODE is of the form '[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+'.
Options:
  -R, --recursive        operate on files and directories recursively

[root@node1 ~]$ chmod a+r anaconda-ks.cfg
[root@node1 ~]$ chmod o=rx anaconda-ks.cfg 

#参考复制RFILE的权限给FILE
chmod [OPTION]... --reference=RFILE FILE...

数字方式修改
r=4、w=2、x=1
特殊权限
suid=4、sgid=2、sitck=1
特殊权限的数字放在开头

[root@node1 ~]$ chmod 3777 anaconda-ks.cfg 

14 umask

默认是0022,设定命令umask 值
默认文件权限:666-umask

umask是奇数:666-033 = 633 + 011 = 644
umask是偶数:666-022 = 644

默认目录权限:777-umask

umask是奇数:777-033 = 744
umask是偶数:777-022 = 755

永久修改/etc/profile

15 chattr 给文件设置特殊权限

chattr +i 文件 给文件加锁,任何用户不能修改
chattr -i 文件 给文件解锁

16 lsattr查看文件特殊权限

17 md5sum 校验文件完整性

md5sum file能够生产文件的MD5值,文件内容的改动会导致文件MD5值变化

[root@backup ~]$ md5sum f1.txt 
b026324c6904b2a9cb4b88d6d61c81d1  f1.txt

可以配合find和输出重定向直接生成带有绝对路径的校验文件:
find /backup/ -type f  -exec md5sum {} \; > /backup/finger.txt

md5sum -c 校验文件比对本机文件的MD5值与校验文件中记录的值是否一致

校验文件的格式为:
MD5值    文件(相对路径或绝对路径)

md5sum -c 读取本机文件时,会按照校验文件记录的路径进行读取,所以校验文件推荐使用绝对路径。

18 mktemp创建临时文件

创建一个临时文件或目录,并打印名字。名字的后缀至少带有3个X。
-d 创建目录

mktemp 111.XXX
111.X9B

你可能感兴趣的:(2、Linux文件、文件夹管理)