【Linux】拆分详解 - 常见指令和权限理解

文章目录


前言

文章细分了各个知识点,可在目录中快速跳转 。

本文将解析linux常见的对文件进行增删查改等一系列操作的指令和文件权限相关知识,同时插入讲解一些常见概念。


一、常用指令

1. 基本查看与路径跳转

1.1文件与目录

  • 文件

    文件 = 文件属性 + 文件内容

    • 文件属性:文件名、文件类型、文件的创建时间等
    • 因此我们对文件的操作都可以归为两类,一类是对文件属性,一类是对文件内容
  • 目录

    可以粗略理解为window中的"文件夹"。

    1. 任何目录下都默认具有两个隐藏目录 ​.和..

      .表示当前路径
      ..表示上一级路径

    2. 相对路径 :./...... 表示从.(当前路径)开始向下级路径访问

    3. 路径分隔符 :在window中我们使用\ , 而linux中使用/

      1. 两个路径分隔符之间一定是一个目录
      2. 路径最末端,一定是一个普通文件或者目录

1.2 ls 指令(显示文件)

语法 : ls [选项][目录或文件]
功能 :对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息
常用选项:

  • ls -l ,查看详细的文件属性
  • ls -a ,格外显示隐藏文件 (以.开头的文件)

1.3 pwd (查看当前目录)

显示用户当前所在的目录

1.4 clear (清屏)

清空屏幕显示的内容

1.5 whoami (查看用户名)

查看当前登陆的用户名

1.6 cd(跳转路径)

Linux系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件。

语法 : cd [路径](可使用绝对路径与相对路径)
功能 :改变工作目录。将当前工作目录改变到指定的目录下。
常用选项:

  • cd - 跳转到上一次访问的路径

  • cd ~ 跳转到家目录(usr,每个用户都拥有独立的家目录)

    window的桌面本质是一个文件夹,存放在家目录(一般在C盘,名为"用户")中,当用户开机登录时流程如下:

    1. 确认用户名
    2. 根据用户名找到该用户家目录下的桌面文件夹
    3. 将桌面文件夹图形化显示

1.7 指令的本质

  • 指令的本质就是程序,安装/卸载就是把可执行程序拷贝/删出到系统路径下。
  • which 指令,可以打印出指定的指令名称在系统中存放的路径。可以用来检验指令是否存在 。
  • alias 指令,用于重命名指令 。我们注意到使用which查看 ls 时,显示了上图红线代码,再显示ls所在路径,这就是系统默认对ls进行了重命名,使其显示的内容带有颜色。还有常用的系统自带的ll( ls -l)也是同理。

2. 文件的增删查改

2.1 对文件属性(外壳)

touch(创建文件)

语法 : touch [文件名]
功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件 。

  • 不能创建目录
mkdir(创建目录)

语法 : mkdir [选项] [目录名]
功能 :在当前目录下创建一个名为 "xxx"的目录
常用选项:

  • --p (目录名)/(目录名)/... 可以一次创建多个目录,每一个目录都在前一个目录下创建。
rmdir(删除空目录)

语法 : rmdir [-p] [目录名]
功能 :删除空目录 ,不能是文件
常用选项:

  • remdir -p 当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除。
rm(删除)

语法 : rm [选项] [文件名或目录名]
功能 :删除文件或目录
常用选项:

  • 删除普通文件,若用户为root,需要二次确认输入y(yes)/ n(no)

    -f 跳过二次确认

  • -r 删除目录(非空为空均可)

    -rf 跳过二次确认

  • rm (前缀)*(后缀) 删除当前目录下所有文件。

    * :一个通配符,匹配任意文件名

stat(查看acm时间)

查看超详细的文件属性,如文件的acm时间(即最后一次访问,最后一次修改文件内容,最后一次修改文件属性)。

man(指令手册)

语法 : man [选项] 命令
功能:查找linux中指令的解析

  • 云服务器读者可以输入代码yum -y install man-pages 恢复被精简的man man 指令,该指令可查看man本身作为查找工具的指令的用法,如语法 man [对应数字选项] man 使用对应选项的范围进行查找

    1 普通的命令
    2 系统调用 , 如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件)
    3 库函数 , 如printf,fread4是特殊文件,也就是/dev下的各种设备文件
    5 文件的格式 , 比如passwd, 就会说明这个文件中各个字段的含义
    6 给游戏留的 , 由各个游戏自己定义
    7 附件和一些变量 , 比如向environ这种全局变量在这里就有说明
    8 系统管理用的命令, 这些命令只能由root使用,如ifconfig
tree(树状图展示目录结构)

语法 : tree
功能:以树状图形式打印当前目录(简易的图形化页面)

  • 安装:yum -y install tree
  • 使用时,如果打印如根目录,会由于文件过多疯狂打印,对于这种指令失控 的情况,连续使用ctrl + c,可以终止运行
cp(拷贝)

语法 :cp [选项] [源文件或目录] [目标文件或目录] (/重命名) ,可使用绝对和相对路径,如果想重命名拷贝的文件,可以在目标路径后加上 / 新名 。
功能 :复制文件或目录
常用选项:

  • -r 递归处理,将指定目录下的文件与子目录一并处理,需要二次确认

    -rf 跳过二次确认

  • 同一目录下不能存在同名文件

mv(移动)

语法 :mv [选项] [原文件或目录] [目标路径 / 新文件名] (/新名) ,可使用绝对和相对路径,如果想重命名文件,可以在目标路径后加上/ 新名 。
功能:移动文件或者将文件改名

  • 当第二个参数类型是文件时,mv命令完成文件重命名
  • 第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。

2.2 重定向

2.2.1 Linux设计理念

设计理念:一切皆文件 。

将各种东西都看作文件,对文件进行操作,这样可以使系统以统一的方式进行管理。如对于显示器,我们想把内容打印到显示器上,在linux中的操作就是向显示器对应的文件中写入内容。

2.2.2 概念与性质
  1. 输出重定向 :​ ​>​

    • 概念:改变写入的方向(文件)。

    • 使用方法:指令名 >

    • 示例:如 echo 指令本来是用来在显示器上打印数据,由设计理念可知,其实是对显示器文件进行写入。使用重定向后,由向显示器文件写入变为对普通文件的写入,此时"hello linux" 作为文本内容存储到了text文件中,这就是改变了写入的方向(文件),由于是输出操作,所以叫输出重定向。

    • 性质:

      1. 清空文件:每次重定向,都会清空文件内容再进行写入 > 文件名
      2. 创建新文件:不存在文件时,会创建一个空文件 > 文件名
      3. 与C语言关系:相当于fopen ("text.txt","w") + fclose
        追加重定向 :>> 不清空文件,在原文件末尾新增操作。相当于C语言中的fopen ("text.txt","a") + fclose
      shell 复制代码
      # echo "hello linux" #输出到显示器
      # echo > text.txt    #输出到text文件
  2. 输入重定向 : <​

    • 概念:同上,只不过为输入操作。
    • 使用方法:指令名 <

2.3 对文件内容

echo(打印)

语法 :echo [内容]
功能:打印文本到显示器

  • 与C关系:相当于 printf 。
cat(查看文件内容 - 初级)

语法 :cat [选项][文件名]
功能 :查看目标文件的内容
常用选项:

  • -n : 附加输出行号

  • -s : 存在连续空行时,只显示一行空行

  • 与C关系:相当于 fopen("文件名" , "r")+ fclose

  • 缺点:只适合显示小型文件,行数多的文件不利于查看

more(查看文件内容 - 高级)

语法 :more [选项][文件]
功能 :同cat,打印满屏幕后会停下,输入回车可进行逐行下翻
常用选项:

  • q : 执行后,按q退出
  • -n : 附带行号
less(查看文件内容 - 终极)

语法 : less [参数][文件]
功能 :与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前不会加载整个文件。
常用参数:

  • -i : 忽略搜索时的大小写
  • -N : 显示行号
  • /字符串 :向下搜索"字符串"的功能
  • ?字符串 :向上搜索"字符串"的功能
  • n :重复前一个搜索(与 / 或 ? 有关)
  • N :反向重复前一个搜索(与 / 或 ? 有关)
  • q :退出查看
head(查看文件头部内容)

语法 : head [参数][文件]
功能 : 显示文件头部内容至标准输出(默认显示前10行)
常用参数:

  • -数字 :指定显示前X行
tail(查看文件尾部内容)

语法 : tail [参数][文件]
功能 : 显示文件尾部内容至标准输出(默认显示倒数10行),常用于查看日志信息
常用参数:

  • -数字 :指定显示倒数X行

2.4 管道

语法: (入口) | (出口) 将数据由入口传输到出口,可用于级联多条指令

  • 举例:查看文件中间部分的内容。先用 head 提取前X行(使尾部刚好包含需要的中部内容),再用 tail 提取尾部内容。
shell 复制代码
# head -20 filename | tail -5

3. 其他

3.1 与时间相关

cal(显示日历)

语法 : cal [参数][月份][年份]
功能 : 用于查看日历等时间信息,如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份
常用选项:

  • -3 : 显示系统前一个月,当前月,下一个月的月历
  • -j : 显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数)
  • -y : 显示当前年份的日历
date(显示时间)

语法 : date +[OPTION]... [+FORMAT]
功能 : 打印当前时间
常用参数:

  1. 指定格式打印时间 date +%Y:%m:%d (后接 "+" 号,附带任意参数,各参数之间可使用任意分隔符使观感清晰)
    %H : 小时(00...23)
    %M : 分钟(00...59)
    %S : 秒(00...61)
    %X : 相当于 %H:%M:%S
    %d : 日 (01...31)
    %m : 月份 (01...12)
    %Y : 完整年份 (0000...9999)
    %F : 相当于 %Y-%m-%d
  2. 时间戳
    时间 -> 时间戳:date +%s
    时间戳 -> 时间:date -d@[时间戳]

3.2 搜索

find(检索文件)

语法 : find [路径名] [选项]
功能 : 用于在文件树中查找文件,并作出相应的处理(可能访问磁盘)
常用选项:

  • -name :按照文件名查找文件
grep(文件内检索)

语法 : grep [选项] [要查找的字符串] [文件]
功能 :在文件中搜索字符串,将所在的行打印出来
常用选项:

  • -i :忽略字母大小写的不同,都搜索出来
    -n :顺便输出行号
    -v :反向选择,即显示出没有 '搜寻字符串' 内容的那一行

3.3 打包与压缩

打包和压缩的意义 :

  1. 缩小体积,减少所占的磁盘空间;下载快
  2. 不易丢失文件(传输大量文件时,可能会发生丢包,在众多文件中寻找丢失的很麻烦,如果打包和压缩,只要压缩包传输成功,所有文件都传输成功)
zip(压缩)

语法 : zip [选项] [name.zip] [目录或文件名]
功能 :将目录或文件压缩成zip格式
常用选项:

  • -r : 递归处理,将指定目录下的所有文件和子目录一并处理
unzip(解压)

语法 : unzip [name.zip] [选项]
常用选项:

  • -d 路径名 : 解压到指定路径下
tar(压缩/解压)

语法 :tar [选项] name.tgz [文件名/目录名]
常用选项:

  • -czf :压缩
    -cvzf :格外显示压缩过程
  • -xzf : 解压
    -xvzf :格外显示解压过程

3.4 其他

bc(计算器)

功能 :很方便的进行浮点运算
示例:临时计算,直接打印出结果

shell 复制代码
# echo 1+1 | bc
uname(获取电脑软硬件信息)

语法 :uname [选项]
功能 : 用来获取电脑和操作系统的相关信息
常用选项:

  • -a或--all :详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称
重要的热键
  • [Tab] :具有『命令补全』和『档案补齐』的功能
  • [Ctrl] + c :终止当前指令,可能需要连按几次

二、shell命令以及运行原理

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

  1. 是什么?

    从技术角度,Shell的最简单定义:命令行解释器,是介于用户与操作系统之间的软件

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

    ①:用户不善于与内核之间交互 (对用户自身技术水平要求太高)

    ②:保护内核 (Shell可以对用户的请求进行合法性检查,明显的违规操作不予执行)

  3. 怎么做?

    【Shell 是所有外壳程序的总称,Bash是其中具体的一款外壳程序】 Bash创建一个子进程执行指令(防止指令对Bash造成影响),返回对应信息给用户

三、Linux权限

1. 权限的概念

  • 权限 :就是通过一定的条件,拦住一部分人,给另一部分人权利来访问某种资源。有无或者能还是不能的问题。Linux权限 = 人 + 事物属性

  • Linux下有两种用户:超级用户(root)、普通用户

    • 超级用户:可以在linux系统下做任何事情,不受权限限制
    • 普通用户:受权限限制
      超级用户的命令提示符是"#",普通用户的命令提示符是"$"
    • 指令:su [用户名],可切换用户

2. 文件权限

2.1 访问者的分类(人)

所有者 :u---User(创建文件的用户默认为所有者)
所属组 :g---Group(默认为所有者所在组)
其它用户:o---Others (除了所有者和所属组外的所有人)

2.2 文件类型和访问权限(事物属性)


① 文件类型

②基本权限

  • 读 (r) :Read对文件而言,具有读取文件内容的权限;

  • 写 (w) :Write对文件而言,具有修改文件内容的权限;

  • 执行 (x):execute对文件而言,具有执行文件的权限;

    注意:文件具有可执行权限不代表就可以被执行,前提是这个文件必须是可执行文件(.txt文件就是个文档,你就算具有可执行权限也无法执行,.exe文件才是可执行文件)

  • - : 表示不具有该项权限

2.3 文件权限值的表示方法

①字符表示法

②8进制数值表示法

2.4 访问权限的相关设置方法

chmod

语法 :chmod [参数] 权限值 文件名

功能: 设置文件的访问权限常用选项

参数选项:

  • R :递归修改目录文件的权限

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

权限值格式:

  1. 用户表示符 +,-,= ​权限字符

    • 用户符号:

      u:拥有者

      g:拥有者同组用

      o:其它用户

      a:所有用户

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

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

      =:向权限范围赋予权限代号所表示的权限(清空对应用户的原先权限,只保留=后的权限)

    • 权限字符

      如2.3 所述,r w x

    • 实例

      shell 复制代码
      # chmod u+r text.txt
      # chmod g-w text.txt
      # chmod o=x text.txt #other 只保留x权限
  2. 三位8进制数字

    • 每一位分别对应 usr,group,other的权限(如2.3 中rwx的八进制数)

    • 实例说明:

      shell 复制代码
      # chmod 664 text.txt  #usr,group的权限为6,既为rx-;other的权限为4,即为r--   
      # chmod 640 text.txt  #同理
chown

语法 :chown [参数] 用户名 文件名

功能:修改文件的拥有者

实例:

shell 复制代码
# chown newusr text.txt  #修改text.txt文件的拥有者 为 newusr
#chown -R newusr filegroup #递归修改目录filegroup中的所有文件的拥有者
chgrp

语法 :chgrp [参数] 用户组名 文件名

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

参数选项:

  • R :递归修改目录文件的权限

实例:

shell 复制代码
# chgrp newusr text.txt #修改文件text.txt的所属组 为newusr(一个用户默认自成一个组)
file

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

功能: 辨识文件类型

参数选项:

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

语法 :umask 权限值

功能: 查看或修改文件掩码

  • 文件掩码:

    新建文件夹默认权限=0666

    新建目录默认权限=0777

    但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask(等同于mask - umask)

实例:

shell 复制代码
# umask  #查看
# umask 044 #设置

2.5 目录的权限

  • 可读权限(r): 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容(不影响进入)
  • 可写权限(w):如果目录没有可写权限, 则无法在目录中创建文件、删除文件、修改文件名
  • 可执行权限(z):如果目录没有可执行权限, 则无法进入

2.6 粘滞位

  • 根据上面的目录权限,我们可以发现一个问题:

    只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限。这好像不太科学啊, 我张三创建的一个文件, 凭什么被你李四可以删掉?

  • 为了解决这个不科学的问题, Linux引入了粘滞位的概念,

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

    1. 超级管理员删除

    2. 该目录的所有者删除

    3. 该文件的所有者删除

  1. 添加粘滞位:chmod +t 目录名


  2. 添加后不符合要求的人不能删除

2.7 权限相关细节问题

  1. 对用户身份的判定只进行一次

    • 判断顺序:拥有者 -> 所属组 -> other

    • 举例:

      一个文件的usr和group是同一个人(张三)时,如果文件对应的usr无写权限,而group有写权限,则此时张三没有对该文件的写权限

  2. 更改文件拥有者/所属组

    1. 需要别人同意

      如果将文件的拥有者/所属组修改为其他用户,则需要对方同意后才可以修改(对方必须在线)(root不需要对方同意),很好理解,如果有人想扔黑锅给别人是不能这么简单的

    2. 只有修改者 为拥有者/所属组/root时才能进行修改

总结

本文介绍了Linux的常用指令与常见概念,旨在帮助初学者快速入手使用Linux,熟悉Linux的指令通用方法和常见的文件相关问题。

尽管文章修正了多次,但由于水平有限,难免有不足甚至错误之处,敬请各位读者来评论区批评指正

相关推荐
律宏阔7 小时前
WSL Docker 端口明明空闲,但就是绑不上端口
linux·windows
律宏阔7 小时前
WSL 突然断网,无法 ping 内网或外网
linux·windows
穷人小水滴7 小时前
用容器编译 VirtualBox 虚拟机软件 (ArchLinux, podman)
linux·容器·virtualbox
乱码三千8 小时前
如何优雅地直连无公网 IP 的远程 GPU 服务器
linux·人工智能·程序员
yunwei378 小时前
使用 eBPF 跟踪 Nginx 请求
linux·后端·性能优化
yunwei378 小时前
使用 eBPF 跟踪 MySQL 查询
linux·后端·性能优化
yunwei378 小时前
eBPF 示例教程:使用 XDP 捕获 TCP 信息
linux·后端·性能优化
GeW8 小时前
制造业高端化,为什么必须重估Linux和数据库?
linux
百万蹄蹄向前冲8 小时前
双端同步!云服务器装最新Node.js v26.10全过程追踪
服务器·人工智能·node.js
GeW8 小时前
工业场景中的Linux与数据库选型:高端化转型的技术底座
linux