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

    Vim编辑器:

vi: visual interface

vim, vi iMproved


vim: 

模式化:

编辑模式:命令模式

输入模式:

末行模式:

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

i: insert, 

a:append,

o:new line,

I: 行首

A:行尾

O:上方新建行

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

ESC

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

         :

末行模式 --> 编辑模式

ESC

打开vim:

# vim

# vim /PATH/TO/SOMEFILE

+#:#为行号;

+/PATTERN

关闭vim:

:q

:q!

:wq

:x

ZZ:保存退出


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)的任何一位权限符合条件即可;隐含或条件;

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

处理动作:

-print: 默认处理动作

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

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

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

         -ok COMMAND {} \;

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

-exec COMMAND {} \;

无需用户确认;

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

    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;

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

        Linux文件系统上的特殊权限

权限模型:

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磁盘管理、文件系统相关知识点及其相关命令的使用方法;

        Linux磁盘管理

硬盘:

机械式硬盘

SSD

机械式:

track

sector: 512bytes

cylinder: 分区的基本单位;

MBR:Master Boot Record

512bytes

446: bootloader

64: filesystem allocation table

16: 标识一个分区

2:55AA

磁盘接口类型:

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] DEVICE MOUNT_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, and async

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

6、复制/etc/grub.cfg配置文件至/tmp目录,用查找替换命令删除/tmp/grub.cfg文件中的行首的空白字符;

  • %s/^[[:space:]].//g

  • %s/^[[:space:]]\+//g

7、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首加一个#; 原有空白字符保留;

  • %s/^[[:space:]]\+/#\1/g

  • %s/^[[:space:]]\+/#&/g

8、替换/tmp/functions文件中的/etc/sysconfig/init为/var/log;

  • %s@/etc/sysconfig/init@/var/log@g

9、删除/tmp/functions文件中所以#开头,且#后面至少跟了一个空白字符的行的行首#;

  • %s/^#\([[:space:]]\)\+/\1/g

10、查找/var目录属主为root,且属组为mail的所有文件;

  • find /var -user root -group mail -ls

11、查找/usr目录下不属于root、bin或hadoop的所有文件;

  • find /usr ! \( -user root -o -user bin -o -user hadoop \) -ls

12、查找/etc目录下最近一周内其内容修改过,且属主不为root或hadoop的所有文件;

  • find /etc -mtime -7 -a ! \( -user root -o -user hadoop \) -ls

13、查找当前系统上没有属主或属组,且最近一周内曾被访问过的所有文件;

  • find / -atime -7 -a \( -nouser -o -nogroup \) -ls

  • find / \( -nouser -o -nogroup \) -a -atime -7 -ls

14、查找/etc目录下大于20k且类型为普通文件的所有文件;

  • find /etc -size +20k -type f -ls

15、查找/etc目录下所有用户都没有写权限的文件;

  • find /etc ! -perm /222 -ls

  • find /etc ! -perm +222 -ls

16、查找/etc目录下至少有一类用户没有执行权限的文件;

  • find /etc ! -perm -111 -ls

17、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户拥有写权限的文件;

  • find /etc/init.d -perm -113 -ls

18、让普通用户能使用/tmp/cat去查看/etc/shadow文件;

  • chmod u+s /tmp/cat

19、创建目录/test/data,让某组内普通用户对其有写权限,且创建的所有文件的属组为目录所属的组;此外,每个用户仅能删除自己的文件;

    mkdir -pv /test/data

    chmod g+rws /test/data

    chmod o+t /test/data