一、linux文件系统
文件的属性及权限,是因为linux是一个多用户多任务的系统,文件权限对于系统安全很重要。
/etc/passrd 所有用户信息的文件
/etc/shadow 用户的密码文件
/etc/group 所用的用户组信息文件
1、改变文件属性及权限
(1)chgrp改变文件的群组,要被改变的组名必须在/etc/group中才可以,加-R(--recursive),即对目录下的所有文件进行递归的变更群组
(2)chown改变文件的所有者,也可以顺便修改文件的所属群组。命令格式:chown -R user:group /PATH/file
PS:什么时候要改变文件的属主和属组呢,比如在cp一个文件时,是给另外一个用户看,因为cp是会把权限也带上一起拷贝,所以此时需要修改属主和属组。
(3)chmod改变文件的权限,suid、sgid、sbit的特性,可以使用数字或者符号来进行改变权限,也可以-R来进行目录的递归加权限
文件的权限字符为:『-rwxrwxrwx』,分别对应为user group others,各权限的分数对照表如下,r 4 w 2 x1,每种身份各自的权限分数是需要累加的
示例:[-rwxrwx---] 分数则是
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= --- = 0+0+0 = 0
所以等一下设定权限的变更时,该档案的权限数字就是 770 ,变更权限的命令即为 chmod。常见的一个例子,当vim编辑一个shell时,其权限通常为 -rw-rw-r-- 也就是 664, 如果要将该档案变成可执行文件,并且不要让其他人修改此文件的话, 那就需要-rwxr-xr-x 这样的权限,此时就得要下达:『 chmod 755 test.sh 』的命令!另外,如果有些文件你不希望被其他人看到,那应该将档案的权限设定为例如:『-rwxr-----』,那就下达『 chmod 740 filename 』吧
2、文件权限的特殊说明
(1)r:对于文件而言,即是可以看到这个文件内的内容;对于目录而言,即是可以ll看目录内的文件都有哪些,但是因为权限不足,因此ll时会有一堆问号,如
?--------- ? ? ? ? ? testing
(2)w:文件则是修改文件内容,目录则是可以在该目录下建立、删除新文件等;
(3)x:文件则是该文件具有执行权限(类似于win下的.exe后缀),目录则是可以cd到该目录下,即切换到该目录下成为工作目录;
一般的,对于root身份刚建立的文件,默认的是644权限,而建立完之后若变成执行文件且不让用户修改该文件,则需要给予给予755权限,即不给予属组和others有修改权限;
一般的,对于root身份建立的文件夹,默认的是755权限;要开放目录给任何人浏觅时,应该至少也要给予 r 及 x 的权限,但 w 权限丌可随便给;
3、linux下的文件类型
有正规文件(-)、目录(d)、链接文件(l,即快捷方式)、设备与装置文件(b和c)、数据接口文件(s)
4、文件扩展名
linux下虽然是由x来表示该文件是否为一可执行文件,但是还是需要由扩展名来识别一些文件的类型
*.sh:脚本文件
*.Z、*.tar、 *tar.gz、 *.zip、 *.tgz:这是因为压缩软件为gunzip、tar等
*.html 、*.php:网页文件
5、对于文件目录的说明
FHS 所定义的三层主目录为:/, /var, /usr 三层而已;
有五个目录必须与根目录放在相同的 partition,分别为/etc, /bin, /lib, /dev, /sbin 五个,因为这都是系统运行时(哪怕是单用户模式)时需要用到的几个分区;
二、linux文件及目录管理
.代表的是当前目录(注意是当前,不是上一级),和./一个意思; ..代表的是上一级目录,和../是一个意思;~代表的为家目录/home,~jerry代表的是/home/jerry
1、目录操作的相关命令
(1)mkdir -p /path1/path2/path3
-p会自动帮你将 /home, /home/bird, /home/bird/testing 依序的建立起目录! 如果该目录已经存在,系统也不会显示错误信息
(2)rmdir -p /path1/path2/path3 这里注意,rmdir能删除的是空目录,有内容则无法删除,报错
(3)rm -r /test 这是将目录下所有的东西都删除掉
(4)ls -a 列示出所有文件,隐藏文件也一并列出
(5)cp 在拷贝时注意是否为目录,是否为完全拷贝一样的信息
-a完全一致的复制,包括属主及权限
-f强制
-p保留属性信息(备份时常用)
-r递归复制,用于目录的复制行为
-u若 destination 比 source 旧才更新 destination(update),常用于备份工作中
(6)rm 删除文件和目录
-f强制,忽略不存在的文件
-r递归删除,用于目录的删除行为
PS:文件的几个时间,mtime修改时间(ll时列示出的即是mtime)、ctime状态改变时间、atime访问时间
(7)chattr 设定文件的隐藏属性
-a 对象文件只需要可以内容,不能做其他操作
-i 对象文件不允许任何操作
(8)file 观察文件类型是属于 ASCII 或者是 data 档案,或者是 binary,用在对文件格式的判断时
file /var/lib/mlocate/mlocate.db db类型的文件
(9)which 按照PATH有的路径去寻找执行文件的文件名字,对于bash内建的则无法找到,可以使用type
示例:which ifconfig
PS:不同用户的/PATH文件的内容是不一样的,差异较大的地方在 /sbin和/usr/sbin
(10)find 找寻文件
示例:find / -name test -user test 找出属于test用户的名字为test的文件
三、linux磁盘及文件管理系统
1、磁盘的基础知识
(1)扇区
扇区是磁盘最小的物理存储单元,为512bytes;第一个扇区最重要,里面有:(1)主要开机区(Master boot record, MBR)及分割表(partition table), 其中 MBR 占有 446 bytes,而 partition table 则占有 64 bytes。
扇区组成一个圆即为磁柱,磁柱是分区的最小单位。
(2)磁盘类型
/dev/sd[a-p][1-15]:为 SCSI, SATA, USB, Flash 等接口的磁盘文件名,其中sda
dev/hd[a-d][1-63]:为 IDE 接口的磁盘文件名
(3)磁盘分区
磁盘分区即是告诉操作系统『我这颗磁盘在此分割槽可以存取的区域是由 A 磁柱到 B 磁柱之间的区块』, 如此一来操作系统就能够知道他可以在所指定的区块内进行文件资料的读/写/查询等动作。 也就是说,磁盘分区意即指定分割槽的开始与结束磁柱。
而指定分隔槽磁柱的磁柱范围信息即是记录在第一个扇区的分割表中,但由于只有64bytes,因此只能记录4笔分隔槽的记录,这4笔分隔槽称之为主要(primary)(最多有三个)和延伸(extended)分隔槽(只能有一个),其中延伸分隔槽还可以再分割出逻辑(logical)分隔槽,而能被格式化的只有主要分割和逻辑分割。
在 Linux 系统中,IDE 硬盘最多有 59 个逻辑分割(5 号到 63号), SATA 硬盘则有 11 个逻辑分割(5 号到 15 号)。
磁盘分区完毕需要进行格式化,以成为操作系统能够利用的文件系统格式。
(4)挂载点的意义
每个 filesystem 都有独立的 inode / block / superblock 等信息,这个文件系统要能够链接到目录树才能被我们使用。将文件系统与目录树结合的动作称之为挂载,重点是:挂载点一定是目彔,该目录为进入该分区文件系统的入口。 因此并不是你有任何文件系统都能使用,必项要『挂载』到目录树的某个目录后,才能够使用该文件系统。
df -h查看磁盘使用情况
du -sh查看该目录下各文件占用的大小情况
ln [-sf] 来源文件 目标文件 建立软连接
-s :如果丌加仸何参数就迚行连结,那就是 hard link,至亍 -s 就是 symbolic link
-f :如果 目标文件 存在时,就主劢癿将目标文件直接移除后再建立!
(5)磁盘的分割、格式化及挂载
在系统中若想新增一块磁盘,则主要步骤为:对磁盘进行分区,格式化分区以建立系统可用的文件系统,建立挂载点并将磁盘挂载上去。
a、一般的,用df -h 来查出来可用的磁盘情况,然后再fdisk /dev/sda来进行查看,输入p来查看分割表的信息;
b、添加好分区之后,使用mkfs /dev/sda1来讲分区一进行格式化;
c、一个目录理论上只能挂载一个文件系统,且该目录理论上应为空目录,使用命令 mount /dev/sda1 /home 即将分区sda1挂载到家目录上去,解除挂载 umount /dev/sda1 将sda1分区卸载
但是这都是手动挂载,在开机后就没有了,因此可以设定开机挂载,直接到/etc/fstab里面去修改即可,一定要用mount -a(含义为:-a 依照配置文件 /etc/fstab 的数据将所有未挂载的磁盘都挂载上来)测试一下是否挂载成功,同时使用df命令查看一下当前的磁盘挂载情况。
四、阿里云数据盘挂载记录
在本示例中,我们用一个新的 20 GB 数据盘(设备名为 /dev/xvdb)创建一个单分区数据盘并挂载一个 ext3 文件系统。使用的实例是 I/O 优化实例,操作系统为 CentOS 6.8。
远程连接实例
运行 fdisk -l
命令查看实例是否有数据盘。如果执行命令后,没有发现 /dev/vdb,表示您的实例没有数据盘,无需格式化数据盘,请忽略本文后续内容。
如果您的数据盘显示的是 dev/xvd?,表示您使用的是非 I/O 优化实例。
其中 ? 是 a−z 的任一个字母。
创建一个单分区数据盘,依次执行以下命令:
运行 fdisk /dev/vdb
:对数据盘进行分区。
输入 n
并按回车键:创建一个新分区。
输入 p
并按回车键:选择主分区。因为创建的是一个单分区数据盘,所以只需要创建主分区。
说明:如果要创建 4 个以上的分区,您应该创建至少一个扩展分区,即选择 e
。
输入分区编号并按回车键。因为这里仅创建一个分区,可以输入 1。
输入第一个可用的扇区编号:按回车键采用默认值 1。
输入最后一个扇区编号:因为这里仅创建一个分区,所以按回车键采用默认值。
输入 wq
并按回车键,开始分区。
[root@iXXXXXXX ~]# fdisk /dev/vdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x5f46a8a2.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-41610, default 1): 1
Last cylinder, +cylinders or +size{K,M,G} (1-41610, default 41610):
Using default value 41610
Command (m for help): wq
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
查看新的分区:运行命令 fdisk -l
。如果出现以下信息,说明已经成功创建了新分区 /dev/vdb1。
[root@iXXXXXXX ~]# fdisk -l
Disk /dev/vda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00053156
Device Boot Start End Blocks Id System
/dev/vda1 * 1 5222 41942016 83 Linux
Disk /dev/vdb: 21.5 GB, 21474836480 bytes
16 heads, 63 sectors/track, 41610 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x5f46a8a2
Device Boot Start End Blocks Id System
/dev/vdb1 1 41610 20971408+ 83 Linux
在新分区上创建一个文件系统:运行命令 mkfs.ext3 /dev/vdb1
。
本示例要创建一个 ext3 文件系统。您也可以根据自己的需要,选择创建其他文件系统,例如,如果需要在 Linux、Windows 和 Mac 系统之间共享文件,您可以使用 mkfs.vfat
创建 VFAT 文件系统。
创建文件系统所需时间取决于数据盘大小。
[root@iXXXXXXX ~]# mkfs.ext3 /dev/vdb1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242852 blocks
262142 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 37 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
(建议)备份 etc/fstab:运行命令 cp /etc/fstab /etc/fstab.bak
。
向 /etc/fstab 写入新分区信息:运行命令 echo /dev/vdb1 /mnt ext3 defaults 0 0 >> /etc/fstab
。
注意:Ubuntu 12.04 不支持 barrier,所以对该系统正确的命令是:echo '/dev/vdb1 /mnt ext3 barrier=0 0 0' >> /etc/fstab
。
如果需要把数据盘单独挂载到某个文件夹,比如单独用来存放网页,请将以上命令 /mnt 替换成所需的挂载点路径。
查看 /etc/fstab 中的新分区信息:运行命令 cat /etc/fstab
。
[root@iXXXXXXX ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Thu Feb 23 07:28:22 2017
#
# 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
#
UUID=3d083579-f5d9-4df5-9347-8d27925805d4 / ext4 defaults 1 1
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/vdb1 /mnt ext3 defaults 0 0
挂载文件系统:运行命令 mount /dev/vdb1 /mnt
。
查看目前磁盘空间和使用情况:运行命令 df -h
。如果出现新建文件系统的信息,说明挂载成功,可以使用新的文件系统了。
挂载操作完成后,不需要重启实例即可开始使用新的文件系统。
[root@iXXXXXXX ~]# mount /dev/vdb1 /mnt
[root@iXXXXXXX ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 6.6G 31G 18% /
tmpfs 499M 0 499M 0% /dev/shm
/dev/vdb1 20G 173M 19G 1% /mnt