Linux基础
Linux基础
什么是Linux?
Linux它是一款基于C语言开发的操作系统内核;其主流发行版有Ubuntu、RedHat、Debain、RockyLinux,
这些发行版基于Linux系统内核构建成不同的操作系统版本,Linux系统一般作为服务器操作系统使用。
特点:支持多用户、多任务、多线程,稳定性、安全性和自由度高。
目录结构
在Linux系统下万物皆是文件,使用Linux几乎都是在根文件打交道。
1 | /:根目录,所有目录和文件的起点 |
系统常用命令
1 | #查看Linux发行版本 |
vim
什么是vim?
vim它是一款功能强大、跨平台的文本编辑器。
vim的三种模式
普通模式:默认模式,从其它模式切换按Esc键,用来执行命令
插入模式:按 i 进入插入模式,可以对文件编辑
命令行模式:在普通模式按 : 冒号进入,用来执行保存、退出、搜索、等操作
安装
1 | yum -y install vim |
快捷键
快捷键 | 作用 |
---|---|
yy | 拷贝当前行,5yy向下拷贝5行,按p粘贴 |
dd | 删除当前行,5dd向下删除5行 |
/关键字 | 根据关键字在文件中查找内容,回车查找,n查找下一个 |
set nu | 显示行号 |
set nonu | 不显示行号 |
shift+g | 跳转文件最末尾处,按56接着按shift+g可以快速跳转56行 |
gg | 跳转文件首行 |
u | 撤销上一次输入动作 |
忘记root密码
1、在开机动画页面按e
2、找到以linux16开头的段落,在末尾的UTF-8后面加上init=/bin/sh,再按ctrl+x键进入单用户模式
3、进入单用户名模式后输入,mount -o remount,rw / 回车
4、再次输入passwd后回车,输入第一次新密码后回车,再次输入新密码确定
5、再次输入touch /.autorelabel回车
6、最后输入exec /sbin/init回车,系统重启输入新密码即可
文件目录管理
1 | 以 d 开头的是目录 |
文件目录常用命令
命令 | 作用 | 语法 |
---|---|---|
pwd | 显示当前所在工作目录绝对路径 | pwd |
ll | 以列表形式查看当前目录内容信息 | ll |
ls -a | 查看当前目录所有内容信息,包括隐藏文件 | ls -a |
tree | 以树状显示目录结构 | tree [目录名称] |
cd | 目录之间切换 | cd [目录路径] |
mkdir | 创建目录,加 -p 可以创建多级目录 | mkdir [目录名称] |
rmdir | 删除空目录 | rmdir [目录名称] |
rm | 删除指令,-r 递归删除,-f 强制删除不提醒 | rm -rf [目录或文件名称] |
touch | 创建空文件 | touch [文件名] |
cp | 拷贝文件或目录,加 -r 可以递归拷贝 | cp [源文件] [目标路径] |
mv | 重命名或移动文件或目录 | mv [源目录或文件] [目标路径] |
cat | 查看文件内容,加 -n 可以显示行号 | cat -n [文件名] |
less | 分页查看文件内容 | less [文件名] |
echo | 输出内容到控制台 | echo [输出内容] |
head | 显示文件开头部分内容,加 -n 数字 可以指定显示几行 | head [文件名] |
tail | 显示文件末尾部分内容,加 -n 数字 可以指定显示几行 | tail [文件名] |
tail -f | 实时最终文件更新内容 | tail -f |
> | 输出重定向,会覆盖原有内容 | |
>> | 输出追加 | |
ln -s | 软链接,相当于创建一个快捷方式 | ln -s [源文件或目录] [软链接名] |
history | 查看历史命令,!编号 可以执行指定编号的历史命令 | history |
du -h 路径 | 查看指定路径目录大小,不加路径查看所在目录 | du -h 路径 |
ll -h 路径 | 查看指定路径文件大小,不加路径查看所在文件 | ll -h 路径 |
用户管理
用户管理常用命令
命令 | 作用 | 语法 |
---|---|---|
useradd | 添加用户 | useradd [用户名] |
passwd | 修改密码 | passwd [用户名] |
userdel | 删除用户,加 -r 连同家目录一起删除 | userdel [用户名] |
id | 查看用户信息 | id [用户名] |
su | 切换用户 | su [用户名] |
who am i | 查看当前用户登录信息 | who am i |
usermod -l | 修改用户名,不会自动更改用户的家目录名 | usermod -l [新用户名] [旧用户名] |
usermod -d -m | 修改用户名后,将旧家目录移动到新家目录 | usermod -d /home/[新用户名] -m [新用户名] |
用户组管理
用户组管理常用命令
命令 | 作用 | 语法 |
---|---|---|
groupadd | 新增组 | groupadd [组名] |
groupdel | 删除组,组下有成员则不能删除 | groupdel [组名] |
usermod -aG | 追加用户到,不离开原有组 | usermod -aG [组名] [用户名] |
gpasswd -a | 添加用户进组,推荐使用 | gpasswd -a [用户名] [组名] |
gpasswd -d | 将用户移出组,推荐使用 | gpasswd -d [用户名] [组名] |
groupmod -n | 修改组名 | groupmod -n [新组名] [旧组名] |
groupmod -g | 修改组GID数字表示 | groupmod -g [新GID] [组名] |
groups | 查看用户所属的组 | groups [用户名] |
搜索查找命令
在Linux中一般使用find命令在进行查找操作。
**语法:**find <搜索范围> <选项>
选项:-name按文件名查找;-user按用户名查找;-size按大小查找
压缩解压命令
第一种zip和uzip
需要安装
1 | yum install -y zip |
**zip压缩语法:**zip [选项] 压缩包名称.zip 要压缩的文件或目录
常用选项
-r:递归压缩子目录
-q:不显示压缩过程
-e:加密压缩,设置密码
**uzip解压语法:**uzip [选项] 压缩包名称.zip
常用选项
-d:指定解压目录
-l:查看压缩包内容不解压
-o:强制覆盖已存在的文件
-q:不显示解压过程
-P:直接提供密码,不推荐,推荐进行交互
第二种tar命令
压缩:tar -zcvf 压缩包名称.tar.gz 要压缩的文件或目录
解压:tar -zxvf 压缩包名称.tar.gz
常用选项
-c:创建归档文件
-v:显示详细信息
-f:指定压缩后的文件名,必须放在最后
-z:打包同时压缩
-x:解包.tar
-C:指定解压或压缩后存放目录
文件权限管理
1 | #权限 |
常用命令
1 | #数字形式语法 |
任务调度
设置系统在指定时间执行指定命令或程序
第一种:crontab命令,到了指定时间会执行
语法:crontab [选项]
常用选项
1 | -e:编辑定时任务 |
定时任务时间规则
1 | #符号代表的意思 |
crontab定时任务例子
要求:编写脚本打印当前时间后追加到指定文件内
1、编写shlle脚本
1 | vim my.sh |
2、设置执行权限
1 | chmod u+x my.sh |
3、编辑定时任务
1 | crontab -e |
4、查看定时任务
1 | crontab -l |
5、等待时间到执行后查看
1 | cat crontab.log |
第二种:at命令
at定时任务只会执行一次,且需要atd守护进程每60秒检查作业队列,有作业时检查作业运行时间,当指定时间与当前时间匹配后会执行at定时任务;
编辑at定时任务会进入交互模式,按 Ctrl+d 才可以保存退出交互模式
查看atd守护进程是否运行
1 | ps -ef | grep atd |
安装启动atd守护进程
1 | yum -y install at |
at定时任务时间规则
1 | 完整时间:mm:ss YY-MM-DD |
at定时任务实例
要求:在当前时间两分钟后执行查看指定文件命令
磁盘操作
在Linux下一切皆为文件,所以磁盘表达的方式和windows有所不同,在Linux一块磁盘可以分为多个分区,分出来的子分区通过mount命令挂载到某个指定目录,让子分区和目录产生关联,访问目录就是访问该分区。
查看磁盘情况
1 | #查看挂载情况 |
fdisk命令操作磁盘
1、分区
1 | fdisk /dev/sd? #?代表具体是哪块硬盘,例如sda,sdb.... |
2、格式化
1 | mkfs -t ext4 /dev/sd?? #ext4表示分区的类型 |
3、临时挂载
1 | mount /dev/sd?? [挂载目录] |
4、卸载分区
1 | umount /dev/sd?? 或者 umount [挂载目录] |
5、删除分区
1 | parted /dev/sd? rm 分区号 |
parted命令操作磁盘(推荐使用)
MBR与GPT:它们都是分区时所要选的分区格式
MBR:老式的分区表类型,支持最大容量为2TB,最多支持4个分区,引导记录存储在第一个扇区,不推荐。
GPT:新型分区表类型,支持大于2TB的硬盘,分区数量几乎不受限制,采用全新结构,更安全、快速,推荐使用。
查看磁盘分区表情况
1 | parted /dev/sd? print |
创建分区表
1 | parted /dev/sd? mklabel gpt |
注意:这条命令会格式化清楚指定磁盘上的所有数据!!!
创建子分区
1 | #语法:parted /dev/sd? mkpart 分区类型 文件类型 容量启示位置 容量结束位置 |
修改子分区容量大小
注意:尽量是由小改到大,避免大改小,大改小数据可能会丢失!!!
1 | #语法:parted /dev/sd? resizepart 分区号 新的结束位置 |
临时挂载
1 | mount /dev/sd?? 挂载目录路径 |
永久挂载,fdisk命令通用
1 | #编辑/etc/fstab文件 |
立即生效
1 | mount -a |
卸载分区命令
1 | umount /dev/sd?? 或者 umonut 挂载目录路径 |
删除分区命令
1 | parted /dev/sd? rm 分区号 |
主机名Hosts映射
应用场景:当需要通过ping主机名的方式测试网络是否互通时,可以通过编辑Hosts文件来记录IP和主机名的映射关系,ping 主机名就等同于ping IP。
查看主机名
1 | hostname |
修改主机名
1 | #第一种方式 |
配置主机名与IP映射关系
1 | #编辑hosts文件 |
**知识扩展:**这里用到了DNS技术,DNS中文意思是域名系统,是互联网上作为域名和IP地址相互映射的一个分布式数据库;例如现实生活中的信息数据库,记录人的名字和身份证号。
DNS技术简单解析
案例:用户在浏览器输入www.baidu.com
首先请求会在浏览器缓存中去找该域名的解析IP地址,找到就调用;
没有找到则会进入本地的DNS缓存找,找到就调用;
没有找到则会进入本机的hosts文件里找,找到就调用;
没有找到则会去配置的DNS服务器里找,找到就调用,没有找到则返回该域名无效。
进程管理
在Linux中每一个执行的程序都称为一个进程,每一个进程都会分配一个ID号,也叫pid进程号;
每个进程都可能以两种方式存在,前台和后台,前台进程运行时通常都会占据屏幕可以进行交互;
后台进程则不会占据屏幕,但它已经开始工作了,例如 MySQL Tomcat,一般系统的服务都是以后天的方式存在且会常驻在系统中,直到关机才结束。
程序和进程的关系
程序是指没有通过命令运行加载进内存的源代码文件,静态的;
进程是指程序通过命令运行加载进内存开始工作后,动态的。
查看进程
1 | #查看当前终端的所有进程信息,不会显示父进程的ID |
进程参数解析
参数 | 解释 |
---|---|
USER | 进程执行用户 |
PID | 进程号 |
PPID | 父进程号 |
%CPU | CPU使用占比 |
%MEM | 物理内存使用占比 |
VSZ | 虚拟内存大小(KB) |
RSS | 物理内存大小(KB) |
TTY | 终端 |
STAT | 运行状态 |
TIME | 占用CPU时间 |
CMMAND | 进程名,执行该进程的指令 |
**运行状态分类:**s 表示休眠,r 表示运行中,d 表示短期等待,z表示僵死(进程死了内存还没释放,需要手动释放),t 表示被跟踪或被停止。
终止进程
1 | #只终止本进程,-9选项表示强制执行 |
服务管理
1 | #启动 |
防火墙管理
在个人学习中可以随意关闭防火墙,在工作环境中禁止关闭防火墙!!!
防火墙常用命令
1 | #查看已放行的端口 |
动态监控
动态监控使用 top 命令来执行,top与ps命令很相似都是用来显示正在执行的进程,它们两个最大的不同就是top命令在执行一段时间可以更新正在运行的进程。
语法格式
1 | top [选项] |
交互操作指令
1 | P:以CPI使用率排序 |
网络监控
在Linux中使用netstat和ss命令来监控网络状态,netstat命令已经逐渐被淘汰,现在推荐是ss命令。
语法格式
1 | ss [选项] |
输出参数解析
1 | Netid:协议类型 |
软件包管理
RockyLinux中使用npm命令和dnf命令来管理软件包,用于查看、下载、安装、卸载软件包等操作。
使用npm管理软件包
安装
1 | sudo yum -y install nodejs npm |
常用命令
命令 | 含有 |
---|---|
npm -qa | 查看所有已安装的软件包 |
npm -qa | more | 分页查看 |
npm -qa | grep 包名 | 查看指定软件包 |
npm -q 包名 | 查看是否安装 |
npm -qi 包名 | 查看软件包信息 |
npm -ql 包名 | 查看属于软件包的所有文件 |
npm -qf 文件全路径 | 查看指定文件属于哪个软件包 |
npm -ivh 软件包全路径 | 安装软件包 |
npm -e 包名称(加–nodeps强制删除) | 卸载软件包 |
使用dnf管理软件包
dnf会一次性安装软件包以及软件包所需要的依赖。
常用命令
命令 | 作用 |
---|---|
dnf -y install 软件包名 | 安装 |
dnf remove 软件包名 | 卸载 |
dnf autoremove | 卸载无用软件包名 |
dnf search 关键词 | 搜索软件包名 |
dnf list | 列出所有可用软件包 |
dnf list installed | 列出已安装的软件包 |
dnf updates | 列出可更新的软件包 |
dnf info 软件包名 | 查看软件包信息 |
dnf update | 更新所有可升级的软件包 |
dnf update 软件包名 | 更新指定软件包 |
dnf check-update | 检查可更新的软件包 |
dnf clean all | 清楚缓存 |
dnf makeche | 重建缓存 |
dnf repolist | 列出可用仓库 |
dnf repolist all | 列出所有仓库 |
日志管理
在Linux下使用rsyslogd服务来管理日志文件,它是一个后台服务。
常用命令
1 | #查看是否启动 |
编辑日志文件时的格式
1 | #格式 |
类型解析
类型 | 含义 |
---|---|
auth | pam产生的日志 |
authpriv | ssh、ftp等登陆信息的验证信息 |
corn | 时间任务相关 |
kern | 内核相关 |
lpr | 打印相关 |
邮件相关 | |
mark(syslog)-rsyslog | 服务内部信息 |
news | 新闻组 |
user | 用户程序产生的相关信息 |
uucp | 主机之间相关的通信信息 |
local 1-7 | 自定义的日志设备 |
级别解析
注意:从上到下,级别从低到高,记录信息越来越少!!!
级别 | 含义 |
---|---|
debug | 调试、通信 |
info | 一般信息,最常用 |
notice | 具有重要性的普通条件 |
warrning | 警告 |
err | 错误 |
crit | 严重 |
alert | 需要立刻修改 |
emerg | 内核崩溃 |
none | 什么都不记录 |
怎么看日志文件
日志文件的格式包含以下4列
1、事件产生的时间
2、产生事件的服务器主机名
3、产生时间的服务名或程序名
4、事件的具体信息
自定义日志
通过编辑/etc/rsyslog.conf文件来完成;
修改后重启才能生效!!!
1 | vim /etc/rsyslog.conf |
日志轮替
日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除。
使用logrotate进程日志轮替管理,/etc/logrotate.cong作为全局日志轮替规则配置文件 , 也可以给单独某个日志文件指定策略
当进行轮替时初始日志文件会改名成 原文件名1 , 然后会使用旧文件名新建一个空的日志文件 , 依次类推
全局规则配置文件参数解析
参数 | 含义 |
---|---|
weekly | 每周轮替一次 |
rotate 数字 | 按数字保存几份 |
create | 创建新空的日志文件 |
dateeext | 使用日期作为日志轮替文件的后缀 |
自定义日志加入日志轮替
所有自定义日志规则全部放在/etc/logrtate.d目录下,此目录下的所有文件都会被加载进全局规则配置文件中
日志轮替的参数说明
参数 | 含义 |
---|---|
daily | 每天一换 |
weejly | 每周一换 |
monthly | 每月一换 |
rotate 数字 | 按数字保存几份 |
compress | 轮替时,旧的会被压缩 |
create mode owner group | 新建日志文件,同时指定权限\所有者\所属组 |
mail address | 轮替时,输出内容到指定邮件地址 |
missingok | 日志不存在时忽略警告信息 |
notifempty | 日志文件为空,不轮换 |
minsize | 轮替最小值才会替换 |
size | 指定大小,忽略时间限制 |
dateext | 使用日期作为日志轮替文件的后缀 |
sharedscripts | 在此关键字后执行一次脚本 |
prerotate/endscript | 在轮替前或者后执行脚本 |
内存日志
内存日志一旦重启即可清空;
内存日志使用journalctl来操作;
常用命令
1 | #查看全部 |
备份与恢复
实体机是无法做快照的,如果系统出现异常或数据损坏,后果很严重,这时需要备份和恢复。
在linux中使用dump命令来进行备份
安装
1 | dnf -y instal dump |
dump基本介绍
dump支持分卷和增量备份,增量备份的意思是指备份上次备份后所增加的文件或修改的文件,不会把备份过的再备份一次;
分区才支持增量备份,文件和目录不支持增量备份!!!
语法
1 | dump [选项] [目录或文件] |
选项
1 | -c:创建新的归档文件,c是具体的数字层级0-9 |
在linux中使用restoer来恢复已备份的文件
安装
1 | dnf -y install restoer |
语法格式
1 | restore [模式选项] [选项] |
模式选项,不能混用,一次命令只能用一种
1 | -C:使用对比模式,已备份文件和未备份的文件对比 |
选项
1 | -f:从指定的文件中读取备份数据,进行恢复操作 |