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安装使用

安装步骤:

  1. 装破解版的VMWare: VMware Workstation Pro 16.1.0中文破解版(附永久激活许可证)下载-Win7系统之家 (winwin7.com)
  2. 装linux镜像文件:CentOS Mirrors List
  3. 在VM中操作安装

网络连接的三种模式:

image-20220326124839583

​ 网段:192.168.0.20 前三个相同说明在同一个网段,可以相互通信。

  • 桥接模式:虚拟系统可以和外部系统通信,但是容易造成IP冲突。虚拟机再使用一个不同于主机的同网段IP。
  • NAT模式:网络地址转换模式。虚拟系统可以和外部系统通讯,不造成IP冲突。
  • 主机模式:独立的系统。

虚拟机的克隆:

  1. 方法一:直接拷贝一份安装好的虚拟机文件
  2. 方法二:使用vmware进行克隆操作,注意,克隆前,要先关闭该linux系统

虚拟机快照:

  • 使用vmware的拍照功能即可。

虚拟机迁移删除:

  • 迁移:虚拟机文件克隆
  • 删除:删除文件夹即可

vmtools的安装:

  1. 获取到VMware Tools{从VMware的菜单栏虚拟机下的重新安装vmtools}或者{从CD/DVD选择使用VMware下面的linux.iso镜像文件挂在到虚拟linux系统中}

    image-20220326175711226

    image-20220326175746238

  2. 解压VMware-Tools.tar.gz文件

    tar -xzvf VMware-Tools.tar.gz
    
  3. 进入vmware-tools-distrib中,然后运行vmware.install.pl

    cd /vmware-tools-distrib
    ./ vmware.install.pl
    
  4. 安装成功出现: — the VMware stream

vmtools文件共享:

  1. 打开虚拟机设置,选择需要共享的文件夹地址即可。

image-20220326180445805

  1. 共享文件会出现在 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:

  1. 下载安装Xshell远程登录工具
  2. 通过远程linux系统的ip连接
  3. 输入命令进行其他操作

远程传输文件:

  1. 下载安装Xftp文件下载工具
  2. 通过远程linux系统的ip连接
  3. 进行文件的传输操作

远程登录的意义:

  1. linux服务器是开发小组共享
  2. 正式上线的项目是运行在公网

工具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的快捷键:

  1. 拷贝当前行 yy,拷贝当前行向下的5行 5yy,并粘贴( p )
  2. 删除当前行 dd,删除当前行向下的5行 5dd
  3. 在文件中查找某个单词[命令行下的 /关键词,回车查找,输入n就是查找下一个]
  4. 设置文件的行号,取消文件的行号[命令行下 :set nu或 和 :set nonu]
  5. 在一般模式下,使用快捷键到该文档的最末行[G]和最首行[gg]
  6. 在一个文件中输入"hello",在一般模式下,然后撤销这个动作 u
  7. 在一般模式下,并将光标移动到,输入 20 ,在输入 shift+g
  8. 等等

关机重启:

  • shutdown -h now 现在立即关机
  • shutdown -h 1 "hello,过一分钟后关机"
  • shutdown -r now 现在立刻重启计算机
  • halt 关机,和上面的立刻关机一样
  • reboot 重启,和上面的立刻重启一样
  • sync 把内存的数据同步到磁盘
  • 注意细节:
    1. 不管是重启系统还是关闭系统,首先要运行sync命令,把内存的数据同步到磁盘上
    2. 目前的shutdown/reboot/halt等命令底层在使用之前均调用了sync

登录注销:

  • 登录时尽量使用root账号登录,因为它是系统管理员,最大的权限,为了避免操作失误。可以利用普通用户登录,登录后再用su - 用户名命令来切换成系统管理员身份
  • 在提示符下输入logout即可注销用户
  • 使用细节:
    1. 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 要查看的文件

      image-20220326225206980

less命令:

less命令用来分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大,支持各种终端显示。less指令在显示文件内容时,并不是一次将整个文件加载出来之后显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。

  • less 要查看的文件

    image-20220326225910940

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中每个文件有所有者、所在组、其他组的概念。

  1. 所有者
    • 一般为文件的创建者,谁创建了文件,就自然成为该文件的所有者
    • 查看文件的所有者:ls -ahl
    • 修改文件的所有者:chown 用户名 文件名
  2. 所在组
    • 当用户创建文件了之后,该文件就自然而然是用户所在组的文件
    • 查看文件所在组:ls -ahl
    • 修改文件所在组:chgrp 组名 文件名
  3. 其他组
    • 除文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组
  4. 改变用户所在的组
    • 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位:确定其他用户拥有的该文件权限
  • rwx作用到文件:

    1. r:表示可读:可以读取、查看
    2. w:表示可写:可以修改,但是不能删除,删除需要有该文件所在目录的写权限
    3. x:表示可执行。如果是有执行文件,有权限执行。
  • rwx作用到目录:

    1. r:表示可读:可以读取,ls查看目录内容
    2. w:表示可写:可以修改,对目录内创建+删除+重命名目录
    3. 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任务调度:

  • 基本步骤:
    1. 设置任务调度文件:/etc/crontab
    2. 设置个人任务调度。执行crontab -e命令
    3. 输入任务到调度文件,例如:*/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定时任务:

  • 基本介绍:

    1. at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行。

    2. 默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。

    3. at命令是一次性定时任务计划,执行完一个任务后不再执行此任务了。

    4. 在使用at命令的时候,一定要保证atd进程的启动,可以使用相关指令来查看

      ps -ef |grep atd 可以检测atd是否在运行

  • at [选项] [时间]

  • Ctrl + D 结束at命令的输入

  • at时间定义方法:

    1. 接受在当天的hh:mm (小时:分钟) 式的时间指定。假如该事件已过去,那么久放在第二天执行。例如:04:00
    2. 使用midnight(深夜)、noon(中午)、teatime(饮茶时间,一般是下午四点)等比较模糊的词语来指定时间。
    3. 采用12小时计时制,即在时间后面加上AM或PM来说明是上午还是下午。例如:12PM
    4. 指定命令执行的具体日期,指定格式为month day (月日)或mm/dd/yy(月/日/年)或dd:mm:yy(日.月.年),指定日期必须跟在指定时间的后面。例如:04:00 2021-03-1
    5. 使用相对计时法。指定格式为:now+count time-units,now就是当前时间,time-units是时间单位,这里能够是minutes、hours、days、weeks。count是时间的数量。例如:now + 5minutes
    6. 直接使用today、tomorrow来指定完成命令的时间
  • at命令选项:

    • -m:当指定的任务被完成后,将给用户发送邮件,即使没有标准输出
    • -I(大写的i):atq的别名
    • -d:atrm的别名
    • -v:显示任务将被执行的时间
    • -c:打印任务的内容到标准输出
    • -V:显示版本信息
    • -q <队列>:使用指定的队列
    • -f <文件>:从指定文件读入任务而不是从标准输入读入
    • -t <时间参数>:以时间参数的形式提交给要运行的任务
  • atq查看没有执行的任务

  • atrm 编号:删除指定编号的任务

磁盘分区、挂载

linux分区:

  • 原理:

    1. 对于linux来说,无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,linux中每个分区都是用来组成整个文件系统的一部分。
    2. linux采用一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。
  • 硬盘说明:

    1. linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘。

    2. 对于IDE硬盘,驱动标识符为"hdx~",其中"hd"表名分区所在设备的类型,这里是指IDE硬盘。"x"为盘号(a为基本盘,b为基本从属盘,c是辅助主盘,d是辅助从属盘),

      “ ~”表示分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。例,hda3表示第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。

    3. 对于SCSI硬盘则标识为"sdx~",SCSI硬盘使用"sd"来表示分区所在设备的类型的。其他和IDE硬盘表示方法一样。

  • 查看所有设备挂载情况:

    • lsblk 或 lsblk -f
  • 案例:给linux系统增加一块硬盘

    1. 虚拟机添加硬盘:

      • 在vmware里面添加新的硬盘给虚拟机,重启
    2. 分区:

      • 分区命令fdisk /dev/sdb

      • m:显示命令列表

      • p:显示磁盘分区 同fdisk -l

      • n:新增分区

      • d:删除分区

      • w:写入并退出

      • q:不修改退出

      • 说明:开始分区后输入n,新增分区,然后选择p,分区类型为主分区。两次回车默认剩余全部空间。最后输入w写入分区并退出,若不保存输入p

    3. 格式化磁盘:

      • 分区命令:mkfs -t ext4 /dev/sdb1
    4. 挂载:

      • mount 设备名称 挂载目录
      • umount 设备名称 或 umount 挂载目录
      • 注意:用命令行挂载后重启会失效
    5. 设置自动挂载:

      • 永久挂载:通过修改/etc/fstab实现挂载,添加完成后 执行mount -a 即刻生效

磁盘情况查询:

  • 查询系统整体磁盘使用情况:

    • df -h
  • 查询指定目录的磁盘占用情况:

    • du -h:默认为当前目录
    • -s :指定目录占用大小汇总
    • -h:带计量单位
    • -a:含文件
    • --max-depth=1:子目录深度为1
    • -c:列出明细的同时,增加汇总值

工作使用命令:

  1. 统计/opt文件夹下文件的个数:

    ls -l /opt | grep "^-" | wc -l

  2. 统计/opt文件夹下目录的个数:

    ls -l /opt | grep "^d" | wc -l

  3. 统计/opt文件夹下文件的个数,包括子文件夹里的:

    ls -lR /opt | grep "^-" | wc -l

  4. 统计/opt文件夹下目录的个数,包括子文件夹里的:

    ls -lR /opt | grep "^d" | wc -l

  5. 以树状显示目录结构tree目录,注意,如果没有tree,则使用yum install tree:

    tree /home

网络配置

NAT网络原理:

image-20220328133415973

查看网络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映射:

  • 设置主机名:
    1. 为了方便记忆,可以给linux系统设置主机名,也可以根据需要修改主机名
    2. 指令hostname:查看主机名
    3. 修改文件在/etc/hostname文件指定
    4. 修改后,重启生效
  • 设置hosts映射:
    • windows:在C:\Windows\System32\drivers\etc\hosts文件中指定
    • linux:在/etc/hosts 文件指定
  • 主机名解析过程分析(Hosts、DNS)
    • hosts:一个文本文件,用来记录IP和Hostname(主机名) 的映射关系
    • DNS:
      1. DNS就是Domain Name System 的缩写,翻译过来就是域名系统
      2. DNS是互联网上作为域名和IP地址相互映射的一个分布式数据库
    • 应用实例:用户在浏览器输入了www.baidu.com
      1. 浏览器先检查浏览器缓存中有没有该域名解析IP地址,有就先调用这个IP完成解析;如果没有检查操作系统DNS解析器缓存,如果有直接返回IP完成解析。两个缓存,可以理解为本地解析器缓存。
      2. 一般来说当电脑第一次成功访问某一个网站后,在一定时间内,浏览器或操作系统会缓存它的IP地址(DNS解析记录)。如在cmd中输入:
        • ipconfig /displaydns :DNS域名解析缓存
        • ipconfig /flushdns :手动清理DNS缓存
      3. 如果本地解析器缓存没有找到对应映射,检查系统中hosts文件中有没有配置对应的域名IP映射,如果有,则就完成解析并返回。
      4. 如果本地DNS解析器缓存和hosts文件中均没有找到对应的IP,则到域名服务DNS进行解析域。

进程管理

基本介绍

  1. 在linux中,每个执行的程序都称为一个进程。每一个进程都分配一个ID号(pid,进程号)。
  2. 每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前屏幕上可以进行操作的。后天进程则是实际在操作,但由于屏幕上无法看到进程,通常使用后台方式运行。
  3. 一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,直到关机才结束。
  4. 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 指令管理的全部

服务器运行级别

  1. 系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
  2. 单用户工作状态,root权限,用于系统维护,禁止远程登录
  3. 多用户状态(没有NFS),不支持网络
  4. 完全的多用户状态(有NFS),登录后进入控制台命令行模式
  5. 系统未使用,保留
  6. x11控制台,登录后进入图形GUI模式
  7. 系统正常关闭并重启,默认运行级别不能设置为6,否者不能正常启动。

开机流程:

image-20220328171345753

chkconfig指令:

  1. 通过chkconfig命令可以给服务的各个运行级别设置自启动/关闭
  2. chkconfig指令管理的服务在/etc/rc.d/init.d查看
  3. 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 // 重启防火墙(修改配置后要重启防火墙)

参数解释:

  1. firewall-cmd:linux提供的操作firewall的一个工具
  2. —permanent:表示设置为持久
  3. —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:

  1. mkdir /opt/jdk
  2. 通过xftp 6 上传到 /opt/jdk下
  3. cd /opt/jdk
  4. 解压 tar -zxvf jdkxx.tar.gz
  5. mkdir /usr/local/java
  6. mv /opt/jdk/jdkxx /usr/local/java
  7. 配置环境变量的配置文件vim /etc/profile
  8. export JAVA_HOME=/usr/local/java/jdkxx
  9. export PATH=$JAVA_HOME/bin:$PATH
  10. source /etc/profile [让新的环境变量生效]

安装tomcat8:

  1. 文件解压安置
  2. 进入解压目录/bin,启动tomcat ./startup/sh
  3. 使用firewall指令开放端口8080

安装mysql5.7:

  1. 新建文件夹/opt/mysql,并cd进去

  2. 运行wget http://dev.mysql.com/get/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar

    PS:CentOS7.6自带的类mysql数据库mariadb,会跟mysql冲突,需要先删除。

  3. 运行tar -xvf mysql-5.7.26-1.el7x86_64.rpm-bundle.tar

  4. 运行rpm-qa|grep mari,查询mariadb相关安装包

  5. 运行rpm -e —nodeps mariadb-libs,卸载

  6. 然后开始真正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

  7. 运行systemctl start mysqld.service,启动mysql

  8. 然后开始设置root用户密码

    mysql自动给root用户设置随机密码,运行grep "password" /var/log/mysqld.log,可以看到密码

  9. 运行mysql -u root -p,用root用户登录,提示输入密码用上述的

  10. 设置root 密码 ,运行set global validate_password_policy=0,修改密码提示策略

  11. set password for ’root’@’localhost’ = password(’密码’)

  12. 运行flush privileges,使密码设置生效

Shell编程

Shell介绍:

  1. linux运维工程师在运行服务器集群管理时,需要编写Shell程序来进行服务器管理。
  2. 对于JavaEE和Python程序员来说,工作的需要,会要求你编写一些Shell脚本进行程序或者服务器的维护,比如编写一个定时备份数据库的脚本。
  3. Shell是一个命令行解释器,它为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。

​ Shell脚本的执行方式:

  • 格式要求:

    1. 脚本以#!/bin/bash开头
    2. 脚本需要有可执行权限
  • 脚本的常用执行方式:

    1. 输入脚本的绝对路径或相对路径:需要+x权限,才能执行
    2. sh 脚本:可以直接执行
  • shell变量介绍:

    1. linux Shell中的变量分为,系统变量和用户自定义变量
    2. 系统变量:$HOME、$PWD、$SHELL等等
    3. 显示当前shell中所有变量 :set
  • shell变量的定义

    1. 定义变量:变量名=值
    2. 撤销变量:unset变量
    3. 声明静态变量:readonly变量,注意:不能unset
    4. shell编程不要有非法空格
  • 定义变量的规则:

    1. 变量名称可以由字母、数字、下划线组成,但是不能以数字开头
    2. 等号两侧不能有空格
    3. 变量名称一般习惯为大写,这是一个规范
  • 将命令的返回值赋给变量

    1. A=`date`反引号,运行里面的命令,把结果赋给A
    2. A=$(date)等价于反引号

设置环境变量:

  1. export 变量名=变量值 :将shell变量输出为环境变量
  2. source 配置文件: 让修改后的配置信息立即生效
  3. echo $变量名 : 让修改后的配置信息立即生效
  4. shell脚本的多行注释: :<<! 内容 !

位置参数变量:

  • 介绍:当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量。比如:./myshell.sh 100 200,就是参入了100和200参数到sh脚本中。
  • 基本语法:
    • $n:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十个以上的参数,需要用大括号包含,如$
    • $*:代表命令行中所有的参数,把所有的参数看成一个整体
    • $@:代表命令行中所有的参数,把每个参数区别对待
    • $#:代表命令行中所有参数的个数

预定义变量:

  • 介绍:就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
  • 基本语法:
    • $$:当前进程的进程号
    • $!:后台运行的最后一个进程的进程号
    • $?:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个进程正确执行’;如果这个变量的值非0(具体是哪个数,由命令自己来决定),证明上一个命令执行不正确。

运算符:

  • 基本语法:
    1. $((运算式))或$[运算式] 或者 expr m + n
    2. 注意expr 运算符间要有空格,如果希望将expr的结果赋给某个变量,使用``
    3. 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
      
  • 案例:定时备份数据库

    • 需求分析:

      1. 每天凌晨2:30备份数据库school到/data/backup/db
      2. 备份开始和备份结束能够给出相应的提示信息
      3. 备份后的文件要求以备份时间为文件名,并打包成.tar.gz的形式。
      4. 在备份的同时,检查是否有10天前备份的数据库文件,如果有就删除
    • 思路分析图:

      image-20220329134920802

代码:

#备份目录
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用户设置密码并使用:

    1. 输入sudo passwd命令,设定root用户密码
    2. 设定root密码成功后,输入su命令,登录,就能切换成root了、提示符$代表一般用户,提示符#代表root用户
    3. 输入exit命令,退出root并返回一般用户

Ubuntu下开发python:

  • 安装好Ubuntu后,默认就已经安装好Python的开发环境。

  • 一开始默认安装的tiny简化版,我们需要的是标准版的vim,所以需要先卸载本机的vi,然后再安装vim

    1. 卸载vim:sudo apt-get remove vim-common
    2. 安装vim:sudo apt-get install vim
  • 使用python3来运行.py文件

APT软件管理:

  • 原理图:

    image-20220329164254127

类似于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的服务器源:

  1. 备份原来的服务器源文件:sudo cp /etc/apt/sources.list /etc/apt/source.list.bak

  2. 清空原来的服务器源文件:echo ’’ > /etc/apt/sources.list

  3. 修改为新的服务器源:使用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
    
  4. 更新服务器源:sudo apt-get update

SSH远程登录:

  • 原理图:

image-20220329173848480

  • 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:

    1. netstat -anp | more :查看服务,发现没有sshd服务的22端口

    2. 安装ssh和启用:sudo apt-get install openssh-server

      执行完上面的指令,在当前的linux系统上就安装了SSH服务端和客户端。

    3. service sshd restart :启动sshd服务。

  • linux连接到另一台linux系统:

    在创建服务器集群时,会使用到此技术

    • ssh 用户名@IP
    • 使用ssh访问,如访问出现错误。可查看是否有该文件~/.ssh/known_ssh尝试删除该文件解决。
    • 登录:exit 或 logout

CentOS8

安装CentOS8:和7类似

日志管理

基本介绍:

  1. 日志文件是重要的系统信息文件,其中记录了很多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息。
  2. 日志对于安全来说也很重要,它记录了系统每天发生的各种事情,通过日志来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。
  3. 日志是用来记录重大事件的工具

常用的日志命令:

image-20220330095357713

日志服务管理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

日志服务原理图:

image-20220330150645426

配置文件:/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,当有事件发送时,该文件会接收到信息并保存。
    • 可以自定义设置*.*的日志文件格式

日志轮替:

  • 基本介绍:日志轮替就是把旧的文件移动并改名,同时建立新的空文件夹,当旧日志超过一定范围时,就会进行删除。

  • 日志轮替文件命名:

    1. CentOS7使用logrotate进行日志轮替管理,要想要改变日志轮替文件名字,通过/etc/logrotate.conf配置文件中 dateext参数;
    2. 如果配置文件中有dateext参数,那么日志会用日期作为文件的后缀。这样日志文件名不会重复,也就不需要日志文件的改名,只需要指定保存日志个数,删除多余的日志文件即可。
    3. 如果配置文件中没有dateext参数,日志文件就需要进行改名了。当第一次进行日志轮替时,当前的secure日志会自动改名为secure.1,然后创建secure日志,用来保存新的日志。一直轮替下去。
  • 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启动流程:

    1. 首先linux要通过自检,检查硬件设备有没有故障
    2. 如果有多块启动盘的话,需要再BIOS中选择启动磁盘
    3. 启动MBR中的bootloader引导程序
    4. 加载内核文件
    5. 执行所有进程的父进程、先启程序systemd
    6. 欢迎界面
    • 在linux启动的流程中,加载内核文件时关键文件:
      1. kernel文件
      2. initrd文件
  • 制作min linux思路:

    1. 在现有的linux系统上加上一块硬盘/dev/sdb,在硬盘上分两个分区,一个是/boot,一个是/,并将其格式化。需要明确的是,现在加的这个硬盘在现有的linux系统中是/dev/sdb,但是,当我们把东西全部设置好时,要把这个硬盘拔出,放在新的系统上,此时,就是/dev/sda
    2. 在/dev/sdb硬盘上,将其打造成独立的linux系统,里面的文件是需要拷贝进去的
    3. 作为能独立运行的linux系统,内核是一定不能少的,要把内核文件和initramfs文件也要一起拷贝到/dev/sdb上
    4. 以上步骤完成,我们自制的linux就完成,创建一个新的linux虚拟机,将指定硬盘指向我们创建的硬盘,启动即可
  • 操作步骤:

    1. 可选:取消原来硬盘挂载

      lsblk
      /etc/fstab注释硬盘配置
      fdisk /dev/sdb删除配置 d删除 w保存
      umount /mnt/name
      移除硬盘
      
    2. 添加新的硬盘。 注意:勾选将虚拟磁盘存储为单个文件。

    3. 分区新硬盘。

      lsblk
      fdisk /dev/sdb
      n   
      p
      +500M
      n
      w
      
    4. 分区格式化

      mkfs.ext4 /dev/sdb1
      mkfs.ext4 /dev/sdb2
      
    5. 创建目录,挂载新硬盘

      mkdir -p /mnt/boot /mnt/sysroot
      mount /dev/sdb1 /mnt/boot
      mount /dev/sdb2 /mnt/sysroot
      
    6. 安装grub,内核文件拷贝到目标硬盘

      grub2-install --root-directory=/mnt/dev/sdb
      查看是否安装成功: hexdump -C -n 512 /dev/sdb
      cp -rf /boot/* /mnt/boot/
      
    7. 修改/mnt/boot/grub2/grub.cfg文件

      修改两个boot的路径,一个root路径,前面两个是boot,后面UUID是sysroot

      image-20220330233127141

      UTF-8和在queit后面,添加selinux=0 init=/bin/bash
      
    8. 创建目标主机根文件系统

      mkdir -pv /mnt/sysroot/{etc/rc.d,usr,var,proc,sys,dev,lib,lib64,bin,sbin,boot,srv,mnt,media,home,root}
      
    9. 拷贝需要的bash

      cp /lib64/*.* /mnt/sysroot/lib64/
      cp /bin/bash /mnt/sysroot/bin/
      
    10. 现在就可以创建一个新的虚拟机,然后将默认分配的硬盘去掉,执行刚刚我们的磁盘

    11. 如果要拷贝指令,重新进入到原来的linux系统拷贝相关的指令即可。比如:将/bin/ls 拷贝到 /mnt/sysroot/bin ,将/sbin/reboot 拷贝到 /mnt/sysroot/sbin

      mount /dev/sdb2/ /mnt/sysroot/
      cp /bin/ls /mnt/sysroot/bin/
      
    12. 重新启动linux系统,就可以使用了

linux源码

为什么要阅读linux内核:

  1. 作为开发人员不应该只局限在自己的领域,你设计的模块看起来很小,但是你不了解进程的调用机制,你不知道进程为什么会阻塞、就绪、执行几个状态。就很难写出优质的代码。
  2. 作为有追求的程序员,需要深入了解一个操作系统的底层机制,比如:linux/unix,最好是源码级别的,这样你写多线程高并发程序,包括架构,优化,算法等,高度都不一样的。至少能看几个核心的模块。

linux0.01内核源码技巧:

  1. linux0.01阅读需要懂C
  2. 阅读源码前,应该知道linux内核源码的整体分布情况。现代的操作系统一般由进程管理、内存管理、文件系统、驱动程序和网络等组成。linux内核源码的各个目录大致与此相对应。
  3. 在阅读方法或顺序上,有纵向与横向之分。所谓纵向就是顺着程序的执行顺序逐步进行;所谓横向,就是按模块进行。它们经常结合在一起进行。
  4. 对于linux启动的代码可顺着linux启动顺序一步步来阅读;对于像内存管理部分,可以单独拿出进行阅读分析。

linux0.01内核源码阅读:

image-20220331183253741

  • 目录:

    • 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系统从低版本升级到高版本内核需要考虑兼容性问题。
  • 操作步骤:
    1. uname -a:查看当前的内核版本
    2. yum info kernel -q:检测内核版本,显示可以升级的内核
    3. yum update kernel:升级内核
    4. yum list kernel -q:查看已经安装的内核
  • 注意点:
    • 更新完了之后,需要重启,可以选择进入的内核版本,原先的内核还可以进入

linux系统备份和恢复

基本介绍:实体机无法做快照,如果系统出现异常或者数据损坏,后果严重,要重做系统,还会造成数据丢失。所以我们可以使用备份和恢复技术。

linux的备份和恢复很简单,有两种方式:

  1. 把需要的文件(或者分区)用tar打包就行,下次需要恢复的时候,再解压打开覆盖即可
  2. 使用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:实现缓存清除
posted @   P-KING  阅读(74)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示