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)
- 命令行模式(command mode)
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。
- 插入模式(Insert mode)
只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。
- 底行模式(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由哪个包提供
- yum provides *libgpm.so.2
重新安装一下这个包:
- yum reinstall -y gpm-libs-1.20.7-6.el7.x86_64
然后更新yum源并生成缓存
-
yum update
-
yum makecache
最后重新卸载重装
-
yum -y remove vim*
-
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的弊端就显示出来,只能看到文件的最后一页内容
head:
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”
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://
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"
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异