Linux基础篇

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux基础篇相关的知识,希望对你有一定的参考价值。

Linux是一种类Unix的开源操作系统,常用的常见的比较流行的linux系统主要有以下几种:
1、Redhat
2、CentOS
3、Debian
4、Feodra
5、Mandriva
6、Ubuntu
7、Mint
其中值得一提的是,Redhat是现在企业用的比较多的,可以说是开源linux发行版里面的领导者。也有比较完善的认证机制,学习资料也比较多。对外提供付费支持服务,其RPM管理工具已经被很多操作系统所采用。CentOS已经被redhat所收购。而CentOS是比较流行的个人用户比较多的社区版操作系统。建议初学者使用这两种中的某一种,由于linux核心基本没有差异,所以使用起来差不多一样,但是这两种系统的学习资源会比较多,而且大部分的教材也是基于这两种为案例来讲解的。
Debian在高级用户里使用量比较多,但是现在已经不再更新了好像,他有一个类似红帽子的RPM的管理工具叫DPT也是使用很广泛的一个管理软件。
而漂亮一点的图形界面的操作系统就是Ubuntu了,他是基于Debian的二次发行版本,目前应该是使用用户数最多的linux操作系统,一般的笔记本电脑预装的linux操作系统,就是Ubuntu。另外一个比Ubuntu做的还漂亮的操作系统是Mint。
linux的基本原则:
1、由目的单一的一堆小程序所组成,通过组合多个小程序可以完成许多很复杂的任务。
2、一切皆文件,从开始到现在,一直是linux的基本理念
3、尽量避免捕获用户接口
4、配置文件保存为纯文本格式
linux命令:
linux命令都是在shell上运行的,linux默认的shell是bash。
命令格式为:
命令 [选项] 参数
选项和参数某些时候也可以省略,
选项 为 修改命令提示方式,可以不使用,也可以同时使用多个,
选项有长选项和短选项,短选项为字母,可以组合使用,短选项为单词,不能组合使用。
参数 为 命令的作用对象。
linux的终端我们称为虚拟终端,Terminal。其实就是工作的区域,写命令行的地方。
linux有三个默认的用户,root,students,visitor。
切换用户使用的命令为SU,意为swich user。# su -l root 为完全切换。

问题一:文件名是不是文件的数据?

我们可以把一个磁盘分成一个或多个分区。每个分区可以包含一个文件系统。
i节点是固定长度的记录项,它包含了有关文件的大部分信息。可是就是不包含文件名!

inode包含文件的元信息,具体来说有以下内容(基本上是文件属性,后两个比较重要,link and block,但是没有文件名):
   size 文件字节数
  
owner 文件拥有者的User ID
   group 文件的Group ID
  
promiss 文件的读、写、执行权限
   time 文件的时间戳,共有三个:ctime means change time指inode上一次权限属性等的变动的时间,mtime means modify time指文件内容上一次变动的时间,atime means access time指文件上一次打开的时间。
  
link No链接数,即有多少文件名指向这个inode
  * 文件数据block的位置

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

如果仔细得观察硬盘中一个柱面组的i节点和数据块部分,可以看到下图的情况。

  1. 在图中有两个目录项指向同一个i节点。每个i节点中都有一个链接计数,其值是指向该i节点的目录项数。只有当链接计数减少至0时。才可以删除该文件(也就是说可以释放该文件所占用的硬盘空间了)。这就是为什么“解除对一个文件的链接”操作并不总是意味着“释放该文件占用的磁盘块”的原因。在stat结构中,链接计数包含在st_nlink成员中,其基本系统数据类型是nlink_t。这种链接类型称为硬链接。
  2. 另外一种链接类型称为符号类型,对于这种链接,该文件的实际内容(在数据块中)包含了该符号链接所指向的文件的名字。在下例中:

lrwxrwxrwx 1 root 7 Sep 1 12:33 lib -> usr/lib
1
该目录项中的文件名是3字符的字符串lib,而在该文件中包含了7个数据字节usr/lib。该i节点的文件类型是S_IFLNK,于是系统知道这是个符号链接。
引入符号链接的原因是为了避开硬链接的一些限制:
(1)硬链接通常要求链接和文件位于同一文件系统中。
(2)只有root用户才能创建目录的硬链接

  1. i节点包含了大多数与文件有关的信息:文件系统、文件访问权限位、文件长度等等信息。stat结构中的大多数信息都取自i节点。只有两项数据存放在目录项中:文件名和i节点编号。
  2. 每个文件系统各自对他们的i节点进行编号,因此目录项中的i节点编号数指向同一文件系统中的相应i节点,不能使一个目录项指向另一个文件系统的i节点。这就是为什么ln命令不能跨文件系统的原因。

技术图片

如果仔细得观察硬盘中一个柱面组的i节点和数据块部分,可以看到上图的情况。

  1. 在图中有两个目录项指向同一个i节点。每个i节点中都有一个链接计数,其值是指向该i节点的目录项数。只有当链接计数减少至0时。才可以删除该文件(也就是说可以释放该文件所占用的硬盘空间了)。这就是为什么“解除对一个文件的链接”操作并不总是意味着“释放该文件占用的磁盘块”的原因。在stat结构中,链接计数包含在st_nlink成员中,其基本系统数据类型是nlink_t。这种链接类型称为硬链接。
  2. 另外一种链接类型称为符号类型,对于这种链接,该文件的实际内容(在数据块中)包含了该符号链接所指向的文件的名字。在下例中:

lrwxrwxrwx 1 root 7 Sep 1 12:33 lib -> usr/lib
1
该目录项中的文件名是3字符的字符串lib,而在该文件中包含了7个数据字节usr/lib。该i节点的文件类型是S_IFLNK,于是系统知道这是个符号链接。
引入符号链接的原因是为了避开硬链接的一些限制:
(1)硬链接通常要求链接和文件位于同一文件系统中。
(2)只有root用户才能创建目录的硬链接

  1. i节点包含了大多数与文件有关的信息:文件系统、文件访问权限位、文件长度等等信息。stat结构中的大多数信息都取自i节点。只有两项数据存放在目录项中:文件名和i节点编号。
  2. 每个文件系统各自对他们的i节点进行编号,因此目录项中的i节点编号数指向同一文件系统中的相应i节点,不能使一个目录项指向另一个文件系统的i节点。这就是为什么ln命令不能跨文件系统的原因。

另一个问题:改变文件名会不会改变MD5

答:计算MD5只针对数据区的文件内容,而与文件名无关。所以改变文件名不会影响到MD5数值

一、Linux文件系统

  1、创建文件系统

  Linux中当磁盘格式化创建文件系统时,会创建一定数量的节点索引Inode以及一定数量的块block,其中inode具有存储文件属性以及指向文件实体block的指针的功能,而block则具有存放文件内容的功能,CentOS6.X系统中非启动分区的默认Inode大小为256字节,启动分区的inode默认大小为128字节。Linux读取文件的过程是先通过文件名找到对应的inode,再通过inode访问其指向的block,最后从block中读取文件内容输出到屏幕上。

  

  2、删除文件的原理

  Linux删除文件的依据是检查文件的i_link和i_count是否都为0,其中i_count指的是文件的硬链接数,而i_link指的是调用文件的进程数,当源文件和所有硬链接被删除且没有进程调用该文件时,该文件的磁盘空间将会在存储新数据时被占用或在磁盘fsck检查时被系统回收。

  二、文件属性

  Linux系统中我们使用ls -lhi命令可以查看到目录下所有文件以及文件对应的属性,每个文件共有十列数据,除了最后一列的文件名外都是文件的属性,因此文件名不存储在inode中而是存储在目录的block中。所有十列数据的具体含义如下:

  第一列:Inode编号    

    1、inode称为索引节点,它的作用时存放文件的属性信息以及作为文件的索引
    2、inode是磁盘上的一块存储空间,CentOS非启动分区默认256字节,启动分区默认128字节
    3、inode的表现形式是一串数字,不同的文件对应的inode在文件系统中是唯一的
    4、inode节点号相同的文件,互为硬链接文件,可以认为是一个文件的不同入口
    5、ext3/ext4文件系统下,一般情况一个文件被创建后占用一个inode和至少一个block
    6、block的大小一般有1K,2K,4K几种,其中引导分区等为1K,其他普通分区为4K
    7、如果一个文件很大,可能占多个block,如果文件很小,至少占用一个并且剩余空间浪费了
    8、查看inode以及block的大小和总量 dumpe2fs /dev/sda3|grep -iE ‘inode size|block size‘ dumpe2fs /dev/sda3|grep -iE ‘inode count|block count‘
    9、查看inode总量以及使用量 df -i
    10、查看文件inode信息 ls -li stat 文件名
    11、格式化时指定inode以及block的大小 mkfs.ext4 -l 256 -b 2048 /dev/sda5

    12、Inode编号在系统中是唯一的

    与inode关联的block知识总结如下:  

    1、磁盘读取数据是按block为单位读取的
    2、一个文件可能占用多个block,每读取一个block就会消耗一次磁盘I/O
    3、如果要提升磁盘I/O性能,那么就要尽可能一次性读取数据尽量多
    4、一个block只能存放一个文件的内容,无论文件有多小。
    5、block并非越大越好,block太大对于小文件存放就会浪费磁盘空间
    6、大文件(大于16K)一般设置block大一点,小文件(小于1K)一般设置block小一点
    7、如果文件都是小文件而block太大就会浪费磁盘空间
    8、如果文件都是大文件而block太小就会浪费磁盘I/O、
    9、文件较大时,block设置大一些会提升磁盘访问效率
    10、ext3/ext4文件一般设置为4K
    11、block大小在格式化时设置

  第二列:文件类型及文件权限

    第一位代表的是文件类型

      Linux系统不像Windows系统一样以扩展名区别文件类型,Linux文件类型在文件创建时就已经确定了,无法修改。

      Linux系统中常用的文件类型有普通文件以“-”表示、目录以“d”表示、符号链接以“l”表示、块设备以"b"表示,除此之外还有字符设备以“c”表示、套接字文件以“s”表示和管道文件以“c”表示

      Linux系统中普通文件大致分为文本文件、二进制文件比如系统命令文件、数据格式文件,数据格式文件只能用命令读取比如/var/log/wtmp文件只能用last命令读取

    第二到四位代表的是文件属主的权限

    第五到七位代表的是文件属组的权限

    第八到十位代表的是其他用户的权限

      文件权限的设置通过chmod命令

      文件的默认权限通过umask命令,目录的默认权限是777-umask的值,文件的默认权限是666-umask的值

      文件权限分为普通权限和特殊权限,普通权限有r读取权限数字表示为4、w写入权限数字表示为2、x执行权限数字表示为1,特殊权限有suid、sgid、t

      数字方式设置权限,将三个位置各自的权限转为数字然后相加得出一组三位数字或四位数字,如rw-r--r--的数字表示就是42-4--4--,所以设置权限就是chmod 644

      字符方式设置权限,字符方式设置权限时用u代表文件属主的权限,g代表文件属组的权限,o代表其他用户的权限,+代表增加权限,-代表取消权限,=代表修改权限,于是rw-r--r--的权限设置就是chmod u=rw,g=r,o=r

      目录的普通权限r代表可以浏览目录的内容,没有x权限时会提示不能访问目录下的文件和子目录但仍可以看到文件名和目录名,w代表增加,删除,修改目录下文件名,需要有x权限才能实际操作,x代表可以进入目录

      suid显示在文件属主的x权限位上,当没有x权限时显示为S,否则显示为s,该权限只对命令和二进制程序文件有效,让非root用户可以以root身份运行只有root才能使用的命令

      被设置suid的命令在运行时,用户具有root对该命令的所有权限

      sgid与suid不同,不仅可以对文件设置,也可以对目录设置,对目录设置时可以让其他用户在该目录下创建的文件和目录具有和该目录相同的组设置

      suid与sgid是一把双刃剑,对系统安全有一定威胁,应该取消不必要的系统默认suid和sgid命令,通过find命令的perm参数可以找出suid和sgid命令

      t权限让其他用户不能删除文件

      特殊权限还有i不可修改权限和a只追加权限,需要通过chattr设置,lsattr查看,i权限让任何人不可以修改文件,a权限让文件只能被动追加不能认为主动追加内容

  第三列:文件硬链接数

    创建链接的方式  ln  -s  源文件名  链接文件名    -s  创建软链接

    硬链接知识点:

      1、具有相同Inode节点号的多个文件互为硬链接文件
      2、删除硬链接文件或源文件任意之一,文件实体并未被删除
      3、只有删除源文件与所有硬链接文件,文件实体才会被删除
      4、当所有硬链接文件及源文件被删除后,在存放新数据时会占用该文件空间或者磁盘fsck检查时空间被系统回收
      5、硬链接文件就是文件的另一个入口
      6、可以通过创建硬链接来防止重要文件被误删
      7、通过命令ln 源文件名 链接文件名 来创建硬链接
      8、硬链接文件可以用rm命令删除
      9、对于没有进程调用的文件,硬链接数为0,文件就会被删除

    

    软链接知识点:

      1、软连接类似Windows的快捷方式(可以用readlink命令查看其指向)
      2、软连接类似一个文本文件,里面存放的时源文件的路径,指向源文件实体
      3、删除源文件,软连接文件依然存在,但是无法访问指向的源文件路径内容了
      4、失效的时候一般是白字红底闪烁提示
      5、软连接文件可以用命令ln -s 源文件名 链接文件名 来创建
      6、软连接和源文件是不同类型的文件,也是不同的文件,inode号不相同
      7、删除软连接文件可以用rm命令

    文件链接结论:

      1、删除软连接文件对源文件和硬链接文件无任何影响
      2、删除硬链接文件对源文件和软连接文件无任何影响
      3、删除源文件对硬链接文件无影响,但是软连接文件会失效
      4、同时删除源文件和硬链接文件会使文件真正被删除
      5、很对硬件设备的快照功能就是利用了硬链接的原理
      6、源文件和硬链接文件具有相同的inode节点号,可以认为是一个文件或一个文件的多个入口
      7、源文件和软连接文件inode节点号不相同,是不同的文件,软连接相当于源文件的快捷方式,含有源文件的位置指向

    目录链接结论:

      1、目录不能创建硬链接但是可以创建软连接
      2、目录的软连接是运维中的常用技巧,可以生成一个固定的访问路径又不影响软件升级
      3、目录的硬链接不能跨越文件系统
      4、每个目录都有一个硬链接"."号,以及对应上级目录的硬链接".."
      5、在父目录里创建子目录,父目录的连接数加一,但是在父目录创建文件,父目录的链接数不会增加

  

  第四列:文件属主

  第五列:文件属组

    useradd命令创建用户,会修改passwd,shadow,group,gshadow四个文件

    groupadd命令创建组

    chown命令修改文件属主,也可以修改属组

    chgrp命令修改文件属组

    Linux角色通过UID和GID区分
    在Linux中UID为0的用户即为超级用户
    Linux用户分为超级用户,普通用户和虚拟用户
    超级用户UID为0,GID也为0
    虚拟用户UID为1~499,GID也为1~499
    普通用户UID为500~65535,GID也为500~65535

    

    /etc/passwd文件即用户账号信息文件,必须了解,文件中每行以冒号分隔共有七列
    第一列为账号名称
    第二列为账号密码
    第三列为账号UID
    第四列为账号GID
    第五列为用户说明
    第六列为用户家目录
    第七列为shell解释器

    /etc/shadow文件即用户密码文件,文件中每行以冒号分隔共有九列
    第一列账号名称
    第二列账号密码
    第三列最近更改密码的时间
    第四列禁止修改密码的天数
    第五列用户必须更改密码的天数
    第六列警告更改密码的期限
    第七列不活动时间
    第八列失效时间
    第九列标志

    /etc/group文件即组信息文件,文件中每行以冒号分隔共四列
    第一列组名
    第二列组密码
    第三列GID
    第四列组成员

    /etc/gshadow文件即组密码文件,文件中每行以冒号分隔共四列
    第一列组名
    第二列组密码
    第三列组管理员账号
    第四列组成员

  第六列:文件大小

  第七、八、九列:文件修改时间

    stat命令查看文件详细属性

    文件访问时间:文件内容被访问就改变

    文件修改时间:文件内容被修改就改变

    文件改变时间:文件属性改变时就改变

  第十列:文件名

  三、相关面试题

  1、软链接和硬链接的区别,答题思路从以下四方面回答:

    1)软硬链接的概念
    2)软硬链接的创建方式
    3)软硬链接对于文件的区别
    4)软硬链接对于目录的区别

  2、一个100M(100000K)的磁盘分区,分别写入1K的文件或写入1M的文件,分别可以写多少个

    假设block为4K的情况下,写入1K的文件分两种情况
    inode足够,那么写入文件数量就是block的数量,浪费3/4的容量
    inode数量小于block数量,那么写入文件数量就是inode的数量,浪费3/4的容量

    写入1M的文件的数量等于总的block数量/(1M/block大小),基本可以写入250个1M的文件

  3、如果向磁盘写入数据提示如下错误:No sapce left on device,通过df -h查看磁盘空间发现没有满,可能是什么原因,发生这种情况的原因是什么

    磁盘空间满了有两种情况,一是inode消耗完了,二是block消耗完了,根据df -h结果可知block没有消耗完,那么可能就是inode消耗完了,产生的原因可能是系统临时邮件目录生成了太多小文件

出处:
    https://blog.csdn.net/qq_22080999/article/details/81570571
    https://www.cnblogs.com/lfpython/p/8361781.html

以上是关于Linux基础篇的主要内容,如果未能解决你的问题,请参考以下文章

Linux基础篇

Linux运维之路 基础篇:Linux基础命令

Linux基础命令篇

Linux基础篇(系统管理)

linux基础篇Linux 基础优化配置

Linux网络配置基础篇