各类小技巧(快捷键)
强制停止
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.cn
* extras: ftp.sjtu.edu.cn
* updates: ftp.sjtu.edu.cn
=================================================== 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.com
这里用的ntp服务器是阿里云的npt.aliyun.com
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.com,会打开百度的网址
其中www,baidu.com,是百度的网址,我们称之为:域名
域名解析看上去是个很深奥的名词,其实他就是把IP和网址直接转换
我们怎么上百度的,就是输入网址www,baidu.com,而不是输入百度的IP地址。当我们输入域名时,会自动解析成IP地址
就像我们叫一个人,会叫他的名字,而不是身份证号码。
访问www,baidu.com的流程
- 先查看本机的记录(私人记事本)
- 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的作用。
那么怎么做呢,有两个步骤
- 在VMware Workstation(或Fusion)中配置IP地址网关和网段(IP地址的范围)
- 在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.com
PING www.baidu.com (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.com 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.baidu.com
ping百度,延迟在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.cn/anaconda/miniconda/Miniconda3-py38_4.8.3-Linux-x86_64.sh --no-check-certificate
[root@yang yang]# wget https://mirrors.tuna.tsinghua.edu.cn/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.cn/anaconda/miniconda/Miniconda3-py38_4.8.3-Linux-x86_64.sh
正在解析主机 mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)... 101.6.15.130, 2402:f000:1:400::2
正在连接 mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)|101.6.15.130|:443... 已连接。
警告: 无法验证 mirrors.tuna.tsinghua.edu.cn 的由 “/C=US/O=Let's Encrypt/CN=R3” 颁发的证书:
颁发的证书已经过期。
已发出 HTTP 请求,正在等待回应... 307 Temporary Redirect
位置:https://mirrors.bfsu.edu.cn/anaconda/miniconda/Miniconda3-py38_4.8.3-Linux-x86_64.sh [跟随至新的 URL]
--2023-02-03 19:58:18-- https://mirrors.bfsu.edu.cn/anaconda/miniconda/Miniconda3-py38_4.8.3-Linux-x86_64.sh
正在解析主机 mirrors.bfsu.edu.cn (mirrors.bfsu.edu.cn)... 39.155.141.16, 2001:da8:20f:1003::fe55:2840
正在连接 mirrors.bfsu.edu.cn (mirrors.bfsu.edu.cn)|39.155.141.16|:443... 已连接。
警告: 无法验证 mirrors.bfsu.edu.cn 的由 “/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.cn/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.cn/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.cc
IP : 120.244.130.16
地址 : 中国 北京
运营商 : 移动
数据二 : 北京市 | 移动
数据三 : 中国北京北京市 | 移动
URL : http://www.cip.cc/120.244.130.16
cip.cc这个网站是一个公开的网址,可以获取主机的公网IP地址
返回了ip,地址、运营商等等数据,但是我看不懂
[yang@yang ~]$ curl www.baidu.com
<!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.com/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.com/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu.com/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.com name=tj_trnews class=mnav>新闻</a> <a href=http://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地图</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>视频</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a> </noscript> <script>document.write('<a href="http://www.baidu.com/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.com/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.com>关于百度</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>©2017 Baidu <a href=http://www.baidu.com/duty/>使用百度前必读</a> <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a> 京ICP证030173号 <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>
向百度发起网络请求,返回的是HTML源码
可以说我们是在浏览网页,只是没有渲染
这里像是python爬虫,爬取网页源码
[yang@yang ~]$ curl -O http://archive.apache.org/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.org ) 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,欢迎大家指出!毕竟这样成长更快。
也感谢大家可以看到这样,如果帮到了你,是我的荣幸。
谢谢大家!