一切福田,不離方寸,從心而覓,感無不通。

Linux常用命令2

一、服务器基本信息

1、查看系统主机名称

 

hostname,顾名思义,就是 host name,主机名称的意思,其实就是 @ 符号右边的内容,比如我们连上服务器后,shell 窗口里最左边一般是 [root@xxx ~]#,root 表示当前登录的账号,@ 符号右边就是主机名,再然后是当前所在目录(~ 表示家目录),最后是命令提示符,# 符号是 root 用户的,$ 符号是普通用户的。

2、查看系统内核版本

 

uname,是 unix name 的缩写。

3、查看 RedHat 版本

 

cat,是 concatenate 的缩写。

4、查看 CentOS 版本

 

cat,是 concatenate 的缩写。

5、查看 CPU 信息

 

 

可查看 CPU 架构、核数等信息。

lscpu,是 list cpu 的缩写。

6、列出所有可用块设备

 

lsblk 是 list block 的缩写,默认情况下将以树状结构列出所有可用块设备,可以看到每个块设备的容量大小及对应的挂载点等信息。

7、查看磁盘空间占用

 

df,是 disk free 的缩写,可以看到具体文件系统的容量、可用容量、已用容量占比、挂载点等信息。

8、查看内存占用

 

free 命令显示系统已使用和空闲的内存情况,包括物理内存、交互区(swap)内存和内核缓冲区(buff/cache)内存。从应用程序的角度来说,可用内存 = 系统 free memory + buff + cache,buff/cache 如果很大导致应用被系统杀死,可以手动清理它,如下所示——

 

先运行 3 个 sync 命令进行数据同步,避免数据丢失,再运行清理下面的 buff/cache 命令即可。

9、查看文件/目录空间占用

 

du,是 disk usage 的缩写,它与上面的 df 命令并不相同。-h 选项表示以适合人类阅读的格式展示结果,-d 选项表示最多再往下查找几层子目录,后面跟个 1 就表示查找当前目录以及当前目录子目录这两级目录,最后跟上要查看的目标目录或文件。上面的命令意思就是查查看根目录 / 本身及其一级子目录、文件的空间占用情况。

10、查看时间与时区

 

date 命令可查看服务器当前时间, CST 表示是中国标准时间,如果显示了 UTC(协调世界时) 或 GMT(格林尼治标准时间),则需要修改,也就是要同步网络时间。

目前比较常用的做法是使用 ntpdate 命令来同步时间,ntp 是 Network Time Protocol(网络时间协议)的缩写,这个命令在服务器上需要额外安装一下——

 

同步时间后可能部分服务器过一段时间又会出现偏差,因此最好设置 crontab 来定时同步时间,方法如下——

 

上面的计划任务会在每 20 分钟进行一次时间同步,注意上面的 ntpdate 命令路径是 /usr/****in/ntpdate,真实项目上不一定是这个路径,可以用 which ntpdate 命令查下具体的路径。

 

上述命令用来查看服务器当前时区,如果 Time zone 那一行没显示 Asia/Shanghai (CST,+0800) ,就表示不是中国时区,需要修改。

执行下面的命令设置时区——

 

二、服务器网络

1、查看服务器内网 IP

 

ip a 是 ip address 的缩写,可以查看服务器的内网 IP 地址。服务器默认网卡一般是 eth0,所以 eth0 的 inet 地址就代表内网 IP 地址,一般是 10.x.x.x 或 172.x.x.x 或 192.x.x.x 这 3 类私有地址格式。如果服务器上有 docker 容器,应该还能看到一个叫 docker0 的(虚拟)网卡,其 inet 地址可以作为宿主机的 IP 地址被容器所使用。

2、查看服务器公网出口 IP

 

 

curl,是 command url 的缩写,通过命令行访问 url 的意思。有些服务器的公网出口 IP 可能不固定,所以最好是用这两个命令都查一下,以便比对结果是否一致。另外要注意,服务器的公网出口 IP 和公网入口 IP 并不总是一致的

3、查看服务器防火墙状态

 

firewalld 是 CentOS7 系列使用的防火墙(作为系统服务),取代了 CentOS 6 系列的 iptables 防火墙。上面这个命令执行后如果显示 running,表示防火墙已开启,显示 dead,则表示防火墙已关闭。

4、firewalld 防火墙添加规则/重载规则/查看开放的端口

 

firewalld 防火墙添加规则,允许到本机 13120 端口的 TCP 连接,永久生效。想加其他端口修改 13120 即可。不允许某个端口的话,把 add 换成 remove 即可。

 

firewalld 防火墙重载规则,—reload 就是重载的意思。重载之后,添加、删除等操作,才能真正生效

 

查看 firewalld 防火墙已开放的所有端口。

5、DNS 与 hosts

 

/etc/resolv.conf 是服务器的 DNS 配置文件,我们只需要关注它里面的 nameserver 关键字。nameserver 后面要跟上一个 IP 地址,两者之间以一个空格分隔开来。IP 一般要配成公网 IP 地址,比如 114.114.114.114 或 223.5.5.5(阿里的)或 119.29.29.29(腾讯的)。如果在服务器上 ping 这些 IP 能通,但 curl 某某域名却显示「未知的名称或服务」,那就可以在这份配置文件的最下面追加一行,比如 nameserver 114.114.114.114 。

/etc/hosts 是服务器的 hosts 配置文件,服务器在访问某个域名时,会先到这个文件里查找有没有配置该域名及对应的 IP,如果有,就直接跟对应的 IP 建立连接。如果没有,才会访问 DNS 服务器(/etc/resolv.conf 文件里配置的 nameserver)以确定对应的 IP。所以,如果在 /etc/hosts 文件里配置了我们的项目域名,就会省去一次查询 DNS 服务器解析记录的时间,因此配置服务器的 hosts 解析记录是十分有必要的。通常来说,我们需要在应用服务器上的 hosts 配置文件里(Windows 的 hosts 文件路径是 C:\Windows\System32\drivers\etc\hosts),添加一条项目域名到 nginx 服务器内网 IP 地址的解析记录,比如 10.0.4.15 hlwyy.abc.com ,其中 10.0.4.15 是 nginx 服务器的内网 IP,hlwyy.abc.com 是项目域名,中间以空格分隔,要注意应用服务器与 nginx 服务器,内网间必须双向互通。

6、ping 与 telnet

首先重点说明一下,ping 是基于 ICMP 协议(Internet Control Message Protocol,互联网控制消息协议)的,属于 OSI 模型的网络层,它既可以 ping 域名(ping 域名可以用来测试这个域名解析的 IP 地址是多少),也可以 ping IP,但是跟端口没任何关系,请不要在 ping 域名或 ping IP 后面加任何端口!ping 通常用来测试网络连通性,如果目标地址关闭了 ICMP 协议就 ping 不通它,大家不要大惊小怪认为这个有问题,这是很正常的情况。

telnet 属于应用层,是 TCP/IP 协议族的其中之一,既然是应用层就跟端口有关系了,所以 telnet 域名或 telnet IP 后面要跟上端口(用空格分隔开来,注意不是用英文的冒号来分隔),比如——

 

 

telnet 通常用来测试应用是否还在运行,比如测试 nginx 服务是否还在运行,在本机上可以用 telnet 127.0.0.1 443,在其他服务器上可以用 telnet 10.0.4.15 443(假设 10.0.4.15 是 nginx 服务器的内网 IP)。

说几个常用服务的端口——

  • FTP,21
  • SSH,22
  • HTTP,80
  • NETBIOS,137/138/139
  • HTTPS,443
  • SQL Server,1433
  • Oracle,1521/1526/2030/2483/2484/3872
  • MySQL,3306
  • Windows 远程桌面,3389
  • PostgreSQL,5432
  • Redis,6379
  • Memcached,11211

三、服务进程与连接

1、进程

 

ps,是 process status 的缩写,用来列出系统中当前运行的那些进程,它提供的结果并不动态连续,如果想对进程实时监控,应该用 top 命令。

我们可以根据进程名称去搜索进程,也可以根据进程 ID 去搜索进程,所以上面的 xxx 既可以是名称,也可以是 ID。

Linux 上的进程有 5 种状态,运行、中断、不可中断、僵死、停止,对应的状态码是 R、S、D、Z、T。

2、连接

 

lsof,list open files,是一个列出当前系统打开文件的工具(可能需要用 yum install -y lsof 命令安装一下),通常我们使用命令用来查看是否有对应端口被占用及连接到此端口上的网络连接,比如——

 

就表示查看本机上是否有进程在使用 443 端口。如果在结果里能看到 (LISTEN) ,就表示本机有进程正在占用 443 端口。如果还能看到 (ESTABLISHED) 或 (CLOSE_WAIT) 这样的,就表示有其他目标主机有到本机 443 端口的连接。

如果我们用 lsof -i:xxx 找到了一个状态是 LISTEN 的进程,假设它的进程 ID(也就是 PID 那一项)是 4937,那可以用以下命令查看该进程的当前工作目录(cwd)与执行文件路径(exe),这样可以有助于我们分析该进程到底是什么进程——

 

 

除了 lsof,我们通常还会使用 netstat 命令(可能需要用 yum install -y net-tools 命令安装一下),用于显示各种网络相关信息,如网络连接等。

 

上面这个命令可以查看当前所有连接到 443 端口(不管是本地的 443 还是远程的 443,不管是 TCP 还是 UDP)、且正处于监听状态的进程(会显示出进程 ID 和进程名称),这对我们确认服务器当前的网络连接情况是否健康是很有用的。

比如我们可以用下面的命令来查看服务器当前各个状态的网络连接数——

 

它会显示例如下面的信息:

 

其中 ESTABLISHED 表示正在通信,TIME_WAIT 表示主动关闭,CLOSE_WAIT 表示被动关闭。服务器上出现大量 TIME_WAIT 状态的连接时,可以考虑优化一下系统内核参数,出现大量 CLOSE_WAIT 状态的连接时,需要从代码层面去排查连接没有关闭的原因,总之这两种状态的连接过多时,会有很大的问题

四、Docker

1、仓库 REGISTRY

 

2、镜像 IMAGE

 

3、容器 CONTAINER

 

4、docker run 命令

 

五、其他

1、scp

scp 命令允许从一台 Linux 服务器安全复制文件或目录到另外一台远程 Linux 服务器(前提是网络要通),省去了先下载到本地再上传到远程服务器这一环节,命令如下——

 

如果本机和远程主机的用户名一样,就不需要 remote_username@ 这一部分。

 

-r 是递归复制的意思。

如果远程地址在前,本地地址在后,那就是从远程复制到本地

2、rz 与 sz

sz 命令是利用 ZModem 协议来从 Linux 服务器传送文件到本地,一次可以传送一个或多个文件。相对应地,从本地上传文件到 Linux 服务器,可以使用 rz 命令。这两个命令,都要在 Linux 服务器上运行,s 代表 send,r 代表 receive。如果找不到这两个命令,需要用 yum install -y lrzsz 命令安装下。sz 命令默认会将服务器上的文件发送到本机的下载目录,运行 rz 命令则会弹出一个文件上传窗口,需要对 SecureCRT 或 Xshell 做一下设置。

3、which 与 whereis

which 命令用于查看可执行文件(可执行文件可以简单理解成命令,比如 cd 命令)的位置,whereis 命令用于查看文件(包括可执行文件、源代码文件、帮助文件等)的位置。

 

-b,代表二进制执行文件。

4、zip 与 unzip

服务器上不总是自带 zip 与 unzip 命令,可以用 yum install -y unzip zip 命令安装下。大家如果用 vim 命令打开 jar 包时报错,提示类似于 error (zip#Write) sorry, your system doesn’t appear to have the zip pgm 这样的,就是因为服务器上还未安装 zip 和 unzip,因为 jar 包其实就是一种压缩文件,是需要解压才能进入的。当然,如果 vim 命令都没有,那就要用 yum install -y vim 先装一下。

5、history

history 命令用于展示使用过的历史命令,每个历史命令前面有个数字编号,我们可以输入英文叹号加数字编号,来再次运行这个历史命令。

6、回到命令行首与行尾

在 Linux 服务器的 shell 里运行命令时,按 Ctrl+A 可快速回到行首,按 Ctrl+E 可快速回到行尾。

在 Vim 编辑模式(按 i 进入的就是编辑模式)中,连按两个字母 G 可快速回到第一行,按 Shift+G 可快速回到最后一行,按 Home 快速回到行首,按 End 可快速回到行尾。在 Vim 正常模式(使用 vim 命令后,默认的模式)中,按 Ctrl+U 可向上滚动半屏,按 Ctrl+D 可向下滚动半屏。

在 Vim 底线命令模式(按 : 进入的就是底线命令模式,意思就是在最底一行输入命令)中,输入 %s/aaa/bbb/g 后再按回车,就可以把当前用 vim 打开的文件里的所有 aaa 字符串全局批量替换成 bbb 字符串,然后再按冒号并输入 wq(再按冒号并输入 wq 也可以换成按键盘 Shift+zz )保存文件即可。