Linux基础知识
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 | systemctl stop 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里面,有一部分日志是先写在内存里面的,还没有写到文件里面。如内核相关的日志是写在内存的。
特定:当重新启动的时候,内存日志就会被清空。