Linux实用操作学习笔记

编程知识 更新时间:2023-04-20 15:16:54

各类小技巧(快捷键)

强制停止

ctrl+c 强制停止

  • Linux某些程序的运行,如果想要强制停止她,可以使用快捷键ctrl+c
  • 目录输入错误,也可以通过快捷键ctrl+从,推出当前输入出现输入

停止程序运行,top命令,查看系统进程,会一直动态下去,那退出时怎么办,之前我只会关闭终端,但是这样麻烦。现在可以用ctrl+c,

一些进度条卡住了,也可以使用。

yang@yang-virtual-machine:~/demo$ cd a/b/c/d^C
yang@yang-virtual-machine:~/demo$

这个命令输错了,ctrl+c,重新输入

退出、登出

ctrl+d 退出或登出

  • 可以通过快捷键ctrl+的,退出账户的登录
  • 或者退出某些特定程序的专属页面
  • 不能用于vi/vim

这条命令常用于管理员返回普通用户的时候,可以通过命令exit退出,但是快捷键方便

专属页面,python的环境需要用ctrl+d退出

yang@yang-virtual-machine:~/demo$ python3
Python 3.10.4 (main, Jun 29 2022, 12:14:53) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
KeyboardInterrupt
>>>
KeyboardInterrupt
>>>
KeyboardInterrupt
>>>
yang@yang-virtual-machine:~/demo$

快捷键ctrl+d会报错KeyboardInterrupt,ctrl+d可以退出

历史命令搜索

  • 可以通过history命令,查看历史输入过的命令
yang@yang-virtual-machine:~/demo$ history
...
   18  top
   19  pyhon
   20  python
   21  python3
   22  history
yang@yang-virtual-mach

输入这个命令,会发现出现我们之前输入过的全部命令,这个就方便我们复制命令,就不用手敲了

序号越大,那么执行时间越近

也可以通过grep关键字过滤命令

yang@yang-virtual-machine:~$ history | grep py
   19  pyhon
   20  python
   21  python3
   24  python3
   25  history | grep py
   27  history | grep py
   28  ipython3
   29  history | grep py

过滤与py相关的命令。

  • 可以通过:!命令前缀,自动执行上一次匹配的前缀命令
yang@yang-virtual-machine:~$ !p
python3
Python 3.10.4 (main, Jun 29 2022, 12:14:53) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
yang@yang-virtual-machine:~$

在上面可以看见python的命令离我最近,序号24,那么!p就是python3了。

这个命令不适合去找长久的命令,可能会出现执行命令错误的问题

  • 可以通过快捷键:ctrl+r,输入内容去匹配历史命令
  • 如果搜索到的内容是你需要的,那么
    • 回车键可以直接执行
    • 键盘左右键,可以得到此命令(不执行)
(reverse-i-search)`mk': mkdir demo

当按下ctrl+r时,yang@yang-virtual-machine:~$ 会变成(reverse-i-search): 然后输入内容去匹配命令

因为我已经有demo文件夹了,所以我可以通过左右键修改命令

yang@yang-virtual-machine:~$ mkdir demo2

当按下左右任意键,命令行就会变回来,输入正确的命令,可以执行。

光标移动

  • ctrl+a,跳到命令开头
  • ctrl+e,跳到命令结尾
  • ctrl+键盘左键,向左跳一个单词
  • ctrl+键盘右键,向右跳一个单词

之前我用的是键盘上的home和end,分别对应开头和结尾

这个就是一个方便

清屏

  • 通过ctrl+l,可以清空终端内容
  • 或者通过模块clear得到同样的效果

软件安装

Linux系统的应用商店

操作系统安装软件有许多种方式,一般分为:

  • 下载安装包自行安装
    • 如win系统使用exe文件、msi文件等
    • 如mac系统使用dmg文件、pkg文件等
  • 系统的应用商店内安装
    • 如win系统有Microsoft Store商店
    • 如mac系统有AppStore商店
  • Linux同样支持这两种方式,我们首先,先来学习使用:Linux命令行内的“应用商店”,yum命令安装软件

软件安装必不可少,因为我最近在用Ubuntu系统,每当使用的软件没有安装时,会出现apt-get提示,yum我听过这个单词

使用yum为CentOS系统安装软件

yum:RPM包软件管理器,用于自动化安装配置Linux软件,并可以自动解决依赖问题。

语法:yum [-y] [install | remove | search] 软件名称

  • 选项:-y,自动确认,无需手动确认安装或卸载过程
  • install:安装
  • remove:卸载
  • search:搜索

yum命令需要root权限哦,可以su切换到root,或使用sudo提权。

yum命令需要联网

yum我听说过,但是没有用过,现在尝试一下

好像无论Ubuntu还是CentOS都安装wget,我也不知道安啥软件,那我就先吧wget卸载了

[root@192 ~]# wget
wget: missing URL
Usage: wget [OPTION]... [URL]...

Try `wget --help' for more options.

先记录一下wget是已经安装好的,如果没安装好,会提示找不到这个命令

[root@192 ~]# yum remove wget

卸载wget,我没有加-y,所以后面有个提示是否删除

[root@192 ~]# wget
-bash: /bin/wget: No such file or directory

卸载完成!

我搜索一下

search  shell
[root@192 ~]# yum search wget
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: ftp.sjtu.edu
 * extras: ftp.sjtu.edu
 * updates: ftp.sjtu.edu
=================================================== N/S matched: wget ===================================================
wget.x86_64 : A utility for retrieving files using the HTTP or FTP protocols

  Name and summary matches only, use "search all" for everything.

出来一大堆

现在安装回来,

[root@192 ~]# yum -y install wget

注意,这次有个-y,就是不询问

[root@192 ~]# wget
wget: missing URL
Usage: wget [OPTION]... [URL]...

Try `wget --help' for more options.

安装完成

使用apt为Ubuntu系统安装软件

语法:apt [-y] [install | remove | search] 软件名称

  • 用法与ymu一致,同样需要root权限
  • apt install wget:安装 wget
  • apt remove wget:卸载 wget
  • apt search wget:搜索 wget

我装完Ubuntu的第一个软件就是

 sudo apt install net-tools

这是一个网络工具,用来ifconfig。

虽然没怎么用过centos,但是现在可以看出来的是yum和apt的用法是一样的,只不过CentOS使用yum管理器,Ubuntu使用apt

systemctl命令

Linux系统很多软件(内置或第三方)均支持使用systemctl命令控制:启动、停止、开机自启

能够被systemctl管理软件,一般也称之为:服务

语法:systemctl start | stop | status | enable | disable 服务名

  • start:开启
  • stop:关闭
  • status:查看状态
  • enable:开启开机自启
  • disable:关闭关机自启

系统内置的服务比较多,比如:

  • NetworkManager,主网络服务
  • network,副网络服务
  • firewalld,防火墙服务
  • sshd,ssh服务(Finalshell远程登录Linux使用的就是这个服务)
[yang@192 ~]$ systemctl status NetworkManager
● NetworkManager.service - Network Manager
   Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2023-01-31 22:32:03 PST; 3h 42min ago
     Docs: man:NetworkManager(8)
 Main PID: 799 (NetworkManager)
    Tasks: 4
   CGroup: /system.slice/NetworkManager.service
           ├─ 799 /usr/sbin/NetworkManager --no-daemon
           └─3786 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-ens33.pid -lf /var/lib/Ne...

systemctl status NetworkManager查看一下主网络服务的状态

怎么看开启或者关闭呢,两种方法。这个标志是绿的,或者active (running) run是运行,那么是开启的。

现在关闭

[root@192 ~]# systemctl stop NetworkManager

这个是关闭的命令,stop

[root@192 ~]# systemctl status NetworkManager
● NetworkManager.service - Network Manager
   Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Wed 2023-02-01 04:02:09 PST; 16s ago
     Docs: man:NetworkManager(8)
  Process: 799 ExecStart=/usr/sbin/NetworkManager --no-daemon (code=exited, status=0/SUCCESS)
 Main PID: 799 (code=exited, status=0/SUCCESS)

Feb 01 04:02:09 192.168.1.7 NetworkManager[799]: <info>  [1675252929.4782] dhcp4 (ens33): canceled DHCP transacti... 3786
Feb 01 04:02:09 192.168.1.7 NetworkManager[799]: <info>  [1675252929.4783] dhcp4 (ens33): state changed bound -> done
Feb 01 04:02:09 192.168.1.7 NetworkManager[799]: <info>  [1675252929.4783] device (ens33): DHCPv4: 480 seconds gr...arted
Feb 01 04:02:09 192.168.1.7 NetworkManager[799]: <info>  [1675252929.4786] dhcp6 (ens33): canceled DHCP transaction
Feb 01 04:02:09 192.168.1.7 NetworkManager[799]: <info>  [1675252929.4786] dhcp6 (ens33): state changed terminate... done
Feb 01 04:02:09 192.168.1.7 NetworkManager[799]: <info>  [1675252929.4786] dhcp6 (ens33): canceled DHCP transaction
Feb 01 04:02:09 192.168.1.7 NetworkManager[799]: <info>  [1675252929.4789] manager: NetworkManager state is now C..._SITE
Feb 01 04:02:09 192.168.1.7 NetworkManager[799]: <info>  [1675252929.4794] device (virbr0-nic): released from mas...irbr0
Feb 01 04:02:09 192.168.1.7 NetworkManager[799]: <info>  [1675252929.4799] exiting (success)
Feb 01 04:02:09 192.168.1.7 systemd[1]: Stopped Network Manager.
Hint: Some lines were ellipsized, use -l to show in full.

看一下状态,是灰的,或者inactive (dead) 那么就是服务停止

我们开启。

[root@192 ~]# systemctl start NetworkManager

除了内置的服务以外,部分第三方软件安装后也可以以systemctl进行控制

有两个例子,我分别试一下

下载ntp软件,和httpd软件,并开启服务

安装httpd软件

[root@192 ~]# yum install httpd

中间会有询问。

查看httpd服务有没有开启

[root@192 ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:httpd(8)
           man:apachectl(8)

inactive (dead)是关闭,现在开启

[root@192 ~]# systemctl start httpd
[root@192 ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2023-02-01 04:18:49 PST; 1s ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 56232 (httpd)
   Status: "Processing requests..."
    Tasks: 6
   CGroup: /system.slice/httpd.service
           ├─56232 /usr/sbin/httpd -DFOREGROUND
           ├─56237 /usr/sbin/httpd -DFOREGROUND
           ├─56238 /usr/sbin/httpd -DFOREGROUND
           ├─56239 /usr/sbin/httpd -DFOREGROUND
           ├─56240 /usr/sbin/httpd -DFOREGROUND
           └─56241 /usr/sbin/httpd -DFOREGROUND

Feb 01 04:18:49 192.168.1.7 systemd[1]: Starting The Apache HTTP Server...
Feb 01 04:18:49 192.168.1.7 systemd[1]: Started The Apache HTTP Server.

active (running)服务开启

[root@192 ~]# systemctl status ntpd
● ntpd.service - Network Time Service
   Loaded: loaded (/usr/lib/systemd/system/ntpd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

下载完ntp这个软件后,他的服务名称是ntpd,可以看的ntp的服务是关闭的,现在开启

[root@192 ~]# systemctl start ntpd
[root@192 ~]# systemctl status ntpd
● ntpd.service - Network Time Service
   Loaded: loaded (/usr/lib/systemd/system/ntpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2023-02-01 04:24:44 PST; 1s ago
  Process: 56372 ExecStart=/usr/sbin/ntpd -u ntp:ntp $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 56373 (ntpd)
    Tasks: 1
   CGroup: /system.slice/ntpd.service
           └─56373 /usr/sbin/ntpd -u ntp:ntp -g

Feb 01 04:24:44 192.168.1.7 ntpd[56373]: Listen normally on 2 lo 127.0.0.1 UDP 123
Feb 01 04:24:44 192.168.1.7 ntpd[56373]: Listen normally on 3 ens33 192.168.1.7 UDP 123
Feb 01 04:24:44 192.168.1.7 ntpd[56373]: Listen normally on 4 virbr0 192.168.122.1 UDP 123
Feb 01 04:24:44 192.168.1.7 ntpd[56373]: Listen normally on 5 lo ::1 UDP 123
Feb 01 04:24:44 192.168.1.7 ntpd[56373]: Listen normally on 6 ens33 fe80::8102:3692:2fc3:ff5d UDP 123
Feb 01 04:24:44 192.168.1.7 ntpd[56373]: Listen normally on 7 ens33 2409:8a00:6068:b8c0:5e47:838f:e07a:ef54 UDP 123
Feb 01 04:24:44 192.168.1.7 ntpd[56373]: Listening on routing socket on fd #24 for interface updates
Feb 01 04:24:44 192.168.1.7 ntpd[56373]: 0.0.0.0 c016 06 restart
Feb 01 04:24:44 192.168.1.7 ntpd[56373]: 0.0.0.0 c012 02 freq_set kernel 0.000 PPM
Feb 01 04:24:44 192.168.1.7 ntpd[56373]: 0.0.0.0 c011 01 freq_not_set

注意,开启或者关闭服务必须是管理员,

部分软件安装后没有自动集成到systemctl中,我们可以手动添加

这个怎么说呢,我的第一反应是类似Windows的环境变量,需要添加一下。

软链接

什么是软链接呢,这就是个快捷方式,这么一说,是不是就明白了。

Windows的快捷方式,安装好微信,会在桌面上创建一个快捷方式。

命令:ln -s 参数1 参数2

  • -s选项,创建软连接
  • 参数1,被链接的文件或文件夹
  • 参数2,要链接去的目的地

/etc/ 文件夹下有一个yum文件夹和yum.conf文件,现在吧这两个文件创建软链接到我的工作目录

[yang@192 ~]$ ln -s /etc/yum.conf yum.conf
[yang@192 etc]$ ll ~
total 0
...
lrwxrwxrwx. 1 yang yang 13 2月   3 02:51 yum.conf -> /etc/yum.conf

ln -s /etc/yum.conf yum.conf创建软链接。yum.conf -> /etc/yum.conf软连接的表现形式

lrwxrwxrwx还记得这是什么吗,我翻看了前面的博客,这是权限控制信息,其中d是目录,-是文件,现在补充一个l是软链接。

[yang@192 ~]$ ln -s /etc/yum ln_yum
[yang@192 ~]$ ll
总用量 0
lrwxrwxrwx. 1 yang yang  8 2月   3 03:01 ln_yum -> /etc/yum
...

创建文件夹的软链接。ln_yum -> /etc/yum,这个参数2可以自由命名。

[yang@192 ~]$ ll /etc/yum
总用量 4
drwxr-xr-x. 2 root root   6 10月  1 2020 fssnap.d
drwxr-xr-x. 2 root root  54 2月   1 06:27 pluginconf.d
drwxr-xr-x. 2 root root  26 2月   1 06:25 protected.d
drwxr-xr-x. 2 root root  37 10月  1 2020 vars
-rw-r--r--. 1 root root 444 10月  1 2020 version-groups.conf
[yang@192 ~]$ ll ln_yum/
总用量 4
drwxr-xr-x. 2 root root   6 10月  1 2020 fssnap.d
drwxr-xr-x. 2 root root  54 2月   1 06:27 pluginconf.d
drwxr-xr-x. 2 root root  26 2月   1 06:25 protected.d
drwxr-xr-x. 2 root root  37 10月  1 2020 vars
-rw-r--r--. 1 root root 444 10月  1 2020 version-groups.conf

文件是一样的

注意,即使是目录,软链接过来的是l

日期和时区

date命令查看时间和日期

通过date命令可以在命令行中查看系统的时间

语法:`date [-d] [+格式化字符串]

  • -d 按照给定的字符串显示日期,一般用于日期计算
  • 格式化字符串:通过特定的字符串标记,来控制显示的日期格式
    • %Y 年
    • %y 年份后面两位数字(00, 99)
    • %m 月份(01, 12)
    • %d 日(01, 31)
    • %H 小时(00, 23)
    • %M 分钟 (00, 59)
    • %S 秒(00, 60)
    • %s 自1970-01-01 00:00:00 UTC到现在的秒数

直接用date命令,可以查看时间。

[root@192 yang]# date
2023年 02月 02日 星期四 02:51:06 PST

这是现在的时间,年 月 日 星期 时间。这是外国人时间格式的标准,看的有点别扭,但我看这个时间不准

这时可以利用格式化字符串。

[root@192 yang]# date +%Y-%m-%d
2023-02-02

加上这个选项+%Y-%m-%d,那么时间格式就会变成2023-02-02

那如果我想看2023-02-02 02:57:27这样的时间

[root@192 yang]# date +%Y-%m-%d %H:%M:%S
date: 额外的操作数 "%H:%M:%S"
Try 'date --help' for more information.

如果是这样输入,会报错,因为+%Y-%m-%d %H:%M:%S中间会有空格,

可以采用""双引号括起来"+%Y-%m-%d %H:%M:%S"

[root@192 yang]# date "+%Y-%m-%d %H:%M:%S"
2023-02-02 02:57:27
  • -d选项,可以按照给定的字符串显示 日期,一般用于日期计算

  • 其中支持的时间标记为:

    year年

    month月

    day天

    hour小时

    minute分钟

    second秒

[root@192 ~]# date -d "+1 day"
2023年 02月 03日 星期五 04:10:44 PST

计算+1天的时间,那就是明天是几号。注意用双引号括起来

[root@192 ~]# date -d "-3 year" "+%Y-%m-%d %H:%M:%S"
2020-02-02 04:13:53

三年前的时间,也可以配合格式化字符串使用。

-d用来计算时间,格式化用来调整对时间的显示

修改Linux系统的时区

[root@192 yang]# date
2023年 02月 02日 星期四 04:37:33 PST

用date查看时间时,会发现时间不准,而且还有一个后缀PST

PST,因为系统默认时区非中国的东八区

这个我也不知道,就是说不在中国的时区,时间肯定不准,那该怎么办?

修改时间需要root权限

首先要删除/etc/localtime文件

[root@192 yang]# rm -f /etc/localtime

然后在把/usr/share/zoneinfo/Asia/Shanghai文件链接到/etc/localtime

[root@192 ~]# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
[root@192 ~]# date
2023年 02月 03日 星期五 11:09:24 CST

再次查看时间,时间改过来了,还有PST时区改成GST了

使用ntp进行时间同步和校准

可以通过ntp程序自动校准系统时间,但是这个程序需要安装

[root@192 ~]# yum -y install ntp

ntp程序的服务名叫ntpd,我们先查看一下ntp程序的状态

[root@192 ~]# systemctl status ntpd
● ntpd.service - Network Time Service
   Loaded: loaded (/usr/lib/systemd/system/ntpd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
[root@192 ~]# systemctl start ntpd

服务是关闭的,那我开启服务

[root@192 ~]# systemctl status ntpd
● ntpd.service - Network Time Service
   Loaded: loaded (/usr/lib/systemd/system/ntpd.service; disabled; vendor preset: disabled)
   Active: active (running) since 四 2023-02-02 13:03:58 UTC; 1s ago
  Process: 2803 ExecStart=/usr/sbin/ntpd -u ntp:ntp $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 2806 (ntpd)
    Tasks: 1
   CGroup: /system.slice/ntpd.service
           └─2806 /usr/sbin/ntpd -u ntp:ntp -g

然后在联网后自动校准时间

也可以用ntp服务器手动校准时间,需要root权限

[root@192 ~]# ntpdate -u npt.aliyun

这里用的ntp服务器是阿里云的npt.aliyun

IP地址和主机名

IP地址

每个电脑想要联网,那么都会有一个IP,就像是每个人都会有身份证。IP是网络的身份证

IP地址有两个版本IP v4和IP v6,如果是计算机专业或者学过计算机网络,那么你可能比我熟悉

IP v4版本的地址格式是:a.b.c.d其中abcd表示0~255的数字,如192.168.88.101就是一个标准的IP地址

可以用ifconfig命令查看本机的IP地址,如果没有ifconfig命令,需要下载

这个命令经常用,CentOS一般都有这个命令,乌班图没有需要下apt install net-tools

[root@192 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.7  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::8102:3692:2fc3:ff5d  prefixlen 64  scopeid 0x20<link>
        inet6 2409:8a00:6068:b8c0:5e47:838f:e07a:ef54  prefixlen 64  scopeid 0x0<global>
        ether 00:0c:29:38:7a:a7  txqueuelen 1000  (Ethernet)
        RX packets 2589  bytes 190730 (186.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2176  bytes 185719 (181.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 64  bytes 5568 (5.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 64  bytes 5568 (5.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:d6:1c:be  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

输入ifconfig命令,可以看见IP信息,CentOS内置了三个网卡,看电脑ip信息的话看ens33主网卡inet。我的是192.168.1.7

lo:本地回环网卡,virbr0:虚拟机专用网卡

  • 127.0.0.1这个IP地址用于指代本机
  • 0.0.0.0,特殊IP地址
    • 可以用于指代本机
    • 可以在端口绑定中用来确定绑定关系
    • 在一些IP地址限制中,表示所有IP的意思,如放行规则设置为0.0.0.0,表示允许任意IP访问

说实话,我对IP了解不多,课程中的老师让我们记住这两个特殊IP指代本机都可以了。但是我还是不明白,什么是指代本机,本机不是已经有自己的IP吗

主机名

每一台电脑,除了有IP地址,还会有主机名,这个很好理解,你有身份证号,也有姓名

Windows、MAC、Linux都有主机名

Windows主机名查看是右击此电脑属性就会看见

Linux是用命令hostname

[root@192 ~]# hostname
192.168.1.7

我的主机名直接是我的IP

MAC没用过,不会查看。

我们抛开Windows和mac,主要说Linux

我的主机名是IP地址,不管是什么,都可以通过hostnamectl set-hostname 主机名进行修改,需要root

[root@192 ~]# hostnamectl set-hostname yang
[root@192 ~]# hostname
yang

修改完成,我改成了yang,但是会发现[root@192 ~]这里没有改变,需要重启终端

[yang@yang ~]$ 
[root@yang yang]#

会发现无论是普通用户还是管理员都改过来了

域名解析

IP地址实在是难以记忆,有没有什么方法可以通过主机名或者替代的字符地址去替代数字化的IP地址呢?

实际上,我们一直都是通过字符化的地址去访问服务器,很少指定IP地址

比如,我们在浏览器内打开:www,baidu,会打开百度的网址

其中www,baidu,是百度的网址,我们称之为:域名

域名解析看上去是个很深奥的名词,其实他就是把IP和网址直接转换

我们怎么上百度的,就是输入网址www,baidu,而不是输入百度的IP地址。当我们输入域名时,会自动解析成IP地址

就像我们叫一个人,会叫他的名字,而不是身份证号码。

访问www,baidu的流程

  • 先查看本机的记录(私人记事本)
    • Windows看:C:\Windows\System32\drivers\etc\hosts
    • Linux看:/rtc/hosts
  • 再联网去DNS服务器(如114.114.114.114,8.8.8.8)

我们在浏览器中输入百度的网址,浏览器会现在本地找有没有这个网址的IP地址记录,如果有,打开网址,

没有则联网查询,查询已经公开的DNS服务器,查询到了打开网页

没有则404

那现在,有一个需求,我的Linux的IP地址是192.168.1.7,我想把这个数字化的IP地址转换成字符化的,或者是我想输入mycentos,那么就可以明白192.168.1.7,

我是用ssh远程登陆的Linux,ssh yang@192.168.1.7这是没有修改前的连接方式,我想改成ssh yang@mycentos

把mycentos映射为192.168.1.7,

那就要打开Windows上的hosts文件,C:\Windows\System32\drivers\etc\hosts用记事本以管理员的方式打开,然后在最后输入192.168.1.7 mycentos

即可使用ssh yang@mycentos连接

虚拟机配置固定IP

这里由两部分内容,分别是Windows系统和mac系统,可以看到系统不一样配置也不一样,因为我是Windows电脑,所以我就不学习mac的配置了

当前我们虚拟机的Linux操作系统,其IP地址是通过DHCP服务获取的

DHCP:动态获取IP地址,即每一次重启设备后都会获取一次,可能导致IP地址频繁变更

这个怎么解释呢,IP地址是动态分配的,然后我们远程登录是需要LinuxIP地址的。

拿我自己举个例子,我回家和我在学校时Linux的IP地址的IP地址是不一样的,这样导致我每次远程登录时都要查看一下IP、这样很麻烦。虽然我知道可以固定,但是我没有学会。

这种动态IP是不好的,在以后工作中,如果服务器的IP地址不稳定,频繁更改,那么我们每一次连接都需要问管理员。还有构成改的域名解析,那就要频繁更新

DHCP是什么,我不知道,他可能就起到了一个随机分配IP的作用。

那么怎么做呢,有两个步骤

  1. 在VMware Workstation(或Fusion)中配置IP地址网关和网段(IP地址的范围)
  2. 在Liux系统中手动修改配置文件,固定IP

我们先做第一步,在VMware Workstation中配置IP地址网关和网段

打开VM的网络适配器

插播一句,我的图床配置好了。

点击WMnet8,然后右下角有个更改设置

设置子网IP为192.168.88.0,这里是设置一个网点,是192.168.88.0到192.168.88.254,也可以是别的数字,但是这部分我不明白,也就改成88了,88吉利。

设置子网掩码:255.255.255.0,这个是必须的,不能改动

点击NAT设置

设置网关:192.168.88.2,因为网段是88,所以前面不能改动了,然后填2

之后就需要在Linux中操作更改了

首先用vim编辑 /etc/sysconfig/network-scripts/ifcfg-ens33

[root@yang ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

更改一处地方,然后在后面添加四句话

  • 更改

    BOOTPROTO="DHCP"由dhcp改成static,就是动态改成静态

  • 添加

    IPADDR="192.168.88.66" IP地址,是固定下来的ip地址,用于远程登录。这个地址可以随便修改,但是不可以是192.168.88.0,还有必须在192.168.88.0到192.168.88.255之间
    NETMASK="255.255.255.0" 子网掩码
    GATEWAY="192.168.88.2" 网关
    DNS1="192.168.88.2"域名解析服务器,使用网关

子网掩码和网关和之前在网络适配器中设置的一样

然后还有两天命令,重启网络服务

[root@yang yang]# systemctl stop network
[root@yang yang]# systemctl start network

重启Linux。

但是会发现ssh连不上,为什么,这里还需要修改网络的连接方式,在VM中,

然后就可以连接了

我们在之前设置了dns解析,现在IP地址换了,那个文件也应该修改一下

完成!

在这里之前写过网络连接的三种方式,没发博客,可以加在这里

网络连接三种方式

网络连接三种方式——桥接模式

虚拟系统可以和外部系统通讯,但容易造成IP冲突。

我现在终于没明白了,是这样的,虽然我的网络基础很差。

IP地址是有四段的,如果IP地址的前三段是一致的,那么就是处于同一个网段。

采用老师的例子

现在有三个人在同一个机房里面,每人一台电脑,都有各自的IP。小明:192.168.2.20、小红:192.168.2.30、小刚:192.168.2.40、他们是可以正常通信的,

同时网段也就是192.168.2.

他们假设都在使用虚拟机学习,网络模式选择的是桥接模式。那么就是同一网段192.168.2.21、192.168.2.24、192.168.2.31等等,虚拟机可以与外部得主机连接,什么意思呢,小明的虚拟机可以和小红的主机互通

但是有一个缺点,也就是IP冲突,这个网段内最多只允许有255个IP,如果是200人的教室,每人一个虚拟机,200+200>255。IP不够了。

网络连接三种方式——NAT模式

网络地址转换模式,虚拟系统可以和外部系统通讯,不造成IP冲突。

如果选择了NAT模式,那么计算机会产生一个虚拟网卡,这时要清楚虚拟机和主机用的不是同一个网段,

此时自己的主机可以与虚拟机互相通信,虚拟机也可以通过主机IP代理与外部通信。

这样一来,可以想象一下,每一个人都会产生一个虚拟网卡,而且每一个网卡下可以有255台主机(虚拟主机)这样就大大解决了IP冲突问题。

网络连接三种方式——仅主机模式

独立的系统

在这里我有几点看法,怎么选择,如果是在家里,自己的路由器,那么我觉得选择桥接模式是ok的,因为家里面不可能有225台设备同时上网把,我家是没有过这种情况,如果是在学校或者公司等大型场合,那么选择nat是很好的。

网络传输

网络请求和下载

使用ping命令检查服务器是否连通

可以通过ping命令,检查指定的网络服务器是否是可联通状态

语法:ping [-c num] ip或主机名

  • 选项:-c,检查的次数,不使用-c选项,将无限次次数持续检查
  • 参数:ip或主机名,被检查的服务器的IP地址或主机名地址

这个命令在Windows也很常用,看看网络有没有联通

ping一下百度-

[root@yang yang]# ping www.baidu
PING www.baidu (39.156.66.18) 56(84) bytes of data.
64 bytes from 39.156.66.18 (39.156.66.18): icmp_seq=1 ttl=128 time=6.18 ms
64 bytes from 39.156.66.18 (39.156.66.18): icmp_seq=2 ttl=128 time=6.27 ms
64 bytes from 39.156.66.18 (39.156.66.18): icmp_seq=3 ttl=128 time=6.30 ms
64 bytes from 39.156.66.18 (39.156.66.18): icmp_seq=4 ttl=128 time=6.45 ms
64 bytes from 39.156.66.18 (39.156.66.18): icmp_seq=5 ttl=128 time=6.60 ms
64 bytes from 39.156.66.18 (39.156.66.18): icmp_seq=6 ttl=128 time=6.15 ms
64 bytes from 39.156.66.18 (39.156.66.18): icmp_seq=7 ttl=128 time=12.6 ms
64 bytes from 39.156.66.18 (39.156.66.18): icmp_seq=8 ttl=128 time=6.76 ms
64 bytes from 39.156.66.18 (39.156.66.18): icmp_seq=9 ttl=128 time=6.33 ms
64 bytes from 39.156.66.18 (39.156.66.18): icmp_seq=10 ttl=128 time=6.48 ms
64 bytes from 39.156.66.18 (39.156.66.18): icmp_seq=11 ttl=128 time=6.58 ms
^C
--- www.baidu ping statistics ---
11 packets transmitted, 11 received, 0% packet loss, time 10021ms
rtt min/avg/max/mdev = 6.157/6.980/12.626/1.794 ms

ping www.baiduping百度,延迟在8毫秒左右,现在与百度是联通的

同时ping百度还把百度的ip地址显示出来了。

因为没有-c选项,所以可以一直ping下去,需要手动停止ctrl+c

[root@yang yang]# ping -c 3 39.156.66.18
PING 39.156.66.18 (39.156.66.18) 56(84) bytes of data.
64 bytes from 39.156.66.18: icmp_seq=1 ttl=128 time=6.37 ms
64 bytes from 39.156.66.18: icmp_seq=2 ttl=128 time=6.14 ms
64 bytes from 39.156.66.18: icmp_seq=3 ttl=128 time=6.02 ms

--- 39.156.66.18 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2021ms
rtt min/avg/max/mdev = 6.027/6.182/6.372/0.143 ms

现在ping百度的IP地址,-c 3发送三个包

[root@yang yang]# ping -c 3 192.168.88.12
PING 192.168.88.12 (192.168.88.12) 56(84) bytes of data.
From 192.168.88.66 icmp_seq=1 Destination Host Unreachable
From 192.168.88.66 icmp_seq=2 Destination Host Unreachable
From 192.168.88.66 icmp_seq=3 Destination Host Unreachable

--- 192.168.88.12 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2010ms
pipe 3

Unreachable不可达,ping不通

这个命令还是很常用的,用于网络测试,一般网络配置完成后测试一些有没有配置成功

刚刚网络配置就失败了,GATEWAY写出GETEWAY了,所以这个ping还是很常用的、有用

wget命令下载文件

wget是非交互式的文件下载器,可以在命令行内下载网络文件

语法:wget [-b] url

  • 选项:-b,可选,后台下载,会将日志写入到当前工作目录的wget-log文件
  • 参数:url,下载链接

这个类似于下载器,Windows的迅雷就很好用,给一个网络文件,可以自动下载。

这个命令我最近也接触了,很迷,现在明白了,这就是个下载器

以现在minicando为例

wget https://mirrors.tuna.tsinghua.edu/anaconda/miniconda/Miniconda3-py38_4.8.3-Linux-x86_64.sh --no-check-certificate
[root@yang yang]# wget https://mirrors.tuna.tsinghua.edu/anaconda/miniconda/Miniconda3-py38_4.8.3-Linux-x86_64.sh --no-check-certificate
--2023-02-03 19:58:18--  https://mirrors.tuna.tsinghua.edu/anaconda/miniconda/Miniconda3-py38_4.8.3-Linux-x86_64.sh
正在解析主机 mirrors.tuna.tsinghua.edu (mirrors.tuna.tsinghua.edu)... 101.6.15.130, 2402:f000:1:400::2
正在连接 mirrors.tuna.tsinghua.edu (mirrors.tuna.tsinghua.edu)|101.6.15.130|:443... 已连接。
警告: 无法验证 mirrors.tuna.tsinghua.edu 的由 “/C=US/O=Let's Encrypt/CN=R3” 颁发的证书:
  颁发的证书已经过期。
已发出 HTTP 请求,正在等待回应... 307 Temporary Redirect
位置:https://mirrors.bfsu.edu/anaconda/miniconda/Miniconda3-py38_4.8.3-Linux-x86_64.sh [跟随至新的 URL]
--2023-02-03 19:58:18--  https://mirrors.bfsu.edu/anaconda/miniconda/Miniconda3-py38_4.8.3-Linux-x86_64.sh
正在解析主机 mirrors.bfsu.edu (mirrors.bfsu.edu)... 39.155.141.16, 2001:da8:20f:1003::fe55:2840
正在连接 mirrors.bfsu.edu (mirrors.bfsu.edu)|39.155.141.16|:443... 已连接。
警告: 无法验证 mirrors.bfsu.edu 的由 “/C=US/O=Let's Encrypt/CN=R3” 颁发的证书:
  颁发的证书已经过期。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:93052469 (89M) [application/octet-stream]
正在保存至: “Miniconda3-py38_4.8.3-Linux-x86_64.sh”

36% [===========================>                                                   ] 33,857,274  32.0MB/s             ^C
[root@yang yang]# wget https://mirrors.tuna.tsinghua.edu/anaconda/miniconda/Miniconda3-py38_4.8.3-Linux-x86_64.sh --no-check-certificate

没有-b选项,会前台下载文件,

下载文件途中,可以通过ctrl+c停止下载

[root@yang yang]# ll
总用量 27280
-rw-r--r--. 1 root root 27934458 2月   3 20:02 Miniconda3-py38_4.8.3-Linux-x86_64.sh
...

无论下载成功与否,都会在当前工作目录产生文件,如果是下载一半就停止的文件,记得删除,留着也没有什么用

[root@yang yang]# wget -b https://mirrors.tuna.tsinghua.edu/anaconda/miniconda/Miniconda3-py38_4.8.3-Linux-x86_64.sh --no-check-certificate
继续在后台运行,pid 为 3253。
将把输出写入至 “wget-log”。

-b,后台下载,下载的日志保存在了当前工作目录下的wget-log文件

[root@yang yang]# ll
总用量 32736
...
-rw-r--r--. 1 root root 21085946 2月   3 20:06 Miniconda3-py38_4.8.3-Linux-x86_64.sh
-rw-r--r--. 1 root root    32566 2月   3 20:06 wget-log
...

会发现多出来一个wget-log文件

[root@yang yang]# tail wget-log
 90550K .......... .......... .......... .......... .......... 99% 35.0M 0s
 90600K .......... .......... .......... .......... .......... 99% 32.5M 0s
 90650K .......... .......... .......... .......... .......... 99% 12.9M 0s
 90700K .......... .......... .......... .......... .......... 99%  407M 0s
 90750K .......... .......... .......... .......... .......... 99% 28.6M 0s
 90800K .......... .......... .......... .......... .......... 99% 38.2M 0s
 90850K .......... .......... .                               100% 1.03G=3.9s

2023-02-03 20:06:33 (22.9 MB/s) - 已保存 “Miniconda3-py38_4.8.3-Linux-x86_64.sh” [93052469/93052469])

可以查看跟踪文件

[root@yang yang]# tail -f wget-log

可以持续跟踪

下载的网速比较好,已经下载完了,持续跟踪也就没什么意义了。

curl命令发起网络请求

curl可以发送http网络请求,可用于:下载文件、获取信息等

语法:curl [-O] url

  • 选项:-O,用于下载文件,当url是下载链接时,可以使用此选项保存文件
  • 参数:url,要发起请求的网络地址

这个我没用过,网络请求GET、POST等等,但是这些有什么用呢

[root@yang yang]# curl cip
IP      : 120.244.130.16
地址    : 中国  北京
运营商  : 移动

数据二  : 北京市 | 移动

数据三  : 中国北京北京市 | 移动

URL     : http://www.cip/120.244.130.16

cip这个网站是一个公开的网址,可以获取主机的公网IP地址

返回了ip,地址、运营商等等数据,但是我看不懂

[yang@yang ~]$ curl www.baidu
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=//www.baidu/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn"></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu name=tj_trnews class=mnav>新闻</a> <a href=http://www.hao123 name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu name=tj_trmap class=mnav>地图</a> <a href=http://v.baidu name=tj_trvideo class=mnav>视频</a> <a href=http://tieba.baidu name=tj_trtieba class=mnav>贴吧</a> <noscript> <a href=http://www.baidu/bdorz/login.gif?login&amp;tpl=mn&amp;u=http%3A%2F%2Fwww.baidu%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a> </noscript> <script>document.write('<a href="http://www.baidu/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登录</a>');</script> <a href=//www.baidu/more/ name=tj_briicon class=bri style="display: block;">更多产品</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu>关于百度</a> <a href=http://ir.baidu>About Baidu</a> </p> <p id=cp>&copy;2017&nbsp;Baidu&nbsp;<a href=http://www.baidu/duty/>使用百度前必读</a>&nbsp; <a href=http://jianyi.baidu/ class=cp-feedback>意见反馈</a>&nbsp;京ICP证030173号&nbsp; <img src=//www.baidu/img/gs.gif> </p> </div> </div> </div> </body> </html>

向百度发起网络请求,返回的是HTML源码

可以说我们是在浏览网页,只是没有渲染

这里像是python爬虫,爬取网页源码

[yang@yang ~]$ curl -O http://archive.apache/dist/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0  477M    0 1515k    0     0   188k      0  0:43:08  0:00:08  0:43:00 76421

下载软件,记得-O选项,

这个命令我第一次用,没有更多的想法。

端口

端口的概念

端口,是设备与外界通讯交流的出入口。端口可分为:物理端口和虚拟端口两类

  • 物理端口:右可称之位接口,是可见的端口,如USB端口,RJ45网口,HDMI端口
  • 虚拟端口:是指计算机内部的端口,是不可见的,是用来操作系统和外部进行交互使用的

端口,这是一个网络知识,但是我计网不会

端口有两种物理和虚拟端口,很明显物理端口是真实的,虚拟端口和虚拟机一样,看不见,摸不着但可以用

物理端口,我们买电脑的时候都会关心有多少个USB,有没有网口,雷电4,买手机现在最火热的话题有没有耳机接口,可见这些都属于端口。

虚拟端口,看不见的,是什么,我也不知道

计算机程序之间的通宵,通过IP只能锁定计算机,但无法锁定具体的程序

通过端口可以锁定计算机上具体的程序,确保程序之间进行沟通

IP地址相当于小区地址,在小区内可以有许多住户(程序),而门牌号(端口)就是各个住户(程序)的联系地址

这个例子很形象

IP地址是用来查找计算机的,比如两台计算机,就可以通过IP找到对方

但是计算机上的程序与对方计算机上的程序怎么通讯,那就是靠端口

打个比方,和人用微信聊天,怎么收到信息

IP地址只是起到了找到对方计算机的作用,但是对方计算机上有很多程序。加速我的计算机上的微信端口是5101,对方的计算机上微信程序的端口是5110

我需要发送的微信信息会从我电脑的5101端口出来,然后查找IP地址找到对方的电脑,但是对方电脑有很多程序,所以找到对方电脑微信的端口5110,完成通信

就像你去朋友家玩,找到他家的小区(IP),然后找到他家(端口)。就是这么个道理

虚拟端口,程序的端口或者是接口。

Liux系统是一个超大号小区,可以支持65535个端口,这6万多个端口分为3类进行使用:

  • 公认端口:1~1023,通常用于一些系统内置或知名程序的预留使用,如SSH服务的22端口,HTTPS服务的443端口,非特殊需要,不要占用这个范围的端口
  • 注册端口:1024~49151,通常可以随意使用,用于松散的绑定一些程序\服务
  • 动态端口:49152·65535,通常不会固定绑定程序,而是当程序对外进行网络链接时,用于临时使用。

上面的叙述是Linux的端口

公认端口,系统已经设好了,我们不能随意改动,我的期末考试还考过,ssh服务的端口是什么,22

注册端口,可以改动、使用。可以绑定一些需要通讯的程序或者服务

动态端口,当程序需要访问网络时,就会使用一个临时端口。多用于出口。比如微信发出消息的时候用的就是动态端口

netstat命令的基本使用

查看端口占用可以用nmap命令

这个命令需要yum安装

yum install nmap

语法:nmap 被查看的ip

[root@yang ~]# nmap 127.0.0.1

Starting Nmap 6.40 ( http://nmap ) at 2023-02-04 12:17 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000030s latency).
Not shown: 996 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
111/tcp open  rpcbind
631/tcp open  ipp

nmap 127.0.0.1查看当前Linux占用的端口,127.0.0.1本机

22,ssh我正在远程登录

25是smtp,邮件

等等,内置的服务

也可以通过netstat命令查看端口有没有被占用

需要安装yum -y install net-tools ,好像已经安装好了

注意,这个命令名和程序名不一样,

语法:netstat -anp |grep 端口号

[root@yang ~]# netstat -nap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      579/rpcbind
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1260/dnsmasq
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1064/sshd
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1065/cupsd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1344/master
tcp        0      0 192.168.88.66:22        192.168.88.1:59017      ESTABLISHED 1714/sshd: yang [pr
tcp        0     36 192.168.88.66:22        192.168.88.1:57708      ESTABLISHED 4379/sshd: yang [pr
tcp6       0      0 :::111                  :::*                    LISTEN      579/rpcbind
tcp6       0      0 :::22                   :::*                    LISTEN      1064/sshd
tcp6       0      0 ::1:631                 :::*                    LISTEN      1065/cupsd
tcp6       0      0 ::1:25                  :::*                    LISTEN      1344/master
udp        0      0 192.168.122.1:53        0.0.0.0:*                           1260/dnsmasq
udp        0      0 0.0.0.0:67              0.0.0.0:*                           1260/dnsmasq
udp        0      0 0.0.0.0:111             0.0.0.0:*                           579/rpcbind
udp        0      0 0.0.0.0:47756           0.0.0.0:*                           635/avahi-daemon: r
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           635/avahi-daemon: r
udp        0      0 0.0.0.0:751             0.0.0.0:*                           579/rpcbind
udp        0      0 127.0.0.1:323           0.0.0.0:*                           606/chronyd
udp6       0      0 :::111                  :::*                                579/rpcbind
udp6       0      0 :::751                  :::*                                579/rpcbind
udp6       0      0 ::1:323                 :::*                                606/chronyd
raw6       0      0 :::58                   :::*                    7           751/NetworkManager
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   PID/Program name     Path
unix  2      [ ACC ]     SEQPACKET  LISTENING     14087    1/systemd            /run/udev/control
unix  2      [ ACC ]     STREAM     LISTENING     21613    627/gssproxy         /var/lib/gssproxy/default.sock
unix  2      [ ACC ]     STREAM     LISTENING     29034    1085/gdm             @/tmp/dbus-fSl7QpbT
unix  2      [ ACC ]     STREAM     LISTENING     13848    1/systemd            /run/lvm/lvmetad.socket
unix  2      [ ]         DGRAM                    13850    1/systemd            /run/systemd/shutdownd
...

如果输入netstat -nap, 那么就会把所有有关端口和网络的全部显示出来。

这样比较复杂,不容易看。所以需要grep命令过滤

[root@yang ~]# netstat -nap |grep 22
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1260/dnsmasq
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1064/sshd
tcp        0      0 192.168.88.66:22        192.168.88.1:59017      ESTABLISHED 1714/sshd: yang [pr
tcp        0     36 192.168.88.66:22        192.168.88.1:57708      ESTABLISHED 4379/sshd: yang [pr
tcp6       0      0 :::22                   :::*                    LISTEN      1064/sshd
udp        0      0 192.168.122.1:53        0.0.0.0:*                           1260/dnsmasq
unix  2      [ ACC ]     STREAM     LISTENING     22341    619/VGAuthService    /var/run/vmware/guestServicePipe
unix  3      [ ]         STREAM     CONNECTED     31522    1468/dbus-daemon     @/tmp/dbus-lC18CxBRcy
unix  3      [ ]         STREAM     CONNECTED     21227    1/systemd            /run/systemd/journal/stdout
unix  3      [ ]         STREAM     CONNECTED     32322    1/systemd            /run/systemd/journal/stdout
unix  2      [ ]         DGRAM                    22023    596/polkitd
unix  3      [ ]         STREAM     CONNECTED     21226    623/vmtoolsd
unix  3      [ ]         STREAM     CONNECTED     31227    1585/gsd-xsettings
unix  3      [ ]         STREAM     CONNECTED     32293    1468/dbus-daemon     @/tmp/dbus-lC18CxBRcy
unix  3      [ ]         STREAM     CONNECTED     58922    4391/sshd: yang@pts
unix  3      [ ]         STREAM     CONNECTED     31228    1448/X               @/tmp/.X11-unix/X0
unix  3      [ ]         STREAM     CONNECTED     32291    1638/gsd-smartcard
unix  3      [ ]         STREAM     CONNECTED     28622    1344/master
unix  3      [ ]         STREAM     CONNECTED     19622    605/lsmd
unix  3      [ ]         STREAM     CONNECTED     29822    1527/pulseaudio      /run/user/42/pulse/native
unix  3      [ ]         STREAM     CONNECTED     21322    628/bluetoothd
unix  3      [ ]         STREAM     CONNECTED     32296    578/dbus-daemon      /run/dbus/system_bus_socket
unix  3      [ ]         STREAM     CONNECTED     31223    1587/gsd-a11y-setti
unix  2      [ ]         DGRAM                    27221    1083/crond
unix  3      [ ]         STREAM     CONNECTED     31322    1/systemd            /run/systemd/journal/stdout
unix  3      [ ]         STREAM     CONNECTED     31224    1468/dbus-daemon     @/tmp/dbus-lC18CxBRcy
unix  3      [ ]         STREAM     CONNECTED     32295    1634/gsd-sharing

netstat -nap |grep 22过滤所有有关22端口的

[root@yang ~]# netstat -nap |grep 111
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      579/rpcbind
tcp6       0      0 :::111                  :::*                    LISTEN      579/rpcbind
udp        0      0 0.0.0.0:111             0.0.0.0:*                           579/rpcbind
udp6       0      0 :::111                  :::*                                579/rpcbind
unix  3      [ ]         STREAM     CONNECTED     21113    619/VGAuthService
unix  3      [ ]         STREAM     CONNECTED     21114    1/systemd            /run/systemd/journal/stdout
[root@yang ~]# netstat -nap |grep 579
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      579/rpcbind
tcp6       0      0 :::111                  :::*                    LISTEN      579/rpcbind
udp        0      0 0.0.0.0:111             0.0.0.0:*                           579/rpcbind
udp        0      0 0.0.0.0:751             0.0.0.0:*                           579/rpcbind
udp6       0      0 :::111                  :::*                                579/rpcbind
udp6       0      0 :::751                  :::*                                579/rpcbind

可以通过端口过滤,也可以通过进程号过滤

[root@yang ~]# netstat -nap |grep 12345
[root@yang ~]#

12345这个端口没有占用

他这个过滤,有一个问题,我要过滤22,可能也会把1221的过滤出来

端口是ip:端口表示的

0.0.0.0:22 应该是ssh服务端口

进程管理

进程的概念

程序运行在操作系统中,是被操作系统所管理的。
为管理运行的程序,每一个程序在运行的时候,便被操作系统注册为系统中的一个:进程
并会为每一个进程都分配一个独有的:进程D(进程号)

这个很容易理解,打开一个软件,就会有一个进程

安卓,ios叫的是后台,电脑上也叫后台

Windows电脑进程打开是ctrl-shift+esc

查看进程、关闭进程

可以通过ps命令查看Liux系统中的进程信息
语法:ps [-e -f]
选项:-e,磊示出全部的进到中
选项:-f,以完全格式化的形式展示信息(展示全部信息)
般来说,固定用法就是:ps -ef列出全部进程的全部信息

用这个命令可以查看进程

[root@yang ~]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 09:06 ?        00:00:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2      0  0 09:06 ?        00:00:00 [kthreadd]
root          4      2  0 09:06 ?        00:00:00 [kworker/0:0H]
root          6      2  0 09:06 ?        00:00:00 [ksoftirqd/0]
root          7      2  0 09:06 ?        00:00:00 [migration/0]
root          8      2  0 09:06 ?        00:00:00 [rcu_bh]
...

会把当前的进程全部列出来

从左到右分别是:

  • UID:进程所属的用户D
  • PID:进程的进程号ID
  • PPID:进程的父ID(启动此进程的其它进程)
  • C:此进程的CPU占用率(百分比)
  • STIME:进程的启动时间
  • TTY:启动此进程的终端序号,如显示?,表示非终端启动
  • TIME:进程占用CPU的时间
  • CMD:进程对应的名称或启动路径或启动命令

这个就是ps命令的标头

UID PID PPID C STIME TTY TIME CMD
用户id 进程ID 父ID 占有率 启动时间 终端序号 占用时间 名称/路径/命令

记住ps -ef命令就可以了。

执行命令,会列出一大堆内容,这个时候就可以配合grep过滤使用

比如我打开两个终端,一个终端执行tail命令,这个命令可以一直执行下去

第一个终端,正在执行tail

[root@yang ~]# tail

我现在再开一个终端

[root@yang ~]# ps -ef
...
root       4981      2  0 13:21 ?        00:00:00 [kworker/0:1]
root       4990   4444  0 13:22 pts/1    00:00:00 tail
root       4999   1064  0 13:23 ?        00:00:00 sshd: yang [priv]
....

如果运气好,这个进程会更快发现,如果运气不好,那就

过滤一下

[root@yang yang]# ps -ef | grep tail
root       4990   4444  0 13:22 pts/1    00:00:00 tail
root       5109   5061  0 13:26 pts/2    00:00:00 grep --color=auto tail

就会过滤出这个进程

但是过滤出来了两个是为什么,grep会把与tail相关的内容全部过滤出来

ps -ef | grep tail也是一个进程,恰巧也包含tail

也可以过滤进行id、用户等等

[root@yang yang]# ps -ef | grep yang
avahi       635      1  0 09:07 ?        00:00:00 avahi-daemon: running [yang.local]
root       1714   1064  0 09:07 ?        00:00:00 sshd: yang [priv]
yang       1738   1714  0 09:07 ?        00:00:00 sshd: yang@pts/0
yang       1741   1738  0 09:07 pts/0    00:00:00 -bash
root       4379   1064  0 12:32 ?        00:00:00 sshd: yang [priv]
yang       4391   4379  0 12:32 ?        00:00:00 sshd: yang@pts/1
yang       4394   4391  0 12:32 pts/1    00:00:00 -bash
root       4999   1064  0 13:23 ?        00:00:00 sshd: yang [priv]
yang       5003   4999  0 13:23 ?        00:00:00 sshd: yang@pts/2
yang       5006   5003  0 13:23 pts/2    00:00:00 -bash
root       5120   5061  0 13:27 pts/2    00:00:00 grep --color=auto yang

找出用户yang启动的进程

[root@yang yang]# ps -ef | grep 1738
yang       1738   1714  0 09:07 ?        00:00:00 sshd: yang@pts/0
yang       1741   1738  0 09:07 pts/0    00:00:00 -bash
root       5159   5061  0 13:30 pts/2    00:00:00 grep --color=auto 1738

过滤进程id

怎么关闭进程呢,用kill

在Windows系统中,可以通过任务管理器选择进程后,点击结束进程从而关闭它。
同样,在Liux中,可以通过kil命令关闭进程。
语法:ki11 [-9] 进程ID
选项:-9,表示强制关闭进程。不使用此选项会向进程发送信号要求其关闭,但是否关闭看进程自身的处理机制。

-9是强制关闭,这就和word软件,当关闭程序时不是直接关闭,而是问你要不要保存文件,如果你没有修改文件那就直接关闭了

我们刚刚打开了一个tail进程,现在关闭

关闭需要用到进程id,所以先过滤出这个进程,的id

因为上面已经过滤出来了。是4990,

现在直接关闭

[root@yang yang]# kill 4990

另一个终端就会显示

[root@yang ~]# tail
已终止

已终止,这个不是强制关闭

我现在接着执行这个tail命令,强制关闭

[root@yang yang]# ps -ef | grep tail
root       5368   4444  0 13:52 pts/1    00:00:00 tail
root       5370   5061  0 13:52 pts/2    00:00:00 grep --color=auto tail

就算执行的是同一个命令,但是id不一样,要过滤一下

[root@yang yang]# kill -9 5368

-9强制关闭

[root@yang ~]# tail
已杀死

已杀死

会看进程,那也要会关闭进程。

主机状态监控

查看系统资源占用

可以通过top命令查看CPU、内存使用情况,类似Windows的任务管理器

默认每5秒刷新一次,语法:直接输入top即可,按q或ctrl + c退出

ps -ef是静态的,top动态的,每五秒更新一次

top显示的比较全面,比较酷炫。

top - 14:28:18 up  5:21,  1 user,  load average: 0.00, 0.01, 0.05
Tasks: 166 total,   1 running, 165 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   995672 total,    87356 free,   513940 used,   394376 buff/cache
KiB Swap:  2098172 total,  2097148 free,     1024 used.   310168 avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
  5584 root      20   0       0      0      0 S  0.3  0.0   0:00.30 kworker/0:0
     1 root      20   0  128280   6652   3892 S  0.0  0.7   0:03.25 systemd
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.01 kthreadd
     4 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H
     6 root      20   0       0      0      0 S  0.0  0.0   0:00.17 ksoftirqd/0
     7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0
     8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh
     9 root      20   0       0      0      0 S  0.0  0.0   0:00.46 rcu_sched
    10 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 lru-add-drain
    11 root      rt   0       0      0      0 S  0.0  0.0   0:00.14 watchdog/0
    13 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kdevtmpfs
    14 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 netns
    15 root      20   0       0      0      0 S  0.0  0.0   0:00.01 khungtaskd
    16 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 writeback
    17 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kintegrityd
    18 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset
    19 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset
    20 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset
    21 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kblockd
    22 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 md
    23 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 edac-poller
    24 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 watchdogd
    30 root      20   0       0      0      0 S  0.0  0.0   0:00.17 kswapd0

他这个内容很多,我们也是需要了解的

先看这段内容

top - 14:28:18 up  5:21,  1 user,  load average: 0.00, 0.01, 0.05
Tasks: 166 total,   1 running, 165 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   995672 total,    87356 free,   513940 used,   394376 buff/cache
KiB Swap:  2098172 total,  2097148 free,     1024 used.   310168 avail Mem
  • 第一行

    top - 14:28:18 up  5:21,  1 user,  load average: 0.00, 0.01, 0.05
    

    top:命令名称,14:28:18:当前系统时间,up 5:21:系统启动了5小时21分钟,1 users:1个用户登录,load average:1、5、15分钟平均负载,数字越大,负载越大

  • 第二行

    Tasks: 166 total,   1 running, 165 sleeping,   0 stopped,   0 zombie
    

    Tasks:166个进程,1 running:1个进程子在运行,165 sleeping:165个进程睡眠,0个停止进程,0个僵尸进程

  • 第三行

    %Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    

    %Cpu(s):CPU使用率,us:用户CPU使用率,sy:系统CPU使用率,ni:高优先级进程占用CPU时间百分比,id:空闲CPU率,wa:IO等待CPU占用率,hi:CPU硬件中断率,si:CPU软件中断率,st:强制等待占用CPU率

    重点关心us:用户自己的进程占用了多少CPU,sy:系统启动的进程占用了多少CPU

  • 第四、第五行

    KiB Mem :   995672 total,    87356 free,   513940 used,   394376 buff/cache
    KiB Swap:  2098172 total,  2097148 free,     1024 used.   310168 avail Mem
    

    Kib Mem:物理内存,total:总量,free:空闲,used:使用,buff/cache:buff和cache占用

    KibSwap:虚拟内存(交换空间),total:总量,free:空闲,used:使用,buff/cache:buff和cache占用

以上是置顶选项

接着看内容部分

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
  5584 root      20   0       0      0      0 S  0.3  0.0   0:00.30 kworker/0:0
  • PID:进程id

  • USER:进程所属用户

  • PR:进程优先级,越小越高

  • NI:负值表示高优先级,正表示低优先级

  • VIRT:进程使用虚拟内存,单位KB

  • RES:进程使用物理内存,单位KB

  • SHR:进程使用共享内存,单位KB

  • S:进程状态(S休眠,R运行,Z僵死状态,N负数优先级,I空闲状态)

  • %CPU:进程占用CPU率

  • %MEM:进程占用内存率

  • TIME+:进程使用CPU时间总计,单位10毫秒

  • COMMAND:进程的命令或名称或程序文件路径

这些指标写在这里,需要的时候过来看一下就可以了,接触到了也就明白了。

我们关心进程号PID,物理内存占用RES,CPU占用率%CPU和内存占用率%MEM就对了

  • top命令选项

    选项功能
    -p只显示某个进程的信息
    -d设置刷新时间,默认是5s
    -c显示产生进程的完整命令,默认是进程名
    -n指定刷新次数,比如top -n 3刷新输出3次后退出
    -b以非交互非全屏模式运行,以批次的方式执行top,一般配合–n指定输出几次统计信息,将输出重定向到指定文件,比如top -b -n 3 > /tmp/top.tmp
    -i不显示任何闲置(idle)或无用(zombie)的进程
    -u查找特定用户启动的进程
  • 交互式

    按键功能
    h键按下h键,会显示帮助画面
    c键按下c键,会显示产生进程的完整命令,等同于-c,再次按下c键,变为默认显示
    f键按下f键,可以选择需要展示的项目
    M键按下M键,根据驻留内存大小(RES)排序
    P键按下P键,根据CPU使用百分比大小进行排序
    T键按下T键,根据时间/累计时间进行排序
    E键按下E键,切换顶部内存显示单位
    e键按下e键,切换进程内存显示单位
    I键按下I键,切换显示评价负载和启动时间信息
    i键按下i键,不显示闲置和无用的进程,等同于-i参数,再次按下,变为默认显示
    t键按下t键,切换显示CPU状态信息
    m键按下m键,切换显示内存信息

这些内容,一时半会也是记不住,会使用这个命令算是成功了一半,这些还是需要在使用中学。

磁盘信息监控

使用df命令,可以查看硬盘的使用情况

语法:df [-h]

  • 选项:-h,以更加人性化的单位显示
[yang@yang ~]$ df
文件系统          1K-块    已用     可用 已用% 挂载点
devtmpfs         482100       0   482100    0% /dev
tmpfs            497836       0   497836    0% /dev/shm
tmpfs            497836    8492   489344    2% /run
tmpfs            497836       0   497836    0% /sys/fs/cgroup
/dev/sda3      60478616 5368476 55110140    9% /
/dev/sda1        303780  155540   148240   52% /boot
tmpfs             99568      12    99556    1% /run/user/42
tmpfs             99568       0    99568    0% /run/user/1000
[yang@yang ~]$ df -h
文件系统        容量  已用  可用 已用% 挂载点
devtmpfs        471M     0  471M    0% /dev
tmpfs           487M     0  487M    0% /dev/shm
tmpfs           487M  8.3M  478M    2% /run
tmpfs           487M     0  487M    0% /sys/fs/cgroup
/dev/sda3        58G  5.2G   53G    9% /
/dev/sda1       297M  152M  145M   52% /boot
tmpfs            98M   12K   98M    1% /run/user/42
tmpfs            98M     0   98M    0% /run/user/1000

已用,可用,等等这些与硬盘的信息全部显示了出来。

但是这个并不是像Windows显示,文件系统不一样。我还是不会看。

可以使用iostat查看CPU、磁盘的相关信息

语法:iostat [-x] [num1] [num2]

  • 选项:-x,显示更多信息

  • num1:数字,刷新间隔,num2:数字,刷新几次

[yang@yang ~]$ iostat
Linux 3.10.0-1160.el7.x86_64 (yang)     2023年02月04日  _x86_64_        (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.08    0.00    0.13    0.01    0.00   99.78

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.89        25.17         2.29     707375      64314

tps:该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)。“一次传输"意思是"一次I/O请求”。多个逻辑请求可能会被合并为"一次I/O请求"。"一次传输"请求的大小是未知的。

不带选项,输出基本信息,可以把这段信息分成三份

Linux 3.10.0-1160.el7.x86_64 (yang)     2023年02月04日  _x86_64_        (1 CPU)

这应该是系统信息,

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.08    0.00    0.13    0.01    0.00   99.78

cpu信息,top里面都有

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.89        25.17         2.29     707375      64314

这应该就是硬盘的信息

tps:每秒传输速度;kB_read/s:每秒读了多少kb;kB_wrtn/s:每秒写了多少kb;kB_read:总读取数;kB_wrtn:总写入数

如果加上-x,显示信息会更多

[yang@yang ~]$ iostat -x
Linux 3.10.0-1160.el7.x86_64 (yang)     2023年02月04日  _x86_64_        (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.08    0.00    0.13    0.01    0.00   99.78

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.02    0.64    0.23    24.67     2.26    61.50     0.00    0.32    0.33    0.27   0.22   0.02

  • rrqm/s: 每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge, 提高IO利用率, 避免重复调用);

  • wrqm/s: 每秒这个设备相关的写入请求有多少被Merge了。

  • rsec/s: 每秒读取的扇区数;sectors

  • wsec/: 每秒写入的扇区数。

  • rKB/s: 每秒发送到设备的读取请求数

  • wKB/s: 每秒发送到设备的写入请求数

  • avgrq-sz 平均请求扇区的大小

  • avgqu-sz 平均请求队列的长度。毫无疑问,队列长度越短越好。

  • await: 每一个IO请求的处理的平均时间(单位是微秒毫秒)。

  • svctm 表示平均每次设备I/O操作的服务时间(以毫秒为单位)

  • %util: 磁盘利用率

把老师的教案复制过来了,这些不是咱们的重点,了解一下

rKB/s、wKB/s、%ntil这三个指标重点关注一下

[yang@yang ~]$ iostat -x 3 3

每隔3秒输出1次,一共输出3次

[yang@yang ~]$ iostat -x 1

每一秒输出一次,永久输出,ctrl+c结束

[yang@yang ~]$ iostat 3 3

也可以不用-x

df命令插件硬盘使用率信息,iostat查看硬盘速率信息

网络状态监控

可以使用sar命令查看网络的相关统计(sar命令非常复杂,这里仅简单用于统计网络)

语法:sar -n DEV num1 num2

  • 选项:-n,查看网络,DEV表示查看网络接口

  • num1:刷新间隔(不填就查看一次结束),num2:查看次数(不填无限次数)

[yang@yang ~]$ sar -n DEV
Linux 3.10.0-1160.el7.x86_64 (yang)     2023年02月04日  _x86_64_        (1 CPU)

09时07分02秒       LINUX RESTART

09时10分01秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
09时20分01秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
09时20分01秒 virbr0-nic      0.00      0.00      0.00      0.00      0.00      0.00      0.00
09时20分01秒    virbr0      0.00      0.00      0.00      0.00      0.00      0.00      0.00
09时20分01秒     ens33      0.37      0.24      0.03      0.03      0.00      0.00      0.00
...

平均时间:     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
平均时间:        lo      0.07      0.07      0.00      0.00      0.00      0.00      0.00
平均时间: virbr0-nic      0.00      0.00      0.00      0.00      0.00      0.00      0.00
平均时间:    virbr0      0.00      0.00      0.00      0.00      0.00      0.00      0.00
平均时间:     ens33      0.31      0.37      0.16      0.48      0.00      0.00      0.00

信息解读:

  • IFACE 本地网卡接口的名称

  • rxpck/s 每秒钟接受的数据包

  • txpck/s 每秒钟发送的数据包

  • rxKB/S 每秒钟接受的数据包大小,单位为KB

  • txKB/S 每秒钟发送的数据包大小,单位为KB

  • rxcmp/s 每秒钟接受的压缩数据包

  • txcmp/s 每秒钟发送的压缩包

  • rxmcst/s 每秒钟接收的多播数据包

这些都是专业信息,

关注rxKB/S和txKB/S即可

sar -n DEV 3

每三秒刷新一次,没有次数无限刷新,ctrl+c

sar -n DEV 3 3

每三秒刷新一次,一共三次

环境变量

环境变量的作用

环境变量是操作系统(Windows、Linux、Mac)在运行的时候,记录的一些关键性信息,用以辅助系统运行。

在Linux系统中执行:env命令即可查看当前系统中记录的环境变量

环境变量是一种KeyValue型结构,

什么是环境变量呢,一开始我也不懂,暑假学了Java,老师说了一部分,

环境变量就是为了方便,先说Windows,因为环境变量是通用的,我把qq撞在了D盘的qq文件下。在命令行输入qq,肯定是找不到的,qq不是内部命令或者程序

那就需要把qq的路径加入环境变量,然后再在命令行输入qq,就可以打卡了

说白了,计算机不知道你把这个程序放在了哪里,你通过环境变量告诉计算机我放在了这里。

Linux也是这个道理,

env命令,查看系统的环境变量

[root@yang yang]# env
XDG_SESSION_ID=70
HOSTNAME=yang
SELINUX_ROLE_REQUESTED=
SHELL=/bin/bash
TERM=xterm-256color
HISTSIZE=1000
SSH_CLIENT=192.168.88.1 62882 22
SELINUX_USE_CURRENT_RANGE=
...
HISTCONTROL=ignoredups
HOME=/root
SHLVL=2
LOGNAME=yang
SSH_CONNECTION=192.168.88.1 62882 192.168.88.66 22
XDG_DATA_DIRS=/home/yang/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/1000
_=/usr/bin/env

输入env,输出环境变量的信息,是以KeyValue形式存在

说回Linux,我们经常用的cd命令,

在这里还是要说一下,cd虽然是个命令,其实是个程序,他的目录是/usr/bin/cd那么是程序,应该是在他的目录里面执行呀,那为什么我无论在那个目录,都可以执行cd,这就是因为把这个目录加入了环境变量,告诉了电脑在哪里,所以可以使用

[root@yang yang]# env |grep PATH
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/yang/.local/bin:/home/yang/bin

PATH记录了系统执行任何命令的搜索路径,如上图记录了(路径之间以:隔开):

  • /usr/local/bin

  • /usr/bin

  • /usr/local/sbin

  • /usr/sbin

  • /home/itheima/.local/bin

  • /home/itheima/bin

当执行任何命令,都会按照顺序,从上述路径中搜索要执行的程序的本体

比如执行cd命令,就从第二个目录/usr/bin中搜索到了cd命令,并执行

env列出所以的环境变量,可以用grep过滤一下PATH,

PATH记录了一些系统命令的路径。路径之间用:隔开。

为什么说cd无论在哪个目录都可以执行,因为把cd命令的路径告诉了电脑,所以就可以在任何目录里面使用

环境变量,那就是把路径告诉电脑。把cd的目录告诉了电脑。所以可以使用。

符合$的作用

在Linux系统中,$符号被用于取”变量”的值。

环境变量记录的信息,除了给操作系统自己使用外,如果我们想要取用,也可以使用。

取得环境变量的值就可以通过语法:$环境变量名 来取得

的作用就是把变量的值取出来,前面想要得到变量的值通过过滤,现在可以直接用 的作用就是把变量的值取出来,前面想要得到变量的值通过过滤,现在可以直接用 的作用就是把变量的值取出来,前面想要得到变量的值通过过滤,现在可以直接用取出来,当然,你要知道变量名

[yang@yang ~]$ $PATH
-bash: /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/yang/.local/bin:/home/yang/bin: 没有那个文件或目录

如果用$PATH结果取出来了,但是还是有报错。

[yang@yang ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/yang/.local/bin:/home/yang/bin

echo $PATH就是一个完整的

[yang@yang ~]$ echo $PWD
/home/yang
[yang@yang ~]$ echo $PWDABC

[yang@yang ~]$ echo ${PWD}ABC
/home/yangABC

echo $PWD输出的是/home/yang

但是echo $PWDABC什么也没有输出,因为没有PWDABC这个变量

echo ${PWD}ABC 可以用花括号把变量括起来

[yang@yang ~]$ echo 我的PATH变量{$PATH}
我的PATH变量{/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/yang/.local/bin:/home/yang/bin}

这样类似字符串拼接,

Linux中配置环境变量

Linux环境变量可以用户自行设置,其中分为:

  • 临时设置,语法:export 变量名=变量值
  • 永久生效
    • 针对当前用户生效,配置在当前用户的: ~/.bashrc文件中
    • 针对所有用户生效,配置在系统的: /etc/profile文件中
    • 并通过语法:source 配置文件,进行立刻生效,或重新登录FinalShell生效

接下来就是要配置环境变量了,Windows里的环境变量我刚学会就要学Linux的了

有两种方法

临时设置

[yang@yang ~]$ export myname=yangy
[yang@yang ~]$ echo $myname
yangy

这个很简单。变量名=变量值,完成

变量可以大小也可以小写把,一般大写。

重启终端,变量就会消失

我给我的这个用户设置环境变量,对当前用户

首先用vim打开~/.bashrc文件

vim ~/.bashrc

编辑的话,还是添加上面的内容,不过是大写

export MYNAME=yangy

退出文件后,还有执行一个命令,才可以生效

source ~/.bashrc

然后就会出现结果

[yang@yang ~]$ echo $MYNAME
yangy

为所有用户配置,需要管理员

编辑 /etc/profile这个文件

vim /etc/profile

写入

export ROOTNAME=ROOTYANGY

保存后

source  /etc/profile

如果不执行这个命令,可能会设置不成功

然后看看有没有设置成功

[test1@yang ~]$ echo $ROOTNAME
ROOTYANGY
[test2@yang root]$ echo $ROOTNAME
ROOTYANGY

我用uesradd命令创建了两个用户,然后echo输出变量,输出出来了

[yang@yang ~]$ echo $ROOTNAME
ROOTYANGY

我自己的用户yang也是可以,证明全局变量设置成功

对单独用户配置只需要修改~/.bashrc文件,如果是全局,用管理员修改/etc/profile文件

环境变量PATH这个项目里面记录了系统执行命令的搜索路径。

这些搜索路径我们也可以自行添加到PATH中去。

在Windows中配置Java、python等一些环境变量都会在PATH中添加,Linux也不例外。把一些程序的路径添加到PATH里面,告诉电脑这个文件的位置,下次无论在什么地方都可以使用

先写个文件,让他可以以程序的形式去执行

[root@yang ~]# pwd
/root
[root@yang ~]# mkdir myenv
[root@yang ~]# cd myenv/
[root@yang myenv]# vim hello
总用量 4
-rw-r--r--. 1 root root 19 2月   5 10:27 hello
[root@yang myenv]# chmod 755 hello
[root@yang myenv]# ll
总用量 4
-rwxr-xr-x. 1 root root 19 2月   5 10:27 hello
[root@yang myenv]# ./hello
hello world

先看了一下我的当前目录,在我的根目录/root,然后我创建了一个目录myenv,在里面创建了一个文件hello

这里有个知识点,文件想要以程序的形式运行,必须有x权限,所以用chmod修改了权限

执行命令./hello,输出`hello world

这样看起来一切都很正常,但是如果我换了目录,那就会出现找不到命令

[yang@yang ~]$ hello
bash: hello: 未找到命令...
[root@yang ~]# hello
bash: hello: 未找到命令...
[root@yang /]# hello
bash: hello: 未找到命令...

这就是因为你没有把这个程序的路径告诉电脑,也就要配置环境变量PATH

编辑配置文件

vim /etc/profile

添加内容

export PATH=$PATH:/root/myenv

为什么要这么写,$是去变量值,因为要修改PATH变量,但是还要保持原有变量的内容,所以把原有PATH 变量的值取出来,然后在把我写的程序的目录/root/myenv添加到PATH。

一句话,就是为了方便,修改PATH变量的时候把之前变量值里的内容取出来

source  /etc/profile

然后我们看更改后的效果,建议重启终端

[root@yang ~]# hello
hello world
[root@yang /]# hello
hello world

上传、下载

通过FinalShell在Linux系统中进行上传、下载

我们可以通过FinalShell工具,方便的和虚拟机进行数据交换。

在FinalShell软件的下方窗体中,提供了Linux的文件系统视图,可以方便的:

  • 浏览文件系统,找到合适的文件,右键点击下载,即可传输到本地电脑

  • 浏览文件系统,找到合适的目录,将本地电脑的文件拓展进入,即可方便的上传数据到Linux中

这个就是用这个软件下载或者上传文件

[yang@yang ~]$ ll
总用量 90872
-rw-rw-r--. 1 yang yang 93052469 6月  17 2020 Miniconda3-py38_4.8.3-Linux-x86_64.sh
drwxr-xr-x. 2 yang yang        6 2月   2 21:11 公共
...

现在就把 Miniconda3-py38_4.8.3-Linux-x86_64.sh软件下载到Windows电脑

也可以上传

掌握rz、sz命令

当然,除了通过FinalShell的下方窗体进行文件的传输以外,也可以通过rz、sz命令进行文件传输。

rz、sz命令需要安装,可以通过:,即可安装。

  • rz命令,进行上传,语法:直接输入rz即可
  • sz命令进行下载,语法:sz 要下载的文件

注意,rz、sz命令需要终端软件支持才可正常运行

FinalShell、SecureCRT、XShell等常用终端软件均支持此操作

先安装这个软件

[root@yang yang]# sz Miniconda3-py38_4.8.3-Linux-x86_64.sh

sz,即可下载软件到Windows,会自动在Windows的桌面创建一个fsdownload文件夹

输入rz上传文件,上传文件要选择文件、

但是这两种方法我觉得都不是真正的Linux与Windows互传文件的最好方法,但是这个简单

也对软件有限制。

但是能用

压缩、解压

市面上有非常多的压缩格式

  • zip格式:Linux、Windows、MacOS,常用

  • 7zip:Windows系统常用

  • rar:Windows系统常用

  • tar:Linux、MacOS常用

  • gzip:Linux、MacOS常用

在Windows系统中常用的软件如:winrar、bandizip等软件,都支持各类常见的压缩格式,这里不多做讨论。

我们现在要学习,如何在Linux系统中操作:tar、gzip、zip这三种压缩格式

完成文件的压缩、解压操作。

压缩包很常见,把一个文件夹打包成压缩包发送给对方。

在Windows中我一般会用zip格式压缩包,bandizip软件

现在Linux也是有压缩包的,需要学会如何在命令行解压缩文件,其中Linux常见的压缩包格式是tar和gzip

使用tar命令压缩或解压tar或gzip文件

Linux和Mac系统常用有2种压缩格式,后缀名分别是:

  • .tar,称之为tarball,归档文件,即简单的将文件组装到一个.tar的文件内,并没有太多文件体积的减少,仅仅是简单的封装

  • .gz,也常见为.tar.gz,gzip格式压缩文件,即使用gzip压缩算法将文件压缩到一个文件内,可以极大的减少压缩后的体积

针对这两种格式,使用tar命令均可以进行压缩和解压缩的操作

语法:tar [-c -v -x -f -z -C] 参数1 参数2 ... 参数N

  • -c,创建压缩文件,用于压缩模式

  • -v,显示压缩、解压过程,用于查看进度

  • -x,解压模式

  • -f,要创建的文件,或要解压的文件,-f选项必须在所有选项中位置处于最后一个

  • -z,gzip模式,不使用-z就是普通的tarball格式

  • -C,选择解压的目的地,用于解压模式

Linux压缩包格式常见的有两种,.tar.gz

.tar :归档文件,不会减少文件体积,他就是把几个文件放到一个袋子里面

.gz:采用了压缩算法,减小文件体积

tar的常用组合为:

  • tar -cvf test.tar 1.txt 2.txt 3.txt

    将1.txt 2.txt 3.txt 压缩到test.tar文件内

  • tar -zcvf test.tar.gz 1.txt 2.txt 3.txt

    将1.txt 2.txt 3.txt 压缩到test.tar.gz文件内,使用gzip模式

注意:

  • -z选项如果使用的话,一般处于选项位第一个

  • -f选项,必须在选项位最后一个

[yang@yang 桌面]$ ll
总用量 0
-rw-rw-r--. 1 yang yang 0 2月   5 11:05 1.txt
-rw-rw-r--. 1 yang yang 0 2月   5 11:05 2.txt
-rw-rw-r--. 1 yang yang 0 2月   5 11:05 3.txt

我的桌面上有3个文件,然后我进行压缩

[yang@yang 桌面]$ tar -cvf test.tar 1.txt 2.txt 3.txt
1.txt
2.txt
3.txt
[yang@yang 桌面]$

标准压缩,-v显示压缩过程,就这样文件压缩完成了

-rw-rw-r--. 1 yang yang 10K 2月   5 11:17 test.tar

但是文件的体积是0,三个文件的体积应该也是0,但是压缩包的体积是10K

所以说,tar格式压缩文件不会减少体积

[yang@yang 桌面]$ tar -zcvf test.tar.gz 1.txt 2.txt 3.txt
1.txt
2.txt
3.txt
[yang@yang 桌面]$ 

-z,gzip模式压缩,gzip模式压缩的文件后缀名最好是.tar.gz,或者还在必须是.gz结尾

-rw-rw-r--. 1 yang yang 130 2月   5 11:21 test.tar.gz

压缩文件的大小,三个文件大小为0,应该这个也是0呀,但是是130

不过与上面的10k相比,确实减少了好几倍

这两种压缩格式都能完成压缩,压缩的时候看需求,没有体积要求,可以用tar格式,有要求那就按要求来

常用的tar解压组合有

  • tar -xvf test.tar

    解压test.tar,将文件解压至当前目录

  • tar -xvf test.tar -C /home/itheima

    解压test.tar,将文件解压至指定目录(/home/itheima)

  • tar -zxvf test.tar.gz -C /home/itheima

    以Gzip模式解压test.tar.gz,将文件解压至指定目录(/home/itheima)

注意:

  • -f选项,必须在选项组合体的最后一位
  • -z选项,建议在开头位置
  • -C选项单独使用,和解压所需的其它参数分开
[yang@yang 桌面]$ tar -xvf test.tar
1.txt
2.txt
3.txt
[yang@yang 桌面]$ ls
1.txt  2.txt  3.txt  test.tar  test.tar.gz

这是第一种解压方式,注意-c和-x对立,只能有一个存在,因为你不可能同时压缩和解压文件

[yang@yang 桌面]$ tar -zxvf test.tar.gz
1.txt
2.txt
3.txt
[yang@yang 桌面]$ ls
1.txt  2.txt  3.txt  test.tar  test.tar.gz

加上-z用于解压.gz文件

[yang@yang 桌面]$ tar -xvf test.tar -C t
1.txt
2.txt
3.txt
[yang@yang 桌面]$ ls t
1.txt  2.txt  3.txt

解压到指定目录

使用zip、unzip命令压缩或解压zip文件

zip

可以使用zip命令,压缩文件为zip压缩包

语法:zip [-r] 参数1 参数2 ... 参数N

•-r,被压缩的包含文件夹的时候,需要使用-r选项,和rm、cp等命令的-r效果一致

[yang@yang 桌面]$ zip test.zip 1.txt 2.txt 3.txt
  adding: 1.txt (stored 0%)
  adding: 2.txt (stored 0%)
  adding: 3.txt (stored 0%)
[yang@yang 桌面]$ ls
1.txt  2.txt  3.txt  t  test.zip 

压缩成zip格式

-rw-rw-r--. 1 yang yang 436 2月   5 12:09 test2.zip

这个也占体积

[yang@yang 桌面]$ zip -r test.zip t 1.txt 2.txt 3.txt
  adding: t/ (stored 0%)
  adding: t/1.txt (stored 0%)
  adding: t/2.txt (stored 0%)
  adding: t/3.txt (stored 0%)
  adding: 1.txt (stored 0%)
  adding: 2.txt (stored 0%)
  adding: 3.txt (stored 0%)
[yang@yang 桌面]$ ls
1.txt  2.txt  3.txt  t  test.zip

加上-r,把文件夹也压缩进去

unzip

使用unzip命令,可以方便的解压zip压缩包

语法:unzip [-d] 参数

  • -d,指定要解压去的位置,同tar的-C选项

  • 参数,被解压的zip压缩包文件

[yang@yang 桌面]$ unzip test2.zip
Archive:  test2.zip
 extracting: 1.txt
 extracting: 2.txt
 extracting: 3.txt
[yang@yang 桌面]$ ls
1.txt  2.txt  3.txt  t  test2.zip  test.zip

文件解压出来了

[yang@yang 桌面]$ unzip test.zip -d t2
Archive:  test.zip
   creating: t2/t/
 extracting: t2/t/1.txt
 extracting: t2/t/2.txt
 extracting: t2/t/3.txt
 extracting: t2/1.txt
 extracting: t2/2.txt
 extracting: t2/3.txt
[yang@yang 桌面]$

-d,解压到指定目录,

[yang@yang 桌面]$ ls t2
1.txt  2.txt  3.txt  t
[yang@yang 桌面]$ ls t2/t
1.txt  2.txt  3.txt

test.zip是个文件夹,也全部解压出来了。

[yang@yang 桌面]$ unzip test.zip -d t
Archive:  test.zip
   creating: t/t/
 extracting: t/t/1.txt
 extracting: t/t/2.txt
 extracting: t/t/3.txt
replace t/1.txt? [y]es, [n]o, [A]ll, [N]one, [r]ename:

解压的时候遇到了重名文件,就会有一些操作,

y是;n不,A全部覆盖解压,N全部取消,r重命名

zip格式,Linux不常用,但是Windows常用,如果与Linux互传文件,可能会常用这种

tmux工具

tmux( Terminal Multiplexer )终端复用工具,从字面意思来看,就是一个终端可以同时进行多个工作。复用,重复使用。

同时还有一个很强大的功能,如果终端断开了,我们在连上还能继续之前的工作

这个断开然后再接上,我举个例子,Linux的ping命令,可以一直ping下去,但是如果关闭终端,那么再打开终端时会发现命令也会结束。

如果在tmux这个工具中使用,如果断开工具,然后再连接上,还是再继续ping下去。

tmux里面有三个名词

  • 会话(session):
  • 窗口(window):
  • 面板(panel)

一次会话就相当于一个任务,运行的一个程序,可以运行多个会话

一个会话里面可以有多个窗口,多个窗口里面可以有多个面板,我们是在面板里面进行工作的

这个工具还有一些特点

  • 因为可以有多个面板,所以我们协调这些窗口一起工作

  • 处于异地的两个人看,连接到同一个会话可以同步显示,实时工作。

  • 断开终端后重新连接还能继续之前工作

还有一些特定,我也是刚刚接触,所以写一点点,但是这个确实是一个好工具

安装

  • Ubuntu

    sudo apt-get install tmux 
    
  • CentOS

    yum install -y tmux
    

查看版本

tmux -v

会话

  • 新建会话

    tmux new -s <session_name>
    

    tmux new -s test新建一个会话,名称是test

  • 关闭会话

    方法一:ctrl+b d,

    方法二:终端输入exit

    方法三:终端输入 tmux detach

  • 连接会话

    tmux attach -t <session_name>
    
  • 显示全部会话

    tmux ls
    

    会输出一下内容

    (base) yang@yang-virtual-machine:~$ tmux ls
    test: 5 windows (created Sun Feb 26 13:12:09 2023)
    

    test:会话名称;5 windows:有5个窗口,(created Sun Feb 26 13:12:09 2023):会话创建时间

  • 杀死会话

     tmux kill-session -t <session_name>
    
  • 重命名会话

    tmux rename-session -t <old_session> <new_session>
    

    tmux rename-session -t test test1把test会话重命名为test1会话。

  • 切换会话

    tmux switch -t <session_name or session_id>
    

    tmux s -t 0
    
  • 快捷键

    快捷键说明
    CTRL+b ?列出所有快捷键,按q键返回
    CTRL+b d退出当前会话,
    CTRL+b s列出所有会话,回车键切换会话
    CTRL+b $重命名会话

窗口

快捷键说明
c新建窗口
&关闭当前窗口
数字键切换到指定窗口
p切换到上一个窗口
n切换到下一个窗口
l在前后两个窗口间互相切换
w通过窗口列表切换窗口
,重命名当前窗口
.修改当前窗口编号
f在所有窗口中查找指定文本

面板

快捷键说明
%窗口左右分割
"窗口上下分割
x关闭当前面板
!当该面板置于新的窗口
ctrl+方向键以1为单位调整面板大小
alt+方向键以5为单位调整面板大小
space在预设的布置面板布局中循环切换
q显示面板编号
o在当前滑板中选择面板
方向键移动光标选择面板
{向前置换当前面板
}向后置换当前面板
ali+o逆时针旋转当前窗口的面板
ctrl+o顺时针旋转当前窗口的面板

总结

前面写了三篇Linux博客,加上这一批,也算是对Linux有个操作了,

这一章在日常使用中也很有用,介绍了一些专业工具,软件下载、系统监控等等

Linux的学习也就告一段落。但在今后,肯定会用到。

命令太多了,就回来翻翻看看。

好了,我的笔记到此结束。

里面肯定有许许多多的bug,欢迎大家指出!毕竟这样成长更快。

也感谢大家可以看到这样,如果帮到了你,是我的荣幸。

谢谢大家!

更多推荐

Linux实用操作学习笔记

本文发布于:2023-04-16 00:19:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/407418798bde2369ad20bde4577bfd3f.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:学习笔记   操作   Linux

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 79736文章数
  • 80阅读数
  • 0评论数