您的位置:首页 > 运维架构 > Linux

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

2016-10-24 08:37 746 查看
在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 2月   5 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 3月   1 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 3月   1 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结点(用于记录文
c50a
件的属性,并记录文件的起始数据块)和记录文件实际数据的数据块(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管理
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 文件系统 硬盘