Linux 是一个自由的,免费的,源码开放的操作系统。也是开源软件中最著名的例子。其最主要的目的就是为了建立不受任何商品化软件版权制约的,全世界都能使用的类 Unix 兼容产品。而我们将服务器部署在 Linux 将会更加的稳定、安全、高效以及出色的性能这是 Windows 无法比的。

Linux 系统简介

Linux 作者

纳斯·本纳第克特·托瓦兹(Linus Benedict Torvalds, 1969年~ ),著名的电脑程序员、黑客。Linux内核的发明人及该计划的合作者。托瓦兹利用个人时间及器材创造出了这套当今全球最流行的操作系统(作业系统)内核之一。现受聘于开放源代码开发实验室(OSDL:Open Source Development Labs, Inc),全力开发Linux内核。

Linux 发行版

发行版是基于 Linux 内核的一个操作系统。它带有用户可以使用的软件集合。更多的,它还包含系统管理包。

目前有许多 Linux 发行版。一些有名的版本如: CentOS、Ubuntu、 Redhat等是几个非常受欢迎的 Linux 发行版。

Linux 特点

开放性,多用户,多任务,丰富的网络功能,可靠的系统安全,良好的可移植性,具有标准兼容性。

环境准备

Vmware

大多数服务器的容量(CPU,内存,磁盘等)利用率不足 30%,这不仅导致了资源浪费,也加大了服务器的数量。实现服务器虚拟化后,多个操作系统可以作为虚拟机在单台物理服务器上运行,并且每个操作系统都可以访问底层服务器的计算资源,从而解决效率低下问题。

Vmware虚拟机化技术由此诞生,它可以将一台服务器虚拟化出多台虚拟机,供多人同时使用,提高资源利用率。

关于 Vmware 的安装这里不做详细叙述,网上都可以搜到。

Linux 安装

关于 Linux 的安装可以参考其他文章。

网络配置

1、查看网关

2、配置静态IP(NAT模式)

  • 编辑配置文件,添加修改以下内容

    vi /etc/sysconfig/network-scripts/ifcfg-eth0

    按 i 进入文本编辑模式,出现游标,左下角会出现INSERT,即可以编辑。

    应包含以下配置,除此之外的可以删除掉。

    DEVICE=eth0       #网卡设备名,请勿修改名字
    TYPE=Ethernet #网络类型,以太网
    BOOTPROTO=static #启用静态IP地址
    ONBOOT=yes #开启自动启用网络连接
    IPADDR=192.168.110.4 #设置IP地址
    NETMASK=255.255.255.0 #设置子网掩码
    GATEWAY=192.168.110.2 #设置网关
  • 修改完后执行以下命令

    service network restart	 #重启网络连接
    ifconfig  #查看IP地址
  • 验证是否配置成功

    虚拟机能 ping 通虚拟网关

    虚拟机与物理机(笔记本)相互可ping通

    虚拟机与公网上的百度网址相互可ping通(此步ping通,才说明网络配置成功)

  • 注意:

    a.保证VMware的虚拟网卡没有被禁用

    b.网关IP不能被占用

3、配置 DNS

vim /etc/resolv.conf

配置如下:

nameserver 192.168.110.2   #网关

桥接和NAT区别

  • 桥接:

    结构:网络与物理机同一个网段(会占用外部IP)

    特点:外网能够访问进来;同时也能够访问外网。

    注意:桥接模式下的虚拟机网关必须改为与物理机网关一致

  • NAT:

    结构:构成一个以物理机为网关的子网。

    特点:子网的所有的服务器对外不可见;同时子网能够正常访问外网。

    所以 NAT 模式下安全,还能节省IP资源。

  • Host-only:主要应用于多台虚拟机组成一个封闭的网络

    例如:在做windows域相关实验时,多台虚拟机构成的客户端和服务端处在一个封闭的网络中。在Host-only状态下虚拟机如果需要上网需要另外配置一台具有双网卡的虚拟机充当上网代理的角色。

XShell安装与使用

Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。使用它可以在 Windows 界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。除此之外,其还有丰富的外观配色方案以及样式选择。

关于Xshell的安装网上有相关的教程。使用命令时与Linux中操作相同。

文件传输

远程拷贝

1. 将本地文件复制到远程机器

scp local_file remote_username@remote_ip:remote_folder 

比如把现在 sean02 节点的 root 目录下 test.txt 文件复制到远程 sean03 节点上相同路径下

2. 将本地目录复制到远程机器

scp -r local_folder remote_username@remote_ip:remote_folder

复制目录与文件不同的地方在于需要用到 -r,意思是循环遍历文件夹里的文件,这里 我们把 sean02 节点 root 目录下的 mytask 文件夹复制到 sean03 节点的同路径下,这样mytask文件夹下的 yy.txt 文件也会一并复制过来。

3. 将远程文件或者目录复制到本地道理相同

文件上传

**1. 需先安装好 lrzsz **

yum install lrzsz -y

2. 安装好后,输入上传的命令 rz,弹出一下界面

3. 选择一个windows系统里的文件上传至虚拟机的当前目录下,然后 ll 命令,查看结果

文件下载

下载跟上传相反,是把虚拟机上的文件下载到window系统,使用命令 sz ,后面要跟上需要下载的文件名称。

Xftp的使用

Xftp 跟 Xshell 出自同一家公司,与Xshell相同,灵活轻巧。当我们使用 rz 和 sz 来进行上传下载时,只能传输单个文件,不能传输文件夹,而且当文件过大时,速度会慢很多,使用Xftp传输可以轻松解决这些问题。打开Xftp,左边是window系统,右边是虚拟机系统文件。

磁盘指令

查看硬盘信息

1. 命令:df

2. 默认硬盘分区的大小以kb显示

3. 可以在 df 后面加参数-m mb单位, -k kb单位 , -h 更易于阅读

查看文件目录的大小

1. 命令:du 文件名字/目录名字 ,默认单位为 kb

-k kb单位

-m mb单位

-a 所有文件和目录

-h 更易于阅读

–max-depth=0 目录深度

2. 例如,查看/etc目录下,所有文件的大小

查看/etc目录大小,并且目录大小的单位根据实际大小,自动选择。

网络指令

查看网络配置信息

命令:ifconfig

注:箭头1指向的是本机IP,箭头2为广播地址,箭头3为子网掩码。

测试与目标主机的连通性

命令:ping remote_ip

输入 ping 192.168.1.26 代表测试本机和 26 主机的网络情况,箭头1表示一共接收到了3个包,箭头2表示丢包率为0,表示两者之间的网络顺畅。注意:linux系统的ping命令会一直发送数据包,进行测试,除非认为的按ctrl + c停止掉,windows系统默认只会发4个包进行测试,以下为windows的dos命令。

显示各种网络相关信息

1. 命令:netstat

-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态

-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。

提示:LISTEN 和 LISTENING 的状态只有用-a或者-l才能看到

2. 查看端口号(是否被占用)

  • lsof -i 端口号

  • netstat -tunlp|grep 端口号

测试远程主机的网络端口

1. 需要安装 telnet

yum install telnet -y

2. 命令: telnet ip port

查看本机能否连上远程主机的端口号

上图说明,192远程主机的22端口,我们本机是可以连的上的。

测试成功后,按ctrl + ] 键,然后弹出telnet>时,再按q退出。

http 请求模拟

1. 命令: curl 【option】【url】

2. 用法

-X/–request [GET|POST|PUT|DELETE|…] 使用指定的http method发出 http request

-H/–header 设定request里的header

-i/–include 显示response的header

-d/–data 设定 http parameters

-v/–verbose 输出比较多的信息

-u/–user 使用者账号,密码

-b/–cookie cookie

参数 -X 跟 --request 两个功能是一样的

example:

curl -X GET http://www.baidu.com/

curl --request GET http://www.baidu.com/

curl -X GET “http://www.rest.com/api/users

curl -X POST “http://www.rest.com/api/users

curl -X PUT “http://www.rest.com/api/users

curl -X DELETE “http://www.rest.com/api/users

系统管理

用户操作

1. 创建用户

useradd/adduser username
passwd username 修改密码

这样就创建了一个名叫 qq 的普通用户了。

2. 删除用户

userdel -r username

3. 修改用户

命令:usermod

usermod 不允许你改变正在线上的使用者帐号名称。当usermod用来改变user时,必须确认这名user没在电脑上执行任何程序。

3.1 修改用户名

usermod -l new_name old_name

这样就把 qq 用户改为 mytest 用户了。

3.2 锁定账号

usermod -L username

账号锁定期间,用户输入的命令无论正确与否都提示密码错误,登录不了,即冻结了账号。

注意:慎用,禁止锁定root用户,因为root用户是超级管理员,一旦锁定将无法解除。

3.2 解除锁定

usermod -U mytest

普通用户被锁定以后可以通过管理员用户给予解除。

4. 查看用户

  1. whoami 查看当前登录用户名

  1. 普通用户可查看 /etc/passwd 文件,得出系统一个有多少个用户。

  1. 除此之外,root 用户还可以查看 /etc/shadow 文件,来得出系统一个有多少用户。

用户组操作

1. 创建用户组

groupadd groupname

2. 删除用户组

groupdel groupname

3. 修改用户组

groupmod -n new_name old_name

4. 查看用户组

命令:groups 查看当前登录用户的组内成员

即当前的root用户所属的组为root组。

命令:groups username 查看指定用户所在的组。

即 mytest 用户所属的组为 qq 组,这是由于我第一次创建的 qq 用户,然后给它改名字了,但它的主组没有改。

注意:创建用户时,系统默认会创建一个和用户名字一样的主组。

usermod -g 组名 用户  —— 把用户的主组改为其他的组
usermod -G 组名 用户   —— 把用户添加到附加组当中

将 mytest 用户添加到附加组 testgroup 里,然后查看 mytest 用户属于哪些组。注意:testgroup 组我在上面已经创建好了。

如果想查看一个组下面一共有多少用户,可以通过查看/etc/group文件的内容来得到。

将 root 用户也添加到附加组group里。然后一起查看。

此时发现,group组里的成员一共有mytest用户和root用户。

系统权限

查看/usr 目录下的每个文件或目录的权限

命令: ll /usr

1. 权限类别

Linux中,每个文件或目录都拥有三种权限

权限 对文件的影响 对目录的影响
r(读取) 可读取文件 可列出目录内容
w(写入) 可修改文件内容 可在目录中创建删除文件
x(执行) 可以修改文件内容 可访问目录内容

2. UGO 模型

Linux权限基于UGO模型进行控制。

U代表User, G代表Group, O代表other。

权限三个一组(rwx), 对应UGO分别设置。

每个文件都有一个拥有者/用户(User), 用户的所属组即(Group), 不属于上面的都是other。

3. 修改权限

3.1 修改文件/目录的拥有者

命令:chown 【选项】… 【所有者】【:【组】】 文件…

  1. 只修改所有者

    chown username 文件/目录

如图,将将属于test.txt文件的所有者root用户改为了mytest用户。
  1. 同时修改一个文件或目录的所有者和属组。
chown username:groupname 文件/目录

如果要递归修改整个目录下的所有者或属组,加参数-R.

如:chown -R mytest:test 目录名字

3.2 修改文件/目录的权限

命令:chmod ugo+rwx name

其中ugo代表的是要对谁进行权限操作,rwx代表进行怎样的权限操作,+代表的授权,-代表的取消权限。

这个命令相当于把myfile的读/写/执行三个权限对所有人都开放了。

chmod o-rwx myfile 表示将其他人对myfile的读/写/执行权限都取消了。

权限的另外一种修改方式:

将rwx rwx rwx 三组权限的读写执行权限分别用0和1代替,1代表有权限,0代表没权限,最后将三组二进制转化成十进制。

命令:chmod 700 test.txt

系统配置

用户组信息配置

cat /etc/group 

用户信息配置

cat /etc/shadow和cd /etc/passwd系统存在的所有用户名

系统服务初始化配置

0:停机状态[工作中实际生产环境慎用!]

1:单用户模式,root账户进行操作

2:多用户,不能使用net file system,一般很少用

3:默认的完全多用户,一部分启动,一部分不启动,命令行界面

4:未使用、未定义的保留模式

5:图形化,3级别中启动的进程都启动,并且会启动一部分图形界面进程。

6:停止所有进程,卸载文件系统,重新启动 (reboot)

这些级别中1、2、4很少用,相对而言0、3、5、6用的会较多,3级别和5级别除了桌面相关的进程外没有什么区别。为了减少资源占用,推荐都用3级别。

注意 :**linux***默认级别为3**,不要把initdefault 设置为0 和 6 *

主机名配置

若要修改主机名字,可在/etc/sysconfig/network文件里修改.

vim etc/sysconfig/network

机器重启才能生效。

DNS 配置

hosts 文件的作用相当于DNS,提供IP地址hostname的对应,可在这个文件里添加映射。

/etc/resolv.conf 为DNS服务器的地址文件

sudo 权限配置

使用Linux系统时,经常会被要求使用超级权限,如果拥有root账户那还好,可以直接进行任何操作,但是这并不一个好方法,也不推荐使用。root的权限太过大了,慎用!!!

对于普通用户来说,一个简单的sudo即可解决大部分问题。

vim /etc/sudoers(只读)

格式:授权用户 主机=【(切换到哪些用户或用户组)】【是否需要密码验证】命令

编辑sudoers ,用 visudo 命令,进行编辑

接下来mytest用户就可以用yum 和 service 命令了。

注意:在使用命令时,需要加sudo 然后在敲命令,且第一次使用时需要mytest用户密码,接下来每隔15分钟需要一次密码验证。

如果不需要密码直接运行命令的,应该加NOPASSWD:参数

sudo -l 列出该用户所有sudo权限。

如果要将权限赋予某一个组,则需要在组名前加%,

系统时间

1. 查看系统时间

命令:date

cal 查看日历

cal 8 2018

cal 2018

2. 更新系统时间

date -s 2012-08-02只修改系统的日期

date -s 10:08:00 修改时间不修改日期

date -s “2018-01-01 04:53:00” 同时修改日期和时间

为了能让修改的时间更精确,可以用ntp来做时间同步,它会到时间服务器里去同步时间,保证了时间的准确度。

时间同步

需要事先安装ntp服务:

yum install ntpdate -y 

命令:ntpdate cn.ntp.org.cn

该命令表示为:到域名为cn.ntp.org.cn的时间服务器上同步时间。

注:全球的时间服务器有很多个,可以到百度或谷歌上搜,不一定用cn.ntp.org.cn的时间服务器。

环境变量

Linux系统的全局环境变量是在/etc/profile文件里配置。

但是使用配置全局变量需要重启服务器才会生效,而配置局部变量会达到同样的效果,因此我们一般采用的是配置局部变量。

/root/ .bash_profile  -- 局部的环境变量

首先考虑一个问题,问什么我们先前敲的yum, service,date,useradd等等,可以直接使用,系统怎么知道这些命令对应的程序是放在哪里的呢?

这是由于无论是windows系统还是linux系统,都有一个叫做path的系统环境变量,当我们在敲命令时,系统会到path对应的目录下寻找,找到的话就会执行,找不到就会报没有这个命令。

我们可以查看一下,系统一共在哪些目录里寻找命令对应的程序。

命令:echo $PATH

可以看到path里有很多路径,路径之间有冒号隔开。当用户敲命令时,系统会从左往右依次寻找对应的程序,有的话则运行该程序,没有的就报错,command not found.

重定向与管道

重定向管道

1. 输出重定向

> 输出重定向到一个文件或设备 覆盖原来的文件

>> 输出重定向到一个文件或设备 追加原来的文件

ls > xss,这个命令会将ls的查看结果输出到shsxt这个文件里,不再将内容打印到屏幕上

命令:echo “shsxt is good” >> shsxt

将“shsxt is good”追加到shsxt文件里。

2. 输入重定向

< 输入重定向到一个程序

cat < xss ,将xss文件里的内容当作是cat 命令的输入,其实同 cat xss 的效果是一样的。

标准/错误输出重定向

1. 标准输出重定向

符号为: 1>

该符号含义为:输出重定向时,只有正确的输出才会重定向到指定文件,否则如果是错误的输出则不会。输出重定向默认是1。即符号“1>”等价于”>”

两种写法都一样。

如果此时,我们的命令发生错误,输出错误的日志,则不会重定向到指定文件。

2. 错误输出重定向

符号为: 2>

该符号含义为:把错误的输出日志重定向到指定文件里,正确的日志则不会。

如上图,命令cat sss 的输出是一个错误的日志(因为我没有sss这个文件),此时并没有打印到屏幕上,而是把日志重定向到了xss4文件里,当我用cat命令去查xss4文件的内容时,才看到了这句错误的日志。

3. 结合使用

符号“2>&1”

2>&1 将一个标准错误输出重定向到标准输出 ,即无论是正确的输出还是错误的输出都重定向到指定文件里。

注意:以上重定向符号都是覆盖的,若想追加则用”>>”

管道符 |

命令 “|” 表示把前一个输出当做后一个输入

介绍这个命令之前,先介绍grep命令。grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配到的行打印出来。

|和grep命令结合使用: netstat -anp | grep 22

命令含义:把netstat –anp 命令的输出 当做是grep 命令的输入。

上面的命令就是:先用netstat –anp 命令查出本机的端口信息,然后把netstat输出的端口信息,用作grep命令的输入进行匹配搜索,并且匹配的是22 ,即查看22端口是否开着。

命令执行控制

1. 命令:&& 前一个命令执行成功才会执行后一个命令

该命令,先执行cat shsxt命令,当cat shsxt 命令执行成功后,才执行ping 命令。

2. 命令:|| 前一个命令执行失败才会执行后一个命令

第一个命令cat sss执行失败了,然后才执行ping 命令。

信息黑洞

写入它的内容都会永远丢失,说白了就是不显示任何信息

位于根目录的 /dev/null

ls > /dev/null

服务操作

列出所有服务

命令:chkconfig

查询操作系统在每一个执行等级中会执行哪些系统服务,其中包括各类常驻服务。

操作服务

1. 命令:service 服务名 start/stop/status/restart

例子:对防火墙服务进行操作,防火墙的服务名为:iptables.

  • 查看防火墙服务运行状态。

  • 开启防火墙。

  • 关闭防火墙。

2. 永久关闭(启动后生效):

chkconfig iptables on/off

chkconfig

添加服务

/etc/rc.d/init.d 目录包含许多系统各种服务的启动和停止脚本

/etc/rc.d/目录下rc0.d-rc6.d子目录里分别放的是系统对应执行级别的服务软连接。

如下图所示,每个软连接前面都有一个以S或K开头+数字的前缀名,代表了这个脚本在开机时的启动顺序,或关机时的杀死顺序。(S为启动,K为杀死,在rc3.d里就是系统以3级别运行时的执行情况)

1. 若要添加自己写的服务,则要在脚本前面加以下两句:

#chkconfig: 2345 80 90
#description:auto_run

2. 编写自己的服务脚本,例如:开机时同步时间:vim myservice.sh

3. 写完之后修改权限,让它拥有可执行权限。

4. 接下来将脚本拷贝到/etc/init.d目录下,然后加入到服务里。

命令:chkconfig --add myservice.sh

5. 最后重启下服务器,验证一下。系统时间成功修改,且在/usr目录下有ntpdate.log产生。

删除服务

chkconfig --del name

服务初执行等级更改

chkconfig --level 2345 name off|on

定时调度

crond 是 linux 下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与 windows 下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动 crond 进程,crond 进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

格式

minute(分钟) hour(小时) day(天) month(月) dayofweek(周) command(命令)

  • minute:从0到59的整数

  • hour:从0到23的整数

  • day:从1到31的整数 (必须是指定月份的有效日期)

  • month:从1到12的整数 (或如Jan或Feb简写的月份)

  • dayofweek:从0到7的整数,0或7用来描述周日 (或用Sun或Mon简写来表示)

  • command:需要执行的命令

编辑的内容如下图,表示每分钟执行一次 echo “hello”命令。

只要时间一到,触发定时任务,系统就会出现以下语句进行提示:

该提示只有我们操作其他的命令后才会出现,如果一直放着是不会有此提示

然后我们可以去/var/spool/mail/root文件里查看root用户定时任务的执行情况。

vim /var/spool/mail/root

设置方式

设置定时调度有两种方式:

1、在命令行输入: crontab -e 然后添加相应的任务,wq存盘退出。

2、直接编辑 /etc/crontab 文件,即vim /etc/crontab,添加相应的任务。

查看调度任务

crontab -l	#列出当前的所有调度任务
crontab -l -u jp #列出用户jp的所有调度任务

删除任务调度工作

crontab -r	#删除所有任务调度工作

Linux 安全

防火墙

1. 临时性设置(无需重启服务器)

service iptables start/stop/status

2. 永久性设置(需要重启服务器)

chkconfig iptables on/off

seLinux

Selinux是Linux的一个安全策略DAC–MAC,但是,实际应用中,很多人会遇到这样那样的问题。很多编译安装软件的文档,也特意注明了,建议关闭SeLinux。

  • enforcing:强制模式,代表 SELinux 运作中,且已经正确的开始限制 domain/type 了;
  • permissive:宽容模式:代表 SELinux 运作中,不过仅会有警告讯息并不会实际限制。这种模式可以运来作为 SELinux 的 debug 之用;
  • disabled:关闭,SELinux 并没有实际运作。

1. 查看SELinux状态:

sestatus -v      ##如果SELinux status参数为enabled即为开启状态

2. 关闭SELinux:

(1)临时关闭(不用重启机器):

setenforce 0                   设置SELinux 成为permissive模式
#setenforce 1 设置SELinux 成为enforcing模式

(2)修改配置文件需要重启机器:

修改 /etc/selinux/config 文件,将 selinux 关闭掉。

将 SELINUX=enforcing 改为 SELINUX=disabled

然后重启机器即可。

Linux 进程操作

查看进程

1. 命令: ps -aux

-a 列出所有

-u 列出用户

-x 详细列出,如cpu、内存等

-e 显示所有进程

-f 全格式

2. 命令: ps - ef | grep ssh

查看所有进程里CMD是ssh 的进程信息。

其中箭头所指的是ssh服务进程的进程号(PID)

3. 根据 CPU 使用来升序排序

ps -aux --sort -pcpu

看出来暂时CPU占用率没有,默认按照进程号进行排序。

PID: 运行着的命令(CMD)的进程编号

TTY: 命令所运行的位置(终端)

TIME: 运行着的该命令所占用的CPU处理时间

CMD: 该进程所运行的命令

性能分析

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,常用于服务端性能分析。

1. 用法 :top [-] / [d] / [p] / [q] / [c] / [C] / [s] / [S] / [n]

2. 参数说明

d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。

p 通过指定监控进程ID来仅仅监控某个进程的状态。

q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。

S 指定累计模式

s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。

i 使top不显示任何闲置或者僵死进程。

c 显示整个命令行而不只是显示命令名。

total 进程总数

running 正在运行的进程数

sleeping 睡眠的进程数

stopped 停止的进程数

zombie 僵尸进程数

Cpu(s):

us 用户空间占用CPU百分比

sy 内核空间占用CPU百分比

ni 用户进程空间内改变过优先级的进程占用CPU百分比

id 空闲CPU百分比

wa 等待输入输出的CPU时间百分比

hi:硬件CPU中断占用百分比

si:软中断占用百分比

st:虚拟机占用百分比

Mem:
total 物理内存总量
used 使用的物理内存总量
free 空闲内存总量
buffers 用作内核缓存的内存量
Swap:
total 交换区总量
0k used 使用的交换区总量
free 空闲交换区总量
cached 缓冲的交换区总量,内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小,相应的内存再次被换出时可不必再对交换区写入。

后台进程

若想一个程序放在后台运行,只要在命令后面加 & 符号

1. 例如: ping www.baidu.com > ping.log &

2. jobs –l 列出当前连接的所有后台进程。

注意:jobs命令只看当前终端生效的,关闭终端后,在另一个终端jobs已经无法看到后台跑的程序了。

3. 此时应该用ps -ef | grep 进程名 来查询后台进程的

ps -ef | grep ping

后台进程有时运行一段时间后,系统会自动把该进程挂起来,导致进程无法正常运行。

故后台经常一般和nohup命令结合使用,告诉系统不要把该进程挂起,这样子该命令就可以24*7小时不间断的运行了。

nohup ping www.baidu.com > ping2.log &

杀死进程 kill

命令:kill 进程号(PID)
kill -9 进程号  #强制杀死

可以先用jobs –l或ps 命令先查出对应程序的PID或PPID ,然后杀死掉进程。

JDK 部署

官网下载Linux版本jar包

1. 用Xftp将jdk包上传到linux系统里,我这里上传到/usr/soft/ysb目录下。

2. 然后解压: ar -zvxf jdk-8u191-linux-x64.tar.gz -C …/

其中 -C 意思是解压到指定的路径 …/ 就是上级目录目录 /usr/soft/ 中

配置环境变量

注意,这里有两种配置方法,一种是配置全局,在 /etc/profile 文件中

另一种是配置局部,在 /root/.bash_profile 文件中

因为配置全局后需要重启服务器,所以我们一般在开发过程中选择配置局部的环境变量。

1. 找到局部配置文件 .bash_profile,这是个隐藏文件,通过 -a 可以看到

这种带 “ . ” 前缀的文件就是隐藏文件。

2. 使用命令 vim ~/.bash_profile 编辑配置文件

把jdk安装路径加入 JAVA_HOME变量,并把JAVA_HOME变量加入到PATH中,前面加上export。

注:配置环境变量的准则是,可变的引入,不变的保留。如果单是使用jdk可以不配JAVA_HOME,但是后面使用的Tomcat等软件需要用到JAVA_HOME,不然会报错。

3. 重新加载环境变量:source /etc/profile

4. 验证:java -version

Tomcat 部署

1、官网下载安装包

下载 Tomcat:http://tomcat.apache.org

2、上传并解压

我这里上传至/usr/soft/yso目录下,然后解压,过程同 jdk 雷同。

3、启动 Tomcat

在 tomcat 的 bin目录下有个startup.sh 脚本可以直接启动 tomcat 服务。

关闭tomcat服务,可以用shutdown.sh命令。

或者ps -ef | grep tomcat 查看出tomcat进程号后,用kill命令。

4、jps

jps是JDK 1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简单察看当前java进程的一些简单情况。

如上图所示,jps命令显示出了,系统当前运行在jvm上的进程情况。其中Bootstrap是tomcat的进程名字,2814是tomcat的PID

5、验证 Tomcat

先把防火墙关了,然后访问虚拟机IP的8080端口

免密码登录

工作原理

1、Server A向Server B发送一个连接请求。

2、Server B得到Server A的信息后,在本地的authorized_keys文件中查找A存放在B上的公钥,如果有相应的公钥,则随机生成一个字符串,并用Server A的公钥加密,接着发送给Server A。

3、Server A得到Server B发来的消息后,使用私钥进行解密,然后将解密后的字符串发送给Server B。Server B用原来随机生成的字符串和A发过来的字符串进行对比,如果一致,则允许免登录。

总结:A要免密码登录到B,B首先要拥有A的公钥,然后B要做一次加密验证。对于非对称加密,公钥加密的密文不能公钥解开,只能私钥解开。

例子:主机A对主机B对主机C进行两两免密码登录

主机A(sean02):192.168.110.4

主机B(sean03):192.168.110.5

主机C(sean04):192.168.110.6

生成公钥和密钥

  1. 每个节点执行命令,生成自己的公钥私钥 ssh-keygen -t rsa -P ‘’ -f ~/.ssh/id_rsa
  2. 自己登陆自己: cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  3. 登陆其他服务器节点不需要密码需要将自己的公钥发送给要登陆的节点服务器 scp ~/.ssh/id_rsa.pub root@node32:/opt/
  4. 被登陆的节点服务器需要将发送过来的公钥追加到自己的私钥或系统里面
  5. cat /opt/id_rsa.pub >> ~/.ssh/authorized_keys
  6. sean02 能 ssh 登陆到 seano3 和 sean04
  7. 如果 sean03 要免密码登陆到 sean02 和 sean04,重复 3 4 5 步骤两两互登!!!
  8. sean04 要免密登录到 sean02 he sean03 同样操作。

验证结果

结果中可以查看出:sean02自己登录自己,然后登录到sean03,sean03又登录到sean04,sean04又登录到sean03,sean03又登回到sean02。最后使用命令exit一步一步退回来,最终退回到sean02本身。

部署mysql

1、安装 mysql

  • 源码安装

第一种安装方式是源码安装,由于安装过程较为繁琐,且容易出错,这里我们不做演示,也不推荐,如想了解可以自行网上查看资料。

  • yum 安装
yum install mysql-server mysql-devel -y

从中可以看出来使用 yum 安装 mysql 很简单,也不容易出错,推荐使用!

2、登录 mysql

  • 安装完毕之后,要先启动 mysql 服务
service mysqld start

  • 启动之后,第一次登录直接输入命令:mysql,即可进入

  • 输入命令:show databases;即可展示默认的数据库

  • 使用命令:use mysql; 改变当前数据库实例,然后 show tables;即可展示当前数据库中存在的表

3、添加用户

  • 添加用户并设置密码

    第一次进去是没有用户的,也没有设置密码,这里我们可以去添加

mysqladmin -u root  password 123456

注意:添加的用户必须是存在的,否则会报错。

  • 使用添加的用户登录,并输入密码
mysql -uroot -p

显示 msql> 说明就成功进来了,然后就可以像之前一样去操作数据库。

4、连接Window系统的 mysql

  • 放权给Linux中的mysql链接window中的数据库

现在直接连接会发现连接不上,是因为Linux系统中host地址字段是以字符串来保存,我们在navicat中的host:192.168.110.6根本就不能与localhost匹配上。

  • 在 Linux 中查询数据信息

  • 把 Linux 中的 host 改成通配符 %

    因为 host 改为 % 后,所有 IP 都有连接权限。

​ 然后修改。

**注意:**最后需要刷新一下权限!!!(否则有时不生效)

flush privileges;

  • 退出重启 mysql 即可连接上

个人思考:

既然,host 指定了允许用户所使用的IP,那把host改为当前节点的IP不就可以了,但是我把通配符 % 改为 “ 192.168.110.6 ” 之后,发现根本连接不上,并且navcat 提醒网关192.168.110.1不允许访问,于是我把host改为网关之后,发现可以正常访问了,并且另外两台同网段的节点IP也都能正常连接数据库。

===> 由此证明,如果把 Linux Mysql中的 host 设置为 网关,那么在同一个网关下的所有节点都可以去访问。