Linux编程系列之权限理解和基础开发工具的使用(上)


前言

本次一部分是将上次ls中没介绍完全的东西介绍完,然后就是一些工具、yum、vim、gcc/g++,gdb,makefile,CMake,再用vim写一个简单的进度条代码,本篇介绍到vim。


一、Linux下用户分类和权限问题

a.用户分类

用户分为普通用户和root,自己add出来的用户就是普通用户,输入whoami可以知道自己是什么用户类型,也可以看框里的第一个

普通用户和root最大的区别就是权限问题,root不受权限的约束,而普通用户是要受权限的约束的! 什么是权限的约束? 比如:

bash给的是权限不允许,而不是它不能执行! 比如下载和删除东西,普通用户都是要进行访问的!

如果想要暂时提升权限,就想用root的身份执行这行代码,怎么搞?sudo

,但是只这样是不行的,因为系统不信任你! 所以需要将用户添加到系统信任的名单中,在哪里呢? /etc/sudoers,在root的下面,添加这样一行,换成自己的用户名,当然这是系统文件,需要在root下执行

root和普通用户怎么切换?? ?

root -> 普通用户,su + 用户名即可。

普通用户-> root ,su 或者 su -,su切换到root用户,不切换pwd,su - pwd

也切换到root下。

b.权限问题

首先权限问题是分为两类的,一类是用户,root没有权限约束,而普通用户有,每一个用户又有角色之分!分为三类,拥有者,所属组,其他人。其次是对于一个东西的属性,比如gcc编译出来的可执行程序,它有可以执行的权限,再比如一个文件可以cat查看,它有可以读的权限,再比如这个目录可以进去,也是因为有读的权限! 我们就来详细介绍一下ll的那一行。

ll具体解释

一查发现ll的一行一共有9列,第一列内容很重要!

来看第一列,第一列一共有十个字符,其中第一个字符代表着文件的类别是什么!

-:普通文件,可执行程序,文本,库都属于普通文件。

d:目录文件,

b:块设备文件,

c:字符设备文件,

p:管道文件

剩下的九个字符,三个为一组,分别是r,w,x,分别代表着可读,可写,可执行,-即为没有权限,9个字符一共三组,这三组就代表着拥有者,所属组和其他人的权限!

第二列:硬连接数,这个文件系统和软硬连接那块会提到

第三列和第四列:分别是拥有者和所属组,其他默认就是这两个之外的

第五列:文本大小

第六、七、八列:创建文本的时间

第九列:文件名

我们发现,后缀是什么不重要,Linux中文件后缀没有直接的意义。

二进制表示法和默认权限问题

回到第一列,再谈一些知识,对于r,w,x
如果把这三个权限位置各视为一个0,1二进制位,有权限记作1,没权限记作0,那么对于一个具体的角色的权限的范围就是[000,111],转化成十进制数字就是[0,7]! 那么三个角色我就能用三个数字来表示权限!

这样做可以方便修改权限!比如后面讲的chmod,就是修改权限,只需要三个数字就可以修改!

系统默认给的权限是什么??

自己来算的话:根据图里普通文件是rw-rw-r--,转化成数字应该是664

目录是rwxrwxr-x,转化成数字应该是775

但是实际上:默认给普通文件的起始权限应该是666,目录是777

那为什么创建的时候看到的是这个结果呢?

因为权限掩码---umask

凡是出现在umask中的权限,不会出现在最终的文件权限中!

最终权限 = 默认权限 &(~umask)

当然也可以修改umask,umask xxxx 即可

修改权限

如何修改权限???

a)chmod

功能:设置文件的访问权限

格式:chmod [参数] 权限文件名常用选项:

常用选项:R -> 递归修改目录文件的权限

说明:只有文件的拥有者和root才可以改变文件的权限

格式:用户表示符+/-=权限字符

+:向权限范围增加权限代号所表示的权限

-:向权限范围取消权限代号所表示的权限

=:向权限范围赋予权限代号所表示的权限用户符号:

u:拥有者

g:所属组

o:其它用户

a:所有用户

这样做是不是很麻烦,当然可以直接用数字,chmod xxx 文件名 即可

b)chown

功能:修改文件的拥有者

格式:chown [参数] 用户名 文件名

c)chgrp

功能:修改文件或目录的所属组

格式:chgrp [参数] 用户组名 文件名

常用选项:-R 递归修改文件或目录的所属组

可以用file来查看文件类型

file指令:

功能说明:辨识文件类型。

语法:file [选项] 文件或目录...

常用选项:

-c 详细显示指令执行过程,便于排错或分析程序执行的情形。

-z 尝试去解读压缩文件的内容。

目录权限问题

普通文件的r,w,x都好理解,目录的呢?

可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.

可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.

可执行权限: 如果目录没有可执行权限, 则无法cd到目录中.

这个东西我们会在文件系统中再次去理解。

所以:一个文件能不能被删除,不看这个文件本身的r,w,x而去看的是这个目录是否有w权限。

这里就出现一个问题,一个目录下,只要有w权限,我就可以删掉别人创建的文件!这里就不太合理了。为了解决这个问题,Linux下提出了粘滞位的概念,chmod +t 具体文件名

当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由

一、超级管理员删除

二、该目录的所有者删除

三、该文件的所有者删除

二、yum

就像手机上的软件一样,Linux中也需要安装软件,核心就是需求的推动。Linux下如何安装软件呢??

1.源代码拷贝过来,自己手动编译。 这样肯定是不太好的,一方面很麻烦,另一方面把源代码暴露出来了。

  1. rpm安装,Linux的安装包,安装MySQL的时候就用的是rpm安装。先搞到/etc/yum.repos.d/,知道yum要访问的软件仓库信息,再去yum安装.

  2. yum安装,有点像应用市场安装,yum是Linux下非常常用的一种包管理器. 主要应用在Fedora, RedHat, Centos等发行版上.

/etc/yum.repos.d/ 目录下存放着yum要去访问的仓库,有Centos提供的默认yum仓库,mysql那个是我自己添加的

yum list可以看到我们可以下载哪些软件。

一般Linux操作系统,默认配置的yum源是国外的,可能下载比较慢,可以更新yum源,但是云服务器厂商一般已经替换了。


三、vim

vim基本概念

vim是Linux/Unix下的多模式编辑器,主要编写文本,它支持很多种语言的编写,也支持一些搜索、替换的高效操作,是一款功能强大的编辑器,对于vi和vim,vim是vi的升级版,兼容了vi的所有指令,还有了一些新的改进。在现代vim中,鼠标可以使用,但是在当时的理念来说,一方面认为键盘的操作更高效,另一方面也是兼容Unix早期环境不支持鼠标,使用hjkl进行光标的移动.

当然,现在可以用vscode连接云服务器的情况下,vim还是差点意思的,vscode支持各种插件,用起来就是比vim舒服。

vim模式

上面提到,vim是一款多模式编辑器,一共有12种模式,但是只需要掌握三种即可,就可以进行正常代码的编写了,还有一种可以见到。

这三种分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:

正常/普通/命令模式(Normal mode)

控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode

插入模式(Insert mode)

只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。

末行模式(last line mode)

文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+: 即可进入该模式。

要查看你的所有模式:打开vim,底行模式直接输入:help vim-modes

切换模式:

命令模式切换到插入模式:vim打开文件之后默认是命令模式,按a 或者 i 或者 o 切换到插入模式。

任意模式切换回命令模式:都按Esc

命令模式切换到底行模式: 按shift + ;其实就是输入:

如果想从插入模式切换到底行模式呢??

记住,都是先回到命令模式,再去进行切换。

vim基本操作

打开文件,无论存不存在,vim + 文件名,不存在会创建

退出: 在底行模式下,输入

w (保存当前文件)

wq (输入「wq」,存盘并退出vim)

q! (输入q!,不存盘强制退出vim)

这个q!在一些情景会见到,比如打开了一个系统文件,你想输入wq退出时

命令模式下,绝大多数输入都会被当成命令,不会当成文本输入。命令模式就是方便一些操作,比如移动光标,多行删除,多行复制等等。

移动光标:

vim可以直接用键盘上的箭头的上下左右来上下左右移动,但正规的vim是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格

按「G」:移动到文章的最后 (shift + g)

按「 $ 」:移动到光标所在行的"行尾"

按「^」:移动到光标所在行的"行首"

按「w」:光标跳到下个字的开头

按「e」:光标跳到下个字的字尾

按「b」:光标回到上个字的开头

按「#l」:光标移到该行的第#个位置,如:5l,56l

按[gg]:进入到文本开始

按[shift+g]:进入文本末端

按「ctrl」+「b」:屏幕往"后"移动一页

按「ctrl」+「f」:屏幕往"前"移动一页

按「ctrl」+「u」:屏幕往"后"移动半页

按「ctrl」+「d」:屏幕往"前"移动半页

删除文字

「x」:每按一次,删除光标所在位置的一个字符

「#x」:例如,「6x」表示删除光标所在位置的"后面(包含自己在内)"6个字符

「X」:大写的X,每按一次,删除光标所在位置的"前面"一个字符(shift + x)

「#X」:例如,「20X」表示删除光标所在位置的"前面"20个字符

「dd」:删除光标所在行---也是剪切

「#dd」:从光标所在行开始删除#行----多行删除--剪切多行

复制

「yw」:将光标所在之处到字尾的字符复制到缓冲区中。

「#yw」:复制#个字到缓冲区

「yy」:复制光标所在行到缓冲区。

「#yy」:例如,「6yy」表示拷贝从光标所在的该行"往下数"6行文字。

「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与"y"有关的复制命令都必须与"p"配合才能完成复制与粘贴功能。比如复制5行,5p

替换

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

「R」:替换光标所到之处的字符,直到按下「ESC」键为止。(shift + R,进入了替换模式,Replace)

撤销上一次操作

「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次"u"可以执行多次恢复。

「ctrl + r」: 撤销的恢复

更改

「cw」:更改光标所在处的字到字尾处

「c#w」:例如,「c3w」表示更改3个字

跳至指定的行

「ctrl」+「g」列出光标所在行的行号。

「#G」:例如,「15G」,表示移动光标至文章的第15行行首

底行模式操作:

列出行号

「set nu」: 输入「set nu」后,会在文件中的每一行前面列出行号。

跳到文件中的某一行

「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行。

查找字符

「/关键字」: 先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止。

「?关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往前寻找到您要的关键字为止。

可以使用鼠标:底行模式下输入set mouse=a,即可支持鼠标

vim中进行多行注释:

1.ctrl + v 进入V-Block模式

2.hjkl进行注释选择,

3.shift + i进入插入模式

4.对一行进行注释 //

5.按Esc,注释完毕

取消注释:

1.ctrl + v

2.hjkl

3.按d

配置vim

当然vim也是可以被配置的。在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。

而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:".vimrc"。

例如,/root目录下,通常已经存在一个.vimrc文件,如果不存在,则创建之。

切换用户成为自己执行 su ,进入自己的主工作目录,执行 cd ~

打开自己目录下的.vimrc文件,执行 vim .vimrc

常用配置选项:

设置语法高亮: syntax on

显示行号: set nu

设置缩进的空格数为4: set shiftwidth=4

也可以使用插件

要配置好看的vim,原生的配置可能功能不全,可以选择安装插件,建议网上查找.

内容较多分为两篇,下一篇介绍gcc/g++,makefile等

相关推荐
添砖java‘’1 小时前
Linux线程控制全解析
linux·c++·线程
保持低旋律节奏2 小时前
linux——进程
linux·运维·服务器
YFLICKERH2 小时前
【Linux系统】ubuntu - python 虚拟环境搭建|使用|与系统环境的区别
linux·python·ubuntu·虚拟环境
Ha_To2 小时前
2025.12.19 OSPF
运维·服务器·网络
proware2 小时前
3588 cma heap应用示例之图像采集
linux·cma·dma buf
羊村懒哥2 小时前
告别命令行查日志!CentOS 安装 ELK 实现可视化监控
linux·elk·centos
txzz88882 小时前
CentOS-Stream-10 YUM本地仓配置
linux·运维·centos·yum·yum本地仓配置
HalvmånEver2 小时前
Linux:Ext系列⽂件系统(三)
linux·运维·服务器
伍叁_2 小时前
shell脚本案例
linux·运维·服务器