python全栈-Linux基础
python全栈-Linux基础
文章目录
- Linux安装/配置
- 网络配置
- 配置Linux远程登录
- 配置虚拟机内部ip
- 配置真机的ip
- 安装XShell和Xftp
- 目录结构
- 用户和用户组
- 用户管理
- 添加用户useradd
- 查看用户id
- 修改用户usermod (选项)(参数)
- 用户密码设置passed (选项)(参数)
- 删除用户userdel [选项] 用户名
- 用户组管理
- 添加用户组groupadd (选项)(参数)
- 修改用户组groupmod ()()
- 删除用户组groupdel+用户组名
- linux用户类别
- 用户切换su
- sudo super user do
- visudo 配置用户权限
- Linux文件属性
- 显示文件属性 ls
- 文件类型
- 文件权限
- 权限字与权限操作
- chgrp改所属组
- chmod改文件属性
- 文字设置
- 数字设置
- chown改拥有者
- Linux路径
- 处理文件常用命令
- Linux文件编辑工具vim/vi
- 命令模式
- 底线命令模式
- 文件查看命令
- 打包压缩命令与搜索命令
- 搜索命令
- 常用系统工作的命令
- 管道符、重定向、环境变量
- 输入输出重定向
- 管道符----任意门
- 通配符
- 环境变量
- 磁盘管理
- Linux系统状态检测
- ip addr (ifconfig)
- uname -a
- free
- last
- history
- uptime
- Linux安装软件
- RPM软件包管理
- YUM
- 安装MySQL
- 远程连接MySQL
- 卸载MySQL
- 进程管理
- ps -aux
- egrep/grep
- top
- htop
- kill 进程id
- netstat
- 系统服务
- service 服务名 状态
- systemd 服务名 状态
- systemctl 状态 服务名
- systemd-analyze
- hostnamectl 查看当前主机信息
- timedatectl 查看当前时区
- Chkconfig 服务 状态 (开机自启
- 定时服务cron
- crontab配置文件
- 网络防火墙
- firewalld
- 防火墙配置
- firewalld-cmd防火墙cmd管理工具
- 1. 查看当前区域和规则
- 2. 常用区域及其描述
- 3. 设置区域
- 更改接口区域
- 添加或删除服务
- 添加或删除端口
- 4. 设置默认区域
- 5. 永久生效
- 6. 查看所有服务
- 注意事项
- SELinux
本项目使用的是centos版本
我们需要使用虚拟机VMWare来安装Linux。方便恢复系统操作
Linux安装/配置
网络配置
在linux里面有三种网络配置。
- 桥接
- NAT 最常用的
- 主机模式
配置Linux远程登录
- 网关配置:192.168.66.1
- 虚拟机IP:192.168.66.100
- 主机的vmnet8:192.168.66.10
这个是虚拟机里面的路由器网关
配置完后点击确定。
然后在linux里面输入刚刚注册的账户和密码,就会出现:[你的账号@localhost ~ ]$ 这条语句
Linux里面一切都是文件,哪怕网卡这种配置信息都是文件
配置虚拟机内部ip
输入命令
- vim /etc/sysconfig/network-scripts/ifcfg-ens33
vmware的版本不限,centos必须是7代的
出现这个界面才可以配置网络
需要按下a,才可以编辑内容,按下esc退出编辑
- 需要修改第四行dhcp,意思是动态ip,改成静态ip,static。保证IP不变
- 需要修改最后一行的no,改成yes,意思是让电脑开机后自动加载使用这个网卡
- 然后按下回车,添加信息:IPADDR=192.168.66.100
- 继续添加:NETMASK=255.255.255.0 这是子网掩码
- 继续添加:GATEWAY=192.168.66.1 这是网关
- 继续添加:DNS1=223.5.5.5
- 继续添加:DNS2=223.6.6.6 有了这两个阿里云的域名,可以访问网络了
- 按下esc退出编辑
- 输入:wq,这三个字符,按下回车就保存退出了
- 输入service network restart 意思是 执行-网络-重启.
- 出现末尾ok字样,就配置完成了
- 目前为止,虚拟机内部的ip都配置好了
配置真机的ip
我们把虚拟机的配好了,但是我们自己的电脑还无法跟虚拟机进行交互,即vmware8
配置vm8是为了主机和虚拟机通讯
去 控制面板------网络和Internet----网络连接
找vmware8,右键属性,找ipv4网络协议,
把IP地址改成192.168.66.10
默认网关是192.168.66.1
子网掩码255.255.255.0
dns是223.5.5.5,备用是223.6.6.6.
点击确定完成
这个和虚拟机里面的操作是一样的。到现在为止,虚拟机和真机已经配置好了
在虚拟机里面可以使用ping www.baidu.com得到对应的信息了
按下ctrl+c可以中断信息
安装XShell和Xftp
XShell是远程连接服务器的软件
xftp是传输文件的
- 打开xshell
- 新建会话,主机写虚拟机的ip192.168.66.100
- 然后输入账号和密码
- 就可以连接我们的虚拟机了
这样就可以使用远程登录的方式去操作虚拟机了
使用SSH密钥连接虚拟机
然后回到虚拟机,我们把虚拟机关闭,会弹出窗口,我们选择在后台挂起
还可以右键虚拟机,选择快照,类似存档,防止虚拟机崩溃,然后我们回档
目录结构
打开xshell,输入cd / ,回车
在输入ll ,回车
然后出现的信息,后侧的蓝色部分,都是目录
每一个目录都是文件,每一个文件都是目录
-
bin
-
bin ->usr/bin 里面存放的是二进制文件
-
[root@localhost /] 最后的/,意思是根目录
-
cd bin 可以进入bin目录 [root@localhost bin]
-
使用ll,可以看到目录里面有什么。我们使用的命令都在bin目录里面
-
cd… 是退出目录
-
-
boot
- 启动linux系统的核心文件
-
dev
- 设备信息,保存的是外部设备信息
-
etc 重要
- 最核心目录,存放系统管理配置文件,比如网卡的配置文件
-
home
- 用户的主目录
-
lib
- 动态连接共享库,共享文件
-
lib64
- 和lib类似
-
media
- 自动识别设备,比如U盘
-
mnt
- 临时挂载文件
-
opt
- 安装软件的目录,安装包啥的
-
proc
- 虚拟文件系统
-
root
- 系统管理员,超级管理员
-
run
- 临时文件,存放系统信息
-
sbin
- 超级用户使用的二进制文件
-
srv 别动
-
sys
- 进程存储的文件系统
-
tmp
- 存放临时文件
-
usr
- 软件,程序,文件存放的位置
-
var
- 需要扩展的数据,常用的修改文件
这里面常用的是etc,home,opt,media,root,usr,var
用户和用户组
因为linux是多用户多任务的操作系统
满足多用户同时使用,安全性也很高
因为用户很多,我们需要给用户划分族类,不同的用户组有不同的权限,保证系统的安全
- 用户和组的关系
- 一对一 一个用户一个组
- 一对多 一个用户多个组
- 多对一 多个用户一个组
- 多对多 多个用户多个组
用户管理
-
超级管理员是root,UID是身份证号,root的UID=0
-
系统用户UID是1~999,无法使用,是linux系统使用的
-
普通用户UID:1000~无穷,默认的
一般使用UID判断用户身份
添加用户useradd
-
语法结构 useradd (选项)(参数)
-
参数:
- -d 指定用户家目录,默认在home
- -e 账户到期时间,格式YYYY-MM-DD
- -u 指定用户默认UID
- -g 指定一个用户组,必须已经存在
- -G 指定一个或多个用户组
- -N 不创建与用户同名的用户组
- -s 指定用户的默认shell解释器
-
输入命令:useradd -u 8888 zhao
- 创建一个用户,默认在home,UID是8888
-
useradd -d /home/linux -u 8888 -s /sbin/nologin linuxprobe
- 指定了用户的家目录是home下面的linux,并且指定shell格式,nologin不让登录系统,最后是用户的名字linuxprobe
查看用户id
- id 用户名
- 返回用户信息,uid,gid,group
修改用户usermod (选项)(参数)
- 选项:
- -c 备注:修改用户账号的备注文字
- -d 登入目录:修改用户登入的目录
- -e 有效期:修改有效期
- -f 缓冲天数:密码过期后多少天关闭账号
- -g 群组 修改用户所属群组
- -G 群组 修改用户所属附加群组
- -l 修改用户名称
- -s 锁定用户密码,使密码无效
- -u 修改用户id
- -U 解除密码锁定
- usermod -u 1111 zhao 把zhao用户的uid改成1111
用户密码设置passed (选项)(参数)
- 参数:
- -d 删除密码,管理员使用
- -f 强制执行
- -k 设置只有密码失效后,进行更新
- -l 锁住密码
- -s 列出密码信息,管理员使用
- -u 解锁账号
- 给用户上密码passwd+用户名
- 然后输入密码,输入密码的时候,密码不可见
- 一般是输入两次密码,第二次是确认
- 案例
- 一个用户,需要休假,我们需要进行限制登录,和休假结束之后的解除限制操作
- passwd -l 用户名 限制
- passwd -u 用户名 解除限制
删除用户userdel [选项] 用户名
- 选项:
- -f 强制删除用户
- -r 同时删除用户及用户家目录
- -rf 上面两个的组合效果
- 原理就是执行命令的时候,去相应的文件把信息删除了
- 相应的文件有:
- /etc/passwd
- /etc/shadow
- /home/username
- 相应的文件有:
用户组管理
添加用户组groupadd (选项)(参数)
- 参数:
- -g 指定工作组id
- -r 创建系统工作组,id需要小于500
- -K 覆盖配置文件
- -o 允许添加组id不唯一的工作组
- 格式:groupadd -g 333 python
- 创建一个组,id是333,组名是python
修改用户组groupmod ()()
-
参数:
- -g 修改id
- -o 重复使用群组识别码id
- -n 设置新组名
-
groupmod -g 345 -n python2 python
- 修改python组,id改成345,组名改成python2
删除用户组groupdel+用户组名
linux用户类别
在linux里面有三种用户:超级用户,普通用户,伪用户
用户切换su
首先,要创建一个用户,才能从root切换过去
- su+用户名
- 输入这个命令就可以切换用户了
- 超级用户切换普通用户,不用输入密码
- 普通用户切换超级用户,需要输入密码
我们使用超级用户vim创建一个文件,随便输入内容,使用wq保存退出
切换到普通用户,我们依然可以查看文件,cat+文件名
但是普通用户没有权限修改rm/保存wq文件
rf 是强制保存,也不行
sudo super user do
字面意思:超级用户干的事情。本意:提高权限去搞事
是提高权限去搞事。
但是提高权限这个操作,还需要使用visudo去操作
- 限制用户执行的命令
- 记录用户执行的命令
- 配置文件,提供集中的用户管理
visudo 配置用户权限
这个是为了给用户设置权限的操作,用户有了权限,才能使用权限
普通用户有了root的权限,才能执行root的操作
因为是设置权限,这个设置权限的操作只能在root用户下使用
小权限往大权限需要输入密码,大权限到小权限随便改
- 直接输入visudo,回车即可
- 使用:set nu 可以显示行数,行号。方便我们定位
- :set nonu 就可以关闭显示行号了
- 发现root ALL=(ALL) ALL 这条语句
- 用户名 允许使用的主机=(谁的身份) 可以执行的命令列表
- zhao ALL=(ALL) ALL 意思是用户zhao,有了root所有的权限
- 然后普通用户就有了超级用户的权限了
- 但是还不能执行超级用户的操作
- 需要使用sudo + 操作 才可以
- 意思就是,有了权限,还需要配合sudo使用权限
- 无需密码权限
- 使用 zhao ALL=NOPASSWD: ALL
- 在刚刚的visudo里面,把权限改成这样,我们切换到普通用户的时候,就不用输入密码完成某些操作了
- 就永久不需要密码了,也就是免密模式
Linux文件属性
在Linux系统里面一切都是文件,各种操作都是修改文件来实现
显示文件属性 ls
ls 全称 Linux Is (英文原型:list files)看文件列表
- 参数:
- -a 显示所有文件及目录,.开头的隐藏文件也能看到
- -l 除文件名以外的所有信息都显示出来
- 下面的用的少
- -r 将文件逆序显示
- -t 按照时间排序显示文件
- -A 和a一样,但是不列出隐藏文件和父目录
- -F 在可执行文件名后面加符号,目录加/,文件加*
- -R 列出目录下所有文件
-
我们常用的ll,就是 ls -l 的缩写
- 波浪线开头的目录,是root的目录
/ 斜杠是根目录
- 解读:drwxr-xr-x. 13 root root 4090 Jan27 2025 var
- 文件类型与权限字 drwxr-xr-x.
- 链接个数 13
- 文件的所有者及它的用户组 root root
- 文件大小 4090
- 文件修改日期 Jan27 2025
- 文件名 var
文件类型
有:
-
普通文件,存放数据,程序等信息的文件,一般是文本和二进制文件
-
目录文件,存放目录,文件名和子目录名
-
链接文件,在不同文件系统之间建立链接关系实现对文件的访问
-
设备文件,把io设备映射成设备文件
-
管道文件,在进程中传递数据
lrwxrwxrwx. 1 root root 7 Mar 1 03:21 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Mar 1 03:24 boot
我们使用ll,查看所有文件信息
- I开头,链接文件
- -开头,是普通文件
- d开头是目录文件
- c设备文件
- p管道文件
文件权限
lrwxrwxrwx. 1 root root 7 Mar 1 03:21 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Mar 1 03:24 boot
就是文件信息的第一个内容,一共有10个字符
- 第0位,是文件类型
- 1到3,是文件所有者的权限,分别是:读r,写w,执行x
- 4到6,是文件所有者的组权限,分别是:读r,写w,执行x
- 7到9,是其他用户的权限,也是,读r,写w,执行x
如果对应的权限是-杠,说明没有呗
权限字与权限操作
用于修改已经创建好的文件的权限
有三种改变权限的方式:
- chgrp改变所属群组
- chown改变文件所有者
- chmod改变文件属性
chgrp改所属组
- chgrp [-R] 所属组名 文件名
- -R是更改下面的所有文件的所属组
- chgrp -R web a.info
- 把a文件,改到了web组底下了
chmod改文件属性
在Linux里面有两种属性设置方式,数字和符号
文件的基本权限有九个,分别是owner/group/others,也就是自己,组,其他
这三类人,各自有3个权限,读,写,执行
文字设置
三类人:
- user用户 -u
- group组 -g
- others其他 -o
- a 是全部人
chmod | u,g,o,a | +增加,-去除,=设定 | r,w,x | 文件或目录 |
---|---|---|---|---|
- chmod g+w a.info
组,增加,写,a.info文件
a.info所属的组,增加一个写的权限。
把加号改成减号,就是移除权限
数字设置
三种权限:
- r:4
- w:2
- x:1
解读:drwxr-xr-x.
rwx r-x r-x
7 5 5 这是求和运算
- chmod 755 a.info
- 对a文件的三类用户进行权限设定
chown改拥有者
- chown -R 用户名 文件
意思是更改文件,到用户名底下
- chown -R 用户:用户组 文件
更改文件的时候,既改到用户底下,又改到用户组底下
Linux路径
以反斜杠开头的路径,比如一开始的网卡文件路径,就是绝对路径
- 绝对路径,是从根开始的路径
- 相对路径,是以点开头,或者点点开头的路径,比如/etc/text
- 一个点开头,说明是目前所在的目录里面,比如./text
- 两个点开头,说明是上一级目录里面,比如…/text
- 输入pwd查看当前目录的绝对值路径
- 输入cd -返回上一次目录的位置去,就是我们使用cd去切换路径的时候,可以使用cd-回到上一次的路径
- 输入cd …/…/ 有几个俩点,就回几次上级目录
处理文件常用命令
- ls 列出目录
- pwd 显示文件所在位置
- mkdir 创建新目录/文件夹
- -p 递归创建文件夹,创建多级目录的时候,需要使用这个参数
- mkdir -p a/b/c/d
- 这个的本质是创建一个d目录,但是abc都没有,使用p可以强制创建
- rmdir 删除空目录
- -p 删除多级空目录
- 比如a目录是多级目录,他下面有很多子目录,也是空目录,就可以递归删除了
- cp 复制文件或目录
- -r 递归复制,把目录下所有文件和目录都复制
- 如果不是递归复制,只能复制一个
- cd 文件 路径
- 复制文件,到后面的路径去
- rm 删除文件或目录
- -f 忽略不存在的文件,强制删除,但用就是普通删除
- -r 递归删除,一般是删除文件夹
- -rf 强制删除文件夹
- mv 移动文件或目录,重命名
- mv 文件 路径/
- 把文件移动到路径里面去
- mv 文件名1 文件名2
- 把文件1重命名为文件2
- mv 文件 路径/
Linux文件编辑工具vim/vi
vim和vi的区别:vim自带语法高亮,vi什么都没有,都是黑白的
vim/vi的三种模式:
- 命令模式
- 我们使用vi/vim 加 文件名,进入文件
- 我们对文件完成编辑之后,按下esc,进入了命令模式,再按下:wq退出文件
- 输入模式
- 我们进入文件的时候是命令模式,还需要按下i,a,o任意一个,进入输入模式
- 输入结束之后,按下esc,退出输入模式,进入命令模式
- 底线命令模式
命令模式
对文件进行快速编辑,但是不能输入
-
命令:
- dd 删除光标所在行
- 5dd 删除光标所在及一下的5行
- yy 复制光标行
- 5yy 复制光标及一下五行
- n 显示搜索命令定位的下一个字符串
- N 显示搜索的上一个字符串
- u 撤销上一步操作
- p 将dd删除的行/yy复制的行,粘到光标后面
- G 文本末尾
- gg 文本开始
- x 删除光标所在的字符
- shift+^ 移动到行首
- shift+$ 移动到行尾
- /a 找到文件内,所有是a的字符,并高亮字符
底线命令模式
在命令模式下,按:,进入该模式,按下回车,回到命令模式
主要是保存或者退出文件
- 命令:
- :w 保存
- :q 退出
- :q! 强制退出
- :wq! 强制保存退出
- :set nu 显示行号
- :set nonu 不显示行号
- :命令 执行命令
- :整数 跳转到整数行
- 😒/one/two 将光标所在行的第一个one文本替换成two文本
- 😒/one/two/g 将光标所在行的所有one替换成two
- :%s/one/two/g 将全文的one替换成two
- ?字符串 搜索字符串
- /字符串 搜索字符串
- shift+zz 也是保存退出,必须按住shift,同时快速按下z两次,如果是按一次z,就是程序挂起
文件查看命令
- cat+文件 显示文件内容
- tac+文件 逆序显示文件内容
- nl+文件 显示文件的时候显示行号
- more+文件 一页一页的看文件
- 按下空格 翻页
- enter 翻一行
- /字符串 搜索字符串
- :f 显示文档名和目前行数
- q 离开more模式,看完会自动退出
- b或者CTRL+b 返回上一页
- less+文件 和more+文件一样的效果
- head -n 文件 后面的n是几,就看文件的前几行内容
- tail -n 文件 看文件尾几行
打包压缩命令与搜索命令
- tar [选项] [文件]
- 选项:
- -c 产生.tar打包文件
- -v 显示详细信息
- -f指定压缩名称
- -z 打包的同时压缩Gzip
- -x 解包tar
- tar -zcvf test.tar.gz 文件1 文件2 文件3
- 除了x,都写上
- tar -zxvf test.tar.gz 压缩包
- 这次是解压缩包
- tar.gz是Linux系统里面的安装包,解压包啥的
- 选项:
- gzip/gunzip压缩,格式.gz
- gzip+文件 压缩文件,在原路径生成
- gunzip+文件.gz 解压
- 在解压的时候,最后写-C + 路径,可以指定解压文件的位置
搜索命令
- grep [参数 查找内容 源文件]
- 用于在文本中/文件里面执行关键词搜索
- 参数:
- -b 将可执行文件当成文本文件搜索
- -c 只显示找到的行数
- -i 忽略大小写
- -n 显示行号
- -v 反向选择,显示没有关键词的行
- -E 允许使用正则表达式
- find [查找路径] 寻找条件 操作
- 按照指定条件查找文件,在整个Linux系统里面找
- 参数:
- -name 匹配名字
- -perm 匹配权限
- -user 匹配所有者
- -group 匹配所有组
- -mtime -n +n 匹配修改内容的时间
- -atime -n +n 匹配访问文件的时间
- -ctime -n +n 匹配修改文件权限的时间,n是几天
- -nouser 匹配没有归属者的文件
- find ./ -name *.info
- 找,当前目录下,名称是以info结尾的文件
常用系统工作的命令
- reboot 重启系统
- 只能是超级管理员来执行
- poweroff 关机
- wget [参数] 下载地址
- 从终端下载网络文件
- 参数:
- -b 后台下载
- -P 下载到指定目录
- -t 最大尝试下载次数
- -c 断点续传
- -p 下载页面内所有资源,包括图片、视频
- -r 递归下载
管道符、重定向、环境变量
输入输出重定向
意思是,把多个单一的Linux命令组合到一起,协同工作
- 输入重定向
命令 < 文件 | 把文件作为命令进行输入 |
---|---|
命令 << 分界符 | 从标准输入中读入,遇到分界符停止 |
命令 < 文件 1 > 文件2 | 把文件1当成命令去输入到命令行,并把得到的信息返回到文件2 |
- 输出重定向
命令 > 文件 | 清空文件,并把命令的返回值写入文件 |
---|---|
命令 2> 文件 | 清空文件,把命令的错误返回值写入文件 |
命令 >> 文件 | 追加文件,把返回值写入文件 |
命令 2>> 文件 | 追加文件,把错误返回值写入文件 |
命令 >> 文件 2>$1 命令 &>> 文件 | 追加文件,把标准输出和错误输出都写入文件 |
比如,之前的cat+文件,就是把文件的内容,打印到屏幕上
现在,cat+文件1 >> 文件2 ,就是查看文件1,但是我们看不到了,输出的信息在文件2里面
管道符----任意门
命令A | 命令B
把命令A的返回值,传给B,当成命令B的输入值,我们再拿B的返回值
- 比如,我们去执行一个命令,他的返回值很多,我们之前学过文件的查看命令more
- 所以,我们在刚刚的执行命令后面,加上或,再加上more,就可以使用more命令,翻页去查看返回值了
命令1 | 命令2 | 命令3 | 。。。
严格意义上讲,命令2的返回值还能进行操作,一直无限套娃下去
通配符
就是利用正则表达式,去寻找文件
- ll /dev/test* 去找dev目录下,test开头的文件
- ll /dev/test[0-9] 找test后面有数字的文件
反正就是正则表达式了,去匹配内容
环境变量
有两种:系统环境变量,用户环境变量
系统环境变量,是任意用户都可以使用的
用户环境变量,只有用户自己有,其他用户访问不了
- 系统环境变量的位置:/etc/profile
- 用户环境变量:~/.profile
我们进入了环境变量的文件后,直接在末尾的位置,写要添加的环境变量就可以了
- 比如,添加一个Java的环境变量
- export JAVA_HOME=/user/local/jdk1.8
- 这个就是新增的环境变量
- export PATH=$PATH:$JAVA_HOME/bin
- 这是把原来的环境环境变量和新增的环境变量进行拼接
重启计算机,可以让环境变量生效
或者输入命令,sourse + 环境变量路径
磁盘管理
-
fdisk [必要参数] [选择参数]
- 必要参数:
- m 查看全部可用参数
- n 添加新的分区
- d 删除某个分区信息
- l 列出可用分区类型
- t 改变某个分区类型
- p 查看分区信息
- w 保存退出
- q 不保存,退出
-
df [选项] [目录/文件名]
- 显示磁盘的使用情况
- 参数:
- -a 显示所有文件系统信息
- -m 以MB为单位显示容量
- -k 以KB为单位
- -h以KB,MB,GB显示
- -T 显示分区的文件系统名称
- -i 以含有inode的数量显示
- 返回值解读:
- 1k-blocks 表示文件系统总大小,以KB为单位
- Used 表示用了多少
- Available 剩多少
- Use% 硬盘使用率
- Mounted on 硬盘的目录位置
- Filesystem 分区,设备名称
-
ln [选项] 目标
-
参数:
- -s 创建符号链接,没有此参数就是硬链接
- -f 强制创建文件或目录的链接
- -i 覆盖前先询问
- -v 显示创建链接的过程
-
ln -s 文件1 文件2
- 文件2相当于文件1的指针,我们对文件1的操作,比如查看啥的,对文件2也能实现
- 我们如果把文件1删除,文件2就失效了,还要把文件2删除
-
-
硬链接与软链接
- 硬链接:在原来的文件上面在增加一个访问文件的入口,源文件被删除之后,因为还有一个入口存在,就不会消失
- 软链接:是创建一个指针,执行原文件,源文件被删除,这个指针就失效了,要及时清除指针
Linux系统状态检测
ip addr (ifconfig)
获取网卡配置与网络状态
- lo是回环地址
- ens123 是我们配置的ip地址
uname -a
查看系统内核与系统版本等信息
- -a是看系统内核
- cat /etc/redhat-release 查看系统版本
free
- free -h 显示当前系统内存的使用量信息
total used free shared buff/cache available Mem: 972M 210M 643M 7.6M 118M 629M Swap: 2.0G 0B 2.0G
从左往右:内存总量、已用量、可用量、进程共享内存、磁盘缓冲内存、缓冲内存
last
用于查看所有系统的登录记录
history
显示系统执行过的命令
一般是显示最近的1000条命令,还可以修改文件/etc/profile里面的HISTSIZE的值,来进行命令条数的设置。
如果使用-c参数,就会清空命令记录。
HOSTNAME=
/usr/bin/hostname 2>/dev/null
HISTSIZE=1000
uptime
显示计算机的负载情况
- 00:35:42 up 6:14, 2 users, load average: 0.00, 0.01, 0.04
分别显示的是:当前系统时间,运行时间,用户数量,负载平均值
负载平均值是三个时间段:
- 过去1分钟的平均负载
- 过去5分钟的平均负载
- 过去15分钟的平均负载
负载值,不要长期超过1,生成环境下不要超过5
Linux安装软件
三种安装方式:源码,rpm,yum
RPM软件包管理
RPM命令:
rpm -ivh filename.rpm | 安装 |
---|---|
rpm -Uvh filename.rpm | 升级 |
rpm -e filename.rpm | 卸载 |
rpm -qpi filename.rpm | 查看软件描述 |
rpm -qpl filename.rpm | 查看软件文件信息 |
rpm -qf filename | 查询文件属于哪个RPM |
rpm -e --nodeps filename | 删除文件的同时,删除文件的依赖关系 |
依赖关系,就像之前的多级目录一样
其中:
- -i 是install 安装
- -v 显示安装画面
- -h 显示安装进度
安装路径 | 备注 |
---|---|
/etc | 配置文件放置目录 |
/usr/bin | 可执行文件 |
/usr/lib | 动态链接库 |
/usr/share/doc | 软件使用手册和说明文件 |
/usr/share/man | man page档案 |
YUM
CS架构的软件
底层也是rpm软件包
是一个在线的软件管理工具,必须联网
我们需要从这个软件商店下载软件
- 查看我们当前的yum服务器是什么yum repolist all
- 因为yum是国外的,我们直接使用非常的慢,需要配一个镜像源
- 镜像源:
- base:mirrors.aliyun.com
- extras:mirrors.sohu.com
- updates:mirrors.sohu.cim
- 打开配置文件: vi /etc/yum.repos.d/CentOS-Base.repo
- 配置阿里云
- 安装wget
- yum install -y wget
- 备份yum文件,防止出错,不能恢复
- cd /etc/yum.repos.d/
- mv CentOS-Base.repo CentOS-Base.repo.back
- 下载阿里云的Centos-7.repo文件
- wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
- 重新加载yun
- yum clean all
- yum makecache
- 检测配置源是不是阿里云
- cat /etc/yum.repos.d/CentOS-Base.repo
- 安装wget
- YUM使用手册
命令 | 作用 |
---|---|
yum repolist all | 列出所有仓库 |
yum list all | 列出所有仓库软件包 |
yum info filename | 查看软件包信息 |
yum install filename | 安装软件包 |
yum reinstall filename | 重新安装软件包 |
yum update filename | 升级软件包 |
yum remove filename | 移除软件包 |
yum clean all | 清理仓库缓存 |
yum check-update | 检查可更新安装包 |
yum grouplist | 查看系统中已经安装的软件包 |
yum groupinstall filename | 安装指定的软件包 |
yum groupremove filename | 移除指定软件包 |
yum groupinfo filename | 查询指定软件包组信息 |
- 因为使用yum安装的时候,中途有一个确认的输入y,我们可以一开始就把y写在参数里面
- yum install -y python
安装MySQL
-
下载yum源库
- wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
-
安装yum库
- rpm -ivh mysql57-community-release-el7-10.noarch.rpm
-
安装数据库
- yum -y install mysql-community-server
-
处理报错
- Failing package is: mysql-community-libs-5.7.44-1.el7.x86_64
GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
- Failing package is: mysql-community-libs-5.7.44-1.el7.x86_64
-
因为是进行了gpg验证,所以卡住了
-
加参数,拒绝gpg验证
- yum -y install mysql-community-server --nogpgcheck
-
出现complete,即安装成功
-
systemctl start mysqld 启动MySQL
-
systemctl status mysqld 看看有没有启动成功
-
登录MySQL,mysql -uroot -p
-
找MySQL的密码,grep “password” /var/log/mysqld.log
- 密码在:后面
-
需要对初始密码进行更改,才可以使用MySQL
-
修改MySQL密码:ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘新密码’;
-
一般来说,这个密码太简单了会不让你设置,我们为了学习需求可以自己改一下MySQL的密码强度
-
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_policy=Low; 密码强度
Query OK, 0 rows affected (0.00 sec)
mysql> SET GLOBAL validate_password_length=6; 密码长度
Query OK, 0 rows affected (0.00 sec)
注:执行完初始化命令后需要输入数据库root用户密码
注:密码策略分四种
1、OFF(关闭)2、LOW(低)3、MEDIUM(中)4、STRONG(强) -
如果不更改密码的强度就有后面的要求:大小写字母,特殊字符,密码长度
-
-
输入exit退出MySQL,然后再次登录MySQL,验证密码
- MySQL的命令
- show databases; 查看库
- create database test; 创建一个名为test的库
远程连接MySQL
这里是使用window系统下面的navicat连接Linux里面的MySQL
直接连是连不上的。
因为Linux里面的防火墙没关,使用命令firewall-cmd --state,发现是running
使用systemctl stop firewall.service关闭防火墙,再次运行上面的命令,就是not running
然后去虚拟机里面启动MySQL
在MySQL里面查看所有库,发现mysql库,这个库,是用户的使用权限
使用命令use mysql;进入了mysql库
使用命令select user ,host from user;然后弹出一个表,发现root用户的host是localhost,也就是本机,即虚拟机能使用MySQL
使用命令update user set host = “%” where user = “root”; 出现ok字样证明修改成功
最后刷新一下MySQL的配置,使用命令flush privileges;再次出现ok即可
直接退出就行,就能连上了
卸载MySQL
有安装就有卸载
首先在Linux里面查看有没有安装MySQL,使用命令rpm -qa |grep -i mysql
如果有很多MySQL相关的语句,就是安装了MySQL
开始卸载:
- 停止MySQL的服务
- systemctl stop mysqld.service
- 依次去把MySQL的文件删除
- 这条命令就是看mysql文件的rpm -qa |grep -i mysql
- 然后使用命令rpm -ev --nodeps mysql文件名
- 一直重复步骤1和2
- 删除掉mysql的文件之后,还可能有残留
- 使用命令whereis mysql,可以看到有MySQL的空文件夹,也就是空目录
- 使用rm删除即可
- 最后再使用find / -name mysql,从整个Linux系统里面去找mysql
- 把出现的路径全部使用rm删除即可
- 最后,在etc里面的passwd文件里面,最后一行有一个mysql官方配置的用户和用户组
- 使用userdel删除用户,还有groupdel删除用户组
- 也可能没有创建用户组,就不用删了
- 现在彻彻底底删除了MySQL
进程管理
执行中的程序就是进程
ps -aux
参数:
-a 显示所有进程
-u 显示用户及其他信息
-x 没有控制终端的进程
- USER 程序的执行者
- PID 进程号
- %CPU 占CPU
- %MEM 占内存
- VSZ 虚拟内存
- RSS 固定内存
- TTY 所在终端
- STAT 运行状态
- R 开头的是运行中
- S开头的是中断中
- T是停止
- Z是进程停止,但存在
- START 进程开始时间
- TIME CPU运行时间
- COMMAND 实际指令
因为是一次性显示很多进程,配合管道符,可以去找特定的进程
- ps aux|egrep ‘(cron |syslog)’
- 我们去找了有关cron和syslog的线程信息
- ps aux|egrep mysql
- 找MySQL进程
egrep/grep
一样的,egrep支持使用正则表达式去搜索
grep不支持正则表达式
top
查看系统状态,类似任务管理器
top - 21:14:09当前时间 up 11 min运行时间, 2 users用户数量, load average: 0.04, 0.04, 0.05内存负载
Tasks: 105 total进程数量, 1 running运行的进程数量, 104 sleeping休眠进程, 0 stopped, 0 zombie
%Cpu(s): 0.0 us用户使用, 0.0 sy系统使用, 0.0 ni优先态,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 995432 total总内存, 446868 free剩余内存, 376156 used使用内存, 172408 buff/cache缓存
KiB Swap: 2097148 total磁盘, 2097148 free剩余, 0 used使用. 472216 avail Mem 缓存PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1426 root 20 0 161092 5648 4284 S 0.3 0.6 0:00.15 sshd
1 root 20 0 128172 6732 4164 S 0.0 0.7 0:01.30 systemd
按q退出
- top -d 2
- 可以设置刷新时间,每几秒刷新一次当前数据
ps是静态显示信息
top是动态显示
htop
新版的top命令
有部分可视化页面
可以使用鼠标点击
安装epel源
yum install epel-release -y
安装htop
yum install -y htop
输入htop验证
kill 进程id
我们用上面ps或者top拿到的进程id,对进程进行关闭
参数-9强制停止进程
netstat
监控网络信息进程
参数:
-a | 列出所有端口 |
---|---|
-at | 所有TCP端口 |
-au | 所有UDP端口 |
-ax | 所有unix端口 |
-atnlp | 所有ip,TCP,程序名端口 |
-s | 所有端口统计信息 |
-st | 所有TCP统计信息 |
-su | 所有UDP统计信息 |
-r | 显示核心路由统计 |
-rn | 显示所有路由TCP统计 |
从后台启动进程,在命令结尾加&
系统服务
service 服务名 状态
状态:start stop restart reload重新加载 status查看状态
- service network status查看网络状态
systemd 服务名 状态
和service差不多
service启动慢
systemctl 状态 服务名
和service一样都是有5个状态,但是使用命令颠倒了一下
是先写状态 再写服务
- 如果service和systemd的命令是service func start
- 那么systemctl同等命令就是systemctl start func.service
- 注意服务的后缀
systemd-analyze
查看启动耗时
就像360提醒你本次开机时间打败多少人一样
- systemd-analyze 启动耗时
- systemd-analyze blame 每个服务的启动耗时
- systemd-analyze critical-chain 瀑布状启动流
- systemd-analyze critical-chain func.service 指定进程启动流
hostnamectl 查看当前主机信息
- sudo hostnamectl set-hostname rehl7
设置主机名
timedatectl 查看当前时区
- timedatectl list-timezones 显示所有可用时区
- sudo timedatectl set-timezone china/shanghai 设置时区
Chkconfig 服务 状态 (开机自启
设置某个服务,来开机自动运行,自启动
原理就是把启动的程序放在目录/etc/rc.d/init.d文件夹里面
[root@localhost /]# cd /etc/rc.d/init.d
[root@localhost init.d]# ll
total 40
-rw-r–r–. 1 root root 18281 May 22 2020 functions
-rwxr-xr-x. 1 root root 4569 May 22 2020 netconsole
-rwxr-xr-x. 1 root root 7928 May 22 2020 network 开机自启动网卡
-rw-r–r–. 1 root root 1160 Dec 7 2023 README
参数:
- –add 把服务加入开机自启动
- –del 删除这个服务的自启动
- –level 查看服务的运行级别
- –list 查看所有运行服务
- chkconfig 服务 on 开启服务
- chkconfig 服务 off 关闭服务
定时服务cron
就是定时启动服务
crontab配置文件
输入命令:vim /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59) 分钟
# | .------------- hour (0 - 23) 小时
# | | .---------- day of month (1 - 31) 几号
# | | | .------- month (1 - 12) OR jan,feb,mar,apr … 几月
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat 周几
# | | | | |
# * * * * * user-name command to be executed
- 00 02 * * * ls 每天凌晨两点执行ls
- 00 01 1 3 1,3,7 每周的周一、周三、周日,3月1号凌晨1点执行
- 如果都是*号,那就是每分钟都执行一次
参数:
-
-e 编辑定时任务
-
-l 查看
-
-r 删除
-
-u 指定用户
示例:23 5 * * 1,3,5 /sbin/service sshd start
每周的周一,周三,周五的凌晨 5点23分,执行后面的命令
注意后面的命令,不能简单的使用service,要使用绝对路径的service
如果找不到这个文件在哪里,就使用whereis 文件名,就可以看到文件的绝对路径了
网络防火墙
firewalld
默认防火墙工具
有两种界面管理方式:
- CLI命令行界面
- GUI图形化界面
防火墙有一个区域的概念,就是在不同的网络环境有不同的防火墙严格程度
比如,在使用公用网络,防火墙该阻止哪些用户进来。
一共有9种区域概念:
- public 默认状态,只允许ssh,dhcpv相关的服务
- trusted 全开,不限制任何服务
防火墙配置
- firewall-cmd 命令行工具
- fire-config 图像工具
- /etc/firewalld/中的配置文件
常用服务:
- systemctl start firewalld启动防火墙
- systemctl stop firewalld关闭防火墙
- systemctl status firewalld 查看防火墙状态 firewall-cmd --state
- systemctl enable firewalld 开机启用防火墙
- systemctl disable firewalld 开机禁用防火墙
firewalld-cmd防火墙cmd管理工具
因为使用代码的效率比使用图形化界面高
直接搞命令行工具
防火墙的配置默认是关机就失效,为了让防火墙的配置一直有效可以加一个永久的参数–permanent
1. 查看当前区域和规则
首先,您可以查看当前的区域和设置:
# 查看所有区域
firewall-cmd --get-zones
# 查看活动区域
firewall-cmd --get-active-zones
# 查看特定区域的详细信息
firewall-cmd --zone=<zone-name> --list-all
2. 常用区域及其描述
以下是一些常用区域及其含义:
- drop: 该区域会丢弃所有传入连接。
- block: 该区域会拒绝所有传入连接,只有返回的连接会被允许。
- public: 该区域用于外部网络或公共网络,允许接入的请求不足以被信任。默认
- external: 该区域用于外部网络,适用于具有 IP 转发能力的接口。
- dmz: 该区域用于 DMZ(隔离区),允许对某些服务的访问。
- work: 该区域为工作环境,信任局部网络不太安全。
- home: 该区域用于家庭网络,信任独立家用网络。
- internal: 该区域用于内部网络,信任的网络。
- trusted: 该区域信任所有流量。
3. 设置区域
更改接口区域
# 将接口(如 eth0)设置为指定区域
firewall-cmd --zone=<zone-name> --change-interface=<interface-name>
添加或删除服务
# 向指定区域添加服务(如 http)
firewall-cmd --zone=<zone-name> --add-service=<service-name>
# 从指定区域删除服务
firewall-cmd --zone=<zone-name> --remove-service=<service-name>
# 列出区域中的服务
firewall-cmd --zone=<zone-name> --list-services
添加或删除端口
# 向指定区域添加端口(如 8080/tcp)
firewall-cmd --zone=<zone-name> --add-port=8080/tcp
# 从指定区域删除端口
firewall-cmd --zone=<zone-name> --remove-port=8080/tcp
# 列出区域中的开放端口
firewall-cmd --zone=<zone-name> --list-ports
4. 设置默认区域
# 设置默认区域
firewall-cmd --set-default-zone=<zone-name>
5. 永久生效
要使更改永久生效,请使用 --permanent
选项。例如:
# 永久添加服务
firewall-cmd --zone=<zone-name> --add-service=<service-name> --permanent
# 永久添加端口
firewall-cmd --zone=<zone-name> --add-port=8080/tcp --permanent
# 重新加载防火墙设置
firewall-cmd --reload 可以永久生效
6. 查看所有服务
# 查看所有
firewall-cmd --list-all
注意事项
- 使用
--permanent
选项后,您需要运行firewall-cmd --reload
来应用更改。 - 在进行防火墙配置时,请确保您不会意外阻止 SSH 连接,以免无法访问服务器。
SELinux
美国国家安全局专门开发的安全型Linux内核,用来保护隐私
有三种服务方式:
- enforcing 强制启动安全策略模式,拦截不合法请求
- permissive 服务越权访问,只警告,不禁止
- disabled 就是关闭了
我们需要使用vim打开etc下面的selinux,修改里面的config文件
在参数SELINUX后面写上面这三种服务模式