在杂乱中开始Linux的学习
01
为什么需要ip地址
上一篇文章我们用ssh连接到了Linux系统,用到了ip地址,为什么要用ip地址呢?
互联网上的计算机,都会有一个唯一的32位地址,ip地址。我们访问服务器,就必须通过这个IP地址。这就像我们社会上,每个大楼都有一个确定的地址一样,陌生人找这个大楼,就通过这个唯一的地址来找到它。
同样,局域网里也有预留的IP地址 192/10/172开头,局域网的ip地址也是唯一的。
对于虚拟机的NAT模式,电脑宿主机的ip在局域网是唯一的,选择了nat模式创建虚拟机,虚拟机就是一个新的局域网(私有网络)。【如果对于VMware的设置有问题,或者你装的虚拟机无法上网,或者无法连接到虚拟机,请公众号留言寻求我们的技术支持】
在linux上的软件服务有很多,但是linux系统只有一个或两个ip地址,那怎么找到对应的服务呢。其实,服务就像大楼里的一个一个的房间,每个房间提供不同的服务,我们找到大楼以后,想找对应的房间是通过房间号来找的,对于linux上的服务也一样,每个服务有自己的编号,在IT领域我们叫做端口号(等同于大厦里的房间号)。
上一篇文章我们用ssh连接到了Linux系统,用到了ip地址,但是没有写明端口号,这是为什么呢?因为ssh默认的端口号是22,他会自动去找服务端(Linux系统)的22端口。只有在服务端不使用默认端口的情况我们才会去明确指定端口号。【对于常见服务的端口号要牢记,面试中经常用到,工作中也经常用到,在后续的学习中请注意总结】关于ssh的相关详细介绍我们会在《中小型web集群架构》部分介绍。
在连接linux的时候,有的小伙伴会连不上,我们今天来看看怎么解决?
远程连接服务故障排查:
1. 两个主机之间是否畅通,看物理网络是否通畅(网线网卡,ip地址):ping 10.0.0.136
2. 如果ip地址可以ping通,然后再查看服务是否正常:
telnet 10.0.0.136 22
如果上面的不正常,可以尝试下面的两种方法,看看问题能不能排除:
a.服务器端防火墙阻挡
[root@localhost ~]# systemctl stop firewalld
b.端口没有开放,服务器端对应的服务没有启动(netstat)
[root@localhost ~]# systemctl start sshd
下面我们来总结一下ssh连接故障排查的思路和步骤:
02
SSH连接故障排查
第一步:物理链路是否有问题,比喻为“道路是否修通”(客户端执行)
方法1:ping 10.0.0.136
排查客户端到服务端线路问题,ping是常用的网络连通性检查工具(路是否通)
方法2:tracert -d 10.0.0.136
路由跟踪命令,也可以检查路是否畅通,-d是不进行反向解析
第二步:ssh服务是否有问题,比喻为“道路是否开通”(客户端执行)
方法1:telnet 10.0.0.136 22
判断ssh服务器默认的22端口是否打开了。(客户端执行)一看端口是否打开,二看端口是否改变了,三看防火墙、selinux问题
方法2:nmap 10.0.0.136 -p 22
也能达到和telnet相同的效果,但nmap仅在Linux中使用
第三步:是否被防火墙阻挡,服务是否正常。即是不是实行了交通管制。(服务端查看)
一方面:
systemctl stop firewalld
Linux 防火墙firewalld,可能好心办了坏事,阻挡了远程连接,学习环境建议关闭防火墙,生产环境按照需求开启。
另一方面要检查服务是否启动:
systemctl start sshd
03
Linux的命令格式
command [-options] parameter1 parameter2
命令 选项 参数1 参数2
详细说明如下:
command:命令的名称,为可执行的命令或可执行文件(如shell脚本)
中括号 []:这里面是可选项,通畅可选项之前会有“-”号,如-h,有时也会用选项的完整名称,此时用'--'号,例如--help· parameter1 parameter2是依附在选项后面的参数,或是command的参数。
命令,选项,参数之间用空格分隔,不论是几个空格,系统全部视为一个空格。
命令太长的时候可以用\来换行,【绝对不能用回车来换行,命令行下,回车代表执行】
注意:Linux是大小写敏感的系统,例如:LS和ls绝对是不一样的。
关于大小写:
# 大小写敏感
[root@studyclub ~]# LS job.sh
-bash: LS: command not found
[root@studyclub ~]# LS job.sh
-bash: LS: command not found
关于空格:
# 多少个空格无所谓,只要有空格就行
[root@studyclub ~]# ls -l job.sh
-rwxrwxrwx 1 root root 68 Mar 17 11:28 job.sh
[root@studyclub ~]# ls -l job.sh
-rwxrwxrwx 1 root root 68 Mar 17 11:28 job.sh
04
命令初体验
查看日期与时间命令:date
date命令,用来显示或设置系统的日期与时间,在显示方面,使用者可以设定需要显示的格式,格式设定为一个加号后面接数个标记 。若是不以加号作为开头,则表示要设定时间,而时间格式MMDDhhmm[[CC]YY][.ss],其中 MM 为月份,DD 为日,hh 为小时,mm 为分钟,CC 为年份前两位数字,YY 为年份后两位数字,ss 为秒数。
语法格式:
date [选项] [+格式化字符串]
常用的选项:
-d 字符串 :显示字符串所指的日期与时间。字符串前后必须加上双引号;
-s 字符串 :根据字符串来设置日期与时间。字符串前后必须加上双引号;
-help:在线帮助;
-version:显示版本信息。
格式化字符串:
%H 小时,24小时制(00~23)
%M 分钟(00~59)
%s 从1970年1月1日00:00:00到目前经历的秒数
%S 显示秒(00~59)
%T 显示时间,24小时制(hh:mm:ss)
%X 显示时间的格式(%H:%M:%S)
%Z 显示时区,日期域(CST)
%a 星期的简称(Sun~Sat)
%A 星期的全称(Sunday~Saturday)
%h,%b 月的简称(Jan~Dec)
%B 月的全称(January~December)
%c 日期和时间(Tue Nov 20 14:12:58 2012)
%d 今天的日期(日)
%x,%D 日期(mm/dd/yy)
%j 一年的第几天(001~366)
%m 月份(01~12)
%w 一个星期的第几天(0代表星期天)
%W 一年的第几个星期(00~53,星期一为第一天)
%y 年的最后两个数字(1999则是99)
%Y 年的全称
%F 查看完整日期
实例讲解:
设置系统时间:
[root@studyclub ~]# date -s "2021/4/21 13:45:43"
查看系统时间:
[root@studyclub ~]# date
Wed Apr 21 14:04:36 CST 2021
查看当前日期:
[root@studyclub ~]# date +%F # full date
2021-04-21
查看今年是哪一年:
[root@studyclub ~]# date +%Y # year
2021
查看今年是哪一年(只显示年份的后两位):
[root@studyclub ~]# date +%y # year
21
查看现在是几月份:
[root@studyclub ~]# date +%m # month
04
查看今天几号
[root@studyclub ~]# date +%d # day
21
查看现在是几时
[root@studyclub ~]# date +%H # hour
14
查看现在是几分
[root@studyclub ~]# date +%M # minute
08
查看现在是多少秒
[root@studyclub ~]# date +%S # second
14
# 特别提醒,如果这个地方是小写的%s,则显示的是从1970年1月1日到现在的秒数
组合格式化和单格式化参数对比:
[root@studyclub ~]# date +%Y-%m-%d
2021-04-21
[root@studyclub ~]# date +%F
2021-04-21
# 可见,上面两个命令参数不同,但效果一样
组合格式化显示完整时间:
[root@studyclub ~]# date +%H:%M:%S
14:10:10
以当前日期为参考,显示前面的几天、后面的几天的日期,或前后几个月、几年的日期。
[root@studyclub ~]# date
Wed Apr 21 14:08:17 CST 2021
[root@studyclub ~]# date +%F -d "-1day" #显示当前日期前一天的日期
2021-04-20
[root@studyclub ~]# date +%F -d "+1day" #显示当前日期后一天的日期
2021-04-22
[root@studyclub ~]# date +%F -d "+1month" #显示当前日期一个月后的日期
2021-05-21
[root@studyclub ~]# date +%F -d "+1year" #显示当前日期一年后的日期
2022-04-21
# 总结
减号“-” 代表从当前日期向过往的日期计算
加号“+” 代表从当前日期向以后的(未来的)日期计算
查看日历的命令:cal
cal(名称源于英文单词Calendar)。用来显示当前日历或通过参数指定日历。cal后面如果只有一个参数,则表示年份,如果有两个参数,则表示月份和年份。
语法格式:
cal [参数] [月份] [年份]
常用参数:
-1 仅查看当前月的日历
-3 查看近三个月的日历(上个月,当前月,下个月)
-s Sunday,星期天作为每周的第一天
-m Monday,星期一作为每周的第一天
-y year,显示当年的日历
-V version,查看cal的版本
实例讲解:
查看当年日历(下面两个命令效果等同):
[root@studyclub ~]# cal -y
[root@studyclub ~]# cal -y
2021
January February March
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 1 2 3 4 5 6 1 2 3 4 5 6
3 4 5 6 7 8 9 7 8 9 10 11 12 13 7 8 9 10 11 12 13
10 11 12 13 14 15 16 14 15 16 17 18 19 20 14 15 16 17 18 19 20
17 18 19 20 21 22 23 21 22 23 24 25 26 27 21 22 23 24 25 26 27
24 25 26 27 28 29 30 28 28 29 30 31
31
April May June
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 1 1 2 3 4 5
4 5 6 7 8 9 10 2 3 4 5 6 7 8 6 7 8 9 10 11 12
11 12 13 14 15 16 17 9 10 11 12 13 14 15 13 14 15 16 17 18 19
18 19 20 21 22 23 24 16 17 18 19 20 21 22 20 21 22 23 24 25 26
25 26 27 28 29 30 23 24 25 26 27 28 29 27 28 29 30
30 31
July August September
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 1 2 3 4 5 6 7 1 2 3 4
4 5 6 7 8 9 10 8 9 10 11 12 13 14 5 6 7 8 9 10 11
11 12 13 14 15 16 17 15 16 17 18 19 20 21 12 13 14 15 16 17 18
18 19 20 21 22 23 24 22 23 24 25 26 27 28 19 20 21 22 23 24 25
25 26 27 28 29 30 31 29 30 31 26 27 28 29 30
October November December
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 1 2 3 4 5 6 1 2 3 4
3 4 5 6 7 8 9 7 8 9 10 11 12 13 5 6 7 8 9 10 11
10 11 12 13 14 15 16 14 15 16 17 18 19 20 12 13 14 15 16 17 18
17 18 19 20 21 22 23 21 22 23 24 25 26 27 19 20 21 22 23 24 25
24 25 26 27 28 29 30 28 29 30 26 27 28 29 30 31
31
查看2022年10月份的日历
[root@studyclub ~]# cal 10 2022
October 2022
Su Mo Tu We Th Fr Sa
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
查看近三个月的日历
[root@studyclub ~]# cal -3
March 2021 April 2021 May 2021
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 1 2 3 1
7 8 9 10 11 12 13 4 5 6 7 8 9 10 2 3 4 5 6 7 8
14 15 16 17 18 19 20 11 12 13 14 15 16 17 9 10 11 12 13 14 15
21 22 23 24 25 26 27 18 19 20 21 22 23 24 16 17 18 19 20 21 22
28 29 30 31 25 26 27 28 29 30 23 24 25 26 27 28 29
30 31
查看当月日历(两个命令都可以实现):
[root@studyclub ~]# cal
[root@studyclub ~]# cal -
April 2021
Su Mo Tu We Th Fr Sa
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
查看内核版本号:uname
uname,用来获取服务器和操作系统的相关信息
常用参数:
-r release,查看linux内核版本
-m machine,查看cpu类型
-a (最常用) 查看所有信息,包括:内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称
示例演示:
[root@studyclub ~]# uname -a
Linux studyclub 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[root@studyclub ~]# uname -r
3.10.0-957.el7.x86_64
[root@studyclub ~]# uname -m
x86_64
课后练习:
总结回顾ssh的故障排查过程
练习date(重点掌握)、cal、uname的用法
扩展学习:了解一下IP地址的分类
更早内容回顾:请总结安装VMware的时候,你的vmware软件的网络是怎么设置的?并总结成文。
《Linux基础及进阶》:
001 - Linux初体验
002 - 在杂乱中开始Linux的学习
看完本文有收获?请分享给更多人
推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!
微信号|bjdream-1
Cloud研习社 ·