操作系统
Linux
00 分钟
2022-11-22
2023-7-13
type
status
date
slug
summary
tags
category
icon
password
转载自 白月黑羽 (byhy.net) 若有侵权,联系删除!

1.简介和安装

1.为什么要学习Linux

Linux 和我们熟知的 Windows 一样,都是 操作系统 。
那么操作系统又是什么?
简单说,操作系统是 管理 计算机硬件 和 所有应用程序 的 系统软件 。
它对下管理机器所有的硬件,对上管理着应用程序。
负责加载、运行、调度、终止应用程序,并提供编程接口和服务给应用程序调用(使用各种硬件资源),完成各种各样的功能。
现在的软件系统,通常都有服务端,比如:京东、微信、抖音、美团、网易等等,都有个服务端系统提供数据信息。
这些服务 80% 以上都是运行在Linux操作系统上。
大家如果成为软件行业的工程师,基本都是要和Linux打交道的。
而且IT职位面试的时候,Linux相关操作,是常常会被问到的。
所以你应该学会使用Linux操作系统。
本课程,就是讲解Linux的常见操作。
在开始学习之前,我们首先要知道Linux这个单词怎么读。很多人用了好多年Linux, 这个词的读音都是错的。
Linux之父Linus Torvalds 是这样发音的 /‘lɪ.nəks/

2.安装Linux

Linux 就是一个操作系统, 和大家熟悉的 Windows 一样。
所以我们要使用它,就需要先安装到电脑上。
你可以安装在一台单独的电脑上, 也可以安装在虚拟机里面。
虚拟机,就是在你的电脑上用软件模拟的电脑。
这个模拟出电脑的软件称之为 虚拟机软件(也可以叫模拟器) ,常见的有 VirtualBox、VMware系列。
你没有看错,软件居然可以模拟出硬件的运行环境,比如一台电脑,一台游戏机。
你在电脑上玩过街机游戏吗? 那就是电脑软件模拟的街机,来运行街机游戏。
我们可以在模拟的电脑里面 安装其他的操作系统, 比如Linux。
这样我们就在一个程序窗口里面运行另外一个操作系统了。
Windows操作系统有 Windows 7 、Windows 10、 Windows server 2016 等等众多的版本。
Linux 版本更多,比如 Ubuntu、Debian、RedHat、CentOS、Fedora等,这些都是Linux系统的不同发行版本.
我们教程就以 Ubuntu 为例讲解如何安装。
运行虚拟机软件的操作系统 我们称之为 Host OS, 虚拟机 软件里面的操作系统称之为 Guest OS
本文中的 Host 是 Windows 10 , 而 Guest 是 Ubuntu
虚拟机安装 Ubuntu 分为两步
  • 创建虚拟机(就是虚拟电脑)
首先要下载虚拟机软件,这里推荐Virtualbox
  • 在虚拟机上安装 Ubuntu 操作系统
在虚拟机安装Ubuntu,大家需要下载 Ubuntu 的安装光盘镜像文件。
在国外下载比较慢,推荐到国内的镜像站点下载 ,下面是安装链接。
安装到设置 Mirror address 这一步,一定要选择使用 http://mirrors.163.com/ubuntu
否则很容易出现卡死在 Installing Kernel 这里。
具体安装过程,请看视频讲解

3.登录

Linux 是支持多用户的操作系统,什么叫多用户操作系统?
就是说,多个人都可以使用安装了Linux的同一台电脑。 其中有管理员用户(比如安装过程中就输入密码的那个root用户),普通用户。
不同的人有不同的权限,所以我们需要在Linux操作系统上创建多个账号给他们使用,对应不同的权限。
所以用户使用系统前必须先输入用户名密码登录,这样Linux才知道你是哪个用户。
Linux用户可以有如下两种登录方式:
  • Linux主机直接登录
  • 在另一台电脑远程登录

1.主机直接登录

主机直接登录就是用户直接到安装了Linux的那台计算机上登录。
一般来说,Linux操作系统可以在图形桌面上登录,也可以在命令行界面登录
但是,我们安装的是Ubuntu Server版,缺省是没有图形桌面的,所以只能命令行界面登录。
命令行登录界面如下:
notion image
登录时,系统会提示你输入账号,并且要求你输入对应的密码。
登录成功后,会显示命令行提示符,如下
大家只要 在后面输入Linux命令就可以进行操作了。
大家可能习惯了使用Windows图形界面,但是在使用Linux的时候,往往更方便的是用命令行,输入各种Linux命令进行操作。
面试的时候,问的也都是 各种常见的命令,所以大家要学会在命令行下进行操作。

2.远程登录

工作中运行被测系统的Linux主机通常不在自己的身边,而是在实验室里面,或者在远程机房(比如 阿里云主机),经常跑到主机所在的地方进行登录是不方便的。
这时我们通常采用远程登录的方式,通过网络登录访问Linux主机。
我们后面的课程讲解,大多是远程登录完成,请大家学会使用远程登录。
要进行远程登录,我们需要一个远程登录的软件,最常用的就是 PuTTY。
如何使用PuTTY进行远程登录? 请观看下面的讲解视频。
如果虚拟机网络采用桥接网卡模式,仍然出现 虚拟机内部Linux 上不了网,或者SSH登录不进去虚拟机怎么办?
实战班学员请参考 补充学习 视频中的方法解决。

4.shell和Linux命令

我们在远程终端是通过Linux命令(command)来操作计算机的。
而Linux主机上谁来接受我们输入的命令,并执行命令的呢? 那就是 Shell程序。
Shell有很多种,标准shell (sh), Bourne Again SHell (bash), Korn shell (ksh), C shell (csh),现在主流的Linux的缺省是bash,所以我们主要针对它进行说明。
Shell在后面的章节还会讲到。目前我们只要知道Linux通过Shell程序来接收我们的命令,并且执行我们的命令。
命令通常是一个个的可执行程序,比如 ps、ls、netstat等等
在Shell提示符下,就可以输入Linux命令。Linux命令的基本格式如下:
Linux命令由一个命令(command)和零到多个参数构成,命令和参数之间,以及参数与参数之间用空格隔开。
Linux的命令区分大小写,且命令和参数之间必须隔开。
比如,下面执行了两条 Linux命令:
但tmp和Tmp是两个不同的目录。
如果这样写 ls/tmp ,没有空格隔开的话,‘ls/tmp’ 整个 会被Shell当做一条没参数的命令。

1.注销(退出Linux系统)

在每次使用完后,一定要进行注销(或者说退出),以防他人通过你的帐号进入系统。
在Linux提示符下,运行exit命令,即可退出本次登录
或直接按组合键 Ctrl+d 。

2.关机与重启

Linux主机的关机方法为:
用户登录后,输入命令 poweroff 表示立即关机。
Linux主机的重启方法为:
用户登录后,输入命令 reboot 表示立即重启电脑。

5.使用root 用户登录

我说过 root用户是系统超级管理员,那么能用root账号登录吗?
关键是,我们不知道root用户的密码,怎么登录呢? 安装时没有设置root用户密码的地方呀。
Ubuntu 不想让大家直接使用root账号登录, 因为权限太大,误操作可能有很大危害。
但是如果你对自己操作很自信,并且很多命令必须以root用户权限执行, 不用root用户登录会比较麻烦。
这时,你可以通过如下方法设置root用户的密码,并且切换到root账号
  • 使用安装时创建的账号登录
执行命令 sudo passwd root
系统提示: [sudo] password for byhy: , 是要你输入 byhy这个账号的密码, 输入后回车
接着提示: New password: , 是要你输入root用户的密码,输入你要设置的密码后回车
接着提示: Retype new password: , 是要你再次输入root用户密码确认,再次输入后回车
  • 如果出现 passwd: password updated successfully 表示设置root密码成功, 后面就可以使用 root 账号登录了。
执行命令 su - root
  • 表示要从当前账号切换到root账号登录, 然后输入刚设置的root账号密码,即可登录。
但是注意: Ubuntu 缺省不允许root账号直接远程登录的,只能本地登录,或者先用其它账号登录后切换。
这个设置可以修改,后面我们讲过 到vi时会演示一下。

2.文本编辑

1.视频讲解

vi 操作:命令模式和插入模式
vi 操作:底行模式

2.前言

Linux下面的操作往往都是在命令行窗口(术语叫字符终端)里面进行的。
字符终端窗口没有图形界面,在这里面编辑文件 最常用的 就是 大名鼎鼎的 vi 。
学习vi并不是容易的事情,但是 几乎所有UNIX、LINUX系统都预装vi。
操作Linux 往往是远程操作,没有图形界面,我们要修改一个文本文件,那么最快捷的方式就是用 vi。
vi有个加强版本叫做vim,两者常用的功能没有什么大的区别。
在比较新的 Linux 发行版本里面,都缺省将vi别名为vim了。
在命令行里敲入 vi 后面加要编辑的文件名,比如 vi aaa.txt ,就进入vi的界面了。
vi 有 3 种使用模式。
不同的模式,用户可以干的事情不同。

3.命令模式

执行vi abc.txt 文件名 命令,就打开了vi去编辑文件abc.txt,默认进入的就是命令模式
在命令模式下
移动光标
也可以通过键盘 方向键 来移动光标位置
另外还支持下面的按键操作
删除文字
还有下面这些操作
要输入文字,就必须切换到插入模式
从命令模式进入插入模式的方式有:
进入到插入模式,就可以输入文字了
在命令模式下,还可以按冒号按键,切换到底线模式
底线模式是用来对文件本身做操作的

4.插入模式

插入模式是用来让 用户进行文件内容的输入的。
用户刚进入vi是命令模式, 想敲字符输入内容是不行的。必须进入插入模式,才能输入字符。
在插入模式下,可以通过键盘方向键,来移动光标。
但是不能再 通过 ghjk 来移动光标了,因为现在按这些按键就是输入对应的字符了。
在插入模式下,编辑文件的过程中,经常需要切换回 命令模式,来删除字符、删除行,跳到上一页,到最后一行等等。
所以使用vi时,会非常频繁的在插入模式 和 命令模式之间切换。
从插入模式切换到命令模式,就是输入按键 Esc。

5.底行模式

底行模式,就是在屏幕底部打开命令行,用来输入命令。
底行模式 主要是 输入命令 来 保存文件 或 退出vi程序、寻找字符串、列出行号等
注意:我们只能从命令模式进入底行模式。
所以,如果现在处于插入模式,必须先按Esc键进入命令模式后,再按号  或 / 进入底行模式。
底线模式常用操作有如下这些:
:wq 保存文件并退出
:q 不保存文件,并退出,如果文件做了修改,但有不想保存,需要用:q!
:q! 不保存文件,强制退出
:w 只保存文件,但是不退出vi,可以切换到输入模式下面继续编辑文件
:set nu 显示行号
/abc 在文件中查找abc字符。按 n 不停的往下查找,按 N 往上查找
:1,$s/string/replace/g 替换功能,把文件中的string,替换为replace 按Esc键,切换到命令模式

3.文件系统

Linux中,文件是个非常广泛的概念。
Linux中的文件,不仅指磁盘上的文本、图片、视频文件,也包括硬件设备,比如串口、声卡、输入设备、输出设备等。
我们通常说的文本文件、图片文件都是存储在磁盘上的文件系统里面的。

1.视频讲解

文件系统1
文件系统2

2.分区和文件系统

在 Windows上, 可以为一块磁盘 分区 。
创建好分区后,还不能立即就在分区里面放文件,还要格式化分区。
所谓格式化分区,也就是为分区安装 文件系统 。
文件系统有好多种,Windows上 目前使用的文件系统 主要是 NTFS 。
Linux经常选用的文件系统有ext2,ext3,ext4 等
可以把文件系统理解为一种规范,它规定了文件存放在磁盘上的方式。
在Windows机器上, 分好区,选择文件系统格式化后,对每个文件系统的分区,需要给它们各自的盘符,比如 C盘或者D盘。
访问Windows上的一个文件,需要给出这个文件的路径。 文件的完整路径,就是从盘符开始的:比如 D:\我的图片\a.jpg 或者 c:\Windows\write.exe
这里我们发现三点
  • Windows文件系统里面都是磁盘文件或目录
  • Windows的文件路径是从盘符开始的
  • Windows上的文件的路径是大小写不区分的

3.挂接

但是,Linux系统不同,Linux文件系统里面不都是磁盘文件。
从Window过来学习Linux的同学要纠正一个思维定式,就是看到路径就一定要和磁盘上的存储的目录或文件对应起来。
而Linux文件系统目录里面除了磁盘文件,还有很多设备、甚至一些虚拟的对象,也在文件系统目录里面访问。
Linux在启动过程中,就会根据配置,创建一个虚拟的文件系统目录结构(可以想象成,Linux系统创建在内存中的一个目录结构),如下
notion image
随后的启动过程,才会,将不同的分区 挂接(mount) 到文件系统不同的目录中。
上图就是把一个磁盘分区挂接到 /opt 下面。 /opt 这个路径在这个动作中被称为挂接点。
挂接后的文件系统目录如下图所示。
notion image
具体挂接到哪个点,在安装Linux操作系统的时候,就选择好的。
注意:Linux启动过程中,首先挂接的是 根节点 / 对应的磁盘分区文件系统,找到其中的 /etc/fstab文件,里面记载了其他文件系统的挂接点,再依次挂接其他的文件系统。
● Linux目录结构里面没有文件系统的盘符
从上面的示例可以看到,Linux 文件系统里面只有一个 公共的根 / , 也叫根目录。
文件系统挂接到哪个挂接点,该文件系统下面的文件就从哪个挂接点算起。 比如上图中磁盘分区挂接到 /opt 下面, 那么原来该文件系统中的文件a1 的路径就是 /opt/a1 . 如果直接挂接到根目录 /下面,那么原来该文件系统中的文件a1 的路径就是 /a1
一个文件的全路径 是 从根到该文件这条路径上所有节点名 顺序连接,每个节点之间以 / 分开。
比如,文件a3的全路径就是:/opt/a3。
● Linux目录结构是区分大小写的 在Linux中 /root/abc 和 /root/abC 是两个文件

4.目录和文件操作

1.当前工作目录

我们在命令行里执行命令的时候,都有一个 当前目录(也叫工作目录),就是我们所在的目录。
当用户刚登录系统时,当前工作目录是用户的 home目录
root用户的home目录,是 /root
其他用户home目录,是在创建用户的时候 指定产生的,一般是 /home/用户名
比如你是用户 byhy,home目录通常就是 /home/byhy
当前目录下面的所有文件都可以直接访问, 假设当前目录 下面有个文件 a.txt。 要用vi编辑它,就可以直接执行vi a.txt
查看当前目录使用命令 pwd ,比如
改变当前目录用命令 cd
比如,
改变当前目录为package目录(这个动作也称之为进入到package目录), 就执行命令 cd package
改变当前路径到根目录 就执行命令 cd /

2.绝对路径与相对路径

我们命令行要操作一个文件(或者目录),必须给出这个文件的路径。路径分为:
● 绝对路径: 绝对路径 开始于根目录,沿着目录层级,一直到达所期望的目录或文件。
比如下图
notion image
其 中的 photos(假设它是个目录) 的绝对路径 就是 /home/jono/photos
我们要进入到 photos这个目录,就执行命令 cd /home/jono/photos
● 相对路径:
相对路径相对的是 当前目录。
在使用相对路径的过程中, 经常用到一对特殊符号 . (点) 和 .. (两个点)。
符号 . 指的是当前目录,.. 指的是当前目录的父目录。
根据上面的图,假如当前目录为 jono ,如果要用相对路径切换到photos,就这样写 cd ./photos ,也可以直接写 cd photos ,
假如当前目录为 cory ,如果要用相对路径切换到 photos,就这样写 cd ../jono/photos 。其中 两个点 .. 表示上级目录。当然也可以使用绝对路径 cd /home/jono/photos

3.查看目录和文件

查看目录内容 或者某个文件的属性 使用命令 ls
ls 可能是用户最常使用的命令。通过它,我们可以知道目录里面包含的内容,也可以知道 文件和目录的 属性。
只要简单的输入 ls 就能看到 当前目录下所包含的文件和子目录列表。
notion image
比如上图中,我们就发现当前目录下,有一个 目录 , 有两个文件 Python-3.6.8.tgz readme.txt , 还有 一个目录 Python-3.6.8
为什么呈现出不同的颜色?Linux系统可以根据 的类型(文件还是目录)和 扩展名 决定 列出 时的颜色。这些都是可以配置的。
除了当前工作目录以外,也可以指定要列出内容的目录,就像这样:

我们经常使用 ls 命令的“-l”选项,这样可以显示出更多的信息:
各个字段的含义如下:
  • rw-r--r-- 文件的访问权限。第一个字符指明文件类型。在不同类型之间, 开头的“-”说明是一个普通文件,“d”表明是一个目录。其后三个字符是文件所有者的 访问权限,再其后的三个字符是文件所属组中成员的访问权限,最后三个字符是其他人的访问权限。这个字段的含义在后面用户权限那一章会详细讲解。
1 文件的硬链接数目。
byhy 文件所有者的用户名。
byhy 文件所属用户组的名字。
82 以字节数表示的文件大小。
May 10 10:36 上次修改文件的时间和日期。
byhy.txt 文件名。

4.查看文本文件内容

查看文本文件的内容除了我们之前提到过的用vi编辑器外,对于比较短的文件, 可以直接用命令cat将文件的内容显示到屏幕上。
比如
说明byhy.txt 的文件内容就是 一行 byhy testing

5.创建目录

mkdir 命令是用来创建目录的。
例如
会在当前目录下,创建一个名为"byhy1"的目录,而
会创建三个目录,名为 byhy1, byhy2, byhy3。
如果我们要创建好几层的目录,比如 /root/byhy/python/lesson1,
直接这样写命令 mkdir /root/byhy/python/lesson1
shell 会报错,因为系统中可能还 没有 /root/byhy/python 这个目录。
一种方法是:我们 依次 创建 每一级目录, 像这样
更简单的方法是,使用参数 -p

6.删除文件和目录

rm 命令用来 删除 文件和目录。
rm 命令后面 直接加上要删除的文件,比如
当我们要删除目录的时候 ,需要加上 -r 选项,否则会报错,如下所示
要这样写
  • r 参数 也可以详细的写成 –recursive 。 它表示要 递归地删除文件。 这意味着,如果要删除一个目录,而此目录 又包含子目录,那么子目录也会被删除。
通常 -r 和 -f 参数会一起使用。
  • f 参数 也可以详细的写成–force 。 它表示忽视不存在的文件,不显示提示信息。
比如:
如果文件 file1,或目录 dir1 不存在的话,rm 仍会继续执行,不会报错
执行 rm 操作 要非常小心, rm 不像Windows里面有回收站,一旦用 rm 删除了一些东西,想再恢复是相当的麻烦的。

7.通配符

当前目录下有这样一些文件
要求:删除 其中 所有 以file开头, 扩展名为 .jpg 的文件
当然,可以这样
但是如果 这样的文件有上百个, 敲起来是非常麻烦的。
Linux 提供了一组特殊字符来匹配 文件名中的各部分内容。
这些特殊字符叫做 通配符 。
上面的例子,我们可以这样写
  • 匹配任意多个字符(包括零个或一个)
常用的通配符有下面:
  •  匹配任意 多个 字符(包括零个或一个)
? 匹配任意 一个 字符(不包括零个)
[abcd] 匹配abcd中任意一个字符
下面是一些示例的用法
  •  表示 所有文件(或目录)
by* 表示 文件名以“by”开头的文件(或目录)
by*.py 表示 以"by"开头,中间有任意多个字符,并以".py"结尾的文件(或目录)
byhy???? 表示 以“byhy”开头,其后紧接着 4个字符 的文件(或目录)
[byh]* 表示 文件名以"b",“y”,或"h"开头的文件(或目录)
byhy[0-9][0-9] 表示 以"byhy"开头,并紧接着2个数字的文件(或目录)
很多 Linux命令,只要它们使用的参数是文件名,都可以使用通配符, 比如 ls、cp、rm、mv 等等
注意:rm命令时,使用通配符特别要小心。 很多人 曾经 为此 流过 悔恨的泪水。
比如,你想删除一个目录中的所有 jpg 文件。你应该这样写 rm *.jpg
如果你不小心在 “*” 和 “.jpg” 之间多输入了一个空格,就像这样: rm * .jpg
这个 rm 命令会删除目录中的所有文件,还会提示没有文件叫做 “.jpg”。
所以,白月黑羽建议大家:只要你使用 rm 命令里面有通配符, 一定要在执行之前 慎重的 思考 10秒钟以上, 再敲回车键。

8.复制文件和目录

cp 命令, 用来 复制文件或者目录。
假设 byhy1 是一个文件,我们可以 这样
如果 byhy2 这个文件 不存在, 上面的命令会创建一个新文件 byhy2 ,并且把 byhy1内容 拷贝到byhy2中。
如果 byhy2 已经存在了, 上面的命令会直接把 byhy1内容 拷贝到byhy2中, 就是说会覆盖byhy2 原来的内容。
如果我们要拷贝的是一个目录, 则 需要加上 -r 选项
比如
指定 -r 或者 –recursive 会递归地复制目录及目录中的内容。就是说,如果 frontend 里面有好多级子目录和文件,全部都会被拷贝过去。
可以拷贝 文件或者目录到 另外一个目录中,比如
cp -r file1 dir1 dir2 就是复制文件 file1 和 目录dir1 到目录 dir2中。目录 dir2 必须存在。
再比如 ```cp dir1/* dir2``` 这里使用通配符,可以把目录 dir1 中的所有文件都 复制到目录 dir2 中。 dir2 必须已经存在。

9.移动文件目录、重命名文件目录

mv 命令可以 移动 文件或者目录, 也可以 重命名 文件或者目录
mv 使用方法与 cp 很相像。
假设 byhy1 是一个文件,我们可以 这样
如果 byhy2 这个文件 不存在, 上面的命令会 把文件 byhy1 改名为 byhy2 ,并且把 byhy1内容 拷贝到byhy2中。
如果 byhy2 已经存在了, 上面的命令会把文件 byhy1 改名为 byhy2, 等于删除了原来的 byhy2。
假设 dir1 是一个目录,我们可以执行
如果目录 dir2 不存在,就会把 dir1目录 改名为 dir2。
如果目录 dir2 存在,就会把 dir1(及它的内容)到目录 dir2。
假设 byhy1 是一个文件,dir1 是一个目录,我们可以执行
这样写的话, 如果目录 dir2 存在,就会 移动文件 byhy1 和 目录 dir1(及它的内容)到目录 dir2。

10.在文件中查找字符串

在 Linux 操作过程中,经常需要在一个文本文件中 查询包含特定关键字的那些行的信息。
比如,我们需要在 日志文件 django.log 中查看所有包含了 Error 关键字的行。
当然,我们可以使用vi打开这个文件,然后再底行模式输入 /Error 查看。
更快捷的方式,就是直接 使用 grep命令
比如
如果你想同时显示 各行的行号,可以加上参数 -n
比如
如果你要查找的不仅仅是Error 这样的 一个单词,而是一段句子,比如 要找 Internal Server Error
就需要使用双引号,这样写
 

5.用户管理和文件权限

1.用户和用户组

1.概述

现代操作系统基本都是一个 多用户 的操作系统,Windows、MacOS、Linux都是这样。
任何一个用户,要使用Linux系统,都必须用Linux账号登陆系统。
Linux 系统有个特殊的账号 root 。 通常是 系统管理员使用该账号,就像Windows里面的Administrator账号一样。
root账号 是系统安装好就有的,具有系统中最高的权限,比如:可以创建其它账号、停止其它用户进程、修改一些Linux系统配置文件、访问其它用户文件。
而其它账号则是有权限限制的,上面说的root用户的特权,其它账号通常是没有的。
之所以要有这样的权限区别,就是防止一些用户不小心(或者故意)做出的破坏。
Linux系统中,每个用户账号 都对应一个 用户 ID。
用户ID 就是一个数字,因为计算机处理数字更加方便。
用户的 ID 与账号的信息就存储在文件 /etc/passwd 当中。
另外 每个用户可以属于一个或者多个 用户组 ,每个用户组对应一个 GroupID 。
GroupID 的信息存储在文件 /etc/group 当中。
系统管理员可以对某个用户组中的所有用户进行统一管理,比如分配权限等。

2.添加用户

当你们公司新来了一位员工,需要使用你们的Linux主机, 你如果是管理员, 可以为他创建一个用户账号。
Linux系统中创建用户,可以使用命令 adduser ,随后输入该用户的密码2次,并且一路按回车确认信息,即可。
该命令需要root权限,所以用root账号登录,
比如:
这样,就添加了一个用户byhy2
使用命令 cat /etc/passwd 查看文件内容,你会发现在/etc/passwd文件末尾中新增了一行数据,如下所示
/etc/passwd文件每行对应一个用户的信息。 一行中的字段用":“隔开。每个字段的含义分别是
该命令 同时也为该用户创建了一个用户组, 组名就叫 byhy2 ,如下所示
当然,你可以创建用户的时候,就加入一个指定的组,而不是新建一个组,
比如 adduser --ingroup root byhy ,就在创建byby用户的同时,把它加入到 root 这个用户组里面了。
另外该命令 还为该用户创建了一个 home目录(这里就是 /home/byhy2), 该目录作为byhy2用户登录后使用的主目录,该目录属于byhy2用户所有。

3.设置密码

使用命令adduser添加用户时,就会设置密码。
如果后面你想更新密码了怎么办? 使用命令 passwd
但是,只有root用户才可以给其他用户设置密码,普通用户只能修改自己的密码。

4.删除用户

假如,有一天,这位同事辞职了,你需要删除他的账号,使用命令 deluser
比如

5.用户间切换

假如你是系统管理员, 正使用root账号操作。
现在你需要以byhy账号进行一些操作, 可以从root用户切换到byhy账号,
切换账号使用命令 su , 英文意思 substitute user 或者 switch user 。
比如 su - byhy
注意,其中有一个符号 - , 切换命令中使用这个符号,表示要重新创建用户环境,就像使用byhy账号重新登陆一样。
也可以不用符号 - ,比如 su byhy ,这样就会使用当前的用户的环境(保留现有的环境变量),切换到新用户byhy
如果现有用户不是root 用户,切换到其他用户账号,需要输入密码, 如果是root用户则不需要输入密码。

6.查看用户组

要查看自己属于哪个用户组,使用命令 groups ,比如
表示当前用户byhy 属于这些组: byhy adm cdrom sudo dip plugdev lxd
其中第一个 byhy 是byhy用户的 主用户组(primary group) ,其它的是 从用户组(secondary group)
/etc/passwd 文件里面记录的是用户的主用户组
要查看其它属于哪个用户组,使用命令 groups <用户名> ,比如
要查看某个组里面有哪些用户
可以直接看/etc/group 文件,
更快速的,可以这样
但是这样只能查看到从用户组为该组的用户。
这个帖子的说明,/etc/group里面记录的从用户组用户。
也可以使用命令

7.添加用户组

增加一个新的用户组使用 addgroup 命令。
比如:
此命令向系统中增加了一个新组byhyusers。

8.删除用户组

如果要删除一个已有的用户组,使用 delgroup 命令
比如
此命令从系统中删除组byhyusers。

9.改变用户所属组

如果要将一个用户从组1改到组2,需要root用户使用 usermod 命令,其格式如下:
例如:下面的 命令将用户byhy的 主用户组(primary group)设置为 g1 。
注意:主用户组只能有一个
下面的命令将用户byhy用户的 从用户组(secondary group)设置为:g2,g3
从用户组 可以有多个。
下面的命令给用户byhy 再添加 两个从用户组(secondary group) g2,g3 ,原来所属的从用户组仍然也在
注意: 有 -a 参数是添加从用户组, 没有 -a 参数是设置从用户组

2.Linux 文件访问权限

1.概述

Linux文件的访问有三种权限: 读(用字母r表示)、写(用字母w表示)、执行(用字母x表示)
某个用户 对于一个 文件 :
有读权限,表示该用户可以读取文件的内容,
有写权限,表示该用户可以修改文件内容,
有执行权限, 表示该用户可以运行该文件(当然该文件应该是可执行文件)
而 这三种权限 对目录,含义又不一样。
某个用户 对于一个 目录 :
有读权限,表示该用户可以查看该目录里面的内容,
有写权限,表示该用户可以在该目录里面 创建 和删除 文件,
有执行权限, 表示该用户可以使用 cd命令,进入该目录
对 某个文件或者目录,Linux系统需要说明 三种类型的用户 ,分别具有怎样的权限
这三种类型分别是:
  • 文件的所有者,英文叫 owner , 也就是 该文件的 创建者
  • 文件归属的用户组里面的用户 ,英文叫 grouper,
  • 其他用户 (非owner和非grouper)
Linux系统需要为每个文件和目录,指定这个三种类型的用户,具有什么r、w、x里面的哪些权限
文件存取权限的显示 可以通过"ls -l"命令显示,如:
$ ls -l file1
显示如下:
其中:
  • 第2-4字符"rwx"表示此文件所有者root 对此文件的操作权限是为"可读、可写、可执行”,
  • 第5-7字符"r-x" 表示此文件所归属的root组内的用户对此文件的操作权限是"可读、不可写、可执行",
  • 第8-10字符"r–" 表示其他用户对此文件的操作权限是"可读、不可写、不可执行"

2.修改文件访问权限

文件的所有者或者root用户可以修改文件的访问权限
用chmod命令修改文件的存取权限,chmod命令的格式如下:
who项表示用户类型,它的内容为以下一项或多项:
op项表示动作:
permission项为存取权限,它的内容为以下一项或多项:
比如:
chmod u+w file1 ,该命令添加了 拥有者对file1文件的写权限
chmod u-x file1 ,该命令去掉了 拥有者对file1文件的执行权限
chmod ug+rwx file1 ,该命令添加了 拥有者和同组用户 对file1文件的 读、写、执行权限
chmod a+rwx file1,该命令添加了 所有人 对file1文件的 读、写、执行权限
chmod o+rx /root , 该命令添加了 其它组 对 目录 /root 的可读可执行权限。 对于目录来说 ,可执行权限意味着,用户可以 cd 进入 到这个目录。
chmod -R o+rx /root , 参数 -R 表示递归的意思,该命令执行结果是:其它用户可以对 /root 目录以及所有它的子目录、子文件 都有 可读可执行权限 。

3.改变文件所有者及文件所在组

chown将指定文件的拥有者改为指定的用户或组。
该命令的参数中,用户可以是用户名或者用户ID;组可以是组名或者组ID。文件是以空格分开的要改变权限的文件列表,支持通配符。
系统管理员经常使用chown命令,在将文件拷贝到另一个用户的名录下之后,让用户拥有使用该文件的权限.
注意:必须是有root权限的用户才能改变文件所有者。
改变文件所有者的命令格式如下:
例如:
chown byhy test1 ,就把文件test1的所有者变更为用户byhy
chown byhy:byhy test1 ,就把文件test1的所有者变更为用户byhy,所属组变为byhy
chown -R byhy dir1 ,就把目录dir1以及下面所有的子目录和文件的所有者变更为用户byhy
也可以用命令chgrp改变文件所有者组,格式如下:
注意:必须是有root权限的用户才能改变文件组别的归属
比如:
chgrp byhy test1 , 就把文件test1的用户组变更为组byhy

3.sudo:以root权限运行程序

有的程序需要做一些特权操作,比如前面讲的用户账号管理:adduser、deluser。
通常我们要执行这样的程序必须以root用户登录去执行。
但是,我们有时却希望给某几个信任的用户授予这样的权限,允许他们某次可以申请以以root权限执行该程序。
Windows里面的 以管理员权限 运行某个程序,就是这样。
Linux上也有这种方法,就是使用命令 sudo
比如
就是申请以root权限运行 adduser byhy3 这个命令。
当然,很明白,不是你说申请运行就一定可以的,前提是你当前登录的账号 要在系统设置里面 允许这样做。
这个设置是 在 /etc/sudoers 里面配置的。 如下
通过配置这个文件,可以设置
哪些用户(或者哪些组里面的用户) ,在什么地方, 以 哪些账号的权限 , 运行哪些程序。
一般不建议直接修改这个文件, 防止语法写错,导入整个规则被破坏。
而是使用命令 visudo 命令修改, 这个命令可以对错误的修改做检查,防止意外。
通常,我们会给某个组设置规则, 然后只需要把某些用户加入组中即可。
比如,Ubuntu上可以把某个用户加入 sudo 这个组, 既可以拥有 任何地方、以任何账号的权限、运行任何程序 的能力。
把用户加入组的命令,就是使用 usermod, 上面已经讲过。
注意:通常修改组后,该账号需要重新登录一下,才有组的sudo 权限。

6.进程管理

1.进程的概念

大家比较熟悉 Windows 下的可执行文件,就是那些扩展名为exe的文件。
大家知道,只需要鼠标双击这些程序, 就可以运行了。
程序运行起来后,我们把这个程序正在运行的 实例 称之为 进程 。
操作系统对每个进程都分配一个数字标记,称为 进程ID (PID)。
Windows进程的信息可以通过 任务管理器看到。如下所示
notion image
比如上图中,正在运行的计算器程序 Calculator.exe 的进程PID就是 3164
Linux系统中,进程也有PID。
在Linux中,你正在运行的交互式命令行程序 Shell, 它就是一个进程。
我们可以用命令 ps 查看进程信息的命令。
如上所示,当前bash shell的 进程 PID 为 4786

2.进程的创建与查看

Linux中,一个进程A里面可以创建出一个新的进程B,进程A就叫做进程B的 父进程 (parent process)。
进程B叫做进程A的子进程(child process)。
最典型的例子,我们在shell中运行的程序(命令),都是shell进程创建的,所以shell进程就是他们的父进程。
Linux中,主要是通过ps命令来查看进程信息的,我们运行命令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进程

3.进程的前台、后台转换

Linux终端通过Shell程序来接收用户输入的命令,并且执行命令。
我们在Shell里正在执行的,和用户进行人机交互的进程叫 前台进程 (foreground process)
前台进程可以接收键盘输入并将结果显示在显示器上。
用户敲入什么命令,shell就会启动对应的程序,运行在 前台 。
比如,大家可以用vi 编写一个 下面的Python程序到 Linux主机上,代码文件名可以为t1.py
然后使用命令 python3 t1.py 运行。
可以发现及时这个 python 程序变成了前台进程,接收用户的输入。
有些程序运行时,并不需要和用户进行交互,也就是说,不需要用户输入什么内容。 比如一个日志分析程序,一个定时清理磁盘文件的程序。
比如,下面这样的一个Python程序 t2.py
我们可以执行命令 python3 t2.py 运行它
这样的程序,运行期间,如果在前台执行,我们只能等待它结束,不然我们没法执行下个程序。
但是既然不需要用户输入信息,在前台执行,没有太大意义,我们应该要让它在 后台 执行。
要让它在后台运行,启动时只需在命令行的最后加上“&”符号。
比如 python3 t2.py &
后台运行的进程我们叫后台进程(background process),或者后台任务 ,它不直接和用户进行交互的进程。用户一般是感觉不到后台进程程序的运行。
当在后台运行命令时,有时需要其输出重定向输出到一个文件中去,以便以后检查。
比如 在后台运行find命令,在当前目录及其子目路下查找文件名为 byhy 的文件。
重定向的概念后面会讲。

4.nohup

我们可以执行命令的时候,使用 & 结尾使进程在后台运行。
但是如果终端关闭,那么程序也会被关闭,因为shell会发送SIGHUP信号给这些进程。进程接收的该信号,如果没有特别的处理,缺省就会结束运行
为了避免这种情况,那么我们就可以使用 nohup 这个命令。
比如我们有个test.sh 需要在后台运行,并且希望在后台能够一直运行,即使关闭了终端,也不退出。那么就使用nohup:

5.进程的终止

进程一般有两种终止方式。
  • 自行终止
有的进程执行完一段任务后,就自行退出了。
比如上面的ps命令,它执行完查看进程信息的任务后,就会结束。
也有的不是自动退出,而是用户操作它,让它退出。 比如 我们在Shell进程中运行exit命令后,该Shell进程就会退出。
也有的是异常退出,比如程序有个bug(比如代码里面有除以0的指令),该程序无法执行下去,也会终止。
  • 被强行杀死
有的进程一直不结束,如果用户觉得该进程应该被强行结束了,该怎么办呢?
对于一个前台进程,要结束它,我们只需要按组合键: Ctrl + C 。
对于一个后台运行的进程 ,如果用户觉得该进程应该被强行结束,可以使用 kill -9 命令强行杀死该进程。
比如上面的 python3 t2.py 命令运行的进程。 我们可以先用ps命令查出它的进程PID,
如上所示的python进程PID为2386,我们再执行命令 kill -9 2386 。 这样就强行停止了该进程。
要注意的是, 上面所示的进程启动它的用户为byhy,那么只能是用户byhy或者root用户才能杀死该进程

6.环境变量

Shell是个特殊的进程,因为我们通过它来执行命令,启动其他的进程的。所以它是很多进程的父进程。
Shell 这个父进程有很多特性会影响到我们执行命令,其中非常重要的一个就是 环境变量 。
环境变量 设置了 进程运行的环境信息。
Linux 的环境变量具有继承性,即:子进程 会继承父进程 的环境变量。
我们可以用命令printenv来查看当前shell的环境变量。
  • 环境变量PATH
我们可以看到环境变量有很多,通常我们最关注的一个就是环境变量是其中的 PATH
因为PATH 决定了当我们敲入命令的时候,到哪里去找这个命令对应的可执行程序。
用命令 echo $PATH 来查看环境变量PATH的值,比如
当我敲入命令ps后,shell就会 依次 到下面的路径去寻找ps命令对应的可执行文件 /usr/local/bin -> /bin -> /usr/bin -> /usr/local/sbin -> /usr/sbin -> /sbin -> /home/byhy/bin
  • 在环境变量PATH里面添加一个新的路径
方法一:执行命令 export PATH
比如:
再次查看环境变量PATH的值,结果如下
说明添加PATH成功。
但是这种方式生效时临时的。再次登录的时候,PATH里面就又没有这个环境变量了。
需要一直生效,可以使用方法二。
方式二:写入到shell启动文件中
所谓shell启动文件(Startup Files)是指Shell启动时 会 自动加载执行 的文件。
既然这些文件会自动被shell加载执行,通常我们可以在里面放入一些 例行 执行的命令,比如设置一些环境变量。
bash Shell启动文件有好几个,比如 /etc/profile (所有用户共享), ~/.bash_profile , ~/.bashrc
通常建议把某个用户 独有的 设置环境变量的 命令,放到用户家目录下面的 ~/.bashrc 文件中。
可以在文件的结尾加入一行
好了,下次登录的时候,PATH里面就会多出/test;
如果要对当前的shell就立即生效,可以执行命令 source ~/.bashrc

7.重定向和管道

stdin/stdout/stderr 与 重定向

1.什么是终端设备

人在操作电脑时,其实是和 运行着的程序(术语称之为:进程) 在打交道(术语称之为:交互)。
进程 是 看不见 摸不着的,它们是 在 电脑CPU中执行的代码指令。
所以,我们 和 进程 交互的时候,必须有个设备,我们才能通过它 输入信息给进程,并且显示进程输出信息。
在上世纪六七十年代,计算机网络还没有出现, 计算机都是大型机器,非常的昂贵。 通常只有大公司和研究机构才有。
那时人们通过终端设备和计算机上的程序进行交互,见下图。
notion image
注意,终端设备 只有 显示器 和键盘 , 是没有 主机部分的。它和主机之间有根信号线,传递用户通过键盘输入的信息给程序,并显示程序输出的信息。
这样的终端设备,显然不能离主机太远。
人们需要在家、甚至在另外一个城市 操作远程主机,就不能使用这样的终端。
后来有了计算机网络,有了微型个人电脑,我们可以使用个人电脑,运行软件模拟终端设备,比如 putty,进行远程登录主机,访问主机上的进程。
我们在模拟终端程序putty中输入信息,查看putty程序窗口输出的内容。
这种 模拟终端的软件,对Linux来说,也是终端设备。
Linux进程在启动后,通常就会打开3个文件句柄,标准输入文件(stdin),标准输出文件(stdout)和 标准错误文件(stderr)。
Linux进程,要从用户那里读入输入的信息,就是从stdin文件里面读取信息,要 输出 信息 给用户看 都是 输出到 stdout, 要 输出 错误提示 给用户看 都是 输出到 stderr。
而缺省情况下这三个文件stdin、stdout、stderr 都指向 —— 终端设备。
也就是说:
Linux进程从stdin里面读取信息其实就是从终端设备(比如终端模拟程序Putty)读取信息;
Linux进程写入信息到stdout或者stderr,其实就是打印到终端设备上。
如下图所示
notion image
比如,运行下面的Python程序,要读入信息,就是从终端读入,因为stdin指向终端设备
再比如:下面的命令echo输出给用户看的,就是输入到终端上,因为stdout指向终端设备

2.Stdout、Stderr重定向

如果我们在Shell中输入命令的时候,使用 > 符号, 就可以将输入信息输出到其他文件(包括设备文件)中去。比如
ps > out
运行后,我们会发现out文件里面出现了ps的输入信息,而Putty终端窗口里面则没有任何内容打印出来了。
这个 > 就是 stdout 重定向符号, 它表示 stdout 不是指向 终端设备了,而是 重定向到 out 文件。 所以stdout 指向了 out 文件, 输入的信息就到 out 文件了。 终端屏幕上就没有信息了。
这时对应的示意图如下
notion image
而Stderr的重定向符号 是 2> 。 注意 2 和 > 之间不能有空格。
比如我们执行下面的命令,其中hhhh是个不存在的文件
我们就会发现putty屏幕上没有任何信息,而文件 err里面则有。
如果我们要,同时重定向stdout和stderr到同一个文件both中,命令写法如下:
如果我们要,重定向stdout到out文件,并重定向stderr到err文件,命令写法如下:

3.stdin重定向

我们也可以在命令中,将 标准输入stdin 重定向,使用符号 <
用 vi 创建一个 Python 代码文件 add.py ,其内容如下
该程序从stdin 读取一个数字后,显示其加1后的结果。
再创建一个文件 add.dat内容如下(注意3后面有个空行)
执行如下命令
看到了吗?不需要我们从终端输入数字,该程序直接从文件 add.dat中读取数据并执行操作了。
这个 < 就是 stdin 重定向符号, 它表示 stdin 不是指向 终端设备了,而是 重定向到 add.dat 文件。 所以 stdin 指向了 add.dat 文件, 程序就从add.dat 文件读入信息 了。
这时该进程对应示意图如下:
notion image

4.管道

上面我们曾经学习过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 过滤出来了。
这个过程可以用如下示意图表示
notion image

8.常用命令

1.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
步骤如下
  1. 以root账号登录,或者后续命令前面加 sudo 以root执行
  1. 执行命令 cd /etc/apt 进入到目录 /etc/apt 下
  1. 执行命令 cp sources.list sources.list.bak 先创建备份文件,这样万一改错,可以有备份文件恢复
  1. 执行 vi sources.list 打开文件, 准备把域名从从 cn.archive.ubuntu.com 替换为 mirrors.163.com
  1. 按 冒号,进入底行模式,输入命令 1,$s/cn.archive.ubuntu.com/mirrors.163.com/g 进行替换
  1. 确认一下域名修改正确后,输入 :wq 保存退出。
  1. 执行命令 apt update , 让修改生效
apt 命令用法
  • 安装软件
安装指定的安装包package1, 比如 apt install net-tools
  • 列出所有安装信息
显示所有已经安装的程序包
  • 列出指定软件信息
显示指定程序包package1的安装情况
  • 删除软件
删除程序包package1

2.启动、重启、关闭服务

Linux上有些软件程序是以服务的形式安装的,比如 SSH 服务、 MySQL服务、 nginx服务等。
这些 软件 的启动、重启、关闭 要使用特殊的命令
在当前的 Ubuntu 系统上,使用命令 systemctl 来 启动、重启、关闭 服务。
比如,
要查看 服务 ssh 状态, 执行命令 systemctl status ssh
要启动 服务 ssh, 执行命令 systemctl start ssh
要重启 服务 ssh, 执行命令 systemctl restart ssh
要关闭 服务 ssh, 执行命令 systemctl stop ssh

3.打包与压缩

1.打包

Linux下打包的最常用命令是tar 命令,可将多个文件、目录打包到一个文件中。
  • tar 命令打包
下面是使用tar命令打包的操作演示:
在当前工作目录下面创建3个文件,使用下列命令:
将这3个文件放到一个文件包files.tar,使用下列命令:
也可以使用通配符,如 *.txt,这样的格式代表以txt结尾的文件
tar命令同样可以打包目录,假设 当前目录下 byhy是一个子目录,byhy.txt是一个文件
这个命令就把目录 byhy 和 文件 byhy.txt 都 打包到 文件 byhy.tar 中了。
  • tar 命令解包
要 将 上面创建的 files1.tar 解压到当前目录,使用下列命令:
  • 查看tar 包内容
如果只是想查看 上面创建的 files1.tar 内容,使用下列命令:
  • 往tar 包中添加文件
如果想 在 files1.tar中 添加 新文件 newfile,使用下列命令:
注意:tar命令只是把文件、目录打包到一个文件中。 并不会压缩文件

2.压缩

  • gzip 压缩 和解压
gzip命令用于文件的压缩与解压缩,压缩后的文件名后缀为“.gz”
比如
要 压缩文件abc.txt ,执行命令
这样就产生了一个名为 abc.txt.gz 的压缩后的文件
要 解压文件abc.txt.gz,执行命令
  • gzip 和 tar 的联合使用
tar工具与gzip工具联合使用,实现打包并压缩、解压缩并解包功能
假设 在当前目录有如下3个文件 touch 111.txt 222.txt 333.txt
我们要,打包并压缩这3个文件,放到压缩包文件 byhy.tar.gz里面,使用下面命令:
解压缩并解包,使用下面命令:
● bzip2、zip 压缩、解压
bzip2 和 zip 也是常见的压缩解压工具, 使用方法和 gzip 类似
如下
注意:如果你的Linux上没有安装 bzip2、zip、unzip,可以执行命令 apt install bzip2 zip unzip 来安装

4.top 查看系统进程的动态运行情况

执行top命令可以查看 当前系统中,运行的进程的信息,比如
● CPU 整体负载
在这行显示了 CPU 整体负载
● 各个CPU 的负载(按键盘1,可以在整体cpu和所有cpu之间切换)
  • 进程的CPU占用
缺省情况下,进程列表里就是按CPU占用率来排序的。
如果不是,可以按快捷键大写的P要求top按照CPU占用率来排序。(按b,再按x可以显示当前排序列)
  • 整体内存使用量
注意:上面显示 2507692 free,并非只有 2507692 的内存可用。
因为 buffer 和 cache 部分的内存都是临时缓存用了, 其实也是可用的内存
实际可用的内存大概是 free + buffers + cached
  • 各个进程对内存的占用(RES)
按快捷键大写的 M 可以 对进程列表按照内存使用率来排序

5.查看系统内存使用情况

free命令可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。

6.查看设置系统时间

date 可以用来显示或设定系统的日期与时间。
  • 显示当前日期和时间
  • 设定日期
  • 设定时间

7.查看系统版本

  • 执行命令 uname –a 查看系统内核版本信息
说明 5.4.0 为Linux内核的版本。
  • 执行命令 lsb_release -a 查看Ubuntu系统版本信息
其中,显示Ubuntu发行版本为 20.04 版本

9.网络管理

1.查看网络接口IP地址

查看所有网络接口的IP地址,可以使用命令 ip addr
例如:
上面显示了 两个网络接口 lo 和 enp0s3。其中 lo 是环回接口,我们关注的应该是 enp0s3 这个接口。
上面命令的结果显示:enp0s3 这个接口 的 IPv4 地址是 192.168.50.64

2.启用、禁用网络接口

启用和禁用网络接口,常用的是 ifup 和 ifdown ,要使用root用户执行
Ubuntu 现在缺省是没有这两个命令的, 可以先运行 apt install ifupdown 安装一下。
● 启用网络接口
使用命令 ifup,比如下面的命令就是启用网络接口 enp0s3
● 禁用网络接口
使用命令 ifdown,比如下面的命令就是禁用网络接口 enp0s3

3.ping 检测网络连通性

我们经常需要检查是否可以从本机访问某个远程主机,这时应该使用 ping 命令
例如:
上面的结果就表示 本机 和 IP 为192.168.100.1 的设备(可能是计算机也可能是路由器)之间的网络是通畅的。
可以按 ctrl+C 终止 测试。

4.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

5.ssh(secure shell)登录远程机器

之前我们使用的是Windows下面的终端模拟器PuTTY 远程登录Linux主机。
在Linux下,也可以远程登录其他Linux主机,只需要运行ssh命令即可。
命令的格式如下
比如,你要 使用 user1 账号 远程登录 192.168.1.12 这台Linux机器,执行下面的命令
一般首次登录某个主机的时候,会出现如下提示:
这是因为该远程机器没有被认证过(可能会有‘中间人’攻击的安全隐患),让你确认一下。这里如果是局域网里面的机器,一般安全没有什么问题,输入yes并回车即可。
接下来,会提示输入对应用户的密码,你输入正确的密码即可登录。

6.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,应该这样写
接下来,会提示用户输入用户byhy2的密码,输入正确密码后,进行拷贝操作。
如果,我们要 在主机A上面,将主机B上面的文件/home/byhy2/123.txt 拷贝到主机A的/tmp/下面:
在windows机器上,我们可以使用 WinSCP 工具和远程Linux主机 进行文件的拷贝。
这个工具,安装好后,创建一个到远程Linux主机的连接,随后只要在界面拖动文件即可完成下载,上传文件。

7.wget下载

Linux中,要从网络下载文件,可以使用 wget。
wget就是一个下载文件的命令行工具。
例如:

8.防火墙

通常网站服务之类的产品运行在Ubuntu上,我们会开启防火墙。防止恶意的网络访问和攻击。
Ubuntu目前使用命令 ufw (uncomplicated firewall) 管理防火墙功能。
缺省 ufw 是未被激活的,执行如下命令激活。
注意:这个命令最好是在 虚拟机终端执行。
如果是Putty远程登录,并且当前没有允许SSH访问的ufw规则,执行这个命令可能就会断开连接。
可以执行如下命令检查 当前的 防火墙设置
或者查看更详细的信息
● 开放端口
如果我们允许 外面从网络访问 本机的 SSH TCP 服务端口 22 ,应该这样执行命令
如果你知道端口对应的服务名,也可以使用名字。
比如下面的命令可以允许外面从网络访问 本机的 ssh 服务
比如下面的命令可以允许外面从网络访问 本机的 HTTP 服务端口 80
● 删除规则
要删除一个前面设定的规则,执行下面的命令
 

评论
Loading...