LINUX入门篇【2】

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: LINUX入门篇【2】

前言:

本篇我们讲进一步探究LINUX的一些指令以及LINUX的更深层次的系统知识和对LINUX操作系统的进一步理解。

1.介绍一系列小指令及一些重要的操作系统知识补充:

A.时间系列:

1.date:

date是用来查看当前的操作时间的,具体用法为:

1.date +%Y -%m-%d-%H-%M-%S

其中的Y表示年 m表示月份 d表示天 H表示小时 M表示分钟 S表示秒

注意事项:
1.-的位置用其他符号也可以,主要是起到分隔的作用
2.注意m和M分别表示 月份和分钟,别搞错了,同时注意大写S表示秒,别写成小写s.
3.注意加号不可省略,要写加号+

2.date +%s :会打印出时间戳(时间错的概念我们在创建随机数的时候提到过,这里不多赘述了,为1970到现在的时间总和)

3.date +一系列时间表示(如第一条使用)-d @时间戳码:可以将对应的时间戳码转换为我们想要知道的时间(各种时间都可以转化)

2.cal指令:

cal指令是用来打开日历的,具体使用方法如下:

1.cal :打开本月日历并显示当前日期
2.cal 年份:显示对应年份的全部日历
3.cal -1:显示本月份的全部日期
4.cal -3:显示本月份,本月份之前一个月,本月份之后一个月,三个月的全部日期

3.find指令:

用法:find 路径 -name 对应的文件名/指令:可以返回所能查到的指定路径下的对应的文件或指令的路径信息

同时让我们汇总一下3种用来查找的指令:

1.which 直接接文件或指令
2.find 路径 -name 对应的文件名/指令
3.where is 文件/指令:用来查找系统中的指令/文件/压缩包等的路径

那在LINUX中,我们掌握时间的指令其目的是什么呢?这就涉及到一个很关键的东西,日志。

B.LINUX中日志的概念:

在软件开发中,日志是必不可少的一类工具,它方便帮助程序员记录对应的时间点,方便进行问题排查,日志就如同计算机自己的日记,上面可以记录程序开发的整个时间进程,当程序需要修改或者出现问题时,只需要调用日志就可以对问题进行进一步的修改。

既然说起日志,时间便是日志最为关键的记录信息

常见的日志时间记录方式有两种:

1.时间戳形式
2.标准时间形式
(由于地理上的区域不同,半区之间的时间是有差异的,故我们的标准时间可能以北京时间为基准而不是以欧洲那边算起,故倘若我们的时间有偏差,不要轻易说事件记录错了,有可能是我们服务器的标准时间的基准不同)

日志等级:

日志也是分为等级的,例如DEBUG,Normal,Warning,Fatal,error…这些日志等级繁多复杂,如果排列在屏幕上一定会让我们眼花缭乱,没法锁定我们所需要的日志,故接下来我们引入行文本过滤指令grep

C.文本过滤操作系列:

1.grep指令:

grep是行文本过滤指令,它可以按照我们认为指定的关键字,在指定的文件中以行为单位,将包含关键字的文本行保留下来,而不包含的行将被剔除。

用法:
1.grep: ’ (对应字符)’ 文件名:从文件中查找包含这个字符的文本行,grep默认是一种贪心算法,它会把在一行中匹配到的全部的对应字符都找到。
2.grep -i ’ (对应字符)’ 文件名:对指定的字符忽略大小写全部识别保留
3.-n :打印行号,这一点和cat一样

4.-v(reverse):显示不带指定关键字的文本行

grep后期很重要,一般配合ps(查看进程),可以进行筛选,同时也可以用来筛选日志的等级,这样我们就能非常方便的锁定我们要查找的日志的位置。

2.sort指令:

用法:

sort 文件名

**sort的意义:

将文本行的内容以ASCII值的顺序对文本行进行排序并显示出来,它的好处在于可以把相同规则的文本行按照规则排序在一起,方便后序我们的uniq进行文本行压缩,因为默认的文本行压缩是不能跨行进行的,只能对相邻的文本行进行压缩。

3.uniq指令:

注意!!!!:uniq默认只可以合并相邻的行的文本,对于相同的但跨行的文本uniq是没法进行压缩的,故我们说uniq指令的压缩是不彻底的

用法:1.uniq 文件名:它可以把相同文本行合并为一行打印出来(注意,在uniq使用的过程中,空格行也被识别为一种文本行,并参与指令的进行)
2.uniq -u:只打印文本中出现过一次的文本行
3.uniq -d:对于文本行存在多行重复的,只把文本行重复的合并为一行,并只打印有重复的文本行
4.uniq -c:可显示出来重复的文本行和重复的次数
5.(额外附加)wc -l 文件名:对文本行数进行统计,且包括空格文本行,空格文本行也算一种

我们常使用的sort和uniq组合操作:通过命令行管道链接:

sort data.txt | uniq

这样,就可以把相同的文本行放在一次然后进行压缩,就可以彻底压缩一个文件让其没有重复的文本行

D.文件打包压缩系列:

首先清楚什么是打包和压缩这两个概念:

打包是将所有数据封装起来,将多个文件转为一个文件放到一个目录底下来,而压缩是用算法进行的,将文件进一步缩小化,不损失文件内容信息的同时尽可能缩小它的空间,故打包和压缩是两个概念。

我们使用打包压缩一般为了:

1.保护文件,防止文件被丢失

2.更节省空间,网络传输时更节省空间

常见的压缩方式:

1.windows下利用好压快压等

2.LINUX下我们利用zip,unzip等压缩和解包的指令来进行

1.zip指令:

倘若你的zip指令无法使用,那可能是没下载,故我们只需要输入

yum install -y zip/unzip即可下载,unzip也是同样的下载方式

用法:

zip -r 新的.zip文件 要打包的文件:这样就可以将全部目录及其里面的内容以递归形式全部打包

打包好后,压缩包为这样:

红色的写着.zip后缀的即为我们的压缩包,取名为hbw66.zip,那如何解包呢?这就需要我们使用unzip指令了。

2.unzip指令:

unzip 解压包文件 -d 新路径:解包文件并将其放到指定的新路径下(倘若我们没给新路径,则默认将其放到当前的目录下解包展开)

3.tar指令:

在LINUX包括Windows系统中存在各种各样的压缩包,不仅仅只有zip一种,每一种对应类型的压缩包都有其相应的压缩和解包方式,我们下面再说一种.tgz后缀的压缩包压缩解压形式。

基本后缀:

tar [-cxtzjvf] 文件与目录 … 参数:
-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-t :查看 tarfile 里面的文件!
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
-C : 解压到指定目录

我们这里目前不需要了解这么多,只需要我们记住:

压缩包指令:
tar -czf/cvzf XXX.tgz src

我们压缩完是这样的:

红色的以.tgz为后缀的就是我们的tgz压缩包文件

解压包指令:
tar -xzf/xvzf .tgz -C(注意为大写)+新路径

这个加不加V无所谓,其目的就是是否贼这个过程中显示进程的。

我们不仅仅以后要学会zip tgz的压缩包形式,以后还有许多压缩包形式,故我们只需要参照上面两种方式去现学即可,大致的方式都是相同的!!!

4.Windows,LINUX系统文件互传

Windows和LINUX是可以实现文件互传的,不过我们需要安装一个Lrzsz,在LINUX上安装

指令为:yum install -y lrzsz

windows传LINUX:拖拽到LINUX界面即可
LINUX传windows:sz +文件名即可,然后指定一下windows要存储的文件的地址即可
LINUX系统下的互传为:

scp 文件名 账户名@机器公码:路径即可

!!!注意,不论是LINUX还是Windows,都建议文件打包成压缩包的形式进行远程传输,一方面为了安全性,一方面加快网络传输速度。!!!

E.LINUX常用热键的汇总:

1.history:用来查看从开始使用机器为止输入过的全部指令,算是一种指令的日志
2.上翻键:可以直接使用上一次使用过的指令
3.ctrl^c:中止进程和当前指令,可以让程序停下来
4.ctrl^d:自动关闭功能,一直ctrl d可以关闭当前用户甚至Xshell或者虚拟机
5.命令部分字母+两下Tab:命令行自动补齐,倘若对应的指令只有一个,则直接帮你执行,倘若数量庞大,则会直接打印出含有这些字母的全部指令的名称

6.bc指令:很方便的进行浮点运算

F.关机命令:

1.shutdown -h:将系统的服务停掉后,立即关机
2.shutdown -r:在将系统的服务停掉后就重新启动
3.shutdown -t:秒数,限制几秒后关机
4.rebbot:系统重启

!!!!G.操作系统体系结构:

何为体系结构,我这里有两种说法:
1.从狭义的角度来说:就是CPU的架构 例如X86,X64这些CPU处理器
2.从广义的角度来说:就是整个计算机系统加硬件的宏观上的结构

下面的几条指令用来查找关于这些的信息:(了解即可)

uname -a:查体系结构(即系统内核的详细信息)
uname -r:查软件内核:技术发行版,商业发行版,软件构架
cat /etc/redhat-release:查系统信息
/proc/cpuinfo:查看CPU信息
/proc/meminfo:查看内存使用情况

2.!!!XShell命令及其运行原理!!!:

使用LINUX的已经有一段时间了,我们对LINUX粗浅的理解是,LINUX使用命令行进行输入,而Windows使用鼠标点击图标或者打字来进行输入或者命令,但究其本质,无论是鼠标也好,抑或是键盘文字输入也好,他们到底在LINUX系统中是一个怎样的存在呢?

我这里拿LINUX为例子,Windows也是同理:

我们的文本输入行,其实本质上仍然一块外壳程序,对于一款操作系统,我们从狭义的角度来叫它单纯为内核,但从广义的角度出发,实际上它是由内核和外壳两部分组成的,这里的外壳就是我们对应的文本输入行或者是我们的鼠标点击。

他们之间的关系大致可以用这张图来表示:

我们输入的指令等操作在最外层,先输入给外壳程序,外壳程序识别后再进入内核中交由内核产生我们想要的结果反馈给我们操作者,但就像某些银行的冗杂的层层手续一样,非要通过外壳程序多麻烦。

1.为啥不能直接我们的指令直接跟内核交互就好呢?

这是由于,操作系统本身的易用程序和安全性的原因,导致它不准用户直接访问操作系统,其实也就是因为操作太繁琐,很难让人立刻上手,故我们想出用一个翻译官来“传话”,这个翻译官就是我们的外壳程序Xshell,有了这个外壳程序,我们就可以更好的和内核交互,内核也可以准确的知晓我们的意思

2.那外壳程序的核心工作是什么呢?

是用户和内核之间,需求指令和执行结果之间的一道桥梁,它将使用者的命令翻译给内核处理,同时内核将处理后的结果再返回给操作者

3.那Xshell是如何实现的呢?

Xshell的本质就是一个执行起来的程序,在我们启动服务器的时候就开始一直存在,所以我们的命令行就一直存在,而我们都知道,程序一旦出错就会导致整个进程的结束,但作为初学者的我们有的时候即使输入了错误的指令,但命令行却一直存在,没有自动结束,这时为什么呢?或许你会说,就类似循环的一次一次迭代呗,但主程序怎么能不断循环呢?故我们的shell不是用循环来处理的,实际上,shell采取了一种极为聪明的方法,我们所理解的shell本质上是一系列主进程的统称,它还有其他名字bash等,他们都是一系列父进程的统称。程序在执行的时候,我们的命令行显示器对应的就是bash这些主程序进行命令行解释,但是当我们输入指令时,shell主程序会把一些具有风险性的指令自动交给它自己创建的子进程去处理,这样即使报错也是子进程中止而不会影响主进程,而主进程主要用来执行一些无风险的指令,保证自身不会中止报错。

当我们想要中止干掉一段进程时,指令为kill -9 +进程数字(这个进程数字是后期我们学到ps就能查到的,这里我们先了解即可),这样对应的主程序就会直接崩掉无法使用了。但注意,每次你进行xshell登录的时候,os操作系统都会自动给你这个当前用户的登录新启动一个shell,bash来当作主程,故哪怕这次被销毁了,下次登陆的时候又会为其新启动一个主程,关闭后主程就会被自动回收。

3.LINUX权限的概念:

1.LINUX的用户

1.LINUX的用户分类:

LINUX的用户分为两类:

1.root超级管理员:root用户具有最高权限,且只有一个

2.非root的其他普通用户:受管控,有权限限制,可以存在多个

2.LINUX用户之间的切换:

1.当以普通用户登录时:
a.想要切换到root用户:su-/su,之后需要输入root用户的密码(注意,最好root的密码要独一无二,保证最高权限不被泄露出去)
b.想要切换普通用户:su,之后需要之后要切换的用户的密码
c.切换到root账户后又想切回普通用户:^d/exit都可以

2.当以root用户登录时:
a.想要切换到普通用户:su 普通用户名,且不需要输入要切换用户的密码就可以切换
b.切换到普通用户后又想切换回root用户:^d/exit都可以

为什么要进行账户切换呢?

有些权限是只能为root用户才有的,而普通用户是没有的,故用户之间的切换可以保证可以完全掌握LINUX的全部功能,但仅限于本机器的管理员,普通用户依旧是受权限限制的

我不想切换为root账户,但我在普通用户下能否以root用户的权限执行一条命令可以么?

虽然权限受到控制,但我们可以使用sudo +相应指令来对我们的指令提升权限使其变为root权限的指令,输入后我们还需要输入当前我们正在使用的用户的密码即可执行,那既然有这种方式,root的权限就没有意义了,大家都是普通用户就好了啊?如果你尝试sudo ls或者其他指令,你会发现大部分的指令都会报错,且报错信息为:

是的,它告诉我们没有权限去以root权限使用命令,所以,即使有sudo,root依旧是权限最高的。

但有一种情况下,我们可以让我们当前用户的sudo可以对任何指令进行权限提升从而让其具有和root几乎差不多的权限
在LINUX中有一个/etc/sudoers文件,即用户名列表文件,只要用户名字在这个文件里面配置文件,就可以允许这个用户执行sudo,反之就不允许执行,我们称这个文件为白名单文件,且白名单的用户名添加只能由root账号来执行,别的账号是没有这样的权限的,反之还有一个称为黑名单的文件,在这个文件配置里的用户是几乎没有任何权限的,无法进入服务器操作,所以,root用户一般将信任的用户添加到白名单,将不信任的不添加或者添加到黑名单,这里如何添加名单的方式以后我们再去讲述。

要注意一点是:白名单用户拥有大部分权限包括root的一些权限,但这与root本身是无关的

2.LINUX的权限管理(文件):

首先我们必须要先搞清楚何为权限:

对于人类本身来说,权限在人类社会才被认可和具有的,故权限首先一定是限制人的,主要的限制就是能和不能的权力,而我们的权限一定对应的一个赋予权限的对象,即我对某项事物是否具有某种权限,故我们的这个事物的权限一定对应满足人所需求的一定的属性.

那对于LINUX来说,我们的LINUX首先它的使用群体是我们人本身,故对于我们人来说,操作文件是我们的需求,故我们的权限一定对应着文件的某些属性和权限。

然后让我们再想一个问题,我们对某项事物的权限是因为我们本身还是由于我们自身具有的身份呢?或许这样说很抽象,那我举一个浅显的例子:你能在教室学习是因为你的名字本身,还是因为你的学生身份呢?我想答案显而易见,是因为你学生的身份。

同理,对于文件的权限,并不是因为用户的名字是什么而不同的,而是因为用户本身的用户属性是什么,是root超级用户属性还是普通用户属性从而赋予对应的文件访问的权限,这个首先要搞清楚。

1.文件权限的三种身份:

对于一个文件来说,访问它的身份有三种:

让我们用 ll 指令打开一个文件为例:

(当我们打开一个文件的具体信息时,正如上图所示,它会显示出文件的属性,文件的拥有者和所属组,文件的大小和最近被修改的时间以及文件信息。而今天我们重点关注的就是文件的属性和文件的权限使用)

文件的权限身份一般分为:
1.文件拥有者
2.所属组
3.其他other

注意我说的这三种是一种身份,而不是代表名字,在我们的一个文件信息中,一般会显示文件的拥有者和所属组对应的用户,如上面我的图片,但不会显示other,换句话说,other的权限就是公开权限的意思,即任何机器上的账户都可以,故没必要单独提及。

我们再进一步考虑问题,既然存在文件拥有者和other,那文件所属组的意义是什么呢?没必要再设置一个权限身份了呀

但倘如有某个人要看我们的文件,我们的文件首先是我们单独私有的,所以我们可以指定其他人看,但同时也不希望其他人可以看到,那倘若只有拥有者和other两种权限的话,我们就只能把我们的帐号交给这个人,但这样他就可能完全掌握了我们的私人账号,倘如我们root账户的话又会有权限泄漏的问题,故我们通过所属组,将想要看我文件的人放到一个所属组来,在这个组内的人有看这个文件的权限,而其他的人则没有,这样就完美解决了问题同时也没有泄漏问题,这便是所属组的意义。

!!LINUX的文件操作属性:

依旧是回到我们的文件介绍图片,我们的目光放到最开始的一行字母,-rw-r–r–,这一行字符串代表的便是我们的文件操作属性,也就是我们的文件可以给哪些身份者提供哪些权限,我们先不看第一个横杠,而是关注于后面的9个字符rw-r-r–,结合前面我提过的,**权限的群体是人,,故我们这9个字符平均分成三个一组,其权限代表分别为:拥有者权限,所属组权限,other权限,**然后我又说过,权限对应的一定是人所需要的功能,故我们的文件权限对应着三个功能:即读,写,执行。

1.读为一组三个字符的第一位:有其权限则用r表示,反之则用-表示
2.写为第二位:有其权限则用w表示,反之则用-表示
3执行为第三位:有其权限则用x表示,反之则用-表示

后面的每一组分别代表所属组和其他权限,权限标识规则和上面讲的一样由此,我们便可以从这9个字符中了解这个文件允许哪些人进行哪些操作

现在让我们看看图片上的文件的属性:rw-r–r–,它允许拥有者有读和写的权限,所属组有读的权力,其他用户有读的权力,而其他权限是没有的,这便是这个文件的操作属性,故我们以后可以根据文件的操作属性判断我们能进行哪些操作

文件操作属性的二进制存储法:

对于rwx是否有无,我们也可以用二进制的形式来表示,我们将其分为三组,由则为1,没有则为0,分为三组每组分别统计。

例如:rwxrwxr-x 对应的二进制就是 111 111 101 即775

故我们用八进制文件也可以修改文件 chmod 对应三个身份的权限数字 文件名 即可修改

文件属性的修改:

文件的属性并不是固定的,文件本身的拥有者是可以修改文件的属性从而扩大或者缩小权限的,我们需要用到的指令为chmod指令。
chmod的用法为:chmod ugo+/-rwx +FILE**(注意,ugo和rwx类似加减式子的写法,中间不要有空格)

这里的u g o分别代表着user拥有者 group所属组 other其他 ,-号代表撤销权限,+号代表开放权限 ,r w x分别代表读 写 执行的权限,由此,我们便可以修改我们对应的任何身份的文件属性,但注意,这个修改的权力是只能由文件拥有者去修改的,在所属组和在other都是没权利修改的

不过,当你为root超级管理员用户时,你就可以无视文件权限自由进入任何文件并且全部的功能,不需要在意文件开放了什么权限。

总结:

本次我们总结了LINUX系统的一些关键性知识点:Xshell的运行原理,日志,LINUX文件权限,操作系统的体系结构等重要知识点,同时又介绍了打包压缩,文件压缩,时间,过滤等指令,这让我们进一步理解LINUX操作系统以及目前我们的Windows操作系统的基本内核是什么,但我们仍需继续进步,争取对LINUX的理解进一步加深。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
3月前
|
机器学习/深度学习 安全 网络协议
Linux防火墙iptables命令管理入门
本文介绍了关于Linux防火墙iptables命令管理入门的教程,涵盖了iptables的基本概念、语法格式、常用参数、基础查询操作以及链和规则管理等内容。
242 73
|
1月前
|
Unix Linux Shell
linux入门!
本文档介绍了Linux系统入门的基础知识,包括操作系统概述、CentOS系统的安装与远程连接、文件操作、目录结构、用户和用户组管理、权限管理、Shell基础、输入输出、压缩打包、文件传输、软件安装、文件查找、进程管理、定时任务和服务管理等内容。重点讲解了常见的命令和操作技巧,帮助初学者快速掌握Linux系统的基本使用方法。
78 3
|
2月前
|
机器学习/深度学习 Linux 编译器
Linux入门3——vim的简单使用
Linux入门3——vim的简单使用
64 1
|
2月前
|
Linux Shell Windows
Linux入门1——初识Linux指令
Linux入门1——初识Linux指令
37 0
Linux入门1——初识Linux指令
|
6月前
|
存储 Linux Android开发
Volatility3内存取证工具安装及入门在Linux下的安装教程
Volatility 是一个完全开源的工具,用于从内存 (RAM) 样本中提取数字工件。支持Windows,Linux,MaC,Android等多类型操作系统系统的内存取证。针对竞赛这块(CTF、技能大赛等)基本上都是用在Misc方向的取证题上面,很多没有听说过或者不会用这款工具的同学在打比赛的时候就很难受。以前很多赛项都是使用vol2.6都可以完成,但是由于操作系统更新,部分系统2.6已经不支持了,如:Win10 等镜像,而Volatility3是支持这些新版本操作系统的。
|
2月前
|
存储 数据可视化 Linux
Linux 基础入门
Linux 基础入门
|
2月前
|
Linux Go 数据安全/隐私保护
Linux入门2——初识Linux权限
Linux入门2——初识Linux权限
30 0
|
4月前
|
Java Shell Linux
【Linux入门技巧】新员工必看:用Shell脚本轻松解析应用服务日志
关于如何使用Shell脚本来解析Linux系统中的应用服务日志,提供了脚本实现的详细步骤和技巧,以及一些Shell编程的技能扩展。
73 0
【Linux入门技巧】新员工必看:用Shell脚本轻松解析应用服务日志
|
4月前
|
存储 Ubuntu Linux
Linux基础入门
Linux基础入门
33 1
|
4月前
|
Ubuntu Linux Shell
Linux 终端入门
Linux 终端入门
53 0