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

news2024/9/21 18:42:49

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权限,直接赋予的权限会覆盖原来的权限。

使用数字模式来修改权限

使用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2057913.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ | Leetcode C++题解之第355题设计推特

题目&#xff1a; 题解&#xff1a; class Twitter {struct Node {// 哈希表存储关注人的 Idunordered_set<int> followee;// 用链表存储 tweetIdlist<int> tweet;};// getNewsFeed 检索的推文的上限以及 tweetId 的时间戳int recentMax, time;// tweetId 对应发送…

vue3--定时任务cron表达式组件比较

## 背景&#xff1a; 之前使用vue2开发项目时&#xff0c;使用了cron组件&#xff0c;比较了两种组件的使用效果。现在需要把原有的vue2项目升级为vue3&#xff0c;需要对应的cron组件。 方案一&#xff0c;vue3-cron-plus 具体实现&#xff1a; 安装插件 npm install vue3-…

浅谈shell中的while true

目录 shell实现死循环你了解while true中的true吗重新认识true和falsewhile true存在的问题实现shell死循环的另一种方法 在shell中实现死循环&#xff0c;一般都会用 while true&#xff0c;那你知道执行while true时&#xff0c;进程都在做些什么吗&#xff1f; shell实现死…

云计算实训32——安装nginx(修改端口为8080)、roles基本用法、使用剧本安装nginx、使用roles实现lnmp

一、安装nginx并更改其端口 编辑hosts配置文件 [rootmo ~]# vim /etc/ansible/hosts 创建目录 [rootmo ~]# mkdir /etc/ansible/playbook 编辑配置文件 [rootmo ~]# vim /etc/ansible/playbook/nginx.yml 执行测试 [rootmo ~]# ansible-playbook /etc/ansible/playbook/n…

【案例49】ORA-01000:超出打开游标的最大数

问题现象 在登录系统时提示报错&#xff1a;ORA-01000 超出打开游标的最大数。 问题分析 游标就是看成是指向结果集的指针。可以把它看成一种资源&#xff0c;或者一种数据结构。 ORA-01000是开发中常见的异常。这个异常表示程序中打开的游标数目> 数据库中设定的可以打开…

OpenCV几何图像变换(2)计算仿射变换矩阵的函数getAffineTransform()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算三对对应点之间的仿射变换。 该函数计算 23 的仿射变换矩阵&#xff0c;使得&#xff1a; [ x i ′ y i ′ ] map_matrix ⋅ [ x i y i 1 …

Datawhale AI 平台 证书 存个档

&#xff01;证书不怕多 &#x1f508; 大模型开发 工程师 欢迎参与 Datawhale 大模型开发 工程师 计划 联合浪潮信息 面向在校学生、社会在职人士 可获官方颁发的 大模型开发工程师 证书 认证地址&#xff1a;大模型开发工程师考试入口&#xff08;电脑端打开&#xff09;评…

C++笔记---类和对象(下)

1. 初始化列表 1.1 初始化列表的使用 在构造函数中&#xff0c;对成员变量进行初始化可以说是公式化的步骤&#xff0c;而初始化列表就将这一步骤进行了标准化。 初始化列表紧跟在构造函数的参数列表后面&#xff0c;使用方式是以一个冒号开始&#xff0c;接着是一个以逗号分…

今日总结:解决了三个小问题

问题01 1.在Bootstrap5中&#xff0c;offcanvas失去焦点后会自动回到顶端&#xff0c;用了一个非常简单的方法&#xff0c;将触发侧边栏的按钮代码由 <button type"button">换成 <a type"button">更多解决方法详见&#xff1a;更多方法 注…

杰发科技AC7801——GPIO通过寄存器地址控制高低电平

通过这个寄存器来查看控制的是哪个ODR值&#xff0c;使用sample&#xff0c;发现是0x20080068的第7和第9位 使用51控制寄存器的代码来置高置低代码&#xff0c;注意变量需要用unsigned int来声明 unsigned int ledBit 0;mdelay(100);ledBit | (1 << 9); ledBit & ~…

【第五节】Win32汇编程序设计

目录 一、汇编的第一个“helloworld” 二、汇编中的标号 三、的使用 四、数据定义 五、全局变量 六、局部变量 七、结构体 八、结构体的访问 九、获取变量地址 十、函数 十一、分支与循环 十二、内联汇编 十三、裸函数的使用 一、汇编的第一个“helloworld” .38…

从桌面到云端,2024年智能录屏解决方案全攻略

从教学演示到游戏直播&#xff0c;从软件教程到会议记录&#xff0c;录屏软件已经逐渐成为不可或缺的工具。那么面对这众多录屏软件我们要怎么选择呢&#xff1f;有没有和win10录屏快捷键一样可以快捷操控的工具呢&#xff1f;这次我们一起来探讨吧。 1.福昕录屏大师 链接&am…

Windows下线程的创建与使用(win32-API)

一、前言 线程是比进程更轻量级的执行单元&#xff0c;允许在一个进程中并发执行多个控制流。每一个线程都有自己的程序计数器、寄存器集和栈空间&#xff0c;但它们共享所属进程的全局数据和资源。这种共享内存模型使线程间的通信比进程间通信更为高效&#xff0c;同时也带来…

2-71 基于matlab的小波分析在心电信号去噪中的应用

基于matlab的小波分析在心电信号去噪中的应用&#xff0c;主要针对心电信号中的肌电干扰/基线漂移/工频干扰进行的算法研究&#xff0c;输出了三类去噪结果。程序已调通&#xff0c;可直接运行。 2-71 基线漂移去噪 工频干扰去噪 - 小红书 (xiaohongshu.com)

android apk 加固后的地图加载异常及重新签名

1.首先根据需求将打包生成后的APK进行加固&#xff0c;可以使用360、阿里、腾讯加固等。 2.加固后的APK无法直接安装&#xff0c;需要重新进行签名。 3.首先找到sdk的位置&#xff0c;进入build-tools目录。 4.根据gradle文件选择版本目录。 5.将加固后的APK放至该目录下。在…

QT-小游戏翻金币

QT-小游戏翻金币 一、演示效果二、使用步骤三、下载链接 一、演示效果 二、使用步骤 #include "chooselevelscene.h" #include <QMenuBar> #include <QPainter> #include "mypushbutton.h" #include <QDebug> #include <QTimer> …

Ajax-3

一.图片上传 1.获取图片文件对象 2.使用FormData携带图片文件 const fd new FormData() fd.append(参数名, 值) 3.提交表单数据到服务器&#xff0c;使用图片url网址 二.AJAX原理—XMLHttpRequest 定义&#xff1a;XMLHttpReques&#xff08;XHR&#xff09;对象用于与服务器…

P38-数据存储1

百度2015年系统工程师笔试题 编程题 编程题 编程题 编程题

20240820飞凌的OK3588-C的核心板在Linux R4下使用poweroff关机

20240820飞凌的OK3588-C的核心板在Linux R4下使用poweroff关机 2024/8/20 14:03 经过测试&#xff0c;poweroff有效&#xff0c;关机之后&#xff0c;12V/0.024A12*0.0240.288W shutdown无效。 reboot -p无效。 rootok3588:/# rootok3588:/# shutdown -h now sh: shutdown: c…

Maven-06.依赖管理-依赖传递

一.依赖传递 什么是依赖传递&#xff1a;projectA依赖于JAR包和projectB&#xff0c;而JAR包又依赖于黄色的JAR包。而projectB依赖于projectC和其他JAR包。因此projectA依赖于projectB,projectC和图中的所有JAR包。这就是依赖的传递性。其中蓝绿色部分成为直接依赖。在当前项目…