Linux
Linux了解
使用:linux下开发项目、linux运维工程师、linux嵌入式工程师
应用领域:
-
个人桌面领域:如Ubuntu,Debain等桌面环境
-
服务器领域:linux有稳定、高效、免费等特点,linux在服务器领域的应用是最强的。
-
嵌入式领域:linux运行稳定、对网络的良好支持性、低成本,可以根据需要对软件进行裁剪,内核最好可以达到几百KB等特点,使其在嵌入式领域的应用有很大的提高。
主要应用:机顶盒、数字电视、网络电话、程序交控机、设计、PDA、智能家居、智能硬件,以后的物联网也是它的应用领域。
Linux之父:
- Linus Torvalds
- Git创始人
- 世界著名黑客
Linux主要发行版本:
- Ubuntu(乌班图)
- RedHat(红帽)
- CentOS
- Debain(蝶变)
- Fedora、SuSE、OpenSuSE(示意图)
Linux与Unix关系:
- 传承关系
linux安装使用
安装步骤:
- 装破解版的VMWare: VMware Workstation Pro 16.1.0中文破解版(附永久激活许可证)下载-Win7系统之家 (winwin7.com)
- 装linux镜像文件:CentOS Mirrors List
- 在VM中操作安装
网络连接的三种模式:
网段:192.168.0.20 前三个相同说明在同一个网段,可以相互通信。
- 桥接模式:虚拟系统可以和外部系统通信,但是容易造成IP冲突。虚拟机再使用一个不同于主机的同网段IP。
- NAT模式:网络地址转换模式。虚拟系统可以和外部系统通讯,不造成IP冲突。
- 主机模式:独立的系统。
虚拟机的克隆:
- 方法一:直接拷贝一份安装好的虚拟机文件
- 方法二:使用vmware进行克隆操作,注意,克隆前,要先关闭该linux系统
虚拟机快照:
- 使用vmware的拍照功能即可。
虚拟机迁移删除:
- 迁移:虚拟机文件克隆
- 删除:删除文件夹即可
vmtools的安装:
-
获取到VMware Tools{从VMware的菜单栏虚拟机下的重新安装vmtools}或者{从CD/DVD选择使用VMware下面的linux.iso镜像文件挂在到虚拟linux系统中}
-
解压VMware-Tools.tar.gz文件
tar -xzvf VMware-Tools.tar.gz
-
进入vmware-tools-distrib中,然后运行vmware.install.pl
cd /vmware-tools-distrib ./ vmware.install.pl
-
安装成功出现: — the VMware stream
vmtools文件共享:
- 打开虚拟机设置,选择需要共享的文件夹地址即可。
- 共享文件会出现在 linux系统的/mnt/hgfs文件夹下
目录结构
基本介绍:
- 在linux世界里,一切皆文件
- linux文件系统是采用级层式的树状目录结构,在此结构的最上层目录是"/",然后再到此文件夹下创建其他的目录。
目录详解:
-
/bin(/usr/bin、/usr/local/bin) :
是Binary的简写,该目录存放着最经常使用的命令。
-
/sbin(/usr/sbin、/usr/local/sbin):
s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
-
/home:
存放普通用户的主目录,在linux里每个用户都有自己的主目录,一般该目录名是以用户的账号名命名。
-
/root:
该目录为系统管理员,也称作超级权限管理者的用户主目录。
-
/lib:
系统开机所需要最基本的动态连接共享库,其作用类似于windows里的DLL文件,几乎所有的应用程序都需要用到这些共享库。
-
/lost+found:
这个目录一般是空的,当用户非法关机时,这里就存放了一些文件。
-
/etc:
所有的系统管理所需要的配置文件和子目录,比如安装mysql数据库的my.conf。
-
/usr:
这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录,类似于windows的progr am files目录。
-
/boot:
存放着启动linux时所需要的一些核心文件,包括一些连接文件和镜像文件。
-
/proc[不能动]:
这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录可以获取系统的信息。
-
/srv[不能动]:
service缩写,该目录存放了一些服务器启动时需要提取的数据。
-
/sys[不能动]:
这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统sysfs
-
/tmp:
用来存放一些临时文件的。
-
/dev:
类似于windows的设备管理器,把所有的硬件用文件的形式存储。
-
/media:
linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂在到这个目录下。
-
/mnt:
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂在/mnt/上,然后进入该目录就可以查看内容了。
-
/opt:
这是给主机额外安装软件的目录。如安装ORACLE数据库就可以放在该目录下。默认是空。
-
/usr/local:
这个另一个给主机额外安装软件的目录。一般是通过编译源码方式安装的程序。
-
/var:
这个目录存放着不断扩充的东西,习惯将被修改的目录放在这个目录下。包括各种日志文件。
-
/selinux[security-enhanced linux]:
SElinux是一种安全子系统,它能控制程序只访问特定文件,有三种工作模式,可以自行设置。
远程登录到linux:
- 下载安装Xshell远程登录工具
- 通过远程linux系统的ip连接
- 输入命令进行其他操作
远程传输文件:
- 下载安装Xftp文件下载工具
- 通过远程linux系统的ip连接
- 进行文件的传输操作
远程登录的意义:
- linux服务器是开发小组共享
- 正式上线的项目是运行在公网
工具Xshell:
- Xshell是目前最好的远程登录到linux操作系统的软件,流畅的速度并且完美解决了中文乱码问题,是目前程序员首选的软件。
- Xshell是一个强大的安全终端模拟软件,它支持SSH1、SSH2,以及Microsoft Windows平台的TELNET协议。
- Xshell可以在Windows界面下用来访问远端不同系统的服务器,从而比较好得达到远程控制终端的目的
工具Xftp:
- 是一个基于Windows平台的功能强大的SFTP、FTP文件传输软件。使用Xftp后,windows用户能安全地在UNIX/Linux和Windows PC 之间传输文件。
重启命令:reboot
vi和vim编辑器
基本介绍:
- linux系统会内置vi文本编辑器。
- vim具有程序编辑的能力,可以看做是vi的增强版,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补完、编译以及错误跳转等方便编程的功能特别丰富。
常用的三种模式:
-
正常模式:
以Vim打开一个档案就直接进入一般模式了。在这个默认模式中,可以使用上下左右方向键来启动光标,可以使用删除字符和删除整行来处理档案内容,也可以是用复杂、粘贴来处理你的文件数据。
-
插入模式:
按下i,I,o,O,a,A,r,R等任意一个字母之后会进入编辑模式,一般来说按i即可。
-
命令行模式:
输入esc 再输入 : :在这个模式中,可以提供你相关指令,完成读取、存盘、替换、离开vim、显示行号等的动作。
vi和vim的快捷键:
- 拷贝当前行 yy,拷贝当前行向下的5行 5yy,并粘贴( p )
- 删除当前行 dd,删除当前行向下的5行 5dd
- 在文件中查找某个单词[命令行下的 /关键词,回车查找,输入n就是查找下一个]
- 设置文件的行号,取消文件的行号[命令行下 :set nu或 和 :set nonu]
- 在一般模式下,使用快捷键到该文档的最末行[G]和最首行[gg]
- 在一个文件中输入"hello",在一般模式下,然后撤销这个动作 u
- 在一般模式下,并将光标移动到,输入 20 ,在输入 shift+g
- 等等
关机重启:
- shutdown -h now 现在立即关机
- shutdown -h 1 "hello,过一分钟后关机"
- shutdown -r now 现在立刻重启计算机
- halt 关机,和上面的立刻关机一样
- reboot 重启,和上面的立刻重启一样
- sync 把内存的数据同步到磁盘
- 注意细节:
- 不管是重启系统还是关闭系统,首先要运行sync命令,把内存的数据同步到磁盘上
- 目前的shutdown/reboot/halt等命令底层在使用之前均调用了sync
登录注销:
- 登录时尽量使用root账号登录,因为它是系统管理员,最大的权限,为了避免操作失误。可以利用普通用户登录,登录后再用su - 用户名命令来切换成系统管理员身份
- 在提示符下输入logout即可注销用户
- 使用细节:
- logout注销指令在图形运行级别无效,在运行级别3下有效
用户管理
基本介绍:linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
添加用户:
- 命令:useradd 用户名
- 默认该用户的家目录在/home/用户名
- 当创建用户成功后,会自动创建和用户名相同的家目录
- 通过 useradd -d 指定目录 新的用户名 , 给新创建的用户指定家目录
指定/修改密码:
- passwd 用户名
- 显示当前用户所在目录: pwd
删除用户:
- userdel 用户名
- userdel 用户名:删除用户保留家目录
- userdel -r 用户名:删除用户以及用户家目录
查询用户信息:
- id 用户名
切换用户:
- 可以通过su - 切换用户名,切换到高权限用户,比如root
- 从权限高的用户切换到权限低的用户,不需要输入密码,反之需要
- 当需要返回到原来用户时,使用exit/logout指令
查看当前用户/登录用户:
- whoami:表示当前的用户
- who am i:表示初次登录的用户
用户组:
类似于角色,系统可以对具有共性的多个用户进行统一的管理。
- 新增组:
- groupadd 组名
- 删除组:
- groupdel 组名
- 增加用户时直接加上组:
- useradd -g 用户组 用户名
- 修改用户的组:
- usermod -g 用户组 用户名
用户和组相关文件:
- /etc/passwd文件:
- 用户的配置文件,记录用户的各种信息
- 每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
- /etc/shadow文件:
- 口令的配置文件
- 每行的含义:登录名:加密口令:最后一次的修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
- /etc/group文件:
- 组的配置文件,记录linux包含的组的信息
- 每行的含义:组名:口令:组标识号:组内用户列表
指定运行级别:
- 运行级别说明:
- 0:关机
- 1单用户(找回丢失密码)
- 2:多用户状态没有网络
- 3:多用户状态有网络
- 4:系统未使用保留给用户
- 5:图形界面
- 6:重启
- 常用的级别是3和5,也可以指定默认运行级别。
- 命令:init[0123456]
- CentOS7后运行级别说明:
- 在CentOS7以前,/etc/inittab文件中
- 在CentOS7之后,进行了简化
- multi-user.target:类似于init 3
- graphical.target:类似于init 5
- systemctl get-default
- systemctl set-default TARFET.target
找回root密码:
- 进入登录页面前,按e进入编辑页面
- 在linux16开头内容的行后面,输入 init=/bin/sh
- 按Ctrl+X进入单用户模式
- 输入mount -o remount,rw /
- 输入passwd,输入密码,确认密码
- 输入touch /.autorelabel
- 输入exec /sbin/init
帮助指令:
- man获得帮助信息:
- man [命令或配置文件] : 获得对应命令的帮助信息
- 例如:man ls
- help指令:
- help 命令 : 获取shell内置命令的帮助信息
- 百度解决问题
文件目录指定
文件目录类:
-
pwd指令:
- pwd: 显示当前工作目录的绝对路径
-
ls指令:
- ls [选项] 目录或文件:查看文件目录列表
- -a:显示所有当前目录所有文件和目录,包括隐藏文件
- -h:更好读的格式显示
- -l:以列表的方式显示信息
-
cd指令:
- cd [参数] :切换到指定目录
- cd ~或 cd :回到家目录,比如root,回到/root
- cd .. :返回上一级目录
-
mkdir指令:
- mkdir [选项] 要创建的目录名
- -p:创建多级目录
-
rmdir指令:
- rmdir [选项] 要删除的空目录
- 如果目录下有内容:rm -rf 要删除的目录
- rm -rf /:很危险,删除全部
-
touch指令:
- touch 文件名称:创建一个新的文件
-
cp指令:
- cp [选项] source dest:
- -r : 递归复制整个文件夹
- \cp:默认覆盖同名文件,不提示
-
rm指令:
- rm [选项] 要删除的文件或目录
- -r:递归删除整个文件夹
- -f:强制删除不提示
-
mv指令:
- mv 旧文件名 新文件名:在同一文件夹,就重命名;不在同一文件夹,就移动并重命名。
- mv 某一目录 新的目录:在同一文件夹,重命名;不在同一文件夹,就移动并重命名。
-
cat指令:
- cat [选项] 要查看的文件
- -n:显示行号
- 管道命令|more:演示一定行数,然后enter一行一行显示
-
more指令:
more指令是一个基于vi编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more指令中内置了若干个快捷键(交互指令)。
-
more 要查看的文件
-
less命令:
less命令用来分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大,支持各种终端显示。less指令在显示文件内容时,并不是一次将整个文件加载出来之后显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
-
less 要查看的文件
echo指令:
- echo [选项] [输出内容]:将内容输出到控制台
- 例如:输出@PATH等环境变量
head指令:
- head 文件:默认显示文件前十行内容
- head -n 5 文件:显示前五行内容
tail指令:
- tail 文件:默认显示文件后十行内容
- tail -n 5 文件:显示文件后五行内容
- tail -f 文件:实时追踪该文档内的所有更新
>指令和>>指令:
- ls -l > 文件: 将内容覆盖写入文件中
- ls -al >> 文件:将内容追加写入文件中
- cat 文件1 > 文件2:将文件1覆盖文件2
- echo "内容" >> 文件:将内容追加到文件中
- cal >> 文件: 将日期追加到文件中
ln指令:
软链接也称为符号链接,类似于windows里的快捷方式,主要存放了链接其他文件的路径。
- ln -s [原文件或目录] [软链接名] :给原文件创建一个软链接
- rm 软链接文件 : 删除软链接
- 注意:pwd指令查看目录时,仍然看到的是软链接所在的目录
history指令:
- history:查看已经执行过的历史
- hostory 10:查看已经执行过的10条历史
- !5:执行历史的第5条命令
时间日期类
data指令:
- date: 显示当前时间
- date “+%Y”: 显示当前年份
- date “+%m”:显示当前月份
- date “+%d” :显示当前天
- date "+%Y-%m-%d %H:%M:%S"
- date -s 字符串时间:设置系统当前时间
cal指令:
- cal[选项]:显示当前日历
- cal 2022:显示2022年日历
搜索查找命令
find命令:
- find [搜索范围] [选项]
- / -name<查询方式>:按照指定的文件名查找对应的文件
- -user<用户名>:查找属于指定用户的文件
- -size<文件大小>:查找指定文件大小的文件(+n大于,-n小于,n等于,单位有k,M,G)
locate指令:
可以快速得进行文件的路径定位。locate指令利用实现建立的系统中所有文件名和路径的locate数据库实现快速定位给定的文件。locate指令无需遍历整个系统文件,查询速度较快。为了保证查询结果的准确度,管理员必须定期的更新locate时刻
- locate 搜索文件
- 特别说明:由于locate指令基于数据库的查询。所以在第一次运行之前,需要使用updatedb指令创建locate数据库。
which指令:
- which 指令符:可以查看指定所在的文件目录,比如:which ls(表示查询ls命令所在的目录)
grep指令和管道符号|:
- grep [选项] 查找内容 源文件
- -n:显示匹配的行号
- -i:忽略字符的大小写
- 两种写法:
- grep -n "hello" /home/hello.txt
- cat /home/hello.txt | grep -n "hello"
压缩和解压类
gzip/gunzip指令:
-
gzip 文件:压缩文件,将文件压缩为*.gz
-
gunzip 文件:解压文件,将文件解压,去掉.gz
zip/unzip指令:
- zip [选项] xxx.zip : 压缩文件
- -r :递归压缩,即压缩目录
- unzip [选项] xxx.zip :解压文件
- -d <文件目录>:指定文件解压后存放的位置
tar指令:
tar指令是打包指令,最后打包的文件是.tar.gz文件
-
tar [选项] xxx.tar.gz 打包内容
-
-c:产生.tar打包文件
-
-v:显示详细信息
-
-f:指定压缩后的文件名
-
-z:打包同时压缩
-
-x:解包.tar文件
-
例如:
- 压缩多个文件:tar -zcvf mytarFile.tar.gz file1.txt file2.txt
- 压缩文件夹:tar -zcvf mytarDir /home
- 解压到当前目录:tar -zxvf xxx.tar.gz
- 解压到指定文件夹:tar -zxvf /home/myhome.tar.gz -C /opt/tmp
组管理和权限管理
在linux中的每个用户必须属于一个组,不能独立存在组外。在linux中每个文件有所有者、所在组、其他组的概念。
- 所有者
- 一般为文件的创建者,谁创建了文件,就自然成为该文件的所有者
- 查看文件的所有者:ls -ahl
- 修改文件的所有者:chown 用户名 文件名
- 所在组
- 当用户创建文件了之后,该文件就自然而然是用户所在组的文件
- 查看文件所在组:ls -ahl
- 修改文件所在组:chgrp 组名 文件名
- 其他组
- 除文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组
- 改变用户所在的组
- usermod -g 新组名 用户名
- usermod -d 用户组 用户名 :改变该用户登录的初始目录。特别说明:用户需要有进入到新目录的权限。
权限管理基本介绍:
-
ls -l 中显示的内容如下:
-rwxrw-r— 1 root root date abc
0-9位说明:
- 第0位:确定文件类型(l,-,d,b,c)
- l:链接
- d:目录
- c:字符设备文件,鼠标、键盘等
- b:块设备,硬盘等
- -:文件
- 第1-3位:确定所有者(该文件拥有者)拥有的该文件权限
- 第4-7位:确定所属组拥有的该文件权限
- 第8-10位:确定其他用户拥有的该文件权限
- 第0位:确定文件类型(l,-,d,b,c)
-
rwx作用到文件:
- r:表示可读:可以读取、查看
- w:表示可写:可以修改,但是不能删除,删除需要有该文件所在目录的写权限
- x:表示可执行。如果是有执行文件,有权限执行。
-
rwx作用到目录:
- r:表示可读:可以读取,ls查看目录内容
- w:表示可写:可以修改,对目录内创建+删除+重命名目录
- x:表示可执行:可以进入该目录
-
在linux里,可以是用数字代表相应的权限
- r:4
- w:2
- x:1
-
其他说明:
-rwxrw-r— 1 root root 12123 Feb 2 09:39 abc
-
1:如果是文件,表示硬连接数;如果是目录,表示子目录数+文件数
-
root:用户
-
root:组
-
12123:文件大小(字节),如果是文件夹,显示4096字节
-
Feb 2 09:39 :最后的修改时间
-
abc:文件名
-
修改权限:
- 第一种方式:
- +,—,=变更权限
- u:所有者,g:所在组,o:其他人 , a:所有人
- chmod u=rwx,g=rw,o=r 文件/目录名
- chmod o+w 文件/目录名
- chmod a-x 文件/目录
- 第二种方式:
- 通过数字变更权限
- r=4 w=2 x=1 任意的组合的合都是唯一的结果
- chmod 751 文件/目录名
修改文件所在者:
- chown newower 文件/目录名 改变所有者
- chown newower:newgroup 文件/目录 改变所有者和所在组
- -R:如果是目录,则使其下所有子文件或者目录都递归生效
修改文件所在组:
- chgrp newgroup 文件/目录
- -R:如果是目录,则使其下所有子文件或者目录都递归生效
定时任务调度
crond任务调度:
- 基本步骤:
- 设置任务调度文件:/etc/crontab
- 设置个人任务调度。执行crontab -e命令
- 输入任务到调度文件,例如:*/1 * * * * ls -l /etc/ > /tmp/to.txt 命令
- 参数说明:
- 第一个 * :一个小时当中的第几分钟 0-59
- 第二个 * :一个天当中的第几个小时 0-23
- 第三个 * :一个月当中的第几天 1-31
- 第四个 * :一年当中的第几个月 1-12
- 第五个 * :一周当中的星期几 0-7(0和7都表示星期天)
- 特殊符号说明:
- * :代表任何时间。
- ,:代表不连续的时间。2,3,4
- - :代表连续的时间。 1-3
- */n :代表每隔多久执行一次。
- crontab [选项]
- -r :删除当前用户的所有crontab任务
- -l:查询crontab任务
- -e:编辑crontab定时任务
- -r:终止任务调度
- service crond restart:重启任务调度
at定时任务:
-
基本介绍:
-
at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行。
-
默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。
-
at命令是一次性定时任务计划,执行完一个任务后不再执行此任务了。
-
在使用at命令的时候,一定要保证atd进程的启动,可以使用相关指令来查看
ps -ef |grep atd 可以检测atd是否在运行
-
-
at [选项] [时间]
-
Ctrl + D 结束at命令的输入
-
at时间定义方法:
- 接受在当天的hh:mm (小时:分钟) 式的时间指定。假如该事件已过去,那么久放在第二天执行。例如:04:00
- 使用midnight(深夜)、noon(中午)、teatime(饮茶时间,一般是下午四点)等比较模糊的词语来指定时间。
- 采用12小时计时制,即在时间后面加上AM或PM来说明是上午还是下午。例如:12PM
- 指定命令执行的具体日期,指定格式为month day (月日)或mm/dd/yy(月/日/年)或dd:mm:yy(日.月.年),指定日期必须跟在指定时间的后面。例如:04:00 2021-03-1
- 使用相对计时法。指定格式为:now+count time-units,now就是当前时间,time-units是时间单位,这里能够是minutes、hours、days、weeks。count是时间的数量。例如:now + 5minutes
- 直接使用today、tomorrow来指定完成命令的时间
-
at命令选项:
- -m:当指定的任务被完成后,将给用户发送邮件,即使没有标准输出
- -I(大写的i):atq的别名
- -d:atrm的别名
- -v:显示任务将被执行的时间
- -c:打印任务的内容到标准输出
- -V:显示版本信息
- -q <队列>:使用指定的队列
- -f <文件>:从指定文件读入任务而不是从标准输入读入
- -t <时间参数>:以时间参数的形式提交给要运行的任务
-
atq查看没有执行的任务
-
atrm 编号:删除指定编号的任务
磁盘分区、挂载
linux分区:
-
原理:
- 对于linux来说,无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,linux中每个分区都是用来组成整个文件系统的一部分。
- linux采用一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。
-
硬盘说明:
-
linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘。
-
对于IDE硬盘,驱动标识符为"hdx~",其中"hd"表名分区所在设备的类型,这里是指IDE硬盘。"x"为盘号(a为基本盘,b为基本从属盘,c是辅助主盘,d是辅助从属盘),
“ ~”表示分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。例,hda3表示第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。
-
对于SCSI硬盘则标识为"sdx~",SCSI硬盘使用"sd"来表示分区所在设备的类型的。其他和IDE硬盘表示方法一样。
-
-
查看所有设备挂载情况:
- lsblk 或 lsblk -f
-
案例:给linux系统增加一块硬盘
-
虚拟机添加硬盘:
- 在vmware里面添加新的硬盘给虚拟机,重启
-
分区:
-
分区命令fdisk /dev/sdb
-
m:显示命令列表
-
p:显示磁盘分区 同fdisk -l
-
n:新增分区
-
d:删除分区
-
w:写入并退出
-
q:不修改退出
-
说明:开始分区后输入n,新增分区,然后选择p,分区类型为主分区。两次回车默认剩余全部空间。最后输入w写入分区并退出,若不保存输入p
-
-
格式化磁盘:
- 分区命令:mkfs -t ext4 /dev/sdb1
-
挂载:
- mount 设备名称 挂载目录
- umount 设备名称 或 umount 挂载目录
- 注意:用命令行挂载后重启会失效
-
设置自动挂载:
- 永久挂载:通过修改/etc/fstab实现挂载,添加完成后 执行mount -a 即刻生效
-
磁盘情况查询:
-
查询系统整体磁盘使用情况:
- df -h
-
查询指定目录的磁盘占用情况:
- du -h:默认为当前目录
- -s :指定目录占用大小汇总
- -h:带计量单位
- -a:含文件
- --max-depth=1:子目录深度为1
- -c:列出明细的同时,增加汇总值
工作使用命令:
-
统计/opt文件夹下文件的个数:
ls -l /opt | grep "^-" | wc -l
-
统计/opt文件夹下目录的个数:
ls -l /opt | grep "^d" | wc -l
-
统计/opt文件夹下文件的个数,包括子文件夹里的:
ls -lR /opt | grep "^-" | wc -l
-
统计/opt文件夹下目录的个数,包括子文件夹里的:
ls -lR /opt | grep "^d" | wc -l
-
以树状显示目录结构tree目录,注意,如果没有tree,则使用yum install tree:
tree /home
网络配置
NAT网络原理:
查看网络IP和网关:
-
查看windows环境中的VMnet8网络配置:ipconfig
-
查看linux的网络配置:ifconfig
-
测试主机之间网络连通性:
- ping 目的主机(测试当前服务器是否可以连接目的主机)
linux网络环境配置:
-
第一种方式:(自动获取)
- 说明:登录后,通过界面的来设置自动获取ip
- 特点:linux启动后会自动获取ip
- 缺点:每次自动获取的ip地址可能不一样
-
第二种方式:(自定ip)
-
说明:直接修改配置文件来指定IP,并可以连接到外网(程序员推荐)
-
编辑核心文件:vi /etc/sysconfig/network-scripts/ifcfg-ens33
-
要求:将ip地址配置为静态的,比如:ip地址为192.168.200.130
-
配置修改:
BOOTPROTO=static #IP地址 IPADDR=192.168.200.130 #网关 GATEWAY=192.168.200.2 #域名解析器 DNS1=192.168.200.2
-
重启网络服务或者重启系统生效:service network restart、reboot
-
-
ifcfg-ens33文件配置说明:
DEVUCE=eth0 #接口名(设备、网卡) HWADDR=00:0C:2x:6x:0x:xx #MAC地址 TYPE=Ethernet #网络类型 UUID = #随机ID #系统启动的时候网络接口是否有效(yes/no) ONBOOT=yes #IP的配置方法[none|static|bootp|dhcp] (引导时不使用协议|静态分配ip|BOOT协议|DHCP协议)
设置主机名和hosts映射:
- 设置主机名:
- 为了方便记忆,可以给linux系统设置主机名,也可以根据需要修改主机名
- 指令hostname:查看主机名
- 修改文件在/etc/hostname文件指定
- 修改后,重启生效
- 设置hosts映射:
- windows:在C:\Windows\System32\drivers\etc\hosts文件中指定
- linux:在/etc/hosts 文件指定
- 主机名解析过程分析(Hosts、DNS)
- hosts:一个文本文件,用来记录IP和Hostname(主机名) 的映射关系
- DNS:
- DNS就是Domain Name System 的缩写,翻译过来就是域名系统
- DNS是互联网上作为域名和IP地址相互映射的一个分布式数据库
- 应用实例:用户在浏览器输入了www.baidu.com
- 浏览器先检查浏览器缓存中有没有该域名解析IP地址,有就先调用这个IP完成解析;如果没有检查操作系统DNS解析器缓存,如果有直接返回IP完成解析。两个缓存,可以理解为本地解析器缓存。
- 一般来说当电脑第一次成功访问某一个网站后,在一定时间内,浏览器或操作系统会缓存它的IP地址(DNS解析记录)。如在cmd中输入:
- ipconfig /displaydns :DNS域名解析缓存
- ipconfig /flushdns :手动清理DNS缓存
- 如果本地解析器缓存没有找到对应映射,检查系统中hosts文件中有没有配置对应的域名IP映射,如果有,则就完成解析并返回。
- 如果本地DNS解析器缓存和hosts文件中均没有找到对应的IP,则到域名服务DNS进行解析域。
进程管理
基本介绍
- 在linux中,每个执行的程序都称为一个进程。每一个进程都分配一个ID号(pid,进程号)。
- 每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前屏幕上可以进行操作的。后天进程则是实际在操作,但由于屏幕上无法看到进程,通常使用后台方式运行。
- 一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,直到关机才结束。
- top可以查看前台进程
显示系统执行的进程
ps 查看系统中,正在执行的进程状况
a:显示当前的所有进程信息
u:以用户的格式显示进程信息
x:显示后台进程运行的参数
PID:进程识别号
TTY:终端机号
TIME:此进程所消耗 CPU 时间
CMD:正在执行的命令或进程名
各信息含义
- System V展示风格
- USER:用户名称
- PID:进程号
- %CPU:进程占用CPU的百分比
- %MEN:进程所用物理内存的百分比
- VSZ:进程占用的虚拟内存大小(单位:KB)
- RSS:进程占用的物理内存大小(单位:KB)
- TT:终端名称,缩写
- STAT:进程状态,其中S-睡眠,s-表示该进程是会话的先导程序,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等
- STARTED:进程的启动时间
- TIME:CPU时间,即进程使用CPU的总时间
- COMMAND:启动进程所用的命令和参数,如果过长会被截断
父子进程
ps -ef 全格式显示当前所有的进程
e:显示所有进程
f:全格式
各信息含义
- 是BSD风格显示
- UID:用户ID
- PID:进程ID
- PPID:父进程ID
- C:CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高
- STIME:进程启动时间
- TTY:完成的终端名称
- TIME:CPU时间
- CMD:启动进程所用的命令和参数
终止进程
kill WAIT 通过进程号来杀死进程
killall WAIT 通过进程名称来杀死进程,也支持通配符,这在系统因过载太大而变得很慢时很有用
-9:强行杀死
kill -9 bash WAIT 关闭终端
查看进程数
pstree 更加直观的来看进程信息
p:显示进程的PID
u:显示进程的所属用户
服务管理
- 服务(service)本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其他程序的请求,比如(mysqld,sshd,防火墙等),因此我们又称为守护进程。
基本管理操作
service WAIT start/stop restart/reload/status 服务基本的管理操作
systemctl start/stop restart/reload/status WAIT 系统版本七之后,服务基本的管理操作
service 指令管理的服务在 /etc/init.d 查看
查看服务名
方式一 setup 查看全部的系统服务
方式二 ls -l /etc/rc.d/init.d 看到 service 指令管理的全部
服务器运行级别
- 系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
- 单用户工作状态,root权限,用于系统维护,禁止远程登录
- 多用户状态(没有NFS),不支持网络
- 完全的多用户状态(有NFS),登录后进入控制台命令行模式
- 系统未使用,保留
- x11控制台,登录后进入图形GUI模式
- 系统正常关闭并重启,默认运行级别不能设置为6,否者不能正常启动。
开机流程:
chkconfig指令:
- 通过chkconfig命令可以给服务的各个运行级别设置自启动/关闭
- chkconfig指令管理的服务在/etc/rc.d/init.d查看
- chkconfig重新设置服务后自启动或关闭,需要重启机器reboot生效
chkconfig --list 查看服务
chkconfig 服务名 --list 查看指定服务
chkconfig --level 5 服务名 on/off 修改服务级别
systemctl管理指令:
- systemctl指令管理的服务在/usr/lib/systemd/system 查看
sytemctl start/stop/restart/status WAIT 基本服务操作
systemctl设置服务开机的自启动状态(CentOS7之后,默认只有3和5,是同时修改3,5)
systemctl list-unit-files 查看开机启动服务状态
systemctl enbale 服务名 设置服务开机自启动
systemctl disable 服务名 关闭服务开启自启动
systemctl is-enabled 服务名 查询某个服务是否是自启动的
- 访问测试的端口指令:telnet 192.168.200.130 111
firewall防火墙
查看firewall服务状态
systemctl status firewall
// 如果出现Active:active(running)表示服务开启
//如果Active:inActice(dead)表示停止
查看firewall的状态
firewall-cmd --state
// 如果出现running表示正在运行
开启、重启、关闭 firewall.service服务
service firewalld start/restart/stop/status
或者
systemctl start/restart/stop/status firewalld
查看防火墙规则:当前端口情况和内部规则
firewall-cmd --list-all
查询、开放、关闭端口
firewall-cmd --query-port=8080/tcp // 查询端口是否开放
firewall-cmd --permanent --add-port=80/tcp // 开放80端口
firewall-cmd --permanent --remove-port=8080/tcp // 移除端口
firewall-cmd --reload // 重启防火墙(修改配置后要重启防火墙)
参数解释:
- firewall-cmd:linux提供的操作firewall的一个工具
- —permanent:表示设置为持久
- —add-port:表示添加的端口
防火墙
基本操作
service iptables status/stop/start/restart // 查看/停止/启动/重启
chkconfig iptables off // 永久关闭防火墙
chkconfig iptables on // 永久关闭后重启
开启端口
vim /etc/sysconfig/iptables
//加入下面代码
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
保存退出后重启防火墙:service iptables restart
动态监控进程
查看系统网络情况netstat
netstat -anp
an:按一定顺序排列输出
p:显示进程被谁调用
netstat -tln 查看所有服务和端口号
netstat -tunlp 查看占用进程pid
动态进程监控top
top -d WAIT 每隔几秒更新。默认是三秒
top -i 不显示闲置或者僵死的进程
top -p WAIT 监控指定 ID 的进程的状态
交互指令:
p:以CPU使用率排序 .默认
M:以内存的使用率排序
N:以PID排序
q:退出
监视特定用户:输入 u 回车 再输入用户名
终止特定的进程:输入 k 回车 再输入要结束的进程的 ID
- top与ps命令很相似。它们都用来显示正在执行的进程。top与ps最大的不同是:top在执行一段时间可以更新正在运行的进程。
RPM与YUM
rpm包管理:
-
介绍:
- rpm用于互联网下载包的打包及安装工具,它包含在某些linux分发版本中。它生成具有.RPM扩展名的文件。RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写。类似windows的setup.exe文件,这一文件格式名称虽然打上了RetHat标志,但是理念是通用的。
- linux的分发版本都有采用,可以算是公认的行业标准。
-
rpm包管理的简单查询指令
-
rpm -qa:查询所安装的所有rpm软件包
rpm -qa | grep xxx
-
rpm -q 软件包名:查询软件包是否安装
rpm -q firefox
-
rpm -qi 软件包名:查询软件包信息
rpm -ql firefox
-
rpm -qf 文件全路径名 :查询文件所属的软件包
rpm -qf /root/install.log
-
简单介绍:
- 一个rpm包名:firefox-60.2.2-1.el7.centos.x86_64
- 名称:firefox
- 版本号:60.2.2-1
- 适用操作系统:el7.centos.x86_64
- 表示centos7.x的64位系统
- 如果是i686、i386表示32系统,noarch表示通用
-
-
卸载rpm包:
- rpm -e RPM包的名称
- rpm -e --nodeps RPM包的名称:强制删除
-
安装rpm包:
- rpm -ivh RPM包全路径名称
- i=install 安装
- v=verbose 提示
- h=hash 进度条
yum包管理:
- 介绍:Yum是一个shell前端软件包管理器。基于Rpm包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有的依赖的软件包。
- yum list | grep xxx软件列表 :查询yum服务器是否有需要安装的软件
- yum install xxx :下载安装
搭建JavaEE环境
安装jdk8:
- mkdir /opt/jdk
- 通过xftp 6 上传到 /opt/jdk下
- cd /opt/jdk
- 解压 tar -zxvf jdkxx.tar.gz
- mkdir /usr/local/java
- mv /opt/jdk/jdkxx /usr/local/java
- 配置环境变量的配置文件vim /etc/profile
- export JAVA_HOME=/usr/local/java/jdkxx
- export PATH=$JAVA_HOME/bin:$PATH
- source /etc/profile [让新的环境变量生效]
安装tomcat8:
- 文件解压安置
- 进入解压目录/bin,启动tomcat ./startup/sh
- 使用firewall指令开放端口8080
安装mysql5.7:
-
新建文件夹/opt/mysql,并cd进去
-
运行wget http://dev.mysql.com/get/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
PS:CentOS7.6自带的类mysql数据库mariadb,会跟mysql冲突,需要先删除。
-
运行tar -xvf mysql-5.7.26-1.el7x86_64.rpm-bundle.tar
-
运行rpm-qa|grep mari,查询mariadb相关安装包
-
运行rpm -e —nodeps mariadb-libs,卸载
-
然后开始真正mysql,依次运行以下几条:
rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm
-
运行systemctl start mysqld.service,启动mysql
-
然后开始设置root用户密码
mysql自动给root用户设置随机密码,运行grep "password" /var/log/mysqld.log,可以看到密码
-
运行mysql -u root -p,用root用户登录,提示输入密码用上述的
-
设置root 密码 ,运行set global validate_password_policy=0,修改密码提示策略
-
set password for ’root’@’localhost’ = password(’密码’)
-
运行flush privileges,使密码设置生效
Shell编程
Shell介绍:
- linux运维工程师在运行服务器集群管理时,需要编写Shell程序来进行服务器管理。
- 对于JavaEE和Python程序员来说,工作的需要,会要求你编写一些Shell脚本进行程序或者服务器的维护,比如编写一个定时备份数据库的脚本。
- Shell是一个命令行解释器,它为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
Shell脚本的执行方式:
-
格式要求:
- 脚本以#!/bin/bash开头
- 脚本需要有可执行权限
-
脚本的常用执行方式:
- 输入脚本的绝对路径或相对路径:需要+x权限,才能执行
- sh 脚本:可以直接执行
-
shell变量介绍:
- linux Shell中的变量分为,系统变量和用户自定义变量
- 系统变量:$HOME、$PWD、$SHELL等等
- 显示当前shell中所有变量 :set
-
shell变量的定义
- 定义变量:变量名=值
- 撤销变量:unset变量
- 声明静态变量:readonly变量,注意:不能unset
- shell编程不要有非法空格
-
定义变量的规则:
- 变量名称可以由字母、数字、下划线组成,但是不能以数字开头
- 等号两侧不能有空格
- 变量名称一般习惯为大写,这是一个规范
-
将命令的返回值赋给变量
- A=`date`反引号,运行里面的命令,把结果赋给A
- A=$(date)等价于反引号
设置环境变量:
- export 变量名=变量值 :将shell变量输出为环境变量
- source 配置文件: 让修改后的配置信息立即生效
- echo $变量名 : 让修改后的配置信息立即生效
- shell脚本的多行注释: :<<! 内容 !
位置参数变量:
- 介绍:当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量。比如:./myshell.sh 100 200,就是参入了100和200参数到sh脚本中。
- 基本语法:
- $n:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十个以上的参数,需要用大括号包含,如$
- $*:代表命令行中所有的参数,把所有的参数看成一个整体
- $@:代表命令行中所有的参数,把每个参数区别对待
- $#:代表命令行中所有参数的个数
预定义变量:
- 介绍:就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
- 基本语法:
- $$:当前进程的进程号
- $!:后台运行的最后一个进程的进程号
- $?:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个进程正确执行’;如果这个变量的值非0(具体是哪个数,由命令自己来决定),证明上一个命令执行不正确。
运算符:
- 基本语法:
- $((运算式))或$[运算式] 或者 expr m + n
- 注意expr 运算符间要有空格,如果希望将expr的结果赋给某个变量,使用``
- expr \*,/,% 乘,除,模
条件判断:
-
基本语法:[ condition ]:condition前后都要有空格
- 非空返回true,可使用$?验证,(0为true,>1为false)
- 例如:
- [ hspEdu ] :返回true
- [ ]:返回false
- [ condition ] && echo OK || echo notok 前面条件满足,才执行后面的条件
-
if判断:
- if [ 条件判断式 ]; then c程序 fi 或者 if[ 条件判断式 ] then 程序 elif[条件判断式] then 程序 fi
-
case语句:
case $变量名 in "值1") echo("1") ;; "值2") echo("2") ;; *) echo("其他") ;; esac
-
for循环:
-
方式一:for 变量 in 值1 值2 值3…
for i in "$@" do 代码 done
-
方式二:for (( 初始值; 循环控制条件; 变量变化 ))
for(( i=1; i<=$1; i++)) do 代码 done
-
-
while循环:
-
while [ 条件判断式 ] :条件判断式有空格,while后面有空格
while [ $1 -gt $2 ] do 代码 done
-
-
基本条件规则:
- = :字符串比较
- -lt :小于
- -le :小于等于
- -eq:等于
- -gt:大于
- -ge:大于等于
- -ne:不等于
- -r :有读的权限
- -w:有写的权限
- -x:有执行的权限
- -f:文件存在并且是一个常规的文件
- -e:文件存在
- -d:文件存在并是一个目录
read读取控制台输入:
-
基本语法:read(选项)(参数)
-
-p:指定读取值时的提示符
-
-t:指定读取值时等待的时间(秒),如果没有在指定时间内输入,就不在等待了
read -p "请输入一个数NUM1=" NUM1 read -t 10 -p "请输入一个数NUM2=" NUM2
函数:
-
系统函数:
-
basename:返回完整路径最后/的后面的部分,常用于获取文件名
- basename [filepath] [suffix],去掉后缀
-
dirname:返回完整路径最后/前面的部分,常用于返回路径
-
例如:
basename /usr/local/mysql/test.txt test.txt basename /usr/local/mysql/test.txt .txt test dirname /usr/local/mysql/test.txt /usr/local/mysql
-
-
自定义函数:
-
[ function ] funname[()]
-
调用:funname [值]
function getSum(){ SUM=${$1+$2} echo "$SUM" } read n1 read n2 getSum $n1 $n2
-
-
案例:定时备份数据库
-
需求分析:
- 每天凌晨2:30备份数据库school到/data/backup/db
- 备份开始和备份结束能够给出相应的提示信息
- 备份后的文件要求以备份时间为文件名,并打包成.tar.gz的形式。
- 在备份的同时,检查是否有10天前备份的数据库文件,如果有就删除
-
思路分析图:
-
代码:
#备份目录
BACKUP=/data/backup/db
#当前时间
DATETIME=$(date +%Y-%m-%d_%H%M%S)
#数据库地址
HOST=localhost
#数据库用户名
DB_USER=root
#数据库密码
DB_PW=pjx108839
#备份的数据库名
DATABASE=school
#创建备份目录,如果不存在,就创建
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"
#备份数据库
mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/$DATATIME.sql.gz
#将文件处理成.tar.gz
cd ${BACKUP}
tar -zcvf $DATETIME.tar.gz ${DATETIME}
#删除对应的备份目录
rm -rf ${BACKUP}/${DATETIME}
#删除10天前的备份文件
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "备份数据库${DATABASE}成功~~~"
- 启动定时调度:
30 2 * * * /usr/sbin/mysql_db-backup.sh
Ubuntu系统
Ubuntu介绍:Ubuntu是一个以桌面应用为主的开源GNU/Linux操作系统,Ubuntu是基于GNU/Linux,支持x86、amd64(即x64)和ppc架构,由全球化的专业开发团队Canonical Ltd打造的。
专业的Python开发者一般会选择Ubuntu这款Linux系统作为生产平台。
温馨提示:
Ubuntu和CentOS都是基于GNU/Linux内核的,因此基于使用和CentOS几乎是一模一样的,它们的各种指令可以通用,只是界面和预安装软件有所差别。
设置Ubuntu支持中文:
- 进入界面找到字体设置图标应用,下载中文,然后将简体中文拖拽到最上面即可
Ubuntu的root用户:
-
介绍:安装ubuntu成功后,都是普通用户权限,并没有最高root权限,如果需要使用root权限的时候,通常会在命令前面加上sudo。
我们一般会使用su命令来直接切换到root用户的,但是如果我们没有给root设置初始密码,就会出现认证错误。所以,我们只要给root用户设置一个初始密码就好。
-
给root用户设置密码并使用:
- 输入sudo passwd命令,设定root用户密码
- 设定root密码成功后,输入su命令,登录,就能切换成root了、提示符$代表一般用户,提示符#代表root用户
- 输入exit命令,退出root并返回一般用户
Ubuntu下开发python:
-
安装好Ubuntu后,默认就已经安装好Python的开发环境。
-
一开始默认安装的tiny简化版,我们需要的是标准版的vim,所以需要先卸载本机的vi,然后再安装vim
- 卸载vim:sudo apt-get remove vim-common
- 安装vim:sudo apt-get install vim
-
使用python3来运行.py文件
APT软件管理:
-
原理图:
类似于CentOS的yum包管理机制,在/etc/apt/sources.list文件中存储服务器地址路径等,间接地获取外国服务器的文件。
Ubuntu软件操作的相关命令:
-
sudo apt-get remove vim
-
sudo apt-get install vim
-
sudo apt-cache show vim //获取软件信息
-
sudo apt-get update //更新源
-
sudo apt-get source package //下载该包的源代码
apt-cache search # ------(package 搜索包) apt-cache show #------(package 获取包的相关信息,如说明、大小、版本等) sudo apt-get install # ------(package 安装包)sudo apt-get install # -----(package - - reinstall 重新安装包) sudo apt-get -f install # -----(强制安装?#"-f = --fix-missing"当是修复安装吧...) sudo apt-get remove #-----(package 删除包) sudo apt-get remove - - purge # ------(package 删除包,包括删除配置文件等) sudo apt-get autoremove --purge # ----(package 删除包及其依赖的软件包+配置文件等(只对6.10有效,强烈推荐)) sudo apt-get update #------更新源 sudo apt-get upgrade #------更新已安装的包 sudo apt-get dist-upgrade # ---------升级系统 sudo apt-get dselect-upgrade #------使用 dselect 升级 apt-cache depends #-------(package 了解使用依赖) apt-cache rdepends # ------(package 了解某个具体的依赖?#当是查看该包被哪些包依赖吧...) sudo apt-get build-dep # ------(package 安装相关的编译环境) apt-get source #------(package 下载该包的源代码) sudo apt-get clean && sudo apt-get autoclean # --------清理下载文件的存档 && 只清理过时的包 sudo apt-get check #-------检查是否有损坏的依赖
修改apt-get的服务器源:
-
备份原来的服务器源文件:sudo cp /etc/apt/sources.list /etc/apt/source.list.bak
-
清空原来的服务器源文件:echo ’’ > /etc/apt/sources.list
-
修改为新的服务器源:使用vim编辑器,将镜像复制进来
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释 deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
-
更新服务器源:sudo apt-get update
SSH远程登录:
- 原理图:
-
ssh介绍:SSH为Secure Shell的缩写,由IETF的网络工作小组(Network Working Group)所制定;SSH为建立在应用层和传输层基础上的安全协议。
SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性协议。常用于远程登录,几乎所有UNIX/Linux平台都可运行SSH。
使用SSH服务,需要安装相应的服务器和客户端。客户端和服务器的关系:如果,A机器想要被B机器远程控制,那么,A机器需要安装SSH服务器,B机器需要安装SSH客户端。
和CentOS不一样,Ubuntu默认没有安装SSHD服务(使用netstat 指令查看:apt install net-tools),因此,我们不能进行远程登录。
-
windows连接Ubuntu:
-
netstat -anp | more :查看服务,发现没有sshd服务的22端口
-
安装ssh和启用:sudo apt-get install openssh-server
执行完上面的指令,在当前的linux系统上就安装了SSH服务端和客户端。
-
service sshd restart :启动sshd服务。
-
-
linux连接到另一台linux系统:
在创建服务器集群时,会使用到此技术
- ssh 用户名@IP
- 使用ssh访问,如访问出现错误。可查看是否有该文件~/.ssh/known_ssh尝试删除该文件解决。
- 登录:exit 或 logout
CentOS8
安装CentOS8:和7类似
日志管理
基本介绍:
- 日志文件是重要的系统信息文件,其中记录了很多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息。
- 日志对于安全来说也很重要,它记录了系统每天发生的各种事情,通过日志来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。
- 日志是用来记录重大事件的工具
常用的日志命令:
日志服务管理rsyslogd:
- CentOS7.6日志服务是rsyslogd,CentOS6.x日志服务是syslogd。rsyslogd功能更强大。rsyslogd的使用、日志文件的格式,和syslogd服务兼容的。
- 查询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 nunix copy 主机之间相关的通信
- local 1-7:自定的日志设备
-
日志级别分为:
- debug:有调试信息的,日志通信最多
- info:一般信息日志,最常用
- notice:最具有重要性的普通条件的信息
- warning:警告级别
- err:错误级别,阻止某个功能或模块不能正常工作的信息
- crit:严重级别,阻止整个系统或整个软件不能正常工作的信息
- alert:需要立刻修改的信息
- emerg:内核崩溃等重要信息
- none:什么都不记录
-
日志文件格式:
- 事件产生的时间
- 产生事件的服务器的主机名
- 产生事件的服务名或程序名
- 事件的具体信息
-
自定义日志:
- 在/etc/rsyslog.conf中添加一个日志文件/var/log/pking.log,当有事件发送时,该文件会接收到信息并保存。
- 可以自定义设置*.*的日志文件格式
日志轮替:
-
基本介绍:日志轮替就是把旧的文件移动并改名,同时建立新的空文件夹,当旧日志超过一定范围时,就会进行删除。
-
日志轮替文件命名:
- CentOS7使用logrotate进行日志轮替管理,要想要改变日志轮替文件名字,通过/etc/logrotate.conf配置文件中
dateext
参数; - 如果配置文件中有
dateext
参数,那么日志会用日期作为文件的后缀。这样日志文件名不会重复,也就不需要日志文件的改名,只需要指定保存日志个数,删除多余的日志文件即可。 - 如果配置文件中没有
dateext
参数,日志文件就需要进行改名了。当第一次进行日志轮替时,当前的secure
日志会自动改名为secure.1
,然后创建secure
日志,用来保存新的日志。一直轮替下去。
- CentOS7使用logrotate进行日志轮替管理,要想要改变日志轮替文件名字,通过/etc/logrotate.conf配置文件中
-
logrotate配置文件:/etc/logrotate.conf为logtate的全局配置文件
- weekly:进行轮换的间隔
- rotate 4:保留几份日志文件
- create:创建新的文件夹
- dateext:以日期命名日志文件
- compress:日志文件是否压缩
include /etc/logrotate.d/:包含该目录所有的子配置文件。
单独设置,优先级更高:
/var/log/wtmp{ monthly create 0664 root utmp //权限,所有者,组 minsize 1M //最小轮替文件大小是1MB。 rotate 1 //仅保留一个日志佩芬 }
-
参数说明:
daily:按天轮替 weekly:按周轮替 monthly:按月轮替 rotate 数字:保留的日志文件个数 compress:日志轮替时,旧的日志文件压缩 ceate mode owner group:建立新日志文件的信息 mail address:当日志轮替时,输出内容通过邮件发送到指定的邮件地址 missingok:如果日志不存在,则忽略该日志的警告信息 notifempty:如果日志文件为空,则不进行日志轮替 minsize 大小:日志轮替的最小值 size 大小:日志只有到达指定大小才进行日志轮替 dateext:使用日期作为日志轮替文件的后缀 sharedscripts:在此关键词之后的脚本只执行一次 prerotate/endscript:在日志轮替之前执行的脚本 postrotate/endscript:在日志轮替之后执行的脚本
-
日志轮替机制原理:
日志文件之所以可以在指定的时间备份日志,是依赖系统定时任务。在/etc/cron.daily/目录,就会发现这个目录中是由logrotate文件(可执行),logrotate通过这个文件依赖定时任务执行的。
-
内存日志:
-
journalctl:可以查看内存日志
-
journalctl -n 3:查看最新3条
-
journalctl —since 19:00 00until 19:10:10 :查看起始时间到结束时间的日志可加日期
-
journalctl -p err:报错日志
-
journalctl -o verbose:日志详细内容
-
journalctl _PID=1234 _COMM=sshd:查看包含这些参数的日志
-
也可以使用管道指令进行筛选
-
注意:journalctl查看的是内存日志,重启清空
-
定制自己的linux
-
linux启动流程:
- 首先linux要通过自检,检查硬件设备有没有故障
- 如果有多块启动盘的话,需要再BIOS中选择启动磁盘
- 启动MBR中的bootloader引导程序
- 加载内核文件
- 执行所有进程的父进程、先启程序systemd
- 欢迎界面
- 在linux启动的流程中,加载内核文件时关键文件:
- kernel文件
- initrd文件
-
制作min linux思路:
- 在现有的linux系统上加上一块硬盘/dev/sdb,在硬盘上分两个分区,一个是/boot,一个是/,并将其格式化。需要明确的是,现在加的这个硬盘在现有的linux系统中是/dev/sdb,但是,当我们把东西全部设置好时,要把这个硬盘拔出,放在新的系统上,此时,就是/dev/sda
- 在/dev/sdb硬盘上,将其打造成独立的linux系统,里面的文件是需要拷贝进去的
- 作为能独立运行的linux系统,内核是一定不能少的,要把内核文件和initramfs文件也要一起拷贝到/dev/sdb上
- 以上步骤完成,我们自制的linux就完成,创建一个新的linux虚拟机,将指定硬盘指向我们创建的硬盘,启动即可
-
操作步骤:
-
可选:取消原来硬盘挂载
lsblk /etc/fstab注释硬盘配置 fdisk /dev/sdb删除配置 d删除 w保存 umount /mnt/name 移除硬盘
-
添加新的硬盘。 注意:勾选将虚拟磁盘存储为单个文件。
-
分区新硬盘。
lsblk fdisk /dev/sdb n p +500M n w
-
分区格式化
mkfs.ext4 /dev/sdb1 mkfs.ext4 /dev/sdb2
-
创建目录,挂载新硬盘
mkdir -p /mnt/boot /mnt/sysroot mount /dev/sdb1 /mnt/boot mount /dev/sdb2 /mnt/sysroot
-
安装grub,内核文件拷贝到目标硬盘
grub2-install --root-directory=/mnt/dev/sdb 查看是否安装成功: hexdump -C -n 512 /dev/sdb cp -rf /boot/* /mnt/boot/
-
修改/mnt/boot/grub2/grub.cfg文件
修改两个boot的路径,一个root路径,前面两个是boot,后面UUID是sysroot
在UTF-8和在queit后面,添加selinux=0 init=/bin/bash
-
创建目标主机根文件系统
mkdir -pv /mnt/sysroot/{etc/rc.d,usr,var,proc,sys,dev,lib,lib64,bin,sbin,boot,srv,mnt,media,home,root}
-
拷贝需要的bash
cp /lib64/*.* /mnt/sysroot/lib64/ cp /bin/bash /mnt/sysroot/bin/
-
现在就可以创建一个新的虚拟机,然后将默认分配的硬盘去掉,执行刚刚我们的磁盘
-
如果要拷贝指令,重新进入到原来的linux系统拷贝相关的指令即可。比如:将/bin/ls 拷贝到 /mnt/sysroot/bin ,将/sbin/reboot 拷贝到 /mnt/sysroot/sbin
mount /dev/sdb2/ /mnt/sysroot/ cp /bin/ls /mnt/sysroot/bin/
-
重新启动linux系统,就可以使用了
-
linux源码
为什么要阅读linux内核:
- 作为开发人员不应该只局限在自己的领域,你设计的模块看起来很小,但是你不了解进程的调用机制,你不知道进程为什么会阻塞、就绪、执行几个状态。就很难写出优质的代码。
- 作为有追求的程序员,需要深入了解一个操作系统的底层机制,比如:linux/unix,最好是源码级别的,这样你写多线程高并发程序,包括架构,优化,算法等,高度都不一样的。至少能看几个核心的模块。
linux0.01内核源码技巧:
- linux0.01阅读需要懂C
- 阅读源码前,应该知道linux内核源码的整体分布情况。现代的操作系统一般由进程管理、内存管理、文件系统、驱动程序和网络等组成。linux内核源码的各个目录大致与此相对应。
- 在阅读方法或顺序上,有纵向与横向之分。所谓纵向就是顺着程序的执行顺序逐步进行;所谓横向,就是按模块进行。它们经常结合在一起进行。
- 对于linux启动的代码可顺着linux启动顺序一步步来阅读;对于像内存管理部分,可以单独拿出进行阅读分析。
linux0.01内核源码阅读:
-
目录:
- boot:和系统引导相关的代码
- fs:存放linux支持的文件系统代码
- include:存放linux核心需要的头文件,比如:asm,linux,sys
- init:和系统初始化相关的源码(main.c)
- kernel:和系统内核相关的源码
- lib:存放库代码
- Makefile:文件
- mm:存放内存管理相关代码
- tools:一些工具代码
-
main.c:
time_init(); //初始化运行时间 tty_init(); //tty初始化 trap_init(); //陷阱们(硬件终端向量)初始化 sched_init(); //调度程序初始化 buffer_init(); //缓冲管理初始化 hd_init(); //硬盘初始化 sti(); //所有初始化工作完后,开启中断 move_to_user_mode(); //进入到用用户模式 if (!fork()) { /* we count on this going ok */ init(); }
内核升级:
- 将CentOS系统从低版本升级到高版本内核需要考虑兼容性问题。
- 操作步骤:
- uname -a:查看当前的内核版本
- yum info kernel -q:检测内核版本,显示可以升级的内核
- yum update kernel:升级内核
- yum list kernel -q:查看已经安装的内核
- 注意点:
- 更新完了之后,需要重启,可以选择进入的内核版本,原先的内核还可以进入
linux系统备份和恢复
基本介绍:实体机无法做快照,如果系统出现异常或者数据损坏,后果严重,要重做系统,还会造成数据丢失。所以我们可以使用备份和恢复技术。
linux的备份和恢复很简单,有两种方式:
- 把需要的文件(或者分区)用tar打包就行,下次需要恢复的时候,再解压打开覆盖即可
- 使用dump和restore命令
安装dump和restore:
- yum -y install dump
- yum -y install restore
使用dump完成备份:
-
dump支持分卷和增量备份(所谓增量备份是指备份上次备份后 修改或增加过的文件,也称差异备份)。
-
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类似,但仅显示需要备份的文件
-
操作实例:
- 将/boot目录所有内容备份到/opt/boot.bak.bz2文件中,备份层级为0:dump -0uj -f /opt/boot.bak0.bz2 /boot
- 在/boot目录下拷贝一个文件,备份层级为1:dump -1uj -f /opt/boot.bak1.bz2 /boot
- 可以使用dump命令配合crontab实现无人值守备份
- cat /etc/dumpdates:查看备份时间文件
-
dump别分文件或者目录:
-
不支持增量备份,只能使用0层级来备份
-
使用dump备份 /etc这个目录:dump -0j -f /opt/etc.bak.bz2 /etc/
-
如果是重要的备份文件,比如数据区,应该将文件上传到其他服务器保存。
-
-
restore指令数据恢复:
- restore命令用来恢复已备份的文件,可以从dump生成的备份文件中恢复文件
- restore [模式选项] [选项]
- 不能混用,一次只能指定一种
- -C:使用对比模式,将备份的文件与已存在的文件相互对比
- -i:使用交互模式,在进行还原操作时,restore指令将依序询问用户
- -r:进行还原模式
- -t:查看模式,看备份文件有哪些文件
- 选项:-f 备份设备:从指定的文件中读取备份数据,进行还原操作
-
restore实例:
# restore比较模式,比较备份文件和原文件的区别 restore -C -f boot.bak1.bz2 # 和最新的备份文件的比较 #restore查看模式,看备份文件有哪些数据/文件 restore -t -f boot.bak0.bz2 #restore还原模式,如果你有增量备份,需要把增量备份也进行恢复,有几个增量备份文件,就要恢复几个,按顺序来恢复。 restore -r -f /opt/boot.bak0.bz2 #恢复到第1次备份状态 restore -r -f /opt/boot.bak1.bz2 #恢复到第2次备份状态 #restore恢复备份文件,或者整个目录的文件 restore -r- f 备份好的文件
linux可视化管理工具webmin和bt运维工具
基本介绍:Webmin是一个功能强大的基于Web的Unix/linux系统管理工具。管理员通过浏览器访问Webmin的各种管理功能并完成相应的管理操作。除了各版本的linux外还可用于:AIX、HPUX、Solaris、Unixware、Irix和FreeBSD等系统。
安装webmin和配置:
-
下载地址:Webmin
-
安装:rpm -ivh webmin-xxx-noarch.rpm
-
重置密码:
/usr/libexec/webmin/changepass.pl /etc/webmin root 密码 root是webmin的用户名,不是OS
-
修改webmin服务的端口号(默认是10000出于安全的目的)
vim /etc/webmin/miniserv.conf 将port和listen修改为其他的端口号
-
重启webmin
/etc/webmin/restart /etc/webmin/start /etc/webmin/stop
-
防火墙放开端口
firewall-cmd --zone=public --add -port =端口号/tcp --permanent #配置防火墙开放端口 firewall-cmd -reload #更新防火墙配置 firewall-cmd --zone=public --list-ports #查看已经开放的端口号
-
登录webmin:登录地址
安装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 default 再次显示安装成功的信息
linux常用指定
常用筛选统计指令:
| awk -F " " '{print $1}'
| cut -d ":" -f 1
| sort 排序
| sort -nr 从大到小
| uniq -c 统计总数
需要先sort,才能uniq -c
| grep "sshd"
| head -2 显示前两位
找回mysql的root密码:
vim /etc/my.cnf
加上:skip-grant-tables
service mysqld restart
mysql -u root -p
use mysql;
show tables;
desc user;
找到:authentication_string
update user set authentication_string=password('miam') where user='root'
flush privileges
注销:skip-grant-tables
service mysqld restart
服务和端口号:
tcpdump -i ens33 host 192.168.200.1 and port 22 >> /opt/tcpdump.log
Nginx模块:
rewrite模块,实现重写功能
access模块,来源控制
ssl模块,安全加密
ngx_http_gzip_module:网络传输压缩模块
ngx_http_proxy_module:模块实现代理
ngx_http_upstream_module:模块实现定义后端服务器列表
ngx_cache_purge:实现缓存清除
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?