目录
1.1:操作系统概述(OS:Operating System)
1.4:Linux介绍(Linux是一个内核,有很多版本对其进行包装)
⑫history指令:查看已经执行过的历史命令,也可以执行历史指令
①find指令:将从指令目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端
①gzip/gunzip指令:前者用于压缩文件,后者用于解压
②zip/unzip指令:前者用于压缩文件,后者用于解压文件,这个在项目打包发布中有用
③tar指令:是打包指令,最后打包的文件是.tar.gz的文件
一:导论
1.1:操作系统概述(OS:Operating System)
1.1.1:分类
从资源角度看,操作系统是管理和控制计算机资源的软件。一台没有安装OS的计算机称为裸机,裸机上的资源是无法被利用的
从用户角度看,操作系统是用户与计算机之间的接口。OS屏蔽了硬件的细节,扩展了硬件的能力,为用户构造出一台更便于使用的抽象的计算机
从系统结构上看,OS是在硬件之上的第一层软件。用户和其他软件只有通过OS才可以使用硬件资源以及存储在硬件中的信息资源,在OS之上运行的是系统软件和应用软件
①系统软件:指那些为发挥硬件和系统的功能,方便使用而配备的软件,如编译系统、数据库管理系统、各种通信软件,
②应用软件:是为解决某个应用问题而设计的软件,如办公、财会、信息管理、科学计算、多媒体、游戏软件等
1.1.2:功能
①处理器管理:在多道程序之间分配和调度CPU,协调各程序的运行,并最大限度地发挥CPU的功效
②存储器管理:合理的管理有限的内存空间,为多道程序分配内存,并对各程序的内存区域进行保护,防止互相干扰。另一项功能是实现内存的扩充
③设备管理:设备(device)是实现计算机与外界交换数据的功能部件,因此也称为I/O设备。有效的管理各种设备,合理的分配给设备要求使用的程序,并控制设备完成指定的I/O操作
④文件管理:有效的组织、管理和存储文件,方便用户管理和存储文件,并对文件实施共享、保密和保护措施
⑤用户接口:向用户提供一个使用系统的友好环境,使用户可以方便有效地使用系统完成自己的工作
1.供用户在终端上使用的操作界面
命令接口
图形接口
2.供用户在编译程序时使用的系统调用界面
程序接口
1.2:使用的场所
1.3:应用领域
-个人桌面领域的应用
-服务器领域(免费、稳定、高效)(important、strongest)
-嵌入式领域(运行稳定、对网络的良好支持性、低成本、可以根据需要进行软件裁剪)
1.4:Linux介绍(Linux是一个内核,有很多版本对其进行包装)
常见的操作系统:Windows、iOS、Android、macOS、Linux、Unix
Linux吉祥物:小企鹅(Tux)
Linux创始人:Linux Torvalds
1.5:Shell(壳)
通常在图形界面中对实际体验带来差异的不是上述的不同发行版的各种终端模拟器,而是这个 Shell(壳)。有壳就有核,这里的核就是指 UNIX/Linux 内核,Shell 是指“提供给使用者使用界面”的软件(命令解析器),类似于 DOS 下的 command(命令行)和后来的 cmd.exe 。普通意义上的 Shell 就是可以接受用户输入命令的程序。它之所以被称作 Shell 是因为它隐藏了操作系统底层的细节。同样的 UNIX/Linux 下的图形用户界面 GNOME 和 KDE,有时也被叫做“虚拟 shell”或“图形 shell”。
UNIX/Linux 操作系统下的 Shell 既是用户交互的界面,也是控制系统的脚本语言。当然这一点也有别于 Windows 下的命令行,虽然该命令行也提供了很简单的控制语句。在 Windows 操作系统下,有些用户从来都不会直接使用 Shell,然而在 UNIX 系列操作系统下,Shell 仍然是控制系统启动、X11 启动和很多其它实用工具的脚本解释程序。
在 UNIX/Linux 中比较流行的常见的 Shell 有 bash、zsh、ksh、csh 等等,Ubuntu 终端默认使用的是 bash,默认的桌面环境是 GNOME 或者 Unity(基于 GNOME),但我们的环境中使用的分别是 zsh 和 xfce。
二:Linux安装
Linux需要一个环境,因此需要创建一个虚拟机,在其上安装一个centos系统来学习
(1)先安装 virtual machine 15.5
(2)再安装 Linux(CentOS 7.6/CentOS 8.1)
2.1:VMware和Centos的安装
2.1.1:VMware
VMware是一款虚拟机软件,就是通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
使用CentOS镜像文件来完成Linux系统的安装(.ios)
与物理机一样,虚拟机是运行操作系统和应用程序的软件计算机。虚拟机包含一组规范和配置文件,并由主机的物理资源提供支持。每个虚拟机都具有一些虚拟设备,这些设备可提供与物理硬件相同的功能,但是可移植性更强、更安全且更易于管理。
2.1.2:CentOS
CentOS是免费的、开源的、可以重新分发的开源操作系统。全名为“社区企业操作系统(Community Enterprise Operating System)”,提供长期免费升级和更新服务,自由使用。国内最大的服务器操作系统,现在基本所有的互联网公司后台服务器都采用CentOS
2.1.3:网络连接的三种方式
(1)桥接模式:虚拟系统可以和外部系统通讯,但是容易造成IP冲突
(2)NAT模式:网络地址转换模式,虚拟系统可以和外部系统通讯,不造成IP冲突
(3)主机模式:独立的系统
2.2:虚拟机克隆
方式一:直接拷贝一份安装好的虚拟机文件
方式二:使用VMware的克隆操作
注意:克隆时,需要先关闭Linux系统
2.3:虚拟机快照
若在使用虚拟机系统时(比如Linux),你想回到原先的某一个状态,也就是可能担心有些误操作造成系统异常,需要返回某个正常运行的状态,VMware也提供了这样的功能,就叫做快照管理
2.4:虚拟机迁移和删除
虚拟系统的本质:文件(放在文件夹中)
2.5:安装vmtools
1.vmtools安装后 ,可以让我们在Windows下更好的管理VM虚拟机
2.可以设置Windows和centos的共享文件夹
三:Linux目录结构
3.1:基本介绍
Linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录
在Linux世界里,一切皆文件
在讲 Linux 目录结构之前,你首先要清楚一点,那就是 Linux 的目录与 Windows 的目录的区别,或许对于一般操作上的感受来说没有多大不同,但从它们的实现机制来说是完全不同的
一种不同是体现在目录与存储介质(磁盘,内存,DVD 等)的关系上,以往的 Windows 一直是以存储介质为主的,主要以盘符(C 盘,D 盘...)及分区来实现文件管理,然后之下才是目录,目录就显得不是那么重要,除系统文件之外的用户文件放在任何地方任何目录也是没有多大关系。所以通常 Windows 在使用一段时间后,磁盘上面的文件目录会显得杂乱无章(少数善于整理的用户除外吧)。然而 UNIX/Linux 恰好相反,UNIX 是以目录为主的,Linux 也继承了这一优良特性。 Linux 是以树形目录结构的形式来构建整个系统的,可以理解为树形目录是一个用户可操作系统的骨架。虽然本质上无论是目录结构还是操作系统内核都是存储在磁盘上的,但从逻辑上来说 Linux 的磁盘是“挂在”(挂载在)目录上的,每一个目录不仅能使用本地磁盘分区的文件系统,也可以使用网络上的文件系统。举例来说,可以利用网络文件系统(Network File System,NFS)服务器载入某特定目录等
3.2:具体的目录结构
FHS(英文:Filesystem Hierarchy Standard 中文:文件系统层次结构标准),多数 Linux 版本采用这种文件组织形式,FHS 定义了系统中每个区域的用途、所需要的最小构成的文件和目录同时还给出了例外处理与矛盾处理
FHS 定义了两层规范:
第一层是 /
下面的各个目录应该要放什么文件数据,例如 /etc
应该放置设置文件,/bin
与 /sbin
则应该放置可执行文件等等
第二层则是针对 /usr
及 /var
这两个目录的子目录来定义,例如 /var/log
放置系统日志文件,/usr/share
放置共享数据等等
四:远程登录到Linux服务器
4.1:为什么需要远程登录?
查看IP:ifconfig
4.2:工具(SSH(Secure Shell)连接工具)
常用的SSH连接工具:
远程登录:Xshell、finalShell
文件传送:Xftp
通过SSH连接工具就可以实现从本地服务器连接到远程的Linux服务器
4.2.1:如何处理Xftp中文乱码问题?
打开属性--点击选项--将编码改为Unicode(UTF-8)
五:Vi和Vim编译器
5.1:基本介绍
Linux系统会内置Vi文本编译器
Vim具有程序编译的能力,可以看做是Vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计
5.2:三种模式
正常模式:以Vim打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中,你可以使用[上下左右]按键来移动光标,你可以使用[删除字符]或[删除整行]来处理档案内容,也可以使用[复制、粘切]来处理你的文件数据
插入模式:按下i,I,o,O,a,A,r,R等任何一个字母之后才会 进入编辑模式,一般来说按i即可
命令行模式:在这个模式中,可以提供你相关指令,完成读取、存盘、替换、离开Vim、显示行号等操作
5.3:快捷键的使用
六:开机、重启和用户登录注销
6.1:关机和重启
shutdown -h now | 立刻进行关机 |
shutdown -h 1 | 1分钟后进行关机 |
shutdown -r now | 现在重新启动计算机 |
halt(停止) | 关机 |
reboot | 现在重新启动计算机 |
sync | 把内存的数据同步到磁盘 |
注意细节:
①不管是重启系统还是关闭系统,首先要运行sync命令,把内存中的数据写到磁盘中
②目前的shutdown/reboot/halt等命令均已经在关机前进行了sync
6.2:用户登录和注销
①登录时尽量少使用root账号登录,因为它是系统管理员,有着最大的权限,为了避免操作失误,可以利用普通用户登录,登录后在使用"su - 用户名"命令来切换成系统管理员身份
②在提示符下输入logout即可注销用户
使用细节:logout注销指令在图形运行级别无效,在运行级别3下有效
七:用户管理
Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统
7.1:添加用户
基本语法:useradd 用户名
细节说明:
①当创建用户成功后,会自动的创建和用户同名的家目录
②也可以通过useradd -d 指定目录 新的用户名,给新创建的用户指定家目录
①adduser
和 useradd
的区别是什么?
useradd
只创建用户,不会创建用户密码和工作目录,创建完了需要使用 passwd <username>
去设置新用户的密码。
adduser
在创建用户的同时,会创建工作目录和密码(提示你设置),做这一系列的操作。其实 useradd
、userdel
这类操作更像是一种命令,执行完了就返回。而 adduser
更像是一种程序,需要你输入、确定等一系列操作
7.2:指定和修改密码
设置密码:passwd 用户名
pwd:显示当前用户所在的目录
7.3:删除用户
删除用户,但保留家目录:userdel 用户名
删除用户以及用户主目录:userdel -r 用户名
7.4:查询用户信息
查询用户信息:id 用户名
细节说明:当用户不存在时,返回无此用户
7.5:切换用户
在Linux操作中,如果当前用户的权限不够,可以通过 su - 指令,切换到高权限的用户
基本用法:su - 切换用户名
细节说明:
1:从权限高的用户切换到权限低的用户,不需要输入密码,反之需要
2:当需要返回到原来用户时,使用exit/logout指令
7.6:查看当前用户和登录时间
基本用法:who am i
who
命令其它常用参数
参数 | 说明 |
---|---|
-a | 打印能打印的全部 |
-d | 打印死掉的进程 |
-m | 同am i ,mom likes |
-q | 打印当前登录用户数及用户名 |
-u | 打印当前登录用户登录信息 |
-r | 打印运行等级 |
7.7:用户组
概念:类似于角色,系统可以对有共性的多个用户进行统一的管理
新增组:
指令:groupadd 组名
删除组:
指令:groupdel 组名
添加用户时直接加上组
指令:useradd -g 用户组 用户名
修改用户的组
指令:usermod -g 用户组 用户名
7.8:用户和组相关文件
①/etc/passwd 文件:用户组的配置文件,记录用户的各种信息
每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
②/etc/shadow 文件:口令的配置文件
每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
③/etc/group 文件:组的配置文件,记录Linux包含的组的信息
每行的含义:组名:口令:组标识号:组内用户列表
八:系统与硬件
8.1:查看系统的PCI设备
lspci:列出所有的PCI设备
lspci -v:可以得到更详细的PCI设备信息
8.2:查看CPU信息
more /proc/cpuinfo
8.3:查看系统内核信息
more /proc/meminfo
8.4:查看磁盘分区信息
fdisk -l
九:实用指令
9.1:运行级别
0:关机
1:单用户(找回丢失密码)
2:多用户状态没有网络服务
3:多用户状态有网络服务
4:系统未使用保留给用户
5:图形界面
6:系统重启
通过init来切换不同的运行级别
9.2:找回root密码
视频:p26(哔站)
9.3:帮助指令
man 获取帮助信息
基本语法:man [命令或配置文件](功能描述:获取帮助信息)
help 指令
基本语法:help 命令(功能描述:获得shell内置命令的帮助信息)
9.4:文件目录类
①pwd指令
基本语法:pwd (功能描述:显示当前工作目录的绝对路径)
②ls指令
基本语法:ls 选项
常用选项:-a:显示当前目录所有的文件和目录,包括隐藏的
-l:以列表的方式显示信息
在Linux下,隐藏文件是以“.”开头的;
选项可以组合使用,比如ls -al
你可能除了知道最后面那一项是文件名之外,其它项就不太清楚了,那么到底是什么意思呢:
可能你还是不太明白,比如第一项文件类型和权限那一堆东西具体指什么,链接又是什么,何为最后修改时间,下面一一道来:
- 文件类型
关于文件类型,这里有一点你必需时刻牢记 Linux 里面一切皆文件,正因为这一点才有了设备文件( /dev
目录下有各种设备文件,大都跟具体的硬件设备相关)这一说。 socket
:网络套接字,pipe:
管道,软链接文件
:链接文件是分为两种的,另一种当然是“硬链接”
- 文件权限
读权限,表示你可以使用 cat <file name>
之类的命令来读取某个文件的内容;写权限,表示你可以编辑和修改某个文件的内容; 执行权限,通常指可以运行的二进制程序文件或者脚本文件,如同 Windows 上的 exe
后缀的文件,不过 Linux 上不是通过文件后缀名来区分文件的类型。你需要注意的一点是,一个目录同时具有读权限和执行权限才可以打开并查看内部文件,而一个目录要有写权限才允许在其中创建其它文件,这是因为目录文件实际保存着该目录里面的文件的列表等信息
所有者权限,这一点相信你应该明白了,至于所属用户组权限,是指你所在的用户组中的所有其它用户对于该文件的权限,比如,你有一个 iPad,那么这个用户组权限就决定了你的兄弟姐妹有没有权限使用它破坏它和占有它。
- 链接数
链接到该文件所在的 inode 结点的文件名数目
- 文件大小
以 inode 结点大小为单位来表示的文件大小,你可以给 ls 加上
-lh
参数来更直观的查看文件的大小。
明白了文件权限的一些概念,我们顺带补充一下关于 ls
命令的一些其它常用的用法:
- 显示除了
.
(当前目录)和..
(上一级目录)之外的所有文件,包括隐藏文件(Linux 下以.
开头的文件为隐藏文件)
当然,你可以同时使用 -a
和 -l
参数:
$ ls -al
查看某一个目录的完整属性,而不是显示目录里面的文件属性:
$ ls -dl <目录名>
- 显示所有文件大小,并以普通人类能看懂的方式呈现:
$ ls -asSh
其中小 s 为显示文件大小,大 S 为按文件大小排序,若需要知道如何按其它方式排序,可以使用 man ls
命令查询。
③cd指令
基本语法:cd [参数] (功能描述:切换到指定目录)
理解:绝对路径和相对路径
补充:绝对路径
关于绝对路径,简单地说就是以根" / "目录为起点的完整路径,以你所要到的目录为终点,表现形式如: /usr/local/bin
,表示根目录下的 usr
目录中的 local
目录中的 bin
目录
相对路径
相对路径,也就是相对于你当前的目录的路径,相对路径是以当前目录 .
为起点,以你所要到的目录为终点,表现形式如: usr/local/bin
(这里假设你当前目录为根目录)。你可能注意到,我们表示相对路径实际并没有加上表示当前目录的那个 .
,而是直接以目录名开头,因为这个 usr
目录为 /
目录下的子目录,是可以省略这个 .
的(以后会讲到一个类似不能省略的情况);如果是当前目录的上一级目录,则需要使用 ..
,比如你当前目录为 /home/shiyanlou
目录下,根目录就应该表示为 ../../
,表示上一级目录( home
目录)的上一级目录( /
目录)
下面我们以你的 home
目录为起点,分别以绝对路径和相对路径的方式进入 /usr/local/bin
目录:
# 绝对路径
$ cd /usr/local/bin
# 相对路径
$ cd ../../usr/local/bin
cd~ 或者 cd : 回到自己的家目录
cd ..: 回到当前目录的上一级目录
④mkdir指令:用于创建目录
基本用法:mkdir [选项] 要创建的目录
常用选项:
-p :创建多级目录
eg:mkdir -p /home/animal/tiger
⑤rmdir指令:用于删除空目录
基本语法:rmdir [选项] 要删除的空目录
注意:
1:rmdir要删除的是空目录,如果目录下有内容时无法删除
2:如果要删除非空目录,需要用 rm -rf来进行要删除的目录
eg:rm -rf /home/animal
⑥touch指令:用于创建空文件
基本语法:touch 文件名称
⑦cp指令:拷贝文件到指定目录
基本语法:cp [选项] source dest
eg:将/home/hello.txt拷贝到/home/bbb目录下
cp hello.txt bbb/
常用选项:
-r:递归复制整个文件夹;要成功复制目录需要加上 -r
或者 -R
参数,表示递归复制
注意:强制覆盖不提示的方法:\cp
⑧rm指令:用于移除文件或目录
基本语法:rm [选项] 要删除的文件或目录
eg:将/home/hello.txt删除
rm /home/hello.txt
常用选项:
-r:递归删除整个文件夹
-f:强制删除不提示
注意:强制删除不提示的方法:带上-f参数即可
⑨mv指令:用于移动文件与目录或重命名
基本语法:mv oldnamefile newnamefile (功能描述:重命名)
mv /temp/movefile /targetFolder (功能描述:移动文件)
⑩cat指令:用来查看文件
基本语法:cat [选项] 要查看的文件
常用选项
-n:显示行号
注意:cat只能浏览文件,而不能修改文件,为了浏览方便,一般会带上管道命令| more
eg:cat -n /etc/profile |more [进行交互]
⑪less指令:用来分屏查看文件内容
它的功能与more指令类似,但是比more指令更加强大,支持各种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据需要加载内容,对于显示大型文件具有较高的效率
基本语法:less 要查看的内容
案例1:ls -l /home > /home/info.txt(如果info。txt没有,则会创建)案例2:cal >> /home/mycal
⑫history指令:查看已经执行过的历史命令,也可以执行历史指令
基本语法:history (功能描述:查看已经执行过的历史命令)
⑬mv指令:用于移动文件
使用 mv
(move or rename files)命令移动文件(剪切)
命令格式是 mv 源目录文件 目的目录
mv
命令除了能移动文件外,还能给文件重命名。
命令格式为 mv 旧的文件名 新的文件名
批量重命名:rename
⑭file指令:查看文件类型
命令格式:file 文件名
9.5:时间日期类
①date指令
基本语法:
date (功能描述:显示当前时间)
date +%Y (功能描述:显示当前年份)
date + %m (功能描述:显示当前月份)
date + %d (功能描述:显示当前是哪一天)
date "+%Y-%m-%d %H:%M:%S" (功能描述:显示年月日时分秒)
②date指令:设置日期
基本语法:date -s 字符串时间
③cal指令:查看日历指令
基本语法:cal [选项] (功能描述:不加选项,显示本月日历)
9.6:搜索查找类
①find指令:将从指令目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端
基本语法:find 搜索范围
选项说明:
项 | 功能 |
---|---|
-name<查询方式> | 按照指定的文件名查找模式查找文件 |
-user<用户名> | 查找属于指定用户名所有文件 |
-size<文件大小> | 按照指定的文件大小查找文件 |
②locate指令:可以快速定位文件路径
locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新locate时刻
基本语法:locate 搜索文件
特别说明:由于locate指令基于数据库进行查询,所以第一次运行去前,必须使用updatedb指令创建locate数据库
③which指令:可以查看某个指令在哪个目录下
④grep指令和管道符号
grep过滤查找,管道符“|”,表示将前一个命令的处理结果输出传递给后面的命令处理
基本语法:grep [选项] 查找内容 源文件
常用选项:
选项 | 功能 |
---|---|
-n | 显示匹配行及行号 |
-i | 忽略字母大小写 |
9.7:压缩和解压类
①gzip/gunzip指令:前者用于压缩文件,后者用于解压
基本语法:gzip文件 (功能描述:压缩文件,只能将文件压缩为*.gz文件)
gunzip文件 (功能描述:解压缩文件命令)
②zip/unzip指令:前者用于压缩文件,后者用于解压文件,这个在项目打包发布中有用
基本语法:zip [选项] XXX.zip 将要压缩的内容 (功能描述:压缩文件和目录的命令)
unzip [选项] XXX.zip (功能描述:解压缩文件)
zip常用选项:
-r<目录>:指定解压后文件的存放目录
③tar指令:是打包指令,最后打包的文件是.tar.gz的文件
基本语法:tar [选项] XXX.tar.gz 打包的内容 (功能描述:打包目录,压缩后的文件格式.tar.gz)
选项 | 功能 |
---|---|
-c | 产生.tar打包文件 |
-v | 显示详细信息 |
-f | 指定压缩后的文件名 |
-z | 打包同时压缩 |
-x | 解包.tar文件 |
十:组管理和权限管理
10.1:Linux组
在Linux中的每一个用户必须属于一个组,不能独立于组外。在Linux中每个文件有所有者、所在组、其它组的概念
1.所有者:一般为文件的创建者
查看文件的所有者:
指令:ls -ahl
修改文件的所有者:
指令:chown 用户名 文件名
2.所在组:当某个用户创建了一个文件后,这个文件所在组就是该用户所在的组
组的创建:groupadd 组名
查看文件所在组/目录所在组:
基本指令:ls -ahl
修改文件所在的组:
基本指令:chgrp 组名 文件名
3.其它组:除文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组
4.改变用户所在的组:在添加用户时,可以指定将该用户添加到哪个组中,同样的用root的管理权限可以改变某个用户所在的组
改变用户所在的组:
1:usermod -g 新组名 用户名
2:usermod -d 目录名 用户名 改变该用户登录的初始目录。特别说明:用户需要有进入到新目录的权限
10.2:权限
“-”:代表普通文件
修改文件所有者-chown
chown newowner 文件/目录 改变所有者
chown newowner:newgroup 文件/目录 改变所有者和所在组
-R:如果是目录,则使其下所有子文件或目录递归生效
修改文件/目录所在的组-chgrp
chgrp newgroup 文件/目录 修改所在组
十一:定时任务调度
11.1:任务调度
crontab 进行定时任务的设置
概述
任务调度:指系统在某个时间执行的特定的命令或程序
任务调度分类:
1:系统工作:有些重要的工作必须周而复始的执行
2:个别用户工作:个别用户可能希望执行某些程序
基本语法:
crontab [选项]
常用选项
-E | 编辑CRONTAB定时任务 |
---|---|
-l | 查询crontab任务 |
-r | 删除当前用户所有的crontab任务 |
11.2:入门
参数细节说明:5个占位符的说明
项目 | 含义 | 范围 |
---|---|---|
第一个“*” | 一小时中的第几分钟 | 0~59 |
第二个“*” | 一天中的第几小时 | 0~23 |
第三个“*” | 一月中的第几天 | 1~31 |
第四个“*” | 一年中的第几月 | 1~12 |
第五个“*” | 一周中的星期几 | 0~7(0和7都代表星期日) |
特殊符号 | 含义 |
---|---|
* | 代表任何时间。 |
, | 代表不连续的时间。比如“0 8,12,16 * * *命令”:代表在每天的八点零分,十二点零分,十六点零分都执行一次命令 |
- | 代表连续的时间范围。比如“0 5 * * 1-6命令”:代表在周一到周六的凌晨五点执行命令 |
*/n | 代表每隔多久执行一次 |
eg:0 0 1,15 * 1命令:每月1号和15号,每周一的零点零分都会执行命令
注意:星期几和几号最好不要同时出混乱现,因为他们定义的都是天,非常容易让管理员
11.3:crond相关指令
crontab -r:终止任务调度
crontab -l:列出当前有哪些任务调度
service crond restart [重启任务调度]
11.4:at定时任务
十二:Linux磁盘分区、挂载
12.1:Linux分区
查看所有设备挂载情况:
命令:lsblk 或者 lsblk -f
如何添加一块硬盘:
1:虚拟机添加硬盘
2:分区
3:格式化
4:挂载
卸载:umount [目录] 或 [文件]
5:设置可以自动挂载
12.2:磁盘情况查询
占用空间查询
基本语法:df -h
查询指定目录的磁盘占用情况
基本语法:du -h /目录
查询指定目录的磁盘占用情况,默认为当前目录
-s:指定目录占用空间大小汇总
-h:带计量单位
-a:含文件
--max-depth=1 子目录深度
-c 列出明细的同时,增加汇总值
12.3:磁盘情况-使用工作指令
12.4:分区命名
命名字符 | 具体含义 |
---|---|
/dev | 所有设备文件的存放目录 |
hd && sd | 他们是分区的前两个字母,代表该分区所在的设备类型,其中hd代表IDE硬盘,sd代表SCSI硬盘 |
a | 是分区命名的第三个字母,表示分区在哪个设备上;/dev/sda代表第一块IDE硬盘 |
2 | 这个数字代表分区,Linux下前四个分区(主分区或扩展分区)用数字1~4表示,逻辑分区从5开始,以此类推;/dev/sdb6表示第二块SCSI硬盘的第二个逻辑分区 |
... | ...... |
十三:网络配置
13.1:原理图
13.2:查看网络IP和网关
查看Windows环境中的VMnet8网络配置(ipconfig指令)
查看Linux的网络配置(ifconfig指令)
13.3:ping测试主机之间网络连通性
基本语法:ping 目的主机(功能描述:测试当前服务器是否可以连接目的主机)
13.4:Linux网络
重启网络服务或者重启系统使之生效
service network restart、reboot
13.5:设置主机名和hosts映射
设计主机名
1:为了方便记忆,可以给Linux系统设置主机名,也可以根据需要修改主机名
2:指令hostname:查看主机名
3:修改文件在/etc/hostname指定
4:修改后,重启生效
设置hosts映射
13.6:主机名解析过程分析
hosts是什么?
一个文本文件,用来记录IP和hostname(主机名)的映射关系
DNS是什么?
1:DNS,就是Domain Name System的缩写,翻译过来就是域名系统
2:是互联网上作为域名和IP地址相互映射的一个分布式数据库
十四:进程管理
14.1:基本介绍及其分类
14.1.1:基本介绍
程序只是一些列指令的集合,是一个静止的实体,而进程不同,进程有以下的特性:
- 动态性:进程的实质是一次程序执行的过程,有创建、撤销等状态的变化。而程序是一个静态的实体。
- 并发性:进程可以做到在一个时间段内,有多个程序在运行中。程序只是静态的实体,所以不存在并发性。
- 独立性:进程可以独立分配资源,独立接受调度,独立地运行。
- 异步性:进程以不可预知的速度向前推进。
- 结构性:进程拥有代码段、数据段、PCB(进程控制块,进程存在的唯一标志)。也正是因为有结构性,进程才可以做到独立地运行。
并发:在一个时间段内,宏观来看有多个程序都在活动,有条不紊的执行(每一瞬间只有一个在执行,只是在一段时间有多个程序都执行过)
并行:在每一个瞬间,都有多个程序都在同时执行,这个必须有多个 CPU 才行
引入进程是因为传统意义上的程序已经不足以描述 OS 中各种活动之间的动态性、并发性、独立性还有相互制约性。程序就像一个公司,只是一些证书,文件的堆积(静态实体)。而当公司运作起来就有各个部门的区分,财务部,技术部,销售部等等,就像各个进程,各个部门之间可以独立运做,也可以有交互(独立性、并发性)。
而随着程序的发展越做越大,又会继续细分,从而引入了线程的概念,当代多数操作系统、Linux 2.6 及更新的版本中,进程本身不是基本运行单位,而是线程的容器。就像上述所说的,每个部门又会细分为各个工作小组(线程),而工作小组需要的资源需要向上级(进程)申请。
线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。因为线程中几乎不包含系统资源,所以执行更快、更有效率。
简而言之,一个程序至少有一个进程,一个进程至少有一个线程。线程的划分尺度小于进程,使得多线程程序的并发性高。另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。就如下图所示:
14.1.2:分类
- 以进程的功能与服务的对象来分;
- 以应用程序的服务类型来分;
第一个角度来看,我们可以分为用户进程与系统进程
- 用户进程:通过执行用户程序、应用程序或称之为内核之外的系统程序而产生的进程,此类进程可以在用户的控制下运行或关闭。
- 系统进程:通过执行系统内核程序而产生的进程,比如可以执行内存资源分配和进程切换等相对底层的工作;而且该进程的运行不受用户的干预,即使是 root 用户也不能干预系统进程的运行。
第二角度来看,我们可以将进程分为交互进程、批处理进程、守护进程
- 交互进程:由一个 shell 终端启动的进程,在执行过程中,需要与用户进行交互操作,可以运行于前台,也可以运行在后台。
- 批处理进程:该进程是一个进程集合,负责按顺序启动其他的进程。
- 守护进程:守护进程是一直运行的一种进程,在 Linux 系统启动时启动,在系统关闭时终止。它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。例如 httpd 进程,一直处于运行状态,等待用户的访问。还有经常用的 cron(在 centOS 系列为 crond)进程,这个进程为 crontab 的守护进程,可以周期性的执行用户设定的某些任务。
14.1.3:进程的衍生
关于父进程与子进程便会提及这两个系统调用 fork()
与 exec()
fork-exec是由 Dennis M. Ritchie 创造的
fork() 是一个系统调用(system call),它的主要作用就是为当前的进程创建一个新的进程,这个新的进程就是它的子进程,这个子进程除了父进程的返回值和 PID 以外其他的都一模一样,如进程的执行代码段,内存信息,文件描述,寄存器状态等等
exec() 也是系统调用,作用是切换子进程中的执行程序也就是替换其从父进程复制过来的代码段与数据段
子进程就是父进程通过系统调用 fork()
而产生的复制品,fork()
就是把父进程的 PCB 等进程的数据结构信息直接复制过来,只是修改了 PID,所以一模一样,只有在执行 exec()
之后才会不同,而早先的 fork()
比较消耗资源后来进化成 vfork()
,效率高了不少
14.1.4:进程组和Sessions
每一个进程都会是一个进程组的成员,而且这个进程组是唯一存在的,他们是依靠 PGID(process group ID)来区别的,而每当一个进程被创建的时候,它便会成为其父进程所在组中的一员。
一般情况,进程组的 PGID 等同于进程组的第一个成员的 PID,并且这样的进程称为该进程组的领导者,也就是领导进程,进程一般通过使用 getpgrp()
系统调用来寻找其所在组的 PGID,领导进程可以先终结,此时进程组依然存在,并持有相同的 PGID,直到进程组中最后一个进程终结。
与进程组类似,每当一个进程被创建的时候,它便会成为其父进程所在 Session 中的一员,每一个进程组都会在一个 Session 中,并且这个 Session 是唯一存在的,
Session 主要是针对一个 tty 建立,Session 中的每个进程都称为一个工作(job)。每个会话可以连接一个终端(control terminal)。当控制终端有输入输出时,都传递给该会话的前台进程组。Session 意义在于将多个 jobs 囊括在一个终端,并取其中的一个 job 作为前台,来直接接收该终端的输入输出以及终端信号。 其他 jobs 在后台运行
14.2:显示系统执行的进程(ps工具的使用)
内容 | 解释 |
---|---|
F | 进程的标志(process flags),当 flags 值为 1 则表示此子程序只是 fork 但没有执行 exec,为 4 表示此程序使用超级管理员 root 权限 |
USER | 进程的拥有用户 |
PID | 进程的 ID |
PPID | 其父进程的 PID |
SID | session 的 ID |
TPGID | 前台进程组的 ID |
%CPU | 进程占用的 CPU 百分比 |
%MEM | 占用内存的百分比 |
NI | 进程的 NICE 值 |
VSZ | 进程使用虚拟内存大小 |
RSS | 驻留内存中页的大小 |
TTY | 终端 ID |
S or STAT | 进程状态 |
WCHAN | 正在等待的进程资源 |
START | 启动进程的时间 |
TIME | 进程消耗 CPU 的时间 |
COMMAND | 命令的名称和参数 |
TPGID栏写着-1 的都是没有控制终端的进程,也就是守护进程
STAT表示进程的状态,而进程的状态有很多,如下表所示
状态 | 解释 |
---|---|
R | Running.运行中 |
S | Interruptible Sleep.等待调用 |
D | Uninterruptible Sleep.不可中断睡眠 |
T | Stoped.暂停或者跟踪状态 |
X | Dead.即将被撤销 |
Z | Zombie.僵尸进程 |
W | Paging.内存交换 |
N | 优先级低的进程 |
< | 优先级高的进程 |
s | 进程的领导者 |
L | 锁定状态 |
l | 多线程状态 |
+ | 前台进程 |
其中的 D 是不能被中断睡眠的状态,处在这种状态的进程不接受外来的任何 signal,所以无法使用 kill 命令杀掉处于 D 状态的进程,无论是
kill
,kill -9
还是kill -15
,一般处于这种状态可能是进程 I/O 的时候出问题了。
14.3:终止进程kill和killall
14.4:查看进程树pstree
基本语法:pstree [选项],可以更加直观的来看进程信息
常用选项:
-p:显示进程的PID
-u:显示进程的所属用户
14.5:服务(service)管理
查看服务名:
方式一:使用setup -> 系统服务,就可以看到全部
方式二:/etc/init.d 看到service指令管理的服务ls -l /etc/init.d
运行级别:
14.6:动态监控进程(top工具的使用)
介绍:top与ps命令很相似。它们都用来显示正在执行的进程。它们之间最大的不同之处,在于top在执行一段时间后可以更新正在运行的进程
基本语法:top [选项]
选项说明:
选项 | |
---|---|
-d 秒数 | 指定top命令每隔几秒更新,默认为3秒 |
-i | 使top不显示任何闲置或者僵死进程 |
-p | 通过指定监控进程ID来仅仅监控某个进程的状态 |
top 是一个在前台执行的程序,所以执行后便进入到这样的一个交互界面,正是因为交互界面我们才可以实时的获取到系统与进程的信息。在交互界面中我们可以通过一些指令来操作和筛选。在此之前我们先来了解显示了哪些信息
①top 显示的第一排
内容 | 解释 |
---|---|
top | 表示当前程序的名称 |
11:05:18 | 表示当前的系统的时间 |
up 8 days,17:12 | 表示该机器已经启动了多长时间 |
1 user | 表示当前系统中只有一个用户 |
load average: 0.29,0.20,0.25 | 分别对应 1、5、15 分钟内 cpu 的平均负载 |
load average 在 wikipedia 中的解释是 the system load is a measure of the amount of work that a computer system is doing 也就是对当前 CPU 工作量的度量,具体来说也就是指运行队列的平均长度,也就是等待 CPU 的平均进程数相关的一个计算值
我们该如何看待这个 load average 数据呢?
假设我们的系统是单 CPU、单内核的,把它比喻成是一条单向的桥,把 CPU 任务比作汽车。
- load = 0 的时候意味着这个桥上并没有车,cpu 没有任何任务;
- load < 1 的时候意味着桥上的车并不多,一切都还是很流畅的,cpu 的任务并不多,资源还很充足;
- load = 1 的时候就意味着桥已经被车给占满了,没有一点空隙,cpu 的已经在全力工作了,所有的资源都被用完了,当然还好,这还在能力范围之内,只是有点慢而已;
- load > 1 的时候就意味着不仅仅是桥上已经被车占满了,就连桥外都被占满了,cpu 已经在全力工作,系统资源的用完了,但是还是有大量的进程在请求,在等待。若是这个值大于2、大于3,表示进程请求超过 CPU 工作能力的 2 到 3 倍。而若是这个值 > 5 说明系统已经在超负荷运作了。
这是单个 CPU 单核的情况,而实际生活中我们需要将得到的这个值除以我们的核数来看。我们可以通过以下的命令来查看 CPU 的个数与核心数
#查看物理CPU的个数
cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l
#每个cpu的核心数
cat /proc/cpuinfo |grep "physical id"|grep "0"|wc -l
通过上面的指数我们可以得知 load 的临界值为 1 ,但是在实际生活中,比较有经验的运维或者系统管理员会将临界值定为 0.7。这里的指数都是除以核心数以后的值,不要混淆了
- 若是 load < 0.7 并不会去关注他;
- 若是 0.7< load < 1 的时候我们就需要稍微关注一下了,虽然还可以应付但是这个值已经离临界不远了;
- 若是 load = 1 的时候我们就需要警惕了,因为这个时候已经没有更多的资源的了,已经在全力以赴了;
- 若是 load > 5 的时候系统已经快不行了,这个时候你需要加班解决问题了
通常我们都会先看 15 分钟的值来看这个大体的趋势,然后再看 5 分钟的值对比来看是否有下降的趋势。
②top显示的第二排:进程使用情况的统计
内容 | 解释 |
---|---|
Tasks: 26 total | 进程总数 |
1 running | 1 个正在运行的进程数 |
25 sleeping | 25 个睡眠的进程数 |
0 stopped | 没有停止的进程数 |
0 zombie | 没有僵尸进程数 |
③top显示的第三排:CPU使用情况的统计
内容 | 解释 |
---|---|
Cpu(s): 1.0%us | 用户空间进程占用 CPU 百分比 |
1.0% sy | 内核空间运行占用 CPU 百分比 |
0.0%ni | 用户进程空间内改变过优先级的进程占用 CPU 百分比 |
97.9%id | 空闲 CPU 百分比 |
0.0%wa | 等待输入输出的 CPU 时间百分比 |
0.1%hi | 硬中断(Hardware IRQ)占用 CPU 的百分比 |
0.0%si | 软中断(Software IRQ)占用 CPU 的百分比 |
0.0%st | (Steal time) 是 hypervisor 等虚拟服务中,虚拟 CPU 等待实际 CPU 的时间的百分比 |
CPU 利用率是对一个时间段内 CPU 使用状况的统计,通过这个指标可以看出在某一个时间段内 CPU 被占用的情况,而 Load Average 是 CPU 的 Load,它所包含的信息不是 CPU 的使用率状况,而是在一段时间内 CPU 正在处理以及等待 CPU 处理的进程数情况统计信息,这两个指标并不一样
④top显示的第四排:内存的使用情况统计
内容 | 解释 |
---|---|
8176740 total | 物理内存总量 |
8032104 used | 使用的物理内存总量 |
144636 free | 空闲内存总量 |
313088 buffers | 用作内核缓存的内存量 |
注意:
系统中可用的物理内存最大值并不是 free 这个单一的值,而是 free + buffers + swap 中的 cached 的和
⑤top显示的第五排:交换区的使用情况统计
内容 | 解释 |
---|---|
total | 交换区总量 |
used | 使用的交换区总量 |
free | 空闲交换区总量 |
cached | 缓冲的交换区总量,内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖 |
⑥进程的情况
列名 | 解释 |
---|---|
PID | 进程 id |
USER | 该进程的所属用户 |
PR | 该进程执行的优先级 priority 值 |
NI | 该进程的 nice 值 |
VIRT | 该进程任务所使用的虚拟内存的总数 |
RES | 该进程所使用的物理内存数,也称之为驻留内存数 |
SHR | 该进程共享内存的大小 |
S | 该进程进程的状态: S=sleep R=running Z=zombie |
%CPU | 该进程 CPU 的利用率 |
%MEM | 该进程内存的利用率 |
TIME+ | 该进程活跃的总时间 |
COMMAND | 该进程运行的名字 |
注意
NICE 值叫做静态优先级,是用户空间的一个优先级值,其取值范围是-20 至 19。这个值越小,表示进程”优先级”越高,而值越大“优先级”越低。nice 值中的 -20 到 19,中 -20 优先级最高, 0 是默认的值,而 19 优先级最低
PR 值表示 Priority 值叫动态优先级,是进程在内核中实际的优先级值,进程优先级的取值范围是通过一个宏定义的,这个宏的名称是 MAX_PRIO,它的值为 140。Linux 实际上实现了 140 个优先级范围,取值范围是从 0-139,这个值越小,优先级越高。而这其中的 0 - 99 是实时进程的值,而 100 - 139 是给用户的。
其中 PR 中的 100 to 139 值部分有这么一个对应
PR = 20 + (-20 to +19)
,这里的 -20 to +19 便是 nice 值,所以说两个虽然都是优先级,而且有千丝万缕的关系,但是他们的值,他们的作用范围并不相同
** VIRT **任务所使用的虚拟内存的总数,其中包含所有的代码,数据,共享库和被换出 swap 空间的页面等所占据空间的总数
⑦top 是一个前台程序,所以是一个可以交互的
常用交互命令 | 解释 |
---|---|
q | 退出程序 |
I | 切换显示平均负载和启动时间的信息 |
P | 根据 CPU 使用百分比大小进行排序 |
M | 根据驻留内存大小进行排序 |
i | 忽略闲置和僵死的进程,这是一个开关式命令 |
k | 终止一个进程,系统提示输入 PID 及发送的信号值。一般终止进程用 15 信号,不能正常结束则使用 9 信号。安全模式下该命令被屏蔽。 |
14.7:监控网络状态
十五:RPM && YUM
15.1:RPM包的管理
RPM用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。RPM是Redhat Package Manager(Redhat软件包管理工具)的缩写,类似 Windows的setup.exe,这一文件格式名称虽然打上了Redhat的标志,但理念是通用的
15.2:RPM的卸载
15.3:RPM的安装
基本语法:
rpm -ivh RPM包全路径名称
参数说明:
i = install 安装
v = verbose 提示
h = hash 进度条
15.4:yum
十六:APT软件管理和远程登录
16.1:APT原理机制图
16.2:Ubuntu软件安装、卸载
使用apt完成安装和卸载vim软件,并查询vim软件的信息
sudo apt-get remove vim //删除
sudo apt-get install vim //安装
sudo apt-cache show vim //获取软件信息
16.3:远程登录Ubuntu
安装SSH和启用
sudo apt-get install openssh-server
执行上面指令后,在当前这台Linux上就安装了SSH服务端和客户端
service sshd restart
执行上面的指令,就启动了sshd服务。会监听端口22
十七:Shell编程
17.1:shell是什么?
shell是一个命令解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至编写一些程序
17.2:shell脚本的执行方式
17.3:shell的变量
定义变量的规则:
1.变量的名称可以由字母、数字、下划线组成,但是不能以数字开头
2.等号两侧不可以有空格
3.变量名称一般习惯为大写,这是一个规范
将命令的返回值赋给变量
1.A = date
反引号,运行里面的命令,并把结果返回给变量A
2.A = $(date)等价于反引号
17.4:环境变量
17.4.1:变量
变量是什么,准确的说应该是 Shell 变量,所谓变量就是计算机中用于记录一个值(不一定是数值,也可以是字符或字符串)的符号,而这些符号将用于不同的运算处理中。通常变量与值是一对一的关系,可以通过表达式读取它的值并赋值给其它变量,也可以直接指定数值赋值给任意变量。为了便于运算和处理,大部分的编程语言会区分变量的类型,用于分别记录数值、字符或者字符串等等数据类型。Shell 中的变量也基本如此,有不同类型(但不用专门指定类型名),可以参与运算,有作用域限定
通常我们会涉及到的变量类型有三种:
- 当前 Shell 进程私有用户自定义变量,如上面我们创建的 tmp 变量,只在当前 Shell 中有效。
- Shell 本身内建的变量。
- 从自定义变量导出的环境变量。
也有三个与上述三种环境变量相关的命令:set
,env
,export
。这三个命令很相似,都是用于打印环境变量信息,区别在于涉及的变量范围不同。详见下表:
命 令 | 说 明 |
---|---|
set | 显示当前 Shell 所有变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量。 |
env | 显示与当前用户相关的环境变量,还可以让命令在指定环境中运行。 |
export | 显示从 Shell 中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量。 |
17.5:位置参数变量
17.6:预定义变量
17.7:运算符
17.8:条件判断
基本语法:
[condition] (注意:condition前后要有空格)
#非空返回TRUE,可使用$?验证(0为true,>1为false)
17.9:流程控制
if语句
case语句
for循环
while循环
17.10:read读取控制台输入
基本语法:
read(选项)(参数)
选项:
-P:指定读取值时的提示符
-t:指定 读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了
参数:
变量:指定读取值的变量名
17.11:函数
17.11.1:系统函数
17.11.2:自定义函数
17.12:综合实例
十八:日志管理
18.1:基本介绍
1.日志文件是重要的信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等
2.日志对于安全来说也很重要,他记录了系统每天发生的各种事情,通过日志来检查错误发生的原因或者收到攻击时留下的痕迹
3.日志是用来记录重大事件打的工具
18.2:系统常用日志
18.3:日志管理服务rsyslogd
grep -v(--invert-match):改变匹配的意义,只选择不匹配的行
18.4:日志轮替
18.5:查看内存日志
十九:备份与恢复
19.1:方法
1:把需要的文件(或者分区)用TAR打包就行,下次需要恢复的时候,再解压开覆盖即可
2:使用dump和restore命令
若未安装dump和restore指令,需要先安装
yum -y install dump
yum -y install restore