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

vi:visual interface

vim:visual interface improved

vim是vi的增强版

vim 分三种模式1.命令模式2.插入模式3.编辑模式

从命令模式到插入模式相关按键

a 在光标所在字符后插入

A在光标所在行尾插入语

i在光标所在字符前插入

I在光标所在行首插入

o 在光标下插入新行

O在光标上插入新行

   从输入模式切换到编辑模式相关按键:

        按下:ESC键

   从编辑模式切换到末行模式相关按键:

        输入:(冒号)

   从末行模式切换到编辑模式相关按键:

        按下:ESC键

        连续按两下ESC键(快速切换)

vim退出格式

:w  保存文件并继续编辑
:q 有编辑操作不能退出,没有编辑操作可退出
:q! 不保存强制退出
:qw 保存退出
:qw! 保存强制退出
:x 类似qw!
:ZZ 类似qw

编辑命令


   ⑴字符编辑、删除、粘贴、:

   


x
删除光标所在处的字符,3x表示删除光标所在字符在内的3个字符从左往右 xp:位置调换
r 替换光标所在处的字符
d^ 删除光标所在位置至非绝对词首之间的字符
d$ 删除光标所在位置至非绝对词尾之间的字符
d0 删除光标所在位置至绝对词首之间的字符
dd 删除光标所在行
dw 删除光标所在单词至后一个单词词首的内容
de 删除光标所在单词至单词词尾的内容
db 删除光标所在单词至单词词首的内容
3dd
删除包括光标所在行内的3行字符
p 完整行:粘贴光标所在行的下一行            非完整行:粘贴光标所在行后面
P 完整行:粘贴光标所在行的上一行            非完整行:粘贴光标所在行前面
yy 复制光标所在行,y+pattern同上
c 改变命令,用法如:cc表示删除光标所在行,等待输入,其它组合同上
u 撤销命令,用法如:3u表示撤销前3次
ctrl+r 恢复撤销操作
. 点号表示重复前一次操作命令功能
ctrl+f 向下翻页
ctrl+b 向上翻页
ctrl+d 向下翻半页
ctrl+u 向上翻半页
vimtutor

vim内建教程





gg:到第一行

G:最后一行

:n  到指定行

x :删除光标所在处字符

nx:删除光标处后n个字符

dd:删除光标所在行

ndd:删除n行

dG:删除光标所在行到文件行尾内容

D:删除光标所在处到行尾内容

n1,n2d :删除指定范围的行

yy:复制当前行

nyy:复制当前行以下n行

dd:剪切当前行

ndd:剪切当前你以下N行

p,P 粘贴在光标所在行下或行上

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

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

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

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

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

 

              查找条件:

                     根据文件名进行查找:

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

                                  *,?, []

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

 

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

 

                     根据属主、属组查找:

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

 

                            -groupGROUPNAME:

 

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

                            -gidGroupID:

 

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

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

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

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

1.

全局配置: /etc/profile,/etc/profile.d/*.sh

           /etc/bashrc

个人配置:

 ~/.bash_profile

 ~/.bashrc

 按功能划分,存在两类:

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

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

~/.bash_profile

 

功用:

                            (1)定义环境变量,例如PATHPS1

                            (2)运行命令或脚本

 

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

                     /etc/bashrc

                     ~/.bashrc

 

                     功用:

                            (1)定义命令别名;

                            (2)定义本地变量;

 

变量:内存空间,变量名

              类型:

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

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

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

 

                     位置变量:$1, $2

                     特殊变量:$?

 

              变量定义方式:

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

                     自定义变量:

                            变量赋值:变量名=

 

              bash弱类型:

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

 

                            12024bits

                            120: 8bits

 定义本地变量:

              name=value

 

              查看:set

 

       定义环境变量:

              exportname=value

              declare-x name=value

 

              查看:env, printenv, export

 

       撤消变量:

              unsetname

 

       引用变量:

              ${name},$name

 

       bash中的引用符号:

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

              "":弱引用

              ``:命令引用

 

       shell登录类型:

              交互式登录:

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

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

 

              非交互式登录:

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

                     执行脚本;

                     suUsername;

 

       配置文件作用次序:

              交互式登录:

                     /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

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

文件权限分为u所属主,g所属组,o其他

 进程的安全上下文: 
        前提:进程有属主(进程以哪个用户的身份运行);文件有属主和属组; 
        (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/sdx

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

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

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

5+:逻辑分区标识

设备文件:特殊文件

设备号:

major, minor

major: 设备类型

minor: 同一类型下的不同设备“块”:block,随机设备

“字符”:character,线性设备

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

分区工具:fdisk, parted, sfdisk

fdisk工具的使用:

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

fdisk分区管理子命令:

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

a:添加一个分区

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,ext4

(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

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

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

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

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

 :%s@^\([[:space:]]\)@#\1@   

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

:%s#/etc/sysconfig/init#/var/log#

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

:%s@^#\([[:space:]]\)@\1@   

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

1
2
[root@localhost ~] # find  /var/ -user root -group mail -ls
525473    4 drwxrwxr-x   2 root     mail         4096 Sep  2 10:12  /var/spool/mail

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

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

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

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

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

  • 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