Linux的基础知识之Linux文件和目录及权限

Linux中一切皆文件!养成先备份在操作,才能快速还原,如不容易还原先通过

测试环境测试,然后再操作。

文件属性:文件的描述信息,主要包括:时间,大小,权限,创建日期,修改日期等等。

[root@root ~]# ls -lhi
total 12K
33574978  -rw-------.  1  root root  1.7K  Sep   4  18:51   anaconda-ks.cfg
33574993  -rw-r--r--.  1  root root  1.8K  Sep   4   21:18  initial-setup-ks.cfg
   76768     -rw-r--r--.  1  root root   292   Sep  21 13:58   j.txt
17043971  d--------x.  2  root root     6     Nov    7 17:02   test

主要包括这10列

第一列 33574978 :文件的索引节点号;好比人的身份证,是唯一的。

系统读取文件时首先通过文件名找到inode,然后读取文件内容。

第二列 -rw-------.   :文件类型及权限,共11个字符;

第一个字符代表文件的类型,后9个字符代表文件的权限;看,读,写,改,等等

.目前不了解

第三列 硬链接的数量;硬链接:同一个文件的不同访问入口。像楼的前后门,具有备份的作用。

第四列 文件的拥有者(属主);

在Linux里面文件和程序的存在必须要有用户和组满足相应存在的需求。

第五列 文件所属的组;

第六列 文件的大小;

第七、八、九列 默认文件的修改时间; -ctime (change)属性的改变;

-mtime (modify);  -atime (access)访问;

第十列 实际的文件名;严格的说文件名不算文件的属性;

第一列

1.inode 索引节点(index node);inode本身是具有大小的,创建文件系统一般会生成两个部分:

第一部分是inode许多个,第二部分是Block许多个;

其中Block是用来存储实际数据的;

inode中包含文件属性信息不限于大小、属主、归属组、读写权限、文件类型、修改时间等等;

唯独不包含文件名;

逻辑关系:file------>inode(ls -l)----->Block;

[root@root ~]#ls -li 接文件名

[root@root ~]# stat /etc/hosts  看文件的详细属性;
  File: '/etc/hosts'
  Size: 158           Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 16778299    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:net_conf_t:s0
Access: 2024-11-07 16:21:02.754102262 +0800
Modify: 2013-06-07 22:31:32.000000000 +0800
Change: 2024-09-04 18:16:40.663027209 +0800

2.查看文件系统inode总量以及剩余量    df -i

[root@root ~]# df -i
Filesystem               Inodes  IUsed   IFree IUse% Mounted on
devtmpfs                 120459    391  120068    1% /dev
tmpfs                    124715      1  124714    1% /dev/shm
tmpfs                    124715    969  123746    1% /run
tmpfs                    124715     16  124699    1% /sys/fs/cgroup
/dev/mapper/centos-root 8910848 161019 8749829    2% /
/dev/sda1                524288    340  523948    1% /boot
tmpfs                    124715     20  124695    1% /run/user/1000
/dev/sr0                      0      0       0     - /run/media/admin/CentOS 7 x86_64
tmpfs                    124715      1  124714    1% /run/user/0

3.查看磁盘的使用量          df -h

[root@root ~]# df -h
Filesystem            Size   Used Avail  Use%   Mounted on
devtmpfs              471M     0  471M   0%       /dev
tmpfs                    488M     0  488M   0%       /dev/shm
tmpfs                    488M  8.6M  479M   2%    /run
tmpfs                    488M     0  488M   0%        /sys/fs/cgroup
/dev/mapper/centos-root   17G  5.7G   12G  33% /
/dev/sda1              1014M  172M  843M  17% /boot
tmpfs                     98M   32K   98M   1%        /run/user/1000
/dev/sr0                 4.4G  4.4G     0 100%        /run/media/admin/CentOS 7 x86_64
tmpfs                     98M     0   98M   0%           /run/user/0

磁盘空间是否满了由inode(df -i)和Block(df -h)共同决定;

磁盘满的一个特征:no space on device left

4.inode小结

1)磁盘被分区并格式化为ext4文件系统后会发生一定数量的inode和Block;

2)inode称为索引节点,它的作用是存放文件属性信息以及作为

文件的索引并指向文件的实际内容 ;

3)ext3/ext4文件系统的Block,存放文件的实际内容;

4)inode是磁盘上的一块存储空间,CentOS 7非启动分区inoode默认大小为256字节;

5)inode的表现形式是一串数字,不同文件对应的inode(一串数字)在文件系统里是唯一的;

6)inode节点号相同文件,互为硬链接文件,可以认为是一个文件的不同入口;
7)ext3/ext4文件系统下,一个文件被创建后至少要占用一个inode和一个Block;

8)ext3/ext4文件系统下,正常情况下一个文件只能占用一个inode;

9)Block是用来存储实际数据的,他的大小一般有1K、2K、4K几种。

其中引导分区的为1K;

10)如果一个文件很大,需要占用多个Block;如果文件很小至少占用一个Block

且剩余空间被浪费了(无法存储其他文件);但都只占用一个inode;

11)inode大小和总量查看  

a.dumpe2fs /dev/sda1|egrep -i"block size|inode size              大小

b.dumpe2fs /dev/sda1|egrep -i"block count|inode count         总量

12)查看inode总量和使用量命令   df -i

13)查看文件的inode

ls -li /stat/etc/hosts

14)如何生成指定的inode大小

格式化命令:mkfs.ext4 -b 2048 -l 256/dev/sdb;

5.Block知识小结

1)磁盘读取数据是按Block为单位读取;

2)一个文件可能占用多个Block。但是每读取一个Block会消耗一次磁盘I/O;

3)如果要提升磁盘IO性能,那么就要可能一次性读取数据尽量多;

4)一个Block只能存放一个内容文件,无论内容大小。如果 Block默认是4K大小,那么

存放一个1K的文件,剩余3K就浪费了;

5)Block并不是越大越好。Block太大对于存放小文件存放就会浪费磁盘空间,

例如:1000K的文件,Block大小为4K,占用250个Block,如果Block默认为1K,

则需要占1000个Block。访问谁的效率更高?消耗IO分别为250次和1000次;

6)根据业务需求确定默认的Block大小,大文件(大于16K)一般设置Block大一点,

对于小文件(小于1K)一般设置Block小一点;

7)Block太大例如4K,但文件都是0.1K的,就大量浪费磁盘空间;

8)Block太小例1K,但文件都是1000K的,就大量浪费磁盘IO;

9)Block的大小设置是在格式化的时候确定的,命令

mkfs.ext4 -b  2048 -I 256/dev/sdb

10)ext3/ext4文件,一般设置为4K;

11)企业文件都会比较大(一般不能会大于4K),这是Block设置的

会大一些提高磁盘访问效率;

有关的面试题:

A.1个100M(10000K)的文件的磁盘分区,分别写入1K或写入1M(100K)的文件,

分别可以写多少个?(说出知识点)

答:考察文件系统inode与Block的知识点

1.inode是关于存放文件属性信息的,默认大小为256byte;

2.Block是关于存放文件实际数据的,默认大小为1K或4K(企业);

3.一个文件占用一个inode及至少要占用一个Block;

默认较大的分区只是在企业场景下inode数量是足够的,而Block数量消耗的更快;

B.如果向磁盘写入数据提示如下错误:no space left on device,通过

查看磁盘空间发现没满,请问可能的原因是什么?企业环境下什么情况下会发生此问题?

答:可能是inode数量消耗尽了。

企业:邮寄临时队列/var/spool/clientmquence这里很容易被小文件占满导致no space left on device的错误;clientmquence目录只有安装了sendmail,才会有,是sendmail邮件的临时队列。

解决方法:解决/var/spool/clientmquence小文件过多的方法;

第二列   Linux文件类型(目录、普通文件、字符设备文件、符号链接文件、管道文件等等)

文件类型标识符文件类型说明
d(directory)表示这是一个目录,如ext,在ext2fs中,目录是一个特殊文件
-(regular flie)表示这是一个普通文件
l(link)表示这是一个软链接文件,实际上指向了另一个文件
c(character)表示字符设备文件
s(socket)表示是一个socket文件
p(named pipe)表示管道文件

b      特殊块文件(缓冲的)

d      目录

 f      普通文件

 l      符号链接

1.普通文件的三种类型

1)纯文本文件:可直接读到数据;

2)二进制文件:常见的是命令;

3)数据格式文件:存放命令的信息/结果;登录数据会记录在/var/log/wtmp”“数据文件”;

可以通过last命令读出来,cat命令会乱码,因数据文件属于特殊格式的文件;

lastlog(/var/log/lastlog)

[root@localhost ~]# file /var/log/wtmp
/var/log/wtmp: data
[root@localhost ~]# file /var/log/lastlog
/var/log/lastlog: data

2.目录

1)/是所有目录的顶点。

2)目录结构像一颗倒挂的树。

3)目录与磁盘分区没有关联的。

4)/不同的目录可能会对应不同的分区或磁盘。

5)所有的目录按照一定的类别有规律的组织和命名的。

查看目录:ls、ls -l、ls -a、tree -Ld 层数

3.字符设备与块设备;块设备:find /dev -type d |xargs ls -l例如磁盘;

字符设备:find /dev -type c |xargs ls -l;仅了解一下哈;

4..sock文件是一种特殊文件;

5.符号链接文件:此文件实际上指向了另一个文件;

[root@localhost /]# ls -l /etc/rc.d/init.d/ -d
drwxr-xr-x. 2 root root 4096 Oct 12 11:48 /etc/rc.d/init.d/
[root@localhost /]# ls -l /etc/rc.d/init.d /etc/init.d -d
lrwxrwxrwx. 1 root root   11 Jun 22 23:53 /etc/init.d -> rc.d/init.d
drwxr-xr-x. 2 root root 4096 Oct 12 11:48 /etc/rc.d/init.d

6.文件类型(必会)

1).tar、tar.gz、.zip、.tar.bz表示压缩文件,创建命令一般为tar,gzip,unzip等
2).sh表示shell脚本语言,通过shell语言开发的程序;

3).pl 表示perl语言文件,通过Perl语言开发的程序;

4).py表示python语言文件,通过python语言开发的程序;

5).html、.php、.jsp、.do表示网页语言文件;

6).conf 表示系统的配置文件;

7).rpm表示rpm安装包文件;

小结:

d(directory)表示这是一个目录,如ext,在ext2fs中,目录是一个特殊文件
-(regular flie)表示这是一个普通文件

第二列 权限 rwxr-xr-x

rwxr-xr-x

r ——>read   读                  4

w——>write   写                2

x——>(execute)执行    1

- ——>没有权限 0

第三列:硬链接(hard link)

硬链接:ln 源文件 目标文件

软链接(symbolic link):ln -s源文件 目标文件“不能事先存在”

1.硬链接

是指通过索引节点inode来进行链接;

在Linux中多个文件名指向同一个inode是允许的;

硬链接文件相当于文件的一个入口;

[root@localhost ~]# echo 1 >a
[root@localhost ~]# ls -l a
-rw-r--r--. 1 root root 2 Nov  9 17:05 a
[root@localhost ~]# cat a
1
[root@localhost ~]# ln a b
[root@localhost ~]# ls -l a
-rw-r--r--. 2 root root 2 Nov  9 17:05 a
硬链接具有备份的作用

[root@localhost ~]# ls -hil a b
16777226 -rw-r--r--. 2 root root 2 Nov  9 17:05 a
16777226 -rw-r--r--. 2 root root 2 Nov  9 17:05 b
[root@localhost ~]# cat a b
1
1
[root@localhost ~]# rm a
rm: remove regular file 'a'? y
[root@localhost ~]# cat a
cat: a: No such file or directory
[root@localhost ~]# cat b
1

【知识小结】:

1、具有相同inode节点号的多个文件互为硬链接文件;

2、删除硬链接文件或者删除源文件任意文件之一,文件实体并未被删除;

3、只有删除了源文件及所有对应的硬链接文件,文件实体才会被删除;

4、当所有硬链接文件及所有对应的硬链接文件被删除后,在存放新的

数据会占用这个文件的空间,或者磁盘fsck检查的时候,删除的数据与

会被系统回收,所以要养成删除或多套环境测试的好习惯;

5、硬链接文件就是文件的另一个入口,好比大楼的前后门;

6、可以通过给文件设置硬链接来防止文件被误删;

7、通过执行命令“ ln 源文件 硬链接文件”即可完成创建硬链接;

8、硬链接文件只是普通文件,可以用rm命令来删除;

9、对于静态文件(没有进程正在调用的文件)来说,当硬链接数为0(i_link),

文件被删除。i_link的查看方法(ls -l 命令结果的第三列就是);

2.软链接

[root@localhost ~]# touch file
[root@localhost ~]# ln -s file soft_file
[root@localhost ~]# ls -lhi file soft_file
16777226 -rw-r--r--. 1 root root 0 Nov  9 19:38 file
16777231 lrwxrwxrwx. 1 root root 4 Nov  9 19:39 soft_file -> file

索引号发生了变化;由soft_file指向file;

[root@localhost ~]# readlink soft_file   查看软链接指向谁;
file

【软链接知识小结】:

1、软链接类似于Windows的快捷方式(可以通过readlink查看其指向);

2、软链接类似于一个文本文件,里面存放的是源文件的路径,只有源文件实体;

3、删除源文件,软链接文件依然存在,但是无法访问指向源文件实体;

4、时效的时候一般是白字红底闪烁提示;

5、执行命令“ln -s源文件 软链接文件”,即可完成创建软链接(目标不存在);

6、软链接和源文件是不同类型的文件,也是不同的文件,inode号不相同;

7、删除软链接文件的文件类型为(l)可以用rm命令;

例子:

[root@localhost ~]# mkdir /test/oldboy -p
[root@localhost ~]# cd /test/oldboy/
[root@localhost oldboy]# touch oldboyfile
[root@localhost oldboy]# ln oldboyfile oldboy_hard_link
[root@localhost oldboy]# ln -s oldboyfile  oldboyfile_soft_link
[root@localhost oldboy]# ls -li
total 0
7077891 -rw-r--r--. 2 root root  0 Nov  9 21:13 oldboy_hard_link
7077891 -rw-r--r--. 2 root root  0 Nov  9 21:13 oldboyfile
7077892 lrwxrwxrwx. 1 root root 10 Nov  9 21:15 oldboyfile_soft_link -> oldboyfile、

【有关文件链接的小结】

1)删除软链接oldboyfile_soft_link,对oldboyfile,oldboyfile_soft_link无影响;

全局结论:删除软链接文件对源文件及硬链接无任何影响。

2)删除硬链接 oldboyfile_hard_link,对oldboyfile,oldboyfile_soft_link都无影响;

全局结论:删除硬链接文件对源文件及软链接文件都无任何影响。

3)删除源文件oldboyfile,对硬链接oldboy_hard_link没有影响,但是会导致

软链接olydboy_soft_link失效;

全局结论:删除源文件oldboyfile,硬链接文件没有影响,但是会导致

软链接文件失效白字红底闪烁。

4)同时删除源文件oldboyfile,硬链接文件oldboyfile_hard_link,整个文件会真正的被删除。

5)源文件和硬链接文件具有相同的索引点号,可以认为是同一个文件或一个文件的多个入口;

6)源文件和软链接文件索引节点号不同,是不同的文件,软链接相当于源文件的快捷方式,

含源文件的位置指向;

7)很多硬件设备的快照功能是利用了硬链接;

【目录的小结】

1、对于目录不能创建硬链接,但可以创建软链接;

2、对于目录的软链接是生产场景运维中常用的技巧;

3、目录的硬链接不能跨越文件系统(从硬链接原理可以理解);

4、每个目录下面都有一个硬链接“.”和对应上级目录的硬链接“..”;

5、在父目录里创建一个子目录,父目录的链接数量会增加1

?:链接数目为什么是145

(每个子目录里都有..指向父目录),但是父目录里创建文件,父目录的链接数量都不会增加;

面试题:描述Linux下软链接与硬链接的区别?

软硬链接的概念+创建+区别(文件与目录)/画图解决问题;

1.默认情况下,ln 命令创建的硬链接,ln -s创建的是软链接;

2.硬链接与源文件的索引节点号是相同的,而软链接文件的inode节点号与源文件不同;

3.ln命令不能对目录创建硬链接,但是ln -s可以对目录创建软链接;

4.删除软链接文件,对源文件及硬链接无任何影响;

5.删除硬链接文件对源文件及软链接文件都无任何影响;

6.删除源文件,对硬链接文件没有影响,但是会导致

软链接文件失效白字红底闪烁。

7.同时删除源文件与其硬链接文件,整个文件才会真正的删除;

8.很多硬件设备的快照功能是有硬连接创建的;

9.软链接可以跨文件系统,硬链接不可以跨文件系统;

Linux下删文件的原理

上图为i_link为2,i_count为1  ,其中文件删除的条件为i_link并且i_count都为0;

Linux的文件删除受i_link与i_count共同控制。

i_link (硬链接数量)为0,文件就被删除。

i_count(进程引用计数)为0,文件就被删除。

i_link=0并且i_count=0。

第五列:用户和组

用户:

1.Linux中用户的角色是通过UID(user identify)用户ID和GID(group identify)

组ID识别的,用户的UID就相当于我们的身份证一样,用户名就相当于我们的名字;

2.root用户0的UID和GID都为0,可以登录到系统,可以操作系统中任何文件和命令,

拥有最高的管理权限;查看cat /etc/passwd,为超级用户;

3.普通用户500-65535:权限较小,可以进入和浏览相关文件和目录,但无法修改和删除;

su - root、sudo

4.虚拟用户1-499:安装系统后会默认存在,且不能登录系统;

5.添加用户:useradd 用户名;

用户组:

一、用户和组的关系

一对一、一对多、多对一、多对多;

二、用户和组的配置文件

1./etc/passwd 用户配置文件;

nologin 不能登录;

2./etc/shadow 用户影子口令文件;注意权限

3.小结

a、useradd添加用户会更改etc/passwd、etc/shadow、etc/group、etc/gshadow;

b、passwd为用户设置密码会更改/etc/pshadow;

c、查看用户组 id 用户名;

第七、八、九列是时间,默认是修改时间;

modfiy修改 -mtime、一般为修改文件内容;

change改变时间 -ctime、文件的属性改变;

access访问时间 -atime;访问文件内容;

格式化显示时间属性:ls -lhi --time-style=long-iso

查看文件时间属性:stat /文件名

最后一列:文件名

1.不在文件的inode中,而是在上级目录的bloke里;

2.文件名中不要特殊符号;

如有什么错误的地方恳请大家批评指正,谢谢各位!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值