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个部分,每个部分含义如下
- 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的权限。 - 链接数,创建硬链接会+1,软链接不会。如果文件是文件夹,链接数等于文件夹下的子文件夹数。
创建目录时,默认会生成两个目录项:"."和".."。前者的inode号码就是当前目录的inode号码,等同于当前目录的"硬链接";后者的inode号码就是当前目录的父目录的inode号码,等同于父目录的"硬链接"。所以,任何一个目录的"硬链接"总数,总是等于2加上它的子目录总数(含隐藏目录),这里的2是父目录对其的“硬链接”和当前目录下的".硬链接“。
- 文件所有者
- 文件所有组
- 文件大小,单位是字节
- 文件的mtime
- 文件绝对路径
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
递归删除,可以删除文件夹
-f
force,强制删除,不询问
#删除/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