20150830 课后练习(vim,find,bash环境变量,磁盘管理)

一、作业(练习)内容:

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

Vim

(1).命令解释:模式化的编辑器

(2). 有多种不同的模式:

         编辑模式:命令模式

         输入模式:插入模式

         末行模式:vim有许多内置命令,此模式作为命令的接口

编辑模式=====输入模式:

         i:在当前光标所在处,转换为输入模式

         I:在当前光标行行首,转换为输入模式

         a:在当前光标所在处的后方,转换为输入模式

         A:在当前光标所在行的行尾转换为输入模式

         o:在当前光标所在行的下方新建一个空白行,并转换为输入模式

         O:在当前光标所在行的上方新建一个空白行,并转换为输入模式

输入模式=====>编辑模式:ESC

编辑模式====>末行模式:“:”     

末行模式====>编辑模式:ESC

(3).退出vim

  末行模式:

      q! 强制退出,不保存编辑的内容退出

      wq 保存退出

      x 保存退出

      xq! x!  强制保存退出

   编辑模式:

       ZZ 保存退出

(4).编辑命令

    光标移动:

     字符间移动:

        h:光标向左移动

        l:光标向右移动

        k:光标向上移动

        j:光标向下移动

     单词间移动:

        w:移动到下一个单词的词首

        e:移动到下一个单词的词尾

        b:当前或者前一个单词的词首

        #:一次跳n个单词

     行首行尾间跳转:

        0:跳转至非tab字符上绝对行首

        ^: 跳转至第一个非空白字符

        $: 跳转至绝对行尾

     句子间跳转:

        ):跳转到下一个句子的句首

        (:跳转到前一个句子的句首

     段落间移动:

        }: 跳转到下一个段落

        {: 跳转到上一个段落

     行间快速移动:

        #G #表示想要跳转的行数

        G:文章尾部

        1G:文章首部

        末行模式:n 跳转至n行

    编辑操作:

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

        #x:删除光标所在处以及向后的#个字符

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

        d:删除命令:

        dd:删除光标所在行 #dd:删除光标所在行以及下行的共#行:

        与跳转命令一同使用

        d$:删除光标所在处至行尾的内容; D:相同

        d^:删除光标所在处至行行首的内容

        dw,de,db:这3个命令支持前面使用#来指明涵盖的单词个数

        p:粘贴:

    行级别:

        p:粘贴在光标所在行下方

        P:粘贴在光标所在行上方

        y:复制

        yy:复制光标所在行 Y:复制一整行

        #yy:复制光标所在行以及下行共#行

        d$:复制光标所在处至行尾的内容

        d^:复制光标所在处至行行首的内容

        yw,ye,yb:这3个命令支持前面使用#来指明涵盖的单词个数

        c:修改

        cc:删除光标所在行整行内容,并立即转为输入模式

        #cc:

        c$,C,c^,c0,cw,cb,ce

    撤销操作:

        u:撤销

        #u:撤销#次操作

        取消上一次操作:

    Ctrl+r

        重复前一次命令

(5).可视化模式:

        v:选择光标所在行光标左侧的内容

        V:选择光标所在行向有右侧的内容

(6).编辑模式下的翻屏命令

        Ctrl+f:向文件尾部翻一屏

        Ctrl+b:向文件首部翻一屏

        Ctrl+d:向文件尾部翻半屏

        Ctrl+u:向文件首部翻半屏

(7).文本查找

        /PATTERN

        ?PATTERN

        n:向文本尾部查找

        N:向文本首部查找

(8).文本替换

       末行模式:内置命令接口,有命令历史记录功能

        有部分内置命令用于编辑操作,此时可使用地址定界法进行

    地址定界:

        Startline[,endline]

        #:第#行

        .:当前行

        $:最后一行

        %:全文

    相对定界:

        +#:从指定位置向下#个行

        -#:从指定位置向上#个行

    文本替换命令:s

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

        /:分隔符,用于分割“查找的内容”和“替换为的内容”:此分隔符可使用 其他字符,如@,#等:

        要查找的内容:可使用正则表达式:此部分可以后面“替换为的内容”部分 中使用“&”全部引用:

        替换为的内容:不可使用正则表达式,一般为正常文本,但可以使用正则表

    修饰符:

        i:查找时不区分字符大小写

        g:global,全局替换;

        (9).多文件模式:

    打开文件:

        vim [OPTION]...[FILE]...

        +#:快速定位至#行

        +/PATTERN 快速定位至被模式第一次匹配至行

    多文件:

        vim FILE1 FILE2 FILE3...

    末行模式:

        :next 下一个

        :prev 上一个

        :last 最后一个

        :first 第一个

    退出所有文件:

        wqall 保存所有并退出

        wall   保存所有

        qall 退出所有

    多窗口:

        -o 水平分割窗口 ctrl+s 水平分割文档

        -O 垂直分割窗口 ctrl+v 垂直分割文档

(10).界面特性

    开启关闭行显示:

        Set nu

        Set nonu

    开启语法高亮功能:

        synatx (on|off)

    开启搜索高亮功能:

        set hlsearch

         set nohlsearch

    开启自动缩进功能:

        set autoindent:set ai

        set noautoindent: set noai

    字符大小写是否区分功能:

        set ignorecase: set ic

        Set noignorecase: set noic

(11).配置文件

    全局:/etc/vimrc

    个人:~/.vimrc


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

find

(1).命令解释:

通过遍历指定的目标目录,实施查找符合条件指定属性的文件

(2)命令语法:

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

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

        查找条件:默认为指定路径下的所有文件

        处理动作:默认为打印至屏幕

        查找条件:


-name: “文件名”:文件名支持使用globbing

wpsF037.tmp


-iname: “文件名”不区分大小写

wpsF038.tmp


-user:根据属主查找

wpsF039.tmp


-group:根据属组查找

wpsF03A.tmp


-uid:根据uid号来查找

wpsF03B.tmp


-gid:根据gid号来查找

wpsF04C.tmp


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

wpsF04D.tmp


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

wpsF04E.tmp


组合查找:

与 -a (找出/tmp目录下属主有写权限,并且是root的文件:

wpsF04F.tmp


或 -o (找出/tmp目录下名字包含123的文件,或者uid是600的文件

wpsF050.tmp


非 -not (找出/tmp目录下既不属于root用户,并且也不属于hzm用户的文件

wpsF051.tmp


非A或非B = 非(A且B)

非A 且非B = 非(A或B)


查找条件:

    根据类型查找:

        -type:

        f:普通文件

        d:目录文件

        l:符号连接

        b:块设备

        c:字符设备文件

        p:命名管道文件

        s:套接字文件

wpsF061.tmp


根据文件大小查找:

       -size:+|-

         常用单位有:k,M,G

           #:#-1< x <= #  实例:2k: 结果:1.8k ,1.9k ,1.1k都符合

           +: x > #        实例:+2k:结果:2.1k,3.1k都符合 2k不符合

           -: x <= #-1      实例:-2k:结果:1k,0.9k都符合

根据时间查找:

    以“天”为单位:

        -atime:[+|-] :访问时间:

        #:#- < x < #+1    表示#+1天的时间段被访问过的文件  

        -#:x < #          表示#天之内的被访问过的文件

        +#: x >= #+1      表示#+1天之外被访问过的文件

        -mtime:  [+|-] :修改时间

        -ctime:  [+|-] :改变时间


以“分钟”为单位:

        -amin:[+|-]

        -mmin: [+|-]

        -cmin: [+|-]

wpsF062.tmp


实例:查找/tmp下5分钟以内被访问过的文件:

wpsF063.tmp


    以“权限”为单位:

        -perm:[+|-]mode

        mode::精确匹配

        +mode:满足任何一类用户的任何以为权限即可  +或关系

        -mode:每类用户的任何一位都需匹配        -且关系

        所有都没有 相反:至少有一个有

        所有都有  相反:至少有一个没有


实例:查找/tmp下包含666权限的文件,或者是精确匹配666的文件

wpsF064.tmp



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

总结Bash变量的类型:

    本地变量:只对当前shell进程有效的变量,对其他shell进程无效,包括当前shell进程的子进程。             VAR_NAME=VALUE

        变量赋值:向变量的存储空间保存数据

        变量引用:${VAR_NAME}

        “”:弱引用,里面的变量会被替换

        ‘’:强引用,里面的所有祖父都是字面量,直接输出

    环境变量:对当前shell进程及其子shell有效,对其他shell进程无效。

        定义环境变量: export VAR_NAME=VALUE

        导出:      export VAR_NAME

    撤销变量:unset VAR_NAME

    局部变量:对shell脚本中某代码片段有效,通常用于函数本地:

        Loacl export VAR_NAME=VALUE

    位置变量:$1,$2,....${10}

    特殊变量:$?

    查看当前shell进程中的所有变量:set

    查看当前shell进程中的所有环境变量:export,printenv,env

变量命名规则:

    1.不能使用程序中的关键字(保留字) if,case,for

    2.只能使用数字,字母和下划线,且不能以数字开头

    3.要见名之意

变量类型:

    数值型:

    精确数值:整数

    近似数值:浮点型

    单精度浮点

    双精度浮点

字符型:

    char

    string

布尔型:

    ture,false

类型转换:

    显式转换

    隐式转换


bash是弱类型的语言,一切皆字符

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

    Profile类:为交互式登陆的用户提供配置:

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

        个人配置: ~/.bash_profile

        功用:1.设定环境变量

           2.运行命令或脚本

    bashrc类:为非交互式登陆的用户提供配置:

        全局配置: /etc/bashrc

        个人配置: ~/.bashrc

        功用:1.设定本地变量

           2.定义本地别名


    登录类型:

        交互式:直接通过终端输入账号和密码登陆

            使用su -l username 或 su - username

        非交互式:su username

            图形界面下打开的终端


交互登录用户:

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

非交互式登陆用户:

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


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

特殊权限:suid

展示于文件属主的执行权限位

如果属主本来有执行权限,显示为s,否则为S;

功能:对一个可执行文件来讲,任何用户运行此程序为进程时,进程的属主不在是发起者本人,而是可执行程序文件自己的属主。

管理文件suid权限的方法:

Chmod u+|-s FILE


特殊权限:sgid

展示文件属组的执行权限为;

如果属主本来有执行权限,则展示为s,否则为S;

功能:当目录的属组有写权限,且有sgid权限时,那么所有属于次此目录的属组,且以属组身份在此目录文件或目录时,新文件或目录的属组不是创建者所属的基本组,而是目录自己的属组;

Chmod g+|-s


特殊权限:stick

展示于目录其他用户的执行权限位

如果其他用户本来有执行权限,则展示为t,否则,展示位T

功能:对于全局可写,或某组全局可写目录,所有用户都于此目录创建文件或删除自己为属主的那些文件,但不能删除非自己为属主文件或目录:

Chmod o+|-t



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

磁盘设备文件:

IDE接口:并行,133MB/s /dev/hda,/dev/hdb

Scsi接口:并行,320MB/s

SATA接口:串行,6Gpbs

Usb接口:串行,480MB/s

SAS接口:串行

设备文件:/dev/sd[a-z][#]


链接文件:访问同一个文件数据,不同路径

硬链接:两个文件路径指向了同一个inode。

创建方法:cp -l SRC DEST

  ln SRC DEST

特性: 1)目录不支持硬链接;

    2)链接不能跨文件系统;

     3)硬链接文件与源文件是指向同一个inode,创建硬链接文件只会增加 

    inode计数;删除硬链接只会减少一次;


符号连接:链接文件是一个完全独立的新文件,但其指向了原文件的访问路径;

创建方法:ln -s SRC DEST

特性:(1)符号链接文件与原文件是两个各自独立的文件;

  (2)目录可以创建符号链接;

  (3)可以跨文件系统;

  (4)删除链接不影响原文件,但删除原文件,符号链接指向的路径不存在,因此,此时链接文件变成错误链接;其大小不是真正原文件大小,而是指向的原文件的文件路径字符串所包含的字节数;



磁盘设备:

MBR:用来存放当前分区表 。(主引导扇区)

446bytes:bootloader

64bytes:分区表

16bytes:标记一个分区:4个主分区:3主分区,1个扩展分区

2bytes:55AA,当前MBR信息是否有效的标记

VFS:virtual file system

    Linux文件系统:ext2,ext3,ext4,xfs,btrfs

    日志文件系统:加速文件检测并修复过程

    光盘文件系统:iso9660

    网络文件系统:nfs,cifs

    集群文件系统:gfs2,ocfs2

    分布式文件系统:ceph

    Windows文件系统:ntfs,vfat

    伪文件系统:tmpfs


Swap:虚拟文件系统

    创建文件系统:

    文件系统:

元数据:每个索引项称一个inode

根在内核中,其需要被关联制根文件系统,即rootfs


创建分区:

fdisk命令:查看已经识别的磁盘设备

    P:显示当前分区表

    N:创建一个分区

    W:保存退出

    L:查看支持的分区ID:

    D:删除现有分区

    T:修改分区ID

    Q:不保存退出

    M:显示帮助信息


分区流程:fdisk /dev/sd* ---> n新建 ---> (e扩展)|(p主分区) --->柱面或者分区大小 --->P 查看是否成功 ---> cat /proc/partitions 查看内核是否识别 --->如果未识别让内核强制读取分区表(partx -a /dev/sd*)


文件系统管理工具:

创建文件系统:

mkfs.ext2 mkfs.ext3 mkfs.ext4,mkfs.xfs

检测文件系统:

fsck.ext2,fsck.ext3,fsck.ext4,fsck.xfs

查看其属性:

dumpe2fs,tune2fs

创建文件系统:

mkfs.FSTYPE /dev/DEVICE

blkid /dev/DEVICE

ext系列:

    mke2fs

    mke2fs:mke2fs[OPTION].../dev/DEVICE

        -t :[ext2|ext3|ext4]:要创建的文件系统类型;

        -b :[1024|2048|4096]:上限由page fram决定;

        -L: label:卷标;

        -j: 相当于 -t ext3 将文件系统格式化为日志文件系统;

          mkfs.ext3 = mkfs -t ext3 = mke2fs -t ext3

        -i#:指定inode与字节的比率;没多少个字节给创建一个inode;

        -N#:直接知名给此文件系统创建多少个inode;

        -m#:指定预留空间的百分比,默认为5;

        -O :指明额外选项

        UUID:全局唯一标识符

e2label /dev/DEVICE:修改卷标


tune2fs:查看或者修改ext系列文件系统某些属性

    tune2fs -l /dev/DEVICE

        修改指定文件属性:

        -L:修改卷标

        -m#:调整预留空间百分比

        -O[^]FEATURE:开启或关闭某种特性

        -o[^]mount_options:开启或关闭某种属性

            -o acl

            -o ^acl


dumpefs:显示ext系列文件系统属性信息

    dumpe2fs [-h] /dev/DEVICE


文件系统检测:

因进程意外终止或系统崩溃等原因导致写入操作非正常终止时,可能会导致文件损坏,此时应该修复系统。

    fsck:

       -t:fsck -t ext4 /dev/sdb1

        -a:自动修复所有错误

        -r:交互式修复错误

        ext系列文件系统的专用工具

    e2fsck:

        -y:对所有问题自动修复yes;

        -f:强制检测

Windows无法识别linux上专用的文件系统,因此,有存储设备需要两种系统之间交叉使用,应该使用Windows文件系统。


swap文件系统:

    Linux上 创建交换分区必须使用独立的磁盘分区

        fdisk /dev/DEVICE

        t命令调整id:82


创建交换分区系统:mkswap

mkswap[-L] /dev/DEVICE


文件系统挂载

    Linux系统上,所有文件系统必须通过根文件系统的某个分区来访问;

    其余所有的其他文件系统如果想要被访问,都只能通过关联至根文件系统上的某个目录来实现;

    mount:mount DEVICE MOUNT_POINT

    mount[option]...[-t fstype][-o option] device mount_point

        -r:只读挂载

        -w:读写挂载

        -t:fstype 被挂载的设备上的文件系统类型:可省略 此时mount会自动使用blkid来判断

        -L:以卷标的方式指定要挂载的设备,因此,DEVICE可省

        -U:以UUID的方式指定要挂载的设备,因此,DEVICE可省

        -n:默认情况下,设备挂载与否的改变结果会被保存于/etc/mtab中,-n选项用于变动时不更新此文件。

        -o:option 挂载选项

        async:异步写入

        sync:同步写入

        atmin/noatime:文件或目录在被访问时是更新访问时间戳

        diratime/nodiratime:文件或目录在被访问时是更新访问时间戳

        auto/noauto:设备是否支持mount-a选相时是否自动挂载

        dev/nodev:此设备上是否创建设备文件

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

        suid/nosuid:是否支持此设备上的文件使用suid权限

        remount:重新挂载

        acl:mount -o or tune2fs -o acl /dev/device

        ro:只读

        rw:读写

        user/nouser:是否允许普通挂载此文件系统

        defaults

mount -a 自动读取fstab中每一个支持自动挂载的文件系统并把其挂载至每一个挂载目录下。


另外一个技巧:

将某目录绑定到指定目录下,作为临时访问入口

mount --bind 源目录 目标目录


查看所有已经挂载设备的方法

    #mount

    #cat /etc/mtab

    #cat /proc/mounts

        挂载点

        1.事先存在

        2.使用别的进程未使用的目录

        umont MOUNT_POINT


某进程访问的设备不能卸载,查看方法:

lsof 挂载目录

fuser -v:挂载目录

  -k: fuser -km 挂载目录:强制杀掉访问挂载目录的进程


df:用来检查linux服务器的文件系统的磁盘空间占用情况

[OPTINE]...[FILE]

    -l:仅显示本地文件系统的相关系统

    -h:单位换算

    -i:显示indoe的使用情况


du:用于评估文件大小

    -s:统计整个目录以及内部所有文件总体大小

    -h:单位换算

    du -sh/*


free:查看内存使用状况

    -m

    -g


交换分区:创建交换分区:mkswap

swapon -a 启用/etc/fstab文件中定义的所有交换分区

    启用:swapon /dev/sd*

    禁用:swapoff /dev/sd*


文件系统相关配置文件:/etc/fstab

定义开机自动挂载的文件系统;

wpsF075.tmp

第一列:挂载设备:设备文件,卷标,uuid,伪文件系统

第二列:挂载点:swap挂载点仍为swap

第三列:文件系统类型

第四列:挂在选项:defaults表示默认挂载选项,多个挂载选项用,分割。比如defaults,acl,noatime

第五列:转储频率:0:从不备份,1:每天备份,2:每隔一天备份

第六列:自检次序:0:不自检,1:首先自检,只有根文件系统可首先自检,2:次级自检。




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

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

wpsF086.tmp

wpsF087.tmp


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

%s/^[[:space:]]/#&/g

wpsF097.tmp

wpsF0A8.tmp


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

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

%s/\/etc\/sysconfig\/init/\/var\/log/g

wpsF0A9.tmp

wpsF0AA.tmp


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

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

wpsF0BA.tmp

wpsF0BB.tmp


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

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

wpsF0BC.tmp


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

find /usr -not -user root -a -not -user bin -a -not -user hadoop

Find /usr -not \( -user root -o -user bin -o -user hadoop \)

wpsF0BD.tmp


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

find  /etc -not  \( -user root -o -user hadoop \)  -a -mtime  -7

wpsF0CE.tmp


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

find / -not \( -nouser -a -nogroup \) -a -atime -7

wpsF0CF.tmp


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

find /etc -size +20k -a type f

wpsF0D0.tmp


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

find /etc -not -perm +222

wpsF0E1.tmp


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

find /etc -not -perm -111

wpsF0E2.tmp


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

find /etc/init.d -perm -113

wpsF0E3.tmp


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

(1)当前用户为hzm查看/etc/shadow文件没有权限,无法访问。

wpsF0E4.tmp


(2)切换到root账户下将cat程序给予s权限;

chmod u+s /bin/cat

wpsF0F4.tmp


(3)在切换回hzm账户来访问/etc/shadow文件就不受限制了;

wpsF0F5.tmp


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

1)新建hzm和gley两个用户,附加组都为testgroup,并且创建/test/data目录也加入到testgroup组中;

useradd -a -G testgroup hzm

useradd -a -G testgroup gley

mkdir /test/data

chown :testgroup /test/data

wpsF0F6.tmp


(2)登陆hzm用户,在/test/data目录下创建一个hzm.txt文件,登陆gley用户,在/test/data目录下创建一个gley.test文件

hzm:touch hzm.txt /test/data

gley:touch gley.txt /test/data

wpsF0F8.tmp


(3)然后给于该目录gid权限后,在切换两个用户各自创建.word文件,这样就能看到.word创建的文件所属组都是testgroup组。

chmod g+s /test/data

hzm:touch hzm.word /test/data

gley:touch gley.word /test/data

wpsF109.tmp


(4)然后在给与改目录sticky权限,这样用户只能删除自己创建的所属文件;

chmod o+t /test/data

wpsF10A.tmp

你可能感兴趣的:(编辑器)