Linux

Linux 简介

概述

定义:Linux 是一种自由和开放源码的类 UNIX 操作系统,使用 Linux 内核。

主要发行版:

  1. RedHat

    ​ - Red Hat Enterprise Linux 收费

    ​ - Centos 免费,国内互联网商用

  2. Ubuntu :免费,由众多黑客维护

  3. Suse:专业的操作系统,易用的YaST软件包管理系统

安装

  1. 安装虚拟机

  2. 创建虚拟空间,网络连接方式

    桥接

桥接网络是指本地物理网卡和虚拟网卡通过VMnet0虚拟交换机进行桥接,物理网卡和虚拟网卡在拓扑图上处于同等地位,那么物理网卡和虚拟网卡就相当于处于同一个网段,虚拟交换机就相当于一台现实网络中的交换机,所以两个网卡的IP地址也要设置为同一网段。

​ NAT

NAT模式中,就是让虚拟机借助NAT(网络地址转换)功能,通过宿主机器所在的网络来访问公网。

NAT模式中,虚拟机的网卡和物理网卡的网络,不在同一个网络,虚拟机的网卡,是在vmware提供的一个虚拟网络。

NAT和桥接的比较:

(1) NAT模式和桥接模式虚拟机都可以上外网。

(2) 由于NAT的网络在vmware提供的一个虚拟网络里,所以局域网其他主机是无法访问虚拟机的,而宿主机可以访问虚拟机,虚拟机可以访问局域网的所有主机,因为真实的局域网相对于NAT的虚拟网络,就是NAT的虚拟网络的外网,不懂的人可以查查NAT的相关知识。

(3) 桥接模式下,多个虚拟机之间可以互相访问;NAT模式下,多个虚拟机之间也可以相互访问。

如果你建一个虚拟机,只是给自己用,不需要给局域网其他人用,那么可以选择NAT,毕竟NAT模式下的虚拟系统的TCP/IP配置信息是由VMnet8(NAT)虚拟网络的DHCP服务器提供的,只要虚拟机的网路配置是DHCP,那么你不需要进行任何其他的配置,只需要宿主机器能访问互联网即可,就可以让虚拟机联网了。

例如你想建多个虚拟机集群,作为测试使用,而宿主机可能是一个笔记本,ip不固定。这种应用场景,我们需要采用nat模式了,但是我们要考虑一个问题,虚拟机之间是需要互访的,默认采用dhcp,虚拟机的ip每次重启,ip都是不固定的,所以我们需要手工设置虚拟机的ip地址。

但是我们对虚拟机网卡所在的虚拟网络的信息还一无所知,例如虚拟机网络的路由地址,子网掩码,所以我们需要先查下nat虚拟网络的信息。

使用vmware,在Edit->Virtual Network Editor中配置好虚拟网络信息后看到下图所示,注意VMnet8,VMnet8相当于是本机的一个路由,虚拟机设置NAT后就通过这个路由进行上网的,可以查看其网络地址,路由地址,子网掩码。

选择VMnet8->NAT设置,可以看到子网ip显示为192.168.233.0,子网掩码是255.255.255.0,那路由地址呢,其实就是网关IP了,都是同个东西,这里是192.168.233.2。

接下来就好办了,在对应的虚拟机设置好ip,子网掩码,路由地址就可以上外网了,至于dns可以设置为8.8.8.8.

Host-Only

在Host-Only模式下,虚拟网络是一个全封闭的网络,它唯一能够访问的就是主机。其实Host-Only网络和NAT网络很相似,不同的地方就是Host-Only网络没有NAT服务,所以虚拟网络不能连接到Internet。主机和虚拟机之间的通信是通过VMware Network Adepter VMnet1虚拟网卡来实现的。

  Host-Only的宗旨就是建立一个与外界隔绝的内部网络,来提高内网的安全性。这个功能或许对普通用户来说没有多大意义,但大型服务商会常常利用这个功能。如果你想为VMnet1网段提供路由功能,那就需要使用RRAS,而不能使用XP或2000的ICS,因为ICS会把内网的IP地址改为192.168.0.1,但虚拟机是不会给VMnet1虚拟网卡分配这个地址的,那么主机和虚拟机之间就不能通信了。

  1. 安装Centos

    对分区的基本要求:至少有一个根(/) 分区,用于存放系统文件及程序,大小为5GB以上

Linux的基础知识

Linux系统的组成

  1. linux内核(linus 团队管理)
  2. shell:用户与内核交互的接口
  3. *文件系统**:ext3、ext4等。windows 有 fat32 、ntfs
  4. 第三方应用软件

Shell的基本知识

Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口(命令解释器)

shell可以执行:

  • 内部命令
  • 应用程序
  • shell脚本

Linux 远程控制管理

概述

传统的网络服务程序,FTP、POP、telnet 本质上都是不安全的,因为它们在网络上通过明文传送口令和数据,这些数据非常容易被截获。SSH 叫做 Secure Shell。通过 SSH,可以把传输数据进行加密,预防攻击,传输的数据进行了压缩,可以加快传输速度。

OpenSSH

SSH 是芬兰一家公司开发。但是受到版权和加密算法限制,现在很多人都使用 OpenSSH。OpenSSH 是 SSH 的替代软件,免费。

OpenSSH 由客户端和服务端组成。

  • 基于口令的安全验证:知道服务器的帐号密码即可远程登录,口令和数据在传输过程中都会被加密。
  • 基于密钥的安全验证:此时需要在创建一对密钥,把公有密钥放到远程服务器上自己的宿主目录中,而私有密钥则由自己保存

Linux 的目录结构

概述

linux文件目录结构

目录 说明
bin 存放二进制可执行文件(ls,cat,mkdir等)
boot 存放用于系统引导时使用的各种文件
dev 用于存放设备文件
etc 存放系统配置文件
home 存放所有用户文件的根目录
lib 存放跟文件系统中的程序运行所需要的共享库及内核模块
mnt 系统管理员安装临时文件系统的安装点
opt 额外安装的可选应用程序包所放置的位置
proc 虚拟文件系统,存放当前内存的映射
root 超级用户目录
sbin 存放二进制可执行文件,只有root才能访问
tmp 用于存放各种临时文件
usr 用于存放系统应用程序,比较重要的目录/usr/local 本地管理员软件安装目录
var 用于存放运行时需要改变数据的文件

常用文件、目录操作命令

命令表

命令 说明 语法 参数 参数说明
ls 显示文件和目录列表 ls [-alrtAFR] [name…]
-l 列出文件的详细信息
-a 列出当前目录所有文件,包含隐藏文件
-h 显示大小,便于查看(例如G、M、K)
mkdir 创建目录 mkdir [-p] dirName
-p 父目录不存在情况下先生成父目录
cd 切换目录 cd [dirName]
touch 生成一个空文件
echo 生成一个带内容文件 echo abcd > 1.txt,echo 1234 >> 1.txt
cat 显示文本文件内容 cat [-AbeEnstTuv] [–help] [–version] fileName
cp 复制文件或目录 cp [options] source dest
-p 复制的文件保持原有文件的修改时间
rm 删除文件 rm [options] name…
-f 强制删除文件或目录
-r 同时删除该目录下的所有文件
mv 移动文件或目录 mv [options] source dest
mv oldNameFile new NameFile 重命名
mv fileName /targetFolder 移动文件
find 在文件系统中查找指定的文件
-name 文件名
grep 在指定的文本文件中查找指定的字符串
tree 用于以树状图列出目录的内容
pwd 显示当前工作目录
ln 建立软链接
more 分页显示文本文件内容
空格键 向下滚动一屏
Crtl + B 返回上一屏
Enter 向下n行,需要定义,默认一行
q 退出more
head 显示文件开头内容
tail 显示文件结尾内容
-f 跟踪输出

TIP

  • . 表示当前目录
  • .. 表示当前目录的上一级目录(父目录)
  • -表示用 cd 命令切换目录所在的目录
  • ~ 表示用户主目录的绝对路径名
  • 管道命令 | :将前面的结果给后面的命令,例如:ls -la | wc ,将ls的结果加油wc命令来统计字数
  • 重定向 > 是覆盖模式,>> 是追加模式

绝对路径:

  • 以斜线(/)开头 ,描述到文件位置的完整说明 ,任何时候你想指定文件名的时候都可以使用

相对路径 :

  • 不以斜线(/)开头 ,指定相对于你的当前工作目录而言的位置 ,可以被用作指定文件名的简捷方式

常用监控系统状态命令

命令 说明
stat 显示指定文件的相关信息,比ls命令显示内容更多
who 显示在线登录用户
hostname 显示主机名称
uname 显示系统信息
top 显示当前系统中耗费资源最多的进程
ps 显示瞬间的进程状态
du 显示指定的文件(目录)已使用的磁盘空间的总量
df 显示文件系统磁盘空间的使用情况
free 显示当前内存和交换空间的使用情况
ifconfig 显示网络接口信息
ping 测试网络的连通性
netstat 显示网络状态信息
clear 清屏
kill 杀死一个进程

显示进程信息

操作 命令 描述
参数
-a 显示当前终端的所有进程信息
-u 以用户的格式显示进程信息
-x 显示后台进程运行的参数
-e 显示所有进程
-f 全格式
例子
aux 显示当前进程状态
ef 可以显示父进程ID,

ps -aux :显示当前进程状态

  • USER: 行程拥有者
  • PID: pid
  • %CPU: 占用的 CPU 使用率
  • %MEM: 占用的记忆体使用率
  • VSZ: 占用的虚拟记忆体大小
  • RSS: 占用的记忆体大小
  • TTY: 终端的次要装置号码 (minor device number of tty)
  • STAT: 该行程的状态:
    • D: 无法中断的休眠状态 (通常 IO 的进程)
    • R: 正在执行中
    • S: 静止状态
    • T: 暂停执行
    • Z: 不存在但暂时无法消除
    • W: 没有足够的记忆体分页可分配
    • <: 高优先序的行程
    • N: 低优先序的行程
    • L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
  • START: 行程开始时间
  • TIME: 执行的时间
  • COMMAND:所执行的指令

ps -ef

1
UID    PID PPID C STIME TTY     TIME CMD
  • UID:用户ID
  • PID:进程ID
  • PPID:父进程ID
  • C:CPU用户计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高
  • STIME:进程启动的时间
  • TTY:完整的终端名称
  • TIME:CPU时间
  • CMD:启动进程所用的命名和参数

查看网络情况

常用选项

命令 描述
-an 按一定顺序排列输出
-p 显示哪个进程在调用
一般用netstat -anp

开关机命令

shutdown 命令可以用来进行关机程序,并且在关机以前传送讯息给所有使用者正在执行的程序,shutdown 也可以用来重开机。

命令 语法 参数 参数说明
shutdown shutdown [-t seconds] [-rkhncfF] time [message]
-t seconds 设定在几秒钟之后进行关机程序
-k 并不会真的关机,只是将警告讯息传送给所有只用者
-r 关机后重新开机(重启)
-h 关机后停机
-n 不采用正常程序来关机,用强迫的方式杀掉所有执行中的程序后自行关机
-c 取消目前已经进行中的关机动作
-f 关机时,不做 fcsk 动作(检查 Linux 档系统)
-F 关机时,强迫进行 fsck 动作
time 设定关机的时间
message 传送给所有使用者的警告讯息

重启

  • reboot
  • shutdown -r now

关机

  • shutdown -h nown

文件打包和压缩命令

常用命令

命令 功能
xz 使用LZMA算法的高性能压缩/解压工具
gzip 流行的GUN gzip数据压缩/解压程序
bzip2 免费的,无专利的高性能数据压缩工具
zip/unzip 与WinZIP兼容的压缩/解压工具
rar 与WinRAR兼容的压缩/解压工具
7za 使用LZMA算法的高性能压缩/解压工具
tar 文件打包、归档工具

常用的压缩方式详解

tar

命令 语法 参数 参数说明
tar tar [-cxzjvf] 压缩打包文档的名称 欲打包目录
-c 建立一个归档文件的参数指令
-x 解开一个归档文件的参数指令
-z 是否需要用 gzip 压缩
-j 是否需要用 bzip2 压缩
-v 压缩的过程中显示文件
-f 使用档名,在 f 之后要立即接档名
-tf 查看归档文件里面的文件

例子:

  • 压缩文件夹:tar -zcvf test.tar.gz /test/
  • 打包多个文件 tar -zcvf test.tar.gz test1.txt test2.txt
  • 解压文件夹到当前目录:tar -zxvf test.tar.gz
  • 解压到指定目录 tar -zxvf test.tar.gz -C /test/

gzip/gunzip

命令 语法 参数 参数说明
gzip gzip [选项] 压缩(解压缩)的文件名
-d 解压缩
-l 对每个压缩文件,显示压缩文件的大小,未压缩文件的大小,压缩比,未压缩文件的名字
-v 对每一个压缩和解压的文件,显示文件名和压缩比
-num 用指定的数字num调整压缩的速度,-1或–fast表示最快压缩方法(低压缩比),-9或–best表示最慢压缩方法(高压缩比)。系统缺省值为6
gunzip 解压文件

说明:压缩文件后缀为 gz

​ gzip对文件进行压缩后,不会保留原来的文件

bzip2

命令 语法 参数 参数说明
bzip2 bzip2 [-cdz]
-d 解压缩
-z 压缩参数
-num 用指定的数字num调整压缩的速度,-1或–fast表示最快压缩方法(低压缩比),-9或–best表示最慢压缩方法(高压缩比)。系统缺省值为6

说明:压缩文件后缀为 bz2

编辑器

vi/vim运行模式

  • 普通模式:等待编辑命令输入
  • 编辑模式:普通模式下,输入 i 进入插入模式,插入文本信息
  • 命令模式:在编辑模式下,输入 : 进行命令模式

普通模式

操作 命令 功能
移动
G 移动到文档的最后一行
nG n为数字,移动到这个文档的第n行。例如20G则会移动到这个文档的第20行
gg 移动到这个文档的第一行,相当于1G
翻页
Crtl+f 屏幕向下移动一页,相当于Page Down
Crtl+b 屏幕向上移动一页,相当于Page Up
Ctrl+d 屏幕向下移动半页
Ctrl+u 屏幕向上移动半页
搜索
/ 向光标之 下寻找,例如/word,向下查找名称为word的字符串
? 向光标之 上寻找,例如?word,向上查找名称为word的字符串
n 命令行下/关键字,回车查找,输入n就是查找下一个
N 反向查找
删除
x 删除光标所在的字符
dd 删除游标所在的那一行(常用)
ndd n为数字,删除光标所在的向下n行
复制
yy 复制游标所在的那一行
nyy n为数字,复制光标所在的向下n行
粘贴
p 粘帖在下一行
P P粘贴在前一行
取消
u 取消上一次编辑操作(undo)

编辑模式

编辑模式主要用于文本的编辑。该模式下用户输入的任何字符都被作为文件的内容保存起来,并在屏幕上显示出来。

命令 描述
i 在当前光标位置之前插入文本
I 在当前行的开头插入文本
a 在当前光标位置之后插入文本
A 在当前行的末尾插入文本
o 在当前位置下面创建一行
O 在当前位置上面创建一行

命令模式

Normal 模式下,用户按冒号 :即可进入 Command 模式,此时 vim 会在显示窗口的最后一行 (屏幕的最后一行) 显示一个 “:” 作为 Command 模式的提示符,等待输入命令。

操作 命令 功能
存储、离开
:w 保存当前编辑文件,但并不退出
:w! 若属性为只读时,强制写入该文档。
:q 退出vi
:q! 不存盘强制退出
:wq 用于存盘退出
:wq! 强制存盘并退出
ZZ 用于存盘退出Vi
:w[filename] 另存文档
set 命令
:set ic 搜索时忽略大小写。
:set ai 设置自动缩进(自动对齐)。
:set noai 取消自动缩进(自动对齐)
:set nu 显示行号。
:set nonumber 在编辑文件不显示行号
:set sw 设置缩进的空格数,例如,将缩进空格数设置为4::set sw=4。
:set ws 循环搜索:如果直到文件末尾也没有查找到指定字符,那么会回到开头继续查找。
:set wm 设置自动换行,例如,设置距离边际2个字符时换行::set wm=2 。

Linux 用户和组管理

Linux 操作系统是一个多用户操作系统,它允许多用户同时登录到系统上并使用资源。系统会根据账户来区分每个用户的文件,进程,任务和工作环境,使得每个用户工作都不受干扰。

任何一个使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统

linux的用户需要至少属于一个组

用户和组管理相关命令

用户管理常用命令

操作 命令 描述
添加用户 useradd [选项] 用户名
useradd -u (UID号)
useradd -p 口令 用户名
useradd -g 用户组 用户名
useradd -s (SHELL)
useradd -d (用户目录)
编辑用户
usermod -u (新UID)
usermod -d (用户目录)
usermod -g (组名)
usermod -s (SHELL)
usermod -p (新口令)
usermod -l (新登录名)
usermod -L (锁定用户账号密码)
usermod -U (解锁用户账号)
删除用户 userdel 用户名 (删除用户账号)
userdel -r 删除账号时同时删除目录
切换用户 su -切换用户名

口令维护

1
2
3
4
5
6
7
passwd 用户账户名 (设置用户口令)
passwd -l 用户账户名 (锁定用户账户)
passwd -u 用户账户名 (解锁用户账户)
passwd -d 用户账户名 (删除账户口令)
gpasswd -a 用户账户名 组账户名 (将指定用户添加到指定组)
gpasswd -d 用户账户名 组账户名 (将用户从指定组中删除)
gpasswd -A 用户账户名 组账户名 (将用户指定为组的管理员)

组账户维护

1
2
3
4
5
groupadd 组账户名 (创建新组)
groupadd -g 指定组GID
groupmod -g 更改组的GID
groupmod -n 更改组账户名
groupdel 组账户名 (删除指定组账户)

用户和组状态

1
2
3
4
su 用户名(切换用户账户)
id 用户名(显示用户的UID,GID)
whoami (显示当前用户名称)
groups (显示用户所属组)

账户系统文件说明

/etc/passwd

每一行代表一个账号,众多账号是系统正常运行所必须的,例如 bin,nobody 每行定义一个用户账户,此文件对所有用户可读。每行账户包含如下信息:

1
root:x:0:0:root:/root:/bin/bash
  • 用户名: 就是账号,用来对应 UID,root UID 是 0。
  • 口令: 密码,早期 UNIX 系统密码存在此字段,由于此文件所有用户都可以读取,密码容易泄露,后来这个字段数据就存放到 /etc/shadow 中,这里只能看到 X。
  • 用户标示号(UID): 系统内唯一,root 用户的 UID 为 0,普通用户从 1000 开始,1-999 是系统的标准账户,500-65536 是可登陆账号。
  • 组标示号(GID): 与 /etc/group 相关用来规定组名和 GID 相对应。
  • 注释: 注释账号
  • 宿主目录(主文件夹): 用户登录系统后所进入的目录 root 在 /root/itcast
  • 命令解释器(shell): 指定该用户使用的 shell ,默认的是 /bin/bash

/etc/shadow

为了增加系统的安全性,用户口令通常用 shadow passwords 保护。只有 root 可读。每行包含如下信息:

1
root:$6$Reu571.V$Ci/kd.OTzaSGU.TagZ5KjYx2MLzQv2IkZ24E1.yeTT3Pp4o/yniTjus/rRaJ92Z18MVy6suf1W5uxxurqssel.:17465:0:99999:7:::
  • 账号名称: 需要和 /etc/passwd 一致。

  • 密码:

    经过加密,虽然加密,但不表示不会被破解,该文件默认权限如下:

    • -rw——- 1 root root 1560 Oct 26 17:20 passwd-
    • 只有root能都读写
  • 最近修改密码日期: 从1970-1-1起,到用户最后一次更改口令的天数

  • 密码最小时间间隔: 从1970-1-1起,到用户可以更改口令的天数

  • 密码最大时间间隔: 从1970-1-1起,必须更改的口令天数

  • 密码到期警告时间: 在口令过期之前几天通知

  • 密码到期后账号宽限时间

  • 密码到期禁用账户时间: 在用户口令过期后到禁用账户的天数

  • 保留

/etc/group

用户组的配置文件

1
root:x:0:
  • 用户组名称
  • 用户组密码: 给用户组管理员使用,通常不用
  • GID: 用户组的ID
  • 此用户支持的账号名称: 一个账号可以加入多个用户组,例如想要 itcast 加入 root 这个用户组,将该账号填入该字段即可 root❌0:root, icast 将用户进行分组是 Linux 对用户进行管理及控制访问权限的一种手段。一个中可以有多个用户,一个用户可以同时属于多个组。该文件对所有用户可读。

/etc/gshadow

该文件用户定义用户组口令,组管理员等信息只有root用户可读。

1
root:\*::
  • 用户组名
  • 密码列
  • 用户组管理员的账号
  • 用户组所属账号

Linux 文件权限管理

查看文件和目录的权限

ls –al使用 ls 不带参数只显示文件名称,通过ls –al` 可以显示文件或者目录的权限信息。

ls -l 文件名 显示信息包括:文件类型 (d 目录,- 普通文件,l 链接文件),文件权限,文件的用户,文件的所属组,文件的大小,文件的创建时间,文件的名称

1
-rw-r--r-- 1 lusifer lusifer 675 Oct 26 17:20 .profile
  • -:普通文件
  • rw-:说明用户 lusifer 有读写权限,没有运行权限
  • r--:表示用户组 lusifer 只有读权限,没有写和运行的权限
  • r--:其他用户只有读权限,没有写权限和运行的权限
-rw-r–r– 1 lusifer lusifer 675 Oct 26 17:20 .profile
文档类型及权限 连接数 文档所属用户 文档所属组 文档大小 文档最后被修改日期 文档名称
- rw- r– r–
文档类型 文档所有者权限(user) 文档所属用户组权限(group) 其他用户权限(other)

文档类型

  • d 表示目录
  • l 表示软连接
  • 表示文件
  • c 表示串行端口字符设备文件
  • b 表示可供存储的块设备文件
  • 余下的字符 3 个字符为一组。r 只读,w 可写,x 可执行,- 表示无此权限

连接数

指有多少个文件指向同一个索引节点

文档所属用户和所属组

就是文档属于哪个用户和用户组。文件所属用户和组是可以更改的

文档大小

默认是 bytes

更改操作权限

chown

是 change owner 的意思,主要作用就是改变文件或者目录所有者,所有者包含用户和用户组

1
2
chown [-R] 用户名称 文件或者目录
chown [-R] 用户名称 用户组名称 文件或目录

-R:进行递归式的权限更改,将目录下的所有文件、子目录更新为指定用户组权限

chmod

改变访问权限

1
chmod [who] [+ | - | =] [mode] 文件名

表示操作对象可以是以下字母的一个或者组合

  • u:用户 user
  • g:用户组 group
  • o:表示其他用户
  • a:表示所有用户是系统默认的

操作符号

  • +:表示添加某个权限
  • -:表示取消某个权限
  • =:赋予给定的权限,取消文档以前的所有权限

mode

表示可执行的权限,可以是 r、w、x

文件名

文件名可以使空格分开的文件列表

例子

1
chmod u=rwx,g+r,o+r test.txt 

数字设定法

数字设定法中数字表示的含义

  • 0 表示没有任何权限
  • 1 表示有可执行权限 = x
  • 2 表示有可写权限 = w
  • 4 表示有可读权限 = r

也可以用数字来表示权限如 chmod 755 file_name

r w x r – x r - x
4 2 1 4 - 1 4 - 1
user group others

若要 rwx 属性则 4+2+1=7

若要 rw- 属性则 4+2=6

若要 r-x 属性则 4+1=5

1
chmod 765 test.txt

Linux磁盘管理

Linux磁盘管理好坏直接关系到整个系统的性能问题。

Linux磁盘管理常用三个命令为df、du和fdisk。

  • df:列出文件系统的整体磁盘使用量
  • du:检查磁盘空间使用量
  • fdisk:用于磁盘分区

df

df命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

语法:

1
df [-ahikHTm] [目录或文件名]

选项与参数:

  • -a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
  • -k :以 KBytes 的容量显示各文件系统;
  • -m :以 MBytes 的容量显示各文件系统;
  • -h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
  • -H :以 M=1000K 取代 M=1024K 的进位方式;
  • -T :显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
  • -i :不用硬盘容量,而以 inode 的数量来显示

推荐: df -h

1
2
3
4
5
6
7
[root@www ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hdc2 9.5G 3.7G 5.4G 41% /
/dev/hdc3 4.8G 139M 4.4G 4% /home
/dev/hdc1 99M 11M 83M 12% /boot
tmpfs 363M 0 363M 0% /dev/shm

显示某个目录下的可用磁盘容量

1
2
3
[root@www ~]# df -h /etc
Filesystem Size Used Avail Use% Mounted on
/dev/hdc2 9.5G 3.7G 5.4G 41% /

du

Linux du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的,这里介绍Linux du命令。

语法:

1
du [-ahskm] 文件或目录名称

选项与参数:

  • -a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。
  • -h :以人们较易读的容量格式 (G/M) 显示;
  • -s :列出总量而已,而不列出每个各别的目录占用容量;
  • -S :不包括子目录下的总计,与 -s 有点差别。
  • -k :以 KBytes 列出容量显示;
  • -m :以 MBytes 列出容量显示;

fdisk

fdisk 是 Linux 的磁盘分区表操作工具。

语法:

1
fdisk [-l] 装置名称

选项与参数:

  • -l :输出后面接的装置所有的分区内容。若仅有 fdisk -l 时, 则系统将会把整个系统内能够搜寻到的装置的分区均列出来。

示例

出你系统中的根目录所在磁盘,并查阅该硬盘内的相关信息

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@www ~]# df /            <==注意:重点在找出磁盘文件名而已
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hdc2 9920624 3823168 5585388 41% /

[root@www ~]# fdisk /dev/hdc <==仔细看,不要加上数字喔!
The number of cylinders for this disk is set to 5005.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): <==等待你的输入!

输入 m 后,就会看到底下这些命令介绍

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Command (m for help): m   <== 输入 m 后,就会看到底下这些命令介绍
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition <==删除一个partition
l list known partition types
m print this menu
n add a new partition <==新增一个partition
o create a new empty DOS partition table
p print the partition table <==在屏幕上显示分割表
q quit without saving changes <==不储存离开fdisk程序
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit <==将刚刚的动作写入分割表
x extra functionality (experts only)

离开 fdisk 时按下 q,那么所有的动作都不会生效!相反的, 按下w就是动作生效的意思。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Command (m for help): p  <== 这里可以输出目前磁盘的状态

Disk /dev/hdc: 41.1 GB, 41174138880 bytes <==这个磁盘的文件名与容量
255 heads, 63 sectors/track, 5005 cylinders <==磁头、扇区与磁柱大小
Units = cylinders of 16065 * 512 = 8225280 bytes <==每个磁柱的大小

Device Boot Start End Blocks Id System
/dev/hdc1 * 1 13 104391 83 Linux
/dev/hdc2 14 1288 10241437+ 83 Linux
/dev/hdc3 1289 1925 5116702+ 83 Linux
/dev/hdc4 1926 5005 24740100 5 Extended
/dev/hdc5 1926 2052 1020096 82 Linux swap / Solaris
# 装置文件名 启动区否 开始磁柱 结束磁柱 1K大小容量 磁盘分区槽内的系统

Command (m for help): q

想要不储存离开吗?按下 q 就对了!不要随便按 w 啊!

使用 p 可以列出目前这颗磁盘的分割表信息,这个信息的上半部在显示整体磁盘的状态。

磁盘格式化

磁盘分割完毕后自然就是要进行文件系统的格式化,格式化的命令非常的简单,使用 mkfs(make filesystem) 命令。

语法:

1
mkfs [-t 文件系统格式] 装置文件名

选项与参数:

  • -t :可以接文件系统格式,例如 ext3, ext2, vfat 等(系统有支持才会生效)

示例

查看 mkfs 支持的文件格式

1
2
[root@www ~]# mkfs[tab][tab]
mkfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.msdos mkfs.vfat

将分区 /dev/hdc6(可指定你自己的分区) 格式化为 ext3 文件系统:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@www ~]# mkfs -t ext3 /dev/hdc6
mke2fs 1.39 (29-May-2006)
Filesystem label= <==这里指的是分割槽的名称(label)
OS type: Linux
Block size=4096 (log=2) <==block 的大小配置为 4K
Fragment size=4096 (log=2)
251392 inodes, 502023 blocks <==由此配置决定的inode/block数量
25101 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=515899392
16 block groups
32768 blocks per group, 32768 fragments per group
15712 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912

Writing inode tables: done
Creating journal (8192 blocks): done <==有日志记录
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
# 这样就创建起来我们所需要的 Ext3 文件系统了!简单明了!

磁盘检验

fsck(file system check)用来检查和维护不一致的文件系统。

若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查。

语法:

1
fsck [-t 文件系统] [-ACay] 装置名称

选项与参数:

  • -t : 给定档案系统的型式,若在 /etc/fstab 中已有定义或 kernel 本身已支援的则不需加上此参数
  • -s : 依序一个一个地执行 fsck 的指令来检查
  • -A : 对/etc/fstab 中所有列出来的 分区(partition)做检查
  • -C : 显示完整的检查进度
  • -d : 打印出 e2fsck 的 debug 结果
  • -p : 同时有 -A 条件时,同时有多个 fsck 的检查一起执行
  • -R : 同时有 -A 条件时,省略 / 不检查
  • -V : 详细显示模式
  • -a : 如果检查有错则自动修复
  • -r : 如果检查有错则由使用者回答是否修复
  • -y : 选项指定检测每个文件是自动输入yes,在不确定那些是不正常的时候,可以执行 # fsck -y 全部检查修复。

示例

强制检测 /dev/hdc6 分区:

1
2
3
4
5
6
7
8
9
[root@www ~]# fsck -C -f -t ext3 /dev/hdc6 
fsck 1.39 (29-May-2006)
e2fsck 1.39 (29-May-2006)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
vbird_logical: 11/251968 files (9.1% non-contiguous), 36926/1004046 blocks

如果没有加上 -f 的选项,则由于这个文件系统不曾出现问题,检查的经过非常快速!若加上 -f 强制检查,才会一项一项的显示过程。

磁盘挂载与卸除

Linux 的磁盘挂载使用 mount 命令,卸载使用 umount 命令。

磁盘挂载语法:

1
mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n]  装置文件名  挂载点
1
2
3
4
5
6
[root@www ~]# mkdir /mnt/hdc6
[root@www ~]# mount /dev/hdc6 /mnt/hdc6
[root@www ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
.....中间省略.....
/dev/hdc6 1976312 42072 1833836 3% /mnt/hdc6

磁盘卸载命令 umount 语法:

1
umount [-fn] 装置文件名或挂载点

选项与参数:

  • -f :强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情况下;
  • -n :不升级 /etc/mtab 情况下卸除。

卸载/dev/hdc6

1
[root@www ~]# umount /dev/hdc6     

Linux 系统中“一切皆文件”,所有文件都放置在以根目录为树根的树形目录结构中。在 Linux 看来,任何硬件设备也都是文件,它们各有自己的一套文件系统(文件目录结构)。

因此产生的问题是,当在 Linux 系统中使用这些硬件设备时,只有将Linux本身的文件目录与硬件设备的文件目录合二为一,硬件设备才能为我们所用。合二为一的过程称为“挂载”。

如果不挂载,通过Linux系统中的图形界面系统可以查看找到硬件设备,但命令行方式无法找到。

挂载,指的就是将设备文件中的顶级目录连接到 Linux 根目录下的某一目录(最好是空目录),访问此目录就等同于访问设备文件。

纠正一个误区,并不是根目录下任何一个目录都可以作为挂载点,由于挂载操作会使得原有目录中文件被隐藏,因此根目录以及系统原有目录都不要作为挂载点,会造成系统异常甚至崩溃,挂载点最好是新建的空目录。

举个例子,我们想通过命令行访问某个 U 盘中的数据,图 1 所示为 U 盘文件目录结构和 Linux 系统中的文件目录结构。

图 1 中可以看到,目前 U 盘和 Linux 系统文件分属两个文件系统,还无法使用命令行找到 U 盘文件,需要将两个文件系统进行挂载。

接下来,我们在根目录下新建一个目录 /sdb-u,通过挂载命令将 U 盘文件系统挂载到此目录,挂载效果如图 2 所示。

可以看到,U 盘文件系统已经成为 Linux 文件系统目录的一部分,此时访问 /sdb-u/ 就等同于访问 U 盘。

前面讲过,根目录下的 /dev/ 目录文件负责所有的硬件设备文件,事实上,当 U 盘插入 Linux 后,系统也确实会给 U 盘分配一个目录文件(比如 sdb1),就位于 /dev/ 目录下(/dev/sdb1),但无法通过 /dev/sdb1/ 直接访问 U 盘数据,访问此目录只会提供给你此设备的一些基本信息(比如容量)。

LVM

LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制。

为什么使用LVM

直接使用fdisk分区挂载的话,随着时间的推移,数据量越来越大,硬盘空间越来越小,要想扩充容量的话,就必须挂载新硬盘然后做数据迁移,这就必然导致前台业务的停止,不符合企业需求,因此完美的解决方法应该是在零停机前提下可以自如对文件系统的大小进行调整,可以方便实现文件系统跨越不同磁盘和分区。Linux提供的逻辑盘卷管理(LVM,Logical Volume Manager)机制就是一个完美的解决方案。

​ LVM逻辑卷管理通过将底层物理硬盘抽象封装起来,以逻辑卷的形式表现给上层系统,逻辑卷的大小可以动态调整,而且不会丢失现有数据。新加入的硬盘也不会改变现有上层的逻辑卷,大大提高了磁盘管理的灵活性。

LVM原理

先我们讨论以下几个LVM术语:

物理存储介质(The physical media****):这里指系统的存储设备:硬盘,如:/dev/hda、/dev/sda等等,是存储系统最低层的存储单元。

物理卷(physical volume****):物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。

卷组(Volume Group****):LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。

逻辑卷(logical volume****):LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。

PE(physical extent:每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。

LE(logical extent:逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

​ 一块硬盘(物理存储介质)被格式化为物理卷(physical volume),其内部被分成若干个默认大小为4M的PE(physical extent),然后在PV的基础上创建卷组(Volume Group),可以把一个或者多个PV加到VG中,VG就好像一个空间池,假如多少个PV,VG就有多大的容量,最后基于VG创建逻辑卷(logical volume) ,一个逻辑卷就是若干个PE,然后将LV格式化再挂载(将LV当成是分区)

​ 1、物理磁盘被格式化为PV,空间被分为一个个PE

​ 2、不同的PV加入同一个VG,不同PV的PE全部进入VG的PE池内

​ 3、LV基于PE创建,大小为PE的整数倍,组成LV的PE可能自来不同的物理磁盘

​ 4、LV现在就直接可以格式化后挂载使用了

​ 5、LV的扩充缩减实际上就是增加或减少组成该LV的PE的数量,其过程不会丢失数据

LVM常用命令

lvdisplay(显示当前的 logical volume)

vgdisplay(显示当前的 volume group)

备注: 注意 VG SIZE,这里应该是你当前的可用空间大小,待扩容完毕,这里显示的应该是最终的大小

pvdisplay(显示当前的 physical volume)

LVM扩容