【寻找Linux的奥秘】第一章:基础指令
请君浏览
前言
本专题将介绍关于Linux操作系统的种种,那么第一章讲述的是对于命令行一些基础命令的使用,旨在可以更号地去理解并使用Linux系统。(本章节默认使用的环境是centos 7.8,使用root(超级用户)账号)
1. 认识Linux
Linux系统与我们平常使用的Windows、macOS系统一样,也是一款操作系统,不过与之不同的是linux操作系统凭借其免费、开源的特点一直被各大企业所喜爱。
Linux是⾃由软件和开放源代码软件发展中最著名的例⼦。只要遵循GNU通⽤公共许可证,任何个⼈和机构都可以⾃由地使⽤Linux的所有底层源代码,也可以⾃由地修改和再发布。随着Linux操作系统⻜速发展,各种集成在Linux上的开源软件和实⽤⼯具也得到了应⽤和普及,因此,Linux也成为了开源软件的代名词。
Linux的使用场景一般来说是命令行,但是它也有着自己的图形化界面,不过我们一般不会去使用,因为使用图形化界面是会占据一定的资源,一般为了极致的资源利用率,在很多地方是不用使用图形化界面的。那么这时,指令便是我们的“双手”,接下来将为大家介绍一些基本的指令,以便我们能够更好的去使用Linux。
2.基础指令
Linux的基本操作,是通过指令来进行的。接下来我们先来简单认识几个常见指令,以便接下来的学习:
- pwd -> 显示当前所在的路径
- whoami -> 显示当前正在使用的Linux账号名称
- ls -> 显示当前路径下所有文件以及目录的名称
- mkdir -> 创建一个目录
- cd -> 进入指定的目录
- touch -> 创建一个文件
- rm -> 删除一个文件
有了上面的基础认识,接下来让我们详细地去学习一些指令。
2.1 ls 命令
ls的功能:显示当前目录下所有的普通文件和子目录。
ls指令的语法结构:ls+选项+目录或文件
选项是我们对一个指令的更多操作方式,对于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 在l⽂件名后输出该⽂件的⼤⼩。(⼤⼩排序,如何找到⽬录下最⼤的⽂件)
- -R 列出所有⼦⽬录下的⽂件。(递归)
- -1 ⼀⾏只输出⼀个⽂件。
对于上述指令,我们只需记住最常用的几个即可:如-l、-a
。其他的当我们需要用到时再去查询即可
-l选项可以让我们看到详细的文件属性信息,-a可以显示隐藏文件
如上图所示,当指令一次性用到多个选项时选项可以合并,并且先后顺序不会影响。在使用-l
选项显示详细信息时,对于最前面的那一行信息这里要告诉大家的是d
开头的代表是目录,-
开头的代表是普通文件。相信大家已经对ls指令以及选项有了一定的了解。那么接下来便讲解一些知识点:
文件 != 文件的内容
文件 = 文件的内容+文件属性
因为文件的内容和文件的属性都是数据,都需要保存起来。例如下图,我们在windows系统下创建一个空文件,虽然它的内容大小为0,但是它的各种信息例如访问时间等属性也是数据,也要被保存起来,所以空文件也是会占据内存的。
上面对文件给大家进行了介绍,接下来是隐藏文件,顾名思义,隐藏文件就是我们不能直接看到的文件,一般来说存放一些比较重要的东西,可以防止我们对其他文件进行操作时对其进行误操作。在Linux系统下,以.
开头的文件和目录为隐藏文件。在上图中出现的.
和..
两个隐藏文件(每一个目录中都存在)分别是当前路径和上级路径,我们可以用cd命令进行测试:
2.2 pwd 命令
pwd命令特别简单,就是显示当前所在路径。
对于上图中红框圈住的/
叫做路径分隔符:
- 两个路径分隔符之间的一定是一个目录。
- 末端的文件可能是一个目录也可能是一个文件。
上面讲到每一个目录中都有一个隐藏文件..
是上级路径,那么当我们一直cd到该路径会发生什么呢?
可以发现,让我们达到目录/
时,再使用cd ..
没有发生变化,这里的/
就是Linux的根目录,它的..
路径是它自己。至此,我们可以得出一个结论,Linux的所有文件的系统结构是一个多叉树。
当我们想要访问一个文件的前提是要知道这个文件在哪里,这时我们就需要知道它的路径。路径分为两种,一种是相对路径,一种是绝对路径:
- 绝对路径:以根目录开始到达指定位置。(绝对路径⼀般不会随着⽤⼾的路径变化⽽丧失唯⼀性,⼀般在特定服务的配置⽂件中经常被使⽤)
- 相对路径:以当前位置到达指定位置。(相对路径因为它的便捷性,⼀般在命令⾏中使⽤较多)
例如我们要用ls查找一个文件的信息,有以下两种方法:
2.3 cd 命令
cd命令的功能:改变⼯作⽬录。将当前⼯作⽬录改变到指定的⽬录下。
对于cd命令有两个特殊的符号:
- 后跟
~
:进入特定用户的家目录。 - 后跟
-
:切换回最近的一次路径。
对于我们的root用户,它的家目录就是/root
,我们该如何去理解家目录呢?简单来说,家目录就是用来保护用户私有信息的目录,是我们登录时默认所在的路径。
2.4 touch 命令
touch命令除了可以创建一个文件,还可以改变文件或目录的日期时间,包括存取时间和更改时间。
touch命令有两个常用选项:
- -a :只改变access时间
- -c :只改变modification时间
我们可以使用stat命令来详细显示一个文件的信息:
这里再补充一个Linux的知识点:
在Linux中,文本文件、二进制可执行文件(我们所使用的一个个指令就是一个个二进制可执行文件)、动静态库、视频、音频、图片等等被称为普通文件。
在Linux系统中,文件类型与文件后缀无关,但系统 != 软件,对于一些软件规定了文件的后缀名。因此,我们在创建文件时最好带上相应的后缀名。
2.5 mkdir 命令
mkdir命令的功能就是创建一个目录。
它有一个常用的选项:-p
可以连续创建目录,如下图所示:
可以看到我们连续创建了四个目录。tree + 指定目录
命令可以以树形结构展示文件和目录结构。
2.6 rm 与 rmdir 命令
rmdir是⼀个与mkdir相对应的命令,mkdir是建⽴⽬录,⽽rmdir是删除目录。不过rmdir命令只能删除空目录,因此,我们一般都会使用rm命令。
rm命令的功能是删除文件或者目录。该命令有三个常用选项:
-f
即使⽂件属性为只读(即写保护),亦直接删除-i
删除前逐⼀询问确认-r
删除⽬录及其下所有⽂件
2.7 man 命令
Linux的命令有很多参数,我们不可能全记住,可以通过查看联机⼿册获取帮助,也就是man命令。
格式: man [选项] [需要查询的东西]
下图是对ls进行查询
常用选项:
-k
根据关键字搜索联机帮助num
只在第num
章节查找-a
将所有章节的都显⽰出来,⽐如man printf
它缺省从第⼀章开始搜索,知道就停⽌,⽤-a选项,当按下q退出,他会继续往后⾯搜索,直到所有章节都搜索完毕
man手册一共分为九章,我们能用到的基本上只有前三章:
- 普通的命令
- 系统调用,如open,write之类的(通过这个,⾄少可以很⽅便的查到调⽤这个函数,需要加什么头⽂件)
- 库函数,如printf,fread4是特殊⽂件,也就是/dev下的各种设备⽂件
2.8 cp 命令
cp命令的格式:cp [选项] 源文件或目录 目标文件和目录
cp命令的功能就是复制文件或者目录到指定的位置。
如上图所示,我们将dir1目录
下的a.txt文件
复制到了dir2目录
中,除了简单的复制,我们还可以在复制的时候改变复制之后文件的名字,如下图所示:
当我们想要复制一整个目录时,就需要加上-r
选项:
上图即为将dir1目录
在当前路径下复制一份并且命名为dir3
。下面看一下cp命令的常用选项:
-f
或--force
强⾏复制⽂件或⽬录, 不论⽬的⽂件或⽬录是否已经存在-i
或--interactive
覆盖⽂件之前先询问⽤⼾-r
递归处理,将指定⽬录下的⽂件与⼦⽬录⼀并处理。若源⽂件或⽬录的形态,不属于⽬录或符号链接,则⼀律视为普通⽂件处理
2.9 mv 命令
mv命令也就是move,意味着移动,可以理解为windows系统下的剪贴操作。可以⽤来移动⽂件或者将⽂件改名。
mv命令的语法:mv [选项] [src] [dst_dir]
、mv [选项] [sre] [newname]
,常见选项如下:
-f
:force 强制的意思,如果⽬标⽂件已经存在,不会询问⽽直接覆盖-i
:若⽬标⽂件 (destination) 已经存在时,就会询问是否覆盖
mv命令的功能:
- 视mv命令中第⼆个参数类型的不同(是⽬标⽂件还是⽬标⽬录),mv命令将⽂件重命名或将其移⾄⼀个新的⽬录中。
- 当第⼆个参数类型是⽂件时,mv命令完成⽂件重命名,此时,源⽂件只能有⼀个(也可以是源⽬录名),它将所给的源⽂件或⽬录重命名为给定的⽬标⽂件名。
- 当第⼆个参数是已存在的⽬录名称时,源⽂件或⽬录参数可以有多个,mv命令将各参数指定的源⽂件均移⾄⽬标⽬录中。
mv命令除了移动单个文件,还可以移动一整个目录:
2.10 cat 命令
cat命令的作用是查看目标文件的内容。语法:cat [选项] [文件]
,常见选项有:
- -b :对⾮空输出⾏编号
- -n :对输出的所有⾏编号
- -s :不输出多⾏空⾏(当连续空行大于一行时只显示一行空行)
在使用cat命令前,我们需要先了解Linux系统的一个知识点:
在Linux系统下,一切皆文件。
例如我们现在使用的终端,显示器,键盘等都是文件。
打印到显示器 -> 显示器就是文件 -> 写入到显示器文件
从键盘读入数据 -> 键盘也是文件 -> 从键盘文件读取数据
这里我们补充一个命令:echo命令
,它的作用是向显示器文件写入数据,如下图所示:
那么我们如果想要在文件中写入数据该怎么办呢?这时就需要用到一个操作符:>
输出重定向。顾名思义,它的作用就是将我们输出的数据重定向,输入到其他文件中,例如:
对于 > 操作符,它的工作原理是先清空再写入。如果重定向的文件不存在,那么它会新建一个文件再将数据写入,若是左侧没有数据写入,那么就会将文件中的内容清空,如下所示:
若是我们不想删除文件中原有的数据,而是追加一些数据,此时可以使用追加重定向:>>
。
2.11 less 命令
对于cat命令我们一般用来查看一些小文件的内容,对于大文件,cat不能进行查找和翻页,使用起来效果极差。这时我们可以使用less命令。
less ⼯具也是对⽂件或其它输出进⾏分⻚显⽰的⼯具,应该说是linux正统查看⽂件内容的⼯具,功能极其强⼤。使⽤了 less 时,就可以使⽤ [pageup] [pagedown] 等按键的功能来往前往后翻看⽂件,更容易⽤来查看⼀个⽂件的内容。除此之外,在 less ⾥头可以拥有更多的搜索功能,不⽌可以向下搜,也可以向上搜。
less指令的语法:less [选项] [文件]
。常见选项:
-i
忽略搜索时的⼤⼩写-N
显⽰每⾏的⾏号/字符串
:向下搜索“字符串”的功能?字符串
:向上搜索“字符串”的功能n
:重复前⼀个搜索(与 / 或 ? 有关)N
:反向重复前⼀个搜索(与 / 或 ? 有关)q
:quit ,退出
除了前两个后边的都是在查看的过程中使用的。
2.12 head 与 tail 命令
head
与 tail
就像它的名字⼀样的浅显易懂,它是⽤来显⽰开头或结尾某个数量的⽂字区块,head ⽤来显⽰档案的开头⾄标准输出中,⽽ tail 当然就是看档案的结尾。
head ⽤来显⽰档案的开头⾄标准输出中,默认head命令打印其相应⽂件的开头10⾏。它的选项-n
就是需要显示的行数,默认是十行:
tail 命令从指定点开始将⽂件写到标准输出,其他的与head相同。不过使⽤tail命令的-f
选项可以⽅便的查阅正在改变的⽇志⽂件,tail -f filename
会把filename
⾥最尾部的内容显⽰在屏幕上,并且不断刷新,使你看到最新的⽂件内容。
tail⽤于显⽰指定⽂件末尾内容,不指定⽂件时,作为输⼊信息进⾏处理。常⽤查看⽇志⽂件。
这里有一个问题,当我们想要查看一个文件中第180行到第200的内容该如何进行操作呢?这时我们就可以使用Linux中另一个操作符:管道|
,它可以将左边的结果传入到右边,简单来说就是对管道左边的结果再执行管道右边的命令:
这里我们先简单了解一下管道即可。
接下来是Linux中的一个知识点:
我们用的这些命令是什么呢?这时命令就是程序,是特定系统路径下的程序!
我们可以用which指令快速找到指定的命令文件:
这些命令都是在/usr/bin
目录下的程序,对于我们使用的ls命令来说,它并不是直接使用,而是有一些选项,使我们的目录名字有了不同的颜色,这是使用alias指令对其起了别名,相当于我们C++中的引用。在系统中,我们可以直接使用ll
指令来表示ls -l
指令,因为系统也对其进行了起别名的操作:
2.13 date 命令
date命令是使用指定的格式来显示时间,例如: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
date命令后使用标记%s可以显示当前时间的时间戳date +%s
,同时也可以通过时间戳来转换为对应的时间date -d@[时间戳]
:
所谓的时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
2.14 cal 命令
cal命令可以⽤来显⽰公历(阳历)⽇历。公历是现在国际通⽤的历法,⼜称格列历,通称阳历。“阳历”⼜名“太阳历”,系以地球绕⾏太阳⼀周为⼀年,为西⽅各国所通⽤,故⼜名“西历”。
cal命令的语法格式:cal [选项] 年份
。功能:⽤于查看⽇历等时间信息,如只有⼀个参数,则表⽰年份(1-9999),如有两个参数,则表⽰⽉份和年份。常用选项:
-3
显⽰系统前⼀个⽉,当前⽉,下⼀个⽉的⽉历-j
显⽰在当年中的第⼏天(⼀年⽇期按天算,从1⽉1号算起,默认显⽰当前⽉在⼀年中的天数)-y
显⽰当前年份的⽇历
2.14 find 命令
Linux下find命令在⽬录结构中搜索⽂件,并执⾏指定的操作。 Linux下find命令提供了相当多的查找条件,功能很强⼤。由于find具有强⼤的功能,所以它的选项也很多,其中⼤部分选项都值得我们花时间来了解⼀下。(在运⾏⼀个⾮常消耗资源的find命令时,很多⼈都倾向于把它放在后台执⾏,因为遍历⼀个⼤的⽂件系统可能会花费很⻓的时间(这⾥是指30G字节以上的⽂件系统)。)
find的语法结构:find [路径] [选项] [根据选项填写对应的参数]
,这里我们先介绍一个选项:-name
,顾名思义,根据名字来查找:
find 与 which 的区别
find命令通过系统目录树直接查找,可以查任意文件。
which命令只能用来查找系统自带的可执行程序
还有一个whereis
命令,用于找到程序的源、⼆进制⽂件或⼿册。
2.15 grep 命令
grep命令(行文本过滤工具)的语法结构:grep [选项] 搜寻字符串 ⽂件
,它的功能是在⽂件中搜索字符串,将找到的⾏打印出来。常用的选项有:
-i
:忽略⼤⼩写的不同,⼤⼩写视为相同-n
:顺便输出⾏号-v
:反向选择,亦即显⽰出没有 ‘搜寻字符串’ 内容的那⼀⾏
2.16 zip/unzip 、tar 命令
打包压缩是我们在传输文件时需要用到的操作,它通过使用特定的算法,将文件进行合并或者压缩,减少体积:
- 打包是将我们需要传输的文件放到一个文件中,可以提高文件传输的容错性。
- 压缩是将文件体积减少,节省资源和磁盘空间,减少网络传输的成本
(这里我们将打包压缩看成一个整体,不再分开说,没有必要。)
经过打包压缩后的文件有多种后缀名,不过我们只需要了解两种即可,分别是.zip
、.tar.gz(亦可简写成.tgz)
。
我们要打包成.zip
的压缩包需要使用zip命令。zip命令的语法结构:zip 压缩⽂件.zip ⽬录或⽂件
,功能是将⽬录或⽂件压缩成zip格式。若我们要将指定目录下的所有东西全部压缩,则需要带上-r
选项:
对打包后的.zip
文件进行解压缩操作需要用到unzip命令,语法格式:unzip [xxx.zip]
、unzip [xxx.zip] -d 路径
,第一个是解压缩到当前文件,第二个是解压缩到指定路径,需要用到-d
选项:
上面就是关于.zip
格式的压缩与解压缩的操作,接下来我们来看一下.tgz
格式的压缩与解压缩。
tar的语法格式:
- 打包压缩:
tar -czf dst(打包压缩到).tgz src(被打包压缩)
- 解压缩:1、解压缩到当前目录
tar -xzy xxx.tgz
2、解压到指定路径tar -xzy xxx.tgz -C 路径
若是需要展现打包压缩的过程可以再加入选项-v
。
解压缩:
2.17 uname 命令
uname命令可以获取当前电脑和操作系统的相关信息,使用-a
选项可以详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称 :
至此,一些基本的指令的学习就到这里结束了,在后面的学习中我们也会不断地学习其他常用的指令。
3. 重要的几个热键
- [Tab]按键—具有『命令补全』和『档案补⻬』的功能
- [Ctrl]-c按键—让当前的程序『停掉』
- [Ctrl]-d按键—通常代表着:『键盘输⼊结束(End Of File, EOF 戒 End OfInput)』的意思;另外,他也可以⽤来取代exit
- 键盘的上下键–可以翻阅历史命令
由上面我们知道,Linux系统会记录我们的历史命令,当我们想要查询我们所使用过的命令时可以使用history
命令。
那么Linux系统的第一章学习到这里就结束了,期待和您的下一次相见。
尾声
若有纰漏或不足之处欢迎大家在评论区留言或者私信,同时也欢迎各位一起探讨学习。感谢您的观看!