Linux基础

Posted 微网天下

tags:

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

 

一、磁盘管理

1、读取新硬盘:

echo "- - -" > /sys/class/scsi_host/host2/scan

cp -a /dev/zero /app/zero :这样是可以复制设备文件的


2、创建设备文件: ll /dev/sda*

mknod /app/sda1 b 8 1


注意: 磁盘的名称是不稳定的,在实际生产中,在写配置文件时,需要注意,别写硬盘名。

整个硬盘可以不划分分区,但可以整个盘格式化

3、磁盘分类:

机械磁盘HDD :由磁头、盘片等

固态硬盘SSD :用固态电子存储芯片阵列制成

优缺点:SSD在防震、传输速率上、功耗、重量、噪音上有明显优势,SSD传输速率性能是HDD的2倍

HHD在价格容量使用寿命上占有绝对优势,硬盘有价,数据无价,目前SSD还不能完全取代HHD


4、常见磁盘命名

/dev/vd : 云服务器硬盘

/dev/sda: sici硬盘

/dev/hd : IDE 硬盘



5、磁盘划分方式

早期磁盘划分是按柱面划分的

fdisk -l /dev/sda

从centos6之后允许精确到扇区

Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *        1         131     1048576   83  Linux

Partition 1 does not end on cylinder boundary. #分区1不是一扇区边界结束的

/dev/sda2          131        6505    51200000   83  Linux



6、硬盘存储术语

磁头:head 255

柱面:cylinder 1024 =磁道数 track  8M一个柱面

磁道:track 

扇区:sector 物理磁盘划分最小单位512bytes



7、常见寻址方式

CHS

采用24bit位寻址

其中前10位表示cylinder,中间8位表示head,后面6位表示sector。最大寻址空间8GB

LBA(logical block addressing)

LBA是一个整数,通过转换成CHS格式完成磁盘具体寻址

LBA采用48个bit位寻址最大寻址空间128PB

由于CHS寻址方式的寻址空间在大概8GB以内,所以在磁盘容量小于大概8GB时,可以使用CHS寻址方式或是LBA寻址方式;在磁盘容量大于大概8GB时,则只能使用LBA寻址方式


8、blkid :查看块id

/dev/sda1: UUID="362aa411-179c-46d0-867c-40716c76aba8" TYPE="xfs"   

/dev/sda2: UUID="722d1d9b-1cbc-4ecc-bd75-4aeee83b5e30" TYPE="xfs" 

/dev/sda3: UUID="15bb7698-b47f-4611-a3ac-b8bac00afb22" TYPE="xfs" 

/dev/sda5: UUID="cd811110-264f-4e77-a8d1-a6e7cd2db20d" TYPE="swap"


生成UUID : uuidgen


9、lsblk :可查看到swap分区,查看磁盘分区情况

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sda      8:0    0  200G  0 disk 

├─sda1   8:1    0  953M  0 part /boot

├─sda2   8:2    0 46.6G  0 part /

├─sda3   8:3    0 46.6G  0 part /app

├─sda4   8:4    0    1K  0 part 

└─sda5   8:5    0  3.7G  0 part [SWAP]

sr0     11:0    1  7.7G  0 rom  /run/media/root/CentOS 7 x86_64


lsblk -f :可查看文件系统类型

parted /dev/sda print

df -T

blkid


10、划分分区的原因:

优化I/O性能

实现磁盘空间配额限制 #限制每个用户在磁盘空间最大使用数

提高修复速度

隔离系统和程序

安装多个OS

采用不同的文件系统



11、分区策略:

MBR:主引导记录 使用32byte扇区数,最大容量不超过2TB;0磁道0扇区

GPT:全局唯一分区表,支持128个分区,最大容量8Z,使用64位


(1)MBR

512=446+64+2

446:boot loader,第一块有效,其他的没意义,磁盘校验

64:分区表:分区的起始点结束点描述

16:分区从哪儿开始从哪儿结束;这也就是为什么只能划分4个主分区的原因

2:55AA MBR分区的标志位,表示磁盘上有分区


DPT:磁盘分区表


(2)GPT

UUID:128位长度 8-4-4-4-12(16进制)

唯一表示某个磁盘

生成UUID:uuidgen


引导硬件接口UEFI(统一扩展接口)

0扇区:保护分区,Protective MBR


头部尾部都有分区表,自带分区表备份机制


[root@vincent ~]#hexdump -C -n 512 /dev/sda

00000000  eb 48 90 10 8e d0 bc 00  b0 b8 00 00 8e d8 8e c0  |.H..............|

00000010  fb be 00 7c bf 00 06 b9  00 02 f3 a4 ea 21 06 00  |...|.........!..|

00000020  00 be be 07 38 04 75 0b  83 c6 10 81 fe fe 07 75  |....8.u........u|

00000030  f3 eb 16 b4 02 b0 01 bb  00 7c b2 80 8a 74 03 02  |.........|...t..|

00000040  80 00 00 80 78 13 05 00  00 08 fa 90 90 f6 c2 80  |....x...........|

00000050  75 02 b2 80 ea 59 7c 00  00 31 c0 8e d8 8e d0 bc  |u....Y|..1......|

00000060  00 20 fb a0 40 7c 3c ff  74 02 88 c2 52 f6 c2 80  |. ..@|<.t...R...|

00000070  74 54 b4 41 bb aa 55 cd  13 5a 52 72 49 81 fb 55  |tT.A..U..ZRrI..U|

00000080  aa 75 43 a0 41 7c 84 c0  75 05 83 e1 01 74 37 66  |.uC.A|..u....t7f|

00000090  8b 4c 10 be 05 7c c6 44  ff 01 66 8b 1e 44 7c c7  |.L...|.D..f..D|.|

000000a0  04 10 00 c7 44 02 01 00  66 89 5c 08 c7 44 06 00  |....D...f.\..D..|

000000b0  70 66 31 c0 89 44 04 66  89 44 0c b4 42 cd 13 72  |pf1..D.f.D..B..r|

000000c0  05 bb 00 70 eb 7d b4 08  cd 13 73 0a f6 c2 80 0f  |...p.}....s.....|

000000d0  84 f0 00 e9 8d 00 be 05  7c c6 44 ff 00 66 31 c0  |........|.D..f1.|

000000e0  88 f0 40 66 89 44 04 31  d2 88 ca c1 e2 02 88 e8  |..@f.D.1........|

000000f0  88 f4 40 89 44 08 31 c0  88 d0 c0 e8 02 66 89 04  |..@.D.1......f..|

00000100  66 a1 44 7c 66 31 d2 66  f7 34 88 54 0a 66 31 d2  |f.D|f1.f.4.T.f1.|

00000110  66 f7 74 04 88 54 0b 89  44 0c 3b 44 08 7d 3c 8a  |f.t..T..D.;D.}<.|

00000120  54 0d c0 e2 06 8a 4c 0a  fe c1 08 d1 8a 6c 0c 5a  |T.....L......l.Z|

00000130  8a 74 0b bb 00 70 8e c3  31 db b8 01 02 cd 13 72  |.t...p..1......r|

00000140  2a 8c c3 8e 06 48 7c 60  1e b9 00 01 8e db 31 f6  |*....H|`......1.|

00000150  31 ff fc f3 a5 1f 61 ff  26 42 7c be 7f 7d e8 40  |1.....a.&B|..}.@|

00000160  00 eb 0e be 84 7d e8 38  00 eb 06 be 8e 7d e8 30  |.....}.8.....}.0|

00000170  00 be 93 7d e8 2a 00 eb  fe 47 52 55 42 20 00 47  |...}.*...GRUB .G|

00000180  65 6f 6d 00 48 61 72 64  20 44 69 73 6b 00 52 65  |eom.Hard Disk.Re|

00000190  61 64 00 20 45 72 72 6f  72 00 bb 01 00 b4 0e cd  |ad. Error.......|

000001a0  10 ac 3c 00 75 f4 c3 00  00 00 00 00 00 00 00 00  |..<.u...........|

000001b0  00 00 00 00 00 00 00 00  8f a9 00 00 00 00 80 20  |..80开始为扇区. |

000001c0  21 00 83 aa 28 82 00 08  00 00 00 00 20 00 00 aa  |起始(....... ...|

000001d0  29 82 83 fe ff ff 00 08  20 00 00 80 1a 06 00 fe  |)....... .......|

000001e0  ff ff 83 fe ff ff 00 88  3a 06 00 80 1a 06 00 fe  |........:.......|

000001f0  ff ff 05 fe ff ff 00 08  55 0c 00 f8 aa 0c 55 aa  |........U.....U.|

00000200

说明: 000001b0  00 00 00 00 00 00 00 00  8f a9 00 00 00 00 80 20 其中8f到00位磁盘校验位

000001f0  ff ff 05 fe ff ff 00 08  55 0c 00 f8 aa 0c 55 aa 其中55 aa为MBR分区的标志位,表示磁盘上有分区


12、计算机引导方法

Bios+MBR引导计算机,BIOS不支持GPT

BIOS+MBR sda + sdb GPT

UEFI+GPT一道计算机


13、管理磁盘分区

列出块设备:lsblk

partprobe:重新设置内存中的内核分区表版本(centos5,7)

创建分区使用

fdisk :创建MBR分区

gdisk : 创建GPT分区

parted:高级分区操作

parted 命令:parted的操作是实时生效的,

用法:

parted [options]...[设备[命令[参数]...]... ]

parted /dev/sdb mklabel gpt|msdos【MBR】【mklabel创建分区】

parted /dev/sdb print   # 查看磁盘信息

parted /dev/sdb mkpart primary 1 1024 (单位默认是M)

parted /dev/sdb rm 1

parted -l 


gdisk:类fdisk的GPT分区工具

gdisk /dev/sdb

gdisk -l /dev/sdb


fdisk /dev/sdb 管理分区

a:toggle a bootable flag,添加活动分区

p:分区列表

t: change a partition's system id更改分区类型(修改id)

Command (m for help): t

Partition number (1-6, default 6): 1

Hex code (type L to list all codes): L 【列出支持的分区类型】

8e  Linux LVM

82  Linux swap / So


n:创建新分区

g:转换成GPT:很危险,清空原分区表

o:装换回MBR分区,直接保存退出时不会转化,只有分区才会显示成装换后的MBR分区类型

d:删除分区   # 删除扩展分区那么逻辑分区也没有了,删除第一个逻辑分区,其他的分区将会顶替

v:检验分区   # 克隆分区表时,本来20G结果显示了200G大小的柱面数

u:装换单位 fdisk -l -u=cylinders /dev/sdb [centos 7 中默认是以扇区为单位,但可转换为柱面]

w:保存并退出

q:不保存并退出

c:可跨柱面分 fdisk -cul

l:查看/dev/sdb分区表


Boot : 表示活动分区,可使用a添加标记,去掉标记在添加一遍;都活动系统就不知道该怎么启动了


格式化分区

mkfs.ext4 /dev/sdb

 


14、同步分区列表


看内存:ls /dev/sd*  cat /proc/partitions lsblk

查看真实分区(看磁盘):fdisk -l /dev/sda 



查看内核是否已经识别新的分区

cat /proc/partations

新增分区使用:centos6通知内核重新读取硬盘分区表

partx -a /dev/device : 增加分区同步-a ;

kpartx -a /dev/device -f:force

删除分区使用用:删除内存中的某些分区表

partx -d --nr M_N /dev/device : 删除分区同步 -d --nr 6-8 /dev/sda

centos 5,7 : 使用partprobe

partprobe [/dev/device]


备份分区表:

dd if=/dev/sda of=mbr bs=1 count=512  #备份

dd if=mbr of=/dev/sda #还原

scp mbr 192.168.25.129:/app # 远程备份

删除分区:dd  if=/dev/zero of=/dev/sdd bs=1 count=2 skip=510(跳过前510字节) seek=510 【破坏55aa】

seek=N skip N obs-sized blocks at start of output #表示输出of=/dev/sdd 跳过前510个字节进行输出写入2字节

skip=N skip N ibs-sized blocks at start of input  #表示输入if=/dev/zero跳过前510个字节进行输入写入2字节【可理解为等位替换】


分区表有两份:磁盘上+内存中


克隆分区表时得找一个大小一样的盘,不然只能克隆一部分

dd if=/dev/sda of=/dev/sdb bs=1 count=64 skip=446 seek=446


15、批量创建分区

echo -e 'n\np\n1\n\n\n+1G\nw\n' | fdisk /dev/sdd

cat <<EOF | fdisk /dev/sdd

>n

>p

>1 

>+1G 

>w

>EOF 


16、查看分区表

看内存:lsblk \ cat /proc/partations \ ls /dev/sd*

看磁盘:fdisk -l /dev/sda


二、文件系统(操作系统的功能 df -T 查看类型【只有挂载的才能看到】) 

文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统

从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等

查看系统支持的文件系统:

/lib/modules/`uname –r`/kernel/fs


1、不同系统支持的文件系统

linux文件系统

ext2 / ext3 / ext4 / xfs / btrfs / jfs(AIX) / swap


windows:

FAT32 / exFAT / NTFS


unix:

FFS (fast) UFS(unix) JFS2

网络文件系统(c/s)

NFS CIFS


将远程服务挂载到本地某个目录


集群问价系统

GFS2 OCFS2 (oracle)

分布式文件系统(安全)

fastdfs,ceph, moosefs, mogilefs, glusterfs, Lustre

RAW:未经处理或者未经格式化产生的文件系统;没有分区


spof:单点失败


2、文件系统分类

(1)根据其是否支持"journal"功能:

日志型文件系统: ext3, ext4, xfs, ...

ext3工作原理:磁盘中有一块单独的日志区,内存修改后先存在日志中,在系统不忙时写入磁盘(延迟写磁盘);缺点:性能不好,占用磁盘空间,但保护了原始数据

非日志型文件系统: ext2, vfat

ext2是不带日志功能的;把磁盘的文件全部读入内存,修改之后传回去覆盖,如果在传输过程中断电了,这个数据就破坏了

先写日志在写磁盘,日志是追加,顺序写入,通常放在快速的目录


(2)文件系统的组成部分:

内核中的模块:ext4(50TB), xfs(500TB), vfat

用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat

(3)Linux的虚拟文件系统:VFS

(4)查前支持的文件系统:cat /proc/filesystems


3、创建文件系统

(1)mkfs命令

mkfs.FS_TYPE /dev/device

ext4

xfs

btrfs

vfat


mke2fs :创建ext2文件系统(没有日志功能)

(2)mkfs -t FS_type /dev/device

-L 'label' :设定卷标

(3)mkfs:ext系列文件系统专用工具

-t {ext2 | extt3 | ext4 }

-b { 1024 | 2048 |4096 } 不能随便指定2^n,就小值;存放文件使用的最小单位,扇区的整数倍;与磁盘的block不一样

-L 'LABEL'  # blkid 可查看卷标

-j 相当于 -t ext3

mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3

-i # :为数据空间中每多少个字节创建一个inode;此大小不应小于block的大小

-N # :指定分区中创建多少个inode

-T 一个inode记录占用的磁盘空间大小;128-4096 ;mkfs.ext4 -I 128 /dev/sdb1( 128的整数倍 )

-m # : 默认5%,为管理人员预留空间占总空间的百分比

-O feature[...] :启用指定特性【Filesystem features:      has_journal ext_attr resize_inode dir_i】

给ext2添加日志功能:tune2fs -O has_journal /dev/sdb1

O ^festure :关闭指定特性

-o :添加Default mount options:    (none) 特性

tune2fs -o acl /dev/sdb1    # 添加acl权限

tune2fs -o ^acl /dev/sdb1   # 去掉acl权限

说明:

xfs自带acl功能;ext系列手动创建的不带acl权限;需要手动添加


文件也可创建文件系统


说明:块的单位4k,每个文件至少占4k

 磁盘的块:一个扇区512byte

 操作系统块:4096 是磁盘块的整数倍

 应用程序块:是操作系统块的整数倍

查看/app对应的设备名:

blkid `grep "app" /etc/fstab | cut -d " " f 2 | cut -d "=" -f2`


实例:实现在centos 6 上支持xfs文件系统;

rpm -qf kernel | grep xfs         # 查看驱动是否安装,一般是安装了的

rpm -qf `which mkfs.xfs`  # 去CentOS 7 上查看mkfs.xfs来自那个rpm包

xfsprogs-4.5.0-8.el7.x86_64   # 来自这个包

yum list xfsprogs                 # 到CentOS 6 上看看是否有此包;显示base源中有

yum -y install xfsprogs  # 安装

mkfs.[2tab]  # 查看一下支持


 

  (4)文件系统标签

指向设备的另一种方法

与设备无关

blkid:块设备属性信息查看blkid[OPTION]... [DEVICE]

-U UUID: 根据指定的UUID来查找对应的设备

-L LABEL:根据指定的LABEL来查找对应的设备

e2label:管理ext系列文件系统的LABEL

e2label DEVICE [LABEL]

findfs:查找分区

findfs LABEL=<label>|UUID=<uuid>

findfs[options] LABEL=<label>

findfs[options] UUID=<uuid>

(5)e2label :用于查看磁盘设备的相关属性;或者定义卷标

格式:e2label 设备文件 卷标

实例:e2label /dev/sda5 MyNAme

 e2label /dev/sda5



(6)tune2fs : 重新设定ext系列文件系统可调整参数的值

达到36次会触发检查,-1不检查,时间到达6个月也会触发文件系统检查,手动检查时,先卸载(fsck /dev/sdb5)

tune2fs -O has_journal /dev/sdb1 : 添加

tune2fs -O ^has_journal /dev/sdb1 :删除


-l : 查看指定文件系统超级快信息;super block

-L : 'LABLE':修改卷标

-m # :修改预留给管理员的空间百分比克

-j : 将ext2升级为ext3

-O : 文件系统属性启用或禁用,-O ^has_journal (关闭日志功能

-o : 调整文件系统的默认挂载选项,-o ^acl

-U UUID : 修改UUID号 


tune2fs -l /dev/sda1  == dumpe2fs -h /dev/sda1

tune2fs 1.41.12 (17-May-2010)

Filesystem volume name:   <none>

Last mounted on:          /boot        # 最后一次挂载目录,一般不更新

Filesystem UUID:          6a21535a-1190-432f-aad6-3e3fe31d959f

Filesystem magic number:  0xEF53

Filesystem revision #:    1 (dynamic)

Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize

Filesystem flags:         signed_directory_hash 

Default mount options:    user_xattr acl

Filesystem state:         clean   # 文件系统是否出故障,可用dd使其出故障

Errors behavior:          Continue

Filesystem OS type:       Linux

Inode count:              65536

Block count:              262144

Reserved block count:     13107

Free blocks:              241097

Free inodes:              65498

First block:              0

Block size:               4096

Fragment size:            4096

Reserved GDT blocks:      63

Blocks per group:         32768

Fragments per group:      32768

Inodes per group:         8192

Inode blocks per group:   512

Flex block group size:    16

Filesystem created:       Fri Jul 14 10:34:44 2017

Last mount time:          Fri Jul 28 23:11:10 2017

Last write time:          Fri Jul 28 23:11:10 2017

Mount count:              16   # 挂载次数

Maximum mount count:      36       # 挂载36次就会触发文件系统检查(fsck /dev/sda1),-1表示没有挂载上线限制 

Last checked:             Fri Jul 14 10:34:44 2017  # 触发文件系统检查时间

Check interval:           0 (<none>)

Lifetime writes:          82 MB

Reserved blocks uid:      0 (user root)

Reserved blocks gid:      0 (group root)

First inode:              11

Inode size:          256

Required extra isize:     28

Desired extra isize:      28

Journal inode:            8

Default directory hash:   half_md4

Directory Hash Seed:      e3356400-c678-4eca-bcde-5687b0703636

Journal backup:           inode blocks



(7)dume2fs 查看快组信息

dumpe2fs:

块分组管理,32768块

-h:查看超级块信息,不显示分组信息


bitmap: 位图【1表示占用,0表示未占用】



(8)fsck 文件系统检查修复 fsck /dev/sda1

修复的过程一定是不能再挂载状态的

常发生于死机或者非正常关机之后

挂载为文件系统标记为"no clean"

注意:一定不要在挂载状态下修复

破坏超级快:dumpe2fs /dev/sdb2 : 查看超级块信息找到块大小4096

dd if=/dev/zero of=/dev/sdb2 bs=1k count=4096

恢复:fsck /dev/sdb2  


fsck: File System Check

fsck.FS_TYPE

fsck-t FS_TYPE


-p: 自动修复错误

-r: 交互式修复错误

-f : 强制检查

文件系统一定要与分区上已经文件类型相同

(9)e2fsck:ext系列文件专用的检测修复工具

-y:自动回答为yes

-f 强制检查,如果不写,它看到clean状态就不检查了


(10)在/etc/fstab中写条目注意点

[root@vincent ~]#cat /etc/fstab

#

# /etc/fstab

# Created by anaconda on Fri Jul 14 10:37:51 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=dffb3ae3-3f41-4bb7-bbb4-1ed0a7c2bf9e /                       ext4    defaults        1 1

UUID=77cd21f4-c77a-4f24-847c-7a7602f4a0de /app                    ext4    defaults        1 2

UUID=6a21535a-1190-432f-aad6-3e3fe31d959f /boot                   ext4    defaults        1 2

UUID=f5877162-3c30-4dc1-b508-01c7520f13ec swap                    swap    defaults        0 0

a、写了文件系统的文件挂载情况

/root/f1 /mnt/f1 ext4 loop 0 0 

b、没写入文件系统的文件挂载情况

/etc /mnt/etc none bind 0 0

c、设备最好使用uuid,不易产生错误

UUID=8-4-4-4-12 /mnt/sdb2 ext4 defaults 0 0 

d、网络文件挂载情况

//192.168.25.129:/mnt/f1 /mnt/nfs nfs defaults 0 0

e、Windows共享挂载格式

//websrv/winshare /mnt/win cifs defaults 0 0


注1:倒数第二位代表:几天备份一次,0表示不备份;

倒数第一位表示:开机检测,默认按次序检查文件系统,1,2,3,4

0不检查 ,建议不检查,如果设备名发生变化,重启时检查将导致机器启用不起来

网络文件系统不需要检查,即便检查出了意外重启也能起来,考虑到网络文件系统的不稳定性:


注2:如果检查失败,机器重启不起来怎么办

mount 显示的是rw,但其实并非rw

touch abc :提示read-only 

mount -o remount,rw /

vim /etc/fstab

错误条目的检测位设置为零

reboot # 重启ok



三、挂载(mount)

含义:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录作为其它文件访问入口的行为


有文件系统才能挂载

多个设备不能同时挂载在同一个挂载点上,生效的只是最后一个设备

挂载点原有文件在挂载完成后会被临时隐藏

一个设备可同时挂载到多个挂载点上

挂载点目录一般为空

lost+found : 丢失+找到


1、格式

mount 设备名 挂载点(文件夹名)

mount 通过查看/etc/mtab文件显示当前已挂载的所有设备


设备名:(1)设备文件

(2)卷标 -L 'LABEL' 例如-L 'Mydate'

(3)UUID -U 'UUID' ---->blkid可查看UUID,uuidgen可生成UUID


挂载点:(1)事先存在;建议使用空目录

(2)此目录没有被其他进程使用

(3)目录中的文件将暂时隐藏


伪文件系统名称:proc sysfs devtmpfs configfs 


实例:

dd if=/dev/zero of=/app/partfile

mkfs.ext4 /app/partfile

mkdir /mnt/partfile

mount -o loop /app/partfile /mnt/partfie # loop是一个设备,最多8个loop设备

cat /etc/mtab || df #查看

当loop设备使用完时,我们可以手动创建并挂载

mknod /dev/loop9 b 7 9 

mount /app/partfile9 /mnt/partfile9


2、mount 常用命令选项

-a :自动挂载所有支持自动挂载的设备(定义在/etc/fatab文件中,且挂载选项中auto功能);表示挂载/etc/fstab文件中定义的所有文件系统

-t vfstype :指定要挂载的设备上的文件系统类型

-r :只读挂载

-w :读写挂载

-n :默认情况下,mount命令没挂载一个设备,都会把挂载的设备信息保存至/etc/mtab,加了' -n '选项不更新/etc/mtab ,mount命令不能看见新挂载的文件 ;使用cat /proc/mounts 看的全

-L 'LABEL':以卷标指定挂载设备

-U :以UUID指定要挂载设备

-B --bind :绑定目录到另一个目录上,文件夹挂文件夹,像硬链接,如果两个文件节点一样,且inode号不长,估计就是文件挂载到文件夹

-o :挂载文件系统的选项,多个选项使用逗号分隔

async :异步模式-->加载到内存后,不是实时写入磁盘,写完了在写入磁盘

sync :同步模式,内存更改时,同时写磁盘

atime/noatime : #noatime不更新访问时间;非设备文件使用:chattr +A 文件夹 可以让某个文件夹不改变访问时间

mount -B -o noatime /var/www/html /var/www/html 

auto/noauto : 是否支持自动挂载,是否支持-a选项

exec/noexec : 是否支持在文件系统上运行应用程序;想要在运行请使用 bash file.sh [./file.sh 是没权限运行的]

dev/nodev : 有了nodev,那么该设备文件上面的设备文件就失效了,取消nodev 

suid/nosuid : 是否支持suid和sgid权限,图形界面默认挂载是nosuid,如果管理员挂载默认是由suid的

mount -0 remount,nosuid /mnt/sdb2

remount:重新挂载

remount,acl remount,ro 

ro :只读,对root用户也起作用

rw :读写

user/nouser : 是否允许普通用户挂载此设备,/etc/fstab 使用

loop :使用loop设备


defaults :rw nosuid dev exec auto nouser  async 


3、查看挂载情况

注:能看到读写情况

mount

cat /etc/mtab    # mount 看到的 内容其实来自这里

cat /proc/mounts # 实时更新


4、umount 卸载


查看某设备的挂载情况

findmnt 挂载点(mount_point)|设备(device)

查找设备对应的UUID或UUID对应的设备

dir=/;findfs `egrep "$dir[[:space:]]+" /etc/fstab | cut -d " " -f 1`


查看正在访问执行文件系统的进程

lsof mount_point(挂载点)# 查看指定挂载点使用情况【谁在使用】

fuser 验证进程正在使用的文件或套接字文件 

km mount_point # 杀死使用该挂载点的所有进程,终止正在访问此挂载点的所有进程

-v /mnt/sdb2 # 查看某文件上正在运行的进程


卸载

umount device

umount mount_point


普通用户是不能挂载和取消挂载的

一个设备挂载到多个目录下,当取消挂载的时候默认取消最后那个挂载点


losetup -a : # 查看loop设备关联情况

创建loop设备;mknod /dev/loop9 b 7 9   # 系统不够,手动创建

losetup /dev/loop9 /app/partfile9 : #将/dev/loop9 和 /app/partfile9 关联起来



centos7 :没有上限,自动生成

centos6 :默认只有7个,在多久需要手动添加

vim /boot/grub/grub.conf

在内核项后面添加选项,max_loop=100 


HISTCONTROL=igoreboth


三、创建SWAP分区 

1、交换分区是系统RAM的补充

基本设置包括:

•创建交换分区或者文件

•使用mkswap写入特殊签名

•在/etc/fstab文件中添加适当的条目

•使用swapon -a 激活交换空间


在/dev/sdb创建一个分区/dev/sdb1 改id类型为82[ 82  Linux swap / So ]

fdisk /dev/sdb--> t-->1-->l-->82--->w

2、创建swap

分区不能调大调小

mkswap 


[root@vincent ~]#mkswap /dev/sdb1 -L MySwap

Setting up swapspace version 1, size = 2104476 KiB

LABEL=MySwap, UUID=15670c7b-12e1-4b58-afa0-9eb73ab7958b

vim /etc/fatab

UUID=15670c7b-12e1-4b58-afa0-9eb73ab7958b swap swap defaults 0 0


生效:此处不能使用mount -a :是不会生效的

swapon  -a 读取/etc/fstab中的swap条目生效

-s 查看swap分区,lsblk cat /proc/swaps


[root@vincent ~]#swapon -s

Filename Type Size Used Priority

/dev/sda5               partition 2097148 0 -1     

/dev/sdb1               partition 2104476 0 -2


# 存在一个问题,sda5优先级高,会优先使用;但距离0磁道远,性能不好

解决方式:UUID=15670c7b-12e1-4b58-afa0-9eb73ab7958b swap swap defaults,pri=100 0 0

 pri=的值比0大就行


如何生效呢:

先禁用/dev/sdb1在启动

swapoff /dev/sdb1

free # 空间立马释放

swapon /dev/sdb1


注:上述方法实现了将swap迁移迁移到高速磁盘上,优化性能



文件实现swap

dd if=/dev/zero of=/swapfile bs=1M count=1024

mkswap /swapfile

blkid /swapfile

vim /etc/fstab

swapon -a 


3、禁用swap

• 先停下来,在删除swap

swapoff /swapfile

swapon -s 


4、swap的优先级

• 可以指定swap分区0到32767的优先级,值越大优先级越高

• 如果用户没有指定,那么核心会自动给swap指定一个优先级,这个优先级从-1开始,每加入一个新的没有用户指定优先级的swap,会给这个优先级减一

• 先添加的swap的缺省优先级比较高,除非用户自己指定一个优先级,而用户指定的优先级(是正数)永远高于核心缺省指定的优先级(是负数)

• 优化性能:分布存放,高性能磁盘存放


5、移动介质

• 挂载意味着使外来的文件系统看起来如同是主目录树的一部分

• 访问前、介质必须被挂载

• 摘除时,介质必须被卸载

• 按照默认设置,非根用户只能挂载某些设备(光盘、DVD、软盘、USB等等)

• 挂载点通常在/media 或/mnt下


6、使用光盘

• 在图形环境下自动启动挂载 /run/media/<user>/<label> 默认有执行权限

• 否则就必须被手工挂载 mount /dev/cdrom /mnt/ 默认没有执行权限

• eject命令卸载或弹出磁盘

eject -t 弹回光驱:秒作用;做完某项操作弹出光驱

• 创建ISO文件

cp /dev/ cdrom /root/centos7.iso

mkisofs  -r  -o  /root/etc.iso /etc #将目录制作成iso镜像

• 刻录光盘

wodim –v –eject centos.iso

cdrecord -v centos6.iso


7、挂载USB介质

• 查看USB设备是否识别

lsusb

• 被内核探测为SCSI设备

/dev/sdaX、/dev/sdbX、或类似的设备文件在图形环境中自动挂载

图标在[计算机]窗口中创建

挂载在 /run/media/<user>/<label>

• 手动挂载

mount /dev/sdb1 /mnt


8、常用选项

• 内存空间使用状态:

free [OPTION]

-m: 以MB为单位

-g: 以GB为单位


[root@vincent ~]#free

            total       used       free     shared    buffers     cached

Mem:       1004112     937272      66840       3040     301292     315124

-/+ buffers/cache:     320856     683256

Swap:      4201624          0    4201624


注1:buffers:缓存都是元数据信息

cached :缓存的是真实数据信息


注2:centos6上320856值是used-buffers-cached得到的

centos6上683256值是free+buffers+cached得到的

• 文件系统空间占用等信息的查看工具:

df[OPTION]... [FILE]...

-H 以1000为单位

-T 文件系统类型

-h: human 以1024位单位

-readable

-i:inodesinstead of blocks

-P: 以Posix兼容的格式输出,防止换行

• 查看某目录总体空间占用状态k为单位:

du [OPTION]... DIR

-h: human

-readable

-s: summary


实例:查看/目录下每个子目录的大小

su -sh /*


9、dd工具(装换和复制文件)


• dd命令:convert and copy a file

• 用法:

dd if=/PATH/FROM/SRC of=/PATH/TO/DEST bs= count=

bs=#:block size, 复制单元大小

count=#:复制多少个bs

of=file 写到所命名的文件而不是到标准输出

if=file 从所命名文件读取而不是从标准输入

bs=size 指定块大小(既是是ibs也是obs)

ibs=size 一次读size个byte,以多大单位读数据

obs=size 一次写size个byte,以多大单位写数据

cbs=size   一次转化size个byte


skip=blocks 从开头忽略blocks个ibs大小的块 [ 输入时跳过多少个块 ]

seek=blocks 从开头忽略blocks个obs大小的块 [ 输出是忽略 多少个块 ]

count=n 只拷贝n个记录


10、用指定的参数转换文件

conv=conversion[,conversion...] 

转换参数: 

ascii 转换EBCDIC 为ASCII

ebcdic 转换ASCII 为EBCDIC

lcase 把大写字符转换为小写字符

ucase 把小写字符转换为大写字符

nocreat 不创建输出文件

noerror 出错时不停止

notrunc 不截短输出文件 ;不截断会将后面的数据都搞没了,A:12345 B:12345gh skip 3 seek 3 count 2 ---> 12345

sync 把每个输入块填充到ibs个字节,不足部分用空(NULL)字符补齐


11、dd实例

• 备份MBR:

dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1

• 破坏MBR中的bootloader:

dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446

• 有一个大与2K的二进制文件fileA。现在想从第64个字节位置开始读取,需要读取的大小是128Byts。又有fileB, 想把上面读取到的128Bytes写到第32个字节开始的位置,替换128Bytes,实现如下:

# ddif=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc


12、dd工具的备份与恢复

• 备份:

将本地的/dev/sdx整盘备份到/dev/sdy

dd if=/dev/sdx of=/dev/sdy


将/dev/sdx全盘数据备份到指定路径的image文件

dd if=/dev/sdx of=/path/to/image


备份/dev/sdx全盘数据,并利用gzip压缩,保存到指定路径

dd if=/dev/sdx | gzip >/path/to/image.gz

• 恢复:

将备份文件恢复到指定盘

dd if=/path/to/image of=/dev/sdx


将压缩的备份文件恢复到指定盘

gzip -dc /path/to/image.gz | dd of=/dev/sdx


• 拷贝内存资料到硬盘

将内存里的数据拷贝到root目录下的mem.bin文件

dd if=/dev/mem of=/root/mem.bin bs=1024

• 从光盘拷贝iso镜像

拷贝光盘数据到root文件夹下,并保存为cd.iso文件

dd if=/dev/cdrom of=/root/cd.iso

• 销毁磁盘数据

dd if=/dev/urandom of=/dev/sda1

利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据,执行此操作以后,/dev/sda1将无法挂载,创建和拷贝操作无法执行


• 得到最恰当的block size 

dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file 

dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file 

dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file

通过比较dd指令输出中所显示的命令执行时间,即可确定系统最佳的block size大小


• 测试硬盘写速度

dd if=/dev/zero of=/root/1Gb.file bs=1024 

count=1000000

测内存速度

dd if=/dev/zero of=/dev/null bs=1 count=1024



• 测试硬盘读速度

dd if=/root/1Gb.file bs=64k | dd of=/dev/null 


• 修复硬盘

dd if=/dev/sda of=/dev/sda

当硬盘较长时间(比如1,2年)放置不使用后,磁盘上会产生消磁点。当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。

上述的命令有可能使这些数据起死回生,且这个过程是安全高效的


13、练习

(1)创建一个2G的文件系统,块大小为2048byte,预留1%可用空间,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/test目录,且默认有acl挂载选项

 fdisk /dev/sdb-> n -> p -> 2-> \n -> +2G -> w

mkfs -t ext4 -m 1 -b 2048 -L 'TEST' /dev/sdb2   # 验证:e2label /dev/sdb2  , blkid

tune2fs -o acl /dev/sdb1   # tune2fs -l /dev/sdb2

mkdir /mnt/test

mount -o auto /dev/sdb1 /mnt/test



(2)写一个脚本,完成如下功能:

a、列出当前系统识别到的所有磁盘设备

b、如磁盘数量为1,则显示其空间使用信息否则,则显示最后一个磁盘上的空间使用信息

#!/bin/bash

echo -e "^[[1;35m The disk infomation:^[[0m"

lsblk | grep disk

sd=` lsblk | grep "disk" | tail -1 |cut -d " " -f 1`   

echo -e "^[[1;35m ------------------------------^[[0m"

lsblk | grep $sd


(3)将CentOS 6的 CentOS-6.8-x86_64-bin-DVD1.iso和 CentOS-6.8-x86_64-bin-DVD2.iso两个文件,合并成一个CentOS-6.8-x86_64-Everything.iso文件,并将其配置为yum源

复制第一张盘内容

mkdir /app/centos6.9-everything

cp /misc/cd/* /app/centos6.9-everything

挂第二张盘

cp /misc/cd/* /app/centos6.9-everything -rv

mkisofs -r -o cent6.9-everything.iso /app/cent6.9-everything [ 没有启动功能,做yum仓库是可以的 ]


dd if=/dev/sr0 of=centos6.9-DVD1.iso  # dd命令制作的iso文件是可以装系统的,和cp一样

追加第二张盘的内容到centos6.9-DVD1.iso


./mkdvdiso.sh  cent6.9-everything.iso /app/cent6.9-everything

查看日志:

tail -f /var/log/messages


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

编程基础 linux基础入门--linux为何物?

linux具体要学点啥,基础要学啥?

linux入门基础——linux用户基础

Linux基础篇--linux基础和帮助用法

Linux基础(03)常用基础指令和操作

Linux操作基础