Linux入门

Linux系统启动过程

Linux系统如何启动

BIOS开始,进入Boot Loader,再加载系统内核,再进行系统内核的初始化,最后再初始化进程。

BIOS---> Boot Loader---> 加载内核--->系统内核初始化--->进程初始化


初始化工作包含

  • 挂载文件系统
  • 交换分区
  • 启动各类进程服务

利用systemctl管理服务(RHEL 7)

  • 启动、重启、停止服务:systemctl start/restart/stop foo.service
  • 查看服务:systemctl status foo.service
  • 设置开机启动/不启动:systemctl enable/disable/ foo.service
  • 查看特定服务是否是开机自启动:systemctl is-enabled foo.service

5种进程

  • 运行:R,进程在运行或者等待中
  • 中断:S,进程处于休眠状态,当条件形成,脱离该状态
  • 不可中断:D,进程不响应系统异步信号,用kill也不能中断
  • 僵死:Z,进程已经终止,但进程描述符仍然存在,调用父进程wait4()系统函数后将进程释放
  • 停止:T,进程收到停止信号后,停止运行

常用命令

init命令

  • init 0:关机,halt(centos7中关机不断电)、poweroff、shutdown
  • init 1:单用户模式,只用root进行维护
  • init 2:多用户模式
  • init 3:字符界面
  • init 4:安全模式
  • init 5:图形界面
  • init 6:重启

系统工作命令

  • 显示日期:date[HIMSj]:24小时制,12小时制,分钟,秒,一年中的第几天
  • 关机和重启命令:
  • 查看系统进程:ps,常用ps aux
  • 监视进程活动和系统负载信息:top,三个时间是:1,5,15分钟的平均值
  • 某个服务进程的ID号:pidof
  • 杀死进程:kill id, killall
  • 获取网卡配置和网络信息:ifconfig,包含:网卡名称,IP地址,MAC地址,接收和发送的数据包等信息
  • 查看内核和系统版本信息:uname -a
  • 查看系统的平均负载信息:uptime,三个时间信息分别代表的是1,5,15分钟
  • 查看内存的使用量:free -h,包含total、used、free、shared
  • 查看系统的登录信息和显示执行过的命令记录:last、history

工作目录命令

  • 显示当前目录:pwd
  • 切换目录:cd
    • cd -:上次的目录
    • cd ..:上级目录
    • cd ~:家目录
    • cd --:家目录
  • 显示文本信息:cat、more、less、head、tail
  • 替换文件中的信息:tr,tr [source] [object]
  • 显示统计指定文本的行数l、字数w和字节数c:wc -lwc
  • 查看文件信息:stat, stat filename
  • 提取文本字符:cut
  • 显示目录中的全部文件信息:ls -al
image.png

用户身份及权限

用户身份

  • 管理员的UID为0:系统的管理员用户,一般情况是root。
  • 系统用户UID为1-999:Linux系统中默认服务程序会有独立的系统用户负责运行。
  • 普通用户UID只能从1000开始:由管理员创建的用于日常工作的用户。
  • 为了方便管理属于同一组的用户,Linux系统中引入用户组的概念,通过GID将多个用户加到同一用户组中。
  • 创建每个用户时,自动为其分配一个与其同名的基本用户组,而且这个基本用户只有该用户一个人。
  • 若用户被分配到另一个组,则“另一个组”称为扩展用户组
  • 一个用户只属于一个基本用户组,但可以属于多个扩展用户组

useradd命令

  • 创建新的用户,默认的用户家目录会被存放在/home目录中。
  • 参数及其作用
参数 作用
d 指定用户的家目录
u 指定用户默认的UID
g 指定一个初始的用户基本组
s 指定用户默认的bash解释器
G 指定一个或者多个扩展用户组

groupadd命令

  • 创建用户组
  • 将几个用户加到同一个组里面,统一安排权限

usemod命令

  • usermod命令用于改变用户的属性
  • 用户的信息保存在/etc/passwd文件中,可以在文件中直接修改用户参数的相关信息
  • 参数及其作用
参数 作用
c 填写用户组的备注信息
g 变更所属用户组
G 变更扩展用户组
U 解锁用户,允许其登录系统
s 变更默认终端
u 修改用户的UID

passwd命令

  • passwd命令用于修改用户密码、过期时间、认证信息等

  • 普通用户只能使用passwd命令来修改自身的系统密码 sudo passwd root

  • root 账户有权限修改其他用户的密码


passwd文件

/etc/passwd 文件用于存放用户的信息,由6个分号组成的7个信息

  1. 用户名
  2. 密码
  3. UID 用户标识
  4. GID 组标识符
  5. 用户全名或者本地账号
  6. 家目录
  7. 登录使用的shell,默认是bash

切换用户

  • su - 用户名:切换用户,并且切换目录
  • su :直接切换到root账户,不建议,不安全
  • exit :退出当前用户

权限

Linux中一切皆是文件。每个文件的类型不同,Linux采用不同的符号加以区分。

  • -普通文件
  • d 目录文件
  • l 链接文件
  • b 块设备文件
  • c 字符设备文件
  • p 管道文件

  • Linux系统中,每个文件都有所属的所有者和所有组
  • 规定了文件的所有者、所有组以及其他人对文件的读/写/执行的权限,它们对文件/目录的权限包括:
  1. 可读:能够读取文件的实际内容
  2. 可写:表示对文件进行编辑、新增、修改、删除等操作
  3. 可执行:能够执行一个脚本程序
序号 权限 英文 缩写 数字代号
01 read r 4
02 write w 2
03 执行 excute x 1

修改权限

序号 命令 作用
01 chown 修改拥有者
02 chgrp 修改组
03 chmod 修改权限
  • 命令格式
# chown 用户名 文件名|目录名
# chgrp -R 组名 文件名|目录名
# chmod -R 755 文件名|目录名
  • chmod 命令在设置权限时,可以直接使用三个数字对应 拥有者/组/其他用户 的权限。
  • 简单示例:

755 ---->rwxr-xr-x

643 ---->rw-r---wx

136 ---->--x-wxrw-

总结:每3位一组,根据二进制进行计算


文件管理

  • 创建新的文件或者设置文件的时间:touch
  • 创建空白目录:mkdir,递归创建-p
  • 复制、剪切(重命名)、删除、查看文件类型:cp、mv、rm、file
  • 按照指定大小和个数的数据块来复制文件和转换文件:dd
  • 打包/解析命令:tar -czvftar -xzvf
    • tar -czvf etc.tar.gz /etc
    • tar xzvf /root/etc
  • 执行关键词搜索:grep,忽略大小写i,显示行号n,反选v
  • 查找大文件:find,find /etc -name "host" -print:查找/etc目录下的host文件并且打印

软硬链接

Linux中链接分为两种,一种是硬链接 Hard link,一种是软链接 Symbolic link。默认情况下,ln命令产生硬链接。链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。

硬链接

  • Linux 的文件系统中,保存在磁盘分区中的文件都被分配一个编号,称为索引节点号(Inode Index)。硬连接指通过索引节点来进行连接。
  • 硬链接是有相同的inode,仅文件名不同的文件。
  • 删除一个硬链接文件不影响其他具有相同inode的文件。文件真正删除的条件是与之相关的所有硬连接文件均被删除。

软连接

  • 另一种连接称之为符号连接(Symbolic Link),也叫软连接。
  • 软链接文件有类似于 Windows 的快捷方式。它实际上是一个特殊的文件。
  • 软链接有自己的文件属性及权限等;
  • 可对不存在的文件或目录创建软链接;
  • 软链接可交叉文件系统;
  • 若A 是 B 的软链接(A 和 B 都是文件名),A 与 B 的目录项中 inode 节点号不相同,A 和 B 指向的是两个不同的inode,继而指向两块不同的数据块。如果B 被删除了,A仍存在(因为两个是不同的文件),但指向的是一个无效的链接。
root@peter:~# touch f1           # 创建文件f1
root@peter:~# ln f1 f2             # 创建硬链接f2
root@peter:~# ln -s f1 f3         # 创建软链接f3 

总结:
1、删除f1,f2不变,f3消失
2、删除f2或者f3,对另外两个没有影响
3、删除1和2,整个文件才会被真正地删除

逻辑卷LVM

LVM 逻辑卷管理是Linux环境下对磁盘分区进行管理的一种机制;LVM建立在硬盘和分区之上的一个逻辑层,用于提高磁盘分区管理的灵活性。

  • 通过LVM系统管理员可以便捷地管理磁盘分区,如:将若干个磁盘分区连接为一个整块的卷组(volume group),形成一个存储池;并且在卷组的基础上创建文件系统(命名文件和放置文件的逻辑存储和恢复系统)。
  • 管理员可以方便地通过LVM调整存储卷组的大小,可以按照组的方式进行命令、管理和分配,例如按照用途“development”等进行命名,而不是使用“sda”等磁盘名。

逻辑分区的创建顺序:物理分区 > 物理卷 > 卷组 > 逻辑卷 > 挂载

硬盘的分区机制主要分为两种:MBR和GPT
只有在MBR分区机制下才存在主分区、扩展分区、逻辑分区的概念。

MBR

  • 主引导扇区:512个字节,主引导记录(446)+分区表(64)+结束标志(2)
  • 主分区:主引导分区也叫做主分区,每个分区对象占据16个字节;一块硬盘最对4个分区
  • 扩展分区:最多一个,也是主分区的一种,可以划分出无数个逻辑分区
  • 逻辑分区:编号必须从5开始,利用链表进行链接;是由扩展分区切割出来的分区

分区方式: 确保至少一个主分区,主分区最多4个,扩展分区最多1个,二者的编号只能从1-4;逻辑分区的文件名编号只能从5开始:

GPT

  • 全局唯一标识分区表(GUID Partition Table, GPT),新的分区管理机制.
  • 解决了MBR的缺点:支持超过2T的硬盘,兼容MBR,不存在扩展分区和逻辑分区,只有主分区,支持分区数目最多可有128个。
  • GPT分区区域就是用户使用的分区,也是用户进行数据存储的区域。分区区域的起始地址和结束地址由GPT头定义。

LVM原理

image.png
  • 在传统的磁盘管理机制,上层应用直接访问文件系统,从而对底层的物理硬盘进行读取;
  • 在LVM中,通过底层硬盘的封装,当需要对物理硬盘进行操作时,不再对分区直接进行操作,而是通过LVM对底层的磁盘进行操作。
  • LVM将存储虚拟化,使用逻辑卷,不受限于物理磁盘的大小。

LVM 优点

  1. 灵活的容量:当使用逻辑卷,文件系统能够扩展到多个磁盘上,能够将多个磁盘或者磁盘分区成单一的逻辑卷;
  2. 存储池的伸缩性强:通过命令的形式来扩大或缩小逻辑卷大小,不必重新格式化分区或者磁盘设备;
  3. 设备命令方便:用户能够根据适合自身的方式进行设备命名;
  4. 数据再分配:数据能够在磁盘在线的情况下进行移动和分配;
  5. 卷快照:使用逻辑卷获得设备快照,用来一致性备份或者测试数据更新效果而不影响真实数据。
  6. 逻辑卷的大小可以动态管理,不会丢失现有数据,提高磁盘管理的灵活性。

LVM术语

  • 物理存储介质(PM:The Physical Media)
  • 物理卷 (PV:Physical Volume)
  • 卷组(VG: Volume Group)
  • 逻辑卷(LV, Logical Volume)
  • 线性逻辑卷 (Linear Volumes)
  • 物理单元 PE(physical extent)
  • 逻辑单元 LE(logical extent)

LVM实现过程

  • 通过fdisk工具将磁盘转换成Linux分区;
  • 通过pvcreate命令将Linux分区转换成物理卷(PV);
  • 通过vgcreate命令将建好的物理卷处理成卷组(VG);
  • 通过lvcreate命令将卷组分成逻辑卷(LV);
su - root   # 切换到root账户
fdisk -l   # 查看磁盘阵列的基本信息
fdisk /dev/sdc   # 选中未分区的磁盘,进行分区
Command (m for help): m    # 分区命令帮助
Command (m for help): n    # 创建新的分区
Select (default p): p      # 选择p(primary)创建主分区 
Partition number (1-4, default 1): 1    # 分区编号,主分区从1开始
First sector (2048-35643391, default 2048):   # 柱面起止位置,直接默认值
Command (m for help): t    # 设置分区的系统id号
Command (m for help):w     # 将分区信息写入分区表,保存并退出fdisk命令

# 重启
fdisk -l   # 查看分区信息
pvcreate /dev/sdc1    # 创建物理卷
pvcreate /dev/sdc2
pvcreate /dev/sdc3

# 创建卷组和扩容
vgcreate vg1 /dev/sdc1 /dev/sdc2 /dev/sdc3  # vg1 是创建的卷组设备名称
vgdisplay vg1                 # 查看卷组 
vgchange -a y vg1         # 激活逻辑卷
vgremove  vg1             # 删除卷组
vgextend vg1 /dev/sdc1   # 通过物理磁盘sdc1扩容
pvresize /dev/md         # 通过raid设备间接扩容

# 创建逻辑卷
lvcreate -L 100M -n lv1 vg1  # 创建逻辑卷
lvextend -L +1G /dev/vg1/lv1 # LV扩容,增加1G容量
resize2fs /dev/vg1/lv1       # 文件系统扩容

umount /dev/vg1/lv           # 删除需先卸载
lvremove /dev/vg1/lv1        # 删除逻辑卷

# 格式化
mkfs.ext4 /dev/vg1/lv1      # 格式化为ext4的文件系统

# 挂载
mount /dev/vg1/lv1 /mnt/    # /mnt/ 为挂载目录
df -h                       # 查看挂载状态及硬盘信息 
df -TH                      # 查看实际磁盘容量

什么是挂载: 当用户需要使用硬盘设备或者分区中的数据时,需要先将其与一个已存在的目录文件进行关联,这个动作称之为挂载。

推荐阅读更多精彩内容