1、总结文本编辑工具vim的使用方法;

全屏幕的编辑器:VIM

    vim:

       模式化:

           编辑模式:命令模式

           输入模式:

           末行模式:

       编辑模式 --> 输入模式:

           i: insert,

           a:append,

           o:new line,

           I: 行首

           A:行尾

           O:上方新建行

       输入模式 --> 编辑模式:

           ESC

       编辑模式 --> 末行模式:

           :

       末行模式 --> 编辑模式

           ESC

    关闭vim:

        :q 退出

       :q! 强制退出,不保存

       :wq 保存退出

       :x

 

       ZZ:保存退出

 

    光标跳转:

       字符间跳转:

           h:

           l:

           j:

           k:

           #COMMAND:

 

       单词间跳转:

           w:后单词的词首

           e:当前或后一个单词的词尾;

           b:当前或前一单词的词首;

 

           #COMMAND

 

       行内跳转:

           ^: 跳转至行首的第一个非空白字符;

           0:跳转至行首;

           $: 跳转至行尾;

 

       行间移动:

           #G:

           1G, gg

           G

 

       句间移动:

           )

           (

 

       段落间移动:

           }

           {

 

    编辑命令:

 

       字符编辑:

           x: 删除光标所在处的字符

           #x:

 

           xp:

 

           r: 替换光标所在处的字符;

 

       删除命令:

           d:

              d^

              d$

              d0

              dw, de, db

           dd:

           #COMMAND

           注意:删除的内容会被vim编辑器保存至缓冲区当中;

       粘贴:p (paste, put)

           如果此复制或删除的内容不是一个完整行

              p:粘贴至当前光标所在处后面;

           P:粘贴至当前光标所在处前面;

           如果复制的内容是完整行(可不止一行)

              p: 粘贴至当前光标所在行下方;

              P:行上方;

       复制命令:y, yank

           y

              y$, y^, y0

              ye, yw, yb

           yy: 复制行

           #COMMAND

       改变命令:c, change

           c$, c^, c0

           cb, ce, cw

           cc:

           #COMMAND

    撤消此前的编辑操作:

       u: undo

           撤消此前编辑操作;

           #u

       Ctrl+r

           恢复此前的撤消操作

       .: 重复前一个编辑操作

    翻屏操作:

       Ctrl+f: 向后一屏;

       Ctrl+b:向前一屏;

       Ctrl+d: 向后半屏

       Ctrl+u: 向前半屏

 

 

       (2) 查找

           /PATTERN:向尾部进行

           ?PATTERN:向首部进行

              n: 与命令同方向

              N:与命令反方向

 

       (3) 查找替换

           s: 在末行模式下,在地址定界的范围内完成查找替换操作;

              s/要查找的内容/替换为的内容/修饰符

                  要查找的内容:可使用模式

                  替换为的内容:不能使用模式,但可以使用后向引用符号,以引用前面模式中的分组括号所匹配到的内容;

                     \1, \2, ...

                     &:引用“要找的内容”匹配到的整个内容;

                  修饰符:

                     i: 忽略大小写

                     g: 全局替换

 

              /:用于分隔符,所以,要查找的内容或替换为的内容中出现此符号,要使用\对其转义,使用格式:\/

                  分隔符可替换为其它字符:例如@,#等;

 

    多文件模式:

       vim FILE1 FILE2 ...

           :next

           :first

           :prev

           :last

 

           :wqall

           :q!all

 

    多文件窗口分割:

       vim -o|-O FILE1 FILE2 ...

       Ctrl+w, ARROW

    单文件窗口分割:

       Ctrl+w, s: split, 水平分割

       Ctrl+w, v: vertical, 垂直分割

    定制vim的某些工作特性:

       (1) 行号

           显示:set nu

           禁用:set nonu

       (2) 括号匹配

           显示:set sm

           禁用:set nosm

       (3) 自动缩进:

           set ai

           set noai

       (4) 高亮搜索

           set hlsearch

           set nohlsearch

       (5) 语法着色

           syntax on

           syntax off

       (6) 忽略字符大小写

           set ic

           set noic

2、总结文件查找命令find的使用方法;

find命令:

       find [OPTION]... [查找路径] [查找条件] [处理动作]

           查找路径:默认为当前路径;

           查找条件:指定的查找标准,可以根据文件名、大小、属主属组、类型等进行;默认为找出指定路径下的所有文件;

           处理动作:对符合条件的文件做什么操作;默认为输出至屏幕;

       查找条件:

           根据文件名进行查找:

               -name "文件名称": 支持使用glob;

                  *, ?, []

               -iname "文件名称":不区分字符大小写,支持使用glob;

               -regex"PATTERN":以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称;

           根据属主、属组查找:

              -user USERNAME: 查找属主为指定用户的文件;

              -group GROUPNAME:

              -uid UserID: 查找文件的属主指定uid的文件;

              -gid GroupID:

              -nouser: 查找没有属主的文件;

              -nogroup:查找没有属组的文件;

           根据文件类型进行查找:

              -type TYPE

                  f: 普通文件

                  d: 目录

                  l: 符号链接

                  b: 块设备

                  c: 字符设备

                  p: 命名管道

                  s: 套接字

           组合查找条件:

              与条件:-a

              或条件:-o

              非条件:-not,!

              !A -o !B = !(A -a B)

              !A -a !B = !(A -o B)

           根据文件大小来查找:

              -size [+|-]#UNIT

                  单位:k, M,G

                  #UNIT: (#-1,#]

                  +#UNIT:(#,+oo)

                  -#UNIT:[0,#-1]

           根据时间戳:

              以“天”为单位

                  -atime [+|-]#

                     #:[#,#+1)

                     +#: [#+1,oo]

                     -#: [0,#)

                  -mtime

                  -ctime

              以“分钟”为单位

                  -amin

                  -mmin

                  -cmin

           根据权限:

              -perm [/|-]MODE

                  MODE: 精确权限匹配

                  /MODE:任何一类对象(u,g,o)的任何一位权限符合条件即可;隐含或条件;

                     /400

                  -MODE:为每一类对象指定的每一位权限都必须同时存在方为符合条件;隐含与条件;

       处理动作:

           -print: 默认处理动作

           -ls:类似于对查找到的每个文件做"ls -l"的操作;

           -delete: 删除查找到的文件;

           -fls /path/to/somefile:查找到的文件的详细路径信息保存至指定文件中;

           -ok COMMAND {} \;

              对每个文件执行指定的命令之前需要用户事先确认;

           -exec COMMAND {} \;

              无需用户确认;

3、总结bash环境变量的相关内容;

配置文件,生效范围划分,存在两类:

       全局配置:

           /etc/profile, /etc/profile.d/*.sh

           /etc/bashrc

       个人配置:

           ~/.bash_profile

           ~/.bashrc

 

    按功能划分,存在两类:

       profile类:为交互式登录的shell提供配置

           /etc/profile, /etc/profile.d/*.sh

           ~/.bash_profile

 

           功用:

              (1) 定义环境变量,例如PATH、PS1

              (2) 运行命令或脚本

 

       bashrc类:为非交互式登录shell提供配置

           /etc/bashrc

           ~/.bashrc

 

           功用:

              (1) 定义命令别名;

              (2) 定义本地变量;

 

    变量:内存空间,变量名

       类型:

           环境变量:作用范围当前shell进程及其子进程

           本地变量:作用范围当前shell进程

           局部变量:作用范围仅为当前shell进程中某代码片断(通常为函数上下文)

 

           位置变量:$1, $2

           特殊变量:$?

 

       变量定义方式:

           bash内置变量:可直接调用,内置了许多环境变量,例如PATH等

           自定义变量:

              变量赋值:变量名=值

 

       bash弱类型:

           变量存储数据时,默认均采用字符形式;任何变量可以不经声明,直接引用;

 

              120:24bits

              120: 8bits

 

    定义本地变量:

       name=value

 

       查看:set

 

    定义环境变量:

       export name=value

       declare -x name=value

 

       查看:env, printenv,export

 

    撤消变量:

       unset name

 

    引用变量:

       ${name}, $name

 

    bash中的引用符号:

       '': 强引用,变量替换不会发生

       "":弱引用

       ``: 命令引用

 

   

    shell登录类型:

       交互式登录:

           直接通过终端进行的登录;

           通过su -l Username命令实现的用户切换;

 

       非交互式登录:

           图形界面下打开的命令行窗口;

           执行脚本;

           su Username;

 

    配置文件作用次序:

       交互式登录:

           /etc/profile --> /etc/profile.d/*.sh -->~/.bash_profile --> ~/.bashrc --> /etc/bashrc

 

       非交互式登录:

           ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh

 

    编辑配置文件定义的新配置如何生效?

       (1) 重新登录;

       (2) 让当前shell进程去重新读取指定的配置文件;

           source /PATH/TO/SOMEFILE

           . /PATH/TO/SOMEFILE

           注意:副作用

 

    问题:

       1、定义对所有用都生效的别名?

       2、如果仅需要PATH环境变量的修改仅对root用户生效,该如何操作?

 

4、总结Linux文件系统上的特殊权限(SUID、SGID、Sticky)的知识点;

   

    权限模型:

       u, g, o

           r, w, x

 

    进程的安全上下文:

       前提:进程有属主(进程以哪个用户的身份运行);文件有属主和属组;

       (1) 用户是否能够把某个可执行程序文件启动为进程,取决于用户对程序文件是否拥有执行权限;

       (2) 程序启动为进程后,此进程的属主为当前用户,也即进程的发起者;进程所属的组,为发起者的基本组;

       (3) 进程拥的访问权限,取决其属主的访问权限:

           (a) 进程的属主,同文件属主,则应用文件属主权限;

           (b) 进程的属主,属于文件的属组,则应用文件属组权限;

           (c) 则应用其它权限;

 

    SUID

       (1) 任何一个可执行程序文件能不能启动为进程:取决于发起者对程序文件是否有执行权限;

       (2) 启动为进程之后,其属主不是发起者,而程序文件自己的属主;这种机制即为SUID;

 

       权限设定:

           chmod u+s FILE...

           chmod u-s FILE...

 

       注意:

           s: 属主原本拥有x权限;

           S: 属主原本无x权限;

 

    SGID

       默认情况下,用户创建文件时,其属级为此用户所属的基本组;

       一旦某目录被设定了SGID权限,则对此目录拥有写权限的用户在此目录中创建的文件所属的组为目录的属组,而非用户的基本组;

 

       权限设定:

           chmod g+s FILE...

           chmod g-s FILE...

 

    Sticky:

       对于一个多人可写的目录,此权限用于限制每个仅能删除自己的文件;

       权限设定

           chmod o+t FILE...

           chmod o-t FILE...

      

5、总结Linux磁盘管理、文件系统相关知识点及其相关命令的使用方法;

磁盘接口类型:

       IDE (ATA):133MB/s,/dev/hd

       SCSI: 640MB/s

       SATA:6Gbps

       SAS:6Gbps

       USB:480MB/s

 

       识别硬盘设备:/dev/sd

           标记不同的硬盘设备:/dev/sd[a-z]

           标记同一设备上的不同分区:/dev/sd[a-z][1-]

              1-4: 主或扩展分区标识

              5+:逻辑分区标识

 

       设备文件:特殊文件

           设备号:

              major, minor

                  major: 设备类型

                  minor: 同一类型下的不同设备

 

           “块”:block,随机设备

           “字符”:character,线性设备

 

           GPT

 

    分区:分隔存储空间为多个小的空间,每个空间可独立使用文件系统;

 

    分区工具:

       fdisk, parted, sfdisk

 

    fdisk工具的使用:

       最多支持在一块硬盘上的15个分区;

 

       分区管理子命令:

           p: 显示

           n: 创建

           d: 删除

           t: 修改分区ID

           l: 列出所有支持ID类型

           w: 保存退出

           q: 放弃修改并退出

           m:获取帮助

 

       创建完成之后,查看内核是否已经识别新的分区:

           # cat /proc/partitions

 

           有三个命令可以让内核重读磁盘分区表:

              CentOS 5: partprobe [DEVICE]

              CentOS 6,7:

                  partx

                  kpartx

 

              partx命令:

                  partx DEVICE

                  partx -a DEVICE

                  partx -a -n M:N DEVICE

                     M

                     M:

                     :N

 

              kpartx命令:

                  kpartx -af DEVICE

 

Linux文件系统管理

 

    文件系统:

       VFS:Virtual File System

 

       Linux:ext2, ext3, ext4, reiserfs, xfs, btrfs, swap

       光盘:iso9660

       Windows: fat32(vfat), ntfs

       Unix: ffs, ufs, jfs, jfs2

       网络文件系统:nfs, cifs

       集群文件系统:ocfs2, gfs2

       分布式文件系统:ceph,

           moosefs, mogilefs, hdfs, gfs,glusterfs

 

       (1) 日志型文件系统

           非日志型文件系统:ext2

           日志型文件系统:ext3

 

       (2) swap:交换分区

 

 

    创建文件系统:

       在分区上执行格式化(高级格式化)

           要使用某种文件系统,满足两个条件:

              内核中:支持此种文件系统

              用户空间:有文件系统管理工具

 

 

       创建工具:mkfs (make filesystem)

           mkfs -t type DEVICE

 

              mkfs.type DEVICE

 

           ext系列文件系统的专用管理工具:

              mke2fs -t {ext2|ext3|ext4} DEVICE

                  -b BLOCK: 1024, 2048, 4096

                  -L 'LABEL': 设定卷标

 

           blkid命令:

              blkid DEVICE

                  LABEL, UUID, TYPE

 

Linux文件系统管理:

    mkfs, mkfs -t type = mkfs.type

 

    ext:mke2fs

 

    创建文件系统:

       mke2fs [OPTION]... DEVICE

           -t {ext2|ext3|ext4}

           -b {1024|2048|4096}

           -L 'LABEL'

           -j: mke2fs -t ext3

           -i #

           -N #

           -m #: 预留磁盘空间占据多大百分比的空间为后期管理使用;

           -O FEATURE[,...]

              -O ^FEATURE:关闭此特性

              has_journal

 

    文件系统属性查看及调整工具:

       e2label

           e2lable DEVICE [LABEL]

 

       tune2fs

           显示ext系列文件系统的属性,或调整其属性;

 

           -l:显示超级块中的信息;显示整个文件的属性及布局等相关信息;

           -L 'LABEL':修改卷标;

           -m #: 调整预留给管理员的管理空间百分比;

           -j: ext2 --> ext3

           -O:文件系统属性的启动或关闭

           -o:文件系统默认挂载选项的启用或关闭

 

       dumpe2fs

           -h: 仅显示超级块信息;

    文件系统检测:

       fsck: Filesystem check

           fsck -t type

           fsck.type

              -a: 自动修复错误

              -r: 交互式修复错误

              -f: 强制检测

       e2fsck:ext系列文件系统专用的检测修复工具;

           -y: 自动回答为“yes”

           -f:force

文件系统的挂载和使用:

    kernel --> rootfs(分区)

       rootfs分区:

           bin, sbin, etc, lib, lib64, dev, tmp,proc, sys

           /sbin/init

    将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件系统访问入口的行为,称之为挂载;

    解除此关联关系的过程:卸载;

    挂载点:mount point, 设备挂载至目录;

 

       注意:挂载点在挂载在之后,其内部原有的文件会被暂时隐藏;建立使用空目录做为挂载点;

    挂载方法:

       mount:通过读取/etc/mtab文件来显示当前系统所有已经挂载的设备;

       mount -a:挂载/etc/fstab文件中的所有支持自动挂载的文件系统;

       mount [options] [-o options] DEVICEMOUNT_POINT

           [options]:命令选项

           [-o options]:挂载选项

           DEVICE: 要挂载的设备

              (1) 设备文件:/dev/sda5

              (2) 卷标:-L 'LABEL'

              (3) UUID:-U 'UUID'

              (4) 伪文件系统名称

           MOUNT_POINT: 挂载点

 

           常用选项:

              -t type:文件系统类型

              -r: 以“只读”方式挂载此文件系统

              -w: 以“读写”方式挂载此文件系统

              -n:每个文件系统在挂载时都会自动更新/etc/mtab文件,-n用于禁止此功能;

                  此时,如果想查看挂载的所有文件系统:cat /proc/mounts

              -a: 自动挂载所有支持自动挂载的设备;

              -B:绑定目录至另一个目录上;

           -o 挂载选项:

              async:异步模式

              sync: 同步模式

              atime/noatime:是否更新访问时间戳;

              diratime/nodiratime:是否更新目录的访问时间戳;

              auto/noauto: 是否允许此设备被自动挂载;

              exec/noexec:是否允许执行此文件系统上应用程序;

              dev/nodev:是否支持在此设备上使用设备文件;

              suid/nosuid

              remount:重新挂载

              ro

              rw

              user/nouser: 是否允许普通挂载此设备;

              acl:是否支持此设备上使用facl;

              defaults:rw, suid, dev, exec, auto, nouser, andasync

       umount:卸载命令

           # umount DEVICE

           # umount MOUNT_POINT

           查看正在访问指定挂载点的进程:

              # fuser -v MOUNT_POINT

           终止所有正在访问指定的挂载点的进程:

              # fuser -km MOUNT_POINT

    交换分区:

       free命令:

           查看memory和swap的使用状态

              -m: 以MB为单位

              -g: 以GB为单位

        mkswap:创建交换分区

           mkswap [option] DEVICE

              -L 'LABEL'

          

       swapon:启用交换分区

           swapon [option] [DEVICE]

              -a: 激活所有交换分区

              -p PRIORITY: 设定其优先级;

       swapoff:禁用交换分区

           swapoff [option] [DEVICE]

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

       df: disk free

           -h: human-readable

           -i: inode数量

           -P: 以Posix兼容的格式输出

       du: disk usage

           -h: human-readable

           -s: summary