Linux-3

  • Linux第三天目标

    • 掌握vi/vim编辑器的使用

    • 掌握权限管理命令

    • 掌握Linux文档处理三剑客

1. vi/vim文本编辑器

  • vim是vi的增强版,vi是系统自带的。以下命令在vi/vim中通用:

    • 刚打开的默认模式

      • 快捷键:gg跳到文件开头,G跳到文件最后一行。

      • 快捷键:0跳到行首,$跳到行尾。

      • 快捷键:dd删除光标所在行

      • 删除多行:首先进入底线模式,输入显示行号命令:set nu,然后输入你要删除的行,再输入d,即可删除。如:5,10d 代表删除5-10行。取消行号命令:set nonu

      • 撤销恢复操作:按u

    • 底线模式,在默认模式下,按:进入。按esc回到默认模式。

      • 命令:w保存,另存为一个新文件:w 文件名

      • 命令:q退出,如果你修改了文件直接退出会有提示,因为你没保存,这个时候想保存退出使用wq,如果不想保存,直接退出,需要加!来强制退出,如q!

      • 命令:wq保存并退出

      • 命令:set nu设置行号,有了行号之后可以输入行号直接回车,定位所在行。set nonu可以取消行号。

      • 搜索关键字命令:/关键字 即可完成对关键字的搜索,光标会定位到搜索结果的第一个位置,这个时候可以使用n和N在多个结果之间切换,n下一个,N上一个。:

      • 命令:set ic 忽略大小写,set noic不忽略大小写

    • 插入模式,insert模式。按i、a、o都可以进入插入模式,i是在光标前插入,a是在光标之后插入,o是在光标位置的下一行另起一行插入内容。按esc回到默认模式。

2.Linux权限管理命令

  • 只有文件的所有者或者root用户才能修改文件的权限。

  • 角色:u、g、o三种角色,u拥有者,g所属的组,o其他人。这三个分别是user、group、other的简写。还有一种简写:a,代表all,所有人,指代所有角色。

2.1 组管理的相关命令

  • 1 添加组

    • groupadd 组名

    • groupadd devgroup:创建一个组devgroup

  • 2 删除组

    • groupdel 组名

    • groupdel devgroup:删除组devgroup

  • 3 将用户添加到指定的组、从指定的组中移除

    • gpasswd –a/-d 用户名 组名

    • gpasswd –a zhangsan test

    • gpasswd –d zhangsan test

  • 4 增加用户时,直接增加组

    • useradd -g 用户组 用户名
  • 5 修改用户的组

    • usermod -g 用户组 用户名
  • 6查看当前登录用户的组内成员

    • groups
  • 7查看某个用户所在的组

    • groups 用户名
  • 8查看所有的用户信息

    • cat /etc/passwd外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
  • 以上信息每一行代表一个用户,冒号间隔,如第一行,tommy是用户名,x是密码这里隐藏了,1000是用户id,后一个1000是用户组id,/home/tommy是这个用户的家目录,/bin/bash是shell命令所在目录

  • 9查找某个用户的信息

    • cat /etc/passwd | grep 用户名
  • 10查看所有组的信息

    • cat /etc/groupimg

    • 每行代表一个组的信息,看最后一行,冒号分隔多个信息,dev代表组名,x是组密码,隐藏了,1009是组id,zp,zhangpei,tommy代表这个组内的用户

  • 11查找某个组的信息

    • cat /etc/group|grep 组名

2.2 权限类型:r读,w写,x执行

  • 通过查看文件目录的详情信息,来了解权限相关的部分。使用命令:ls -l 这个也可以简写成:ll

    • 第一列:一共10个字符位置,第一个字符代表类型,类型有以下几种:-代表普通文件,d代表目录,l代表链接。第二个到第十个字符,是三个一组出现的,每一组代表了一种角色的读写执行权限,第一组代表了u拥有者的权限,第二组代表了g所属组的权限,第三组代表了o其他人的权限。

    • 第二列:显示一个数字,如果是目录,这个数字代表这个目录下一级子目录的个数(包括了隐藏的当前目录.和上级目录…),如果是文件,这个数字代表这个文件的链接数。

    • 第三列:此文件或目录的所属用户

    • 第四列:此文件或目录所属的组

    • 第五列:显示文件或目录的大小,默认以字节单位显示

    • 第6-8列:显示的是最后修改时间

    • 第9列:文件或目录名称

2.3 修改权限:chmod

  • 使用角色代号ugoa来修改权限

    • chmod o+w 文件或目录名,代表给其他人o这种角色增加w写权限

    • chmod ug+x 文件或目录名,代表给拥有者和所属组增加执行权限

    • chmod a-x 文件或目录名,代表给所有角色去掉执行权限

    • chmod g=rw 文件或目录名,代表给拥有者直接赋予rw权限,直接赋予的权限会覆盖原来的权限。

  • 使用数字模式来修改权限

    • 使用3位数字分别代表三种角色的三种权限,每个数字都可以表示三种权限,每个数字是由三位二进制数字转换而来。
  • 参照下表:img

    • 举例:chmod 754 文件名,代表给这个文件754权限,7代表所有者具有读写执行权限,实际代表111二进制,5代表所属组具有读和执行权限,实际是101,4代表给其他人只读权限,实际是100
  • ^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)$

3. 文档处理三剑客

3.1 grep命令

  • 用于在文件中查找字符串,它是通过正则表达式的语法查找的。

  • 格式:grep 关键词 文件名 代表在文件中查找对应的关键字,关键字部分可以替换成正则表达式。

  • 参数-i:忽略大小写

  • 参数-n:显示匹配的行,同时加上行号

  • 参数-v:显示不匹配的行

  • 使用正则表达式匹配

    • 正则表达式是一种匹配字符串的技术,有它自己的语法和规定,我们不需要学习,只需要使用即可,可以在网络上查找常用的正则表达式,直接使用。

    • grep “^a” 文件名,代表在文件中查找以a开头的字符

    • grep “n$” 文件名,代表在文件中查找以n结尾的字符

3.2 sed命令

  • sed可以按照脚本指令来处理编辑文本文件。主要用来对文件进行增删改操作。它以行为单位来执行操作。注意:动作指令需要使用引号包括,并且只能使用单引号。

  • 格式:sed [参数][动作指令] 文件名

    • 参数:

      • -n:取消默认的输出,这个参数一般配合p(print)一起使用,可以打印指定的内容

      • -i:会修改源文件。如果不加,sed做的所有操作都不会修改源文件。

      • -e:可以同时指定多个指令,每个-e后面可以跟一个指令

    • 动作指令

      • a:新增,append的缩写

      • d:删除

      • c:替换行

      • i:插入

      • p:打印,一般和-n参数一起使用

      • s:替换指定的字符串

    • 实例

      • 新增a

        • sed ‘2a test’ test.txt 在第二行后面新增一行内容test

        • sed ‘1,3a test’ test.txt 在第1行到第3行每一行后面都增加一行内容test

        • sed ' a t e s t ′ t e s t . t x t 在最后一行增加一行内容 t e s t , a test' test.txt 在最后一行增加一行内容test, atesttest.txt在最后一行增加一行内容test代表最后一行

      • 删除d

        • sed ‘2d’ test.txt 删除第2行

        • sed ‘1,3d’ test.txt 删除第1-3行

      • 替换行c

        • sed ‘2c test’ test.txt 将第二行内容整体替换成test

        • sed ‘1,3c test’ test.txt 将1-3行整体替换成test

      • 插入i

        • sed ‘2i test’ test.txt 在第二行前面插入一行内容test

        • sed ‘1,3i test’ test.txt 在第1-3行每行前面插入一行test

      • 打印p

        • sed ‘2p’ test.txt 在默认输出的情况下,打印第二行,相当于第二行打印了两遍

        • sed ‘1,3p’ test.txt 在默认输出的情况下,打印第1-3行,相当于第1-3行各打印了两遍

        • sed -n ‘2p’ test.txt 通过-n参数取消默认输出,只打印第二行

        • sed -n ‘1,3p’ test.txt 通过-n参数取消默认输出,只打印第1-3行

        • 我们还可以使用正则表达式去匹配我们要找的内容,然后打印出来

          • sed -n ‘/1*$/p’ test.txt 使用正则表达式匹配由全数字构成的字符,并打印出来,正则表达式放在两个/中间

          • sed -n ‘/2*$/!p’ test.txt 在上面命令p指令前加!,代表取反操作,就是打印不匹配的行

      • 替换指定的字符串s

        • sed ‘s/old/new/’ test.txt 替换old为new,默认只替换每一行第一个匹配结果

        • 如果希望全部替换,需要加g命令,g代表global(全局)如:sed ‘s/old/new/g’ test.txt

        • sed ‘s/OLD/new/gi’ test.txt 又增加了一个命令i,代表忽略大小写。

        • sed ‘1,3s/old/new/g’ test.txt 指定范围内进行替换,只替换第1-3行的内容

    • 使用-e参数同时指定多个指令

      • sed -e ‘s/old/new/g’ -e ‘2d’ test.txt 先用s指令完成替换,然后再用d指令删除第二行

3.3 awk命令

  • awk是一个强大的文本分析工具,简单来说就是把文件逐行读入,默认以空格作为分隔符,然后进行分隔切片,切片后的部分是一列,然后再进行处理输出。它以列为单位来执行操作。

  • 语法:awk [option]‘pattern{action}’ filename 解释:option是参数,pattern是条件模式,{action}是动作指令。注意:条件、动作指令都需要用引号包括,并且只能用单引号,动作要同时包括在{}里面。

  • 默认情况下,awk是逐行处理文本的,也就是先处理当前行,再处理下一行,这种模式是默认模式,也叫空模式,即条件为空的模式。如果指定了条件模式pattern,awk在处理文本时,只有满足条件的行才会被处理。

    • 准备工作:准备一个文件用于后面命令的演示,执行date>>test.txt命令四次,给里面写入四行日期时间信息。

    • options参数:常用的是-F,用来指定分隔符

      • 案例:指定分隔符为冒号,然后进行分隔,分隔之后就有了多列,然后打印前两列。

      • awk -F: ‘{print $1,$2}’ test.txt

      • 案例:指定多个分隔符,先使用空格分隔,然后再对分隔出来的列继续使用冒号分隔

      • awk -F’[ :]’ ‘{print $4,$5,$6}’ test.txt

    • pattern条件模式:其实就是执行指令动作需要满足的条件,类似if(pattern){动作指令脚本};

      • awk命令主要有以下几种条件模式:

        • 空模式:也是默认模式,即不指定匹配条件,一行一行去处理文本内容。

        • BEGIN模式:即在文本处理之前,需要执行的操作,比如定义一些变量,给后面使用,或者打印一个表格的表头。

        • END模式:在处理完文本所有行之后,需要执行的操作。

          • awk ‘BEGIN{print “星期 月份 日期 时间 时区 年份”}{print $0}’ test.txt 在正式打印内容之前,先打印一个表头,$0代表打印所有列。

          • awk ‘BEGIN{print “lets begin”}{print $1,$2}END{print “end”}’ test.txt 开始处理每一行内容之前,先执行BEGIN操作,打印了lets begin,然后处理每一行,并且打印前两列,处理完全部行之后,再执行EDN操作,打印了end

          • awk ‘BEGIN{print “定义一个变量line”,line=0}{line+=1}END{print line}’ test.txt 开始处理文档之前,先打印了一句话,并且定义了一个变量line,给它初始化为0,然后每次处理一行的时候,给line+1,最后处理完毕后,打印出line的值,即行数。

        • 关系运算模式:就是在指定条件时,使用关系运算符。

          • 如:我们取指定的行进行操作

          • NR是表示行号的变量,我们使用这个变量来对行进行逻辑运算。

          • 如:取第一行只分隔,不做任何动作:awk 'NR1’ test.txt 注意:'NR1’是指定的执行条件,不是脚本指令,所以不能放到{}中。

          • 如:awk ‘NR==1 {print $1}’ test.txt 取第一行,然后分隔,然后打印分隔后的第一列。

          • 如:取多行,取第2到第4行 awk ‘NR>=2&&NR<=4’ test.txt

        • 正则模式:把正则表达式当作条件,满足正则表达式匹配的行才处理。正则表达式放在//中

          • 如下:
            • 找出有指定关键字的行来处理:awk ‘/old|hello/’ test.txt 代表找出含有old或hello字符的行
    • action动作指令:就是你要执行的操作

      • 输出完整的内容:awk ‘{print $0}’ test.txt 所有列用$0代表

      • 打印指定的列:awk ‘{print $1,$3}’ test.txt 打印第一列和第三列

      • 打印最后一列:需要用到一个变量NF,代表最后一列的列数(列数从1开始)。awk ‘{print $NF}’ test.txt

      • 输出总共有多少列:awk ‘{print NF}’ test.txt

wk ‘/old|hello/’ test.txt 代表找出含有old或hello字符的行

- action动作指令:就是你要执行的操作

	- 输出完整的内容:awk '{print $0}' test.txt 所有列用$0代表

	- 打印指定的列:awk '{print $1,$3}' test.txt  打印第一列和第三列

	- 打印最后一列:需要用到一个变量NF,代表最后一列的列数(列数从1开始)。awk '{print $NF}' test.txt

	- 输出总共有多少列:awk '{print NF}' test.txt 

	- 输出总共有多少行:使用行数变量NR,如:awk 'END{print NR}' test.txt 

  1. 0-9 ↩︎

  2. 0-9 ↩︎

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值