5、Ubuntu20常用操作
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
进程管理
进程的概念
大家比较熟悉 Windows 下的可执行文件就是那些扩展名为exe的文件。
大家知道只需要鼠标双击这些程序 就可以运行了。
程序运行起来后我们把这个程序正在运行的 实例
称之为 进程
。
操作系统对每个进程都分配一个数字标记称为 进程ID (PID)。
Windows进程的信息可以通过 任务管理器看到。如下所示
比如上图中正在运行的计算器程序 Calculator.exe 的进程PID就是 3164
Linux系统中进程也有PID。
在Linux中你正在运行的交互式命令行程序 Shell 它就是一个进程。
我们可以用命令 ps 查看进程信息的命令。
$ ps
PID TTY TIME CMD
4786 pts/0 00:00:00 bash
如上所示当前bash shell的 进程 PID 为 4786
进程的创建与查看
Linux中一个进程A里面可以创建出一个新的进程B进程A就叫做进程B的 父进程
(parent process)。
进程B叫做进程A的子进程child process。
最典型的例子我们在shell中运行的程序命令都是shell进程创建的所以shell进程就是他们的父进程。
Linux中主要是通过ps命令来查看进程信息的我们运行命令ps -f 结果如下所示
[byhy@localhost ~]$ ps -f
UID PID PPID C STIME TTY TIME CMD
byhy 4786 1780 0 06:45 pts/0 00:00:00 -bash
byhy 1865 4786 0 06:55 pts/0 00:00:00 ps –f
其中 PPID这一列就是该进程的父进程的PID。
我们可以看出 ps 命令对应的进程的父进程PID为4786正是bash进程的PID。
下面列举了常用的 ps命令 的例子
ps
显示和当前终端有关的进程信息
ps -u byhy
显示byhy用户所创建的进程信息
ps -f
详细显示每个进程信息
ps -e
显示所有正在运行的进程信息
ps -ef
显示当前系统所有的进程
ps –ef | grep python
查找python进程
进程的前台、后台转换
Linux中一个进程A里面可以创建出一个新的进程B进程A就叫做进程B的 父进程
(parent process)。
进程B叫做进程A的子进程child process。
最典型的例子我们在shell中运行的程序命令都是shell进程创建的所以shell进程就是他们的父进程。
Linux中主要是通过ps命令来查看进程信息的我们运行命令ps -f 结果如下所示
[byhy@localhost ~]$ ps -f
UID PID PPID C STIME TTY TIME CMD
byhy 4786 1780 0 06:45 pts/0 00:00:00 -bash
byhy 1865 4786 0 06:55 pts/0 00:00:00 ps –f
其中 PPID这一列就是该进程的父进程的PID。
我们可以看出 ps 命令对应的进程的父进程PID为4786正是bash进程的PID。
下面列举了常用的 ps命令 的例子
ps
显示和当前终端有关的进程信息
ps -u byhy
显示byhy用户所创建的进程信息
ps -f
详细显示每个进程信息
ps -e
显示所有正在运行的进程信息
ps -ef
显示当前系统所有的进程
ps –ef | grep python
查找python进程
进程的前台、后台转换
Linux终端通过Shell程序来接收用户输入的命令并且执行命令。
我们在Shell里正在执行的和用户进行人机交互的进程叫 前台进程
(foreground process)
前台进程可以接收键盘输入并将结果显示在显示器上。
用户敲入什么命令shell就会启动对应的程序运行在 前台
。
比如大家可以用vi 编写一个 下面的Python程序到 Linux主机上代码文件名可以为t1.py
while True:
info = input("please input something:")
print("you input:%s\n\n" % info)
然后使用命令 python3 t1.py
运行。
可以发现及时这个 python 程序变成了前台进程接收用户的输入。
有些程序运行时并不需要和用户进行交互也就是说不需要用户输入什么内容。 比如一个日志分析程序一个定时清理磁盘文件的程序。
比如下面这样的一个Python程序 t2.py
import time
while True:
print("execute a task ...")
time.sleep(2)
print("done, wait for an hour to proceed...")
time.sleep(3600)
我们可以执行命令 python3 t2.py
运行它
这样的程序运行期间如果在前台执行我们只能等待它结束不然我们没法执行下个程序。
但是既然不需要用户输入信息在前台执行没有太大意义我们应该要让它在 后台
执行。
要让它在后台运行启动时只需在命令行的最后加上“&”符号。
比如 python3 t2.py &
后台运行的进程我们叫后台进程(background process)或者后台任务 它不直接和用户进行交互的进程。用户一般是感觉不到后台进程程序的运行。
当在后台运行命令时有时需要其输出重定向输出到一个文件中去以便以后检查。
比如 在后台运行find命令在当前目录及其子目路下查找文件名为 byhy 的文件。
$ find . -name byhy -print > log.txt &
4762
重定向的概念后面会讲。
nohup
我们可以执行命令的时候使用 & 结尾使进程在后台运行。
但是如果终端关闭那么程序也会被关闭因为shell会发送SIGHUP信号给这些进程。进程接收的该信号如果没有特别的处理缺省就会结束运行。
为了避免这种情况那么我们就可以使用 nohup
这个命令。
比如我们有个test.sh 需要在后台运行并且希望在后台能够一直运行即使关闭了终端也不退出。那么就使用nohup
nohup /root/test.sh &
进程的终止
进程一般有两种终止方式。
- 自行终止
有的进程执行完一段任务后就自行退出了。
比如上面的ps命令它执行完查看进程信息的任务后就会结束。
也有的不是自动退出而是用户操作它让它退出。 比如 我们在Shell进程中运行exit命令后该Shell进程就会退出。
也有的是异常退出比如程序有个bug比如代码里面有除以0的指令该程序无法执行下去也会终止。
- 被强行杀死
有的进程一直不结束如果用户觉得该进程应该被强行结束了该怎么办呢
对于一个前台进程要结束它我们只需要按组合键 Ctrl + C
。
对于一个后台运行的进程 如果用户觉得该进程应该被强行结束可以使用 kill -9
命令强行杀死该进程。
比如上面的 python3 t2.py 命令运行的进程。 我们可以先用ps命令查出它的进程PID
byhy@byhy-server:~$ ps -f
UID PID PPID C STIME TTY TIME CMD
byhy 2368 2367 0 08:38 pts/0 00:00:00 -bash
byhy 2386 2368 0 08:39 pts/0 00:00:00 python3 t1.py
byhy 2388 2368 0 08:39 pts/0 00:00:00 ps -f
如上所示的python进程PID为2386我们再执行命令 kill -9 2386
。 这样就强行停止了该进程。
要注意的是 上面所示的进程启动它的用户为byhy那么只能是用户byhy或者root用户才能杀死该进程
环境变量
Shell是个特殊的进程因为我们通过它来执行命令启动其他的进程的。所以它是很多进程的父进程。
Shell 这个父进程有很多特性会影响到我们执行命令其中非常重要的一个就是 环境变量
。
环境变量 设置了 进程运行的环境信息。
Linux 的环境变量具有继承性即:子进程 会继承父进程 的环境变量。
我们可以用命令printenv来查看当前shell的环境变量。
- 环境变量PATH
我们可以看到环境变量有很多通常我们最关注的一个就是环境变量是其中的 PATH
因为PATH 决定了当我们敲入命令的时候到哪里去找这个命令对应的可执行程序。
用命令 echo $PATH
来查看环境变量PATH的值比如
[byhy@localhost ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/byhy/bin
当我敲入命令ps后shell就会 依次
到下面的路径去寻找ps命令对应的可执行文件 /usr/local/bin -> /bin -> /usr/bin -> /usr/local/sbin -> /usr/sbin -> /sbin -> /home/byhy/bin
- 在环境变量PATH里面添加一个新的路径
方法一执行命令 export PATH
比如
export PATH=/test:$PATH
再次查看环境变量PATH的值结果如下
[byhy@localhost ~]$ echo $PATH
/test:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/byhy/bin
说明添加PATH成功。
但是这种方式生效时临时的。再次登录的时候PATH里面就又没有这个环境变量了。
需要一直生效可以使用方法二。
方式二写入到shell启动文件中
所谓shell启动文件Startup Files是指Shell启动时 会 自动加载执行
的文件。
既然这些文件会自动被shell加载执行通常我们可以在里面放入一些 例行
执行的命令比如设置一些环境变量。
bash Shell启动文件有好几个比如 /etc/profile
所有用户共享, ~/.bash_profile
, ~/.bashrc
。
通常建议把某个用户 独有的 设置环境变量的 命令放到用户家目录下面的 ~/.bashrc
文件中。
可以在文件的结尾加入一行
export PATH=/test:$PATH
好了下次登录的时候PATH里面就会多出/test
如果要对当前的shell就立即生效可以执行命令 source ~/.bashrc
重定向和管道
stdin/stdout/stderr 与 重定向
什么是终端设备
人在操作电脑时其实是和 运行着的程序术语称之为进程 在打交道术语称之为交互。
进程 是 看不见 摸不着的它们是 在 电脑CPU中执行的代码指令。
所以我们 和 进程 交互的时候必须有个设备我们才能通过它 输入信息给进程并且显示进程输出信息。
在上世纪六七十年代计算机网络还没有出现 计算机都是大型机器非常的昂贵。 通常只有大公司和研究机构才有。
那时人们通过终端设备和计算机上的程序进行交互见下图。
注意终端设备 只有 显示器 和键盘 是没有 主机部分的。它和主机之间有根信号线传递用户通过键盘输入的信息给程序并显示程序输出的信息。
这样的终端设备显然不能离主机太远。
人们需要在家、甚至在另外一个城市 操作远程主机就不能使用这样的终端。
后来有了计算机网络有了微型个人电脑我们可以使用个人电脑运行软件模拟终端设备比如 putty进行远程登录主机访问主机上的进程。
我们在模拟终端程序putty中输入信息查看putty程序窗口输出的内容。
这种 模拟终端的软件对Linux来说也是终端设备。
Linux进程在启动后通常就会打开3个文件句柄标准输入文件stdin标准输出文件stdout和 标准错误文件stderr。
Linux进程要从用户那里读入输入的信息就是从stdin文件里面读取信息要 输出 信息 给用户看 都是 输出到 stdout 要 输出 错误提示 给用户看 都是 输出到 stderr。
而缺省情况下这三个文件stdin、stdout、stderr 都指向 —— 终端设备。
也就是说
Linux进程从stdin里面读取信息其实就是从终端设备比如终端模拟程序Putty读取信息
Linux进程写入信息到stdout或者stderr其实就是打印到终端设备上。
如下图所示
比如运行下面的Python程序要读入信息就是从终端读入因为stdin指向终端设备
input("please input info:")
再比如下面的命令echo输出给用户看的就是输入到终端上因为stdout指向终端设备
[root@bogon ~]# echo "hello byhy"
hello byhy
Stdout、Stderr重定向
如果我们在Shell中输入命令的时候使用 >
符号 就可以将输入信息输出到其他文件包括设备文件中去。比如
ps > out
运行后我们会发现out文件里面出现了ps的输入信息而Putty终端窗口里面则没有任何内容打印出来了。
这个 >
就是 stdout 重定向符号 它表示 stdout 不是指向 终端设备了而是 重定向到 out 文件。 所以stdout 指向了 out 文件 输入的信息就到 out 文件了。 终端屏幕上就没有信息了。
这时对应的示意图如下
而Stderr的重定向符号 是 2>
。 注意 2 和 > 之间不能有空格。
比如我们执行下面的命令其中hhhh是个不存在的文件
ps hhhh 2> err
我们就会发现putty屏幕上没有任何信息而文件 err里面则有。
如果我们要同时重定向stdout和stderr到同一个文件both中命令写法如下
command &> both
如果我们要重定向stdout到out文件并重定向stderr到err文件命令写法如下
command > out 2>err
stdin重定向
我们也可以在命令中将 标准输入stdin 重定向使用符号 <
用 vi 创建一个 Python 代码文件 add.py
其内容如下
for i in xrange(3):
data=input()
print ('%s+1=%s' % (data,int(data)+1))
该程序从stdin 读取一个数字后显示其加1后的结果。
再创建一个文件 add.dat内容如下(注意3后面有个空行)
1
2
3
执行如下命令
[byhy@localhost ~]$ python3 add.py < add.dat
1+1=2
2+1=3
3+1=4
看到了吗不需要我们从终端输入数字该程序直接从文件 add.dat中读取数据并执行操作了。
这个 <
就是 stdin 重定向符号 它表示 stdin 不是指向 终端设备了而是 重定向到 add.dat 文件。 所以 stdin 指向了 add.dat 文件 程序就从add.dat 文件读入信息 了。
这时该进程对应示意图如下
管道
上面我们曾经学习过grep命令这个命令可以从文件中过滤出 包含指定字符串模式
的行。
比如我们有个文件file1里面有的行包含了mike 这个词。如果我们想把所有包含mike的行都找出来。 可以执行命令 grep mike file1
。
当grep命令中没有文件参数的时候比如 grep mike, 它就会等待我们在标准输入一般是putty终端设备中输入一行行的内容进行实时的过滤
在Linux操作过程中我们经常需要 将一个命令的输出的内容给另一个命令作为输入的内容 进行处理。
比如我们想查出进程号是 6536 的进程的信息。
我们用ps -ef 可以显示出所有的进程信息但是这里面的内容太多了我想过滤出其中包含 6536 字符串的行。
当然可以 用重定向符号 ps –ef > info.txt
, 然后再使用grep从 info.txt中过滤 grep 6536 info.txt
但是这样比较麻烦我们可以使用 管道操作符
。
我们看 这个命令 ps –ef | grep 6536
注意其中的 竖线 | 这个就是管道操作符它起的作用就是
● 将 前面的 ps –ef 命令的stdout本来是输出到终端设备的 重定向到一个 临时管道设备里面
● 同时 将后一个命令 grep 6536 的stdin重定向到这个临时的管道设备。
那么这时会发生什么事情呢ps –ef 命令的结果直接被 命令 grep 6536
过滤出来了。
这个过程可以用如下示意图表示
常用命令
apt安装软件包
在 Ubuntu上安装软件通常使用 apt
全称 Advanced Packaging Tool 软件包管理工具安装。
apt 能够从指定的 apt 源服务器自动下载安装包并且安装可以自动处理依赖性关系并且一次安装所有依赖的软件包无须繁琐地一次次下载、安装。
缺省的 apt 源服务器 (国内的是cn.archive.ubuntu.com)访问往往比较慢。
如果在安装Ubuntu时 就更换了源会快很多。
如果安装Ubuntu时没有更换源现在想换可以修改配置文件 /etc/apt/source.list
把里面源服务器域名从 cn.archive.ubuntu.com
改为为国内的
比如网易的 mirrors.163.com
或者阿里云的 mirrors.aliyun.com
步骤如下
-
以root账号登录或者后续命令前面加
sudo
以root执行 -
执行命令
cd /etc/apt
进入到目录/etc/apt
下 -
执行命令
cp sources.list sources.list.bak
先创建备份文件这样万一改错可以有备份文件恢复 -
执行
vi sources.list
打开文件 准备把域名从从cn.archive.ubuntu.com
替换为mirrors.163.com
-
按 冒号进入底行模式输入命令
1,$s/cn.archive.ubuntu.com/mirrors.163.com/g
进行替换 -
确认一下域名修改正确后输入
:wq
保存退出。 -
执行命令
apt update
让修改生效
apt 命令用法
- 安装软件
apt install package1
安装指定的安装包package1, 比如 apt install net-tools
- 列出所有安装信息
apt list --installed
显示所有已经安装的程序包
- 列出指定软件信息
apt list package1
显示指定程序包package1的安装情况
- 删除软件
apt remove package1
删除程序包package1
启动、重启、关闭服务
Linux上有些软件程序是以服务的形式安装的比如 SSH 服务、 MySQL服务、 nginx服务等。
这些 软件 的启动、重启、关闭 要使用特殊的命令
在当前的 Ubuntu 系统上使用命令 systemctl 来 启动、重启、关闭 服务。
比如
要查看 服务 ssh 状态 执行命令 systemctl status ssh
要启动 服务 ssh 执行命令 systemctl start ssh
要重启 服务 ssh 执行命令 systemctl restart ssh
要关闭 服务 ssh 执行命令 systemctl stop ssh
打包与压缩
打包
Linux下打包的最常用命令是tar 命令可将多个文件、目录打包到一个文件中。
- tar 命令打包
下面是使用tar命令打包的操作演示
在当前工作目录下面创建3个文件使用下列命令
touch 123.txt 456.txt 789.txt
将这3个文件放到一个文件包files.tar,使用下列命令
tar cvf files.tar 123.txt 456.txt 789.txt
也可以使用通配符如 *.txt这样的格式代表以txt结尾的文件
tar cvf files1.tar *.txt
tar命令同样可以打包目录假设 当前目录下 byhy是一个子目录byhy.txt是一个文件
tar cvf byhy.tar ./byhy byhy.txt
这个命令就把目录 byhy 和 文件 byhy.txt 都 打包到 文件 byhy.tar 中了。
- tar 命令解包
要 将 上面创建的 files1.tar 解压到当前目录使用下列命令
tar xvf files.tar
- 查看tar 包内容
如果只是想查看 上面创建的 files1.tar 内容使用下列命令
tar tvf files.tar
- 往tar 包中添加文件
如果想 在 files1.tar中 添加 新文件 newfile使用下列命令
tar rvf files.tar newfile
注意tar命令只是把文件、目录打包到一个文件中。 并不会压缩文件
压缩
- gzip 压缩 和解压
gzip命令用于文件的压缩与解压缩压缩后的文件名后缀为“.gz”
比如
要 压缩文件abc.txt 执行命令
gzip abc.txt
这样就产生了一个名为 abc.txt.gz 的压缩后的文件
要 解压文件abc.txt.gz执行命令
gzip -d abc.txt.gz
- gzip 和 tar 的联合使用
tar工具与gzip工具联合使用实现打包并压缩、解压缩并解包功能
假设 在当前目录有如下3个文件 touch 111.txt 222.txt 333.txt
我们要打包并压缩这3个文件放到压缩包文件 byhy.tar.gz里面使用下面命令
tar zcvf byhy.tar.gz *.txt
解压缩并解包使用下面命令
tar zxvf byhy.tar.gz
● bzip2、zip 压缩、解压
bzip2 和 zip 也是常见的压缩解压工具 使用方法和 gzip 类似
如下
---------------------------------------------
.bz2
解压1bzip2 -d FileName.bz2
解压2bunzip2 FileName.bz2
压缩 bzip2 -z FileName
.tar.bz2
解压tar jxvf FileName.tar.bz2
压缩tar jcvf FileName.tar.bz2 DirName
---------------------------------------------
.zip
解压unzip FileName.zip
压缩zip -r FileName.zip DirName
---------------------------------------------
注意如果你的Linux上没有安装 bzip2、zip、unzip可以执行命令 apt install bzip2 zip unzip
来安装
top 查看系统进程的动态运行情况
执行top命令可以查看 当前系统中运行的进程的信息比如
[root@localhost ~]# top
top - 14:01:00 up 15:52, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 97 total, 1 running, 96 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
KiB Mem : 2895572 total, 2507692 free, 118824 used, 269056 buff/cache
KiB Swap: 3145724 total, 3145724 free, 0 used. 2598756 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2041 root 20 0 0 0 0 S 0.3 0.0 0:03.60 kworker/0:3
1 root 20 0 127960 6580 4104 S 0.0 0.2 0:01.91 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.29 ksoftirqd/0
5 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.05 kworker/u2: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:01.94 rcu_sched
10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-dra+
11 root rt 0 0 0 0 S 0.0 0.0 0:00.48 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
● CPU 整体负载
在这行显示了 CPU 整体负载
Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
● 各个CPU 的负载按键盘1可以在整体cpu和所有cpu之间切换
Cpu0 : 0.3%us, 0.3%sy, 0.0%ni, 97.7%id, 1.3%wa, 0.0%hi, 0.3%si, 0.0%st
Cpu1 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu2 : 0.0%us, 0.3%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu3 : 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占用
缺省情况下进程列表里就是按CPU占用率来排序的。
如果不是可以按快捷键大写的P要求top按照CPU占用率来排序。按b再按x可以显示当前排序列
- 整体内存使用量
KiB Mem : 2895572 total, 2507692 free, 118824 used, 269056 buff/cache
KiB Swap: 3145724 total, 3145724 free, 0 used. 2598756 avail Mem
注意上面显示 2507692 free并非只有 2507692 的内存可用。
因为 buffer 和 cache 部分的内存都是临时缓存用了 其实也是可用的内存
实际可用的内存大概是 free + buffers + cached
- 各个进程对内存的占用RES
按快捷键大写的 M 可以 对进程列表按照内存使用率来排序
查看系统内存使用情况
free命令可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 2827 115 2449 8 262 2538
Swap: 3071 0 3071
查看设置系统时间
date 可以用来显示或设定系统的日期与时间。
- 显示当前日期和时间
[byhy@localhost ~]$ date
Mon Nov 7 23:25:05 PST 2018
- 设定日期
# date -s 20161109
- 设定时间
# date -s 21:05:50
查看系统版本
- 执行命令
uname –a
查看系统内核版本信息
# uname -a
Linux byhy-server 5.4.0-80-generic #90-Ubuntu SMP Fri Jul 9 22:49:44 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
说明 5.4.0 为Linux内核的版本。
- 执行命令
lsb_release -a
查看Ubuntu系统版本信息
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.2 LTS
Release: 20.04
Codename: focal
其中显示Ubuntu发行版本为 20.04 版本
网络管理
查看网络接口IP地址
查看所有网络接口的IP地址可以使用命令 ip addr
例如
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:e1:71:e8 brd ff:ff:ff:ff:ff:ff
inet 192.168.50.64/24 brd 192.168.50.255 scope global dynamic enp0s3
valid_lft 86125sec preferred_lft 86125sec
inet6 fe80::a00:27ff:fee1:71e8/64 scope link
valid_lft forever preferred_lft forever
上面显示了 两个网络接口 lo 和 enp0s3。其中 lo 是环回接口我们关注的应该是 enp0s3 这个接口。
上面命令的结果显示enp0s3 这个接口 的 IPv4 地址是 192.168.50.64
启用、禁用网络接口
启用和禁用网络接口常用的是 ifup
和 ifdown
要使用root用户执行
Ubuntu 现在缺省是没有这两个命令的 可以先运行 apt install ifupdown
安装一下。
● 启用网络接口
使用命令 ifup比如下面的命令就是启用网络接口 enp0s3
ifup enp0s3
● 禁用网络接口
使用命令 ifdown比如下面的命令就是禁用网络接口 enp0s3
ifdown enp0s3
ping 检测网络连通性
我们经常需要检查是否可以从本机访问某个远程主机这时应该使用 ping
命令
例如
$ ping 192.168.100.1
PING 192.168.100.1 (192.168.100.1) 56(84) bytes of data.
64 bytes from 192.168.100.1: icmp_seq=1 ttl=64 time=0.158 ms
64 bytes from 192.168.100.1: icmp_seq=2 ttl=64 time=0.228 ms
64 bytes from 192.168.100.1: icmp_seq=3 ttl=64 time=0.281 ms
上面的结果就表示 本机 和 IP 为192.168.100.1 的设备可能是计算机也可能是路由器之间的网络是通畅的。
可以按 ctrl+C
终止 测试。
netstat 查看网络状态
Ubuntu 现在缺省安装的查看网络状态的工具是 Socket Statistics 命令名为 ss
。
但是 目前这个工具使用还不是特别广泛目前查看网络状态大多数人还是会使用著名的 netstat
。
netstat 这个命令通常用来 查看各种与网络相关的状态信息包括网络的连接、状态、接口的统计信息、路由表、端口的监听情况。
但是 Ubuntu 现在缺省没有安装这个netstat 可以使用命令 sudo apt install net-tools
安装 net-tools 工具包后即可使用。
常用参数
-a
(all)显示所有选项默认不显示LISTEN相关
-t
(tcp)仅显示tcp相关选项
-u
(udp)仅显示udp相关选项
-n
不显示端口协议名显示端口数字
-l
只显示 Listen (监听) 的状态端口
-p
显示建立相关链接的进程PID
-r
显示路由信息路由表
Netstat 最常用的地方就是查看网络连接情况比如查看22端口上的tcp网络连接情况
使用命令 netstat -anp|grep 22 |grep tcp
[root@localhost ~]# netstat -anp |grep 22 |grep tcp
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 977/sshd
tcp 0 52 192.168.10.199:22 192.168.10.92:63911 ESTABLISHED 2011/sshd: root@pts
tcp6 0 0 :::22 :::* LISTEN 977/sshd
sshsecure shell登录远程机器
之前我们使用的是Windows下面的终端模拟器PuTTY 远程登录Linux主机。
在Linux下也可以远程登录其他Linux主机只需要运行ssh命令即可。
命令的格式如下
ssh 用户名@IP地址或机器域名
比如你要 使用 user1 账号 远程登录 192.168.1.12 这台Linux机器执行下面的命令
[byhy@localhost ~]$ ssh user1@192.168.1.12
一般首次登录某个主机的时候会出现如下提示
The authenticity of host '192.168.1.12 (192.168.1.12)' can't be established.
RSA key fingerprint is cf:2c:22:d1:e8:4e:f3:16:43:09:9c:c6:fe:fc:9a:22.
Are you sure you want to continue connecting (yes/no)?
这是因为该远程机器没有被认证过可能会有‘中间人’攻击的安全隐患让你确认一下。这里如果是局域网里面的机器一般安全没有什么问题输入yes并回车即可。
接下来会提示输入对应用户的密码你输入正确的密码即可登录。
scp 拷贝文件
在Linux上可以直接使用scp命令 和远程Linux主机 进行文件的拷贝。
scp是secure copy的缩写意为文件安全拷贝它可以将远程Linux系统上的文件拷贝到本地计算机也可以将本地计算机上的文件拷贝到远程Linux系统上。
比如
我们已经登录到主机A上面要将 /home/byhy1 目录下面的文件abc.txt拷贝到主机B的/home/byhy2目录下面主机B的IP地址为192.168.1.12
我们要拷贝到 B主机 必须要有B主机的用户账号 假如B主机的账号是 byhy2应该这样写
scp /home/byhy1/abc.txt byhy2@192.168.1.12:/home/byhy2
接下来会提示用户输入用户byhy2的密码输入正确密码后进行拷贝操作。
如果我们要 在主机A上面将主机B上面的文件/home/byhy2/123.txt 拷贝到主机A的/tmp/下面
scp byhy2@192.168.1.12:/home/byhy2/123.txt /tmp/
在windows机器上我们可以使用 WinSCP 工具和远程Linux主机 进行文件的拷贝。
点击这里下载WinSCP
这个工具安装好后创建一个到远程Linux主机的连接随后只要在界面拖动文件即可完成下载上传文件。
wget下载
Linux中要从网络下载文件可以使用 wget。
wget就是一个下载文件的命令行工具。
例如
wget https://mirrors.aliyun.com/centos/timestamp.txt
防火墙
通常网站服务之类的产品运行在Ubuntu上我们会开启防火墙。防止恶意的网络访问和攻击。
Ubuntu目前使用命令 ufw
(uncomplicated firewall) 管理防火墙功能。
缺省 ufw 是未被激活的执行如下命令激活。
ufw enable
注意这个命令最好是在 虚拟机终端执行。
如果是Putty远程登录并且当前没有允许SSH访问的ufw规则执行这个命令可能就会断开连接。
可以执行如下命令检查 当前的 防火墙设置
ufw status
或者查看更详细的信息
ufw status verbose
● 开放端口
如果我们允许 外面从网络访问 本机的 SSH TCP 服务端口 22 应该这样执行命令
ufw allow 22/tcp
如果你知道端口对应的服务名也可以使用名字。
比如下面的命令可以允许外面从网络访问 本机的 ssh 服务
sudo ufw allow ssh
比如下面的命令可以允许外面从网络访问 本机的 HTTP 服务端口 80
ufw allow http
● 删除规则
要删除一个前面设定的规则执行下面的命令
ufw delete allow http