【Linux系统】—— 基本指令(一)

【Linux系统】------ 基本指令(一)

  • [1 「ls」指令](#1 「ls」指令)
    • [1.1 初识 「ls」 指令](#1.1 初识 「ls」 指令)
    • [1.2 「ls -l」](#1.2 「ls -l」)
    • [1.3 认识文件](#1.3 认识文件)
    • [1.4 「ls -l」显示的内容](#1.4 「ls -l」显示的内容)
    • [1.5 如何区分文件类型](#1.5 如何区分文件类型)
    • [1.6 「ls -a」](#1.6 「ls -a」)
    • [1.7 混合使用命令行选项](#1.7 混合使用命令行选项)
    • [1.8 「ls」查看指定目录下文件](#1.8 「ls」查看指定目录下文件)
    • [1.9 「ls」 指令常用命令行选项](#1.9 「ls」 指令常用命令行选项)
  • [2 「pwd」 指令](#2 「pwd」 指令)
    • [2.1 「whoami 」指令](#2.1 「whoami 」指令)
  • [3 「cd」 命令](#3 「cd」 命令)
    • [3.1 初识 「cd 」命令](#3.1 初识 「cd 」命令)
    • [3.2 再探 『 . 』 和 『 .. 』目录](#3.2 再探 『 . 』 和 『 .. 』目录)
    • [3.3 根目录](#3.3 根目录)
    • [3.4 绝对路径与相对路径](#3.4 绝对路径与相对路径)
    • [3.5 「cd ~」与「cd -」](#3.5 「cd ~」与「cd -」)
  • [4 「touch」 命令](#4 「touch」 命令)
    • [4.1 初识 「touch」 指令](#4.1 初识 「touch」 指令)
    • [4.2 文件的时间](#4.2 文件的时间)
      • [4.2.1「stat」 指令](#4.2.1「stat」 指令)
      • [4.2.2 文件的三个时间](#4.2.2 文件的三个时间)
    • [4.3 「touch」 指令命令行选项](#4.3 「touch」 指令命令行选项)
  • [5 「mkdir」 命令](#5 「mkdir」 命令)
    • [5.1 初识 「mkdir」](#5.1 初识 「mkdir」)
    • [5.2 「mkdir」 创建一串路径](#5.2 「mkdir」 创建一串路径)
    • [5.3 「tree」 命令](#5.3 「tree」 命令)
  • [6 指令的本质](#6 指令的本质)

1 「ls」指令

1.1 初识 「ls」 指令

  • 语法:「ls」 [选项] [目录或文件]
  • 功能:对于目录,该指令列出该目录下的所有子目录与文件 。对于文件,该指令列出该文件名及其相关信息

简单来说,「ls」 指令就是显示当前目录下的文件。

  • 那么目录是什么呢
    这里补充一个重要的知识点:
    在 Linux 中,目录相当于 windows 中的文件夹
    目录 == 文件夹
  • 当前目录:当前我这个用户所处的目录
    好比当前你问我在哪里,我回答我在我家里,我家在某市某区某单元。我们人类世界中,地址就是一个典型的目录,它是用来定位你当前在哪里。Linux 中的目录也是一样的

如果当前目录下没有任何文件或目录即一个空目录 (空文件夹),ls 是不会显示任何东西

1.2 「ls -l」

其实,在 「ls」 后面加上 「-l」 也可以显示当前目录下的文件或目录

我们发现,仅仅只有 「ls」 指令,只显示当前目录的文件名或目录名 ;而 「ls -l」 前面还显示出了一堆信息 ,虽然现在的我们也许还看出懂这些信息的含义。

我们先来介绍一些基本的概念:

我们在命令行中:输入的 「ls」 字符串,我们称之为命令;而后面的 「-l」 (「ls」和 「-l」中间有个空格不要忘记),这种以 「-」 开头的,我们将其称为命令行选项。命令行选项可以是0个或多个,多个命令行选项都是用空格隔开的。

「ls」默认只会显示文件名(目录名),而「ls -l」则显示文件名和更多的内容

1.3 认识文件

既然加上「-l」可以显示文件的更多内容,那么文件又有什么内容呢?

现在我问大家一个问题:windows 系统中,我们新建一个空文件,里面没有任何内容,这时它要不要在磁盘上占用空间呢?

答案是要占据磁盘空间

文件,除了我们经常关心的文件内容,文件还有文件名、日期,类型、大小等等其他很多东西

文件名,文件类型,修改时间 等等这些,我们称之为文件的属性。而文件的属性也是数据 ,这些数据也是要被存储下来的

什么是属性呢?就好比一个人的身高、体重、性别、籍贯等,这些就是一个人的属性,这些信息在你的学校中都会记录下来,你的学籍档案中都有。

所以不要认为一个文件,磁盘只存储文件中的内容,磁盘存储的是文件的属性加内容。

上述图片中大小显示的是 0 字节,这仅仅统计的是文件内容的大小,而文件的实际大小还要加上文件的属性

我们得出的结论是:文件 == 内容 + 属性。

既然 文件 == 内容 + 属性,未来我们学习文件的时候,要么是对文件的内容进行操作,要么是对文件的属性进行操作

1.4 「ls -l」显示的内容

对文件有了更进一步的了解后,我们来看看「ls -l」所显示的内容

「ls」只会显示文件(目录)的文件名,而「ls -l」还会进一步显示文件(目录)的属性

「ls」命令更准确来说是显示文件(目录)的属性只有「ls」,只显示文件名这一属性;加上「 -l」显示更多属性

1.5 如何区分文件类型

Linux 中是如何区分文件的类型呢?我怎么知道他是普通文件还是目录呢?

在 windows 系统中,我们可以直接看出来,因为 windows 系统中每一个文件都有它对应的后缀**(.zip、 .pdf、 .txt、.jpg)**

而 Linux 并不是通过后缀来区分,它一般通过「ls -l」指令显示出的信息中的 第一大列的第一个字符来区分。

如图:

如果第一个字符是 「d」,表示它是一个 目录;如果是 「-」 表示它是一个 普通文件。

这里,我们暂时只介绍这两种文件

我们也可以看到,Linux 默认将目录标记为蓝色;普通文件不做处理,依然是白

1.6 「ls -a」

这里我们再介绍一个选项:「-a」

我们先来看看输入 「ls -a」 命令会发生什么

我们发现又多了两个目录(他们是 d 开头):『 . 』 和 『 . .

现在我们进入空目录中(怎么进入等会介绍),我们知道对于空目录「ls」是不进行任何显示

现在我们加上命令行选项「-a」会发生什么呢

发现依然是多了两个目录:『 . 』 和 『 . .

为什么「ls」看不到,而「ls -a」可以看到 『 . 』 和 『 . . 』 呢?

我们先来介绍一下 隐藏文件(目录)

在 Linux 中,以 『 . 』开头的文件(目录)叫做 隐藏文件(目录)

所以「ls -a」就是显示包括隐藏文件(目录)在内的所有文件(目录)

而 『. 』和 『.. 』目录都是以 『.』 开头,是隐藏文件,「ls」与「ls -l」是不会查看隐藏文件(目录)的

至于『. 』 和 『.. 』目录是什么,我们后面再介绍

1.7 混合使用命令行选项

前面我们知道命令行选项可以是多个,那可不可以「-a」和「-l」同时使用呢?是可以的

那「-l」再「-a」呢?是可以的,而且效果一模一样

不仅如此,还可以省略写法:「ls -la」及 「ls -al」

Linux 的指令,绝大部分的指令所带的选项(命令行选项),是否分开写、是否连着写、是否按顺序写完全没有关系

1.8 「ls」查看指定目录下文件

「ls」默认查看的是当前目录下的文件

「ls」后面也可以指定目录,查看指定目录下的文件

1.9 「ls」 指令常用命令行选项

  • 「-a」:列出目录下的所有文件,包括以 . 开头的隐藏文件
  • 「-d」:将目录像文件一样显示,而不是显示其下的文件。如:「ls -d」 指定目录
  • 「-i」:输出文件的 i 节点的索引信息。如 「ls -ai」 指定文件
  • 「-k」:以 k 字节的形式表示文件的大小。「ls -alk」 指定文件
  • 「-l」:列出问价的详细信息
  • 「-n」:用数组的 UID,GID 代替名称。(介绍 UID,GID)
  • 「-F」:在每个文件名后附上一个字符以说明该文件的类型,"*" 表示可执行的普通文件;"/" 表示目录;"@" 表示符号链接; "|" 表示 FIFOs;"=" 表示套接字(sockets)。(目录类型识别)
  • 「-r」:对目录反向排序
  • 「-t」:以时间排序
  • 「-s」:在 I 文件名后输出该文件大小。(大小排序,如何找到目录下最大的文件)
  • 「-R」:列出所有子目录下的文件。(递归)
  • 「-1」: 一行值输出一个文件

2 「pwd」 指令

但 Linux 系统,我怎么才能知道自己当前所处的路径(所处的目录)是哪个呢

这时就可以用到 「pwd」 指令

  • 语法:「pwd」
  • 功能:显示用户当前所在的目录(所处路径)

当我们用超级用户(root)登录系统时,我们默认在 /root 目录下

当我们用普通用户登录系统时(假设是user1),默认是在 /home/user1 目录下

  • 我们知道,在 windows 中是用 「 \ 」 作为路径分割符
  • 而在 Linux 中,则用 「 / 」 作为路径分割符
  • 在两个「 \ 」(windows)或两个「 / 」(Linux) 之间的一定是一个文件夹(目录)
  • 所谓路径本质就是由 多个目录 构成的
  • 而路径的最末端(如上述 user1)有可能是目录,也有可能是普通文件

2.1 「whoami 」指令

这里我们补充一条指令

  • 语法:「whoami 」
  • 功能:显示当前用户名称

3 「cd」 命令

3.1 初识 「cd 」命令

  • 语法:「cd」 目录名
  • 功能:改变工作目录,将当前工作目录改到指定目录下

既然「cd」是改变目录,那肯定要知道变成什么样子,因此「cd」后面要加指定目录的目录名

如:我现在在 113目录 下,通过「cd」进入到 root目录 下

3.2 再探 『 . 』 和 『 ... 』目录

前面我们知道『 . 』 和 『 .. 』是隐藏目录 ,但是他们又是什么呢

现在我们来正式了解一下

  • 在 Linux 中,任何一个目录(包括空目录)系统都会默认自带两个目录:『 . 』 和 『 ..
  • . 』 和 『 .. 』是隐藏目录,他们是以『 . 』开头,正常来说看不到
  • . 』表示当前目录;『 .. 』表示上级目录

先来看『 . 』(当前目录)

可以看到,输入cd . 我们一直在当前路径下

我们再来看『 .. 』(上级目录)

可以看到输入cd ..,我们不断往上级目录退 。

相信『 . 』 和 『 .. 』很好理解,这里就不再过多赘述了

3.3 根目录

但是我们能一直回退吗?

我们发现,回退到一定程度时,就回退不了了,这时因为回退到了根目录

前面我们曾说 「 / 」 是路径分割符,但是有一个 「 / 」 非常特殊:整个路径中最开始的 「 / 」

Linux 中,我们将路径中 第一个「 / 」称为根目录 。

Linux的目录结构由「 / 」开始

而根目录本质也是一个文件夹,既然是文件夹,那它里面肯定也是可以放文件和文件夹的

我们可以通过 「ls」 看看根目录的文件

所以 Linux 的文件结构,是一棵从根目录「 / 」开始的多叉树

这棵树的 叶子结点 一定是普通文件或者是空目录;非叶子结点 一定是一个非空目录!

3.4 绝对路径与相对路径

上图中,我们想找到 test.c 文件怎么找呢。

是通过路径来找的:/home/bit/test.c

为什么能这样找呢?因为一个节点虽然能有多个孩子,但只能有一个父亲 ,所以从叶子结点逆向地向回找,该路径具有唯一性

我们把这种从根目录开始一直定位到目标文件的方式,我们称之为:绝对路径。

这里我们再来聊聊路径这一概念:linux 中我们要访问一个文件,前提是你先找到他,而找到一个文件我们必须要通过路径 来找到。这就是为什么 windows 和 linux 下都要谈路径。而绝对路径具有唯一性,所以我们通过绝对路径可以快速找到一个文件。

在 linux 中要找到一个文件,除了绝对路径还有一种方式:相对路径

相对路径:以当前目录 为参照位置,定位一个文件

比如 cd .. 就是以当前目录为参照点,返回当前目录的上级目录,这就是一个相对路径

注:使用相对路径可以 cd 「文件(目录)名」 或 cd 「./」+「文件(目录)名」 。如 cd ./113cd 113 都是可以的

绝对路径 一般在 linux 系统重配置文件来使用

相对路径 我们日常操作用的多,因为比较简单

3.5 「cd ~」与「cd -」

「cd」命令除了使用绝对和相对路径,还可以使用两个特殊符号:~-

  • 「cd ~」 :进入当前用户自己的家目录

这里先简单介绍一下家目录:任何一个 linux 用户,用特定的用户名登录系统时,默认在家目录下

超级用户 登录(root账号),默认在 /root 路径下

普通用户 登录,默认在 /home/用户名 路径下

  • 「cd -」:返回最近所处路径

4 「touch」 命令

4.1 初识 「touch」 指令

  • 语法:「touch」 [选项]... 文件...
  • 功能:「touch」命令可以更改文档或目录的日期时间,包括存取时间和修改时间;或者新建一个不存在的文件

「touch」是用来 创建普通文件 的:

例如:创建新文件 hello.txt

但是 「touch」命令不能创建文件夹

此外「touch」命令还可以更新一个文件所对应的时间

4.2 文件的时间

现在我们知道文件包括文件内容和文件属性,其中文件属性中有一种属性是非常重要的:文件时间

文件的时间如果乱了,那这个系统就乱了。任何一个文件新建的时候都要有自己时间的概念

一般文件的时间有三种,怎么查看呢?这里我们介绍一个新指令:「stat」

4.2.1「stat」 指令

「stat」 就是 state(状态)的意思:显示一个文件或目录的属性。

通过 「stat」 指令,我们就可以看到一个文件详细的属性介绍

4.2.2 文件的三个时间

虽然上面显示出的文件属性我们很多看不懂,但没关系,今天我们来看看文件的三个时间:

文件一般都有三种时间:Access时间Modify时间Change时间。为了方便记忆,这三个时间可以记为:ACM时间

在 Linux 系统中,文件的属性通常与文件的访问、修改以及状态改变相关联。具体来说,access、modify(有时也称为 change,但在此上下文中我们通常区分两者)、change(这里特指 inode change time)指的是文件的不同时间戳,它们各自代表了文件的不同方面的变化。

  • Access Time (atime):
    • 访问时间是指文件数据最后一次被读取(访问)的时间。这包括使用如 cat、more、less 等命令查看文件内容,或者使用 grep 等命令搜索文件内容时的最后一次操作时间。然而,值得注意的是,很多文件系统(特别是挂载时使用了 noatime 或 relatime 选项的文件系统)为了减少磁盘写入操作,可能会优化或忽略 atime 的更新。
  • Modify Time (mtime):
    • 修改时间是指文件内容最后一次被修改的时间。这包括了对文件内容的任何写入操作,如使用文本编辑器修改文件、向文件中追加数据等。mtime 是文件内容变化的直接反映。
  • Change Time (ctime):
    • 状态改变时间(或 inode change time)是指文件的状态( inode 信息)最后一次被改变的时间。这不仅仅包括文件内容的修改(这也会更新 mtime),还包括了文件权限、所有者、链接数(有多少文件名链接到 inode)等的改变。简而言之,任何导致文件 inode 信息发生变化的操作都会更新 ctime。因此,即使文件内容没有改变,但如果其权限或所有者等属性发生了变化,ctime 也会更新。

4.3 「touch」 指令命令行选项

  • 「-a」:或 --time = atime 或 --time=access 或 --time=use 只更改存取时间
  • 「-c」:或 -no-create 不建立任何文档
  • 「-d」:使用指定的日期时间,而非现在的时间
  • 「-f」:此参数将忽略不予处理,仅负责解决 BSD 版本 「touch」 指令的兼容性问题
  • 「-m」:或 --time=mtime 或 --time=modify 只更改变动时间
  • 「-r」: 把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同
  • 「-t」:使用指定的日期时间,而非现在时间

5 「mkdir」 命令

5.1 初识 「mkdir」

  • 语法:「mkdir」 [选项] dirname...
  • 功能:在当前目录下创建一个名为 "dirname" 的目录

「touch」 命令是创建一个普通文件,而「mkdir」则是创建一个目录

5.2 「mkdir」 创建一串路径

直接用「mkdir」创建一个目录很简单,这里就不再多说了。如果我想创建一串路径,比如:当前我在 newdir 目录下,我想在当前目录下创建 a/b/c 路径,「mkdir」可以做到吗。

我们试一试

可以看到,直接这样创建是不行的。「mkdir」无法一次性创建这样的路径,它无法创建目录的结构

如果要创建一串目录的结构,我们可以用到命令行选项:「-p」。「-p」可以一次性创建一串路径

  • 「-p」:-parents 可以是一个路径名称。此时若路径中某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录

我们来试试

可以看到是成功创建了的,我们是可以进入到 a、b、c 目录下的

5.3 「tree」 命令

像上面我们分别进入到 a、b、c 目录下去查看目录太过繁琐,也不够直观。有没有什么方式可以只看看出当前目录的结构呢?这时我们就可以使用 「tree」命令

在 Linux 系统中,「tree」命令是一个非常有用的工具,用于以树状图的形式递归地列出目录的内容。这个命令可以非常直观地展示目录结构,包括子目录和文件,以及它们的层级关系。

如:

「tree」 命令默认显示当前目录下的结构,当然,后面可以加上路径,查看指定目录的目录结构

需要注意的是,在默认情况下,Linux 系统可能并不自带「tree」命令,但我们可以通过你的 Linux 发行版的包管理器来安装它。

centos 可以通过输入代码:yum install -y tree 来安装;ubuntu 可以通过输入代码:apt install -y tree 来安装

6 指令的本质

前面讲了这么多,相信大家对指令已经有了模糊的概念,但是指令的本质是什么呢

「which 」指令可以帮助我们了解指令的本质

Linux 中的 「which 」 指令是一个常用的命令,主要用于 查找并显示指定命令的绝对路径。

先讲结论:命令本质上就是我们系统中的文件! 而且是以 「- 」开头,我们称之为普通文件。也就是说当我们在系统中执行对应的命令时,实际上这一个个命令就是一个个文件罢了!

命令(指令)就是文件!

那这样的话,我们直接输入指定命令的路径,也可以实现相关功能咯?

确实如此

命令的本质 == 可执行文件 == 我们写的C/C++程序

命令本质上就是别人用 C/C++ 等语言写出来的可执行程序罢了

那是不是意味着我们自己写一个简单的C代码,生成一个可执行文件也可以跑起来呢?

我们试一下

可以看到,我们输入相关路径,确实执行了 C语言 代码

为什么要加 「./」 呢?因为要执行一个命令就要先找到这个命令,而我们自己写的 mycmd 命令就在当前目录下的 mycmd 文件

可是系统命令也是可执行程序,为什么可以不用带路径就可以直接执行呢?

我们将 mycmd 命令拷贝到 /usr/bin 目录下,发现它也可以不带路径,像命令一样运行

我们刚刚安装了 「tree」 命令,安装命令的本质就是将其从网络里下载下来,将其拷贝到指定的 /usr/bin 目录下,「tree」 命令就能直接跑了。

刚刚我们将 mycmd 拷贝到 /usr/bin 目录下,本质就是在做 linux 下的软件安装。其实 大部分的安装都只是拷贝罢了,将相应文件拷贝到指定目录下


好啦,本期关于基本指令的知识就介绍到这里啦,希望本期博客能对你有所帮助。同时,如果有错误的地方请多多指正,让我们在 Linux 的学习路上一起进步!

相关推荐
小杰帅气7 分钟前
进程优先级与切换调度
linux·运维·服务器
方便面不加香菜8 分钟前
Linux基本指令(1)
linux
济61711 分钟前
linux(第十四期)--Uboot移植(1)-- Ubuntu20.04
linux
奋斗的阿狸_198611 分钟前
键盘组合键监听与 xterm 唤醒程序
linux·运维·服务器
小张成长计划..14 分钟前
【linux】2:linux权限的概念
linux·运维·服务器
马踏岛国赏樱花16 分钟前
Windows与Ubuntu双系统,挂载D/E盘到Ubuntu下时只能读的问题
linux·windows·ubuntu
ben9518chen16 分钟前
Linux操作系统基本使用
linux·运维·服务器
一个平凡而乐于分享的小比特18 分钟前
CPU上电启动到程序运行全流程详解
linux·uboot·根文件系统·cpu上电到启动
不像程序员的程序媛24 分钟前
Linux开机自启动systemd配置
linux·运维·服务器
GREGGXU27 分钟前
Could not load the Qt platform plugin “xcb“ in ““ even though it was found.
linux·qt