韩顺平2021Linux课程,视频地址:【小白入门 通俗易懂】2021韩顺平 一周学会Linux_哔哩哔哩_bilibili
文章目录
Linux 基础知识
目录结构(一切皆为文件)
常用:
/bin (/usr /bin,/usr/local/bin) :存放常用命令。
/home :存放普通用户的主目录。
/root :系统管理员主目录。
/etc :所有系统管理所需要的配置文件和子目录,比如mysql中的my.conf。
/usr :用户应用程序都放在该目录,类似windows中的program files。
/boot :存放启动linux时使用的一些核心文件,包括一些连接文件以及镜像文件 [勿动]。
/media :linux会自动识别一些设备,例如U盘,识别后,将识别的设备挂载到该目录。
/mnt :系统提供该目录是为了让用户临时挂载别的文件系统,可以把外部的存储挂载在/mnt/上,然后进入该目录查看内容,如虚拟机与主机共享的文件夹。
/usr/local:用户级的程序目录,可以理解为C:/Progrem Files/。用户自己编译的软件默认会安装到这个目录下。
/usr/src:系统级的源码目录。
/usr/local/src:用户级的源码目录。
/var :存放不断扩充修改的文件,包括各种日志文件。
了解:
/opt :给主机额外安装软件所摆放的目录,如安装oracle数据库就可放到该目录,默认为空。可以理解为D:/Software,opt有可选的意思,当你不需要时,直接rm -rf掉即可。在硬盘容量不够时,也可将/opt单独挂载到其他磁盘上使用。
/dev :类似windows的设备管理器,把所有硬件用文件的形式存储。
/lib :系统开机所需要最基本的动态连接共享库,类似windows里的DLL文件,几乎所有应用程序都需要这些共享库。
/sbin :系统管理员使用的系统管理程序。
/lost+found :一般是空目录,当系统非法关机后就存放一些文件。
/proc :虚拟目录,系统内存的映射,访问该目录来获取系统信息[勿动]。
/srv (service缩写) :存放一些服务启动之后需要提取的数据[勿动]。
/sys :存放文件系统sysfs [勿动]。
/tmp :存放临时文件 。
/selinux :一种安全子系统,控制程序只能访问特定文件,有三种工作模式。
vim的使用
打开: vim/vi 文件名
正常模式,可以复制粘贴
复制:yy
(复制当前行),5yy
复制当前行开始向下5行
删除:dd
(删除当前行),5dd
删除当前行开始向下5行
粘贴:p
粘贴
编辑:i/I
进入插入模式
跳转最后一行:G
跳转第一行:gg
跳转到某一行:行数,shift+g
撤销输入:u
恢复撤销: ctrl+r
命令模式:
保存:编辑结束后按Esc退出,按冒号 :或 / 斜杠进入命令模式,输入 wq(保存退出)或q(退出)或 q!(强制退出,不保存)
文字查找:/关键字 按n选中下一个
显示行号: :set nu
不显示行号: :set nonu
关机&重启命令
shutdown -h now
立刻关机
shutdown -h 1
一分钟之后关机
shutdown -r now
重启计算机
halt
关机
reboot
立刻重启
sync
把内存的数据同步到磁盘
tip :目前所有关机&重启命令都已经在关机前进行sync,但仍要小心。
用户管理
切换用户:su - 用户名
/ su 用户名
显示用户信息:id 用户名
注销 :在shell界面中(运行级别为3)输入logout
/exit
,root ——>用户
默认添加(/home):useradd 用户名
指定目录添加:useradd -d /home/目录 用户名
新增用户并分组:useradd -g 用户组 用户名
修改用户分组:usermod -g 新组名 用户名
修改用户分组并更改登录初始目录:usermod -d 目录名 用户名 改变该用户登陆的初始目录
tip:用户需要有进入新目录的权限
将用户添加到某一个组中:usermod -aG 新组名 用户名
修改当前用户密码:passwd
(通用)
修改某一个用户密码:passwd 用户名
删除用户,保留家目录:userdel 用户名
删除用户,不保留主目录:userdel -r 用户名
查看当前登录用户:whoami
/ who am I
(切换用户后仍显示连接时登录的用户)
用户组 group
——类似角色
新增组:groupadd 组名
删除组:groupdel 组名
修改组名:groupmod -n 新组名 原组名
-
没有指定组时(默认生成root用户相同的组)
用户和组相关文件
/etc/passwd
-
用户(user)配置文件,记录用户的各种信息
-
每行的含义:用户名:口令:用户标识号:注释性描述:主目录:登录shell
/etc/shadow
-
口令的配置文件
-
每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
/etc/group
-
组的配置文件,记录Linux包含的组的信息
-
每行含义:组名:口令:组标识号:组内用户列表
指定运行级别
-
指定运行级别(7个级别)
-
关机,系统停机状态,默认运行级别不能设置为0,否则不能正常启动
-
单用户【找回丢失密码】,root权限,用于系统维护,禁止远程登录
-
多用户状态没有网络服务(NFS),不支持网络
-
完全的多用户状态有网络服务,(multi-user.target)登陆后进入控制台命令行模式
-
系统未使用保留给用户
-
X11控制台,图形界面(终端界面,shell界面),(graphical.target)登录后进入GUI模式
-
系统正常关闭并重启,默认运行级别不能设置为6,否则不能正常启动
-
-
系统的运行级别配置文件:/etc/inittab
-
切换到指定运行级别的指令:init [012356]
获取当前运行级别:systemctl get-default
设置运行级别:systemctl set-default 级别名称
帮助指令
-
man [命令或配置文件]
(功能描述:获得帮助信息) -
help 命令
(功能描述:获得shell内置命令的帮助信息)
文件目录类
-
pwd
(功能描述:显示当前工作目录的绝对路径) -
ls [选项] [目录或是文件]
-a : 显示当前目录所有的文件和目录,包括隐藏的
-l : 以列表的方式显示信息
-
ls -l
命令,输出文件/目录的 10 位基本信息字符串 (0 - 9 位)#其中第 0 位为此文件/目录的文件类型 #d / l / c / b --> 目录(文件夹) / 链接 (快捷方式) / 字符设备 (键盘、鼠标等) / 块设备 (硬盘等)
-
lsattr -a
命令,同样查看输出字符串的第 0 位,规则同 ls -l 指令的输出
-
-
ll
以列表的方式显示信息,包括隐藏文件 -
cd [参数]
(功能描述:切换到指定的目录)cd ~ 或者cd 回到自己的家目录
cd .. 回到当前目录的上一级目录
-
mkdir [选项] 目录名称
-p:创建多级目录。
mkdir -pv /home/{*.txt,*.sql}
:创建多个目录或文件mkdir -pv /home/fd /home/df
:创建多个目录 -
rmdir 目录名称
:删除空目录。 -
touch 文件名称
(功能描述:创建空文件。可以一次性创建多个文件) -
cp [选项] 资源路径 目标目录路径/
:拷贝文件到指定目录;-r:递归复制整个文件夹。
强制覆盖不提示的方法:cp命令改为\cp
-
rm [选项] 资源名称
:移除文件或目录;rm -rf 目录名称(可删除非空目录)-r:递归删除整个文件夹;
-f:强制删除不提示。
-
mv:移动文件与目录或重命名
mv oldfilename newfilename
(功能描述:同目录下为重命名)mv pig.txt ca.txt
mv 源资源路径 目标资源目录
(功能描述:不同目录下为移动文件)mv /home/pig.txt /root/
(只移动文件)mv /home/pig.txt /root/ca.txt
(移动文件并改名)mv /home/ca.txt /home/
(移动整个目录) -
cat [选项] 要查看的文件
-n :显示行号
使用细节:cat只能浏览文件,而不能修改文件,为了浏览方便,一般会带上管道命令 | more
cat -n /etc/profile | more
-
more
指令是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more指令中内置了若干快捷键(交互的指令)
操作 | 功能说明 |
---|---|
空白键(Space) | 向下翻一页 |
Enter | 向下翻一行 |
q | 立刻离开more,不再显示该文件内容 |
Ctrl + F | 向下滚动一屏 |
Ctrl + B | 返回上一屏 |
= | 输出当前行的行号 |
:f | 输出文件名和当前行的行号 |
-
less
指令用于分屏插卡文件内容,它的功能与more
指令类似,但是比more
指令更强大,支持各种显示终端。less
指令在显示文件内容时,会根据显示需要加载内容,对于大型文件阅览具有较高的效率。
操作 | 功能说明 |
---|---|
空格: | 下一页 |
pagedown: | 同上,下一页 |
pageup: | 上一页 |
/XXX: | 向下搜寻字符XXX,n=向下查找,N=向上查找 |
?XXX: | 向上搜寻字符XXX,n=向上查找,N=向下查找 |
q: | 退出 |
-
echo [选项] [要输出的内容]
输出内容到控制台echo $HOSTNAME
/echo "helloword"
使用细节:要输出的内容可以是其他指令的执行结果,
echo
指令可配合其他指令使用 -
head [选项] [要输出的内容]
默认显示文件头10行的内容显示文件的开头部分。-n 5:看前面5行内容。
-
tail [选项] [要输出的内容]
默认显示文件中尾10行的内容-n 5 :看后面5行内容。
-f :实时追踪该文档的所有更新。
-
>
/>>
输出重定向:覆写/追加,没有该文件则会创建指令
>
指令执行结果覆盖到的文件 指令>>
指令执行结果追加到文件ls -l > AAA
将当前工作目录下的文件列表覆盖写入 AAA 文件中ls -al >> AAA
将当前工作目录下的所有文件列表追加到 AAA 文件的末尾cat 文件1 > 文件2
将 文件1 的内容覆盖写入 文件2 中echo 内容 >> 文件
-
ln -s
创建软连接也称为符号链接(类似快捷方式)ln -s [原文件/目录路径] [软链接名]
在当前工作目录下创建软链接ln -s [原文件/目录路径] [指定目录+软链接名]
在指定目录下创建软链接tip :
pwd
指令显示的路径为软链接所在路径 -
history
指令历史记录 -
显示所有的历史命令
history
-
显示最近 10 条历史指令
history 10
-
执行历史编号为 5 的指令
!5
-
wc
计数指令wc [参数] [文件]
-l
line:计算行数-c
计算字节数-m
计算字符数-w
计算单词数tip:若不加文件,则通常使用管道分隔符
|
,计算其他指令输出的计数计算 ls -l 输出中,以“d”开头的记录条数:
ls -l /opt/ | grep "d" | wc -l
时间日期类
-
date 显示当前时间
date
显示当前时间date +%Y
显示当前年份data +%m
显示当前月份date +%d
显示当前日date "+%Y-%m-%d %H:%M:%S"
显示”年-月-日 时:分:秒“date -R
显示UTC标准时间格式date +%c
根据当前时区地区设置显示的完整时间(中国显示:XX年XX月XX日 星期X XX时XX分XX秒)date +%D
显示“年/月/日”date +%T
显示“时:分:秒” -
date -s 设置当前日期
date -s 时间字符串
-
时间字符串格式 a.
Sun, 29 Feb 2004 16:21:42 -0800
b.2004-02-29 16:21:42
c.next Thursday
-
时间字符串要加双引号 “ ”
-
-
cal 显示日历
cal [选项] [日 月 年]
cal 2022
搜索查找类
-
find
指令将从指定目录下递归的便利各个子目录,将满足条件的文件或者目录显示在终端find [搜索范围] [选项]
find -name 名称表达式查找内容
名称表达式:-
可用通配符:*
-
可用正则表达式
使用正则表达式时,单独使用 -regex 参数,不加 -name/uer/size等单数) 可有多个表达式,并用逻辑运算符连接(-and/-or/-not)
find -user 用户名文件所有者
find -size 大小表达式文件大小
-
+aG大小大于a GB
-
-bM大小小于b MB
-
cK大小等于c KB
-
-
locate 根据索引快速检索文件
locate
指令可以快速定位文件路径locate
指令利用事先创建的文件和目录索引数据库实现文件快速搜索。locate
指令无需遍历查找文件,只需要查询索引数据库,因此速度较快。 但为保证查询结果的准确度,管理员必须要定期更新 locat数据库。locate 文件名
tip在第一次运行locate指令前,需要使用updatedb指令创建locate索引数据库
-
grep:过滤查找,表示将前一个命令的处理结果输出传递给后面的命令处理。经常跟管道一起使用。
-
grep [选项] 查找内容 源文件
-
-n
:显示匹配行及行号。 -
-i
:忽略大小写字母。 -
-v
:只选中不匹配的行 -
cat hello.txt | grep "yes"
-
-
which 查看指令所在目录
which +指令名
压缩和解压缩
-
gzip
/gunzip
指令gzip +文件名
功能描述:压缩文件,智能将文件压缩为 *.gz 文件gunzip +文件名
功能描述:解压缩.gz压缩文件 -
zip
/unzip
指令 -
zip用于压缩文件为zip 格式,unzip 用于将zip格式文件解压 压缩zip文件和目录:
zip [选项] XXX.zip 要压缩的文件/目录
解压缩zip文件:unzip [选项] XXX.zip
zip常用选项-
-r 递归压缩,用于压缩整个目录
unzip常用选项
-
-d [目录] :解压到指定目录
-
-
tar 指令 打包指令,打包后的文件是.tar.gz的文件
tar [选项] +要打包的文件/目录(可有多个文件/目录)
选项 | 功能 |
---|---|
-c | 产生.tar打包文件 |
-v | 显示详细信息 |
-f | 指定压缩后的文件名 |
-z | 打包同时压缩 |
-x | 解包.tar文件 |
tar -zcvf pc.tar.gz /home/pig.txt /home/cat.txt
tar -zxvf myhome.tar.gz /opt/tmp2/
组权限和权限管理
linux中的每个用户,必须属于一个组,不能独立于组外。 linux中的每个文件/目录,都有且仅有一个所有者。
-
在liunx中有 所有者、所在组、其他组 等概念
-
所有者:文件/目录的所有者,一般来说文件/目录由谁创建则所有者就是谁,可以修改。
-
所在组:用于多个相同权限用户的管理,用户必须属于至少一个组,一个用户可以属于多个组,一个组可以包含多个用户。
-
其他组:对一个文件而言,除了所有者所属用户组以外的其他用户组,成为其他组,其他组对此文件也可设定一定权限。
-
-
ll
查看文件的所有者ls -alh
列表显示、显示所有文件、按常见单位显示 列表显示的内容(从左往右):权限、包含的文件/目录总数、所有者、所在组、文件大小(字节)、修改时间、名称
修改所有者和所在组
-
chown 修改文件/目录的所有者/所在组
chown [选项] 新用户名:新用户组 文件名/目录名
chown 新用户名 文件名/目录名
将文件/目录所有者修改为对应用户,所在组不变chown :新用户组 文件名/目录名
将文件/目录所在组更改,所有者不变chown 新用户名AAA:新组名BBB 文件名/目录名
将文件/目录所有者/所在组 修改为 AAA/BBB-R
修改目录及其子文件、子目录的所有者和所在组-h
修改子文件中的软链接,而不是修改软链接指向的文件-v
显示详细操作 -
chgrp修改文件/目录所在组
chgrp [参数] 新组名 文件/目录名
-R
修改此目录下所有子目录/子文件的所在组-h
修改此目录下软链接的所在组,而不是修改软链接指向的文件的所在组
权限介绍
权限示例:drwxr-xr-x 2 hcx hcx 4096 7月 1 22:18 Videos/
前边包含 r/w/x/- 等字符的部分,有 10 位。为文件类型、对应文件/目录的权限。
-
第 0 位:文件类型(d, -, l, c, b) d:目录(directory,即文件夹) -:普通文件 l:链接(link,即快捷方式) c:字符设备(character devices),如鼠标、键盘 b:块设备(block devices),如硬盘等
-
第 1-3 位:所有者(Owner)的权限
-
第 4-6 位:所在组(Group)的权限
-
第 7-9 位:其他组(Other)的权限
权限介绍(rwx的含义)
-
对文件的 rwx
r
:可读(read)——可以读取、查看文件内容w
:可写(write)——可以修改,只有同时对文件所在目录具备写权限才能删除文件。x
:可执行(execute)——可以执行-
:不具备此权限 -
对目录的 rwx
r
:可读(read)——可以查看此目录包含的内容,可用ls指令w
:可写(write)——可以创建,修改,重命名目录,可在此目录内新建、重命名、删除子文件/子目录,但不一定能进入文件或修改文件内容x
:可执行(execute)——可以进入此目录-
:不具备此权限
修改权限
chmod [选项] 权限表达式 文件/目录名
-R
递归的修改权限,同时修改目录、子目录、子文件的权限 -v
权限修改的详细信息
-
字母形式详解 u=rwx,g+rw,o-r u,g,o三者顺序任意,省略不写则权限不变,逗号前后不能有间隔 u = 所有者 (用户,user) 权限,g = 所在组 (组,group) 权限,o = 其他组 (others) 权限 a = 所有组(包括以上全部 3 者)的权限 r,w,x三者顺序任意,省略不写则认为无此权限 r = 可读 (read),w = 可写 (write),x = 可执行 (execute) =,+,-为权限的设置模式
-
数字形式详解
chmod 751 文件/目录名
: 所有者:7 = 111 = rwx,所在组:5 = 101 = r-x,其他组:1= 001= --x3 位 10 进制数字,分别表示:所有者、所在组、其他组的权限
crond任务调度
crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。Linux下的任务调度分为两类,系统任务调度和用户任务调度。
-
任务调度:系统定时、按照一定周期或规则,执行特定的命令或程序
-
任务调度分类:
-
系统任务:某些重要的任务需要周而复始的执行,如病毒扫描等
-
个别用户任务:个别用户希望执行的任务,如对 mysql 数据库的备份
-
crontab定时任务(周期性)
crontab [选项]
-e
编辑 crontab 定时任务 -l
查询 crontab 任务/列出当前有那些任务调度 -r
删除当前用户所有的 crontab 任务/终止任务调度 service crond restart
重启任务调度
-
示例
设置任务调度文件:/etc/crontab
设置个人任务调度,执行
crontab -e
命令输入任务到调度文件中
如:
*/1 * * * * ls -l /etc/ > /tmp/to.txt
(每小时每分钟执行该命令) -
参数说明
项目 | 含义 | 范围 |
---|---|---|
第一个“*” | 一小时当中的第几分钟 | 0-59 |
第二个“*” | 一天当中的第几小时 | 0-23 |
第三个“*” | 一个月当中的第几天 | 1-31 |
第四个“*” | 一年当中的第几月 | 1-12 |
第五个“*” | 一周当中的星期几 | 0-7(0和7都代表星期日) |
-
特殊符号说明
-
*
:代表任何时间。比如第一个*
就代表一小时中每分钟都执行一次的意思。 -
,
:代表不连续的时间。比如“0 8,12,16 * * *命令”,就代表在每天的8点0分,12点0分,16点0分都执行一次命令。 -
-
:代表连续的时间范围。比如“0 5 * * 1-6命令”,代表在周一到周六的凌晨5点0分执行命令。 -
/n
:代表每隔多久执行一次。比如“*/10 * * * * 命令”,代表每隔10分钟就执行一遍命令。
-
-
定时Shell脚本举例
vim *.sh
,编辑任务,给*.sh增加执行权限chmod u+x *.sh
,crontab -e
,执行shell脚本
at定时任务(一次性)
-
at命令时一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列并运行
-
默认情况下,atd守护进程每 60 秒检查作业队列。队列有作业时,检查作业运行时间,若计划时间与当前时间匹配,则运行此作业。
-
at定时任务的最小间隔为 1 分钟
-
at命令是一次性定时计划任务,一个作业执行后不再执行该计划 在使用at命令时,一定要保证atd进程启动,可使用相关指令查看
ps -ef | grep atd
(检测atd是否在运行)
at命令格式:at [选项] [时间]
,输入命令,Ctrl+D结束命令
-
守护进程 atd 查看状态
service atd status
systemctl status atd
ps -ef | grep "atd"
ps -aux | grep "atd"
-
守护进程 atd 启动/停止/重启/查看进程状态
service atd start/stop/restart/status
systemctl start/stop/restart/status atd
-
at命令选项
选项 | 含义 |
---|---|
-m | 当指定的任务被完成后,将给用户发送邮件,即使没有标准输出 |
-I | atq 的别名,查看系统中没有执行的工作任务 |
-d | atrm 的别名,删除已经设置的任务 |
-v | 显示任务将被执行的时间 |
-c | 打印任务的内容到标准输出 |
-V | 显示版本信息 |
-q <队列> | 使用指定队列 |
-f <文件> | 从指定文件读入任务而不是从标准输入读入 |
-t <时间参数> | 以时间参数的形式提交要运行的任务 |
-
at时间定义
选项 | 含义 |
---|---|
hh:mm | 小时:分钟,加入该时间已经过去,放在第二天执行,Eg: at 04:00 |
midnight | 晚上12点 |
noon | 中午12点 |
teatime | 下午4点 |
12小时制 | 在时间后加am或pm,Eg: at 05:00 pm,指定日期需要在指定时间后 |
month day | (月 日) |
mm/dd/yy | (月/日/年) |
dd.mm.yy | (日.月.年) |
相对计时法 | now + cout time-units,Eg: now + 5 minutes |
today,tomorrow | 直接指定 |
磁盘分区,挂载
磁盘分区与Linux文件系统
-
Linux 系统中的文件系统的总体结构是一定的:只有一个根目录,根目录下的目录结构独立且唯一(如 /boot、/dev、/bin、/etc 目录等都是唯一的),Linux 中的磁盘分区都是文件系统中的一部分
-
Linux采用”载入“的方法,它的整个文件系统中包含一整套的文件和目录,且将一个分区和一个目录联系起来,此时要载入的一个分区将使它的存储空间在一个目录下获得。
-
任何目录或其父目录都要挂载到硬盘的某个分区下。如需要将某一分区挂载到根目录下,Linux 系统才能正常工作
-
某个分区所挂载的目录,称为此分区的挂载点
-
磁盘的不同分区可以挂载到 Linux 文件系统的不同分区下,但不能同时挂载到一个相同的目录
驱动器标识
在 linux 系统中,会将硬盘和分区进行标识,表达不同分区的功能:
Linux 硬盘有两种:IDE 硬盘 和 SCSI 硬盘(大部分)
-
IDE 硬盘: 驱动器标识为:
hdx~
hd
表示分区所在设备的类型,这里hd
= IDE 硬盘x
为盘号,区分不同硬盘间的功能标识 功能 a 基本盘 b 基本从属盘 c 辅助主盘 d 辅助从属盘 ~
为分区号,区分同一硬盘上不同分区的功能标识 功能 1-4 主分区 或 扩展分区 5开始 逻辑分区 -
SCSI 硬盘: 驱动器标识为:
sdx~
sd
表示分区所在设备的类型,这里sd
= SCSI 硬盘x
为盘号,区分不同硬盘间的功能 (盘号功能标识同 IDE 硬盘)~
为分区号,区分同一硬盘上不同分区的功能 (分区号功能标识同 IDE 硬盘)
查看所有设备挂载情况
lsblk [选项]
-a
查看所有设备(包括空设备) -f
查看文件系统信息 -m
查看设备权限 -t
查看分区详细信息
-
查看基本信息:lsblk 和 lsblk -a
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
字符 | 类型 |
---|---|
NAME | 驱动器标识 |
MAJ | 主-设备号 |
MIN | 次-设备号 |
RM | 可热插拔设备 |
SIZE | 分区/硬盘大小(默认使用易读的格式:K/M/G/T 等) |
RO | 只读设备 |
TYPE | 分区所在的设备类型(同NAME中的类型) |
MOUNTPOINT | 挂载点 |
-
查看 Linux 文件系统信息:lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
字符 | 类型 |
---|---|
NAME | 驱动器标识 |
FSTYPE | 文件系统类型 |
LABLE | 文件系统 LABLE |
UUID | 分区唯一标识符 |
MOUNTPOINT | 挂载点 |
若仅分区,没有格式化,则FSTYPE和UUID均为空白
-
查看分区权限信息:lsblk -m
NAME SIZE OWNER GROUP MODE
字符 | 类型 |
---|---|
NAME | 驱动器标识 |
SIZE | 分区/硬盘大小(默认使用易读的格式:K/M/G/T 等) |
OWNER | 分区所有者 |
GROUP | 分区所在组 |
MODE | 分区权限(英文字符模式,类似ls -l指令的显示样式) |
fdisk MBR-硬盘分区
-
硬件设备路径在
/dev/
目录下。硬盘设备不包含分区号,如sdb
,hda
等 -
虚拟机添加硬盘
-
分区
-
fdisk /dev/sdb
fdisk [选项] 硬盘
-l
list:列出所有硬盘的分区信息 -
fdisk 命令菜单(常用指令)
指令 含义 m 显示 fdisk 命令菜单帮助 p 显示磁盘分区(功能同fdisk -l +硬盘路径 ) n 新增分区 d 删除分区 q 放弃更改并退出 fdisk 指令 w 保存更改并退出 fdisk 指令 -
-
格式化
-
mkfs -t ext4 /dev/sdb1
ext4
为分区类型 -
mkfs [选项] [-t <分区格式>] <设备分区路径>
选项:-v
verbose:显示详情 -
分区格式(文件系统类型)
-
Linux 下的文件系统格式
分区类型 描述 swap 交换文件。用于实现虚拟内存的功能 ext2 具有极快的速度和极小的CPU占用率,可用于硬盘和移动存储设备。默认格式,若不填写分区格式,则格式化为ext2格式 ext3 ext2 格式的升级版。增加日志功能,可回溯追踪 ext4 ext3 格式的升级版。日志式文件系统,支持1EB(1024*1024TB),最大单文件16TB,支持连续写入可减少文件碎片。 xfs 可以管理500T的硬盘。 brtfs 针对固态盘做优化 vfat 即 Windows 系统的 FAT32 格式 -
扩展知识:Windows 下的文件系统格式
标识 描述 FAT16 MS—DOS和win95采用的磁盘分区格式,采用16位的文件分配表,只支持2GB的磁盘分区,最大单文件2GB,且磁盘利用率低 FAT32 采用32位的文件分配表,支持最大分区128GB,最大文件4GB NTFS 支持最大分区2TB,最大文件2TB,安全性和稳定性非常好,不易出现文件碎片
-
-
-
命令行挂载,重启后失效
-
mount /dev/sdb1 /newdisk/
-
mount 硬盘分区 目录
-
卸载:
mount 待卸载的硬盘分区
或mount 待卸载的目录
-
-
设置自动挂载
挂载:将分区与 Linux 系统的文件目录做映射。映射的目录成为此分区的挂载点。
卸载:将分区从挂载点分离,卸载后的分区才能执行重新格式化、重新分区等操作,卸载后的分区可重新挂载到新的挂载点。
-
修改/etc/fstab实现挂载
-
添加后执行
mount -a
即刻生效
-
磁盘情况查询
-
查询系统整体磁盘使用情况:
df -h
-
查询指定目录的磁盘占用情况(默认当前目录):
du [选项] [目录]
-s
summary:只显示目录总的大小-a
all:所有内容的大小 (若不使用这个选项,则只显示子目录的大小,不显示文件的大小)-h
易读的大小单位(K/M/G 等)--max-depth=XX
显示的子目录深度(若不指定,则默认显示所有深度)-c
列出所有子目录大小的同时,也显示目录的总大小
磁盘实用指令
-
统计/home文件夹下文件的个数:
ls -l /home | grep "^-" | wc -l
-
统计/home文件夹下目录的个数:
ls -l /home | grep "^d" | wc -l
-
统计/home文件夹下文件的个数,包括子文件夹里的:
ls -lR /home | grep "^-" | wc -l
-
统计文件夹下目录的个数,包括子文件夹里的:
ls -lR /home | grep "^d" | wc -l
-
以树状显示目录结构:
tree [目录]
网络配置
-
ifconfig
查询网络信息 -
ping [参数] 主机名称/IP地址/主机网址
-c <次数>
count:完成次数。ping 通对应次数后,命令自动退出-I <网络界面名>
interface:网络界面。ping 指令使用的网卡-R
route:输出路由过程-4
ipv4:只使用 ipv4 网络-6
ipv6:只使用 ipv6 网络-
使用网卡 ens33 ,测试 5 次,测试与 192.168.5.20 的连接性
ping -c 5 -I ens33 192.168.5.20
-
指定IP
-
直接修改配置文件来指定IP,Ubuntu20
-
cd /etc/netplan
-
备份旧配置文件内容
-
编辑配置文件 network: version: 2 renderer: NetworkManager ethernets: enp0s5: # 网卡名称 dhcp4: no # 关闭dhcp dhcp6: no addresses: [10.211.55.10/24] # 静态ip gateway4: 10.211.55.1 # 网关 nameservers: addresses: [8.8.8.8, 114.114.114.114] #dns
-
sudo netplan apply
配置生效
-
-
直接修改配置文件来指定IP,并可以连接到外网(程序员推荐)
编辑
vi /etc/sysconfig/network-scripts/ifcfg-ens33
要求:将ip 地址配置的静态的,比如: ip 地址为192.168.200.130ifcfg-ens33 文件说明
DEVICE=eth0 #接口名(设备,网卡) HWADDR=00:0C:2x:6x:0x:xx #MAC 地址 TYPE=Ethernet #网络类型(通常是Ethemet) UUID=926a57ba-92c6-4231-bacb-f27e5e6a9f44 #随机id \#系统启动的时候网络接口是否有效(yes/no) ONBOOT=yes \#IP 的配置方法[none|static|bootp|dhcp](引导时不使用协议|静态分配IP|BOOTP 协议|DHCP 协议) BOOTPROTO=static \#IP 地址 IPADDR=192.168.200.130 \#网关 GATEWAY=192.168.200.2 \#域名解析器 DNS1=192.168.200.2
重启网络服务或者重启系统生效
service network restart 、reboot
-
查看主机名称
hostname
hostname [参数]
-I
显示当前系统的 IP 地址
更改主机名:vim /etc/hostname
,编辑后重启
systemctl 指令来修改主机名:systemctl set-hostname lilixxs-test
设置hosts映射
-
在 Windows 中修改 hosts 映射,可通过
ping +虚拟机主机名
检测与虚拟机的连接 Wnidows 中 hosts 映射文件的地址C:\Windows\System32\drivers\etc\hosts
Windows 中 hosts 映射文件的格式设置 hosts 映射:IP 地址为 192.168.3.20,主机名为 lilixxs-centos
192.168.3.20 lilixxs-centos
-
在 Linux 中修改 hosts 映射,可通过 ping +虚拟机主机名 检测与主机的连接
打开 /etc/hosts 设置 hosts 映射:IP 地址为 192.168.3.30,主机名为 lilixxs-pc
192.168.3.30 lilixxs-pc
可见 Linxu 与 Windows 的 hosts 映射文件格式相同
Windows 系统下,本机 DNS 缓存的查询/清理 查询本机的 DNS 缓存
ipconfig /displaydns
清空本机的 DNS 缓存
ipconfig /flushdns
进程管理
-
基本介绍
-
在 Linux 中,每个执行的程序都成为一个进程,系统对每一个进程都会分配一个 ID 标识号 (PID),用于查找、识别和控制此进程
-
进程有两种存在形式:前台、后台 前台:用户在屏幕上能看到并操作的进程,处于前台模式 后台:进程在运行,但屏幕上不显示的形式
-
服务器的进程/服务,大多都以后台的形式运行(前台程序一般为命令行程序),而且会常驻在系统中(不自动结束进程,保持一直运行)。如 tomcat,nginx,mysql 等程序
-
ps指令
ps
用于查看当前系统、当前时刻,有哪些程序正在执行,以及各个程序的执行状况
-
ps
指令输出的结果,是指令执行瞬间的结果,不能自动刷新 要使用自动刷新的进程查看器,指令为:top
-
ps [参数]
或ps [常见组合]
-
常用参数
参数 意义 -a 显示当前系统有shell控制的进程 -u 显示执行进程的用户信息 -x 显示没有shell控制的进程,通常配合-a参数使用 -e 显示所有进程信息,等同于-A参数 -l 列表形式,显示更详细的信息 -f unix形式,显示所有信息 -p <PID> 显示对应PID的进程 -
常见组合:
指令 意义 ps -ef 按照基本格式,显示系统的所有进程信息 ps -aux 按照 BSD 格式的指令,显示系统的所有进程信息 ps -axjf 按照 BSD 格式的指令,显示系统的所有进程信息和进程数 ps -ejH 按照 Unix 格式的指令,显示系统的所有进程信息和进程数 推荐用 BSD 格式,信息丰富、结果显示易懂
-
BSD 系统格式输出如下
ps aux
: -
USER:启动进程的用户名 PID:进程分配的 ID 标识号,可用于进程搜索、控制 %CPU:此进程当前的 CPU 占用率 %MEM:此进程当前的物理内存占用率 VSZ:此进程占用的虚拟内存大小 RSS:此进程占用的物理内存大小 TTY:由启动此进程的 shell 控制的参数,终端名称 STAT:此进程的状态(英文缩写形式)
-
参数 意义 D 短期等待 uninterruptible sleep (usually IO) R 正在运行 running or runnable (on run queue) S 睡眠 interruptible sleep (waiting for an event to complete) T 停止stopped by job control signal t 调试跟踪时停止stopped by debugger during the tracing s 表示该进程是会话的先导进程 X dead (should never be seen) Z 僵死进程 defunct ("zombie") process, terminated but not reaped by its parent
START:此进程的启动时间,时间格式:月日(MmmDD) TIME:累计占用的 CPU 时间 (仅计算使用CPU时的时间累计,空闲不占用CPU时不算占用时间),时间格式:HH:MM(小时:分) COMMAND:启动进程所用的命令和参数,如果过长会被截断显示
-
-
ps -ef
-
UID:启动进程的用户 ID,对应/etc/passwd文件和id命令中的UID PID:进程分配的 ID 标识号,可用于进程搜索、控制 PPID:父进程的 ID 标识号,与进程数父子进程关系对应 C:此进程当前的 CPU 占用率 STIME:此进程的启动时间,时间格式:月日(MmmDD) TTY:由启动此进程的 shell 控制的参数 TIME:累计占用的 CPU 时间 (仅计算使用CPU时的时间累计,空闲不占用CPU时不算占用时间),时间格式:HH:MM(小时:分) CMD:进程的执行指令 (完整路径 + 参数)
-
kill/kill all终止进程
若某个指令执行中需要人为停止,或处于异常状态占用大量资源,可以考虑终止该进程。
-
kill 通过进程 ID (PID) 终止进程
kill [参数] PID
-
killall 通过进程名 (NAME) 终止进程
killall [参数] 进程名
-
killall 进程名支持通配符
-
killall 指令可将满足条件的所有进程一并终止
-
-
参数
-l 信号,如果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称(如-9) -a 当处理当前进程时,不限制命令名和进程号的对应关系 -p 指定kill 命令只打印相关进程的进程号,而不发送任何信号 -s 指定发送信号 -u 指定用户
-9
:强制终止进程(无视 Linux 系统的保护机制)
-2
:即Ctrl+C结束前台程序的kill命令
默认情况下,如果不指定信号,kill 等价于 kill -15 。 kill -15 执行时,系统向对应的程序发送SIGTERM(15)信号,该信号是可以被执行、阻塞和忽略的,所以应用程序接收到信号后,可以做一些准备工作,再进行程序终止。
-
示例
-
踢掉某个用户
-
ps -aux | grep sshd
,找到该进程的PID(root启动的进程),kill 进程号
-
-
终止sshd服务,在适当时候开启
-
kill 进程号
,打开:/bin/systemctl start sshd.service
-
-
终止多个文本编辑器 gedit,
killall gedit
-
强制终止一个终端,终端 shell 是一种受系统保护的进程,若要强制终止,需要增加参数 -9
-
ps -aux | grep bash
,kill -9 进程号
-
-
-
查看进程树
ptree [参数]
-
-u
user:显示启动进程的用户名-p
pid:显示进程的 ID (PID)
-
服务管理
开机流程
开机——>BIOS——>/boot——>systemd进程1——>运行级别——>运行级别对应服务
-
服务 (Services) 是一种特殊的进程,以后台的形式运行。通常监听某些端口、等待其他程序的请求等。服务是管理进程的特殊进程,因此服务也被称为“守护进程”。 常见的服务如 firewalld Linxu 系统防火墙、mysqld(MySQL 的守护进程)、sshd等
-
服务的命名通常由软件厂商决定。一般来说,“进程名 + d”作为此进程服务(守护进程)的名称。如 MySQL 进程名为 mysql,则其服务(守护进程)名为 mysqld
-
systemctl
命令相对service
命令更加强大,不仅能控制服务,还可修改系统设置、提供高级的控制选项 -
service 服务管理(即将要废除的命令) 基本语法
service 服务名 [操作]
常见操作1:服务的启动/停止/重启/重载/状态查询service 服务名 start/stop/restart/reload/status
常见操作2:查看所有服务状态service --status-all
-
只有部分服务可被service命令管理,可被service命令管理的用户定义的部分服务。 此部分服务所在目录:/etc/init.d/ 系统定义的服务(Systemd 服务)可被service命令管理。 但这里实际是系统智能识别service指令,将其转换为systemctl命令,以保证兼容性 系统服务详见:setup命令 --> 系统服务 setup命令使用 TAB 键进行菜单切换,使用空格键进行选择/取消选择 系统服务所在目录:/usr/lib/systemd/system/
-
reload
与restart
的区别 相同点:都会刷新配置,重新加载配置文件reload
:重新加载配置文件,但服务不会中断。不对已建立连接的服务造成影响,若配置出错,则使用之前的配置。又称为“平滑重启”restart
:重新加载配置文件,服务会有短时的中断。若配置出错,则会导致服务的长时间中断
-
-
chkconfig
服务管理,重启机器后才能生效,可管理服务同service查询 / 设定一个服务在不同运行级别能否启用
查询所有服务的运行级别
chkconfig --list
查询某一服务的运行级别,不知道完整的服务名(需要配合 grep 指令进行筛选)chkconfig --list | grep "服务名"
知道完整的服务名chkconfig 服务名 --list
设置服务在 级别 X 下自动启动/停止chkconfig --level X 服务名 on/off
加入自定义服务 testchkconfig --add test
删除服务 testchkconfig --del test
systemctl管理
systemctl
命令可控制 Linux 系统中的所有服务
-
服务启动/停止/重启/重载/查看状态
systemctl start/stop/restart/reload/status 服务名
-
systemctl
管理的服务在/usr/lib/systemd/system查看 -
查看所有服务的自启动状态
systemctl list-unit-files [|grep 服务名]
服务的状态如下:masked
此服务禁止自启动static
该服务无法自启动,只能作为其他文件的依赖enabled
已配置为自启动disabled
未配置为自启动 -
systemctl is-enabled
服务名,查看某一服务是否自启动。-
使用
systemctl
命令,设置自启动状态,会同时设置服务级别3、5的自启动状态 -
systemctl enable 服务名
(设置服务开机自启动) -
systemctal disable 服务名
(关闭服务开机自启动)
-
-
加入自定义服务 test:
systemctl load test
-
查看服务状态
systemctl status 服务名
-
使用 start/stop 参数,立刻生效,但重启后会根据自启动配置重新停止/启动服务
动作 Systemd 指令(systemctl) SysV Init 指令(service & chkconfig) 启动服务 systemctl start 服务名 service 服务名 start
停止某服务 systemctl stop 服务名 service 服务名 stop
加入自定义服务 systemctl load 服务名 chkconfig --add 服务名
删除服务 删除在systemd目录下的配置文件 chkconfig --del 服务名
查询所有服务的自启动情况(运行级别) systemctl is-enabled 服务名 chkconfig --list | grep 服务名
查询服务是否开机启动 systemctl is-enabled 服务名 chkconfig list-unit-files | grep 服务名
设置服务开机启动(服务级别3、5) systemctl enable 服务名 chkconfig --level 5 服务名 on
chkconfig --level 3 服务名 on
设置服务开机禁用(服务级别3、5) systemctl disable 服务名 chkconfig --level 5 服务off
chkconfig --level 3 服务名 off
防火墙(端口控制)
-
关闭或启用防火墙,立即生效,但只是临时生效,重启系统后,回归默认设置。
-
打开端口/允许协议
firewall-cmd --permanent --add-port=端口号/协议
关闭端口/禁用协议firewall-cmd --permanent --remove-port=端口号/协议
查询端口/协议是否开启firewall-cmd --query-port=端口/协议
查询防火墙所有端口/协议配置firewall-cmd --list-ports
重载防火墙firewall-cmd --reload
也可考虑使用systemctl或service命令重载 firewalld 服务systemctl reload firewalld
或service firewalld reload
-
使用防火墙指令前,需要启用防火墙
systemctl start firewalld
或service firewalld start
为保证防火墙持续工作,应设置防火墙服务为开机自启动systemctl enanble firewalld
或chkconfig --level 3/5 firewalld on
打开、关闭端口的操作需要重载防火墙才能生效 使用 防火墙指令 重载firewall-cmd --reload
permanent参数 表明永久设置。若不使用此参数,则重启后设置将被清除
动态监控进程
top
命令与ps
命令相似。两者都能显示系统中的进程信息。 但top
命令输出的结果一直保持置顶且可以动态刷新。类似于 Windows 系统中的 任务管理器 top [参数]
-d 秒数
delay-time:指定动态刷新的周期秒数。默认为刷新周期=3s -i
:不显示闲置或僵死的进程 -p 进程PID
:指定显示对应进程 ID (PID) 的进程
-
全局选项: h : 界面帮助 Z : 改变配色 B : 标题显示为粗体 E或e : 改变计量单位(KB/MB/GB/PB/EB) d : 设置自动刷新时间 (同top -d命令) q : 退出 top 界面
-
汇总显示: l : 平均负载 t : CPU总占用率 m :内存总信息 分项调整 : F或f进入 空格 : 选中/不选中 <–> 显示/不显示 左右 : 显示设定 <–> 排序设定 q : 保存并退出
-
排序 P : 以 CPU 占用率排序。这是显示的默认排序选项 M : 以内存占用率排序 N : 以进程 ID (PID) 排序 R : 改变升序/倒序
-
进程控制 k kill:终止进程 (要指定 PID 和信号量,强制结束的信号量 = 9) u user:监控特定用户的进程 (要指定用户名)
监控网络状态
netstat [参数]
-
常用参数
-a
all:显示所有端口 (默认只显示已连接的端口)-n
numeric:不解析端口号 (直接输出端口号结果,默认输出端口对应的进程)-p
显示端口与进程调用 (PID) 的关系 -
常用组合:
-an
输出所有端口号信息-ap
输出所有端口与 PID 间的信息 -
内容解析
-
Proto protocol:协议,常见的如 tcp、udp 等 Recv-Q 网络接收队列。表示收到的数据已经在本地接收缓冲,但是还有多少没有被进程取走。若接收队列一直处于阻塞状态,可能是遭受了拒绝服务攻击,或系统响应进程出现问题、系统负载过大。 Send-Q 网络发送队列。对方没有收到的数据 或 还没有返回 Ack 确认的数据。如果发送队列不能很快的清零,可能是有应用向外发送数据包过快,或者是对方接收数据包不够快。 Local Address 本机地址。格式:IP地址/主机名:端口/使用此连接的进程名 Foreign Address 外部地址。格式:IP地址/主机名:端口/使用此连接的进程名 PID 进程 ID。仅在-p选项时输出 State 状态。共有12种可能,对应 TCP/IP 协议
STATE 状态 LISTEN 正在侦听来自远方的连接请求 SYN_SENT 在发送连接请求后等待匹配的连接请求 SYN_RECV 在收到和发送一个连接请求后等待对连接请求的确认 ESTABLISHED 连接已建立,数据可以传送给用户 FIN_WAIT1 等待远程TCP的连接中断请求,或先前的连接中断请求的确认 CLOSE_WAIT 等待从本地用户发来的连接中断请求 FIN_WAIT2 从远程TCP等待连接中断请求 LAST_ACK 等待原来发向远程TCP的连接中断请求的确认 TIME_WAIT 等待足够的时间以确保远程TCP接收到连接中断请求的确认 CLOSING 等待远程TCP对连接中断的确认 CLOSED 无连接 UNKNOWN 未知状态 -
监听TCP端口-tcpdump
Linux tcpdump命令用于倾倒网络传输数据。
执行tcpdump指令可列出经过指定网络界面的数据包文件头,在Linux操作系统中,你必须是系统管理员。
tcpdump [-adeflnNOpqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络界面>][-r<数据包文件>][-s<数据包大小>][-tt][-T<数据包类型>][-vv][-w<数据包文件>][输出数据栏位]
-
-a 尝试将网络和广播地址转换成名称。
-
-c<数据包数目> 收到指定的数据包数目后,就停止进行倾倒操作。
-
-d 把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出。
-
-dd 把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出。
-
-ddd 把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出。
-
-e 在每列倾倒资料上显示连接层级的文件头。
-
-f 用数字显示网际网络地址。
-
-F<表达文件> 指定内含表达方式的文件。
-
-i<网络界面> 使用指定的网络截面送出数据包。
-
-l 使用标准输出列的缓冲区。
-
-n 不把主机的网络地址转换成名字。
-
-N 不列出域名。
-
-O 不将数据包编码最佳化。
-
-p 不让网络界面进入混杂模式。
-
-q 快速输出,仅列出少数的传输协议信息。
-
-r<数据包文件> 从指定的文件读取数据包数据。
-
-s<数据包大小> 设置每个数据包的大小。
-
-S 用绝对而非相对数值列出TCP关联数。
-
-t 在每列倾倒资料上不显示时间戳记。
-
-tt 在每列倾倒资料上显示未经格式化的时间戳记。
-
-T<数据包类型> 强制将表达方式所指定的数据包转译成设置的数据包类型。
-
-v 详细显示指令执行过程。
-
-vv 更详细显示指令执行过程。
-
-x 用十六进制字码列出数据包资料。
-
-w<数据包文件> 把数据包数据写入指定的文件。
包管理工具
rpm/yum适用于Redhat、CentOS、Suse等平台;apt-get/dpkg适用于Debian、Ubuntu等平台;zypper适合于Suse平台。
rpm
-
常用指令
-
查询
rpm -qa
列出所有在本机上安装的程序rpm -qa | grep 软件名关键词
查询某一软件是否安装rpm -q 软件名
查询某一软件是否安装rpm -qi 软件名
查询一个软件包的具体信息rpm -ql 软件名
查询软件包中包含的文件rpm -qf 完整文件路径
查询某一文件所属的包 卸载 rpm 软件包:rpm -e RPM包的名称
强制卸载,不论其他软件是否依赖此软件,增加参数--nodeps
安装 rpm 软件包:rpm -ivh rpm包完整路径
-
参数详解:
-i
install:安装-v
verbose:显示安装详细信息-h
hash:显示安装进度条 升级软件:rpm -Fvh rpm包完整路径
F
freshen:安装/升级。若已经安装则升级-v
verbose:显示安装详细信息-h
hash:显示安装进度条 初始化 rpm 数据库:rpm --initdb
重建 rpm 数据库:rpm --rebuilddb
rpm 命令、yum 命令都依赖 rpm 数据库进行本机软件管理。若 rpm 数据库损坏,可尝试重建 rpm 数据库
-
yum
yum
是一个底层基于rpm
,连接软件源,实现软件安装、管理的高层次前端软件包管理工具。 yum
可自动从指定的软件源(服务器/本地)下载 rpm 安装包并自动安装,自动处理依赖关系,并自动安装需要的依赖包。
-
查询 搜索软件包:
yum search [参数] 模糊软件名
常用参数:installed/all/updates
<–> 已安装的/全部(默认值)/可升级的 软件名可模糊查询-
查询软件包:
yum list [参数] 精确软件名
常用参数:installed/all/updates
<–> 已安装的/全部(默认值)/可升级的 软件名需要精确名称 -
yum list (all) | grep软件名
搜索所有软件。all 可以不输入 -
查询软件包的具体信息:
yum info 软件包名
软件包名需要精确名称 -
查看软件源(仓库):
yum repolist [参数]
常用参数:all/enabled/disabled <–> 所有仓库/启用的仓库(默认值)/禁用的仓库
-
-
根据软件源(仓库)管理 安装指定的软件包
yum install 软件名1 软件名2 ...
-
重新安装软件包
yum reinstall 软件名1 软件名2 ...
-
升级软件包
升级到最新版本:
yum update 软件名1 软件名2 ...
-
查询可安装的版本:
yum search --showduplicate 模糊软件名
或yum list --showduplicate 精确软件名
-
升级到指定版本:
yum update-to 软件名-版本
删除软件包yum remove 软件名1 软件名2 ...
-
检测可升级的软件包
yum check-update
-
-
根据本地 rpm 数据库管理
-
安装本地 rpm 软件包
yum localinstall rpm包完整路径
常用选项:--nogpgcheck
免除gpg秘钥检验 -
升级本地 rpm 软件包
yum localupdate rpm包完整路径
常用选项:--nogpgcheck
免除gpg秘钥检验
-
apt-get
apt-get [参数]
-
升级
apt-get update // 更新源文件,并不会做任何安装升级操作
apt-get upgrade // 升级所有已安装的包
apt-get install packagename // 安装指定的包
apt-get install packagename --only-upgrade // 仅升级指定的包
apt-get install packagename --reinstall // 重新安装包
apt-get -f install // 修复安装
apt-get build-dep packagename // 安装相关的编译环境
apt-get source packagename // 下载该包的源代码
apt-get dist-upgrade // 升级系统
apt-get dselect-upgrade // 使用 dselect 升级
-
查询&显示
apt-cache search packagename // 查询指定的包
apt-cache show packagename // 显示包的相关信息,如说明、大小、版本等
apt-cache depends packagename // 了解使用该包依赖哪些包
apt-cache rdepends packagename // 查看该包被哪些包依赖
-
删除
apt-get remove packagename // 删除包
apt-get remove packagename -- purge // 删除包,包括删除配置文件等
apt-get autoremove packagename --purge // 删除包及其依赖的软件包+配置文件等(只对6.10有效,推荐使用)
-
清理
apt-get clean // 清理无用的包
apt-get autoclean // 清理无用的包
apt-get check // 检查是否有损坏的依赖
-
apt-get upgrade更新时忽略指定包 // 使用这个命令可以将指定的包的版本hold住,这样在更新的时候就会忽略掉这个包。
apt-mark hold packagename
// 将 hold 替换为 unhold 就可以取消对这个包版本的锁定了。apt-mark unhold packagename
系统设置
-
环境变量,能使系统在任意位置均能访问到对应的文件
-
环境变量地址:/etc/profile文件
-
添加环境变量:export $环境变量名=环境变量指向的完整路径
-
应用环境变量: 保存profile文件 输入source /etc/profile
-
查看当前环境变量:$环境变量名
Shell脚本
Shell 是一个命令行解释器,它为用户提供了一个系统级程序:向 Linux 内核发送请求以便运行程序。用户可用 Shell 来启动、挂起、停止,甚至是编写一些处理程序
Shell 脚本是一种脚本语言,Shell 脚本时一种解释性的脚本语言,执行前不需要额外编译,执行时逐语句编译,但效率低一些
-
脚本格式要求
-
开头-指定使用的 Shell
-
通常指定 bash (root 权限下):
#!/bin/bash
-
通常指定 bash (非 root 权限下):
#!/usr/bin/bash
-
-
Shell 操作相关指令 看系统中的 Shell:
chsh -l
切换到新 Shell:exec Shell名称
为某用户设定默认 Shell:chsh -s 新Shell完整路径 [用户名]
-
-
脚本常用的执行方式
-
赋予脚本可执行权限(x),然后直接访问脚本文件
-
使用
sh
命令,脚本文件不需要执行权限(x),不论所有者和所在组是谁,脚本都能运行
-
-
Shell 变量介绍
Shell 变量有 4 种:系统变量、用户自定义变量、位置参数变量、预定义变量
-
用户自定义变量:用户自定义的变量,可在脚本 / shell 中定义,变量名、变量值都可自定义,只能在此 bash 中使用;
-
环境变量:主要保存与系统操作环境相关的数据,在系统中可被全局调用的变量。可以自定义,但有部分系统预设的环境变量更改可能导致问题;
-
位置参数变量:主要用于向脚本当中传递参数或数据,脚本可通过对应指令获取传入的变量数据
-
预定义变量:预先设置好的可用于脚本的变量,类似于脚本专用的环境变量,变量名、变量的作用均是固定的。
-
-
显示shell中所有变量:set
环境变量
-
查看某一环境变量:
set | grep 环境变量名
echo $环境变量名
-
设置某一环境变量:
export 环境变量名=值
-
打开对应环境变量文件,在对应的环境变量文件中进行操作
-
利用
>>
输出重定向将指令添加到对应的环境变量文件
-
-
格式注意事项:
-
等号(=)两侧不能有空格
-
等号左边的环境变量名:不能有美元符号($)
-
等号右边的表达式:若引用其他环境变量,要加美元符号($)
-
-
更新环境变量:
source 环境变量所在文件夹
修改环境变量文件后,要更新环境变量,才能正确调用此变量
用户自定义变量
-
在脚本 或 Shell 中定义的变量,可被此 脚本/Shell 及其子 Shell 调用。有两种自定义变量:普通变量、静态变量。
-
定义/更改变量:
变量名=值
-
撤销变量:
unset 变量名
-
声明静态变量:
readonly 变量名=值
,静态变量相当与常量,不能改值,也不能撤销。 -
将指令的返回结果交给变量,
C=`date`
或C=$(date)
(推荐) -
shell的多行注释:
:<<! #需要换行 内容 !
位置参数变量(传入实参)
-
在执行一个 Shell 脚本时,如果希望获取到输入命令行中时,一同输入的参数的信息,就可使用位置参数变量
-
$n
选择对应位置的参数 n为数字,$0
为脚本文件路径(myshell),$1-$9
代表第1-9个参数,${25}
代表第25个参数(10以上的参数,数字需要用大括号{}包含)$#
返回输入的命令中的参数个数$*
选择命令行中的所有参数,并将所有参数看做一个参数返回$@
选择命令行中的所有参数,并将每个参数区别对待(返回值类似数组)
预定义变量
shell设计者已经定义好的变量,只能在脚本中使用的变量
-
语法
$$
当前进程的进程 ID (PID),即执行此脚本时的进程 ID$!
最近运行的进行的 ID (最近运行的进程 PID)$?
上一次执行的命令的返回状态-
0
= 上一指令正常执行 -
其他数字
= 上个指令执行有问题,具体返回值可由命令自己决定
-
tip :*.sh &
以后台方式运行脚本
运算符
-
语法
-
除法默认为整除
-
$((表达式))
或$[表达式]
(推荐) -
$(expr 表达式)
或expr 表达式
:只能实现 两个操作数 的计算#!/bin/bash #计算(2+3)*4 rs1=$(((2+3)*4)) rs2=$[(2+3)*4] temp=expr 2 + 3 rs3=expr temp \* 4 #expr中的乘法需加转义字符
-
条件判断
-
语法
-
单独使用条件表达式
test 条件表达式
若条件满足,则返回 TRUE (= 0);若条件不满足,则返回 FALSE (> 0) -
配合其他语句实现选择分支、循环逻辑
[ 条件表达式 ]
:条件表达式与两边 [] 括号必须有空格间隔,运算符与两边的参数页要有空格 若条件满足,则返回 TRUE (= 0);若条件不满足,则返回 FALSE (> 0) -
与if语句配合
-
二元运算符
[ 条件表达式 ] && 满足条件执行语句 || 不满足条件执行语句
类似其他语言中的条件?满足执行语句:不满足执行语句
条件表达式与两边 [] 括号必须有空格间隔,
-
-
条件表达式
-
字符串比较
-z 字符串
:字符串是否为空。可用于判断变量是否存在、用户是否有输入等-n 字符串
:字符串是否为非空字符串1 == 字符串2
两字符串是否相等 (将两变量转换为字符串进行比较)字符串1 = 字符串2
同上,但为避免与赋值混淆,通常不这样写字符串1 != 字符串2
两字符串是否不相等 -
整数比较
整数1 -gt 整数2
:> ,大于 (greater than)整数1 -ge 整数2
:≥ ,大于等于 (greater equal)整数1 -lt 整数2
:< ,小于 (less than)整数1 -le 整数2
:≤ ,小于等于 (little equal)整数1 -eq 整数2
:= ,等于 (equal)整数1 -ne 整数2
:≠ ,不等于 (not equal) -
文件权限判断
-
根据文件权限进行判断
-r 文件完整路径
readable:可读-w 文件完整路径
writable:可写-x 文件完整路径
executable:可执行 -
判断主要事项:文件的权限与文件的所在组、所有者、当前用户的所在组均有关系
-
-
文件类型判断
-
根据文件类型进行判断
-f 文件完整路径
file:文件存在且是常规文件-e 文件完整路径
exist:文件存在-d 文件完整路径
directory:文件存在并是个目录-
注意:这里的判断并不精确,不论 所有者、所在组、其他组,只要其中任意一个有对应权限,就会判断为TRUE (输出 = 0)
-
-
-
两个文件进行比较
文件1完整路径 -nt 文件2完整路径
newer than:文件1 比 文件2 新(修改时间新)文件1完整路径 -ot 文件2完整路径
older than:文件1 比 文件2 旧(修改时间旧)文件1完整路径 -ef 文件2完整路径
equal file:文件1 与 文件2 是否为同一个文件(Inode 号是否相同)可用于判断硬链接 -
多重条件判断
条件1 -o 条件2
OR:逻辑或。条件1 或 条件2 满足,则为 TRUE条件1 -a 条件2
AND:逻辑与。条件1 与 条件2 满足,则为TRUE! 条件1
逻辑非。条件1 不满足,则为真
-
-
if语句
if [ 条件表达式1 ]; then 满足 条件表达式1 时执行的条件 elif [ 条件表达式2 ]; then 满足 条件表达式2 时执行的条件 else 以上所有条件都不满足时的 fi
类似其他语言中的if条件语句,但注意最后的结束语句是fi 可省略elif和else部分 也可将then至于下一行,此时[]后不需要分号;
if [ 条件表达式 ] then 满足 条件表达式1 时执行的条件 elif [ 条件表达式2 ] then 满足 条件表达式2 时执行的条件 else 以上所有条件都不满足时的 fi
-
细节
-
if指令中的 条件表达式,遵从前文 Shell 的运算符的相关规则
-
有 4 种运算符:字符串比较、整数值比较、文件权限比较、文件类型比较
-
条件表达式 与两侧的 []中括号 要有空格
-
条件表达式中的运算符两侧要有空格
-
-
if指令中,除了if...then...fi部分一定要有,elif...then...和else...部分可以没有
-
exit指令,类似于其他语言的break指令
-
若不使用此指令,则程序会按顺序执行所有判断
-
若使用此指令,则程序在执行此指令时会立即突出脚本,并返回对应的返回值(返回值可用 $? 进行查询,可用于报错和异常状态返回)
-
-
-
case语句
-
case $变量名 in "值1") 若变量值 = 值1,则执行此处语句 ;; "值2") 若变量值 = 值2,则执行此处语句 ;; (...可有多个 case ...) *) 若以上变量值都不满足,则执行此处语句 ;; esac
-
case 中的语句后,;;相当于其他语句中的break语句的作用,;;可另起一行,也可紧跟指令
-
每个条件判断语句中,"值XX"与)之间可有空格,也可无空格 其他语言常用的default分支,这里写法是*)
-
这里比较的实质是将所有变量转换为字符串,因此比较值要用 双引号""括起来
-
分支结束以esac结尾
-
for循环
-
枚举:类似其他语言中的
foreach
语句,变量i
相当于枚举变量# 1. 对变量的枚举:循环变量 依次等于 值1、值2、...、值n for 循环变量 in 值1 值2 ... 值n do 循环执行的程序代码 done # 2. 对指令执行输出的枚举:循环变量依次等于变量执行输出结果中的每一个 for 循环变量 in $(指令) do 循环执行的程序代码 done
-
对变量的枚举
-
对传入参数(位置参数变量)的枚举:使用
"$@"
,要使用 双引号"",否则输出不正确
-
-
对指令执行输出的枚举
-
指令格式:
$(指令)
或指令
-
指令输出中的间隔:制表符、换行符等。枚举根据这些符号进行变量的依次输出
-
-
-
循环:类似其他语言中的for语句,变量相当于计数变量
for (( 初始值;循环控制条件;每次循环变量的变化 )) # 这里:变量值 = 初始值 + 循环次数 * 每次循环变化量 do 循环执行的程序代码 done
循环的条件写法 初始值、循环控制条件、每次循环量的变化 之间,用 分号;来分隔,可加空格,也可不加空格
while循环
当条件满足时,一直循环运行语句;直到条件不满足时,退出循环
while [ 条件表达式 ] do 满足条件所执行的语句 done # 1+……+n i=0 while [ $i -le $1] do SUM=$[ $SUM + $i] $i=$[ $i + 1] done
until循环
与while
语句相反,若不满足条件,则一直循环执行指令;直到满足条件后,退出指令
until [ 条件表达式 ] do 不满足条件所执行的语句 done
read 读取控制台输入
通过控制台,与用户实现交互并获取用户输入的数据。
-
read [参数] [变量1 变量2 变量3]
-
常用参数
-p "提示文字"
指定提示的文字(用户看到文字后输入对应的数据)-t 时间(整数)
设定读取用户输入值的等待时间,单位秒(s)。若超时用户仍未输入,则不再等待直接执行指令 -
变量:存储用户输入的变量名
-
若输入多个变量,则根据分隔符将变量依次存放到变量中
-
若只输入一个变量,则将用户所有输入(除了换行符)都存入此变量中
-
若未输入变量,则用户的所有输入默认存放于
$REPLY
变量中 -
若输入变量个数 > read 指令的变量数,则最后一个变量将用户输入的所有值存入此变量
-
-
若输入变量个数 < read 指令的变量数,则未被赋值的变量为空值 (可用
[ -n -z ]
判断表达式进行判断)#交互方式读取用户输入的参数,并限时 10s read -p "input a value in 10s please: " -t 10 USER_INPUT2
函数
Shell 中的函数有两种:系统函数、自定义函数
-
系统函数
-
basename 获取文件名
去掉文件完整路径的多级路径 (和后缀名),返回文件名 (去掉后缀的文件名)
# 可以在shell或cmd执行 basename 文件的完整路径 [文件后缀] basename [pathname] [suffix] basename [string] [suffix] basename /home/aaa/test.txt .txt #test
-
dirname 获取路径(与上面相反
去掉文件完整路径中的文件名和后缀,返回文件路径
# 可以在shell或cmd执行 dirname 文件的绝对路径 dirname /home/aaa/test.txt #/home/aaa
-
-
自定义函数
-
[function] 函数名 [()] { 函数指令; [return 返回值;] } 示例: function getSum() { SUM=$[$n1+$n2] echo"SUM" } read -p "输入n1" n1 read -p "输入n2" n2 getSum $n1 $n2
-
建议函数开头的省略写法
function 函数名{}
函数名() {}
-
返回值:整数值,范围 0-255。若不需要返回值可省略,默认返回值 = 0,返回值只能使用预定义变量
$?
来获取 -
指令 和 return 语句最后的双引号
;
均可省略 -
函数定义可在调用的语句之前,也可在调用的语句之后
-
-
调用函数
-
函数名 [传入参数1 传入参数2 ... 传入参数n]
,不需要括号 -
若函数不需要传入参数,则传入参数部分可以省略
-
在函数中调用传入参数,使用位置参数变量
$1
、$2
等。注意当传入参数大于等于 10 个后,要用 {} 将数字括起来,如第 11 个参数 ${11}
-
-
备份数据库
#!/bin/bash #*.sh存放在/usr/sbin/ BACK_UP=/data/backup/db DATA_TIME=${date +%Y-%m-%d_%H:%M:%S} echo $DATA_TIME HOST=localhost USER=root PASS_WD=root DATABASE=testdb # 判断是否存在该目录,否则创建目录 [ ! -d "${BACK_UP}/${DATA_TIME}" ] && mkdir -p "${BACK_UP}/${DATA_TIME}" mysqldump -u${USER} -p${PASS_WD} --host=${HOST} --databases ${DATABASE} | gzip > ${BACK_UP}/${DATA_TIME}/$DATA_TIME.sql.gz #将文件处理成tar.gz cd ${BACK_UP} tar -zcvf $DATA_TIME.tar.gz ${DATA_TIME} #删除对应备份目录 rm -rf ${BACKUP}/${DATA_TIME} #删除10天前的备份文件 find ${BACK_UP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \; echo "备份数据库${DATABASE}完成"
crontab -e #编辑定时任务,每天凌晨2:30 30 2 * * * /usr/sbin/*.sh #光标要移回前面
Linux运维知识
日志
-
日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统 的安全信息、邮件相关信息、各种服务相关信息等。
-
日志对于安全来说也很重要,它记录了系统每天发生的各种事情,通过日志来检查错误发生的原因,或者受到攻击 时攻击者留下的痕迹。
-
可以这样理解日志是用来记录重大事件的工具
/var/log/目录就是系统日志文件的保存位置
日志文件 | 说明 |
---|---|
/var/log/boot.log | 系统启动日志 |
/var/log/cron | 记录与系统定时任务相关的日志 |
/var/log/cups/ | 记录打印信息的日志 |
/var/log/dmesg | 记录了系统在开机时内核自检的信总,也可以使用dmesg目录直接查看内核自检信息 |
/var/log/btmp | 记录错误登录的日志,这个文件是二进制文件,不能直接用VI查看,而要使用lastb命令查看,命令如下:sudo lastb |
/var/log/lasllog | 记录系统中所有用户最后一次的登录时间的日志,这个文件也是二进制文件,要使用lastlog命令查看 |
/var/log/mailog | 记录邮件信息的日志 |
/var/log/message | 记录系统重要消息的日志,这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题,首先要检查这个日志文件 |
/var/log/secure | 记录验证和授权方面的信息,只要涉及账户和密码的程序都会记录,比如系统登录,ssh的登录,su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中 |
/var/log/wtmp | 永久记录所有用户的登录,注销信息,同时记录系统的后动,重启,关机事件,是二进制文件,使用last命令查看 |
/var/log/ulmp | 记录当前已经登录的用户的信息,这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息,这个文件不能用Vi查看,而要使用w,who,users等命令查看 |
由日志服务rsyslogd记录的日志文件,日志文件的格式包含以下4列:
-
事件产生的时间
-
产生事件的服务器的主机名
-
产生事件的服务名或程序名
-
事件的具体信息
日志管理服务 rsyslogd
-
查询Linux中的rsyslogd服务是否启动
-
ps aux | grep "rsyslog" | grep -v "grep"
-
-
查询rsyslogd服务的自启动状态
-
systemctl list-unit-files | grep rsyslog
-
-
配置文件:/etc/rsyslog.conf
-
编辑文件时的格式为:*.* 存放日志文件,第一个*表示日志类型,第二个*表示日志级别
-
日志类型 含义 auth pam产生的日志 authpriv ssh.ftp等登录信息的验证信息 corn 时间任务相关 kern 内核 lpr 打印 mail 邮件 mark(syslog)-rsyslog 服务内部的信息,时间标识 news 新闻组 user 用户程序产生的相关信息 uucp unix to nuix copy主机之间相关的 local 1-7 自定义的日志设备 -
日志级别 意义 debug 有调试信息的,日志通信最多 info 一般信息日志,最常用 notice 最具有重要性的普通条件的信息 warning 警告级别 err 错误级别,阻止某个功能或者模块不能正常工作的信息 crit 严重级别,阻止整个系统或者整个软件不能正常工作的信息 alert 需要立刻修改的信息 emerg 内核崩溃等重要信息 none 什么都不记录 从上到下,级别从低到高,记录信息越来越少
-
日志轮替
——把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除
-
日志轮替文件命名
-
使用logrotate(全局的日志轮替策略/规则)进行日志轮替管理,要想改变日志轮替文件名字,通过/etc/logrotate/conf配置文件中"dateext"参数
-
如果配置文件中有"dateext"参数,那么日志会用日期来作为日志文件的后缀,例如"secure-20201010",这样日志文件名不会重叠,也就不需要日志文件的改名,只需要指定保存日志个数,删除多余的日志文件
-
如果配置文件中没有"dateext"参数,日志文件就需要进行改名,当第一次进行日志轮替时,当前的"secure"日志会自动改名为"secure.1",然后新建"secure"日志,用来保存新的日志。当第二次进行日志轮替时,"secure.1"会自动改名,当前的"secure"日志会自动改名为"secure.1",然后新建"secure"日志,用来保存新的日志,以此类推
-
-
logrotate配置文件
# rotate log files weekly, 每周对日志文件进行一次轮替 weekly # keep 4 weeks worth of backlogs, 共保存4 份日志文件,当建立新的日志文件时,旧的将会被删除 rotate 4 # create new (empty) log files after rotating old ones, 创建新的空的日志文件,在日志轮替后 create # use date as a suffix of the rotated file, 使用日期作为日志轮替文件的后缀 dateext # uncomment this if you want your log files compressed, 日志文件是否压缩。如果取消注释,则日志会在转储的同时进 行压缩 #compress #RPM packages drop log rotation information into this directory include /etc/logrotate.d # 包含/etc/logrotate.d/ 目录中所有的子配置文件。也就是说会把这个目录中所有子配置文件读取进来, #下面是单独设置,优先级更高。 # no packages own wtmp and btmp -- we'll rotate them here /var/log/wtmp { monthly # 每月对日志文件进行一次轮替 create 0664 root utmp # 建立的新日志文件,权限是0664 ,所有者是root ,所属组是utmp 组 minsize 1M # 日志文件最小轮替大小是1MB 。也就是日志一定要超过1MB 才会轮替,否则就算时间达到 一个月,也不进行日志转储 rotate 1 # 仅保留一个日志备份。也就是只有wtmp 和wtmp.1 日志保留而已 } /var/log/btmp { missingok # 如果日志不存在,则忽略该日志的警告信息 monthly create 0600 root utmp rotate 1 }
参数说明
daily :日志的轮替周期是每天 weekly :日志的轮替周期是每周 monthly :日志的轮替周期是每月 rotate 数字 :保留的日志文件的个数。0 指没有备份 compress :日志轮替时,旧的日志进行压缩 create mode owner group :建立新日志,同时指定新日志的权限与所有者和所属组。 mail address :当日志轮替时,输出内容通过邮件发送到指定的邮件地址。 missingok :如果日志不存在,则忽略该日志的警告信息 notifempty :如果日志为空文件,则不进行日志轮替 minsize :大小日志轮替的最小值。也就是日志一定要达到这个最小值才会轮替,否则就算时间达到也不轮替 size :大小日志只有大于指定大小才进行日志轮替,而不是按照时间轮替。 dateext :使用日期作为日志轮替文件的后缀。 sharedscripts :在此关键字之后的脚本只执行一次。 prerotate/endscript :在日志轮替之前执行脚本命令。 postrotate/endscript :在日志轮替之后执行脚本命令。
-
把自己的日志加入日志轮替
-
第一种方法是直接在/etc/logrotate.conf 配置文件中写入该日志的轮替策略(如上)
-
第二种方法是在/etc/logrotate.d/目录中新建立该日志的轮替文件,在该轮替文件中写入正确的轮替策略,因为该目录 中的文件都会被“include”到主配置文件中,所以也可以把日志加入轮替。(推荐)
-
-
-
日志轮替机制原理
-
日志轮替之所以可以在指定的时间备份日志,是依赖系统定时任务。在/etc/cron.daily/目录,就会发现这个目录中是有logrotate 文件(可执行),logrotate 通过这个文件依赖定时任务执行的。
-
-
查看内存日志
-
journalctl
可以查看内存日志, 这里我们看看常用的指令journalctl
##查看全部journalctl -n 3
##查看最新3 条journalctl –since 19:00 –until 19:10:10
#查看起始时间到结束时间的日志可加日期journalctl -p err
##报错日志journalctl -o verbose
##日志详细内容journalctl _PID=1245 _COMM=sshd
##查看包含这些参数的日志(在详细日志查看) 或者journalctl | grep sshd
注意: journalctl 查看的是内存日志, 重启清空
-
-
制作minLinux系统
-
启动流程介绍:
-
制作Linux 小系统之前,再了解一下Linux 的启动流程: 1、首先Linux 要通过自检,检查硬件设备有没有故障 2、如果有多块启动盘的话,需要在BIOS 中选择启动磁盘 3、启动MBR 中的bootloader 引导程序 4、加载内核文件 5、执行所有进程的父进程、老祖宗systemd 6、欢迎界面
-
在Linux 的启动流程中,加载内核文件时关键文件: 1)kernel 文件: vmlinuz-3.10.0-957.el7.x86_64 2)initrd 文件: initramfs-3.10.0-957.el7.x86_64.img
-
-
内核源码阅读介绍
-
介绍
-
/boot :和系统引擎相关的代码
-
/fs :存放linux支持的文件系统代码
-
/init :存储了 Linux 内核的初始化 相关代码 ; 该 初始化代码 关联到了 内存的各个组件 的入口 ;
-
time_init();#初始化运行时间
-
tty_init();#tty(终端)初始化
-
trap_init();#陷阱门(硬件中断向量)初始化
-
sched_init();#调度程序初始化
-
buffer_init();#缓存管理初始化
-
hd_init();#硬盘初始化
-
sti();#所有初始化工作完后,开启中断
-
move_to_user_mode();切换到用户模式
-
-
/include :存放linux核心需要的头文件,比如:asm,linux,sys
-
/kernel :和系统内核相关的源码
-
/lib :存放库代码
-
/mm :和内存管理相关的代码
-
/tools :工具相关代码
-
内核升级
-
下载&解压最新版
-
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.11.2.tar.gz
tar -zxvf linux-5.8.16.tar.gz
-
-
升级步骤
-
uname -a
// 查看当前的内核版本yum info kernel -q
//检测内核版本,显示可以升级的内核yum update kernel
//升级内核yum list kernel -q
//查看已经安装的内核
-
备份与恢复
实体机无法做快照,如果系统出现异常或者数据损坏,后果严重, 要重做系统,还会造成数据丢失。所以我们可 以使用备份和恢复技术 linux 的备份和恢复很简单, 有两种方式:
-
把需要的文件(或者分区)用TAR 打包就行,下次需要恢复的时候,再解压开覆盖即可
-
使用dump 和restore 命令
如果linux 上没有dump 和restore 指令,需要先按照 yum -y install dump
yum -y install restore
-
dump 支持分卷和增量备份(所谓增量备份是指备份上次备份后修改/增加过的文件,也称差异备份)。
dump [ -cu] [-123456789] [ -f <备份后文件名>] [-T <日期>] [ 目录或文件系统]
dump []-wW
-c
: 创建新的归档文件,并将由一个或多个文件参数所指定的内容写入归档文件的开头。-
-0123456789
: 备份的层级。0 为最完整备份,会备份所有文件。若指定0 以上的层级,则备份至上一次备份以来 修改或新增的文件, 到9 后,可以再次轮替.
-f
: <备份后文件名>: 指定备份后文件名-j
: 调用bzlib 库压缩备份文件,也就是将备份后的文件压缩成bz2 格式,让文件更小-T <日期>
: 指定开始备份的时间与日期-u
: 备份完毕后,在/etc/dumpdares 中记录备份的文件系统,层级,日期与时间等。-t
: 指定文件名,若该文件已存在备份文件中,则列出名称-W
:显示需要备份的文件及其最后一次备份的层级,时间,日期。-w
:与-W 类似,但仅显示需要备份的文件。-
应用案例1
将/boot 分区所有内容备份到/opt/boot.bak0.bz2 文件中,备份层级为“0”
dump -0uj -f /opt/boot.bak0.bz2 /boot
-
应用案例2
在/boot 目录下增加新文件,备份层级为“1”(只备份上次使用层次“0”备份后发生过改变的数据), 注意比较看看 这次生成的备份文件boot1.bak 有多大
dump -1uj -f /opt/boot.bak1.bz2 /boot
通过dump 命令在配合crontab 可以实现无人值守备份。只有分区支持增量备份,备份文件或目录,不再支持增量备份,即只能使用0级别备份。
-
-
使用restore 完成恢复
restore 命令用来恢复已备份的文件,可以从dump 生成的备份文件中恢复原文件
restore [模式选项] [选项]
-
说明下面四个模式, 不能混用,在一次命令中, 只能指定一种。 -C :使用对比模式,将备份的文件与已存在的文件相互对比。 -i:使用交互模式,在进行还原操作时,restors 指令将依序询问用户 -r:进行还原模式 -t : 查看模式,看备份文件有哪些文件
-
选项 -f <备份设备>:从指定的文件中读取备份数据,进行还原操作
-
应用案例1
-
restore 命令比较模式,比较备份文件和原文件的区别
restore -C -f boot.bak1.bz2
//注意和最新的文件比较
-
-
应用案例2
-
restore 命令查看模式,看备份文件有哪些数据/文件
restore -t -f boot.bak0.bz2
-
-
应用案例3
-
restore 命令还原模式, 注意细节: 如果你有增量备份,需要把增量备份文件也进行恢复, 有几个增量备份文件,就要恢复几个,按顺序来恢复即可。 mkdir /opt/boottmp cd /opt/boottmp restore -r -f /opt/boot.bak0.bz2 //恢复到第1 次完全备份状态 restore -r -f /opt/boot.bak1.bz2 //恢复到第2 次增量备份状态
-
-
应用案例4
-
restore 命令恢复备份的文件,或者整个目录的文件 基本语法:
restore -r -f 备份好的文件
mkdir etctmp
cd etctmp/
restore -r -f /opt/etc.bak0.bz2
-
-
Linux 可视化管理
Webmin 是功能强大的基于Web 的Unix/linux 系统管理工具。管理员通过浏览器访问Webmin 的各种管理功能并完 成相应的管理操作。除了各版本的linux 以外还可用于:AIX、HPUX、Solaris、Unixware、Irix 和FreeBSD 等系统
安装webmin&配置
-
下载地址: Index of /download/yum , 用下载工具下载即可
也可以使用wget http://download.webmin.com/download/yum/webmin-1.700-1.noarch.rpm
-
安装:
rpm -ivh webmin-1.700-1.noarch.rpm
重置密码
/usr/libexec/webmin/changepass.pl /etc/webmin root test
root 是webmin 的用户名,不是OS 的, 这里就是把webmin 的root 用户密码改成了test修改webmin 服务的端口号(默认是10000 出于安全目的)
vim /etc/webmin/miniserv.conf # 修改端口
将port=10000 修改为其他端口号,如port=6666
重启webmin
/etc/webmin/restart # 重启 /etc/webmin/start # 启动 /etc/webmin/stop # 停止
防火墙放开6666 端口
firewall-cmd –zone=public –add-port=6666/tcp –permanent # 配置防火墙开放6666 端口 firewall-cmd –reload # 更新防火墙配置 firewall-cmd –zone=public –list-ports # 查看已经开放的端口号
-
登录webmin http://ip:6666 可以访问了 用root 账号和重置的新密码test
bt宝塔
bt 宝塔Linux 面板是提升运维效率的服务器管理软件,支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA 等 多项服务器管理功能。
-
安装和使用
-
安装:
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
-
安装成功后控制台会显示登录地址,账户密码,复制浏览器打开登录,
-
使用介绍, 比如可以登录终端, 配置,快捷安装运行环境和系统工具, 添加计划任务脚本
-
如果bt 的用户名,密码忘记了,使用bt default 可以查看
Linux面试题
统计访问量和连接数
-
分析日志t.log(访问量),将各个ip 地址截取,并统计出现次数,并按从大到小排序(腾讯)
http://192.168.200.10/index1.html http://192.168.200.10/index2.html http://192.168.200.20/index1.html http://192.168.200.30/index1.html http://192.168.200.40/index1.html http://192.168.200.30/order.html http://192.168.200.10/order.html
cat t.txt | cut -d ‘/‘ -f 3 | sort | uniq -c | sort -nr
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。
cut [-bn] [file] cut [-c] [file] cut [-df] [file]
参数:
-
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-
-c :以字符为单位进行分割。
-
-d :自定义分隔符,默认为制表符。
-
-f :与-d一起使用,指定显示哪个区域。
-
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的 范围之内,该字符将被写出;否则,该字符将被排除
uniq 可检查文本文件中重复出现的行列。
uniq [-cdu][-f<栏位>][-s<字符位置>][-w<字符位置>][--help][--version][输入文件][输出文件]
参数:
-
-c或--count 在每列旁边显示该行重复出现的次数。
-
-d或--repeated 仅显示重复出现的行列。
-
-f<栏位>或--skip-fields=<栏位> 忽略比较指定的栏位。
-
-s<字符位置>或--skip-chars=<字符位置> 忽略比较指定的字符。
-
-u或--unique 仅显示出一次的行列。
-
-w<字符位置>或--check-chars=<字符位置> 指定要比较的字符。
-
--help 显示帮助。
-
--version 显示版本信息。
-
[输入文件] 指定已排序好的文本文件。如果不指定此项,则从标准读取数据;
-
[输出文件] 指定输出的文件。如果不指定此选项,则将内容显示到标准输出设备(显示终端)。
sort 可针对文本文件的内容,以行为单位来排序。
sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件][-k field1[,field2]]
参数说明:
-
-b 忽略每行前面开始出的空格字符。
-
-c 检查文件是否已经按照顺序排序。
-
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-
-f 排序时,将小写字母视为大写字母。
-
-i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
-
-m 将几个排序好的文件进行合并。
-
-M 将前面3个字母依照月份的缩写进行排序。
-
-n 依照数值的大小排序。
-
-u 意味着是唯一的(unique),输出的结果是去完重了的。
-
-o<输出文件> 将排序后的结果存入指定的文件。
-
-r 以相反的顺序来排序。
-
-t<分隔字符> 指定排序时所用的栏位分隔字符。
-
+<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
-
--help 显示帮助。
-
--version 显示版本信息。
-
[-k field1[,field2]] 按指定的列进行排序。
-
统计连接到服务器的各个ip 情况,并按连接数从大到小排序(腾讯)
netstat -an | grep ESTABLISHED | awk -F "" '{print $5}' | cut -d “:” -f 1 | sort | uniq -c| sort -nr
awk -F " " '{print $5}'
:以" "作为分隔符,打印第5行
找回Mysql root密码
-
在/etc/my.cnf中添加语句:
skip-grant-tables #跳过权限表
-
重启服务:
service mysqld restart
-
重新登录,进入mysql Database;查看user表中的字段,
authentication_string
-
更新密码(使用password函数加密):
update user set authentication_string=password("123456") where user='root';
-
刷新:
flush privileges;
-
退出Mysql,删除/etc/my.cnf中添加的语句
-
重启服务
访问量排名和tcpdump
-
统计日志访问量排名前两个的IP访问情况
-
cat acces.log | awk -F " " '{print $1}' | sort | uniq -c | sort -nr | head -2
-
-
使用tcpdump监听本机,将来自某一个IP和端口的数据,保存到日志中
-
tcpdump -i ens33 host 192.168.88.140 and port 22 >> /opt/interview/tcpdump.log
-
-
常用的Nginx模块,用来做什么
rewrite模块:实现重写功能
access模块:来源控制
ssl模块:安全加密
ngx_http_gzip_module:网络传输压缩模块
ngx_http_proxy_module模块实现代理
ngx_http_upstream_module模块实现定义后端服务器列表
ngx_cache_putge实现缓存清除功能
系统权限划分
-
chattr命令用于改变文件属性。
-
a:让文件或目录仅供附加用途。
-
b:不更新文件或目录的最后存取时间。
-
c:将文件或目录压缩后存放。
-
d:将文件或目录排除在倾倒操作之外。
-
i:不得任意更动文件或目录。
-
s:保密性删除文件或目录。
-
S:即时更新文件或目录。
-
u:预防意外删除。
-
-
这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下8种模式:
-
chattr [-RV][-v<版本编号>][+/-/=<属性>][文件或目录...]
-
-R 递归处理,将指定目录下的所有文件及子目录一并处理。
-v<版本编号> 设置文件或目录版本。
-V 显示指令执行过程。
+<属性> 开启文件或目录的该项属性。
-<属性> 关闭文件或目录的该项属性。
=<属性> 指定文件或目录的该项属性。