目录标题
前言
在上一章关于Linux的基本指令详解中我们只介绍了五种最基本指令的功能及用法,相信看过上一篇文章的Linux小白已经对Linux指令有一个最基本的了解了,或者说可以看懂一些指令了,当然没有看过的老铁们可以先去看一下上一篇文章,先对一部分指令有一个最基本的了解(https://blog.csdn.net/be_a_struggler/article/details/125774770),这样对后面的指令会有一个更好地理解。今天我们将要讲述更多的在Linux下比较实用且基础的指令。
Linux中的基本指令
1.man指令(重要)
Linux的命令有很多参数,我们不可能全部记住,我们可以通过查看联机手册获取帮助。访问Linux手册页的命令是 man。
语法: man [命令]
man -k: 根据关键字搜索联机帮助
num: 只在第num章节找
man -a: 将所有章节的都显示出来,比如 man printf 它缺省从第一章开始搜索,知道就停止,用a选项,当按
下q退出,他会继续往后面搜索,直到所有章节都搜索完毕。
补充:
参考手册分为8章:
1 是普通的命令
2 是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件)
3 是库函数,如printf,fread4是特殊文件,也就是/dev下的各种设备文件
5 是指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义
6 是给游戏留的,由各个游戏自己定义
7 是附件还有一些变量,比如像environ这种全局变量在这里就有说明
8 是系统管理用的命令,这些命令只能由root(即系统中唯一的超级用户)使用,如ifconfig
在这里我们可以举一个man ls的例子,如上图,输入该指令后就会出现关于ls如何使用的全部操作,红框中的LS(1),在这里,LS表示手册名称,而(1)则表示该手册位于第一章节,只输入man ls 的话,会从手册第一章开始往后搜索,当然关于ls的指令有很多,图中的并不全,大家可以自己尝试一下,会出现非常多的介绍,按q键的话就可以退出对ls指令的介绍,当然想要看懂这写指令也需要一定的英语基础。
通过两种不同的指令查看printf指令,我们可以从图中看到一些区别,man printf则是直接从第一章开始搜索,而man 3 printf则是直接从第三章开始搜索。
2.cp指令(重要)
语法: cp [选项] 源文件或目录 目标文件或目录
**功能: ** 复制文件或目录
说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,
则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息。
简而言之就是:拷贝普通文件或者目录,如果是目录,则需要用到 -rf。
cp -f: 强行复制文件或目录,不论目的文件或目录是否已经存在。
cp -i: 覆盖文件之前先询问用户。
cp -r: 递归处理,将制定目录下的文件与子目录一并处理。
通过上图我们可以看到直接调用cp指令与cp -i指令的作用是相同的,都会将一个文件中的内容复制到另一个文件中,并且会询问用户。
在这里我们还要先补充一个tree命令,这个命令的作用就是将目前所在目录下的所有目录或文件一一个树状的结构展现出来,看图就很会好理解了,那么大家主要观察我们红框内的内容,我们先从最简单的内容开始看,最开始node目录下是没有任何文件的,执行了命令以后我们可以看出node目录下多出来了hello.c文件,下面我们继续分析更复杂的内容,cp -r node1 node2,我们可以看到直接将node1目录下的文件全部复制到了node2目录下。
3.mv指令(重要)
mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录。
语法: mv [选项] 源文件或目录 目标文件或目录
功能:
**1.**转储特定的一个文件或者目录到其他的路径下
2. 对一个文件或者目录进行重命名
在这里我们通过对上图的分析来理解相对应的指令,大家直接看我画红框的部分就好,在第一处红框可以发现经过我们处理后text2.txt直接从原来的位置被移动到了node目录下,再看下一处画红框处的指令,我们可以看到node目录被移动到了node1目录下的node3目录下的位置,再看最后一个指令,这里就很好的体现了mv指令的第二个功能,我们直接将原来的node1重新命名为了newnode1,而目录下的其他目录或者文件则没有发生任何变化。
4.cat指令
语法: cat[选项][文件]
功能: 查看目标文件内容
cat -b: 对非空输出行编号
cat -n: 对输出所有行编号
cat -s: 不输出多行空行
5.nano指令
在我们用实际操作介绍cat指令之前,再简单的说一下另一条指令。
语法: nano [选项][文件]
功能: nano是Linux上的一个记事本,他可以让我们以记事本的形式打开一个文件,然后可以在文件中写一些简单的内容。(在做开始的时候推荐大家先用nano写一些内容)
补充: 如果大家无法使用nano,可以使用 yum install -y nano。
下面我们先说一些关于nano的操作 :
nano hello.c后我们就会出现上图的内容,大家就可以在这个里面编辑内容了,编辑结束后我们按ctrl+x退出,然后在屏幕下面会出现下图的内容,y则是保存内容。
之后又会出来下面这一些内容,我们直接按回车键就可以退出了,而我们所写的内容也就被顺利地保存了下来。
在了解了nano指令以后我们再配合着来讲解cat指令
大家看红框的内容可以看出这个是我们在hello.c文件中所写的内容,后面蓝色方框内的操作就会把hello.c文件中的内容打印出来。
这里我将cat -b和cat -n指令放到了一起,大家可以进行一下对比,cat -b不会将空行的行数打印出来,而cat -n则会把行数全部打印。
为了使cat -s指令的特点更加明显,我在hello.c中又写了多行的空行,可以看到使用这个指令输出的话,空行是不会输出的。
6.more指令
语法: more [选项][文件]
功能: more命令,功能类似cat
**more -n:**对输出的所有行编号(这里的n指的是数字,即从第n行开始显示文件的内容)
q: 退出more
我们在这里先观察红框的内容,利用cat指令将行数全部打印出来,更有利于大家对指令的理解。
我们先看原文件中的内容一共有13行,more hello.c则是直接将全部的内容直接输出,而第二个蓝框内的指令我们加了一个 -4,这个意思就是我们要让它从第四行开始输出,经过前后的对比,可以观察出确实是只输出了前四行当然我们要是还想查看第四行以后的内容,直接按下enter键就可以了,默认向下1行。但是一般生活中我们并不推荐使用more指令,因为more指令只能向下翻,不能向上翻,假如一个文件有一万行数据,当你看到1000行的时候我们又想回去查看第500行的信息的时候,这是more指令无法做到的。
7.less指令(重要)
1. less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。
2. less 的用法比起 more 更加的有弹性。在 more 的时候,我们并没有办法向前面翻, 只能往后面看,但若使用了 less ,就可以使用[pageup][pagedown] 等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容!
3. 除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。
语法: less[参数] 文件
功能: less与more类似,但使用less可以随意浏览文件,所以在这里我更推荐大家使用less指令,而且less在查看之前不会加载整个文件。
在这里我又新建了一个文件夹,并在其中输入了10001行的数据,在这里我们尝试用less指令来进行阅读,如下图,我们可以利用向上和向下键对数据进行向上或者向下的浏览,更加方便。
8.echo指令
功能: 打印内容到显示器。
在这里我们又要介绍一个概念:
输出重定向:
1. 如果目标文件不存在,创建之,否则直接进行访问
2. 访问
(1)输出重定向(从文件开始,覆盖式的写入 >)
(2)追加重定向(从文件的结尾,追加式的写入 >>)
(以上两个本质上都是写入!!!)
我们在需要打印的内容后面不加任何东西,那么字符串就会直接被打印在屏幕上,如果加了输出重定向的符号和文件,那么就会输出到文件中,并且文件不存在的话就会新建一个文件,并且>符号只会让输出的字符串覆盖掉原来的字符串,而>>则是会在以前的字符串后面追加我们输出的字符串。
(3)输入重定向(<)
有输出重定向就一定会有输入重定向。
在这里我们只输入cat指令后,当我们在键盘上输入字符串后按回车就会输出相对应的字符串,其实大家现在可以理解成cat < file.txt 与cat file.txt的作用基本一致,其具体的作用现在还不太好演示出来,后面我们会讲到,我们可以简单理解成将file.txt文件中的内容输入到显示器上然后打印出来。本应该从键盘上读取的数据变成从文件中读取。
在这里在给大家介绍一个热键,大家在初步学习Linux指令的时候,难免会出现很多的错误,稍有操作不慎就会导致自己无论如何操作都没有任何反应,这个时候我们可以尝试一下ctrl+c 这个热键可以帮助我们解决大部分的问题。
ctrl+c : 终止异常的命令。
9.head指令
head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块, head 用来显示档案的开头至标准输出中,而 tail 当然就是看档案的结尾。
语法: head[参数] [文件]
功能: head用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。
head -n(行数): 显示的行数
有不清楚的可以再看一下上面图片的内容。
10.tail指令
tail指令与head指令相似(当然还有其他的作用,但是先不阐述),可以拿到文件的末尾行数的数据。(默认也是十行数据)
在这里大家就可能会有疑惑了,我们现在只知道如何拿到文件头和文件尾的数据,那如果我想看中间的一段数据呢?
我们只需要将这二者结合起来用很轻松的就可以办到了。
下面我们以拿取文件中999行到1009行的数据为例子,讲解一下。
方法一:
我们可以先将file.txt文件中的前1010行数据保存在一个新的tmp.txt文件中,然后再拿取最后的11行代码,这样就能拿取到999~1009这个区间的数据了,但是这种方法有一个弊端,那就是还需要重新创建一个文件,下面我们来看一种更简便的方法。
方法二:
这个方法我们将会借助一个新的东西,管道(|) 。
通过图片我们可以看到只使用了一条命令就得到了我们想要的数据,下面我们来分析一下。
| :我们把中间的|叫做管道,管道的作用就是传递资源(数据),可以实现对数据的批量化,流水化处理,其包含入口和出口,在这里head -1010 file.txt就为入口,tail -11就为出口,先把1010行数据放入管道中,然后再将最后的11行数据提取出来。管道文件是内存级的文件,没有在磁盘上。
11.时间相关的指令
1.date显示:
date 指定格式显示时间: date +%Y:%m:%d
1.在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中常用的标记列表如下
%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@时间戳
Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp)是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
时间戳是单向递增,具有唯一性的。
在这里我们可以看到时间戳为0时,时间为08:00:00,这是因为时差所导致的,当地时间与我们的北京时间正好相差八个小时。
12.cal指令
cal命令可以用来显示公历(阳历)日历。公历是现在国际通用的历法,又称格列历,通称阳历。 “阳历”又名“太阳历”,系以地球绕行太阳一周为一年,为西方各国所通用,故又名“西历”。
命令格式: cal [参数][月份][年份]
功能: 用于查看日历等时间信息,如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份
cal -3: 显示系统前一个月,当前月,下一个月的月历
cal -j:显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数)
cal -y: 显示当前年份的日历
13.find指令(非常重要)
1. Linux下find命令在目录结构中搜索文件,并执行指定的操作。
2. Linux下find命令提供了相当多的查找条件,功能很强大。由于find具有强大的功能,所以它的选项也很
多,其中大部分选项都值得我们花时间来了解一下。
3. 即使系统中含有网络文件系统( NFS), find命令在该文件系统中同样有效,只你具有相应的权限。
4. 在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系
统可能会花费很长的时间(这里是指30G字节以上的文件系统)
语法: find pathname -options
功能: 用于在文件树中查找文件,并作出相应的处理(可能访问磁盘)
find -name: 按照文件名查找文件
大家可以看到,我们通过find指令就可以找到我们该目录下的所有的hello.c文件。
关于find的命令有非常多,目前来说只会这一种就可以了。
在介绍下面的指令之前我们再给大家补充一些内容:
首先问一个问题:我们该如何看待Linux下的各种命令呢?
其实这些命令本质上就是可执行程序(也可称为:工具,命令,指令)
我们平时编写的C/C++代码,编译器编译后,会形成一个.exe(可执行程序),其实这和Linux是一样的,所谓在windows下的安装一个软件,Linux也会有安装一个软件。(而我们平时安装软件的过程其实就是拷贝的过程,只不过被封装了一下而已)。
那么我们在运行一个可执行程序的时候主要就分为两大步骤:找到它,运行它。
接下来我们要讲的指令就是如何去查找指令。
14.which指令
语法: which [要查找的指令]
功能: 在系统路径中,去查找特定的指令所在的路径。
在这里我们就能看到每条指令所在的目录。并且在这里我们使用命令所在的路径和直接使用命令得到的结果是相同的。
看上面的图片,很多人又会问alias是什么意思,下面我们来介绍。
15.alias指令
语法: alias 别名=‘要命名的指令’
功能: 给命令起别名。
使用alias指令之后我们就给ls -a指令起了别名,lisi的作用与其作用是一样的,并且我们查询lisi的所在路径显示他就是ls指令的路径。
起了别名以后,我们只会在本次操作中执行有效,一旦重新启用我们的Xshell,起的别名就不会在发挥作用了。
16.grep指令(很常用的指令)
语法: grep [选项] 搜寻字符串 文件
功能: 在文件中搜索字符串,将找到的行打印出来
grep -i: 忽略大小写的不同,所有大小写视为相同
grep -n: 顺便输出行号
grep -v: 反向选择,即显示出没有’搜索字符串’内容的哪一行
grep的使用比我们前面讲的more,less指令更加方便快捷。
通过上图我们可以看出,grep -v指令只会输出除了第二行int main的其他的语句。
为了更好地验证grep -i指令,我对hello.c文件做了一些修改,图中可以看出printf有大写,小写,还有一些事大小写混合的,单纯的搜索 纯大写和纯小写的printf则不会出现那些大小写掺杂的printf,而grep -i指令则是忽略大小写,一视同仁,将含有printf的语句全部输出。
17.xargs指令
功能: 将管道的输出结果,作为命令行参数,交给后面的程序。
我们观察上面的图片,可以发现我们想通过管道将我们输入的-l -a -i传递给ls指令,让其进行ls -l -a -i操作,但是这种方法是行不通的,ls依然只会执行他自己的命令,如果我们在ls前面加上xargs就能完成该操作了,他可以将我们传的数据作为命令行参数。
18.zip/unzip指令:
语法: zip压缩文件.zip 目录或文件
功能: 将目录或文件压缩成zip格式
zip -r: 递归处理,将指定目录下的所有文件和子目录一并处理。
首先我们先来介绍一下打包和压缩 是什么?
打包: 将东西放在一起
压缩: 采用某种压缩算法,压缩他的存储空间
那么 为什么要进行打包和压缩呢?
便于传输,或者归档
我们下载软件的时候,其实下载下来的是一个压缩包。
市面上各种后缀的压缩包,压缩工具也非常多,Linux下也是如此。
zip -r name.zip 你的目录
unzip name.zip 默认解压到当前路径下
unzip name.zip -d 指定的路径
在上图中我将各个指令都演示了一下,首先先把我之前所创建的目录及文件全部移动到project目录下,然后将project压缩,会形成一个pro.zip压缩包,我将之前的project目录删除后将压缩包解压,就又会形成一个新的project目录,并且内容与之前的一样,后面我们还可以将压缩包在指定的text目录下解压,内容也是一样的。
19.tar指令(重要)
功能: 打包/解包
常用选项:
-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
-C : 解压到指定目录(这个是大家要知道的)
关于tar指令的选项也有很多
大家看到这么多的选项的时候可能头都大了,下面我就将其简化一下,目前只需要掌握一部分就可以了
tar -czvf: 这是一套压缩命令,即将目录压缩,有v的话会显示压缩的过程,没有v则不会显示。
tar -xzvf: 这是一套解压命令,即将目录解压,有v的话会显示解压的过程,没有v则不会显示。
这两个指令只相差了一个字母,记起来会非常简单,大家只需要了解这两个就可以了,z前面是c的话就会执行压缩算法,是x的话就会执行解压算法。
大家可以对比一下,图上显示的很清楚。压缩文件后的.tgz是.tar.gz的缩写。
然后在补充一点小知识,直接tar -cf 就可以将文件只打包不压缩,tar -tf就可以直接查看打包文件中的文件信息,这里最后面通过对比数据就能很清楚的看出来,压缩后的文件要比只打包的文件小很多的。
20.bc指令
bc就是相当于在Linux中的一个计算器
我们输入要计算的数字后可以直接得到结果。
bc命令也可以很方便的进行浮点运算。
21.uname 指令
语法: uname [选项]
功能: uname用来获取电脑和操作系统的相关信息。
补充说明: uname可显示linux主机所用的操作系统的版本、硬件的名称等基本信息。
uname -a或–all: 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称
uname -r: 显示操作系统的发行版号。
22.重要的几个热键
1.[Tab]按键—具有『命令补全』和『档案补齐』的功能
2.[Ctrl]-c按键—让当前的程序『停掉』
3.[Ctrl]-d按键—通常代表着:『键盘输入结束(End Of File, EOF 戒 End OfInput)』的意思;另外,他也可以用来取代exit
23.关机
halt、shutdown为两个常用关机指令。
但是一般情况下服务器是不关机的,所以平时也没必要将其关机。
reboot可以将服务器重新启动。
上面的三个指令不太推荐使用。
总结
今天我们基本上将所有的Linux下常用的指令都已经讲述完毕,(如果我所讲述的有问题的话欢迎大家评论指出,我后续一定会改正,那就让我们一起进步吧),学习Linux的指令无非就是多敲,多练,熟悉了以后这些指令都不在话下。最近的三天时间基本上都在整理这些指令,为了能让大家更清楚的明白其中的意思也是精心的去截图,整理,如果我所讲的内容对你有用的话,记得给波三连呦!!
你们的支持就是我最大的动力。