1. Linux操作系统基础知识

1.1 命令解析器

shell就是命令解析器,它的作用是对用户输入到终端的命令进行解析,调用对应的执行程序。

用户在终端输入命令,由shell命令解析器对命令进行解析(按照$PATH 环境变量搜索命令),解析成内核能够识别的指令,最后由内核执行命令,最后由内核执行命令,终端显示命令执行的结果给用户。

注意:shell在寻找命令的时候是按照$PATH 环境变量去寻找的,如果找到了就执行对应的命令,若找不到就报错,执行echo $PATH 环境变量的值

最外层是用户层,如Qt中的一些按钮、屏幕等,而Qt是一个框架,可以理解为是应用层,里面封装的一系列函数供用户使用,可以使用Qt中的API直接跳过shell层,将其交给内核。如果通过命令来操作的话,应用层就相当于是终端

1.2 linux下主要目录

  • /bin:binary的缩写,用来存放二进制的可执行文件,如date、ls、rm、mv、cp等常shell用命令
  • /boot:存放的是linux系统启动需要的一些文件
  • /dev:用来存放硬件设备所对应的文件,如鼠标、键盘、硬盘、内存…..
    • 在linux系统中,所见皆文件
  • /etc:用来存放系统中的“配置”文件
  • /home:用来存放系统中“用户”宿主目录(家目录)的
  • /lib:存放系统使用的库文件
  • /root:系统管理员的家目录
  • /tmp:系统提供给用户使用,在程序运行中,需要保存的临时文件存储位置
  • /usr:存储用户相关的数据资源。—–> c程序中使用的头文件:/usr/include
  • /var:存放系统在工作过程中,经常发生变化的数据资源。如日志、数据库等

1.3 终端提示符格式

[root@lxx ~]#

格式为 用户名@主机名:shell工作路径$

  • $:代表当前用户为“普通用户”
  • #:代表当前用户为“root用户”(管理员)
    • 使用命令:sudo su —> 输入密度 就可以切换为root用户了
    • 使用exit命令退出当前登录的root用户

快捷键:

  • 获取历史命令:Ctrl -p相当于方向键上,Ctrl -n相当于方向键下
  • Ctrl -a:快速将光标移至行首
  • Ctrl -e:快速将光标移至行尾
  • Ctrl -d:删除光标选中字符(相当于detele键)
  • Ctrl -u:清除光标位置,到本行行首的所以命令

1.2 文本编译器vim

Vim文本编辑器,是由 vi 发展演变过来的文本编辑器,使用简单、功能强大、是 Linux众多发行版的默认文本编辑器。

1.vim的三种模式

  • 正常模式:以vim打开一个档案就直接进入了一般模式

  • 插入模式:按下i、I、o、O、A、a、r、R等任何字母进入编辑模式

  • 命令行模式:可以提供相关指令,完成读取、存盘、离开vim、显示行号等

2.快捷键使用

  • 一般模式下,拷贝当前行 yy,拷贝当前行向下5行 5yy,粘贴 p

  • 一般模式下,删除当前行 dd,删除当前行向下5行 5dd

  • 在文件中找到某个单词,在命令行下输入 /查找的关键字,然后回车即可,输入n继续查找下一个需要查找的关键字

  • 设置文件的行号,取消文件的行号,分别为[命令行下:set nu 和:set nonu]

  • 在一般模式下,使用快捷键到文档的最末尾 G,和最首行 gg

  • 在一个文件中输入”hello”(编辑模式),在一般模式下,撤销这个动作 u

  • 在一般模式下,将光标移动到 20 shift+g

1.2操作常识

1.关机/重启命令

  • 立刻进行关机:shutdown -h now

  • 1分钟后会关机:shutdown -h 1

  • 立刻重新启动计算机:shutdown -r now

  • 关机,作用和上面一样:halt

  • 立刻重新启动计算机:reboot

  • 把内存数据同步到磁盘:sync

2.用户登录或促销

  • 登录普通用户abc,登录后再用su - root 命令切换到系统管理员

  • 再提示符下输入logout 即可注销用户(root下可退回到abc,abc下可退出系统)

  • logout只能在图形运行级别有效,在运行级别3下无效

3.新建用户

  • 添加一个用户milan,默认该用户的家目录在/home/milan(创建成功后,会自动创建和用户同名的家目录):useradd milan
  • 也可以通过useradd -d 指定目录 新的用户名,给新创建的用户指定家目录

    • useradd -d /home/test/ king :创建一个用户king,它的家目录在home的test下
  • 给用户设置/修改密码(要用自己账号或root账号):passwd 用户名

  • pwd:显示当前用户所在哪个目录下

4.删除用户

  • 删除用户,但是保留家目录:userdel 用户名

  • 删除用户以及家目录:userdel -r 用户名

5.查询用户信息:id 用户名

6.切换用户名(高权限到低权限不用密码,低权限到高权限要密码):su - 用户名

7.查看当前用户:who am i

8.组的介绍

  • 所有者:一般为文件的创建者,谁创建了该文件,就自然的成为了该文件的所有者

    • 查看文件下的所有者:ls -ahl
  • 组的创建

    • 创建一个组family:groupadd family

    • 创建一个用户fox,并放入到family组里:useradd -g family fox

  • 修改文件所在组:chgrp 组名 文件名

  • 改变用户所在组:usermod -g 新组名 用户名

9.用户组(类似于角色,系统可以对共性/权限的多个用户进行统一管理)

  • 新增组:groupadd 组名

  • 删除组:groupdel 组名

  • 增加用户时直接加上组:uesradd -g 用户组 用户名

  • 修改用户的组:usermod -g 用户组 用户名

10.用户和组相关文件

  • /etc/passwd文件:用户的配置文件,记录用户的各种信息

    • 每一行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
  • /etc/shadow文件:口令的配置文件

    • 每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
  • /etc/group文件:组的配置文件,记录Linux包含的组的信息

    • 每行含义:组名:口令:组标识符:组内用户列表

11.指令的运行级别

  • 运行级别说明:

    • 0:关机

    • 1:单用户(找回丢失密码)

    • 2:多用户状态没有网络服务

    • 3:多用户状态有网络服务

    • 4:系统未使用保留给用户

    • 5:图形界面

    • 6:系统重启

  • 切换不同的运行级别:init 数字

  • 查看当前的运行级别:systemctl get-default

  • 设置默认级别:systemctl set-default multi-user.target(3)或graphical.target(5)

    • 注:当在Xshell中将默认级别设置为3过后,进行reboot,那么在虚拟机中重启后将是级别3,而不是级别5

2.命令指令

2.1帮助指令

1.man:获得帮助信息——->用法:man ls(要退出的话直接输入q)

2.help:获得shell内置目录的帮助信息

注:在Linux下,隐藏文件是以.开头的,选项可以组合使用,如ls -al,或ls -al /root

2.2文件目录类指令

1.pwd指令:显示当前工作目录的绝对路径

2.ls指令:显示目录和文件

  • -a:显示当前目录所有的文件和目录,包括隐藏的;

  • -l:以列表的方式显示信息

3.cd指令:切换到指定目录

  • cd ~或者cd回到直接的家目录(root回到/root);

  • cd ..回到当前目录的上一级目录;

4.mkdir指令:用于创建目录

  • home下创建一个dog目录:mkdir /home/dog

  • home下创建多级目录:mkdir -p /home/animal/tiger

5.rmdir指令:删除目录

  • 删除home下的dog空目录:rmdir /home/dog

  • 删除home下的animal非空目录:rm -rf /home/animal

6.touch指令:创建空文件

  • 在home目录下,创建一个空文件hello.txt:touch /home/hello.txt

7.cp指令:拷贝文件到指定目录

  • 将/home/hello.txt拷贝到/home/bbb目录下:cp /home/hello.txt /home/bbb

  • 递归复制整个文件夹,如将/home/bbb整个目录,拷贝到/opt:cp -r /home/bbb /opt

注:cp -r /home/bbb /opt强制覆盖不提醒

8.rm指令:移除文件或目录

  • -r:递归删除整个文件夹;

  • -f:强制删除不提示;

    • 将/home/hello.txt删除:rm /home/hello.txt

    • 递归删除(不提示)整个文件夹/home/bbb:rm -rf /home/bbb

9.mv指令:移动文件与目录或重命名

  • 将/home/dog.txt文件重命名为pig.txt(同一个目录下):mv /home/dog.txt /home/pig.txt

  • 将/home/dog.txt文件移动到/root目录下(不同目录下):mv /home/dog.txt /root

  • 将/home/dog.txt文件移动到/root目录下并重命名为pig.txt:mv /home/dog.txt /root/pig.txt

  • 移动整个目录,如将 /opt/bbb移动到/home下:mv /opt/bbb /home

10.cat指令:查看文件内容,但不能修改(-n可以显示行号)

  • 查看/etc/profile文件内容,并显示行号:cat -n /etc/profile

注:cat只能浏览文件,而不能修改文件,为了浏览方便,一般会带上管道指令|more进行交互

11.more指令

是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more有若干快捷键(交互的指令),如空白健(向下翻一页)、Enter(向下翻一行)等

  • 浏览文件内容:more /etc/profile

12.less指令:分屏查看文件内容,功能与more类似,但比more指令更强大,

  • 浏览文件内容:less /opt/杂文.txt

12.echo指令:输出内容到控制台

  • echo $PATH 或者echo $HOSTNAME
    • 输出hello:echo “hello”

13.head指令:用于显示文件的开头部分内容,默认情况下head指令显示文件的前10行内容

  • 查看/etc/profile文件的前10行:head /etc/profile

  • 查看/etc/profile文件的前5行:head -n 5 /etc/profile

14.tail:指令用于显示文件的尾部的内容,默认情况下head指令显示文件的尾10行内容

  • 查看/etc/profile文件的尾10行:tail /etc/profile

  • 查看/etc/profile文件的尾5行:tail -n 5 /etc/profile

  • 补:tail指令可以实时地追踪文档的所有变化:tail -f /home/hello.txt(Ctrl+c退出监控)

15.>指令和>>指令

  • ls -l >文件:列表的内容写入文件(a.txt)中—>会覆盖

  • ls -al >>文件:列表的内容追加到文件(aa.txt)的末尾

  • cat 文件1 >文件2:将文件1的内容覆盖到文件2

    • echo “内容”>>文件:追加

    • 将/home目录下的文件列表写入到/home/info.txt中(覆盖):ls -l /home > /home/info.txt(如果没有该文件,会自动创建)

    • 将当前日历信息追加到/home/mycal文件中:cal >> /home/mycal

16.ln指令:ln 命令用于创建链接。具体而言,ln 命令可以用来创建硬链接或符号链接(软链接)。软链接类似于windows里的快捷方式

  • 在/home目录下创建一个软链接myroot,连接到/root目录:ln -s /root /home/myroot

  • 删除软链接myroot:rm /home/myroot

  • 创建硬链接:使用 ln 命令时,如果不指定任何选项,默认情况下会创建硬链接。硬链接是指多个文件名指向同一个索引节(inode),它们在文件系统中实际上指向相同的数据块。

  • 如:创建一个名为 b.c 的硬链接,指向与 a.c 相同的文件数据:ln a.c b.c

17.history指令:查看已经执行过历史命令,也可以执行历史指令

  • 显示所有的历史指令:history

  • 显示最近使用过的10个指令:history 10

  • 执行历史编号为5的指令:!5

2.3 时间日期类指令

1.date指令:显示当前日期

  • 显示当前年份、月份、具体哪一天:date +%Y、date +%m、date +%d

  • 显示年月日时分秒:date “+%Y-%m-%d %H:%M%S”

2.cal指令:查看日历

  • 显示当前日历:cal

  • 显示1999年日历:cal 1999

2.4 搜索查找类指令

1.find指令:将从指定目录向下递归遍历其各个子目录,将满足条件的文件或目录显示在终端

  • 按文件名查找:根据名称查找/home目录下的hello.txt:find /home -name hello.txt

  • 按拥有者查找:查找/opt目录下,用户名称为nobody的文件:find /opt -user nobody

  • 按文件大小查找:查找整个linux系统下大于200M的文件(+n大于 -n小于 n等于,单位K, M,G):find / -size +200M

2.locate指令:可以快速定位文件路径,locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件(无需遍历整个文件系统)

注:由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库

  • 利用locate指令快速定位hello.txt文件所在目录:locate hello.txt

3.which指令:可以查看某个指令在哪个目录下,比如ls指令在哪个目录下(which ls)

4.grep指令和管道符号|:过滤查找,表示将前一个命令的处理结果输出传递给后面的命令处理

  • -n:显示匹配及其行号;-i:忽略字母大小写;
    • 在hello.txt文件中,查找”yes”所在行,并显示行号: cat /home/hello.txt | grep -n “yes” 或者 grep -n “yes” /home/hello.txt

2.5压缩和解压类指令

市面上有非常多的压缩格式

  • zip格式:Linux、Windows、MacOS常用

  • 7zip和rar:Windows常用

  • tar和gzip:Linux、MacOS常用

1.gzip/gunzip指令:gzip用于压缩文件,gunzip用于解压文件

  • gzip压缩,将/home下的hello.txt文件进行压缩:gzip /home/hello.txt

  • gunzip解压,将/home下的hello.txt.gz文件进行解压:gunzip /home/hello.txt.gz

2.zip/unzip指令:zip用于压缩文件,unzip用于解压的。这个在项目打包发布中很有用

  • -r:递归压缩,即压缩目录
    • 将/home下的所有文件/文件夹进行压缩成myhome.zip:zip -r myhome.zip /home
  • -d<目录>:指定解压后文件的存放目录
    • 将myhome.zip解压到/opt/tmp目录下:unzip -d /opt/tmp /home/myhome.zip

3.tar指令:是打包指令,最后打包后的文件是.tar.gz文件

  • 压缩多个文件,将/home/pig.txt和/home/cat.txt压缩成pc.tar.gz:tar -zcvf pc.tar.gz /home/pig.txt /home/cat.txt

  • 将/home的文件夹压缩成myhome.tar.gz:tar -zcvf myhome.tar.gz /home

  • 将pc.tar.gz解压到当前目录:tar -zxvf pc.tar.gz

  • 将myhome.tar.gz解压到/opt.tmp2目录下:tar -zxvf /home/myhome/.tar.gz -C /opt/tmp2

3.Linux系统操作

3.1权限

1.权限的基本介绍

  • 第0位确定文件的类型(d、-、l、c、b)

    • d是目录,相当于windows的文件夹

    • -是普通文件

    • l是链接,相当于windows的快捷方式

    • c是字符设备文件、比如鼠标、键盘

    • b是块设备,比如硬盘

  • 第1-3位确定所有者拥有该文件的权限

  • 第4-6位确定所属组拥有该文件的权限

  • 第7-9位确定其他用户拥有该文件的权限

2.rwx权限详解(难)

  • rxw作用到文件

    • r代表可读:可以读取,查看

    • w代表可写:可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件

    • x代表可执行:可以被执行

  • rwx作用到目录

    • r代表可读:可以读取,ls查看目录内容

    • w代表可写:可以修改,对目录内创建创建+删除+重命名目录

    • x代表可执行:可以进入该目录

3.修改权限

chmod:可以修改文件或者目录的权限

  • 第1种方式:用+、-、=变更权限,其中u是所有者、g是所有组、o是其他人、a是所有人(u、g、o的总和)

    • 给abc文件的所有者读写执行的权限,给所在组读执行权限,给其它组读执行权限:chmod u=rwx,g=rx,o=rx abc

    • 给abc文件的所有者除去执行的权限,增加组写的权限:chmod u-x,g+w abc

    • 给abc文件的所有用户添加读的权限:chmod a+r abc

  • 第2种方式:通过数字变更权限(r=4,w=2,x=1)

    • chmod u=rwx,g=rx,o=x 文件目录名 相当于 chmod 751 文件目录名

    • 将/home/abc.txt文件的权限修改成rwxr-xr-x,使用给数字的方式实现:chmod 755 /home/abc.txt

4.修改所有者和所在组

  • 修改文件/目录所有者:chown 用户名 文件名

    • 将hello.txt文件的所有者从root改为lxx:chown lxx /home/hello.txt
  • 修改文件/目录 改变所有者和所在主:chown 用户名:所在主 文件名

    • -R:如果是目录,则使其下所有子文件或目录递归生效

    • 将/home/test目录下所有的文件和目录的所有者都修改成tom:chown -R tom /home/test

  • 修改文件所在组:chgrp 组名 文件/目录

    • 将/home/abc.txt文件的所在组修改成shaolin:chgrp shaolin /home/abc.txt

    • 将/home/test.txt目录下所有的文件和目录的所在组都修改成shaolin:chgrp -R shaolin /home/test

3.2crond任务调度

任务调度:是指系统在某个时间执行的特定的命令或程序

  • -e:编辑crontab定时任务

  • -l:查询crontab任务

  • -r:删除当前用户所有的crontab任务

1.将/etc下的文件每各一分钟打印一次,到/home/to.txt文件中:

  • crontab -e:进入编辑任务的页面,然后按i进入编辑模式

  • */1 * * * * ls -l /etc > /home/to.txt:在编辑模式下输入指令,按esc退出编辑模式,输入:wq保存退出

2.每隔1分钟,将当前日期和日历都追加到/home/mycal文件中:

  • a:输入vim /home/my.sh ,写入内容date >> /home/mycal和cal >> /home/mycal;

  • b:给my.sh增加执行权限,chmod u+x /home/my.sh;

  • c:crontab -e 写入*/1 * * * * /home/my.sh;

3.每天凌晨2点将mysql数据库testdb,备份到文件中:

  • 0 2 * * * mysqldump -u root -p密码 数据库 > /home/db.bak

4.crond相关指令

  • crontab -r:终止任务调度

  • crontab -l:列出当前有哪些任务调度

  • service crond restart:重启任务调度

3.3 at定时任务

1.注意事项:

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

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

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

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

2.表示方式

  • ps -ef | grep atd:可以检测atd是否在

  • at命令格式:at 选项 时间

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

  • 2天后的下午5点执行/bin/ls /home:at 5pm + 2days 回车,输入/bin/ls /home ctrl+d(2次)

  • 查看系统中还没有执行的工作任务:atq

  • 明天17点钟,输出时间到指定文件内/root/date100.log:at 5pm tomorrow 回车,date > /root/date100.log ctrl+d(2次)

  • 2分钟后,输出时间到指定文件内/root/date200.log:at now + 2minutes 回车,date > /root/date200.log ctrl+d(2次)

  • 删除已经设置好的案例:atrm 编号

3.4Linux分区

Linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘。对于IDE硬盘,驱动器标识符为hdx~,hd表明分区所在设备的类型,波浪线代表分区。如hda3表示为第一个IDE硬盘上的第三个主分区;hdb2表示为第二个IDE硬盘上的第二个主分区。(1到4表示主分区或扩展分区,从5开始就是逻辑分区)

对于SCSI硬盘,标识符为sdx~,sd来表示分区所在设备的类型,其余和IDE硬盘一样。

  • 查看所有设备的挂载情况:lsblk或者lsblk -f

1.虚拟机增加硬盘后挂载

  • 分区命令:fdisk /dev/sdb

  • 涉及m 的相关命令列表

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

    • n 新增分区

    • d 删除分区

    • w 写入并退出

2.步骤(对sdb进行分区):

  • 在虚拟机菜单中,选择[设置],然后设备列表下面点[添加],选择[硬盘],然后一路下一步,完成后需要重启系统

  • 对sdb分区,输入fdisk /dev/sdb —-> 获取指令,输入m —–> 添加一个新的分区,输入n —–>按主分区来分,输入p —-> 选择分区数,输入1 —–> 然后2次回车 —-> 相当于保存并退出,输入w(q表示上述操作不保存)

  • 格式化磁盘:mkfs -t ext4 /dev/sdb1 (其中ext4是分区类型)

  • 挂载:将一个分区与一个目录联系起来

3.mount 设备名称 挂载目录

  • 如sdb1挂载到根目录下的newdisk:mount /dev/sdb1 /newdisk

4.取消挂载点:umount 设备名称/挂载目录

  • 如取消sdb1在目录newdisk上的挂载点:umount /dev/sdb1 或者 umount /newdisk

注:用命令行进行挂载,重启后会失效

5.永久挂载:通过修改/etc/fstab实现挂载,添加完成后 执行mount -a 即刻生效(不需要重启)

6.磁盘情况查询

  • -s:指定目录占用大小汇总

  • -h:带计量单位

  • -a:含文件(目录)

  • –max-depth=1:子目录深度

  • -c:列出明细的同时,增加汇总值

    • 如查询/opt目录下的磁盘占用情况,深度为1:du -h –max-depth=1 /opt

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

    • 查询指定目录的磁盘占用情况(默认为当前目录):du -h

7.磁盘情况-工作实用指令

  • 统计/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 文件名

4.网路配置

4.1环境配置

1.ping测试当前服务器是否可以连接目的主机:ping ip(目的主机IP)

2、wget是非交互式的文件下载器,可以在命令行内下载网络文件

  • -b是可选,表示后台下载,并将日志写入到当前工作目录的wget-log文件

  • url是下载链接

    • 语法:wget -b url

3、linux网络环境配置

第1种方法(自动获取)

  • 说明:登录后,通过界面的来设置自动获取ip;特点:linux启动后会自动获取ip;缺点:每次自动获取的ip地址可能不一样;

第2种方法(指定ip)

  • 说明:直接修改配置文件来指定IP,并可以连接到外网(程序员推荐)
  • 编辑:vim /etc/sysconfig/network-scripts/ifcfg-ens33
  • 要求:将ip地址配置为静态的,比如:ip地址为192.168.93.39

修改后需要停止和启动网卡:

1
2
systemctl stop network
systemctl start network

4.设置主机名和hosts映射

为了方便记忆,可以给linux系统设置主机名,也可以根据需要修改主机名

  • 方法1:修改文件在/etc/hostname,终端输入:vim /etc/hostname 回车打开文件后在里面修改主机名即可。修改后,重启生效

  • 方法·2:直接终端输入:hostnamectl set-hostname 修改主机名 回车完成后重启

  • 查看主机名指令:hostname

2.设置hosts映射

windows系统:

  • 在C:\Windows\System32\drivers\etc\hosts文件(该文件是记录主机与ip映射的文件)指定即可:

    • 如:192.168.88.93 lxx

    • 完成后就可以在windows下通过ping lxx来ping通

  • 如果因为权限问题遇到hosts文件不能打开解决办法:

    • 1.可以先拖到桌面,修改后再拖回etc下

    • 2.可以通过管理员身份打开记事本,然后再记事本里面找到该文件,可以直接修改。

linux系统:

  • 在/etc/hosts文件指定:
    • 如:vim /etc/hosts 回车打开该文件
    • 192.168.200.1(vmnet8的ip) windows的主机名

完成后就可以在linux下通过 ping windows主机名 来ping通

3.主机名解析过程分析(hosts、DNS)

hosts是一个文本文件,用来记录IP和主机名的映射关系;DNS就是domain name system的缩写,翻译过来就是域名系统;是互联网上作为域名和IP地址相互映射的一个分布式数据库

应用实例1:用户在浏览器输入了www.baidu.com

  • 浏览器先检查浏览器缓存中有没有该域名解析IP地址,有就先调用这个IP完成解析;如果没有,就检查DNS解析器缓存(本地的),如果有就直接返回IP完成解析。这两个缓存可以理解为本地解析器缓存;

  • 如果本地解析器缓存没有找到对应的映射,检查系统中hosts文件中有没有配置对应的域名IP映射,如果有,则完成解析并返回;

  • 如果本地DNS解析器缓存和hosts文件中均没有找到对应的IP,则到域名服务DNS(互联网的)进行解析域;

一般来说,当电脑第一次成功访问某一网站后,在一定时间内,浏览器或操作系统会缓存它的IP地址(DNS解析记录)。在cmd窗口可以输入

应用实例2:访问www.baidu.com的流程如下:

  • 先查看本机的记录(私人地址本),Windows看:C:\Windows\System32\drivers\etc\hosts;Linux看:/etc/hosts

  • 没有找到的话,再联网去DNS服务器(如114.114.114.114,8.8.8.8)寻找/访问

在windows系统

  • 查看DNS解析器缓存(本地的):ipconfig /displaydns

  • 手动清理DNS缓存:ipconfig /flushdns

在hosts文件夹下如果被人修改,当访问百度网站时,会跳入到别人的ip地址

5.网络知识

5.1进程基本介绍

在Linux中,每个执行的程序都称为一个进程,每一个进程都分配一个ID号(pid,进程号)。每个进程都可能以两种方式存在的,前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的(占用屏幕,直到退出才能进行其他操作);后台进程则是实际在操作,但由于屏幕上无法看到的进程。一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,直到关机才结束。

1.程序与进程的关系:程序在没有运行的时候就是一段代码,一旦运行了,就会被加载到内存,然后它就是进程了

2.ps命令是用来查看目前系统中,有哪些正在执行,以及它们执行的状况(可以不加任何参数,也可以混合使用)

  • ps -a:显示当前终端的所有进程信息;

  • ps -u:以用户的格式显示进程信息;

  • ps -x:显示后台进程运行的参数;

  • 查看系统正在执行进程的状况:ps -aux

3.对ps指令的一些指标介绍

USER:进程执行用户;PID:进程号;%CPU:占用cpu的百分比;%MEM:占用物理内存的百分比;VSZ:占用虚拟内存的大小;RSS:占用物理内存的大小;TTY:终端机号;STAT:运行状态;START:执行的开始时间;TIME:占用的cpu时间;COMMAND:进程名,启动该进程所用的命令和参数,如果过长会被截断显示

例如:查看有没有sshd服务:ps -aux | grep sshd ———–> 回车后只看第一条

在STAT进程状态中,其中S-表示睡眠,s-表示该进程是会活的先导进程,N-表示进程拥有比普通进程优先级更低的优先级,R-表示正在运行,D-表示短期等待,Z-表示僵死进程(进程已经死掉,但内存未被释放,需要定时进行清除),T-表示被跟踪或者被停止等等

4.终止进程kill和killall

若是某个进程执行一半需要停止时,或是已消耗了很大的系统资源时,此时可以考虑停止该进程。使用kill或killall命令来完成此项任务

  • 通过进程号杀死\终止进程:kill 进程号

  • 通过进程名杀死\终止进程:killall 进程名

    • 注意:这种方式会杀掉下面所有的子进程
  • -9:表示强迫进程立即停止(有些情况下,因为系统保护机制下,会忽略kill和killall)

例如:当远程通过fox用户连接linux系统后

  • 踢掉fox非法登录用户:kill 5024

小例子:

  • 终止远程登录服务sshd(其它设备就连不上linux系统了):kill 1433

  • 重启sshd服务:/bin/systemctl start sshd.servic

  • 终止多个gedit(打开两个文件夹):killall gedit 回车后会关闭打开的文件夹

  • 强制杀掉一个终端: 先通过ps -aux | grep bash 查看要杀掉的终端进程号;然后终端输入:kill -9 bash对应的进程号

5.查看进程树pstree(只输入pstree,查看得不清楚)

-p:显示进程的PID(进程号);-u:显示进程的所属用户;

案例1:以树状的形式显示进程的pid:pstree -p

案例2:以树状的形式显示进程的用户:pstree -u

6.服务(service)管理

服务本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其他程序的请求,比如(mysqld,sshd,防火墙等),因此又称为守护进程,是linux中非常重要的知识点

1.service管理指令

service 服务名 [start|stop|restart|reload|status]

  • 案例:使用service指令关闭和启动network:service network stop;service network start

2.chkconfig指令

通过chkconfig命令可以给服务的各个运行级别设置自 启动/关闭

查看服务:chkconfig –list 需要过滤的话可以在后面加|grep xxx

修改运行级别是自 启动/关闭:chkconfig –level 3 network on/off

案例:把network在3运行级别,关闭自启动以及开启:

  • chkconfig –level 3 network off

  • chkconfig –level 3 network on

使用细节:chkconfig重新设置服务后自启动或关闭,需要重启机器reboot生效。

3.systemctl管理指令

  • 查看及修改某个服务状态:systemctl [start|stop|restart|reload|status] 服务名(这种方式修改的状态是临时生效,当重启系统后,还是回归以前对系统的设置)

  • systemctl指令管理的服务在/usr/lib/systemd/system查看

  • 查看服务开机启动状态,grep可以进行过滤:systemctl list-unit-files [| grep 服务名]

设置服务开机启动:systemctl enable 服务名(永久生效)

关闭服务开机启动:systemctl disable 服务名(永久生效)

查询某个服务是否是自启动的:systemctl is-enabled 服务名

查看当前防火墙状况,关闭防火墙和重启防火墙:

  • systemctl status firewalld;systemctl stop firewalld

4、打开或者关闭指定端口

在真正的生成环境,往往需要将防火墙打开,但问题来了,如果把防火墙打开,那么外部请求数据包就不能跟服务器监听端口通讯。这时,需要打开指定端口,比如80、22、8080等。

查看端口号对应的协议:netstat -anp

5.firewall指令

打开端口:firewall-cmd –permanent –add-port=端口号/协议

关闭端口:firewall-cmd –permanent –remove-port=端口号/协议

完成后,重新载入才能生效:firewall-cmd –reload

查询端口是否开放:firewall-cmd –query-port=端口号/协议

namp可以查看端口占用情况(yum -y install nmap)

可以看到:本机(127.0.0.1)上有4个端口现在被程序占用

6.动态监控进程

top与ps命令很相似,它们都用来显示正在执行的进程。top与ps最大的不同之处,在于top在执行一段时间可以更新正在运行的进程

基本语法:top [选项]

  • -d 秒数:指定top命令每隔几秒更新,默认是3秒

  • -i:使top不显示任何闲置或者僵死进程

  • -p:通过指定监控进程ID来仅仅监控某个进程的状态

案例:指定top命令每隔5秒更新:top -d 5

7.交互操作说明(在top界面使用)

  • P:以cpu使用率排序,,默认就是此项

  • M:以内存的使用率排序

  • N:以PID排序

  • q:退出top

案例:监视特定用户,比如我们监控fox用户:

  • 在top(查看执行进程的)界面,按u,然后输入用户名,回车;

案例:终止指定的进程,比如结束fox登录:

  • 在top(查看执行进程的)界面,按k,输入要结束进程的PID号(fox登录后,bash进程的PID号),最后输入9,表示强制结束;

8.netstat查看系统网络情况

基本语法:netstat [选项]

  • -an:按一定顺序排列输出
  • -p:显示对应的进程

案例:查看服务名为sshd的服务信息:netstat -anp | grep sshd

检测主机连接命令ping:是一种网络检测工具,它主要是用检测远程主机是否正常,或是两部主机间的网线或网卡故障;

环境变量PATH:在前面提出的问题中,我们说无论当前的工作目录是什么,都能执行/user/bin/cd这个程序,这个就是借助环境变量中,PATH这个项目的值来做的

7.下载包

1.rpm包的管理

rpm用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,类似windows的setup.exe。

查询已安装的rpm列表: rpm -qa | grep xxx

  • 举例:查看当前系统,是否已经安装了firefox:rpm -qa | grep firefox 或 rpm -q firefox

查询软件包信息:rpm -qi 软件包名

  • 举例:查询火狐信息:rpm -qi firefox

查询软件包的位置及其包含的文件:rpm -ql 软件包名

  • 举例:查询火狐的位置及其包含的文件:rpm -ql firefox

查询文件所属的软件包:rpm -qf 文件全路径名

  • 举例:查询/etc/passwd所属的软件包:rpm -qf /etc/passwd

卸载rpm包:rpm -e RPM包的名称

  • 案例:删除firefox包:rpm -e firefox

  • 注意:有些包卸载后会对其它依赖的包产生错误信息,删除时系统会提醒,强制删除可以加–nodeps;如rpm -e –nodeps 软件包名

安装rpm包:rpm -ivh RPM包全路径名称

  • i=install:安装
  • v=verbose:提示
  • h=hash:进度条

2.yum

Yum是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所以依赖的软件包

  • 查询yum服务器是否有需要安装的软件:yum list | grep 软件名

  • 安装指定的yum包:yum install 软件名

案例:使用yum的方式来安装firefox:yum list | grep firefox ; yum install firefox

8.日志

8.1日志介绍

日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等

日志对于安全来说也很重要,它记录了系统每天发生的各种事情,通过日志来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。可以这样理解,日志是用来记录重大事件的工具

1./var/log 目录就是系统日志文件的保存位置,系统常用的日志(一般用cat来查看):

案例:使用root用户通过xshell登录,第一次使用错误的密码,第二次使用正确的密码登录,看看在日志文件/var/log/secure里有没有记录相关信息。

  • 先清空secure文件里的内容,后面查看更方便(在log目录下):echo ‘’ > secure

  • 退出输入错误密码,再输入正确密码后:cat secure

2.日志管理服务

在配置文件/etc/rsyslog.conf里面记录了我们的日志服务程序rsyslogd管理或者维护的相关日志以及放在哪个文件里。日志管理很重要,需要保证Linux的rsyslogd服务是启动状态以及是自启动

案例:查询Linux中的rsyslogd服务是否启动:pa aux | grep “rsyslog” | grep -v “grep”

注意:-v表示不包含后面括号里面的那一行(反向匹配)

案例:查询rsyslogd服务的自启动状态:systemctl list-unit-files | grep rsyslog

3.配置文件(重要):/etc/rsyslog.conf

案例:查看一下/var/log/secure日志,这个日志中记录的是用户验证和授权方面的信息,来分析如何查看

案例(自定义一个日志):在/etc/rsyslog.conf中添加一个日志文件/var/log/hsp.log,当有事件发送时(比如sshd服务相关事件),该文件会接收到信息并保存

  • vim /etc/rsyslog.conf ——————–>打开配置文件

> /var/log/hsp.log ———————–>创建文件hsp.log

重启后:cat /var/log/hsp.log | grep sshd —————–>打开这个文件只查看sshd服务的

注意:上面的*.*表示所有类型的日志以及所有类型的级别

4.日志轮替

日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除。/etc/logrotate.conf:是全局的日志轮替策略/规则,当然可以单独给某个日志文件指定策略。

说明:也可以把某个日志文件的轮替规则,写到/etc/logrotate.d目录下,比如bootlog

案例:在/etc/logrotate.conf进行配置,或者直接在/etc/logrotate.d下创建/var/log/hsp.log日志的轮替文件hsplog编写boot.log日志的轮替文件中内容

  • vim /etc/logrotate.d/hsplog ———>建立日志的轮替文件

5.日志轮替的机制

日志轮替之所以可以在指定的时间备份日志,是依赖系统定时任务。在/etc/cron.daily目录,就会发现这个目录中是有logrotate文件(可执行),logrotate通过这个文件依赖定时任务执行的

crond后台程序每天都执行logrotate程序,logrotate程序会去读取我们写好的策略(/etc/logrotate.conf里面的轮替策或/etc/logrotate.d目录下的轮替规则)。rsyslogd只管写日志,不管轮替,轮替工作是由logrotate完成,当满足轮替规则时,进行移动、改名或删除。

6、内存日志

在Linux里面,有一部分日志是先写在内存里面的,还没有写到文件里面。如内核相关的日志是写在内存的。

特定:当重新启动的时候,内存日志就会被清空。