前言:
在之前我们已经简单了介绍了一下【Linux】,包括它的概念,由来啊等进行了讲解,接下来我们就将正式的踏入对其的学习!!!
在正式学习之前,我们先插入一个知识点,即“操作系统”,那么到底什么是操作系统呢?当我们了解这个知识点之后,我们才能更好的理解整个过程。
在如今的信息化时代,计算机软件是系统的灵魂,而作为软件核心的操作系统,已与现代计算机系统密不可分、融为一体。计算机系统大致可以分为如上几层。操作系统管理着各种计算机硬件,为应用程序提供基础,并充当计算机硬件与用户之间的中介。
1.硬件如中央处理器、内存、输入/输出设备等,提供基本的计算资源。
2. 应用程序如字处理程序、电子制表软件、编译器、网络浏览器等,规定按何种方式使用这些资源来解决用户的计算问题。
3.操作系统控制和协调各用户的应用程序对硬件的分配与使用。
在计算机系统的运行过程中,操作系统提供了正确使用这些资源的方法。
综上所述,操作系统( Operating System , OS )是指控制和管理整个计算机系统的硬件与软件资源,合理地组织、调度计算机的工作与资源的分配,进而为用户和其他软件提供方便接口与环境的程序集合。操作系统是计算机系统中最基本的系统软件。
一般情况下,【Linux】的基础命令都是由命令、选项、参数三个部分组成。在某些命令下,也可以由命令加参数组成。(注意:一般在这三部分中间是需要有空格,不然命令会报错)
顾名思义,就是用户让计算机去做什么。举个例子:在终端上输入【ls】,就是让计算机去执行【ls】这个命令,之后计算机就会显示执行完这个命令的回显。如图下:
选项就是用来具体命令。(可以理解为修饰命令)还是拿【ls】来举例,在终端上输入【ls -a】那么显示的东西将会与【ls】显示的不同。如下图,出现了很多.开头的文件,这些文件都是隐藏文件,如果不用【-a】这个选项,那么【ls】不会显示,所以选项是用来使命令更加具体。
参数就是具体的对象。
首先我先直接打出几个命令,让大家先见识一下,之后我们在对其进行深入了解,具体如下:
ls:显示当前目录下的文件列表(包括目录,普通文本文件…)
mkdir:在当前路径下,创建一个目录/文件夹(window)
pwd:显示当前我所处的路径
cd:进入指定的目录
touch:创建指定的普通文件
whoami:查看我是谁
接下来我们就一个个的去进行深入学习。
语法: ls [选项][目录或文件]
功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。
首先我们先讨论一波什么叫做 【当前路径】
我就以平时自己存代码的路径为例,当我们在Windows下去进行点击直到到我们存放的路径下:
此时,上述的即为我当前的路径,随着路径的不断的变化,我们不断的改变,当前路径是在不断的变化的,所以顾名思义当前路径就是 目前用户所处的路径
所以,以下我们可以理解为:【pwd】执行的即为我们运行【ls】时所处在的路径
通过上述代码我们不难发现一个问题, 【ls】只让我们看到文件名,当我们需要了解文件的更多信息时应该怎么办呢?
我们可以通过以下的命令来进行相应的查看需求,具体如下:
解析:
这里的【-l】我们理解为【list】的意思,以这样的方式显示文件的更多信息,大家千万不要理解为命令只有相应的命令,我们还可以带选项的。
紧接着我们如何理解下面多出来的这些东西呢?这些都是什么呢?
要理解这个文件,我们先来理解以下问题。今天当我们在Windows下创建一个新文件时,我们可以知道创建出来之后默认的都是为0的,这是基本常识大家应该都知道:
那么这个文件在哪存放的呢?很显然是在磁盘上存放着的
当我们刚开始创建这个文件之后,很显然目前还是一个空文件,那么问题来了。这个空文件在磁盘上要不要占据空间呢?
大家可能会这样理解,上述我们创建了一个记事本,在这个记事本里面是没有内容的,并且也显示出了大小为【0kb】。但是大家是否会发现,当我们点击新建之后,弹出的这些内容大家是否注意过呢?
这些东西是“数据”吗,文件的内容虽然是空的,但是文件也有相应的文件名,文件的时间以及大小等。答案是肯定的,即—以上这些是数据,这些称为文件的属性数据,因此即便你创建了一个空文件,内容里面没有东西,但是它的属性我们都会进行保存。到此,我们可以得出一条结论,即 【文件=内容+属性】
到此,大家是否能理解上述【ls -l】命令下,会多出些数据呢.
除了上述命令之外,我们还有很多的选项,具体如下:
-a 列出目录下的所有文件,包括以 . 开头的隐含文件。
-d 将目录象文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录
-i 输出文件的 i 节点的索引信息。 如 ls –ai 指定文件
-k 以 k 字节的形式表示文件的大小。ls –alk 指定文件
-l 列出文件的详细信息。
-n 用数字的 UID,GID 代替名称。 (介绍 UID, GID)
-F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通文件;“/”表示目录;“@”表 示符号链接;“|”表示FIFOs;“=”表示套接字(sockets)。(目录类型识别)
-r 对目录反向排序。
-t 以时间排序。
-s 在l文件名后输出该文件的大小。(大小排序,如何找到目录下最大的文件)
-R 列出所有子目录下的文件。(递归)
-1 一行只输出一个文件。
我们以【ls -a】为例进行举例说明:
当我们输入【-a】选项时, 列出目录下的所有文件,包括以 【.】开头的隐含文件。
那么这个隐含文件如何理解呢,怎么证明出来呢?我们通过代码来进行举例:
解析:
在当前路径下创建了名为【hello】的目录,在这个目录里面又创建了一个名为【world】的文件,其中它们之前都带有【.】,当我们通过【ls
-l】选项执行时,我们可以看到刚开始创建的并未给我们打印出来,而当我们执行【ls -l -a】时,此时便打印出来了。
为了达到同样的效果,我们可以直接输入【ls -la】也是支持的。
到此,我们对【ls】指令的学习便到一阶段了,如果大家有兴趣,可以去尝试敲一下。
语法: pwd
功能:显示用户当前所在的目录
建议:
如果大家长时间不用,以及每次登陆时,我建议大家先执行一下这个指令,查看自己在哪里
语法:cd 目录名
功能:改变工作目录。将当前工作目录改变到指定的目录下。
在之间将隐藏文件的时,打印出来都会有一个【.】和一个【…】,那么是否所有的都是这样呢?我们先通过代码来进行查看:
解析:
当我们进入【dir】目录下又创建了一个新的目录【seconddir】,当我们打印出来时,我们可以发现,依然出现了说的那种情况。什么意思呢?先抛出答案,我在具体给大家分析:
接下来我们还是通过代码来理解这两者之间到底什么意思?具体如下:
大家注意我圈画的地方,开始时我们执行【pwd】指令,显示我们当前的路径,接下来我们执行【cd .】之后我们可以发现,得到的结果跟我们之前的一样,紧随其后我们执行【cd …】之后我们可以发现此时就退到当前路径的上一级路径位置,所以【cd … 】就是 返回上级目录。
此时,又会引出了一个问题,那就是当我们有限次的【cd …】后,最后会怎么样呢?我们通过代码来仔细观看:
此时我们可以发现,当我们执行到【cd …】后如果打印出的当前目前为【/】,之后我们继续执行的话,结果依旧如此,这个很好理解,就是到底了。这时,我们就可以理解为Linux下**【/】**就是我们的根目录。
我们跟Windows下对比来进行理解:
通过对比和之前的知识,我们不难得出在Windows下文件夹里可以包含文件夹,在我们的Linux也也是一样的道理 ------ Linux目录下可以包含目录,整体结果是一颗“多叉树”的样子!!!
在这时,我们的问题又来了(大家是不是有种陷在里面的感觉了),在这种情况下,我们要定位文件呢?
答案是通过 【路径】,我们通过上述的结构以及我们之前学习过的数据结构的基本知识,我们不难看出,虽然一个目录可以存储很多子目录,但是任何一个子目录都是只有一个父结点,因此往上去找是唯一的,具备唯一性,所以当我们想要去查找目录时,我们可以从根目录下逐级的去查找!!!
例如:
上述图片中当我们想要去查找【test.c】时,我们可以这样去找:
/home/bit/test.c -----这种从根目录开始去遍寻的方式,我们叫做绝对路径
上述方法不难看出,当我们的目录太多时这样的方式进行下去效率就会很低,那么除了上述方法之外,我们是否还有其他方式去查找呢?
答案是有的,我们还有一种名为相对路径的查找方式,顾名思义这种方法就是相对于此时我们所在的路径下进行查找操作!!!
例如:
当我们用绝对路径去查找我们的【bin】目录时,我们的做法如下:
/user/bin
此时当我们用相对路径的方法去查找【lib】目录时,做法如下:
… / lib
此时,我们所处的路径下,我们可以绝对路径的方式去访问。而此时当我们想要访问【dir】目录下的【myfile.txt】时,我们就可以通过相对路径的方式去查找。因此,我们后面经常会使用相对路径来进行定位!!!
这个知识点我们便讲解完毕了!!!
【cd】还有一些选项指令,具体如下;
cd … : 返回上级目录
cd /home/litao/linux/ : 绝对路径
cd …/day02/ : 相对路径
cd~:进入用户家目
cd -:返回最近访问目录
我们进行一一举例说明:
【cd ~】:进入用户家目录,直接上代码展示
【cd -】:返回最近访问目录
上图便直观的展示出了【cd -】的功能。
这个知识点的结尾给大家介绍一个“热键”——【tab】键。什么意思呢?当我们不记得指令怎么写或者不知道当前目录下有什么时,我们就可以使用这个热键来进行操作,通过不断的【tab】看能不能【tab】出来,如果没有则说明敲的时候出错了。
语法:touch [选项]… 文件…
功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件。
常用选项:
-a 或–time=atime或–time=access或–time=use只更改存取时间。
-c 或–no-create 不建立任何文档。
-d 使用指定的日期时间,而非现在的时间。
-f 此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。
-m 或–time=mtime或–time=modify 只更改变动时间。
-r 把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。
-t 使用指定的日期时间,而非现在的时间。
在这里普及两个知识点,就是【nano】和【cat】这两个命令。什么意思呢?
【nano】:就相当于记事本的功能,在这里里面不限制我们的语法,你想写什么就可以写什么。通过代码来具体理解:
在里面之后想要退出来的话,我们可以【Ctrl+x】之后,在输入【y】,即可退出到我们原有界面。
【cat】:就是把我们当前记事本中的内容打印出来,当我们执行这个代码时,具体如下:
当我们想要把这个代码跑起来的时候,我们通过【gcc】的方式进行编译最终把它打印到显示器上:
以树状结构显示Linux执行的目录结构
语法:mkdir [选项] dirname…
功能:在当前目录下创建一个名为 “dirname”的目录
常用选项:
-p, --parents 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录;
解析:
通过上述代码我们不难看出,当我们直接输入【mkdir d1/d2/d3/d4】时是无法正确执行的。只有加上【-p】选项才能执行,直接创建了一串路径。
rmdir是一个与mkdir相对应的命令。mkdir是建立目录,而rmdir是删除命令。
语法:rmdir [-p][dirName]
适用对象:具有当前目录操作权限的所有使用者
功能:删除空目录
刚才我们创建了一串的路径,【rmdir】可以删除它吗?我们直接看代码
解析:
我们发现这里是删不掉它的,当我们去tree一下的时候发现里面还有文件,所以【rmdir】只能删除空目录!!!
常用选项:
-p 当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除
紧接着就是【rm】指令:
rm命令可以同时删除文件或目录
语法:rm [-f-i-r-v][dirName/dir]
适用对象:所有使用者
功能:删除文件或目录
常用选项:
-f 即使文件属性为只读(即写保护),亦直接删除
-i 删除前逐一询问确认
-r 删除目录及其下所有文件
Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。访问Linux手册页的命令是
man帮助是Linux系统中最常用的查询命令方式。
man 语法: man [选项] 命令
例如我们之后会学习到一个指令【fork】,此时我们并不知道它什么意思,这时我们就可以去【man】手册中去查。具体如下:
解释一下,面手册分为8章
1 是普通的命令
2是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文 件)
3是库函数,如printf,fread
4是特殊文件,也就是/dev下的各种设备文件
5 是指文件的格式,比如passwd,
就会说明这个文件中各个字段的含义
6 是给游戏留的,由各个游戏自己定义
7是附件还有一些变量,比如向environ这种全局变量在这里就有说明
8 是系统管理用的命令,这些命令只能由root使用,如ifconfig
常用选项
-k 根据关键字搜索联机帮助 num 只在第num章节找
-a 将所有章节的都显示出来,比如 man printf 它缺省从第一章开始搜索,知道就停止,用a选项,当按 下q退出,他会继续往后面搜索,直到所有章节都搜索完毕。
还有一个指令就是【help】,这个查询帮助是命令本身自带相关的查询信息,才能使用。不然,系统会显示报错。
它也会显示该命令相关语法,以及使用方法。不过没有【man】帮助详细,如果在【help】中没有找到可以用【man】去查询想要的结果。
说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息
语法:cp [选项] 源文件或目录 目标文件或目录
功能: 复制文件或目录
开始我们创建了一个目录和一个空文件,此时当我们【tree】时,发现各个都是独立的,当我们执行了拷贝指令之后,我们再去【tree】,此时我们会发现,在【dir1】目录下此时包含了文件【file.txt】,成功的把文件拷贝了过去,当我们执行【ls dir1】时也可以发现当前目录下存在【file.txt】文件。
常用选项:
-f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
-i 或 --interactive 覆盖文件之前先询问用户
-r递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理
-R 或 --recursive递归处理,将指定目录下的文件及子目录一并处理
mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录
语法: mv [选项] 源文件或目录 目标文件或目录
功能:
- 视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。
- 当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
- 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。
1、移动目录
接下来还是通过代码来直观的理解:
现在已经移动过去了,那么我们该如何把文件又移动回来呢?看下图代码:
2、也可以用于重命名(会改变源文件的状态)
在当前目录下,有了文件名为【file.txt】我们想把它改名为【name.txt】时,此时我们输入命令,系统则会在当前路径下寻找,然后在进行相应操作。
在带大家看行代码,我们在分析一波:
我们浅浅的分析一下。如果你当前(mv)后面跟的就是文件名,那么它做相应的重命名工作,如果只跟某一个路径则是相应的剪切的功能,但是如果你后面跟的除了文件名紧接着再跟的是目录,到这还没完,后面在跟了一个不存在的文件名,如果是这样,则它既帮我们完成剪切工作,又帮我们完成重命名工作。
常用选项:
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
语法:cat [选项][文件]
功能: 查看目标文件的内容
这个命令在上面已经讲到过,这里就不在多提了。
常用选项:
-b 对非空输出行编号
-n 对输出的所有行编号
-s 不输出多行空行
到此,本期的内容便结束了。本期主要讲的就是关于【Linux】的基本命令,关于这些基本的命令,大家结合以上知识体会后一定要上手去操作!!!
最后,如果以上内容对你有帮助的话,记得三连哟!!!