Linux学习笔记1:磁盘、文件与用户管理

在Linux系统中,一切都是以文件的形式存在,例如:系统配置信息、系统运行状态、进程间通信甚至包括硬件设备。所以,我们的学习从Linux文件系统开始。

一、硬盘分区原理与文件系统存储结构

如下图所示,扇区(Sector)是硬盘的最小逻辑单位,每个扇区的大小是512个字节。硬盘的第一个扇区(Sector0)是整个硬盘的主引导扇区,其中包括2个重要的数据结构:MBR和DPT

  • MBR(Master Boot Record)): 系统引导程序
  • DPT(Disk Partition Table) : 磁盘分区表
  • 0x55AA : 校验魔术字,用于检查引导扇区是否被错误的写入数据
    这里写图片描述

DPT一共64个字节,其中每个分区表项占16个字节,所以一块硬盘上最多支持4个主分区。通过创建扩展分区可以在硬盘上获得更多的分区。扩展分区其实也是一种主分区,它们之间的差异只是通过DPT分区表项中的分区类型标志加以区分。在扩展分区中,通过链表的方式可以创建任意多个逻辑分区,最终,允许用户根据需要创建任意数量的硬盘分区。

在16字节的磁盘分区表中,用4个字节的空间描述磁盘分区的大小(单位是扇区),所以,在MBR+DPT模式下,硬盘每个主分区和扩展分区最大支持2T字节,整个硬盘最大8T,如果要支持更大的硬盘或分区,需要考虑其它的分区模式,这里不再讨论。

每个分区都是一个独立的文件系统,格式化分区其实就是创建文件系统的过程,主要在硬盘上创建3种数据结构:
这里写图片描述

  • 数据块:保存文件的数据,一个文件可占用多个数据块
  • inode结点:每个文件都对应一个inode结点,用于保存文件属性
  • 超级块:每个文件系统只有一个超级块,记录inode和数据块的总量与使用情况。

注:目录其实也是一种文件,它有对应的inode结点记录目录属性信息,在它的数据块中记录当前目录下所有文件和子目录的名称,以及这些文件和子目录对应的inode索引。

通过命令:fdisk –l可以查询当前系统的分区信息
这里写图片描述
其中:sda1、sda2、sda3、sda4(或hda1、hda2、hda3、hda4)一定是主分区和扩展分区,逻辑分区只能是从5开始。

Linux系统的文件属性和访问权限,在根目录下通过 ls -al 命令可以查询根目录下所有文件和子目录信息。
这里写图片描述

Linux系统的文件属性如下图所示:
这里写图片描述

  • 文件类型和权限
  • 文件连接数
  • 文件所有者
  • 文件所属的用户组
  • 文件大小
  • 文件修改日期
  • 文件名

其中,最复杂的信息是文件类型、访问权限和文件连接数,如下图所示:
这里写图片描述

Linux系统支持7种文件类型,具体包括:

  • d : 目录文件
  • l :软链接文件(硬链接文件就是普通文件,后面会具体分析)
  • b:块设备文件(例如:硬盘,有缓存,可随机读取任意地址的数据)
  • c:字符设备文件(例如:键盘,无缓存,只能顺序读取设备中的数据)
  • p:有名管道文件
  • s:套接字文件
  • -:普通文件类型(或者说,是不属于以上几种类型的文件)

设备文件、管道文件、套接字文件和设备驱动以及进程间通信相关,后面再说,这里不再分析。
这里需要记住的是:普通文件和目录文件通过类型标识符”-“和”d”进行区分。
另外,还有一概念就是链接文件。Linux系统支持两种链接文件,即软链接和硬链接。
硬链接文件就是在不同的目录下,有不同或相同的文件名,指向同一个文件的inode结点,此时查询到的文件连接数总是大于1,当删除一个目录下的硬链接文件时,其实只是删除了该目录下的文件名,实际的文件的inode结点、数据块以及其它目录下的硬链接文件名都不受影响,这种机制既可以保证文件在多个用户间充分共享、协同工作,也可以防止文件被其它用户恶意删除或误删除。(硬链接存在两个限制:不支持对目录硬链接,同一文件的多个硬链接必须在同一个文件系统即同一个磁盘分区中)
软链接文件其实就是一个普通文件,它有自己的inode,所以软链接文件有自己的属性和被指向的目标文件可能完全不同。另外,软链接文件的数据块中记录的是目标文件的绝对路径,所以软链接文件和目标文件可以属于不同的文件系统,另外,软链接文件还可以指向一个目录,对于一个位置很深,且需要频繁使用的目录,最好的方式就是在当前工作目录下为它创建一个软链接。

二、文件管理相关的命令

用户与用户组管理命令

Linux系统的管理理念是针对不同的用户和用户组差异化授权管理Linux系统的各种资源(即各种文件的读、写和执行权限)。所以,学习Linux系统首先要从学习Linux系统用户管理开始。
Linux系统的管理和使用人员必须以用户为单位,登录并管理相应的系统资源。用户组的概念是为了管理权限近似的一类用户,简化文件授权(例如,针对某个文件,只有属于某个组的用户都能够读写此文件,这样直接针对用户组授权即可)。
Linux系统包括三大类用户:root用户、系统用户、普通用户
root用户:UID为0,权限最高
系统用户:又称虚拟用户、伪用户或假用户,不具有登录Linux系统的能力,但却是系统运行不可缺少的用户
CentOS6 系统用户的UID范围:1~499
CentOS7 系统用户的UID范围:1~999
普通用户:用于登录Linux系统,但权限有限,由管理员创建
CentOS6 普通用户的UID范围:500~65535
CentOS7 普通用户的UID范围:1000~65535

要理解这些概念,我们需要在系统上不断的练习使用相关命令创建、修改用户和组信息。这些信息最终会被记录到三个重要的系统文件:/etc/passwd(用户文件) 、/etc/shadow(密码文件)、/etc/group(组文件)中,这三种文件的查询方式如下:

[root@zinix-fedora home]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
zinix:x:1000:1000:zinix:/home/zinix:/bin/bash
[root@zinix-fedora home]# cat /etc/shadow
root:$6$guP7htt8$yx/FclXDo96.SO.iYYFycPmj7r/rhIBdiFkf2UXrHxHbLfzDYJiFsm3RkHBZfn//:17098:0:99999:7:::
zinix:$6$IP3vnPQ/HT3C6XpX$EZcYgAyX/DrCRbnnufD.JvoFmX1tKya0vLH/HY4lI3VacMGMSpz0::0:99999:7:::
[root@zinix-fedora home]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
zinix:x:1000:

管理用户和用户组的常用命令:

useradd [选项]  用户名  // 用于增加用户,需要另外通过passwd命令指定用户的命名
userdel 用户名         // 删除用户

passwd                 // 直接修改当前用户的密码

passwd username        // 修改指定用户username的密码
参数:--stdin :可以通过来自前一个管道的数据,作为密码输入

usermod                // 修改用户属性
使用举例:
usermod -g root zinix         // 通过参数-g,将zinix的主用户组修改为root组
usermod -a -G coolbaul zinix  // 通过参数-a -G,为zinix用户加入到扩展组coolbaul中

gpasswd -d 用户名  组名         // 从用户组中删除用户

groupadd  组名          // 增加用户组
groupdel  组名          // 删除用户组

groupmod  组名          // 修改组信息
groups    用户名        // 显示指定的用户名所属的用户组

SUID、SGID与SBIT:

SGID即Set UID的缩写,它出现在文件所属用户权限的执行位上面,例如Linux系统提供的passwd命令(用于修改指定用户的密码),查询此命令文件的属性如下,此文件属于root用户,对应的可执行标志位是s,这个s标志位也被称为SUID,它的含义大概是:当一个普通用户(非root用户)在执行passwd命令时,执行过程中可以具备passwd用户(即root用户)的权限。这个标志对于一些脚本开发者特别有用,所以SUID一般都是针对可执行文件进行设置。

[root@zinix-fedora home]# ls -al /bin/passwd
-rwsr-xr-x. 1 root root 27872 25 2016 /bin/passwd

SGID即Set GID的缩写,它出现在文件所属组权限的执行位上面,它对普通二进制文件和目录都有效。当它作用于普通文件时,和SUID类似,在执行该文件时,用户将获得该文件所属组的权限。当SGID作用主要针对于目录。当普通用户在某个目录下建立文件时,如果该目录用SGID修饰,则该用户在这个目录下建立的文件都是属于这个目录所属的组。

SBIT即Sticky Bit,它出现在其他用户权限的执行位上,它只能用来修饰一个目录。当某一个目录拥有SBIT权限时,则任何一个能够在这个目录下建立文件的用户,该用户在这个目录下所建立的文件,只有该用户自己和root可以删除,其他用户均不可以。

如何设置上面所说的三种权限:
1、先了解通过chmod命令修改文件权限:

chown  mode  [文件名]      // 指定文件的访问权限; 777:表示全部用户都有读、写、可执行权限,其它可类推
chown  [-R]  mode  [目录名] //  指定目录的访问权限,参数-R表示子目录递归相同的处理

2、在普通文件权限前面再加上这些特殊权限值

// 4表示SUID  
// 2表示SGID  
// 1表示SBIT 
chmod 4777 test // 使test文件具有SUID权限,

3、设置文件的特殊属性
chattr命令用于设置文件的特殊属性,具体参数如下:

参数功能
i将无法对文件进行修改,若对目录设置后则仅能修改子文件而不能新建或删除。
a仅允许补充(追加)内容.无法覆盖/删除(Append Only)。
S文件内容变更后立即同步到硬盘(sync)。
s彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域)。
A不再修改这个文件的最后访问时间(atime)。
b不再修改文件或目录的存取时间。
D检查压缩文件中的错误。
d当使用dump命令备份时忽略本文件/目录。
c默认将文件或目录进行压缩。
u当删除此文件后依然保留其在硬盘中的数据,方便日后恢复。
t让文件系统支持尾部合并(tail-merging)。
X可以直接访问压缩文件的内容。
[root@zinix-fedora home]# chattr +a practice.txt // 设置practice.txt文件只能追加不能删除

[root@linuxprobe ~]# lsattr practice.txt // 查询practice.txt文件的特殊属性
-----a-------e-- practice.txt

设置文件的访问控制列表(ACL)

[root@zinix-fedora adkada]# ls -al
drwxrwx---  2 root   root   4096 31 09:19 tmp // 在root用户下创建一个其他用户不能进入的tmp目录

[root@zinix-fedora adkada]# su adkada   // 从root用户切换到普通用户adkada

[adkada@zinix-fedora ~]$ cd tmp         // 尝试进入tmp目录返回失败信息
bash: cd: tmp: Permission denied

[root@zinix-fedora adkada]# setfacl -Rm u:adkada:rwx tmp  // 回到root用户设置tmp目录的acl
[root@zinix-fedora adkada]# ls -al
drwxrwx---+ 2 root   root   4096 31 09:19 tmp        // 查看tmp属性,发现多了一个+号

[root@zinix-fedora adkada]# su adkada   // 重新登录adkada用户

[adkada@zinix-fedora ~]$ cd tmp         // 尝试进入tmp目录执行成功,表示tmp目录的acl设置生效
[adkada@zinix-fedora tmp]$ 

查询文件的ACL设置

[adkada@zinix-fedora ~]$ getfacl tmp
# file: tmp
# owner: root
# group: root
user::rwx
user:adkada:rwx
group::rwx
mask::rwx
other::---

三、文件系统相关的命令

fstab文件是Linux系统中一个重要的磁盘分区配置文件,用于实现文件系统的自动挂载。具体格式如下:
“设备文件 挂载目录 格式类型 权限选项 自检 优先级”

[root@zinix-fedora /]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Thu Sep 29 07:08:46 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/fedora-root                     /     ext4    defaults        1 1
UUID=ffc705ee-75a1-424d-8048-13f72a8dea8d   /boot ext4    defaults        1 2
/dev/mapper/fedora-swap                     swap  swap    defaults        0 0

另外,用户还可以根据需要手动挂载或卸载指定的文件系统:

mount  设备文件 挂载目录  // 用mount命令将硬件设备与一个目录做关联
umount 设备文件/挂载目录  // 用umount命令解挂接

fdisk:磁盘分区工具有

fdisk -l

df:显示文件系统磁盘空间使用情况

df -hi

du:统计文件和目录占用的磁盘空间

du 文件名/目录名

ls: 查看到当前工作目录下包含的文件和子目录信息

ls -al

cp:将一个或多个源文件或者目录复制到指定的目的文件或目录

cp -f 源文件名 目标文件名  // 将指定的源文件复制为指定目录的指定文件名
cp –f 源文件名 目标目录   // 将指定的文件复制到指定目录
cp -r 源目录 目标目录    // 将源目录复制到指定目录,-r参数表示源目录下的子目录

mv:移动文件、目录或改名

mv -f 源文件 目标文件    // 将源文件拷贝的目标文件指定的位置并改名(-f表示强制执行)
mv -f 源文件 目标目录    // 将源文件拷贝的目标目录的下方(-f表示强制执行)
mv -f 源目录 目标目录    // 将源目录剪切到目标目录下方(-f表示强制执行)

rm:删除文件

rm –rf [文件名/目录名]    // 删除目录和文件(-r表示连子目录一起删除,-f表示强制删除)

mkdir:创建目录

mkdir [目录名]        // 创建指定的目录
mkdir –p mytest/{bin/, lib/, doc/{info, product}}  // 一次性创建完整目录树,-p表示

rmdir:只能删除空目录,基本无用

ln :创建文件链接

Linux系统支持软、硬两种链接文件。
在Linux系统中每个文件都有唯一一个inode结点(用于记录文件的属性,并记录文件的起始数据块)和记录文件实际数据的数据块(block)。我们看到的每个文件的文件名,是记录在目录文件中(每个目录也是一个文件,也有自己的inode结点和数据块,在目录文件的数据块中记录了目录下的文件名以及每个文件对应的inode结点)。
如果我们创一个硬链接,其实就是在目录文件的数据块中新增一个文件名,这个文件名关联的inode结点就是被连接文件的inode结点。这种连接也称为硬链接。因为不同文件系统中的inode索引可能重复,索引硬链接文件不能跨文件系统。

如下所示,example.sh文件对应的inode索引为665849,硬链接数量为1。

[root@zinix-fedora adkada]# ls -il
665849 -rwxr--r--  1 root root   66 2月  28 10:34 example.sh

为example.sh文件创建一个硬链接文件test以后,查看新的test文件的inode索引也是665849,同时这两个文件的链接数都变成了2,任意删除其中一个文件,另一个文件仍然可以运行,如果两个文件都删除了,则对应的inode结点665849才会被释放。

[root@zinix-fedora adkada]# ln example.sh test
[root@zinix-fedora adkada]# ls -il
665849 -rwxr--r--  2 root root   66 2月  28 10:34 example.sh
665849 -rwxr--r--  2 root root   66 2月  28 10:34 test

为example.sh文件创建一个软链接文件test2以后,查看新的test2文件,可以看到test2文件有自己的inode结点(665760),test2文件的数据块中记录了eample.sh文件的绝对路径,这样test2文件和eample.sh文件哪怕不在同一个文件系统,也可以建立连接关系。但是如果example.sh被删除了,test2 也就无法执行了。

[root@zinix-fedora adkada]# ln -s example.sh test2
[root@zinix-fedora adkada]# ls -il
665849 -rwxr--r--  2 root root   66 2月  28 10:34 example.sh
665849 -rwxr--r--  2 root root   66 2月  28 10:34 test
665760 lrwxrwxrwx  1 root root   10 3月   1 23:45 test2 -> example.sh

chown:修改文件所有者

chown [用户名] [文件名]          // 指定文件的所属用户
chown [-R] [用户名] [目录名]        // 指定目录的所属用户,参数-R表示子目录递归相同的处理
chown [-R] [用户名称 : 组名称] [文件或目录] // 同时指定文件或目录的所属用户和所属用户组,参数-R作用同上

chmod:修改文件的权限

chown mode [文件名]    // 指定文件的访问权限 777:表示全部用户都有读、写、可执行权限,其它可类推
chown [-R] mode [目录名] // 指定目录的访问权限,参数-R表示子目录递归相同的处理

查询文件位置的命令

which [文件名]      // 在PATH路径中,查看可执行文件的位置,主要用于查询系统命令
whereis [文件名]     // 查看二进制文件(-b)、man文件(-m)、源代码(-s)的位置
locate [文件名]      // 配合数据库查看文件位置,搜数据库
find [pathname] [文件名] // 在指定的目录中搜索文件,搜硬盘。(这个命令最常用)

文件打包、压缩与解压缩命令

tar -cvf xxx.tar 源文件或目录名  // 将指定的源文件或目录打包为一个文件xxx.tar,不压缩

tar -jcvf xxx.tar.bz2 源文件或目录名// 将指定的源文件或目录打包并压缩为文件xxx.tar.bz2,参数-j对应 bzip2 压缩

tar zxvf xxx.tar.gz   // 解压指定的.gz文件,生成 一个xxx文件夹,并保存解压后的文件,参数-z对应 gz文件

tar jxvf xxx.tar.bz2   // 解压指定的.bz2文件,生成 一个xxx文件夹,并保存解压后的文件,参数-j对应bz2文件

常用产生说明:
-c:建立新的备份文件(打包压缩)
-x:从备份文件中还原文件(解压缩)
-v:显示操作过程
-f:指定备份文件名,参数-f是必须的,这个参数是最后一个参数,后面只能接档案名
-z:通过gzip指令处理备份文件
-j:支持bzip2解压文件

软RAID管理

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值