Linux系统-vi/vim编辑器&权限管理&文档处理三剑客

1.vi/vim文本编辑器

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

刚打开的默认模式

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

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

快捷键:CTRL+鼠标左键,可以将光标定位到任意位置

快捷键: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,所有人,指代所有角色。

组管理的相关命令

组可以方便我们对系统资源文件进行权限管理

每个用户至少都有一个组,用户创建的时候,如果不指定,默认会创建跟用户名同名的组。这个组叫做主组。除了主组之外,还可以将用户添加到其他组,这些叫做附加组,可以是多个组,从而共享其他组的资源。

1.1 添加组

groupadd 组名

groupadd dev:创建一个组dev

groupadd test:创建一个组test

1.2 删除组

groupdel 组名

groupdel dev:删除组dev

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

gpasswd –a/-d 用户名 组名

gpasswd –a zhangsan test

gpasswd –d zhangsan test

1.4 增加用户时,直接增加组

useradd -g 用户组 用户名(指定用户的主组)

useradd -G 用户组 用户名(指定用户的附加组,可以是多个,逗号隔开)

1.5 修改用户的组

usermod -g 用户组 用户名(修改到/etc/passwd用户信息中)

usermod -G 用户组 用户名(修改到/etc/group组信息中)

1.6查看当前登录用户的组内成员

groups

1.7查看某个用户所在的组

groups 用户名

1.8查看所有的用户信息

cat /etc/passwd

以上信息每一行代表一个用户,冒号间隔,如第一行,tommy是用户名,x是密码这里隐藏了,1000是用户id,后一个1000是用户组id,/home/tommy是这个用户的家目录,/bin/bash是shell命令所在目录。

1.9查找某个用户的信息

cat /etc/passwd | grep 用户名

1.10查看所有组的信息

cat /etc/group

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

1.11查找某个组的信息

cat /etc/group|grep 组名

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

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

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

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

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

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

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

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

第9列:文件或目录名称

修改权限:chmod

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

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

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

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

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

粘着位 t

这个权限位主要对目录有效,但偶尔也会以不同的形式出现在文件上(尽管这通常不常见,且意义不同)。

粘着位(Sticky Bit)在目录上的作用

当粘着位被设置在目录上时(通过chmod +t命令),它限制了在该目录下创建的文件或子目录的删除和重命名操作。具体来说,只有文件的属主(owner)或超级用户(root)才能删除或重命名该文件或目录。这对于共享目录(如/tmp/var/tmp)特别有用,因为这些目录通常允许所有用户写入文件,但如果不设置粘着位,任何用户都可能删除或重命名其他用户的文件,从而导致数据丢失或混乱。

粘着位(Sticky Bit)在文件上的表现

虽然粘着位主要设计用于目录,但在某些情况下,它也可能以T的形式出现在文件上。然而,这种情况下的意义与目录上的粘着位不同,且通常不被广泛讨论或应用。在文件上设置粘着位(通过chmod +T命令,注意是大写的T,因为文件通常没有执行权限)可能会影响到文件的某些特殊行为,但这并不是粘着位的主要用途。

注意事项

粘着位t(小写)通常用于目录,而T(大写)可能出现在没有执行权限的文件上,但这并不是标准用法。

粘着位主要用于控制目录中文件的删除和重命名权限,以防止非属主用户意外或恶意删除其他用户的文件。

可以通过ls -ld命令查看目录的权限,包括粘着位。如果目录权限的最后一位是小写的t,则表示设置了粘着位。

使用chmod +t命令可以为目录设置粘着位,而chmod -t命令则用于移除粘着位。

总结:

Linux中的T(或t)权限位代表了粘着位,它在目录上起着重要的安全作用,用于限制文件的删除和重命名操作。

使用数字模式来修改权限

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

参照下表:

举例:chmod 754 文件名,代表给这个文件754权限,7代表拥有者具有读写执行权限,实际代表111二进制,5代表所属组具有读和执行权限,实际是101,4代表给其他人只读权限,实际是100。

4.文档处理三剑客

grep命令

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

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

参数-i:忽略大小写

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

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

使用正则表达式匹配

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

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

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

另外,在配合管道符使用的时候,应经常见到grep命令,比如 cat 文件名 | grep 关键字

sed命令

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

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

        参数:

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

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

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

        动作指令:

a:新增

d:删除

c:替换行

i:插入

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

s:替换指定的字符串

        实例:

不加参数:
新增a:

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

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

sed '$a test' test.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

加参数-i会修改源文件

sed -i '2a test' test.txt 在第二行后面新增一行内容test

打印p
不加参数:

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

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

加参数-n:

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

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

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

sed -n '/^[0-9]*$/p' test.txt 使用正则表达式匹配由全数字构成的字符,并打印出来,正则表达式放在两个/中间。

sed -n '/^[0-9]*$/!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指令删除第二行

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 'NR==1' test.txt 注意:'NR==1'是指定的执行条件,不是脚本指令,所以不能放到{}中。

如: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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值