Linux

1,Linux

1.1 linux系统简介:

​ Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds) 在赫尔辛基大学上学时(22岁)出于个人爱好而编写的。 git 分布式代码同步技术 svn 集中式代码同步技术 风靡全世界

​ github (世界级代码托管平台) gitee(中国代码托管平台) ->git 和svn 代码同步工具

​ Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX(可移植操作系统接口Portable Operating System Interface) 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。

Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

1.2 特点:

​ 1 .多用户,多任务

​ 2.支持多种平台

​ 如具有x86、SPARC、Alpha等处理器的平台。此外Linux还是一种嵌入式操作系统,可以运行在掌上电脑、机顶盒或游戏机上。

3.丰富的网络功能,良好的可移植性

\4. 具有标准兼容性,良好的用户界面

\5. 可靠的系统安全, 出色的速度性能

\6. 开源,免费

1.3 linux发行版本

1.4 centos简介及特点:

​ CentOS(Community Enterprise Operating System,中文意思是社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。两者的不同,在于CentOS完全开源。

1.可以把CentOS理解为Red Hat AS系列!它完全就是对Red Hat AS进行改进后发布的!各种操作、使用和RED HAT没有区别!

2.CentOS完全免费,不存在RED HAT AS4需要序列号的问题。

3.CentOS独有的yum命令支持在线升级,可以即时更新系统,不像RED HAT那样需要花钱购买支持服务!

4.CentOS修正了许多RHEL的BUG!

1.5 vm和 centos下载和安装:

​ 参考下载安装文档

1.6 启动和关机

关机(root用户使用):

​ shutdown -h now

​ poweroff

​ init 0 (0-6 分别代表启动状态 6重启)

​ shutdown -h 5 //5分钟后关机

​ shutdown -h 11:11 //定时关机

重启:

​ reboot

​ shutdown -r now

​ init 6

​ shutdown -r 5 //5分钟后重启

​ shutdown -r 11:11 //11点11分重启

​ shutdown -c //取消重启

1.7 centos 的网络和防火墙

1.7.1 动态获取IP

​ 测试是否能够上网:ping www.baidu.com

​ ip addr : centos7中查看IP信息的命令(之前版本可以直接使用ifconfig)

​ 使用动态主机配置协议动态的配置网络接口的网络参数:

dhclient     获取IP(DHCP)

​ 再次测试是否能够上网

​ dhclient -r 释放IP

​ 获取的IP是动态的,下次重启系统后,IP地址也会变化, 把系统的IP设置为静态,方便以后使用

1.7.2 虚拟网卡vm0,vm1,vm8简介:

vm 0:

​ 桥接模式的虚拟机,就像一个在路由器”民政局”那里”上过户口”的成年人,有自己单独的居住地址,虽然和主机住在同一个大院里,但好歹是有户口的人,可以大摇大摆地直接和外面通信。 主机IP:192.168.0.125 虚拟机IP:192.168.0.126 同该网段的其他主机是一样的,不能配置一样,配置一样就会有IP冲突。

​ vm8:

​ NAT模式的虚拟机,纯粹就是一个没上过户口的黑户,路由器”民政局”根本不知道有这么个人,自然也不会主动和它通信。即使虚拟机偶尔要向外面发送点的信件,都得交给主机以主机的名义转发出去,主机还专门请了一位叫做NAT的老大爷来专门负责这些虚拟机的发信、收信事宜。 主机IP: 192.168.0.125 虚拟机IP: 192.168.170.130 里面该网段配置后照样可以上网,这种技术就叫NAT (网络地址转换技术)

​ vm1:

​ 仅主机模式的虚拟机,纯粹是一个彻彻底底的黑奴,不仅没有户口、路由器”民政局”不知道这么号人,还被主机关在小黑屋里,连信件也不准往外发。

没有IP设置,无法和外界进行通信

1.7.3 设置静态IP

1, 查看虚拟网关:

​ VM虚拟机的 编辑---->虚拟网络编辑器----->vmnet8----->nat设置

NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。

2,编辑网卡文件

​ vi /etc/sysconfig/network-scripts/ifcfg-ens33

​ 追加以下内容:

IPADDR=192.168.23.10

NETMASK=255.255.255.0

GATEWAY=192.168.23.2

DNS1=192.168.0.1

或者

DNS1=8.8.8.8 谷歌在全世界范围的一个DNS域名服务解析

DNS1=114.114.114.114 中国网络大型运营商提供个DNS域名服务解析

修改: ONBOOT=true 启动时该网卡起效

​ BOOTPROTO=static 静态IP配置,不再使用DHCP动态IP分配

3,重启网络

​ systemctl restart network.service

​ service network restart

4,再次查看并测试

​ ip addr

​ ping www.baidu.com

1.7.4 SSH工具简介和使用

(ssh协议默认端口号为22) ftp 21 http 80 https 443

​ SSH(Security Shell) 是开源的,是用于远程登录的最为可靠的网络协议。系统管理员用它来执行命令,以及通过 SCP =security copy 协议在网络上向另一台电脑传输文件。

通过配置 SSH 免密码登录,你可以享受到如下的便利:

1、用脚本实现日常工作的自动化。

2、增强 Linux 服务器的安全性。这是防范虚拟专用服务器(VPS)遭受暴力破解攻击的一个推荐的方法,SSH 密钥单凭暴力破解是几乎不可攻破的.

1.7.5 防火墙

1、重启、关闭、开启、firewalld.service 服务

​ 查看防火墙状态

​ systemctl status firewalld

​ service firewalld status

​ 重启防火墙

​ Service firewalld restart 重启

​ systemctl restart firewalld 重启

​ 关闭防火墙

​ Service firewalld stop 关闭

​ systemctl stop firewalld 关闭

​ 启动防火墙

​ Service firewalld start 开启

     systemctl start firewalld 开启

​ 设置开机是否启动:

​ systemctl disable firewalld 设置开机不启动

​ systemctl enable firewalld 设置开机启动

​ 2、查看防火墙状态(防火墙自带的,显示简单)

​ firewall-cmd --state

​ 3、查看防火墙规则

​ firewall-cmd --list-all

​ 4,firewall开启和关闭端口

以下都是指在public的zone下的操作,不同的Zone只要改变Zone后面的值就可以

添加:

firewall-cmd --zone=public --add-port=3306/tcp --permanent (--permanent永久

生效,没有此参数重启后失效)

根据所在的网络场所区分,预设保护规则集

– public:仅允许访问本机的ssh dhcp ping服务

– trusted:允许任何访问

– block:阻塞任何来访请求(明确拒绝,有回应客户端)

– drop:丢弃任何来访的数据包(没有回应,节省服务端资源)

重新载入:

firewall-cmd --reload

查看:

firewall-cmd --zone=public --query-port=3306/tcp

删除:

firewall-cmd --zone=public --remove-port=3306/tcp --permanent

​ 测试网络是否通畅: ping www.baidu.com

​ vim 安装 yum -y install vim*

2 知识点总结

​ 关机shutdown -h poweroff,重启命令 shutdown -r reboot 等等

​ 配置静态IP,使用SSH工具Xmanager->Xshell 进行远程连接

​ 防火墙操作:

​ service 服务器名称 stop/start/status/restart

​ systemctl stop/start/status/restart 服务器名称

​ systemctl enable/disable 服务器名称

3 vi文本编辑器

3.1 vi 文本编辑器

​ 使用yum在线安装vi的升级版本vim,安装前要确保虚拟机能上网

​ ping www.baidu.com 正常执行时,执行下面命令

​ yum -y install vim* vim为后面课程做准备,配置文件非常大,修改时更醒目

3.1.1 vi/vim概念:

​ 在CentOS中,常用的文本编译器是vi编译器和它的升级版本vim编译器。 vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器。vi也是Linux中最基本的文本编辑器,学会它后,将在Linux的世界里畅行无阻。

3.1.2 vi/vim的三种模式及各个模式之间的转换关系

​ 基本上vi可以分为三种状态,分别是命令模式(上图中的一般模式) (command mode)、 插入模式(Insert mode)和底行模 式 (last line mode)

  1. 命令行模式(command mode)

  控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。

  1. 插入模式(Insert mode)

  只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。

  1. 底行模式(last line mode)

  将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等。

不过一般我们在使用时把vi简化成两个模式,就是将底行模式(last line mode)也算入命令行模式command mode)。

3.1.3 模式切换操作步骤

(1)如果想退出 vi,则需要先切换到底行模式;

(2)在插入模式下,先按ESC键,然后按下:键,则切换到底行模式;

(3)如果想保存当前编辑的内容,在:后输入wq! ,即 :wq! ,这样就将文本保存了.然后退出了vi编 辑器。

(4)如果不想保存当前编辑的内容,在:后输入q! ,即 :q! ,这样放弃本次编辑直接退出了vi编辑器。 ;

3.1.4 编辑命令和快捷方式:

插入命令:(一般模式进入到插入模式)

i 在光标前插入

I 在光标当前行开始插入

a 在光标后插入

A 在光标当前行末尾插入

o 在光标当前行的下一行插入新行

O 在光标当前行的上一行插入新行

定位命令:

:set nu 显示行号

:set nonu 取消行号

:n 到文本的第n行

gg 到文本的第一行

G 到文本的最后一行

替换和取消命令(一般模式下):

u undo,取消上一步操作(windows下ctrl+z)

ctrl + r redo,返回到undo之前 (windows下ctrl+y)

r 替换光标所在处的字符

R 从光标所在处开始替换,按Esc键结束

删除命令:

x 删除光标所在处字符

nx 删除光标所在处后的n个字符

dd 删除光标所在行。

ndd 删除n行

dG 删除光标所在行到末尾行的所以内容

D 删除光标所在处到行尾的内容

:5,7d 删除指定范围的行

常用快捷键:

Shift+ zz 保存退出,与“:wq”作用相同

v 进入字符可视模式

V 或 Shift + v 进入行可视模式

Ctrl + v 进入块可视模式

ctrl+b:屏幕往后移动一页

ctrl+f:屏幕往前移动一页

按"$"符号将光标移动到行尾

按"^"将光标移到行头

yy:复制光标所在行到缓冲区。

nyy:例如,「6yy」表示拷贝从光标所在的该行"往下数"6行文字。   

注意:所有与"y"有关的复制命令都必须与"p"配合才能完成复制与粘贴功能。

​ 用"/"加上要查找的内容.例如"/hello"或者是"?hello"也是可以的.

​ 替换:在底行模式下使用“s/原字符/新字符/g” 代表当前行所有 如果想全局替换,s变为%s

ctrl+z 非正常退出 会有备份文件,需要删除备份文件才会正常进入

产生交换文件后,解决办法

ls -a /path

rm -rf .xxxx.swp 删除交换文件 如果多个 rm -rf xxx.sw*

3.2 用户管理,组管理和时间管理

3.2.1 用户管理

1)保存用户信息的文件:/etc/passwd

文件详解: root❌0:0:root:/root:/bin/bash

用户名 用户登陆系统的用户名

密码 密码位

UID 用户标示号

GID 默认组标示号

描述信息 存放用户的描述信息

宿主目录 用户登陆系统的默认目录,默认是在/home/下

命令解析器 用户使用的Shell,默认是bash

2)保存用户密码信息的文件:/etc/shadow

root:$6$t9/xsbuGPTNn.TEo$915S0CmKqu/dz5B5zEkQ7TbFzs91ZFfU0Ct6Sdr91sB0leAqc4Ffse3SDm.Gvlu5jd1KTbHoGrLdEcHZMGUvQ/::0:99999:7:::

文件详解:

​ 用户名 登陆系统的用户名

密码 加密密码

最后一次修改时间 用户最后一次修改密码距现在的天数,从1970-1-1起

最小时间间隔 两次修改密码之间的最小天数

最大时间间隔 密码有效天数

警告时间 从系统警告到密码失效的天数

账号闲置时间 账号闲置时间

失效时间 账号失效的绝对天数(从1970-01-01开始)

标志 保留字段

3)用户分类:

超级用户:(root,UID=0)

普通用户:( centos7UID在1000到60000) centos6(500-60000)

伪用户:( centos7UID在1到999) centos6(1-499)

系统和服务相关的:bin、daemon、shutdown等

进程相关的:mail、news、games等

​ 伪用户不能登陆系统

4) 添加用户命令:useradd

-u 指定用户ID(uid)

-g 指定所属的组名(gid) 主组

-G 指定多个组,用逗号“,”分开(Groups) 其他组

-c 用户描述(comment) ;

-e 失效时间(expire date)

创建:

useradd -u 1888 -g users -G sys,root -c "描述信息" uqy142a

useradd uqy142b

useradd uqy142c

useradd uqy142d

useradd uqy142e

​ (centos 7之前的版本,伪用户从1-999 centos7之后伪用户使用1-999 当前版本普通用户ID应该是1000到60000)

设置密码:

​ passwd uqy142a //密码设置两次

​ passwd uqy142b

切换用户 su

su -l uqy142a

su -l uqy142b

su -l uqy142a

su -l root

超级用户向普通用户切换不需要密码,普通用户向其他普通用户或者root用户切换都必须要密码

5)修改用户命令:usermod(user modify)

-l 修改用户名 (login)usermod -l a b(b改为a)

usermod -l uqy142cc uqy142c

-g 添加组 usermod -g sys tom

​ groups uqy142a

​ usermod -g root uqy142a

​ groups uqy142a

-G 添加多个组 usermod -G sys,root tom

​ usermod -G sys,users uqy142a

​ groups uqy142a

–L 锁定用户账号密码(Lock)

​ usermod -L uqy142b //锁定b用户,普通用户即使被锁定,root依然可以登录

​ su -l uqy142a

​ su -l uqy142b //发现密码正确,依然提示鉴定故障 因为被锁定

–U 解锁用户账号(Unlock)

​ su -l root //切换到root 解锁

​ usermod -U uqy142b

​ su -l uqy142a

​ su -l uqy142b //发现密码正确,就切换用户了

6)删除用户命令:userdel(user delete)

-r 删除账号时同时删除目录(remove)

userdel uqy142d //只是删除用户信息

tail -5 /etc/passwd

ls /home

userdel -r uqy142e

tail -5 /etc/passwd

ls /home

3.3.2 组管理

1)保存用户组的文件:/etc/group

文件详解:

组名 用的所在的组

组密码 密码位,一般不使用

GID 主标示号

组内用户列表 属于该组的用户列表(从组)

2)添加组:groupadd

​ -g 指定gid

​ groupadd -g 16666 groupa

​ groupadd groupb

​ groupadd groupc

​ tail /etc/group //显示文件后10行

3)修改组:groupmod

​ -n 更改组名(new group)

​ groupmod -n groupaa groupa //把groupa的名称改为groupaa

​ tail /etc/group

4)删除组:groupdel

groupdel groupaa //删除组

tail /etc/group

5) groups 显示用户所属组

​ groups 用户名

​ groups uqy142a

6) 其他组相关命令

chgrp 改变目录或者文件所属组(只改组)

用法:

ll |grep aaa //查看aaa所属组

chgrp groupb aaa 改变aaa原来所属组root 改为groupb

ll |grep aaa //查看aaa所属组

chown 改变目录或者文件 所属用户及所属组

​ ll |grep aaa //查看aaa所属用户及组

​ chown uqy142a:groupc aaa //改变aaa目录的所属用户及所属组

​ ll aaa

​ ll aaa/bbb/ //发现子孙目录没有变化

​ chown -R uqy142a:groupc aaa // 子孙目录都改变

​ ll aaa

​ ll aaa/bbb/ //发现子孙目录都变化

综合练习:

​ 1:在linux系统创建三个用户 admin1 admin2 admin3,admin1和2 同属于groupa组 admin3 属于groupb组

​ 2:使用root登录创建/home/test目录,并将目录所属组指定为groupa组,给test目录赋权限770

​ 3: 使用admin1登录,进入test目录成功,使用admin2登录,进入test目录成功,使用admin3登录,进入test目录失败

3.3.3 Sudo命令

一般用在非root用户下,临时提升非root用户的权限。

第一步:必须要在/etc/sudoers中配置非root用户

第二步:执行命令sudo reboot,输入user1 的密码,成功重启。

ls /sbin|grep reboot

ls /sbin|grep shutdown 这些命令都是root用户才有权限执行的。

​ su -l uqy142a

​ sudo shutdown -h now //提示uqy142a不在sudoers文件中 无权执行

su -l root

vim /etc/sudoers

:100

复制100 修改用户名

su -l uqy142a

sudo reboot // 重启了

其他任何普通用户不能执行命令,都可以这么做。。。。

3.3.4 时间管理

GMT Greenwich Mean Time 格林尼治标准时间

CST 中国时区

​ CST可视为美国、澳大利亚、古巴或中国的标准时间。

  CST:Central Standard Time (USA) 中部标准时间(美国) UTC -6:00

  CST:Central Standard Time (Australia) 中部标准时间(澳大利亚) UTC 9:30

  CST:China Standard Time 中国标准时间(北京时间) UTC 8:00

  CST:Cuba Standard Time 古巴标准时间 UTC -4:00

UTC 世界统一时间、世界标准时间、国际协调时间

DST 夏令时(Daylight Saving Time) 指在夏天太阳升起的比较早时,将时间拨快一小时,以提早日光的使用。

PDT (Pacific Daylight Time)太平洋夏季时间。

列出所有时区:timedatectl list-timezones

查看当前系统时间:timedatectl

​ 设置系统时区为上海: timedatectl set-timezone Asia/Shanghai

​ 查看当前时间:date

​ 查看硬件时间:hwclock -r or --show

​ 修改当前时间:date MMDDhhmmYYYY

​ date '121212122020'

​ date -s '2011-07-07 11:11:11'

用系统时间同步硬件时间:hwclock -w or --systohc

用硬件时间同步系统时间:hwclock -s or --hctosys

​ 使用ntpd服务同步网络时间:(centos7默认没有该服务,需要安装)

​ yum -y install ntp ntpdate 安装ntp ntpdate服务

​ 查看启动状态 ntp(network time protocol) ntpd 网络时间协议服务:(centos7下默认没有该服务)

​ service ntpd status

​ 手动同步:

​ ntpdate cn.pool.ntp.org

​ 启动:

​ service ntpd start

​ 设置开机启动(chronyd时间服务和ntpd冲突)

​ systemctl disable chronyd

​ systemctl enable ntpd //设置开机启动

​ ntpq -p 查看 同步间隔

​ 结果详细解释如下:

​ ntpq -p命令列出了所有作为时钟源校正过本地NTP服务器时钟上层NTP服务器的列表,每一列的含义分别如下:

​ remote:响应请求的NTP服务器的名称(IP地址或域名),带“*”的表示本地NTP服务器与该服务器同步

​ refid:远程NTP服务器使用的上一级ntp服务器的IP地址

​ st:远程NTP服务器的级别,由于NTP是层级结构,有顶端的服务器,多层的Relay Server再到客户端。所以服务器从高到低,级别可以设定为1~16级。为了减缓负荷和网络堵塞,原则上应该避免直接连接到级别为1的服务器。

​ t:本地NTP服务器与远程NTP服务器的通信方式。u:单播;b:广播;I:本地

​ when:上次成功请求后到现在的秒数

​ poll:本地NTP服务器与远程NTP服务器同步的时间间隔。

​ reach:这是一个八进制的值,用来测试衡量前八次查询是否成功和服务器连接。377表示都成功,0表示不成功

​ delay:网络延时,单位为微秒(μs)

​ offset:本地NTP服务器与远程NTP服务器的时间偏移,单位为毫秒(ms)。offset越接近于0,主机与NTP服务器的时间越接近

​ jitter:查询偏差的分布值,用于表示远程NTP的网络延时是否稳定,单位为微秒(μs)。

4 知识点总结

解决 vim 没有反应,报错的方法

查看libgpm.so.2由哪个包提供

  1. yum provides *libgpm.so.2

重新安装一下这个包:

  1. yum reinstall -y gpm-libs-1.20.7-6.el7.x86_64

然后更新yum源并生成缓存

  1. yum update

  2. yum makecache

最后重新卸载重装

  1. yum -y remove vim*

  2. yum -y install vim*

5 目录管理

5.1 磁盘和文件管理命令

5.1.1 系统目录介绍:

/: 根目录,一般根目录下只存放目录,不要存放文件,/etc、/bin、/dev、/lib、/sbin应该和根目录放置在一个分区中

/bin(binary): /usr/bin: 可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等。

/boot: 放置linux系统启动时用到的一些文件。/boot/vmlinuz为linux的内核文件,以及/boot/grub。建议单独分区,分区大小100M即可

/dev: 存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱mount /dev/cdrom /mnt。

/etc: 系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有/etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d修改配置文件之前记得备份。注:/etc/X11存放与x windows有关的设置。

/home: 系统默认的(普通)用户家目录,新增用户账号时,用户的家目录都存放在此目录下,表示当前用户的家目录,test表示用户test的家目录。建议单独分区,并设置较大的磁盘空间,方便用户存放数据

/lib: /usr/lib:/usr/local/lib: 系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助,比较重要的目录为/lib/modules。

/mnt: /media: 设备默认挂载点,通常光盘挂载于/mnt/cdrom下,也不一定,可以选择任意位置进行挂载.

/opt: 给主机额外安装软件所摆放的目录。如:FC4使用的Fedora 社群开发软件,如果想要自行安装新的KDE 桌面软件,可以将该软件安装在该目录下。以前的 Linux 系统中,习惯放置在 /usr/local 目录下

/proc: 此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的目录 process 进程有/proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/*等

/root: 系统管理员root的家(根)目录,系统第一个启动的分区为/,所以最好将/root和/放置在一个分区下。

/sbin: /usr/sbin:/usr/local/sbin: 放置系统管理员root使用的可执行命令,如fdisk、shutdown、mount等。与/bin不同的是,这几个目录是给系统管理员root使用的命令,一般用户只能"查看"而不能设置和使用。

/tmp: 一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下

/srv: 服务启动之后需要访问的数据目录,如www服务需要访问的网页数据存放在/srv/www内

/usr: 应用程序存放目录,/usr/bin 存放应用程序, /usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。/usr/local:存放软件升级包。/usr/share/doc: 系统说明文件存放目录。/usr/share/man: 程序说明文件存放目录,使用 man ls时会查询/usr/share/man/man1/ls.1.gz的内容建议单独分区,设置较大的磁盘空间

/var: 放置系统执行过程中经常变化的文件,如随时更改的日志文件variable /var/log,/var/log/message: 所有的登录文件存放目录,/var/spool/mail: 邮件存放的目录,/var/run: 程序或服务启动

5.1.2 命令格式:

命令 【-选项】 【 参数】

如:ls -la /usr

5.1.3 命令分类和帮助:

​ 内部命令:属于Shell解析器的一部分(cd pwd),执行速度会快

​ 外部命令:独立于Shell解析器之外的文件程序(ls mkdir),执行速度会慢(每次运行外部命令,需要shell解析器先加载解析,再执行)

​ 内部命令:help + 命令(help cd)

​ 外部命令:man(manual 帮助手册 手动的) + 命令(man ls)

​ 查看一个命令的帮助文档,如果文档比较长,enter键一行一行看,space(空格)键 一页一页看 字母q(quit) 退出帮助文档

5.1.3 常用命令:

  • 查看目录内容

​ ls list directory contents 列出目录内容

​ 选项:

​ -a all do not ignore entries starting with .

​ 在linux系统中以.开头的文件或者目录是隐藏文件 显示所有内容,包括隐藏文件

​ -l use a long listing format 使用长的列表格式

​ 显示目录或者详情

​ -t sort by modification time, newest first 按照更新时间排序 越新的越在前面

​ 倒叙排序文件内容

​ 具体使用:

​ touch .a 创建.a文件

​ touch .b 创建.b文件

​ mkdir .aaa 创建.aaa目录

​ mkdir .bbb

​ ls 查看不到.开头目录文件

​ ls -a 显示所有的

​ ls -l 显示内容详细信息

​ ll 是ls -l 的简化写法

​ ls -a -l 多个选项一起使用 显示所有内容的详情

​ ls -al 多个选项可以合并使用

​ ls -la

​ ls

​ ls -t 发现显示文件顺序不同

​ ls -a -l -t 发现确实按照更新时间倒叙排序

​ ls -alt

​ ls -lat

​ ls -alt / 显示根目录所有内容详情,倒叙排序

​ ls -lta /etc

​ ls -lta /etc/

​ ls -la /etc/sysconfig/network-scripts/

​ ls -l ../ 相对目录 ../上级目录

​ cd /etc/sysconfig/network-scripts/ 进入该目录

​ ls ../../../root/ 相对路径显示 选项可以随意加

  • 查看当前工作目录

​ pwd print name of current/working directory 打印当前工作目录的名称

​ 具体用法:

​ pwd 回车 ,默认显示当前工作目录的位置

​ cd /etc/sysconfig/network-scripts/

​ pwd

​ cd ../

​ pwd

​ cd ../../

​ pwd

  • 切换目录

​ cd Change the shell working directory 改变工作目录

​ 具体使用:

​ cd /etc/sysconfig/network-scripts/ 切换到指定目录

​ cd ../ 切换上级目录

​ cd ../../ 切换到上两级目录

​ cd 什么都参数都不加 切换到当前用户的根目录

​ cd /etc/sysconfig/network-scripts/

​ cd ~ 和上面什么参数都不加一样 切换到当前用户的根目录

  • 创建目录

​ mkdir make directories 创建单个/多个目录

​ 选项:

​ -p parents no error if existing, make parent directories as needed

​ 一次创建多级目录,使用-p会按照需要创建父目录,不会让创建错误

​ 具体用法:

​ mkdir spring 创建单个目录

​ mkdir mybatis springboot 创建多个目录

​ mkdir spring/ioc spring/aop spring/mvc 一次在某一个目录下创建多个目录

​ ls spring

​ ls /var/

​ mkdir ../var/aaa ../var/bbb 相对路径创建多个目录

​ ls /var/

​ mkdir aa/bb/cc/dd 错误的 因为创建dd时,cc不存在 。。。。

​ mkdir -p aa/bb/cc/dd

​ ls

​ ls aa

​ ....

  • 创建文件

​ touch change file timestamps 改变文件时间戳

​ A FILE argument that does not exist is created empty

​ 当touch命令后根的参数文件不存在时,会创建一个空文件

​ 具体用法:

​ ll 查看a.txt的创建时间

​ touch a.txt 改变a.txt的文件更新时间

​ ll 发现a.txt的更新时间编程当前时间

​ touch b.txt b.txt不存在就会创建一个空的b.txt

​ ll 发现b.txt被创建,内容为0

  • 查看文件内容

cat:

​ concatenate files and print on the standard output 串联文件并打印到标准输出

​ 显示一个文件的全部内容

​ 具体实例:

​ touch a.txt

​ touch b.txt

​ touch c.txt

​ echo 'hello' 正常显示标准输出 echo= display a line of text

​ echo 'hello' > a.txt > 写入 把hello内容写入到a.txt

​ echo 'qy149' > b.txt

​ echo '!!!' > c.txt

​ ll

​ cat a.txt b.txt c.txt 串联3个文件,并把内容打印

​ cat a.txt

​ cat b.txt

​ touch tomcat.log 创建一个tomcat.log文件

​ echo 'abc' > tomcat.log 写入abc

​ cat tomcat.log

​ echo '123' > tomcat.log 写入123

​ cat tomcat.log 发现写入会覆盖原来内容

​ date 显示当前时间

​ date >> tomcat.log >>追加 不会覆盖原来内容,在原来内容的下一行进行追加

​ cat tomcat.log

​ date >> tomcat.log 多次执行 发现都是追加

​ cat tomcat.log 当我们执行多次后,文件不再一页 cat的弊端就显示出来,只能看到文件的最后一页内容

​ output the first part of files 显示文件的开始部分

​ 选项:

​ -n lines print the first K lines instead of the first 10;

​ 如果指定了n的值为k 打印 前K 代替前10行

​ 具体用法:

​ head tomcat.log 默认显示文件的前10行

​ head -5 tomcat.log 显示前5行

​ head -2 tomcat.log

​ head -20 tomcat.log

tail:

​ output the last part of files 输出文件的末尾部分

​ 选项:

​ -n 显示文件尾部指定行

​ -f follow output appended data as the file grows 文件增长时显示追加数据

​ -F 和-f 只不过带retry(重试)功能

​ 具体用法:

​ tail tomcat.log 默认显示后10行

​ tail -2 tomcat.log

​ tail -20 tomcat.log

​ tail -f tomcat.log 查看tomcat.log追加部分 会阻塞不动

​ 另外启动一个会话窗口,在里面执行

​ echo 'appened111' >> tomcat.log

​ echo 'appened222' >> tomcat.log

​ date>>tomcat.log 多次执行 观察原窗口的变化

​ tail -F tomcat.log 带重试功能,在web项目中都会记录日志,通常记录日志时,如果日志是按照日志每天生成的, 当前的文件是tomcat.out 今天过完把tomcat.log变为tomcat.2022-08-12.log文件,最新的仍然是tomcat.out 继续追踪最新文件

​ ctrl+c 退出

more :

file perusal filter for crt viewing 分页显示数据

​ 具体用法:

​ more settings.xml

​ enter 键 一行一行显示

​ space 空格键 向下翻页

​ ctrl+f 向下翻页

​ ctrl+b 向上翻页

​ q 退出

less:

​ opposite of more 分页显示数据

​ 具体用法:

​ less settings.xml

​ enter 键 一行一行显示

​ space 空格键 向下翻页

​ ctrl+f 向下翻页

​ ctrl+b 向上翻页

​ q 退出

​ 可以使用 /关键字 进行搜索 高亮关键字

  • 复制文件

​ cp opy files and directories 复制和目录 相当于windows下的ctrl+c + ctrl+v

​ 选项:

​ -r recursive 递归 copy directories recursively 递归复制目录

​ 具体用法:

​ ls

​ cp a.txt spring 复制a.txt到spring目录

​ ls

​ ls spring 发现存在了

​ ls /tmp

​ cp /root/a.txt /tmp 复制a.txt到/tmp目录下

​ ls /tmp

​ cp ../etc/sysconfig/network-scripts/ifcfg-ens33 /tmp/ 相对路径复制

​ ls /tmp

​ cat /tmp/ifcfg-ens33

​ mkdir frames 创建一个框架目录

​ cp spring frames/ cp 不可以直接复制目录

​ mkdir spring/aop/aspect

​ mkdir spring/aop/pointcut

​ cp -r spring frames/ 复制spring目录到frames目录下

​ ls frames/spring/

​ ls frames/spring/aop/

  • 移动文件或者重命名

mv move (rename) files 移动/重命名 文件 相当于windows中的ctrl+x ctrl+v

​ 具体用法:

​ ls

​ ls spring

​ mv b.txt spring 移动b.txt 文件到 目录中

​ ls 发现b.txt没有了

​ ls spring 发现b.txt

​ ls /var/log/

​ mv /root/c.txt /var/log/ 移动c.txt到 /var/log/

​ ls 发现c.txt没有了

​ ls /var/log/ 发现c.txt

​ ls

​ mv springboot/ frames/ 移动目录到另外一个目录中

​ ls

​ ls /frames 发现springboot目录

​ ls

​ mv a.txt aaa.txt 把a.txt重命名为aaa.txt aaa.txt目录不存在

​ ls

​ mv frames/ frameset 把目录frames重命名为frameset

​ ls

  • 删除空目录

​ rmdir remove empty directories 删除空目录

​ 具体用法:

​ ls

​ rmdir mybatis/ 直接删除空目录mybatis

​ ls

​ rmdir frameset/ 不能删除非空目录

​ ls

​ mkdir bb cc dd

​ ls

​ rmdir bb cc dd 删除多个空目录

​ ls

​ mkdir -p bb/cc/dd

​ rmdir bb 无法删除

  • 删除文件或者目录

​ rm remove files or directories 移除为你教案或者目录

​ 选项:

​ -r recursive 递归的 remove directories and their contents recursively

​ 递归删除目录及目录下所有内容

​ -f force 强制的 ignore nonexistent files and arguments, never prompt

​ 不带提示信息,直接删除

​ 具体用法:

​ ls

​ rm 中文.txt 删除 中文.txt 有提示信息 需要确认是否删除 y/n

​ ls

​ rm -f aaa.txt 直接删除aaa.txt不带提示

​ ls

​ mkdir -p bb/cc/dd

​ rm -f bb 无法删除目录

​ rm bb 无法删除目录

​ ls

​ rm -rf bb 不带提示递归删除目录bb 及其下的所有内容

​ ls

​ 无论是文件或者目录,都可以使用 rm -rf 强制删除

​ touch frameset/a frameset/b frameset/c.log 在frameset下创建3个文件

​ ls frameset 有目录还有文件

​ rm -rf frameset/* * 为通配符,统配所有内容

​ ls frameset

​ ls

​ rm -rf aa spring/ settings.xml 移动多个文件和目录

​ ls

  • 文件统计

​ wc (word count) print newline, word, and byte counts for each file 打印每个文件行数,单词数和字节数

​ 选项:

​ -l print the newline counts 打印行数

​ -c print the byte counts 打印字节数

​ -m print the character counts 打印字符数(utf-8时一个中文1个字符 3个字节)

​ -w print the word counts 打印单词数

​ 具体用法:

​ touch a.log

​ echo 'hello'>>a.log

​ wc a.log 结果为1 1 6 a.log 行数 单词数(以换行或者空格分割) 字节数(一个空格和换行都按照1个字节计算 1个中文汉字占3个字节utf-8) 文件名字

​ echo '中国'>>a.log

​ cat a.log

​ wc a.log 2 2 13 2行 2单词 13字节

​ echo 'hello AAA'>>a.log

​ cat a.log

​ wc a.log 3 4 23 3行 4单词 23 字节

​ wc -l a.log 打印行数

​ wc -c a.log 打印字节数

​ wc -w a.log 打印单词数

​ wc -m a.log 打印字符数 (一个中文占3个字符)

  • 查找文件或者目录

​ find search for files in a directory hierarchy 按照目录层次查询文件

​ 具体用法:

​ find -name 't' 列出当前目录下所有名称含有t的文件或者目录

​ find /etc -name 'audit' 查找/etc下 所有名称含有audit的文件或者目录

​ find /etc -name 't'

​ find /etc -name 'audit'

​ find /etc -name 'audit' | wc -l 查找/etc下 所有名称含有audit的文件或者目录 并统计行数

​ find /etc -name 't' | wc -l | 管道符 连接多个命令的 通常后一个命令把前一个命令的执行结果作为参数

  • 筛选文件内容

​ grep(global regular expression print) print lines matching a pattern

​ 全局按照正则表达式查找匹配内容,并把查找结果打印到标准数据

​ grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。(百度百科)

​ 具体用法:

​ cat tomcat.log 查看所有内容

​ grep 22: tomcat.log 查找含有22:的所有行,并打印

​ grep This settings.xml

​ grep a settings.xml

​ grep a settings.xml | wc -l 从 settings.xml文件中查找含有a的行,并统计行数

​ find /etc -name 't' | grep pos 从find的查找结果查找含有pos的行并打印

​ find /etc -name 't' | grep pos | wc -l 从find的查找结果查找含有pos的行并打印,并统计行数

  • 创建快捷方式(创建软硬连接)

    ln make links between files 在文件之间创建连接

​ 选项:

​ -s make symbolic links instead of hard links 为文件或者目录创建象征性的连接 软连接 (相当于windows下的快捷方式)

​ -d allow the superuser to attempt to hard link directories

​ 硬接连 给源文件创建一个副本文件,当原文件删除,对副本文件没有任何应该

​ 具体用法:

​ mkdir -p /tmp/aaa/bbb/ccc

​ ln -s /tmp/aaa/ aaa.lnk 为/tmp下aaa目录创建软连接到当前用户主目录下

​ ls -l 发现aaa.lnk连接到/tmp/aaa

​ ls aaa.lnk/ 测试是否可以使用 直接看到bbb

​ rm -rf /tmp/aaa 删除源目录

​ ll 发现aaa.lnk变红色 不可用了

​ mkdir -p /tmp/aaa/bbb/ccc 再次创建目录

​ ll 发现又可以使用

​ ls aaa.lnk 查看内容

​ cat a.log

​ ln -d a.log a.log.lnk 为a.log创建硬连接a.log.lnk

​ cat a.log.lnk 直接查看内容

​ rm -rf a.log 删除源文件

​ cat a.log.lnk 删除源文件对连接文件没有任何影响

  • 压缩解压文件

gzip:

​ compress or expand files

​ 选项:

​ -d Decompress 解压缩

​ 具体用法:

​ gzip tomcat.log 压缩tomcat.log文件 产生一个tomcat.log.gz 源文件消失

​ gzip -d tomcat.log.gz 解压 压缩包消失,源文件出现

bzip2:

​ 最小化安装,只安装了gzip 没有安装bzip2

​ 在线安装bzip2 压缩解压方法

​ ping www.baidu.com 看网络是否通畅

​ yum -y install bzip2 自动分析依赖,在线安装软件bzip2

​ a block-sorting file compressor,a block-sorting file compressor

​ 压缩解压文件

​ 选项:

​ -d decompress 解压缩

​ 具体操作:

​ ls

​ bzip2 tomcat.log 压缩tomcat.log 产生tomcat.log.bz2 源文件消失

​ ls

​ bzip2 -d tomcat.log.bz2 解压 压缩包消失 源文件出现

​ ls

gzip frameset/

bzip2 frameset/

这两个命令都无法直接对目录进行压缩

  • 压缩解压目录/文件 查看压缩包

​ tar:

​ GNU `tar' saves many files together into a single tape or disk archive,

​ and can restore individual files from the archive

​ 把许多文件保存到一起到一个单独磁带或者磁盘档案上,可以从档案中恢复文件

​ 和windows下的压缩解压是一个意思

​ 选项:

​ -c create 创建 create a new archive 创建压缩

​ -t list 列表 list the contents of an archive 查看压缩包

​ -x extract 提取 extract files from an archive 从压缩包提取文件 解压缩

​ 上面3个选项中 都不可以共同使用

​ -z gzip filter the archive through gzip 通过gzip方式进行过滤(压缩,查看压缩包,解压)

​ -j bzip2 filter the archive through bzip2 通过bzip2方式进行过滤(压缩,查看压缩包,解压)

​ 上面2个选项不能共同使用(不能压缩,查看或者解压过程中换方式)

​ -v verbose verbosely list files processed 显示文件详情 可选的,不要也可以

​ -f file use archive file or device ARCHIVE 文档名称

​ -C change to directory DIR 改变目录 指定解压文件位置

具体用法:

​ 既可以对文件进行操作 ,也可以对目录进行操作(本质tar 打包,打包可以打包目录,在打包过程使用gzip,bzip2进行压缩或者解压)

​ ls

​ mkdir frameset

​ mkdir frameset/spring frameset/springboot frameset/mybatis frameset/hibernate

​ mkdir frameset/spring/ioc frameset/spring/aop frameset/spring/mvc

​ touch frameset/spring/ioc/a.log

​ touch frameset/spring/ioc/b.log

​ touch frameset/spring/aop/aa.log

​ touch frameset/spring/aop/bb.log

​ tar -czvf frameset.tar.gz frameset/ 压缩文件夹frameset,压缩之后的名称为frameset.tar.gz 因为带了v 所以会显示压缩过程

​ ls 发现和windows下一样,压缩后,源目录依然存在,产生frameset.tar.gz文件

​ rm -rf frameset.tar.gz 删除,再压缩,演示不带v

​ tar -czf frameset.tar.gz frameset 依然压缩,不再显示详细信息

​ ls

​ tar -tzvf frameset.tar.gz 查看压缩包(带v显示详情)

​ tar -tjvf frameset.tar.gz 错误 压缩文件使用的gzip方式压缩的,不能使用bzip2的方式进行查看

​ tar -tzvf frameset.tar.gz 查看压缩包(不带v不显示详情)

​ ls

​ rm -rf frameset 删除源目录

​ tar -xjvf frameset.tar.gz 解压错误 压缩文件使用的gzip方式压缩的,不能使用bzip2的方式进行解压

​ tar -xzvf frameset.tar.gz 解压 没有-C 默认解压到当前目录

​ ls

​ ls /tmp

​ tar -xzvf frameset.tar.gz -C /tmp/ 解压到指定目录

​ ls /tmp

​ ls /tmp/frameset

​ tar -cjvf frameset.tar.bz2 frameset 使用bzip2方式进行压缩

​ ls

​ tar -tjvf frameset.tar.bz2 查看压缩包

​ rm -rf frameset 删除源目录

​ ls 查看

​ tar -xjvf frameset.tar.bz2 解压到当前目录

​ ls

​ ls frameset

​ ls /var

​ tar -xjvf frameset.tar.bz2 -C /var/ 解压到指定的/var目录

​ ls /var/

​ ls /var/frameset/

5.1.4 角色,权限和命令:

​ 四种角色:

第1位:文件类型(d 目录,- 普通文件,l 链接文件)

​ “-”表示普通文件;

​ “d”表示目录;

​ “l”表示链接文件;

​ “p”表示管理文件;

​ “b”表示块设备文件;

​ “c”表示字符设备文件;

​ “s”表示套接字文件;

第2-4位:所属用户权限,用u(user)表示

第5-7位:所属组权限,用g(group)表示

第8-10位:其他用户权限,用o(other)表示

第2-10位:表示所有的权限,用a(all)表示

三种基本权限:

r 读权限(read)

w 写权限(write)

x 执行权限 (execute)

chmod修改文件权限命令(change mode)

​ 参数:-R 下面的文件和子目录做相同权限操作(Recursive递归的)

​ 例如:chmod u[go/a]+/-x[rw] a.txt

​ touch a.log

​ [root@basic ~]# chmod u+x a.log

[root@basic ~]# ll a.log

-rwxr--r--. 1 root root 29 8月 12 16:43 a.log

[root@basic ~]# chmod g+wx a.log

[root@basic ~]# ll a.log

-rwxrwxr--. 1 root root 29 8月 12 16:43 a.log

[root@basic ~]# chmod o+wx a.log

[root@basic ~]# ll a.log

-rwxrwxrwx. 1 root root 29 8月 12 16:43 a.log

[root@basic ~]# chmod a-rwx a.log

[root@basic ~]# ll a.log

----------. 1 root root 29 8月 12 16:43 a.log

[root@basic ~]# chmod ug+rw a.log

[root@basic ~]# ll a.log

-rw-rw----. 1 root root 29 8月 12 16:43 a.log

[root@basic ~]# chmod aug-rw a.log

[root@basic ~]# ll a.log

----------. 1 root root 29 8月 12 16:43 a.log

使用3位2进制标识十进制的0-8

十进制 三位2进制

0 000

1 001

2 010

3 011

4 100

5 101

6 110

7 111

8 1000

chmod 7 7 7 a.log

​ 111 111 111

​ 2 3 4

​ 010 011 100

​ -w- -wx r--

​ 5 6 7

​ 101 110 111

​ r-x rw- rwx

​ 实例:

[root@basic ~]# chmod 777 a.log

[root@basic ~]# ll a.log

-rwxrwxrwx. 1 root root 29 8月 12 16:43 a.log

[root@basic ~]# chmod 000 a.log

[root@basic ~]# ll a.log

----------. 1 root root 29 8月 12 16:43 a.log

[root@basic ~]# chmod 234 a.log

[root@basic ~]# ll a.log

--w--wxr--. 1 root root 29 8月 12 16:43 a.log

[root@basic ~]# chmod 238 a.log

chmod: 无效模式:"238"

Try 'chmod --help' for more information.

[root@basic ~]# chmod 777 a.log

[root@basic ~]# ll a.log

-rwxrwxrwx. 1 root root 29 8月 12 16:43 a.log

[root@basic ~]# chmod 234 a.log

[root@basic ~]# ll a.log

--w--wxr--. 1 root root 29 8月 12 16:43 a.log

[root@basic ~]# chmod 567 a.log

[root@basic ~]# ll a.log

5.2 系统检测和维护

5.2.1 常用命令:

fdisk -l 查看当前磁盘的详细信息(结合lsblk)

结果解释:

​ 在Linux 是通过hdx 或 sdx 表示的,其中 * 表示的是a、b、c …… …… x表示的数字 1、 2、3 …… …… hd大多是IDE硬盘;sd大多是SCSI或移动存储

磁盘大小= 磁头->柱面->扇面->每个扇区固定大小512bytes

df 显示文件系统磁盘空间的使用情况

​ df 默认显示所有当前已挂载文件系统的磁盘空间使用情况

​ df -h 以人类可读方式显示

​ df -h /bin 显示某一个文件夹所在磁盘的使用情况

du 显示指定的文件(目录)已使用的磁盘空间的总

-h文件大小以K,M,G为单位显示(human-readable)

-s只显示各档案大小的总合(summarize)

free 显示当前内存和交换空间的使用情况

netstat 是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。

​ yum install net-tools -y

-a 显示所有连接和监听端口

-t (tcp)仅显示tcp相关选项

-u (udp)仅显示udp相关选项

从整体上看,netstat的输出结果可以分为两个部分:

一个是Active Internet connections,称为有源TCP连接,其中"Recv-Q"和"Send-Q"指的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。

另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。

Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。

​ netstat -a | grep 52 根据查询结果集筛选想要的结果

​ netstat -t | grep 52

ip addr 网卡网络配置详解

​ lo 是回环地址,经常被分配到127.0.0.1地址上,用于本机通信,经过内核处理后直接返回,不会在任何网络中出现。

​ ens33:网卡名

​ <BROADCAST,,MULTICAST,UP,LOWER_UP> 这个叫作net_device flags,网络设备状态标识。

​ UP 表示网卡处于启动的状态;

​ BROADCAST 表示这个网可以发送广播包;

​ MULTICAST 表示网卡可以发送多播;

​ LOWER_UP表示网线插着;

​ MTU1500是指最大传输单元 MTU 为 1500,这是以太网的默认值。MTU 是二层 MAC 层的概念。MAC 层有 MAC 的头,以太网规定连 MAC 头带正文合起来,不允许超过 1500 个字节。正文里面有 IP 的头、TCP、HTTP的头。如果放不下,就需要分片来传输。

​ qdisc 全称是queueing discipline,中文叫排队规则。内核如果需要通过某个网络接口发送数据包,它都需要按照为这个接口配置的 qdisc ( 排队规则 ) 把数据包加入 队列。 最简单的 qdisc 是 pfifo,它不对进入的数据包做任何的处理,数据包采用先入先出的方式通过队列。pfifo_fast 稍微复杂一些,它的队列包括三个波段 ( band ) 。在每个波段里面,使用先进先出 规则。 三个波段 ( band ) 的优先级也不相同。band 0 的优先级最高,band 2 的最低。如果 band 0 里面 有数据包,系统就不会处理 band 1 里面的数据包,band 1 和 band 2之间也是一样。 数据包是按照服务类型 ( Type of Service,TOS ) 被分配多三个波段 ( band ) 里面的。TOS 是 IP 头 里面的一个字段,代表了当前的包是高优先级的,还是低优先级的。 然而这里是mq,还木有搞懂是什么样的队列处理方式。 lo中的fq_codel是多队列处理,每一个数据流都有一个队列处理。

​ link/ether:这个是MAC地址,唯一的,一块网卡一个MAC。

ping 测试网络的连通性

​ ping www.baidu.com

5.2.2 进程与服务

进程概念

(a)进程是正在运行的程序实体,并且包括这个运行的程序中占据的所有系统资源,比如说CPU(寄存器),IO,内存,网络资源等。

(b)很多人在回答进程的概念的时候,往往只会说它是一个运行的实体,而会忽略掉进程所占据的资源。比如说,同样一个程序,同一时刻被两次运行了,那么他们就是两个独立的进程。

​ Linux中的三种进程

(1)交互进程是由一个Shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。

(2)批处理进程和终端没有联系,是一个进程序列。

(3)监控进程(也称系统守护进程) Linux系统启动时启动的进程,并在后台运行。例如,httpd是著名的Apache服务器的监控进程。

进程相关命令:

top

显示当前系统中耗费资源最多的进程

​ 用途: 可以通过top命令查看系统的CPU、内存、运行时间、交换分区、执行的线程等信息。通过top命令可以有效的发现系统的缺陷出在哪里。是内存不够、CPU处理能力不够、IO读写过高

​ 信息解读

​ 前五行是系统整体的统计信息。

​ 第一行是任务队列信息,同 uptime 命令的执行结果。

13:01:49 当前时间

up 13 min 系统运行时间

1 user 当前登录用户数

load average: 0.00, 0.03, 0.06 系统负载,即任务队列的平均长度。

三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。

第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:

Tasks:

total 进程总数

running 正在运行的进程数

sleeping 睡眠的进程数

stopped 停止的进程数

zombie 僵尸进程数

Cpu(s):

us 用户空间占用CPU百分比

sy 内核空间占用CPU百分比

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

id 空闲CPU百分比

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

hi 硬中断(Hardware IRQ)占用CPU的百分比

si 软中断(Software Interrupts)占用CPU的百分比

st (Steal time) 是当 hypervisor 服务另一个虚拟处理器的时候,虚拟 CPU 等待实际 CPU 的时间的百分比。

最后两行为内存信息。内容如下:

Mem:

total 物理内存总量

used 使用的物理内存总量

free 空闲内存总量

buffers 用作内核缓存的内存量

Swap:

total 交换区总量

used 使用的交换区总量

free 空闲交换区总量

cached 缓冲的交换区总量。

内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,

该数值即为这些内容已存在于内存中的交换区的大小。

相应的内存再次被换出时可不必再对交换区写入。

ps

report a snapshot of the current processes 显示瞬间的进程状态

-e /-A 显示所有进程,环境变量

-f 全格式

​ ps –ef | grep java #表示查看所有进程里 CMD 是 java 的进程信息;

启动3个会话窗口:

man ls 第一个会话窗口

man ps 第2个会话窗口

ps -ef |grep man |grep -v grep 第3个会话窗口 看到两个帮助进程 看到含有man帮助的两个进程,并且 不包含grep自身在内

​ ps -ef|grep结果详解

UID :程序被该 UID 所拥有

PID :就是这个程序的 ID

PPID :则是其上级父程序的ID

C :CPU使用的资源百分比

STIME :系统启动时间

TTY :登入者的终端机位置

TIME :使用掉的CPU时间。

CMD :所下达的是什么指令

ps -ef | grep 关键字

ps -ef |grep sshd

ps -ef|grep sshd|grep -v grep 排除grep本身进程,显示含有sshd的

ps -e --no-header|grep -v ps|wc -l

kill

杀死一个进程

(1)背景,当程序出错造成死锁,或者内存消耗过大造成卡机,杀;

(2)格式: kill -9 PID

(3 ) 示例:kill -9 324,

(4)使用后一般使用下面命令释放内存:#free

kill命令的改进killall

​ (1) Linux下还提供了一个killall命令,可以直接使用进程的名字而不是进程标识号,

​ 例如:# killall -9 NAME

​ (2)使用后一般使用下面命令释放内存:#free

 启动3个会话窗口:

ping www.baidu.com 第一个会话窗口

ping localhost 第2个会话窗口

ps -ef |grep ping |grep -v grep 第3个会话窗口 看到两个ping进程 看到含有ping的两个进程,并且 不包含grep自身在内

​ 可以看到pid

kill -9 pid pid 动态的

5.2.3 定时任务

第一步,查看cron服务是否开启

​ service crond status

​ 或者

​ systemctl status crond

第二步 ,查看当前的定时任务

​ crontab -l

第三步 ,编辑 crontab -e

第四步 ,检查效果

取消定时任务 crontab -r

定时任务格式:

​ 分0-59 小时0-23 日1-31 月1-12 星期0-6 命令

​ “*”代表取值范围内的数字 ,

​ “/”代表”每隔”,

​ “-”代表从某个数字到某个数字, 10-15 * * * * 每一小时的10到15分钟

​ “,”分开几个离散的数字 10,12,15 * * * * 每一小时的第10,12,15执行

*/5 * * * * ls 指定每小时的第5分钟执行一次ls命令

30 5 * * * ls 指定每天的 5:30 执行ls命令

30 7 8 * * ls 指定每月8号的7:30分执行ls命令

30 5 8 6 * ls 指定每年的6月8日5:30执行ls命令

30 6 * * 0 ls 指定每星期日的6:30执行ls命令

[注:0表示星期天,1表示星期1, 以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等。]

30 3 10,20 * * ls 每月10号及20号的3:30执行ls命令[注:“,”用来连接多个不连续的时段]

25 8-11 * * * ls 每天8-11点的第25分钟执行ls命令[注:“-”用来连接连续的时段]

*/15 * * * * ls 每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]

30 6 */10 * * ls 每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls 命令。 ]

​ 每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件

50 7 * * * root run-parts /etc/cron.daily [ 注:run-parts参数表示,执行后面目录中的所有可执行文件。

示例:

crontab -e 编辑定时器

* * * * * date>>aaa.log 每分钟把当前时间追加到aaa.log一次

*/3 * * * * ls / >>bbb.log 每隔3分钟 把ls /的执行结果追加到bbb.log中

5,10,15,20 10-20 * * * ls /var>>ccc.log 每天10:05 10:10 10:15,10:20, 11:05 11:10 11:15,11:20, ... 20:05 20:10 20:15,20:20 定时任务可以执行一次

crontab -r 取消定时任务

6 shell脚本

6.1 Shell脚本简介

6.1.1 什么是shell脚本

1.当命令不在命令行中执行,而是从一个文件中执行时,该文件就是shell脚本。

​ shell脚本是普通的文本文件,由流程控制逻辑(if for while等)和命令构成。

​ shell脚本通常以.sh作为后缀名,但不是必须的。

2.Shell是一种解释型编程语言,不需要编译,执行时也是按行执行。

3.Shell脚本是由解释器解释执行的,常见的解释器有:

​ bash dash ash ksh sh等

注意,每种Shell解释器对shell的语法解释并不完全相同(sh和bash解析器对ll的解释就不同),但基本相同。

\4. 脚本就是命令的堆砌

\5. 脚本可以接受参数,也可以有变量,也可以有流程控制甚至还有函数

6.1.2 shell脚本的编制、执行和调试

1.编制:使用文本编辑器vi或者vim

2.执行:执行前必须为脚本文件添加可执行权限

​ chmod u+x script-file

​ bash script-file 或者 ./script-file

3.调试

​ bash -x -n -v script-file

​ -n :只读取shell脚本,但不会去执行它,常用来测试脚本语法错误

​ -x :进入跟踪模式,显示所执行的每一行命令,常用来调试脚本逻辑

-v : 在执行script之前,先将script的内容输出到屏幕上

6.1.3 shell版hello word

​ 1.Shell中的注释用‘#’

​ #这是注释,独占一行

​ echo #这是注释,在脚本代码尾部,注意与代码用空格隔开

\2. Shell第一行代码:#!/bin/sh 声明这个script使用的shell解释器

6.1.4 备份并清空日志

​ 备份可变文件存放目录/var 下面的log目录,备份成功后,删除原来文件

​ vim backup-1.sh

#声明使用的解析器
#!/bin
#打包压缩/var/log1文件
tar -czvf log1.tar.gz /var/log1
#删除原文件
rm -rf /var/log1 

​ chmod u+x backup-1.sh

​ ./backup-1.sh

​ ls 查看本目录 有压缩包

​ ls /var/ 发现没有log1

​ 该脚本存在很多弊端:

​ 1,不能动态指定备份内容

​ 2,备份后的名称不能随意指定

​ 3,即使备份不成功,也会删除源文件

6.2、变量的定义、引用、删除

6.2.1 变量

​ 1.shell中没有变量类型,本质上都是字符串

​ 2.shell中有四种类型的变量

​ 本地变量:仅在当前shell中有用,在shell外部或者子shell中都不可用

​ 环境变量:当前及子shell有用

​ 位置参数变量:脚本的参数或者函数的参数等

​ 特殊变量:脚本内置的具有特殊用途的变量

6.2.2 变量的定义及删除

​ 1.变量定义有以下方式

​ project= #定义空变量或者清空已有变量

​ project=/home/workspace #定义变量并赋值

​ A=1

​ b=2

​ project="/home/workspace${A}${b}” #定义变量并赋值,双引号对$ ` \无效

​ project=/home/workspace12

​ project='/home/workspace${A}${b}' #定义变量并赋值,单引号最强,引什么是什么

​ project=/home/workspace${A}${b}

​ export project=/usr/redis #将变量声明为环境变量,在子shell中也可以使用

2.变量的删除

​ 变量删除使用语句为:unset project

6.2.3 变量赋值及引用

​ 1.变量赋值

​ project=/home/work #变量重新赋值了

​ 2.变量引用

​ subproj=${project}/sub #subproj引用了project,他俩的值一样了。

​ subproj=/home/work/sub

​ subproj=$project/sub #等同于 subproj=${project}

​ subproj=/home/work/sub

6.3、位置参数变量及特殊变量

6.3.1 位置参数变量

​ 1.位置参数是一组特殊的内置变量,跟在脚本名后面的用空格隔开的每个字符串

​ $1 表示第1个参数值,……,$9 表示第9个参数值

​ ${10} 表示第10个参数值, ${11} 表示第11个参数值

​ 2.位置参数的作用

​ 从 shell 命令/脚本 的命令行接受参数

​ 在调用 shell 函数时为其传递参数

​ 示例:

​ #!/bin/bash

​ # ScriptName: param1.sh

​ # To test Positional Parameters & Special Parameters.

​ echo "Hello,$USER,the output of this script are as follows:"

​ echo "The script name is : $(basename $0)"

​ echo "The first param of the script is : $1"

​ echo "The second param of the script is : $2"

​ echo "The tenth param of the script is : ${10}"

​ echo "All the params you input are : $@"

​ echo "All the params you input are : $*"

​ echo "The number of the params you input are: $#"

​ echo "The process ID for this script is : $$"

​ echo "The exit status of this script is : $?"

6.3.2 特殊变量

​ 1.与命令行参数相关

​ $* 将所有位置参量看成一个字符串(以空格间隔) 。String str= "1 2 3 4"

​ $@ 将每个位置参量看成单独的字符串(以空格间隔)。

​ "1" "2 " "3" "4"

​ “$*” 将所有位置参量看成一个字符串(以$IFS间隔)。

​ “$@” 将每个位置参量看成单独的字符串(以空格间隔) 。

​ $0 命令行上输入的Shell程序名。

​ $# 表示命令行上参数的个数。

​ 2.与进程状态相关

​ $? 表示上一条命令执行后的返回值

​ $$ 当前进程的进程号

​ $! 显示运行在后台的最后一个作业的 PID

​ $_ 在此之前执行的命令或脚本的最后一个参数

​ 位置参数和特殊变量举例,执行脚本

​ 示例:

​ #!/bin/bash

​ # ScriptName: ifsargs.sh

​ #### Set the IFS to | ####

​ IFS='|'

​ echo "Command-Line Arguments Demo"

​ echo "* All args displayed using $@ positional parameter *"

​ echo $@

​ echo "* All args displayed using $* positional parameter *"

​ echo $*

​ echo '* All args displayed using "$@" positional parameter *'

​ echo "$@" #*** double quote added ***#

​ echo '* All args displayed using "$*" positional parameter *'

​ echo "$" #** double quote added ***#

6.3.3 使用上面所学知识完善打包备份功能:

​ vi tar2.sh

​ 复制下面内容:

​ #!/bin/bash

​ #接受打包压缩后的文件名称

​ fn=$1

​ #接受想备份的目录名称

​ bd=$2

​ #打包,并且处理异常,打包备份成功时,删除原来的目录

​ # 2代表前面命名执行如果有错误 && 当前面一个命令执行成功时,执行后面命令

​ tar -cjf $fn.tar.bz2 $bd 2>error.log && rm -rf $bd

​ chmod u+x tar2.sh

​ ./tar2.sh log3 /var/log3

​ vi tar2.sh 把tar命令改错误 tara

​ ./tar2.sh log4 /var/log4

​ cat error.log 命令找不到的错误信息

​ ls /var 存在的,说明没有删

6.4、常见状态和运算符,命令

6.4.1 退出/返回状态

1.$?:返回上一条语句或脚本执行的状态

​ 0:成功

​ 1-255:不成功

2.exit 命令用于退出脚本或当前Shell

n 是一个从 0 到 255 的整数

0 表示成功退出,非零表示遇到某种失败

返回值 被保存在状态变量 $? 中

6.4.2 常见的返回状态码

​ 0:

​ 执行正确

​ 1:

​ 通用错误

​ 126:

​ 命令或脚本没有执行权限

​ 127:

​ 命令没找到

​ 2 :

​ 参数不存在

6.4.3 数据流重定向

标准输入:代码0,使用 < 或者 <<

标准输出:代码1,使用 > 或者 >>

错误输出:代码2,使用 > 或者 >>

> 表示 写入; >>表示追加

<表示 读入;<<表示结束读入

读取b.log文件内容到c.log中

​ cat<b.log>c.log

#!/bin/sh

#这段代码会往hosts文件里追加两行域名的解析

cat >> /etc/hosts << EOF

220.181.38.149 bd

123.161.58.112 sh

EOF

6.4.4 命令的连续执行 && ||

​ 1.脚本中经常有多条相关命令,比如:

​ 执行备份日志成功后删除日志

​ #!/bin/bash

​ #接受打包压缩后的文件名称

​ fn=$1

​ #接受想备份的目录名称

​ bd=$2

​ #打包,并且处理异常,打包备份成功时,删除原来的目录

​ # 2代表前面命名执行如果有错误 && 当前面一个命令执行成功时,执行后面命令

​ tar -cjf $fn.tar.bz2 $bd 2>error.log && rm -rf $bd

​ 从服务器下载文件失败后从备份服务器下载

​ 2. && 连起来的命令,后面的命令只有在前一命令执行成功后才执行

​ 3. || 连起来的命令,后面的命令只有在前一命令执行失败后才执行

str = response.data.code

if(str= =null || str= ='' ||str= ='null') 后一个判断只有在前一个判断执行失败是才执行

#!/bin/sh

master_ip="www.oracle.com111” #主服务器IP地址变量

backup_ip="www.oracle.com” #备份服务器IP地址变量

uri="/otn/java/jdk/8u231-b11-demos/5b13a193868b4bf28bcb45c792fce896/jdk-8u231-linux-x64-demos.tar.gz” #要下载的文件

curl -O “https://$${uri}” || curl -O “https://$${uri}”

curl -O “https://www.oracle.com111/otn/java/jdk/8u231-b11-demos/5b13a193868b4bf28bcb45c792fce896/jdk-8u231-linux-x64-demos.tar.gz”

curl -O https://www.oracle.com/otn/java/jdk/8u231-b11-demos/5b13a193868b4bf28bcb45c792fce896/jdk-8u231-linux-x64-demos.tar.gz

6.4.5 if else if elseif for while

​ 相等 -eq(equals)

​ 大于 -gt (greater than)

小于 -lt (less than)

大于等于 -ge (greater than or equal)

小于等于 -le (less than or equal)

不相等 -ne (not equal)

间隔符 ````````` esc下面 1左边的键

sum+=j 等同于 sum=sum+j

case 用法:

6.4.6 常用命令awk

1)awk简介

​ 1.awk是一个非常棒的数据处理程序,它比较倾向于将一行分成多个‘字段’来处理。

​ 类似 String[] strArray = "a,b,c,d".split(","); strArray[0] strArray[3]

​ 2.数据可以来自标准输入、一个或者多个文件、其他进程的输出

​ 3.awk从第1行到最后一行逐行扫描,并执行匹配的操作

​ 4.awk的默认操作是输出匹配行即打印匹配行到标准输出

2) awk语法

​ 1.awk [选项] 'BEGIN{语句1;语句2;...} END{语句1;语句2;...} 模式1{语句1;语句2;...} 模式2{语句1;语句2;...} 模式n...' [文件名]

选项:

​ -F 指定分隔符

​ -f 调用脚本

语法详解:

​ BEGIN 初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置FS分隔符

​ // 匹配代码块,可以是字符串或正则表达式

​ {} 命令代码块,包含一条或多条命令

​ ; 多条命令使用分号分隔

​ END 结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息

​ 2.如果没有文件名,则数据来自标准输入

​ 3. awk默认分隔符是空格和tab,可以在BEGIN语句中为FS内置变量赋值重新定义分隔符或者使用-F 定义分隔符

3) awk内置变量及实例

$0 表示整个当前行

$1 每行第一个字段

NF 字段数量变量

NR 每行的记录号,多文件记录递增

FNR 与NR类似,不过多文件记录不递增,每个文件都从1开始

\t 制表符

\n 换行符

FS BEGIN时定义分隔符

RS 输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)
       匹配,与==相比不是精确比较

!~ 不匹配,不精确比较

== 等于,必须全部相等,精确比较

!= 不等于,精确比较

&&  逻辑与

|| 逻辑或

+ 匹配时表示1个或1个以上

/[0-9][0-9]+/ 两个或两个以上数字

/[0-9][0-9]*/ 一个或一个以上数字

FILENAME 文件名

OFS 输出字段分隔符, 默认也是空格,可以改为制表符等

ORS 输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕

-F'[:#/]' 定义三个分隔符

3) 脚本举例如下:

​ touch tomcat.log

​ date >> tomcat.log 执行多次

​ cat tomcat.log

​ awk 'BEGIN{print "文件开始";} END{print "文件结束";} {print "执行行" NR}' tomcat.log

1.以冒号为分隔符进行划分字段

echo “A:B:C:D” | awk 'BEGIN{FS=”:”} {print $1,$2,$3,$4}'

2.分隔符还可以是字符串

echo “A--B--C--D” | awk 'BEGIN{FS=”--”} {print $1,$2,$3,$4}'

3.分隔符还可以是正则表达式

echo “A:B:a-b-c-d” | awk 'BEGIN{FS=”[:-]”}{print $1,$2,$3,$4}'

4.忽略第一行数据

echo “1 2 3 4” | awk '{print $1$4}' #$1代表第1列,$4代表第4列

echo “1 2 3 4” | awk '{print $1A$4}' #中间加入的字符A并不能输出

echo “1 2 3 4” | awk '{print “$1A$4”}' #参数变量不能加入双引号

echo “1 2 3 4” | awk '{print $1“A”$4}' #正确方式

echo “1 2 3 4” | awk '{print $1,”A”,$4}' #注意与上式比较

awk 'NR>1{print $0}' /etc/hosts

​ awk '{print}' /etc/passwd == awk '{print $0}' /etc/passwd

awk '{print " "}' /etc/passwd //不输出passwd的内容,而是输出相同个数的空行,进一步解释了awk是一行一行处理文本

awk '{print "a"}' /etc/passwd //输出相同个数的a行,一行只有一个a字母

awk -F":" '{print $1}' /etc/passwd

awk -F: '{print $1; print $2}' /etc/passwd //将每一行的前二个字段,分行输出,进一步理解一行一行处理文本

awk -F":" '{print "Username:" $1 "\t\t Uid:" $3 }' /etc/passwd

awk -F: '{print $1,$3,$6}' OFS="\t" /etc/passwd //输出字段1,3,6,以制表符作为分隔符

awk -F: '{print NF}' /etc/passwd //显示每行有多少字段

awk -F: '{print $NF}' /etc/passwd //将每行第NF个字段的值打印出来

awk -F: 'NF==4 {print }' /etc/passwd //显示只有4个字段的行

awk -F: 'NF>2{print $0}' /etc/passwd //显示每行字段数量大于2的行

awk '{print NR,$0}' /etc/passwd //输出每行的行号

awk 'BEGIN{X=0} /^$/{ X+=1 } END{print "I find",X,"blank lines."}' file 计算文件中以$开头的行数

ls -l|awk 'BEGIN{sum=0} !/^d/{sum+=$5} END{print "total size is",sum}' 计算文件大小

https://blog.csdn.net/lukabruce/article/details/86692471

实际项目使用的脚本:

​ awk 'BEGIN{total=0} /cpu / {for(i=2;i<=NF;i++);total+=i}END{print $total}' /proc/stat

​ awk 'BEGIN{total=0} /cpu / {for(i=2;i<=NF;i++){print $i};total+=i}END{print $total}' /proc/stat

​ awk 'BEGIN{used=0} /cpu / { used=$2+$3+$4+$7+$8 }END{print used}' /proc/stat

​ yum -y install bc

bc 命令是任意精度计算器语言,通常在linux下当计算器用。

它类似基本的计算器, 使用这个计算器可以做基本的数学运算。

​ scale=2 设小数位,2 代表保留两位:

​ #!/bin/bash

function collect_data(){

totalCPU=awk 'BEGIN{total=0} /cpu / {for(i=2;i<=NF;i++);total+=i}END{print $total}' /proc/stat

usedCPU=awk 'BEGIN{used=0} /cpu / { used=$2+$3+$4+$7+$8 }END{print used}' /proc/stat

CPU_usage_is="$(usagePercent ${usedCPU} ${totalCPU})%"

echo $CPU_usage_is

}

function usagePercent(){

​ used=$1

​ total=$2

​ usedPercent=$(echo "scale=2;${used}*100/${total}"| bc)

​ echo ${usedPercent}

}

collect_data

id|awk 'BEGIN{FS="[=()]"} {print $3}'

6.5、软件的安装和维护(RPM)

6.5.1 RPM软件包管理及概述

​ RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括RedHat、CentOS、SUSE等Linux的分发版本都有采用,可以算是公认的行业标准了。RPM文件在Linux系统中的安装最为简便。

RPM 最早是由 Red Hat 公司提出的软件包管理标准,最初的全称是 Red Hat Package Manager。后来随着版本的升级又融入了许多其他的优秀特性, 成为了Linux中公认的软件包管理标准。被许多Linux发行使用,如:RHEL/CentOS/Fedora, SLES/openSUSE 等。如今RPM是RPM Package Manager的缩写,由RPM社区(http://www.rpm.org/)负责维护。

RPM的优点在于1.易于安装、升级便利;2.丰富的软件包查询功能;3.软件包内容校验功能;4.支持多种硬件平台

6.5.2 RPM五大功能及组件介绍

1.五大功能为:

安装——将软件从包中解出来,并安装到硬盘。

卸载——将软件从硬盘清除。

升级——替换软件的旧版本。

查询——查询软件包的信息。

验证——检验系统中的软件与包中软件的区别。

2.RPM组件:

   本地数据库 

rpm及其相关的可执行文件

RPM 前端工具,如 yum

软件包文件

6.5.3 RPM命令的使用

rpm的常用选项:

i:安装应用程序(install)

e:卸载应用程序(erase)

vh:以####显示安装进度(verbose hash)

U:升级软件包;(update)

qa: 显示所有已安装软件包(query all)

6.5.4 RPM命令安装、升级和删除软件

1.输出选项:

-v:安装时显示软件名称

-h:使用“#”显示进度

2.rpm file 的URL支持

ftp://

http://

rpm -ivh https://download.oracle.com/otn/java/jdk/8u231-b11/5b13a193868b4bf28bcb45c792fce896/jdk-8u231-linux-x64.rpm

3.rpm包的安装

mkdir software

cd software

ls

java -version 查看jdk版本 错误没有找到命令

rpm -ivh jdk-8u151-linux-x64.rpm

java -version

rpm -qa | grep jdk

配置前:

​ echo $JAVA_HOME

配置环境变量:

查看软件安装位置:

rpm -ql jdk1.8-1.8.0_151-fcs.x86_64 | tail -1

/usr/java/jdk1.8.0_151/src.zip

/etc/profile环境变量配置文件位置:

vim /etc/profile

环境变量配置:(路径为JDK 的解压路径)

export JAVA_HOME=/usr/java/jdk1.8.0_151

export PATH=$JAVA_HOME/bin:$PATH

export ClASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

//让配置生效

source /etc/profile

//查看配置结果

echo $JAVA_HOME

4.rpm包的卸载

​ rpm -e jdk1.8-1.8.0_151-fcs.x86_64

​ java -version

6.5.5 RPM的基本查询

1.查询已安装的所有软件包

rpm -qa

2.查询软件包是否安装并查看软件包的版本

​ **rpm -q **

rpm -qa | grep jdk

rpm -q jdk1.8-1.8.0_151-fcs.x86_64

3.查询软件包信息

**rpm -qi **

**rpm -qip **

rpm -qi jdk1.8-1.8.0_151-fcs.x86_64

4.查询软件包中所有文件的名称

**rpm -ql **

**rpm -qlp **

rpm -ql jdk1.8-1.8.0_151-fcs.x86_64

5.查询磁盘上的文件是从何软件包安装的

​ **rpm -qf **

rpm -qf /usr/java/jdk1.8.0_151/

3.5.5 RPM校验

1.校验有已安装的所有软件包

rpm -Va

验证内容中的8个信息的具体内容如下:

S 文件大小是否改变

M 文件的类型或文件的权限(rwx)是否变改变

5 文件MD5校验和是否改变(可以看作文件内容是否改变)

D 装置的主/次代码已经改变

L Link路径已被改变

U 文件的所属人已被改变

G 文件的所属群组已被改变

T 文件的创建时间忆被改变

文件类型:

c 配置文件(config file)

d 普通文件(documentation)

g "鬼"文件(ghost file),很少发生,通常是指该文件不被软件包所包含

l 授权文件(license file)

r 描述文件(read me)

2.校验指定的软件包

**rpm -V **

​ rpm -V jdk1.8-1.8.0_151-fcs.x86_64(删除安装目录下任意文件,再次检查)

​ rpm -V jdk1.8-1.8.0_151-fcs.x86_64(改变任意文件的权限,再次检查)

3.验证包含指定文件的软件包

​ **rpm -Vf **

​ rpm -Vf /usr/java/jdk1.8.0_151/

6.6、软件的安装和维护(yum)

6.6.1 yum概述

RPM软件包一般分为两大类:1.yy-x.x.rpm 软件包;2.yy-devel-x.x.rpm软件开发包,供别的软件包引用的库包。由此,RPM软件包安装时经常会出现缺少依赖库的现象,有时会产生连锁反应。 yum就是为了解决软件依赖问题而生。它的原理是将所有的软件包和软件开发包都放到服务器上,当安装软件包时向服务器请求,由服务器分析出依赖关系,从而提供一整套安装包。

Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE、CentOS中的Shell前端软件包管理器。基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。

6.6.2 yum的功能介绍

1.安装——将软件从包中解出来,并安装到硬盘。

2.卸载——将软件从硬盘清除。

3.升级——替换软件的旧版本。

4.查询——查询软件包的信息。

6.6.3 yum源的配置文件

[root@localhost yum.repos.d]# vi /etc/yum.repos.d/CentOS-Base.repo

[base] 容器名称,一定要放在[]中

name 容器说明,可以自己随便写

mirrorlist 镜像站点,这个可以注释掉

baseurl 我们的yum源服务器的地址。默认是CentOS官方的yum源服务器,是可以使用的,如果你觉得慢可以改成你喜欢的yum源地址

enabled 此容器是否生效,如果不写或写成enable=1都是生效,写成enable=0就是不生效

gpgcheck 如果是1是指RPM的数字证书生效,如果是0则不生效

gpgkey 数字证书的公钥文件保存位置。不用修改

6.6.4 yum源的配置

方法一: 配置本地yum源:

1.列出配置源

​ yum repolist

2.配置本地源

第一步:

从CentOS的官网下载CentOS的完整版iso文件,并上传到Linux文件系统中,例如/opt/tools/CentOS-6.9-x86_64-bin-DVD1.iso

第二步:挂载这个iso文件到/media/CentOS

mkdir /media/vcdrom

mount -o loop /opt/tools/CentOS-6.9-x86_64-bin-DVD1.iso /media/vcdrom

安装时使用参数enablerepo=c6-media

yum --enablerepo=c6-media -y install mysql-server

方法二:配置阿里源

1) 安装wget

yum install -y wget

2) 备份/etc/yum.repos.d/CentOS-Base.repo文件

cd /etc/yum.repos.d/

mv CentOS-Base.repo CentOS-Base.repo.back

3) 下载阿里云的Centos-6.repo文件

wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

4) 重新加载yum

yum clean all

yum makecache

6.6.5 yum的基本查询

1.查询jdk环境应该安装哪个具体的包名

yum search jdk

2.查询软件包的功能

yum search curl

3.查询服务器上所有的已经安装和可以安装的程序包

yum list

​ yum list rpm

​ yum list jdk1.8-1.8.0_151-fcs.x86_64

4.查询有哪些软件需要升级

yum list updates

6.6.6 yum的安装、卸载与升级

1.安装

centos6安装mysql:

yum install mysql-server #中间会提示输入y/n来确认安装

yum -y install mysql-server #不用提示,直接安装

centos7安装mysql5.7:

一、安装YUM Repo

1、由于CentOS 的yum源中没有mysql,需要到mysql的官网下载yum repo配置文件。

下载命令:

wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm

2、然后进行repo的安装:

rpm -ivh mysql57-community-release-el7-9.noarch.rpm

执行完成后会在/etc/yum.repos.d/目录下生成两个repo文件

mysql-community.repo

mysql-community-source.repo

二、使用yum命令即可完成安装和使用

1、安装命令:

yum install mysql-server

2、启动msyql:

systemctl start mysqld #启动MySQL

3、获取安装时的临时密码(在第一次登录时就是用这个密码):

grep 'temporary password' /var/log/mysqld.log

4 、 登录

mysql -u root -p 回车,复制临时密码

5、修改密码

set password=password('tigeradmin');

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

6、查看密码策略,然后再修改

SHOW VARIABLES LIKE 'validate_password%';

7,或者修改为低等级验证

​ set global validate_password_policy=LOW;

​ set password=password('tiger1314');

8,开启远程可以访问:

​ 连接服务器: mysql -u root -p

​   看当前所有数据库:show databases;

​    进入mysql数据库:use mysql;

​   查看mysql数据库中所有的表:show tables;

​    查看user表中的数据:select Host, User,Password from user;

​   修改user表中的Host: update user set Host='%' where User='root';

​ 说明: % 代表任意的客户端,可替换成具体IP地址。

​   最后刷新一下:flush privileges;

centos7安装mysql5.6:

​ 查看已经安装mysql组件:

​ yum list installed | grep mysql

​ 卸载:

yum -y remove mysql-libs.x86_64

下载yum源

wget http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm

安装yum源

rpm -ivh mysql-community-release-el6-5.noarch.rpm

查看yum源中mysql有效版本

​ yum repolist all | grep mysql

​ 使用下载yum源安装

​ yum install mysql-community-server -y

查看mysqld服务是否开机启动

chkconfig --list mysqld centos6

systemctl list-unit-files 查看开机启动列表(centos7)

让mysqld开机启动

​ chkconfig mysqld on centos6 不起作用

​ systemtcl enable mysqld centos7 不起作用

利用下面方法解决:

​ vi /etc/rc.d/rc.local

​ 加入:/etc/rc.d/init.d/mysqld start

chmod +x /etc/rc.d/rc.local

查看是否启动

​ service mysqld status

启动mysql服务

​ service mysqld start

如果启动不了服务,删除/var/lib/mysql/,再启动服务

​ rm -rf /var/lib/mysql/*

2.卸载

yum remove pam-devel

3.升级

升级指定软件包

yum update kernel #升级内核,小心。

全系统升级

yum update

6.6.7 的软件组功能

1.什么是软件组?

软件组就是一组相关的软件,比如gnome、比如gcc等,一个软件组名字会包含很多个软件。

2.查询软件组有哪些

yum grouplist

可用环境组:

最小安装

计算节点

基础结构服务器

文件和打印服务器

基本Web服务器

虚拟化主机

带图形用户界面的服务器

GNOME桌面

KDE Plasma工作区

开发创意工作站

可用组:

兼容性库

控制台Internet工具

开发工具

图形管理工具

旧式UNIX兼容性

科学支持

安全工具

智能卡支持

系统管理工具

系统管理

3.查询软件组gcc的信息

yum groupinfo "Development Tools"

posted @   cC星  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示