​Linux学习之find等内容篇

Linux学习之find等内容篇

  

  本次总结的内容包含:

   find命令的参数以及使用

   vim文本编辑器的介绍和使用

   bash环境变量的介绍以及设置

   linux文件系统的特殊权限SUID/SGID/Sticky的介绍以及应用

   linux磁盘管理等相关命令介绍


一、find 查找命令

   在linux系统中有两个查找文件的命令,分别是local和find  

  local:非实时查找,是基于系统空闲时构建的索引查找的,采用的模糊查找,所以查找速度比较快,但对查找不到更新索引之后创建的文件以及目录信息。可以使用updatadb命令来手动的更新索引;

  find:实时查找,其工作是从指定的路径开始挨个比对查找,采用的是精确的查找模式,所以查找速度比local慢很多,不建议在任务繁重的生产服务器上使用。

所以我们再次重点介绍find的使用方法和技巧


find

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

    查找路径:可以手动指定,也可以不指定;默认为当前的路径;

    查找条件:查找的标准,默认为找出指定路径的全部文件;

    处理动作:对符合条件的文件做的操作,默认为打印至屏幕;


1、 查找条件分类:

 a、根据文件名查找:

  -name FILENAME :支持glob即可以是用*、?、[]等通配符

  -iname FILENAME:表示不区分文件名称大小写,也支持glob

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


 b、根据属主、属组查找:

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

  -group GROUPNAME:查找属组为指定组的文件;

  -uid USERID:查找uid为指定值得文件;

  -gid GROUPID:查找gid为指定值得文件;

  -nouser:查找没有属主的文件;nouser表示没有属主名称,但是有UserID

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


 c、根据文件的类型查找:

  -type TYPE

    f:普通文件类型

    d:目录文件

    l:符号链接文件

    b:块设备文件

    c:字符设备文件

    p:管道文件

    s:套接字文件

可以将各种条件组和起来查找:

与条件 :-a     //此优先级次之

或条件:-o      //此优先级最低

非条件:-not,! //此优先级最高

组合是非条件的逻辑转换比较容易混淆,这里重点介绍一下

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

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


 d、根据文件大小来查找:

   -size [+|-] #UNIT

    UNIT(单位):K、 M、 G

    因为文件的大小不都是整数,所以此处的+-以及精确指定的大小都是指的一个特定的范围;

    #UNIT:(#-1,#] 

       例:3K:表示的大于2K小于等于3K范围的文件都符合条件

    +#UNIT:(#,正无穷)

       例:+3K:表示大于3K范围的文件都符合条件

    -#UNIT:(0,#-1]

       例:-3K:表示大于0小于等于2K范围的文件都符合条件

 

 e、根据时间戳:

     根据时间戳的分为两类:

       以“天”为单位:

        -atime:以天为单位的访问时间

          用法: -atime  [+|-]#

          此处单位天实际中不可能为整数,所以精确的以及+-的天数都是指的是一个特定的范围

             -atime #: [#,#+1)

               例: -atime 3 :表示访问时间大于等于2天小于4天的一个特定范围

             -atime +#:[#+1,正无穷)

               例: -atime +3:表示访问时间大于等于4天范围

             -atime -#:[0,#)

               例: -atime -3:表示访问时间小于3天的范围


        -mtime:以天为单位的修改时间

              用法同上

        -ctime:以天为单位的改变时间

              用法同上


       以“分钟”为单位:

         -amin:以分钟为单位的访问时间

         -mmin:以分钟为单位的修改时间

         -cmin:以分钟为单位的更改时间

             用法同上


 f、根据权限查找:

    -perm [/|-]MODE

      MODE:精确权限匹配

       例: -perm 644  表示u、g、o分别精确对应rw-r-xr-x

      /MODE:任何一类权限的任何一位权限符合条件就可以,隐含的是或关系;

     注意:/400、/440、/444表示的意思不同

           /400 表示u位有读权限就满足查找的要求,不关注其余两位的权限;

           /440 表示u、g两类任何一类有读权限就满足查找的要求;

           /444 表示u、g、o三类任意一个都读权限就满足查找的要求;

      -MODE:为每一类对象指定的每一位权限都必须同时存在才满足查找的要求,隐含的是与关系

       例:-perm -440 :表示u和g类必须都存在读权限才能满足查找的条件,0类不关注;


2、处理动作:

   -print:打印至屏幕,是默认的处理动作;

   -ls   :类似对查找到的每个文件做'ls -lh'的操作

   -delete:删除查找到的文件

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

   -ok COMMAND {} \;

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

   -exec COMMAND {} \;

      不需要用户的确认;

  注意:此处命令后跟的{} \;是固定格式。如果参数要多次传递 这需要出现多个{}与之对应。


二、VIM的介绍和使用

 VIM是一款全屏、模式化的文本编辑器

  vi:visual interface(可视化接口)

   vim是vi的增强版 即 vi iMproved


 1、vim的三种模式:

  编辑模式:

  输入模式:

  末行模式:


   模式间的切换:

     编辑模式-->输入模式

       i:insert  表示在当前光标所在字符的前方插入

       a:append,表示在当前光标所在字符的后方插入

       o:open new line,表示在当前光标的下放插入新的一行

       I:表示在当前光标所在行的行首插入

       A:表示在当前光标所在行的行尾插入

       O:表示在当前光标所在行的下方插入新的一行

   

     输入模式-->编辑模式

       ESC


     编辑模式-->末行模式

        :


     末行模式-->编辑模式

        ESC


 2、打开vim:

      vim  直接输入vim

      vim /path/to/somefile 打开指定路径的文件

        +#:表示打开文件后跳转到第#行

        /PATTERN:表示打开文件跳转至能第一个匹配的行


 3、关闭vim:

     末行模式下:

     :q 退出 

     :q! 强制退出

     :wq 保存退出

     :x 保存退出,等效wq

     

     编辑模式下:

     ZZ 两个大写的Z也能退出vim


4、光标跳转:

   

    字符间跳转:

      h:向左一个字符

      l:向右一个字符

      j:当前字符向下跳转一行

      k:当前字符向上跳转一行

    

       #COMMAND:表示h/l/j/k前可跟数字,表示跳转的值

         例:3h:表示想左跳转3个字符

             3j:表示向下跳转3行;


    单词见跳转:

      w:表示跳转至后一个单词的词首;

      e:表示跳转至当前或后一个单词的词尾

      b:表示跳转至当前或前一个单子的词首

 

      #COMMAND:同上


    行内跳转:

      ^:表示跳转至行首的第一个非空字符

      $:表示跳转至行尾(绝对行尾)

      0:表示跳转至行首(绝对行首)


    行间跳转:

      #G:跳转至第#行,

      1G,gg:跳转至第一行

      G:跳转至最后一行


    句间移动:

      ):表示跳转至下一句

     (:表示跳转至上一句


    段落间移动:

      }:表示跳转至下一段

      {:表示跳转至上一段


 5、编辑模式下的命令:

      字符编辑:

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

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

         xp:删除粘贴,可用将当前光标所在处的字符与后一个字符调换位置


      删除命令:

        d:删除命令

          d^:删除至非空白字符的行首

          d$:删除之行尾

          d0:删除之行首

          dw:删除当前光标所在位置到词尾或下一个单词,连空格也会删除

          de:删除当前光标所在位置到词尾或下一个单词,不会删除空格

          db:删除当前光标所在位置到词首或下一个单词,空格一并删除

          dh:删除当前光标所在位置的左一个字符

          dj:删除当前光标所在行以及下一行

          dk:删除当前光标所在行以及上一行

          dl:删除当前光标所在位置的右一个字符

        dd:删除当前行

       #COMMAND


      粘贴命令:p (paste、put)

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

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

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


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

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

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


      复制命令:y(yank)

         y  

           y^/y$/y0/yw/ye/yb

         yy:复制当前行

       

        #COMMAND


      改变命令:c(change)

           c^/c$/c0/cw/ce/cb

           cc

           #COMMAND


  6、撤销此前的编辑操作:

      u:undo

       #u:表示撤销此前#次操作

      Ctrl+r :撤销撤销操作

       . :表示重复前一个编辑操作


  7、翻屏操作业:

     Ctrl+f:向后一屏

     Ctrl+b:向前一屏

     Ctrl+d:向后半屏

     Ctrl+u:向前半屏


  8、vim的末行模式:

     

      地址、界定:

        :start_pos,end_pos

           #:第#行

           #,@:第#行到第@行

           #,+@:第#行到第#+@行

            .:当前行

            $:最后一行

           %:全文,相当于1,$

           /pat1/:第一次被此模式匹配的行

           #,/pat1/

           /pat1/,/pat2/


           后面可以跟c/d/x/r/w等编辑命令


      查找

        /PATTERN:向尾部进行查找

        ?PATTERN:向首部进行查找

           n:同向查找

           N:反向查找


      查找替换


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

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

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

             要替换的内容:不能用模式,但是可以使用后向引用符号,以应用前面模式中括号匹配到的内容

               \1,\2,.....

               &:引用要查找的内容匹配到的整个内容:

              修饰符:i 忽略大小写     g:全局替换


             /:分隔符,所以在要查找的内容找出现了此符号,必须要使用\转义   及\/   或者使用@等符号替换 /符号。



  9、多文件模式:

    vim FILE1 FILE2 ...

:next下一个文件

:first第一个文件

:prev上一个文件

:last最后一个文件


:wqall

:q!all


  10、多文件窗口分割:

vim -o|-O FILE1 FILE2 ...

                  -o:水平分割

          -O:垂直分割

Ctrl+w,(逗号表示松手) ARROW(箭头符号)


单文件窗口分割:

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

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


  11、定制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


:help 获取帮助

:help SUBJECT

   特性设定的永久生效方式:

全局配置文件:/etc/vimrc

用户个人的配置文件:~/.vimrc



三、bash环境配置:

  

  1、分类:

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

       全局配置:

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

       个人配置:

         ~/.bash_profile , ~/.bashrc


    按功能划分,存在两类:

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

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

         作用:a、定义环境变量,例如PATH、PS1

               b、运行命令脚本

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

        /etc/bashrc , ~/.bashrc

         作用:a、定义命令别名

               b、定义本地变量

   2、变量:就是内存空间,

         类型:

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

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

           局部变量:作用范围仅当前shell进程中某代码片段

           位置变量:$1,$2,....

           特殊变量:$?


         变量定义:

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

            自定义变量:

                 变量赋值:变量名=值


    3、定义本地变量

         name=value

           查看用set命令


    4、定义环境变量

         export name=value

         declare -x name=value

           查看:env,printenv,export


     5、撤销变量

         unset name


     6、引用变量

         $name , ${name}


     7、bash中的引用符号

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

         "":双引号是弱引用

         ``:反引号(tab键上面的),命令引用


     8、shell登录类型

          交互式登录:

            通过终端直接登录

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

          非交互式登录:

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

            执行脚本

            su username

 

      9、配置文件的作用次序:

           交互式登录

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


           非交互式登录

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


     10、如何让配置文件生效:

          a、重新登录:

          b、让当前shell进程去重新读取指定的配置文件

             source /path/to/somefile

             . /path/to/somefile

           注意读取配置文件可能会使添加的配置文件重复多次读取


 四、Linux文件系统上的特殊权限:

    1、权限模式

       每个文件都有user,group,other三类用户对应的权限集,及rwx


    2、进程的安全上下文

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

       a、用户是否能够把某个可执行程序启动为进程,取决与用户对该文件是否有执行权限

       b、程序启动为进程后,此进程的属主为当前用户,及是进程的发起者;进程所属组也是发起者的所属组

       c、进程的访问权限,取决起属主的访问权限

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

          b)、进程的属主同文件的属组,则应用文件的属组的权限

          c)、进程的属主同文件的其他权限


    3、SUID:

      a、任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否有执行权限

      b、启动为进程后,起属主不是发起者,而是程序文件自己的属主,这种机制就叫做SUID


      权限设定:

       chmod u+s filename

       chmod u-s filename 

         注意:s:属主原本就有执行权限; S:属主原本没有执行权限


    4、SGID

       默认情况下,用户创建文件是,其属组是这个用户所属的基本组

       一旦某目录被设定SGID权限后,则在此目录下创建的文件的属组都是该目录的属组,而不是文件所属的基本组:

      

       权限设定:

        chmod g+s filename

        chmod g-s filename 

     5、Sticky

         对一个多人可写的目录,此特性用于限制用户只能删除自己的文件:

        权限设定

          chmod o+t filename

          chmod o-t filename


 五、Linux磁盘管理(一)

    1、硬盘:

       机械式硬盘

       SSD

     机械式:

       track:

       sector:

       cylinder:分区的基本单位:


       MBR:Master Boot Record

         512bytes

            446:bootloader

            64: filenamesystem allocation table

             2:55AA

     2、磁盘接口类型:

        IDE(ATA):133MB/s

        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:同意类型下的不同设备


      3、分区:即分割存储空间为多个小的空间,每个空间可独立使用文件系统:

      4、分区工具:

         fdisk,parted,sfdisk


      5、fdisk工具的使用

         分区管理子命令:

          p:显示 

          n:创建

          d:删除

          t:修改分区ID

          l:列出所有支持ID类型

          w:保存退出

          q:不保存退出

          m:获取帮助


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

            cat /proc/partitions

           

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

             CentOS 5: partprobe [DEVICE]

             CentOS 6,7: partx,kpartx


      6、Linux文件系统管理:

        文件系统:Virtual File System


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

        光盘:iso9600

        windows:fat32,ntfs

        unix:ffs,ufs,jfs,jfs2

        网络文件系统:nfs,cifs

        集群文件系统:ocfs2,gfs2

        分布式文件系统:ceph,moosefs,mogilefs,hdfs,gfs,glusterfs

         a、日志型文件系统

             非日志型文件系统:ext2

             日志型文件系统:ext3

         b、交换分区:swap


      7、创建文件系统

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

            要是某种文件系统满足两个条件:

             a、内核中支持此文件系统

             b、用户空间中有文件系统的管理工具


          创建工具mkfs(make file system)

            mkfs -t type device

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

             mk2fs -t {ext2|ext3|ext4} device

                  -b:BLOCK:1024,2049,4096

                  -L 'label':设置卷标

           blkid

             blkid device 打印设备块结构属性



六、练习题

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

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

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

%s/^[[:space:]]/#\1/


3、替换/tmp/function是文件中的/etc/sysconfig/init为/var/log;

%s@/etc/sysconfig/init@/var/log@p 
%s/\/etc\/sysconfig\/init/\/var\/log/p


4、删除/tmp/functions文件中所有已#开头,且#后面至少各了一个空白字符行的行首。

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


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

find /var -user root -group mail

wKioL1XqYnvAIYTzAAC7vP9Pz60563.jpg 


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

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

wKiom1XqYGWTyng8AAEPv0YzmpE636.jpg



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

find /etc -ctime -7 -a ! \( -user root -o -user hadoop \)

wKioL1XqYqKi6AayAAKUpBbhwbs212.jpg



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

find / -nouser -a -group -a -atmie -7

wKiom1XqYI7CeD9bAAavDRFZMO4670.jpg


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

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

wKioL1XqYxWiItUZAASDfThAAZU309.jpg


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

find /etc ! -perm /222

wKiom1XqYQWQuf4ZAAOawtHWroM112.jpg


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

find /etc ! -perm -111

wKiom1XqYRfSaP0IAA2gLKD-CUI530.jpg


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

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

wKioL1XqY1axe3B5AADArzWLczM394.jpg


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

cp /bin/cat /tmp 
chmod u+s /tmp/cat 
su - usera
usera$:/tmp/cat /etc/shadow


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

mkdir /test/
cd /test/
mkdir /data 
 chmod 777 data
  su - usera
  touch /test/data/usera.1
  su - userb
  touch /test/data/userb.1
  su - userc
  touch /test/data/userc.1
  
  root#:chmod g+s data
  
   su - usera
  touch /test/data/usera.2 
  su - userb
  touch /test/data/userb.2 
  su - userc
  touch /test/data/userc.2 
  
  root#:chmod o+t data


你可能感兴趣的:(linux,服务器,local,编辑器)