类比于windows,linux也是操作系统。只不过windows是以图形化界面的形式进行展示操作的,但是linux是以命令行的形式进行操作的
了解指令之前,先了解一些相关概念。
文件由内容数据和属性数据两个部分组成。在windows中,我们存在隐藏的文件。同样,在linux中,也有隐藏的文件这一说法。如果一个文件名是以.开头的,那么这个文件就是隐藏文件。也就是说,在linux中如果我们要隐藏文件或者文件目录的那么就让文件名以.开头
目录可以理解为文件夹。目录的结构在本质上是一个多叉树的结构。如下图所示。最上面的是根目录。由此发散出其他的目录或者文件。如果对于下面层次中还有文件夹的目录来说,他是路上结点。但是如果是普通的文件或者是空目录来说的话,他就是叶子结点了。
我们一般采取路径的方式来定位一个文件。我们不禁思考:为什么采用路径的方式可以对应一个文件呢?因为它具有唯一确定性。
如何理解唯一确定性?
一个子节点只有一个父节点,而这个父节点作为子节点又只有一个父节点,因此回溯到根节点的路径只有一条,所以从根节点到特定的子节点的路径只有唯一确定的一条
绝对路径的概念就是基于此产生的。绝对路径就是从根目录开始,到特定文件的前面的路径。
那么还有没有其他定位文件的方式呢?
如果参考系是当前的路径的话,可以用相对路径的方式来定位一个文件。
需要注意的是:我们的目的是定位一个文件。但是由于回溯的过程中,只回溯到同级别的路径,无法访问该路径下的文件,因此必须访问到该级别路径的上一级别。
适用场景:绝对路径和相对路径都是定位文件的方式。但是绝对路径由于比较繁琐,因此在正式的场合使用的比较多,而相对路径比较适合日常的操作。
基于此,我们引出关于路径的两个概念:
/是路径分隔符。根据/所处的位置不同,如果/在开头,比较特殊,他表示的是root根目录。如果/出现在一条路径的中间,那么/后面是目录;如果/在末尾,那么是空目录或者是文件。(在windows下\是路径分隔符,作用差不多)
.表示当前路径。举个例子,如果我们需要访问当前路径下一个文件名叫做hello的文件。需要这样指定文件名 ./hello.c
..表示上一路径。一般用来进行路径的切换
指令一般有指令+命令构成。中间以“ ”空格区分指令和命令。
linux下的各种命令,本质上都是可执行程序(工具 命令 指令)。类比windows下的软件安装。其实编写的c c++程序代码,通过编译器编译之后,形成了对应的exe文件。安装就是将对应的软件的exe拷贝到c盘的目录下运行。其实安装的本质就是拷贝。
关于*的通配结构
*.c所有的.c文件 file* 所有的file开头的文件
$表示匹配文件末尾,字符需要在$之前表示以字符结尾 a$表示以a结尾
^表示匹配文件起始,字符需要在^之后表示以字符起始 ^a表示以a起始
读操作:从外接设备(键盘,磁盘等)向CPU输入信息,就是读操作。
写操作:由CPU向外接设备(显示屏,磁盘等)输出信息,就是写操作。
举个例子。看书的时候,我们需要用眼睛将书上的内容向大脑中运输;写字的时候,将大脑中的信息向纸上写出对应的信息。看书相当于读操作,写字相当于写操作。大脑就相当于CPU。
对重定向的理解:
以输出为例。将原本应该输出在该载体的数据,输出在别的载体上。比如本来要输出在显示屏上,最后却输出在了文件里,就叫做输出重定向。
输入重定向反之。
总而言之,改变了默认输入或者输出的对象,就叫做重定向。
基于此,引出相关的重定向操作符。
输出:
>输出重定向。从文件的开头开始,覆盖式的输出。覆盖式的输出,意思就是原本存在文件中的内容,会被接下来的操作覆盖。
>> 追加重定向。从文件的结尾开始,进行追加式的输出。此时就不会覆盖原本的内容了。只是在原本的内容的基础上,进行输出。
举个例子A>B就是将A文件的内容,覆盖式的写入到B文件中。 A>>B的话就是将A文件的内容,追加式地输出到B中。
总而言之,上述两个输出重定向操作符,本质都是写入。只不过方式不同。
输入:
<输入重定向。比如这个操作就可以将原本应该从键盘上读取的内容改成从文件中读取。
和日常生活中管道的作用类似,在linux中的|也起着同样的作用——传输数据。比如A|B的意思就是将A中输出的结果传输到B中。A相当于管道的入口,B相当于管道的出口。
它连接了多条命令,可以批量化流水化的处理数据。
需要注意的是,管道文件是一个内存级别的文件,他并不存在于磁盘上。
显示器,键盘,文件是进行相关读写操作的载体。
显示器:读方法为空,只具备写方法
键盘:与显示器反之
普通文件:兼具两种方法
它们功能差不多,但是读写方法不一样
但是linux下是怎么做到一切皆文件的呢?
Linux是用c语言和汇编语言写的。虽然底层差异化明显,但是经过软件的封装,可以消除差异化。 键盘、显示器、普通文件都可以看成是结构体的文件。它们包含读写的相关的函数指针,经过封装之后,从顶往下看待的话,一切皆文件。
为什么要这样设计呢
视角问题。
可以用统一的方式来处理不同的事务。简化上层对应的模型。
相对应的输入输出重定向也是如此。虽然读写的载体不同,但是都要进行功能相似的操作。也是一切皆文件的一个应用。
先介绍几个工具性质的指令:tree指令,man指令,nano指令。
tree命令。用于用于以树状图列出目录的内容。执行tree指令,它会列出指定目录下的所有文件,包括子目录里的文件。
如果linux中没有安装这个命令的话,可以用yum install -y tree来安装。
一般这个tree指令我们可以在后续的操作中来检查自己的操作是否正确了。
man指令用于查询相关命令的用法。
如何配置相关环境?yum install -y man-pages
查询一下ls的用法
查询一下man的用法
nano指令相当于在linux中打开一个记事本,可以进行短文本的操作。一般linux下默认安装了nano。
介绍几个基于文件和目录操作相关的指令
创建
是什么?mkdir用于创建目录。mkdir [OPTION]... DIRECTORY...
怎么用?可以创建一个目录,也可以递归创建一串目录。用递归的方式创建出来的一串目录是具有层级关系的。
例子:
是什么?
在当前目录下创建普通文件的命令。也可以用来更新文件的最近修改时间。
怎么用?
创建文件:touch如果没有指定路径的话,那么默认就是在当前的工作目录中创建一个空文件。当然也可以为他指定对应的路径,表示的就是在特定的路径下创建文件。如果想要创建多个文件的话,那么后面跟上对应数量的文件名就可以了。
更改最近修改时间
touch -a [对应的文件名]
关于access modify change三个时间
access time 表示对文件最后一次访问的时间
modify time 表示对文件最后一次修改的时间
change time 表示对文件权限最后一次修改的时间
查询
是什么?
ls指令是用来显示目录或者当前目录下的文件的。
怎么用?
ls[选项]…[文件]…
文件可以指定一个或者多个。如果不指定相应的文件名。那么就默认是当前目录下的所有文件。
其实ls相关选项是特别多的。这里揪出几个我认为比较重要的选项。
-a(其实就是取自all)
用来显示包含隐藏文件的所有文件。可以用来显示隐藏的一些配置文件
-l 显示文件名字及其相关属性。
-i(inode) 显示文件的iNode编号。和我们的学号一样,在linux下也有唯一标识文件的编号
是什么?用来显示当前路径
怎么用?一般和cd指令(change direct 更改目录指令)配合使用
我先用来显示一下当前的路径
移动
是什么?切换路径的命令。cd[dirname]
怎么用?
cd~用于返回当前用户的家目录(工作目录)
cd-用于跳转到上一次操作所处的路径
cd ..返回当前目录的上一级目录。如果和/配合使用的话,可以达到多级跳转的效果:cd ../..(跳转到上一级目录的上一级目录)
cd 也可以加入对应的绝对路径,那么就跳转到对应的路径下
是什么?用于删除目录或者文件
怎么用?删除某一文件的话,rm 后面跟上相应的文件名 如果是删除目录的话,rm-r 但是会注意询问是否进入目录与删除。所以如果想强制删除的话,可以用rm -rf dl[目录名] 该条命令的方式就是以递归的方式强制删除目录,不用询问了。rm -rf dl / 就删除了根目录下的所有文件
需要注意的是,如果删除了文件或者目录,一般情况下很难找回,所以不到万不得已一般不用这个命令。
是什么?用于拷贝文件或者目录的指令。src文件可以被保存下来
怎么用?cp src dest[路径:相对路径或者绝对路径] 如果是对于目录的拷贝的话,后面需要-rf
是什么?剪切文件或者重命名文件
怎么用?剪切文件的时候和cp类似,但是如果src是一个目录的话,不需要添加 -rf了.并且不会保存src文件。
如果是重命名的话,必须针对同等路径下的文件。比如把hello.c 改成hello.cpp
mv hello.c hello.cpp
打印
是什么?自顶向下打印对应的内容。默认从键盘读取相对应的内容。
怎么用?
cat后面跟上对应的文件名 -n的话可以同时打印出对应的行号。
它也可以通过重定向操作符进行操作。比如默认是从键盘中读取数据,但是我可以从对应的文件中读取数据。也可以直接跟文件名,也是从文件中的内容打印在屏幕上的意思
也可以用这个命令进行文件的备份。
cat hello.c>fil1 或者cat
虽然vim也可以用于文件的查询。但是cat更适合新手的操作。
是什么?类比于cat指令。tac指令实现了自底向上打印文件内容的功能
是什么?将后续的字符串输入到显示器中。
怎么用?后面直接跟上对应的内容。但是他一般和重定向操作符一起使用。比如原先我是将内容输出到显示屏上,但是现在我可以把他输入到对应的文件中。
查阅对应的文件
是什么?在打印完一个屏幕的内容之后,停止打印。之后如果你需要继续往下读取相应的内容的话,通过enter一行一行地往后显示。
怎么用?比如,我先创建一个一万行命令的文本。之后来演示more的操作。
当然他也可以实现只输出特定行数的功能。比如我只想输出前10行,那么需要带上-10
虽然more实现了阅读长文本的逐行阅读,但是他只能从上往下翻阅,不能从下往上翻阅。因此基于这个缺点,提出了less指令。
是什么?与more类似的阅读文本的指令。
怎么用?用法和more类似,就不演示了。但是可以通过键盘的上下键来实现文本的上下翻阅。
截取文件对应行
如果命令很长,但是我只想要开头的若干行,怎么办?
此时就引入了tail指令。
是什么?截取文件开头若干行的指令。
怎么用?tail默认的是截取文件开头前10行的命令,如果想要截取对应行,可以参照more指令中指定若干行的操作。
如果我只想要尾部的若干行怎么办?此时用tail指令就可以了。
那我们如何实现对文件中间部分的若干行进行存取呢?
思路1:如果我要取出990行到1000行的命令,那么我可以先将前1000行的命令提取出来,写入到一个临时文件中,之后再取出文件的后10行即可。
但是这种方法创建了一个临时文件,不太推荐。
思路2:通过管道批量化流水化地对数据进行处理。head -1001 file.txt | tail -10
这个命令的意思是将file文件中的前1001行(从第0行开始)的输出结果通过管道运输,取出该结果的最后十行。
统计文本行
是什么?统计文本行个数的指令。
怎么用》后面跟上需要统计的文件即可。
时间对应操作
如何查看时间?
可以使用date指令查看系统的时间。我们可以对输出的结果进行相应的格式化,以便于简单地读取。
关于时间戳
我们发现如果发出 date +%s的指令的话,会显示一长串的数字。这是什么意思呢?
其实这显示的数字是时间戳。
时间戳是从1970.1.1. 12:00到目前时间的秒数。该数据是单向递增并且具有唯一性的。因此后续相关操作会使用到时间戳。我在之前的博客中也阐述过,通过时间戳生成一个随机数的例子。这里不加赘述。
那么时间戳如何转化成格式化的时间呢?
date -d @跟上对应的时间戳
我们发现,如果用这个方法查看时间戳为0的时间点,并不是12:00这是为什么呢?
其实这是因为,在我们的电脑上,是通过北京时间进行转化的。8:00显示的是我国的北京时间。因为北京处于国际时区划分中的东八区,同格林威治时间(世界时)整整相差8小时(即北京时间=世界时+8小时)
是什么?显示linux下的日历的一个指令。
怎么用?默认当前的月份日历。
查找
是什么?搜索对应的文件。比如可以根据名字来搜索。
怎么用?find 指定路径 查找标准 对应文件 ~的意思就是对应的根目录 由于当前处于/root中,所以直接根据名字不指定路径就显示了.
是什么?将文本内容按行进行查找输出的指令。是文本行过滤工具
怎么用?
这样就将包含有888关键字的在file.txt中的内容找到了
关于选项:
-n 可以显示行号
-v 反选。选出不包含这些关键字的行
-i 忽略大小写条件进行筛选。
是什么?在系统中查找特定的指令的路径。在windows运行一个程序可以通过快捷方式找到之后运行。那么which也具有类似的功能。
怎么用?which后面跟上要查询的对应的指令,就会显示相关的路径了。
由which指令引出的alias指令。在查找的时候,我们发现有一串指令alias,这串指令是有什么用的呢?
其实这一串令就是重命名,取别名的意思。我既可以直接用ls来查询当前目录下的文件,也可以用ls --color=auto
可以这样使用alias指令:alias A=‘ls’那么ls的别名就是A,输入A也就具有了ls的功能。
但是alias指令只在本次登陆中有用。如果要使他一直有效,就需要将别名的命令放在登录的脚本中。
其实和which指令差不多,只不过他除了在系统中查找指令之外,还可以查找包含对应命令的所有文档。
文件的压缩与打包
便于传输,归档,不丢失,减少资源的消耗情况。所以就有了文件的压缩与打包的概念。
打包:将对应的文件整理到一起
压缩:采用某种压缩算法,压缩存储空间。
由于压缩的方式很多,所以解压的方式也有很多。这里以zip与unzip,tar命令进行说明。
怎么用?zip 选项 压缩后的文件名xxx.zip 待压缩的文件或文件夹
-r
递归处理,将指定目录下的所有文件和子目录一并处理;当待压缩文件中存在目录时非常有用-z
替压缩文件加上注释-v
显示指令执行过程或显示版本信息;推荐使用,万一系统卡死或者别的问题,方便判断情况-q
不显示指令执行过程
这条操作的意思就是将name目录下的所有文件压缩到file所处的路径下。
解压
怎么用?unzip 选项 xxx.zip -d 目标目录
环境配置:如果没有对应的zip指令的话,需要进行安装。安装指令:yum install -y unzip zip
-n
解压缩时不要覆盖原有的文件;-o
不必先询问用户,解压时覆盖原有的文件;-v
显示指令执行过程;-q
不显示指令执行过程;
如果要指定路径的话,目标目录这一栏选项可以替代成你想要存放的路径
关于打包和压缩的另一个指令
怎么用 ?tar 选项 压缩的文件的名称.tgz 原文件
-czvf一般用于压缩文件
-xzvf一般用于解压文件 Tar -xzvf project -C 路径名 用于解压到特定的路径下
f文件的名称
c 创建
z压缩文件
v显示过程
其他指令
是什么?用于查看linux下的计算机的体系结构。
怎么用?-a显示出计算机的体系结构。-r显示出linux对应的内核版本
关于计算机的体系结构:
对于英特尔
X8086
X86(x86_32)32位
X86_64(x64) 64位
系统名:
Linux
节点名称:
VM-4-9-centos
操作系统的发行版号:
3.10.0-1160.11.1.el7.x86_64
命名规则:
主版本号:3
次版本号:10【奇数为开发版本,偶数为稳定版本】
修订版本号:0【修改的次数】
此次版本的第N次修改:1160
el7:redhat enterprise linux 7
x86_64:编译框架(64位)
内核版本:
#1 SMP Fri Dec 18 16:34:56 UTC 2020
硬件平台:
x86_64
机器硬件名:
x86_64
系统处理器的体系结构:
x86_64
操作系统:
GNU/Linux
是什么?linux的计算机
怎么用?用于进制计算,会保留精度。
history指令
是什么怎么用?输入histort可以显示自己曾经在linux上进行操作的指令
目录
一 linux是什么
二 前置概念
①文件和目录
②指令
③通配符
④关于读操作和写操作
⑤ 重定向操作符
⑥管道操作符|
⑦linux下对于一切皆文件的理解
三 基本指令
tree指令
man指令
nano指令
mkdir指令(make direction)
touch指令
ls指令
pwd指令
cd指令
rm指令(remove)
cp指令(copy)
mv指令(move)
cat指令
tac指令
echo指令
more指令
less指令
head指令
wc指令
date指令
cal指令
find指令
grep指令
which指令
whereis指令
zip与unzip指令
tar指令
uname指令
bc指令
四 相关热键的学习
ctrl+c 终止当前程序进程
ctrl+d 快速退出
ctrl+r 历史搜索
重启关机
云服务器是不需要关机的。但是如果你进行关机的话
关机halt shutdown指令
重启指令 reboot