当前位置: 首页 > news >正文

Linux基础指令及权限

文章目录

前言

一、Linux下基本指令

1.ls

2.pwd

3.cd

4.touch

5.mkdir

6.rmdir && rm

7.man

8.which

9.cp

10.mv

11.cat

12.more 和 less

13.head 和 tail

14.date

15.find

16.whereis

 17.grep

 18.top

19.zip/unzip

20.tar

21.bc

22.uname

23.file

24.热键

二、shell命令以及运行原理

三、Linux权限的概念

1.Linux文件类型

2.Linux用户(root/普通用户)

3.权限的理论解释

4.权限的操作实验

5.目录的权限

6.粘滞位

总结


前言

文章是本人学习过程中的一些记录、思考和参考大佬的文章后自己的理解。同时也希望自己以讲述的方式来呈现给大家,欢迎大家来指正交流


一、Linux下基本指令

1.ls

功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。

ls -l

列出文件的详细信息

当显示的文件前面是 d 开头的,这说明该文件为目录文件

当显示的文件前面是 - 开头的,这说明该文件为普通文件


ls -l -d

 -d 表示不查看目录里面的内容,此时只查看目录本身的内容

2.pwd

功能:显示用户当前所在的目录

在Linux中路径用/:作为路径的分隔符,举个例子:

/root/zxc/lesson1

此时,lesson1为当前的工作目录,而zxc为上级目录

路径存在的价值,在于标识文件的唯一性和定位目标文件

3.cd

功能:改变工作目录。将当前工作目录改变到指定的目录下

cd .    表示进入当前目录

cd ..   表示返回上级目录

cd -    可以直接跳转至最近路径,也就是上次所处的路径

cd ~   进去当前用户的家目录

如何知道当前用户:

家目录就是指定用户,登录时默认所处的路劲,叫做家目录

无论是Linux还是window,其目录结构都是树状结构

 其中 root后面的 / 不再是路径的分隔符,而是Linux的根目录,不行我们可以ls一下

通过树状图,我们可以明白,路上节点一定是目录,叶子节点一定是空目录或普通文件

下面我们来说说Linux的路径:

绝对路径:从根目录开始,定位一个文件的方式,即具有唯一性的路径

        如这个路径:    /root/zxc/lesson1

        至于为什么绝对路径具有唯一性,这是因为任何一个节点,都只有一个父节点

相对路径:相对于当前用户所处目录,定位文件的路径方式

        如这个文件:  假设当前所处路径为 /root/zxc/lesson1,那么../lesson2 就是个相对路径

        也就是说相对于当前路径的路径,当然相对路径也是有唯一性

综上所示:因为路径具有唯一性,所以Linux通常采用路径来定位文件

4.touch

功能:touch命令参数可更改文档或目录的日期时间,包括存取时间更改时间,或者新建⼀个不存在的文件。
我们知道        文件 = 文件内容 + 文件属性

在这里我们简单介绍一下ACM时间

 Access(访问时间)、Modify(新建时间)、change(属性改变时间)     

当文件内容发生改变,Modify会发生改变

当文件属性发生改变,Change会发生改变

 stat指令可以查看不同文件的属性

5.mkdir

功能:在当前目录下创建目录

若当前目录为/root/zxc      

mkdir lesson3   在/root/zxc目录下创建lesson3目录

其中使用 mkdir -p可以建立多个目录

如: mkdir -p lesson4/lesson4_1/lesson4_1_1/lesson4_1_1_1

6.rmdir && rm

功能:rmdir可以删除空目录,   rm可以同时删除文件或目录

一般我们直接使用rm,不使用rmdir
当账户为root账号是,使用上述指令,系统会再次确定是否删除,如:

想要不再确定,可以加个  -f   ,即强制删除

若系统显示"Is a directory" ,加个 -r 即可

rm * 表示删除该目录的所有文件,要是删不掉,可以加个 -rf,即 rm -rf *

当然普通账号想要安全点,可以加个 -i ,即删除前逐⼀询问确认

7.man

功能:Linux的命令有很多参数,我们不可能全记住,可以通过查看联机手册获取帮助

如: 我们想要知道ls指令的作用 ,我们就可以使用man, 即man ls

解释⼀下:man手册分为9章(不同系统可能会有差别)

• 1 是普通的命令

• 2 是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么

头文件)

• 3 是库函数,如printf,fread4是特殊文件,也就是/dev下的各种设备文件

剩下的6章我们几乎不会用到,感兴趣可以自行查找

 如: man 3 printf 即从第三章开始查找,若是不带数字,会从第一章开始依次查找

8.which

功能:查找系统可执行命令,对应的路径

 

  • 所谓命令,其实就是Linux指定目录下的(/usr/bin)可执行文件.
  • 指令:本质就是别人写的可执行程序或者某些脚本,被放在了系统的特定路径下(/usr/bin)
  • 所谓的安装软件,核心其实就是把目标软件拷贝到系统认识的指定路径下

 在介绍两个小命令,file指令:可以查看详细的文件类型

alias指令:对指令取个别名

alias bbc='ls'

 他们的本质还是一样的

9.cp

 功能: 复制文件或目录


 在学习这个指令前,咱先认识一个思想:

Linux下,一切皆文件

 echo指令的作用就是将后面的内容打印出来

 转化成为理解对文件的操作

 这步操作叫输出重定向(>),就是将本该写入显示器文件上的内容写入到hello.txt文件中

 输出重定向特点:如果文件不存在,就会新建;如果存在,旧内容会被清空,从而写入新内容

 也可以直接建立文件

 追加重定向(>>),旧内容不会清除

 输入重定向(<),

本来cat指令要从键盘文件读数据,但用了<,就从指定文件读数据

接下来给你们看个好玩的

当我们用Xshell建立一个终端时,我们所建立的终端也是一个文件

这里的0就是我们现在所处的终端,就叫0号终端吧,当我们再次新建终端就会再出现个1号终端

这里我们向0号终端输入内容,咱终端自然打出,若是向1号终端输出,那自然在1号终端显示,就像远程通信一样,很好玩吧.


 好了,现在让我们回归指令学习

这里就将hello.txt文件拷贝到上级目录下的lesson2文件下

当然,我们也可以在拷贝的过程中将名字进行改变

 这样拷过去的hello.txt文件会被重命名为line.txt文件

 想要将一个文件下的所有内容进行拷贝,加上-r

-r 递归处理,将指定目录下的文件与子目录⼀并处理。若源文件或目录的形态,不属于目录或符

号链接,则⼀律视为普通文件处理

-f 强行复制文件或目录, 不论目的文件或目录是否已经存在

10.mv

功能: mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files,经常用来备份文件或者目录

 这样我们就可以将hello.txt文件重命名成myhello.txt文件,当然目录也是如此.

 将myhello.txt文件移动到lesson2中

 另外mv和cp一样,当后面的文件不存在,移动后就会发生重命名

11.cat

功能: 查看目标文件的内容

  • -b 对非空输出行编号
  • -n 对输出的所有行编号
  • -s 不输出多行空行

再介绍一个指令:tac

它和cat一样都是打印内容,只不过tac是倒着打印,因为tac就是cat的倒写 

12.more 和 less

再学这些指令时,我们再学一个理论

我们用cat打印文件内容时,我们只能打印一些小文件,毕竟大文件在打印时,会直接刷频了,不好观看.

对于大文件,我要提出一个,那就是日志.

每个大型软件都要有日志,日志用于记录软件的各种信息,对于维护软件的安全至关重要

像这种大型文件,自然不能使用cat和tac了


 这时就需要more或less

不过我们一般使用less,因为more无法上翻,且less具有搜索功能

less的工具:

q :  退出

/key  :   搜索key关键字

n  :     下一个

13.head 和 tail

 head的功能:显示文件开头,具体几行可以自己设置,默认是10行

tailhead差不多,它是显示文件结尾

那我们要是想要中间的部分呢?
这里就要引入一个感念,   |  管道     管道可以将指令进行连接

比如我们想要[20,30]这一区间的内容,那我们就可以这样写:

head -30 myhello.txt | tail 10

这样我们就可以查看这部分区间的内容了

14.date

功能: 指定格式显示时间: date +%Y:%m:%d

%H : 小时

%M : 分钟

%S : 秒

%X : 相当于 %H:%M:%S

%d : 日

%m: 月份

%Y : 完整年份

%F : 相当于 %Y-%m-%d

时间戳:是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒

时间->时间戳:date +%s
时间戳->时间:date -d@1508749502

这再说一个指令:cal

 它查看日历等时间信息

15.find

功能:用于在文件树中查找文件,并作出相应的处理(可能访问磁盘)

 这里的意思是:在/root/lesson2路径下,查找名叫myhello.txt的文件

 //Linux下find命令提供了相当多的查找条件,功能很强大。由于find具有强大的功能,所以它的选

项也很多,想要了解的可以通过大模型经行学习。

16.whereis

功能:用于找到程序的源、⼆进制文件或手册

 17.grep

功能:在文件中搜索字符串,将找到的行打印出来,用于文本过滤

 常用选项:

  • -i :忽略大小写的不同,所以大小写视为相同
  • -n :顺便输出行号
  • -v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那⼀行

 18.top

功能:动态显示进程状态、CPU、内存等关键指标。

 常用选项:

q:退出top

-d :  刷新的时间周期 如:  top -d 2   每隔两秒刷新

-n:  刷新次数,次数一到自动退出 如  top -n 5

19.zip/unzip

在学之前我们先了解一下打包压缩.

打包压缩是把我们的文件数据进行归档,形成一个文件的过程

好处:网络发送方便,节省磁盘空间

zip:打包        unzip:解包       这两个指令需要下载一下

CentOS系统:  yum install -y zip unzip

Ubuntu系统 : apt install -y zip unzip

这里就将hello.txt打包成hello.zip文件

解包更简单:

 默认都在当先目录下打包压缩

-r:递归处理,将指定目录下的所有文件和子目录⼀并打包处理

-d:  可以自主选择解压到的目录


我们还可以通过lrzsz将打包文件发送到Windows下

下载方式:   yum/apt install -y lrzsz

 当然我们也可以接收Windows的文件

20.tar

功能:打包/解包,不打开它,直接看内容

-c :建立⼀个压缩文件的参数指令(create 的意思);

-x :解开⼀个压缩文件的参数指令!

-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?

-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!

-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!

-C : 解压到指定目录

 打包:

解包:

21.bc

功能:计算器,可进行浮点运算.标准输入键盘文件

22.uname

功能: uname用来获取电脑和操作系统的相关信息,可显示linux主机所用的操作系统的版本、硬件的名称等基本信息

还有一个可以用来查软件的指令:

23.file

功能:辨识文件类型。

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

 常用选项:

  • -c:详细显示指令执行过程,便于排错或分析程序执行的情形。
  • -z:尝试去解读压缩文件的内容。

24.热键

  • [Tab]按键---具有『命令补全』和『档案补齐』的功能
  • [Ctrl]-c按键---让当前的程序『停掉』
  • [Ctrl]-d按键---通常代表着:『键盘输⼊结束(End Of File, EOF 戒 End OfInput)』的意思;另外,他也可以用来取代exit
  • [Ctrl]-r按键--对历史命令进行搜索
  • !命令字符 -- 执行对应的命令
  • history指令 --可以查看之前1000行命令
  • reboot -- 重启系统
  • shutdown -- 系统关机 

二、shell命令以及运行原理

命令的本质,其实就是Linux系统中指定目录下的可执行程序

[root@iZ2ze83dph3c7mk6rs762eZ lesson1]#  这就是一个命令行

root : 用户名

iZ2ze83dph3c7mk6rs762eZ : 主机名

lesson1 : 当前工作目录

# : 提示符

 Linux严格意义上说的是⼀个操作系统,我们称之为“核心(kernel)“ ,但我们⼀般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。

从技术角度,Shell的最简单定义:命令行解释器主要包含:

  • 将使用者的命令翻译给核心处理。
  • 同时,将核心的处理结果翻译给使用者。

对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来⼀个应用程序)。 shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。

 

操作系统(OS)是一款进行软硬件资源管理的软件(手段),是为了给用户提供一个良好(稳定,高效,安全)的运行环境(目的)


 三、Linux权限的概念

1.Linux文件类型

Windows区分文件类型,是用文件名后缀区分的

Linux区分文件类型,是用文件的属性列区分的

虽然Linux不以文件后缀区分文件类型,但不代表用户不能使用后缀.

另外Linux不关心后缀,但用户使用的工具(如:gcc)是要关心后缀滴

 文件类型:

  • d:文件夹
  • -:普通文件(源代码,文本文件,可执行文件,音视频,各种文档,库文件....)
  • l:软链接(类似Windows的快捷方式)
  • b:块设备文件(例如硬盘、光驱等)
  • p:管道文件 (pipe)
  • c:字符设备文件(例如屏幕等串口设备,键盘)
  • s:套接口文件

2.Linux用户(root/普通用户)

多用户操作系统:

root  :   Linux管理员(一个)

普通用户   :   可以有多个

用户登录和切换问题:

adduser ###        添加用户

passwd ###        设置密码

userdel -r ###        删除用户

普通用户->root:

su root        之后输入root密码        当前工作目录不变

su - root      之后输入root密码        重新登录,处于家目录中/root

普通用户->普通用户:

su ###        之后输入###密码

root->普通用户:

su ###        直接转换不用密码

用户权限提升:

指令前加上 sudo (指令提权功能,以root身份运行该命令)

默认新增用户,无法直接执行sudo,新用户不受系统信任

输出指令nano /etc/sudoers     sudoers(相当于Linux系统的用户白名单)

找到这一行,将普通用户添加到root下

## Allow root to run any commands anywhere 
root    ALL=(ALL)    ALL
###    ALL=(ALL)    ALL

3.权限的理论解释

权限 = 人 + 事物属性        Linux 一切皆文件

文件权限 = 用户 + 文件属性(权限属性->r w x)

所以权限就是:能/不能干什么事情.

我们举个例子:

在现实生活中,人是由角色和真实的自己组成的        人 = 角色 + 真实的自己

角色带给人不同的权限,所以权限约束的永远是角色!        权限 = 角色 + 文件的权限属性

而Linux把角色分成三类:拥有者,所属组,other角色,三种角色要由Linux中具体的人来扮演

我们就这拥有者这个角色来说一下文件的权限属性(rwx):

有r代表可读,有w代表可写,有x代表可执行,有-代表相应权限没有.        即有无

4.权限的操作实验

方法一:

u是拥有者,g是所属组,o是other,a是所有(all)

给三个例子:

chmod u+x hello.txt      给拥有者加上x权限

chmod u-r,o-r hello.txt  给拥有者和other去掉r权限

chmod a+x hello.txt      给三位角色都加上x权限

 方法二:

有代表1,无代表0,那rwx的二进制就是111,---的二进制就是000

chmod 八进制 filename

chmod 777 hello.txt  给三位角色都加上rwx权限

chmod 666 hello.txt  给三位角色都加上rw权限

权限的特点:

  • 身份比配,只会从拥有者,所属组,other的顺序匹配成功一次

比如:一个文件的拥有者和所属组都是你自己,你给拥有者限制了读权限,但没有给所属组限制,此时你想:我的拥有者权限没了,但我还是所属组啊,依旧可以执行,但不行,因为身份只能匹配成功一次,你作为拥有者是没权限读这个文件的

  •  可执行权限能执行是两码事        可执行文件 = 可执行权限 + 本身能执行
  • root超级管理员,无视权限,随意对文件读写执行修改权限.
  • 拥有者是我自己,但我想把拥有者换成另一个人,此时我无法更改,因为这样的修改需征得另一个人的同意,毕竟不能什么东西都要,万一是个黑锅呢?也就是说需要root进行提权
  • 改拥有者的指令chown     改所属组的指令chgrp   

如:   sudo chown zxc hello.txt               sudo chgrp zxc hello.txt

合并->sudo chown zxc:zxc hello.txt   拥有者和所属组都变成zxc用户了

5.目录的权限

  • r: 是否运行用户查看执行目录下的文件信息
  • w: 该用户是否可以修改属性(文件名)或者删除/新建执行目录下的文件
  • x:该用户是否可以进入目录

Linux的文件(普通或者目录),新建的时候,缺省的权限为什么是我们看到的样子?

普通文件: 起始权限 666

目录文件: 起始权限 777

这里提出一个新概念:权限编码 umask

 权限编码:过滤掉在权限掩码中出现的权限

 这种计算方法可不是减法,而是按位与,即起始权限 & (-umask)

所以最终权限 = 起始权限 去掉  umask

当然umask也是可以修改的        umask 777    这样umask就是从0002变成了0777

6.粘滞位

这里提出一个情景:

普通用户a创建了一个目录,此时root用户在这个目录里新建一个文件,a看不了该文件,但可以删除该文件,因为a用户在该目录里具有w权限,可以删除文件.

当然这种场景在普通用户间是不存在的,因为其他普通用户根本进不来该目录.

当然若是想让多个普通账户之间,进行文件或者数据共享,这时就需要root账户建立一个公共目录,普通账户以other身份进行数据共享.

但这有一个缺点,那就是所有普通账户都有w权限,那代表普通账户可以互删彼此的文件

那如何做到防止普通账户删彼此文件呢?

这就要引入一个新的权限:粘滞位 t

具有粘滞位的目录,那里面的文件只有文件的拥有者和root能删除了

如: chmod +t 目录

总结

学习Linux指令不用死记硬背,就像使用某种工具一样,多用就会了.

Linux权限重在理解,重点就在这句 权限 = 角色 + 文件的权限属性

简单介绍一些Linux指令和权限的知识,谢谢观看。

http://www.dtcms.com/a/279968.html

相关文章:

  • 融合竞争学习与高斯扰动的多目标加权平均算法(MOWAA)求解多无人机协同路径规划(多起点多终点,起始点、无人机数、障碍物可自定义),提供完整MATLAB代码
  • 【地理探测器】解释
  • pip install torch各种版本的命令及地址
  • Java学习——使用jpackage把jar文件打包为可执行的exe文件
  • SnapKit介绍与使用
  • OneCode 3.0: 注解驱动的Spring生态增强方案
  • windows系统中双击.py文件可以直接运行
  • 第 2 章 数据类型及其运算
  • JSCPC 2025 江苏省赛
  • VictoriaMetrics 架构
  • 位置编码类型彩色图解
  • 考虑频率耦合的构网型(GFM)VSG变流器(电压电流双闭环控制结构)的二维序阻抗与降维SISO序阻抗建模详细推导及扫频对比验证
  • 【人工智能99问】什么是深度学习?(2/99)
  • Kimi K2智能体能力的技术突破:大规模数据合成 + 通用强化学习
  • 名片管理系统IV
  • 螺旋模型:风险分析驱动的渐进式开发
  • cuda优化之softmax
  • 组件化思想
  • Brooks 低温泵On-Board Cryopump 安装和维护手法Installation and Maintenance Manual
  • aspnetcore Mvc配置选项中的ModelBindingMessageProvider
  • 第二章 基于新版Onenet搭建云服务(stm32物联网)
  • PyTorch中torch.topk()详解:快速获取最大值索引
  • @Resource 注解的空值处理(默认行为与容器实现)
  • 冲刺阶段项目进度压力大,如何组织高效冲刺
  • 大屏搭建多个图表不自适应问题
  • H264编码结构和解析
  • 第四章 uniapp实现兼容多端的树状族谱关系图,剩余组件
  • ESP32 OTA升级详解:使用Arduino OTA库实现无线固件更新
  • HTML 文本格式化标签
  • java--ThreadLocal创建以及get源码解析