鸟哥私房菜9-16章
总结
第九章:Vim 程序编辑器
-
特点:Vim 是 Vi 编辑器的升级版,具有强大的功能和丰富的插件系统。
-
模式:Vim 有多种模式,包括普通模式、插入模式和命令行模式。
-
基本操作:在普通模式下,可以进行光标移动、复制粘贴、删除等操作。
-
插入模式:在插入模式下可以输入文本,按下
i
进入插入模式。 -
命令行模式:在命令行模式下可以执行命令,如保存、退出、搜索等。
-
快捷键:Vim 使用快捷键来提高编辑效率,如
yy
复制一行、dd
删除一行等。 -
搜索与替换:可以使用
/
开始搜索,:s/old/new/g
进行替换。 -
多窗口操作:Vim 支持分屏和多窗口编辑,方便同时编辑多个文件。
-
插件系统:Vim 的插件系统丰富,可以根据需求安装插件来扩展功能。
第十章:认识学习 Bash
-
Bash 简介:Bash 是 Linux 系统默认的 Shell,是一种命令行解释器,也是一种脚本语言解释器。
-
Shell 基础:
Shell 是用户与 Linux 内核之间的接口,允许用户输入命令与系统进行交互。
Bash 提供了许多功能,如变量、条件语句、循环结构等,使得编写脚本更加方便。
-
Bash 基本语法:
变量:在 Bash 中使用
variable_name=value
的语法定义变量。条件语句:使用
if..then..else..fi
结构进行条件判断。循环结构:可以使用
for
、while
等关键字实现循环操作。 -
Shell 脚本编写:
编写 Shell 脚本可以用来自动化重复性任务,提高工作效率。
Shell 脚本可以包含命令序列、条件判断、函数定义等。
-
常用命令:
echo
:用于输出文本或变量的内容。read
:用于从标准输入读取用户输入。if
:条件判断语句。for
、while
:循环结构语句。function
:定义函数。 -
脚本示例:通过示例演示如何编写简单的 Bash 脚本,例如输出 Hello World、实现简单的循环等常见操作。
第十一章:正则表达式
-
基本元字符:
.
:匹配任意字符。*
:匹配前一个字符的零个或多个实例。+
:匹配前一个字符的一个或多个实例。[]
:匹配括号中任意一个字符。^
:匹配行的开头。$
:匹配行的结尾。 -
常见用法:
在文本编辑器中进行搜索和替换操作。
在命令行中进行文件内容的筛选和匹配。
在脚本中进行文本处理和格式化。
-
特殊字符:
\d
:匹配数字字符。\w
:匹配字母、数字或下划线字符。\s
:匹配空白字符。\b
:匹配单词边界。 -
量词:
{n}
:匹配前一个字符恰好 n 次。{n,}
:匹配前一个字符至少 n 次。{n,m}
:匹配前一个字符至少 n 次,最多 m 次。 -
分组与引用:
使用
()
进行分组,可以对匹配的内容进行分组操作。使用
\1
、\2
等来引用分组匹配的内容。 -
其他特性:
|
:表示或操作,匹配多个模式中的任意一个。()
:用于分组操作,影响操作符的优先级。\
:用于转义特殊字符。
第十二章:正则表达式
shell script 是利用 shell 的功能所写的一个“程序 (program)”,这个程序是使用纯文本文件,将一些 shell 的语法与指令(含外部指令)写在里面, 搭配正则表达式、管线命令与数据流重导向等功能,以达到我们所想要的处理目的
• shell script 用在系统管理上面是很好的一项工具,但是用在处理大量数值运算上, 就不够好了,因为 Shell scripts 的速度较慢,且使用的 CPU 资源较多,造成主机资源的分配不良。
• 在 Shell script 的文件中,指令的执行是从上而下、从左而右的分析与执行;
• shell script 的执行,至少需要有 r 的权限,若需要直接指令下达,则需要拥有 r 与 x 的权限;
• 良好的程序撰写习惯中,第一行要宣告 shell (#!/bin/bash) ,第二行以后则宣告程序用途、版本、作者等
• 对谈式脚本可用 read 指令达成;
• 要创建每次执行脚本都有不同结果的数据,可使用 date 指令利用日期达成;
• script 的执行若以 source 来执行时,代表在父程序的 bash 内执行之意!
• 若需要进行判断式,可使用 test 或中括号 ( [] ) 来处理;
• 在 script 内,$0, $1, $2..., $@ 是有特殊意义的!
• 条件判断式可使用 if...then 来判断,若是固定变量内容的情况下,
可使用 case $var in ... esac 来处理
• 循环主要分为不定循环 (while, until) 以及固定循环 (for) ,配合 do, done 来达成所需任务!
• 我们可使用 sh -x script.sh 来进行程序的 debug
第十三章:Linux 帐号管理与 ACL 权限设置
Linux 操作系统上面,关于帐号与群组,其实记录的是 UID/GID 的数字而已;
• 使用者的帐号/群组与 UID/GID 的对应,参考 /etc/passwd 及 /etc/group 两个文件
• /etc/passwd 文件结构以冒号隔开,共分为七个字段,分别是“帐号名称、密码、UID、GID、全名、主文件夹、shell”
• UID 只有 0 与非为 0 两种,非为 0 则为一般帐号。一般帐号又分为系统帐号 (1~999) 及可登陆者帐号 (大于 1000)
• 帐号的密码已经移动到 /etc/shadow 文件中,该文件权限为仅有root 可以更动。该文件分为九个字段,内容为“ 帐号名称、加密密码、密码更动日期、密码最小可变动日期、密码最大需变动日期、密码过期前警告日数、密码失效天数、 帐号失效日、保留未使用”
• 使用者可以支持多个群组,其中在新建文件时会影响新文件群组者,为有效群组。而写入 /etc/passwd 的第四个字段者, 称为初始群组。
• 与使用者创建、更改参数、删除有关的指令为:useradd, usermod,userdel等,密码创建则为 passwd;
• 与群组创建、修改、删除有关的指令为:groupadd, groupmod,groupdel 等;
• 群组的观察与有效群组的切换分别为:groups 及 newgrp 指令;
• useradd 指令作用参考的文件有: /etc/default/useradd, /etc/login.defs, /etc/skel/ 等等
• 观察使用者详细的密码参数,可以使用“ chage -l 帐号 ”来处理;
• 使用者自行修改参数的指令有: chsh, chfn 等,观察指令则有:id, finger 等
• ACL 的功能需要文件系统有支持,CentOS 7 默认的 XFS 确实有支
持 ACL 功能!
• ACL 可进行单一个人或群组的权限管理,但 ACL 的启动需要有文
件系统的支持;
• ACL 的设置可使用 setfacl ,查阅则使用 getfacl ;
• 身份切换可使用 su ,亦可使用 sudo ,但使用 sudo 者,必须先以
visudo 设置可使用的指令;
• PAM 模块可进行某些程序的验证程序!与 PAM 模块有关的配置文件位于 /etc/pam.d/* 及 /etc/security/*
• 系统上面帐号登陆情况的查询,可使用 w, who, last, lastlog 等;
• 线上与使用者交谈可使用 write, wall,离线状态下可使用 mail 传送邮件!
第十四章:磁盘配额(Quota)与进阶文件系统管理
Quota 可公平的分配系统上面的磁盘容量给使用者;分配的资源可
以是磁盘容量(block)或可创建文件数量(inode);
• Quota 的限制可以有 soft/hard/grace time 等重要项目;
• Quota 是针对整个 filesystem 进行限制,XFS 文件系统可以限制目录!
• Quota 的使用必须要核心与文件系统均支持。文件系统的参数必须
含有 usrquota, grpquota, prjquota
• Quota 的 xfs_quota 实作的指令有 report, print, limit, timer... 等指令;
• 磁盘阵列 (RAID) 有硬件与软件之分,Linux 操作系统可支持软件磁盘阵列,通过 mdadm 套件来达成;
• 磁盘阵列创建的考虑依据为“容量”、“性能”、“数据可靠性”等;
• 磁盘阵列所创建的等级常见有的 raid0, raid1, raid1+0, raid5 及raid6
• 硬件磁盘阵列的设备文件名与 SCSI 相同,至于 software RAID 则为 /dev/md[0-9]
• 软件磁盘阵列的状态可借由 /proc/mdstat 文件来了解;
• LVM 强调的是“弹性的变化文件系统的容量”;
• 与 LVM 有关的元件有: PV/VG/PE/LV 等元件,可以被格式化者为 LV
• 新的 LVM 拥有 LVM thin volume 的功能,能够动态调整磁盘的使用率!
• LVM 拥有快照功能,快照可以记录 LV 的数据内容,并与原有的LV 共享未更动的数据,备份与还原就变的很简单;
• XFS 通过 xfs_growfs 指令,可以弹性的调整文件系统的大小
RAID分区
RAID5分区
[root@localhost opt]# ls /dev/[sh]d*
/dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf
[root@localhost opt]# fdisk -l
Disk /dev/sda:50 GiB,53687091200 字节,104857600 个扇区
磁盘型号:QEMU HARDDISK
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x2a2bc353
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/sda1 * 2048 2099199 2097152 1G 83 Linux
/dev/sda2 2099200 104857599 102758400 49G 8e Linux LVM
Disk /dev/mapper/rl-root:45.04 GiB,48364519424 字节,94461952 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
Disk /dev/mapper/rl-swap:3.95 GiB,4244635648 字节,8290304 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
Disk /dev/sdb:1 GiB,1073741824 字节,2097152 个扇区
磁盘型号:QEMU HARDDISK
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
Disk /dev/sdc:1 GiB,1073741824 字节,2097152 个扇区
磁盘型号:QEMU HARDDISK
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
Disk /dev/sdd:1 GiB,1073741824 字节,2097152 个扇区
磁盘型号:QEMU HARDDISK
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
Disk /dev/sde:1 GiB,1073741824 字节,2097152 个扇区
磁盘型号:QEMU HARDDISK
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
Disk /dev/sdf:1 GiB,1073741824 字节,2097152 个扇区
磁盘型号:QEMU HARDDISK
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
[root@localhost opt]# fdisk mdadm --create /dev/md0 --level=5 --raid-devices=5 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf
fdisk:未识别的选项 ‘--create’
请尝试执行“fdisk --help”了解更多信息。
[root@localhost opt]# mdadm --create /dev/md0 --level=5 --raid-devices=5 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@localhost opt]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdf[5] sde[3] sdd[2] sdc[1] sdb[0]
4186112 blocks super 1.2 level 5, 512k chunk, algorithm 2 [5/5] [UUUUU]
unused devices: <none>
[root@localhost opt]# gdisk -l /dev/
Display all 170 possibilities? (y or n)
[root@localhost opt]# gdisk -l /dev/*
GPT fdisk (gdisk) version 1.0.7
Usage: gdisk [-l] device_file
[root@localhost opt]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 49G 0 part
├─rl-root 253:0 0 45G 0 lvm /
└─rl-swap 253:1 0 4G 0 lvm [SWAP]
sdb 8:16 0 1G 0 disk
└─md0 9:0 0 4G 0 raid5
sdc 8:32 0 1G 0 disk
└─md0 9:0 0 4G 0 raid5
sdd 8:48 0 1G 0 disk
└─md0 9:0 0 4G 0 raid5
sde 8:64 0 1G 0 disk
└─md0 9:0 0 4G 0 raid5
sdf 8:80 0 1G 0 disk
└─md0 9:0 0 4G 0 raid5
sr0 11:0 1 8.8G 0 rom
[root@localhost opt]# mount /dev/md0 /home/
mount: /home: 文件系统类型错误、选项错误、/dev/md0 上有坏超级块、缺少代码页或帮助程序或其他错误.
mount: (hint) your fstab has been modified, but systemd still uses
the old version; use 'systemctl daemon-reload' to reload.
[root@localhost opt]# mkf
mkfifo mkfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.minix mkfs.xfs
[root@localhost opt]# mkf
mkfifo mkfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.minix mkfs.xfs
[root@localhost opt]# mkfs.ext4 /dev/md0
filebeat-8.10.4-x86_64.rpm grafana-enterprise-10.4.6-1.x86_64.rpm http_ca.crt shell.sh sync_beijing_time.sh
[root@localhost opt]# mkfs.ext4 /dev/md0
mke2fs 1.46.5 (30-Dec-2021)
创建含有 1046528 个块(每块 4k)和 261632 个inode的文件系统
文件系统UUID:bc63e4a3-963d-4249-b208-f5e75df34b91
超级块的备份存储于下列块:
32768, 98304, 163840, 229376, 294912, 819200, 884736
正在分配组表: 完成
正在写入inode表: 完成
创建日志(16384 个块)完成
写入超级块和文件系统账户统计信息: 已完成
[root@localhost opt]# mount /dev/md0 /home/
mount: (hint) your fstab has been modified, but systemd still uses
the old version; use 'systemctl daemon-reload' to reload.
[root@localhost opt]# ls
filebeat-8.10.4-x86_64.rpm grafana-enterprise-10.4.6-1.x86_64.rpm http_ca.crt shell.sh sync_beijing_time.sh
[root@localhost opt]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 1.8G 0 1.8G 0% /dev/shm
tmpfs 733M 88M 646M 12% /run
/dev/mapper/rl-root 46G 2.8G 43G 7% /
/dev/sda1 1014M 220M 795M 22% /boot
tmpfs 367M 0 367M 0% /run/user/0
/dev/md0 3.9G 24K 3.7G 1% /home
第十五章:例行性工作调度(crontab)
系统可以通过 at 这个指令来调度单一工作的任务!“at TIME”为指令下达的方法,当 at 进入调度后, 系统执行该调度工作时,会到下达时的目录进行任务;
• at 的执行必须要有 atd 服务的支持,且 /etc/at.deny 为控制是否能够执行的使用者帐号;
• 通过 atq, atrm 可以查询与删除 at 的工作调度;
• batch 与 at 相同,不过 batch 可在 CPU 工作负载小于 0.8 时才进行后续的工作调度;
• 系统的循环例行性工作调度使用 crond 这个服务,同时利用crontab -e 及 /etc/crontab 进行调度的安排;
• crontab -e 设置项目分为六栏,“分、时、日、月、周、指令”为其设置依据;
• /etc/crontab 设置分为七栏,“分、时、日、月、周、执行者、指令”为其设置依据;
• anacron 配合 /etc/anacrontab 的设置,可以唤醒停机期间系统未进行的 crontab 任务!
第十六章:程序管理与 SELinux 初探
程序 (program):通常为 binary program ,放置在储存媒体中如硬盘、光盘、软盘、磁带等),为实体文件的型态存在;
• 程序 (process):程序被触发后,执行者的权限与属性、程序的程序码与所需数据等都会被载入内存中, 操作系统并给予这个内存内的单元一个识别码 (PID),可以说,程序就是一个正在运行中的程序。
• 程序彼此之间是有相关性的,故有父程序与子程序之分。而 Linux系统所有程序的父程序就是 init 这个 PID 为 1 号的程序。
• 在 Linux 的程序调用通常称为 fork-and-exec 的流程!程序都会借由父程序以复制 (fork) 的方式产生一个一模一样的子程序, 然
后被复制出来的子程序再以 exec 的方式来执行实际要进行的程序,最终就成为一个子程序的存在。
• 常驻在内存当中的程序通常都是负责一些系统所提供的功能以服务使用者各项任务,因此这些常驻程序就会被我们称为:服务(daemon)。
• 在工作管理 (job control) 中,可以出现提示字符让你操作的环境就称为前景 (foreground),至于其他工作就可以让你放入背景(background) 去暂停或运行。
• 与 job control 有关的按键与关键字有: &, [ctrl]-z, jobs, fg, bg,kill %n 等;
• 程序管理的观察指令有: ps, top, pstree 等等;
• 程序之间是可以互相控制的,传递的讯息 (signal) 主要通过 kill这个指令在处理;
• 程序是有优先顺序的,该项目为 Priority,但 PRI 是核心动态调整的,使用者只能使用 nice 值去微调 PRI
• nice 的给予可以有: nice, renice, top 等指令;
• vmstat 为相当好用的系统资源使用情况观察指令;
• SELinux 当初的设计是为了避免使用者资源的误用,而 SELinux 使用的是 MAC 委任式存取设置;
• SELinux 的运行中,重点在于主体程序 (Subject) 能否存取目标文件资源 (Object) ,这中间牵涉到政策 (Policy) 内的规则,以及实际的安全性本文类别 (type);
• 安全性本文的一般设置为:“Identify:role:type”其中又以 type 最重要;
• SELinux 的模式有: enforcing, permissive, disabled 三种,而启动的政策 (Policy) 主要是 targeted
• SELinux 启动与关闭的配置文件在: /etc/selinux/config
• SELinux 的启动与观察: getenforce, sestatus 等指令
• 重设 SELinux 的安全性本文可使用 restorecon 与 chcon
• 在 SELinux 有启动时,必备的服务至少要启动 auditd 这个!
• 若要管理默认的 SELinux 布林值,可使用 getsebool, setsebool 来管理!
本文来自博客园,作者:{Rohin},转载请注明原文链接:https://www.cnblogs.com/Rohing/articles/18406982