Linux基本命令
二、Linux系统使用注意
1、Linux严格区分大小写
Linux 和Windows不同,Linux严格区分大小写的,包括文件名和目录名、命令、命令选项、配置文件设置选项等。
例如,Win7 系统桌面上有文件夹叫做Test,当我们在桌面上再新建一个名为 test 的文件夹时,系统会提示文件夹命名冲突;
由以上图解可知:Linux是一个非常严谨的操作系统,严格区分大小写。
2、Linux文件"扩展名"
在Linux操作系统中,与Windows不同,其文件的类型不是通过扩展名来进行区分的!
我们都知道,Windows 是依赖扩展名区分文件类型的,比如,".txt" 是文本文件、".exe" 是执行文件,但 Linux 不是。
Linux 系统通过权限位标识来确定文件类型,常见的文件类型有普通文件、目录、链接文件、块设备文件、字符设备文件等几种。Linux 的可执行文件就是普通文件被赋予了可执行权限。
Linux系统中常见的后缀名称:
Linux 中的一些特殊文件还是要求写 “扩展名” 的,但 Linux 不依赖扩展名来识别文件类型,写这些扩展名是为了帮助运维人员来区分不同的文件类型。
这样的文件扩展名主要有以下几种:
压缩包:Linux 下常见的压缩文件名有 .gz、.bz2、.zip、.tar.gz、.tar.bz2、.tgz 等。
为什么压缩包一定要写扩展名呢?很简单,如果不写清楚扩展名,那么管理员不容易判断压缩包的格式,虽然有命令可以帮助判断,但是直观一点更加方便。就算没写扩展名,在 Linux 中一样可以解压缩,不影响使用。
二进制软件包:CentOS 中所使用的二进制安装包是 RPM 包,所有的 RPM 包都用".rpm"扩展名结尾,目的同样是让管理员一目了然。=> 类似Windows中的exe文件
程序文件:Shell 脚本一般用 “.sh” 扩展名结尾。=> check_network.sh
网页文件:网页文件一般使用 “.php” 等结尾,不过这是网页服务器的要求,而不是 Linux 的要求。
.html/.css/.js/.jsp/.php/.py => 网页文件
① Linux操作系统不以“扩展名”来判断文件的类型,而是通过权限位标识符来进行判断
② 有一些特殊的文件,有扩展名称=>压缩包、二进制软件包、程序文件、网页文件
3、Linux中所有内容以文件形式保存
在Linux系统中,一切皆文件!
在Windows是文件的,在Linux下也是文件。在Windows中不是文件的,在Linux系统中也是文件。
问题:我们目前还没有学习权限标识符,怎么判断文件的类型呢?
答:可以通过文件的颜色
然后使用ls命令,查看文件的颜色
ls
l : L的小写形式
普通文件:通过ls命令查看时,如果显示黑色,代表其是一个普通的文件
文件夹:通过ls命令查看时,如果显示天蓝色,代表是一个文件夹
4、Linux中存储设备都必须在挂载之后才能使用
Linux操作系统:分区+格式化+挂载,存储设备必须挂载后才能使用(硬盘、光盘、U盘)
mount命令: mount 空格 /dev/sda1空格/mnt/file
三、Linux系统的目录结构(重要)
1、Linux分区与Windows分区
Linux 系统不同于 Windows,没有 C 盘、D 盘、E 盘那么多的盘符,只有一个根目录(/),所有的文件(资源)都存储在以根目录(/)为树根的树形目录结构中。
Linux:
2、Linux系统文件架构
在 Linux 根目录(/)下包含很多的子目录,称为一级目录。
例如 bin、boot、dev 等。
同时,各一级目录下还含有很多子目录,称为二级目录。
例如 /bin/bash、/bin/ed 等。
3、Linux系统的文件目录用途
/bin:系统命令目录
/sbin:超级命令目录,只能超级管理员可以执行的命令
/boot:系统目录,类似于Windows中的C盘
/dev :设备文件目录,硬盘、光驱、U盘都属于设备文件,/dev/sr0代表光驱设备。注意,次目录下的文件没有办法直接使用,必须先挂载
/etc :非常重要,代表系统的配置文件目录。大部分软件安装完成后,其配置文件都存放在此目录
/home:普通用户的家目录,用户登录后会自动切换到此目录
/root:超级管理员的家目录,超级管理员登录后会自动切换到此目录
/media:挂载目录,早期Linux挂载目录,用于挂载光盘以及软盘
/mnt:挂载目录,用来挂载额外的设备,如 U 盘、移动硬盘和其他操作系统的分区
/opt :第三方软件目录,这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录中。不过笔者还是习惯把软件放到 /usr/local/ 目录中,也就是说,/usr/local/ 目录也可以用来安装软件
/usr :系统程序目录,类似Windows中的Program Files
/proc:虚拟文件系统。该目录中的数据并不保存在硬盘上,而是保存到内存中。主要保存系统的内核、进程、外部设备状态和网络状态等。
/tmp :临时文件目录,在该目录下,所有用户都可以访问和写入。建议此目录中不能保存重要数据,最好每次开机都把该目录清理
/var :经常变化的文件目录,网页文件、数据文件、日志文件
四、Linux入门级命令
1、开启终端
2、Linux命令格式
什么是Linux 的命令?
答:就是指在Linux 终端(命令行)中输入的内容就称之为命令。
一个完整的命令的标准格式:Linux 通用的格式
命令(空格) [选项](空格)[参数]
但是有些命令比较特殊,可能没有选项也没有参数
pwd
还有一些命令,有命令有选项,但是没有参数
ls -l
还有一些命令,命令+选项+参数全都有
tail -n 3 readme.txt
3、扩展:Linux下的命令补全
键盘上有一个按键:Tab键
有些命令可能都以某几个字母开头,这个时候,只需要按两次Tab键,其就会显示所有命令。
clea + Tab键 + Tab键
Tab键的功能特别强大:其不仅可以补全命令还可以补全Linux的文件路径
4、切换用户
基本语法:
su - root
Password:123456
[root@localhost ~]# 切换成功
扩展:-横杠作用是什么?答:-横杠代表切换用户的同时,切换用户的家目录
5、uname命令
主要功能:获取计算机操作系统相关信息
基本语法:
uname -a
选项说明:
-a :all缩写,代表显示所有信息,获取全部的系统信息(类型、全部主机名、内核版本、发布时间、开源计划)
6、ls命令
☆ 用法一
主要功能:ls完整写法list show,以平铺的形式显示当前目录下的文件信息
基本语法:
ls
☆ 用法二
主要功能:显示其他目录下的文件信息
ls 其他目录的绝对路径或相对路径
扩展:ls后面跟的路径既可以是绝对路径也可以是相对路径
绝对路径:不管当前工作路径是在哪,目标路径都会从“/”磁盘根下开始。
案例:访问itheima用户的家目录,查看有哪些文件
ls /home/itheima
绝对路径必须以左斜杠开头,一级一级向下访问,不能越级
相对路径:除绝对路径之外的路径称之为相对路径,相对路径得有一个相对物(当前工作路径)。
只要看到路径以“/”开头则表示该路径是绝对路径,除了以“/”开头的路径称之为相对路径。
当前位置:/home/itheima目录下
…/:表示上级目录(上一级)
./ :表示当前目录(同级),普通文件./可以省略,可执行文件(绿色)必须加./
文件夹名称/:表示下级目录(下一级),注意这个斜杠/
☆ 用法三
基本语法:
ls [选项] [路径]
选项说明:
-l :ls -l,代表以详细列表的形式显示当前或其他目录下的文件信息(简写命令=>ll)
-h :ls -lh,通常与-l结合一起使用,代表以较高的可读性显示文件的大小(kb/mb/gb)
-a :ls -a,a是all缩写,代表显示所有文件(也包含隐藏文件=>大部分以.开头)
计算机中的单位:
1TB = 1024GB
1GB = 1024MB
1MB = 1024KB
1KB(千字节) = 1024B(字节)
7、pwd命令
主要功能:pwd=print working directory,打印当前工作目录(告诉我们,我们当前位置)
基本语法:
pwd
8、cd命令
主要功能:cd全称change directory,切换目录(从一个目录跳转到另外一个目录)
基本语法:
cd [路径]
选项说明:
路径既可以是绝对路径,也可以是相对路径
案例一:切换到/usr/local这个程序目录
cd /usr/local
案例二:比如我们当前在/home/itheima下,切换到根目录/下
cd /home/itheima
cd …/…/
案例三:当我们在某个路径下,如何快速回到自己的家目录
cd
或
cd ~
9、clear命令
主要功能:清屏
基本语法:
clear
10、reboot命令
主要功能:立即重启计算机
基本语法:
reboot
11、shutdown命令
主要功能:立即关机或延迟关机
立即关机基本语法:
shutdown -h 0或now
shutdown -h 0
shutdown -h now
选项说明:
-h :halt缩写,代表关机
在Linux系统中,立即关机除了使用shutdown -h 0以外还可以使用halt -p命令
延迟关机基本语法:
shutdown -h 分钟数
代表多少分钟后,自动关机
案例1:10分钟后自动关机
shutdown -h 10
案例2:后悔了,取消关机
光标一直不停的闪,取消关机
按Ctrl + C(CentOS6,中断关机。CentOS7中还需要使用shutdown -c命令)
shutdown -c
12、type命令
主要功能:主要用来结合help命令,用于判断命令的类型(属于内部命令还是外部命令)
基本语法:
type 命令
内部命令:命令 is a shell builtin
外部命令:没有显示以上信息的就是外部命令
13、history命令
主要功能:显示系统以前输入的前1000条命令
基本语法:
history
14、hostnamectl命令
主要功能:用于设置计算机的主机名称(给计算机起个名字),此命令式CentOS7新增的命令。
hostnamectl : hostname + control
☆ 获取计算机的主机名称
hostnameCentOS6
hostnamectlCentOS7
☆ 设置计算机的主机名称
Centos7中主机名分3类,静态的(static)、瞬态的(transient)、和灵活的(pretty)。
① 静态static主机名称:电脑关机或重启后,设置的名称亦然有效
② 瞬态transient主机名称:临时主机名称,电脑关机或重启后,设置的名称就失效了
③ 灵活pretty主机名称:可以包含一些特殊字符
CentOS 7中和主机名有关的文件为/etc/hostname,它是在系统初始化的时候被读取的,并且内核根据它的内容设置瞬态主机名。
更改主机名称,让其永久生效?① 使用静态的 ② 改/etc/hostname文件
① 瞬态主机名称(临时设置)
hostnamectl --transient set-hostname 主机名称
主机名称 建议遵循 FQDN协议(功能+公司域名)
web01.itcast.cn
web02.itcast.cn
案例:临时设置主机名称为yunwei.itcast.cn
hostnamectl --transient set-hostname yunwei.itcast.cn
su 立即生效
② 静态主机名称(永久生效)
hostnamectl --static set-hostname 主机名称
温馨提示:–static也可以省略不写
案例:把计算机的主机名称永久设置为yunwei.itcast.cn
hostnamectl --static set-hostname yunwei.itcast.cn
su 立即生效
③ 灵活主机名称(主机名称可以添加特殊字符)
hostnamectl --pretty set-hostname 主机名称(包含特殊字符)
案例:把计算机的主机名称通过灵活设置,设置为yunwei’s server01
hostnamectl --pretty set-hostname “yunwei’s server01”
查看灵活的主机名称
hostnamectl --pretty
Linux文件管理(上)
一、Linux下文件命名规则
1、可以使用哪些字符?
理论上除了字符“/”之外,所有的字符都可以使用,但是要注意,在目录名或文件名中,不建议使用某些特殊字符,例如, <、>、?、* 等,尽量避免使用。
工作时文件的命名规则:
① 由于linux严格区分大小写,所以尽量都用小写字母
② 如果必须对文件名进行分割,建议使用"_",例如:itheima_bj_2020.log
_ 下划线,在Linux操作系统中,可以使用Shift键 + 减号
2、文件名的长度
目录名或文件名的长度不能超过 255 个字符
尽量不要太长,另外文件名称一定要见名知意,可以使用英文单词
3、文件名的大小写
Linux目录名或文件名是区分大小写的。如 itheima、ITheima、yunwei 和 Yunwei ,是互不相同的目录名或文件名。
个人建议:
不要使用字符大小写来区分不同的文件或目录。
建议文件名一律使用小写字母
4、Linux文件扩展名
Linux文件的扩展名对 Linux 操作系统没有特殊的含义,Linux 系统并不以文件的扩展名开分区文件类型。例如,itheima.exe 只是一个文件,其扩展名 .exe 并不代表此文件就一定是可执行的。
在Linux系统中,文件扩展名的用途为了使运维人员更好的区分不同的文件类型。
在Linux操作系统中,文件的类型是依靠权限位的标识符来进行区分的。当然也可以通过颜色,如黑色普通文件,天蓝色文件夹
二、Linux下的文件管理
1、目录创建
在实际应用中,与目录相关的操作主要有两个:创建目录与删除目录
① mkdir创建目录
基本语法:
mkdir 目录名称
主要功能:就是根据目录的名称创建一个目录
mkdir = make directory
案例:在家目录下创建一个itheima的文件夹
mkdir itheima
② mkdir -p递归创建目录
基本语法:
mkdir -p /usr/local/nginx/conf
选项说明:
-p:递归创建,从左边的路径开始一级一级创建目录,直到路径结束
案例:在已知目录(/usr/local)下创建多级目录(nginx/conf)
mkdir /usr/local/nginx/conf
mkdir: cannot create directory ‘/usr/local/nginx/conf’: No such file or directory
mkdir:不能创建目录conf,为什么呢?因为/usr/local目录下并没有nginx
解决方案:如果我们想同时创建多级目录,必须使用-p选项,其会从左向右一级一级创建目录。
mkdir -p /usr/local/nginx/conf
③ 使用mkdir同时创建多个目录
mkdir 目录名称1 目录名称2 目录名称3 …
案例:在当前目录下创建a、b、c三个目录
mkdir a
mkdir b
mkdir c
或
mkdir a b c
总结:
一个目录一个目录创建# mkdir 目录名称
多级目录一起创建# mkdir -p 目录名称1/目录名称2/…
时创建多个目录# mkdir 目录名称1 目录名称2 目录名称3
扩展:Linux快捷键(方向键上下)
在终端中:
按方向键=>向上,其会返回上一次输入的命令
按方向键=>向下,其会返回下一次输入的命令
2、目录删除(必须是空目录)
① rmdir移除空目录
基本语法:
rmdir 目录名称
rmdir = remove directory,移除目录
案例:把家目录下的itheima删除(空目录)
rmdir itheima
② rmdir -p递归删除空目录
基本语法:
rmdir -p 目录名称1/目录名称2/目录名称3/…
主要功能:从右向左一级一级删除空目录
案例:递归删除itheima文件夹中的yunwei文件夹中的shenzhen3
rmdir -p itheima/yunwei/shenzhen3
③ 使用rmdir同时删除多个空目录
rmdir 目录名称1 目录名称2 目录名称3 …
案例:删除家目录中的a、b、c三个空目录
rmdir a b c
总结:
# rmdir 目录名称,删除某个空目录
# rmdir -p 目录名称1/目录名称2/目录名称3/…,同时删除多级目录(从右向左一级一级删除)
# rmdir 目录名称1 目录名称2 目录名称3,同时删除多个空目录
3、文件创建
① touch创建文件
基本语法:
touch 文件名称
主要功能:在Linux系统中的当前目录下创建一个文件
案例:在当前目录下创建一个readme.txt文件
touch readme.txt
② 使用touch命令同时创建多个文件
基本语法:
touch 文件名称1 文件名称2 文件名称3 …
案例:创建一个shop商城文件夹,然后在内部创建index.php/admin.php/config.php三个文件
mkdir shop
touch shop/index.php
touch shop/admin.php
touch shop/config.php
或
touch shop/index.php shop/admin.php shop/config.php
提出问题:观察以下命令,看看有何区别?
第一种写法:touch shop/index.php shop/admin.php shop/config.php
代表在shop目录下首先创建一个index.php,在创建一个admin.php,最后config.php
第二种写法:touch shop/index.php admin.php config.php代表在shop目录下首先创建index.php,然后在当前目录下创建admin.php,最后在当前目录下创建config.php
③ {1…5}根据序号同时创建多个文件
基本语法:
touch 文件名称{开始序号…结束序号}
含义:
根据提供的开始序号~结束序号,一个一个创建文件
案例:创建file1、file2、file3、file4、file5共5个文件
touch file1
touch file2
touch file3
touch file4
touch file5
或
touch file{1…5}
总结:
# touch 文件名称
# touch 文件名称1 文件名称2 文件名称3 …
# touch 文件名称{开始序号…结束序号}
4、文件删除
① 普通删除
基本语法:
rm [选项] 文件或文件夹的名称
选项说明:
-r :针对文件夹,代表递归删除,先把目录下的所有文件删除,然后在删除文件夹
-f :强制删除,不提示,初学者一定要慎重!!!
案例:删除readme.txt文件
rm readme.txt
rm: remove regular empty file ‘readme.txt’?这里可以回复y or n
y代表确认删除
n代表取消删除
案例:强制删除admin.php,不提示(慎重)
rm -f admin.php
案例:删除非空的文件夹(-rf强制递归删除,不提示)
rm -rf shop
提示信息:descend into directory ‘itheima/’?
含义:是否进入itheima目录?
提示信息:remvoe directory ‘itheima/’?
含义:是否删除itheima文件夹?
扩展:Ctrl + C在Linux下的使用方式
在Linux操作系统中,Ctrl + C不是复制,而是中断某个操作
总结:
# rm 文件名称
# rm 文件名称1 文件名称2 文件名称3 …
# rm -f 文件名称 => 强制删除,不提示
# rm -rf 文件夹名称 => 递归删除文件夹
② 扩展:rm -rf /*,一定要慎重
rm -rf /* => 代表删除根目录下的所有文件(如果没有备份,恢复的几率不高)
rm :删除
-r :递归删除(无论文件夹是否为空)
-f :强制删除不提示
/ :代表根分区
- :所有
5、复制操作
① cp复制操作
基本语法:
cp [选项] 源文件或文件夹 目标路径
选项说明:
-r :递归复制,主要针对文件夹
cp = copy复制
案例:把readme.txt文件从当前目录复制一份放到/tmp文件夹中
cp readme.txt /tmp/
② cp复制并重命名文件
基本语法:
cp [选项] 源文件或文件夹 目标路径/新文件或文件夹的名称
案例:把readme.txt文件从当前目录复制一份放到/tmp文件夹中并重命名为readme.txt.bak
cp readme.txt /tmp/readme.txt.bak
③ cp复制文件夹到指定路径
cp -r 源文件夹名称 目标路径/
案例:把shop目录连通其内部的文件统一复制到/tmp目录下
mkdir shop
touch shop/index.php shop/admin.php shop/config.php
cp -r shop /tmp/
总结:
复制文件# cp 源文件名称 指定路径
复制文件并重命名# cp 源文件名称 指定路径/新文件名称
复制文件夹# cp -r 源文件夹 指定路径
6、剪切操作
基本语法:
mv 源文件或文件夹 目标路径/
mv = move,剪切、移动的含义
案例:把readme.txt文件剪切到/tmp目录下
rm -rf /tmp/readme.txt
mv readme.txt /tmp/
案例:把shop文件夹移动到/usr/local/nginx目录下
mkdir /usr/local/nginx
mv shop /usr/local/nginx/
7、重命名操作
什么是重命名?简单来说,就是给一个文件或文件夹更改名称
基本语法:
mv 源文件或文件夹名称 新文件或文件夹的名称
案例:把readme.txt文件更名为README.md文件
mv readme.txt README.md
案例:把shop文件目录更名为wechat目录
mkdir shop
mv shop wechat
总结:
剪切文件# mv 源文件名称 目标路径/
剪切文件夹# mv 源文件夹名称 目标路径/
重命名# mv 源文件或文件夹名称 新文件或文件夹名称
8、打包压缩与解压缩
① 几个概念
打包:默认情况下,Linux的压缩概念一次只能压缩一个文件。针对多文件或文件夹无法进行直接压缩。所以需要提前对多个文件或文件夹进行打包,这样才可以进行压缩操作。
1.txt 5MB
2.txt 10MB
3.txt 15MB
1.txt + 2.txt + 3.txt = 打包 = 123.tar = 30MB
打包只是把多个文件或文件夹打包放在一个文件中,但是并没有进行压缩,所以其大小还是原来所有文件的总和。
压缩:也是一个文件和目录的集合,且这个集合也被存储在一个文件中,但它们的不同之处在于,压缩文件所占用的磁盘空间比集合中所有文件大小的总和要小。
1.txt 5MB
2.txt 10MB
3.txt 15MB
1.txt + 2.txt + 3.txt = 压缩 = 123.tar.gz = 20MB(体积变小了)
② Linux打包操作
基本语法:
tar [选项] 打包后的名称.tar 多个文件或文件夹
选项说明:
-c :打包
-f :filename,打包后的文件名称
-v :显示打包的进度
-u :update缩写,更新原打包文件中的文件(了解)
-t :查看打包的文件内容(了解)
案例:把a.txt、b.txt、c.txt文件打包到abc.tar文件中
tar -cvf abc.tar a.txt b.txt c.txt
案例:把wechat文件夹进行打包wechat.tar
tar -cvf wechat.tar wechat
③ tar -tf以及tar -uf
tar -tf 打包后的文件名称
主要功能:查看tar包中的文件信息
案例:查看abc.tar包中的文件信息
tar -tf abc.tar
tar -uf 打包后的文件名称
u = update,更新,如果还想往tar包中更新或追加内容都可以通过-u选项
案例:向abc.tar包中添加一个d.txt文件
touch d.txt
tar -uf abc.tar d.txt
查看是否添加成功
tar -tf abc.tar
扩展:如何把tar包中的文件释放出来
打包
tar -cf abc.tar a.txt b.txt c.txt
打包 => 释放(-c 变成 -x)
释放
tar -xf abc.tar
④ 打包并压缩(学习的重点)
基本语法:
tar [选项] 压缩后的压缩包名称 要压缩的文件或文件夹
选项说明:
-cf :对文件或文件夹进行打包
-v :显示压缩进度
-z :使用gzip压缩工具把打包后的文件压缩为.gz
-j :使用bzip2压缩工具把打包后的文件压缩为.bz2
-J :使用xz压缩工具把打包后的文件压缩为.xz
压缩速度:gzip > bzip2 > xz
压缩率:gzip < bzip2 < xz
100M 90M 80M 70M
案例:把a.txt、b.txt、c.txt文件打包并压缩为abc.tar.gz
tar -zcf abc.tar.gz a.txt b.txt c.txt
案例:把wechat文件夹压缩为wechat.tar.gz格式的压缩包
tar -zcf wechat.tar.gz wechat
⑤ 对压缩包进行解压
解压过程非常简单,就是把压缩的参数中的c换成x就可以实现解压缩了
*.tar.gz格式的压缩包
tar -zxf 名称.tar.gz
*.tar.bz2格式的压缩包
tar -jxf 名称.tar.bz2
*.tar.xz格式的压缩包
tar -Jxf 名称.tar.xz
案例:把abc.tar.gz格式的压缩包进行解压缩操作
tar -zxf abc.tar.gz
案例:把wechat.tar.gz格式的压缩包进行解压缩操作
tar -zxf wechat.tar.gz
9、zip压缩与解压缩
① zip压缩
基本语法:
zip [选项] 压缩后的文件名称.zip 文件或文件夹
选项说明:
-r :递归压缩,主要针对的是文件夹
Linux下已经有gzip、bzip2以及xz压缩命令了,为什么还需要使用zip压缩呢?
答:zip格式在Windows以及Linux中都是可以正常使用的。
案例:把a.txt、b.txt、c.txt进行压缩为abc.zip
zip abc.zip a.txt b.txt c.txt
案例:把wechat文件夹压缩为wechat.zip
zip -r wechat.zip wechat
② unzip解压缩
基本语法:
unzip 压缩包名称 => 解压到当前目录
unzip 压缩包名称 -d 指定路径 => 解压到指定路径下
案例:对abc.zip文件进行解压缩
unzip abc.zip
案例:把wechat.zip解压到/usr/local/nginx目录下
unzip wechat.zip -d /usr/local/nginx/
总结:
在Linux操作系统中,其拥有很多压缩工具,如gzip、bzip2、xz等等,但是其有一个缺点:
一次只能压缩一个文件(而且无法压缩文件夹)
① 打包,把一个或多个文件打成tar包,并不是压缩,只是把文件合并在一个tar文件中
1.txt 5MB
2.txt 10MB
3.txt 15MB
打包123.tar = 5MB + 10MB + 15MB = 30MB
为什么要打包,就是为了后期的压缩操作。
② 打包并压缩
tar -zcf 压缩包名称.tar.gz 文件或文件夹名称
tar -jcf 压缩包名称.tar.bz2 文件或文件夹名称
tar -Jcf 压缩包名称.tar.xz 文件或文件夹名称
③ 解压缩
tar 把c参数更换为x,就可以实现解压缩 压缩包名称.tar.gz
扩展:
tar -zxf 压缩包名称.tar.gz [参数] 指定路径
第一种解决思路:随用随查,百度、Google
tar -zxf 压缩包名称.tar.gz -C 指定路径
第二种解决思路:可以使用man命令(manual缩写,手册)
man tar命令
tar -zxf 压缩包名称.tar.gz -C 指定路径
④ zip压缩与解压缩
给我们提供一种既可以在Windows中使用的,也可以提供一种在Linux中使用的通用的压缩格式。
zip [-r] 压缩包名称.zip 要压缩的文件或文件夹
解压缩:
unzip 压缩包名称.zip -d 指定路径
typora-copy-images-to: ./media
Linux用户管理
学习目标
1、了解用户和用户组的概念
2、可以添加useradd和删除userdel用户,修改用户密码passwd
3、可以添加groupadd和删除groupdel用户组
4、了解管道符|的作用
5、会使用ifconfig查看IP地址
6、了解网卡配置文件的位置和常见配置项
7、知道常用的SSH客户端连接工具
8、会使用mobaxterm连接到linux
一、用户与用户组的概念
1、为什么要做用户与用户组管理
用户和用户组管理,就是添加用户和用户组,针对每个用户设置不同的密码。
问题:大家平时的笔记本电脑,会设置多个账户吗?为什么?
服务器要添加多账户的作用
针对不同用户分配不同的权限,不同权限可以限制用户可以访问到的系统资源
提高系统的安全性
帮助系统管理员对使用系统的用户进行跟踪
2、Linux的用户及用户组
①Linux的多用户多任务
Linux 系统是一个**多用户多任务**的操作系统,所谓多用户多任务,是指支持多个用户在同一时间内登陆,不同用户可以执行不同的任务,并且互不影响。
例如:
小明所在的运维团队一共有四个人,分别有大毛,二毛,三毛,大毛负责网站,他的账户叫wangzhan, 二毛负责数据库,他的账户叫shujuku。
在同一时间,大毛和二毛都可以登录这台服务器,大毛可以查询网站的日志,二毛可以处理数据库的问题,他们之间互不影响。
由于我们设置了权限,大毛只能访问网站的日志,无法访问数据库;二毛可以处理数据库问题,但是不能访问网站的日志。这就实现了我们的多用户多任务的运行机制。
②什么是用户
任何一个运维人员想要登录服务器,都必须先申请一个账号,然后以这个账号的身份进入系统,就像我们前面说的wangzhan这个账号。
每个账号都拥有一个==唯一的用户名和各自的密码==,用户在登录时输入正确的用户名和密码后,就能够进入系统,默认会进入到这个用户自己的主目录
③什么是用户组
用户组是具有相同特征用户的逻辑集合,简单来说,就是**具有相同==权限==的用户的集合**。
例如:人事部有20名员工,他们都需要访问一个文件夹,如果我们给这20个用户的账号分别设置权限,这样太麻烦了,所以我们会建立一个用户组叫HR,对这个组设置权限,将这20个用户加入这个组就可以了。
④用户和用户组的关系
A 一个用户可以属于一个用户组,具有此用户组的权限
HR组可以访问/hrfile的文件夹,当user01属于HR组,那么user01就可以访问/hrfile这个文件夹
B 一个用户可以属于**多个用户组**,此时具有多个组的共同权限
HR可以访问/hrfile的文件夹,运维可以访问/yunweifile的文件夹,当user01同时属于HR组和运维组,那么user01可以访问 /hrfile和/yunweifile
C 多个用户可以属于一个用户组,多个用户都具有此用户组的权限。
**主组**:指用户创建时默认所属的组,==每个用户的主组只能有一个==。创建用户时会同时创建一个和用户名相同的组
例如:添加用户xiaoming,在建立用户 xiaoming 的同时,就会建立 xiaoming 组作为 xiaoming 用户的初始组。
**附加组**:每个用户只能有一个主组,除主组外,用户再加入其他的用户组,这些用户组就是这个用户**的附加**组。
==每个用户的附加组可以有多个==,而且用户可以有这些附加组的权限。
通常用户和用户组的管理,包含以下工作:
☆ 用户组的管理
☆ 用户账号的添加、删除、修改以及用户密码的管理
注意三个文件:
☆ /etc/passwd 用户配置文件,存储用户的基本信息
☆ /etc/group 存储用户组的信息
☆ /etc/shadow 存储用户的密码信息
二、用户和用户组管理
1、用户组管理
用户组的管理包括用户组的==添加、删除和修改==。
为什么要建立用户组
前面我们说过,人事部有20名员工,我们要建立一个组,叫 hr,这样就不用分别给20个员工设置权限了。
① 用户组添加
命令:groupadd
作用:添加组
语法:# groupadd [参数选项 选项值] 用户组名
选项:-g:设置用户组ID 数字,如果不指定,则默认从1000 之后递增(1-999系统组)
用法一:groupadd 组名
示例代码:
#groupadd hr
含义:新建一个组叫做hr
提示:linux下我们执行完命令,有时候会没有任何提示,直接回到#提示符,这种状态表明,命令执行成功,没有报错。“没有消息就是最好的消息”
存储用户组信息的文件:/etc/group
使用cat命令,查看/etc/group文件,我们可以看到如下图所示:
/etc/group文件结构:
wheel : x : 10 : itheima
用户组名 : 密码(占位符) : 用户组ID : 这个组包含的用户(附属组)
特别说明:
1) 密码位x
代表占位符
,用户组可以设置密码,但是大部分情况下不需要设置
2)组内用户名:表示附加组是该组的用户名称。
例如:
wheel组(组ID10),是itheima账户的附加组,所以itheima这个账户,就显示在这里。
itheima组(组ID1000),是itheima账户的主组, 所以itheima这个账户就不显示在最后。
3)wheel组
只有在wheel组中的普通用户,才可以通过su命令切换到root账户,默认所有普通用户都能切换到root,只要知道root密码,换句话说,默认此配置不生效
② 用户组修改
命令:groupmod
语法:# groupmod [选项 选项值] 用户组名
选项:-g :gid缩写,设置一个自定义的用户组ID 数字
-n :name缩写,设置新的用户组的名称
示例代码:修改hr用户组,将组ID改成1100,将名称改为bjhr用法一:groupmod -g 新的组ID -n 新的组ID 原有组ID
示例代码:
#groupmod -g 1100 -n bjhr hr
含义:将hr组的组ID改成1100,组名改成bjhr
③ 用户组删除
命令:groupdel
语法:# groupdel 用户组名
案例:删除bjhr组
用法一:groupdel 组名
示例代码:
#groupdel bjhr
含义:将bjhr组删除
2、用户管理
用户的管理涉及用户的添加、删除和修改。
与用户相关的文件:/etc/passwd
①useradd添加用户
命令:useradd
作用:添加用户
语法:# useradd [选项 选项的值] … 用户名
选项:-g:表示指定用户的用户主(主要)组,选项值可以是用户组ID,也可以是组名
-G:表示指定用户的用户附加(额外)组,选项值可以是用户组ID,也可以是组名
-u :uid,用户的id(用户的标识符),系统默认会从500 /或1000之后按顺序分配uid,如果不想使用系统分配的,可以通过该选项自定义【类似于腾讯QQ 的自选靓号情况】
-c:comment,添加注释(选择是否添加)
-s:指定用户登入后所使用的shell 解释器,默认/bin/bash【专门的接待员】,如果不想让其登录,则可以设置为/sbin/nologin (重要)
-d:指定用户登入时的启始目录(家目录位置)
-n:取消建立以用户名称为名的群组(了解)
当我新建一个账户叫user01, 同时,系统会自动建立一个组也叫user01
用法一:useradd 用户名
示例代码:
#useradd zhangsan
含义:创建用户zhangsan,不带任何选项。
注意:不用任何参数,创建用户,系统会默认执行以下操作:
1)在 /etc/passwd 文件中创建一行关于zhangsan用户的数据
2)在 /etc/shadow 文件中新增了一行关于zhangsan 密码的数据
3)在 /etc/group 文件中创建一行与用户名相同的组,例如zhangsan
4)在 /etc/gshadow 文件中新增一行与新增群组相关的密码信息,例如zhangsan
5)自动创建用户的家目录,默认在/home下,与用户名同名
验证是否成功:
1)使用tail文件查看/etc/passwd文件
2)使用tail文件查看/etc/group文件
3)验证是否存在家目录(在Centos 下创建好用户之后随之产生一个同名家目录)
②etc/passwd存储用户信息的文件
使用vim命令打开/etc/passwd文件,如下图所示:
root : x : 0 : 0 : root : /root : /bin/bash
用户名 : 密码 : 用户ID : 用户组ID : 注释 : 家目录 : 解释器shell
用户名:登录linux时使用的用户名
密码:此密码位置一般情况都是"x",表示密码的占位,真实密码存储在/etc/shadow
用户ID:用户的识别符,每个用户都有唯一的UID【-u】
用户组ID:该用户所属的主组ID;【-g】
注释:解释该用户是做什么用的;【-c】
家目录:用户登录进入系统之后默认的位置;【-d】
解释器shell:等待用户进入系统之后,用户输入指令之后,该解释器会收集用户输入的指令,转换成机器语言,传递给内核处理;如果解释器是==/bin/bash 表示用户可以登录到系统==,/sbin/nologin表示该用户不能登录到系统【-s】
下面我们来看一下对于useradd参数的使用
企业场景1:
公司新员工lisi,属于gzhr部门,用户ID1200,不允许登录系统 创建用户lisi,默认lisi属于自己同名的主组,让lisi 属于附加组gzhr,用户ID 1200,注释为"hruser lisi",解释器为/sbin/nologin
用法二:useradd -G 附加组名 -u 用户ID -s /sbin/nologin -c “shuser lisi” 用户名
示例代码:
#useradd -G gzhr -u 1200 -s /sbin/nologin -c “gzuser lisi” lisi
含义:创建用户lisi,不带任何选项。
gzhr行的含义:在gzhr的组里(组id 是1002)有一个组内用户lisi(lisi 的附加组就是1002,附加组的名字是gzhr)。
如果需要为一个用户指定多个附加组,只需要将多个附加组的id 通过英文逗号“,”分割即可。
例如-G 500,501,502
① 主组只能有1 个(类似于亲生父母只有一对),附加组可以多个,也可以没有附加组(类似于认干爹干妈,可以有也可以没有,也可以有多个)
② 主组必须有
③ 后期将权限管理的时候,关于文档的属组指的是主组(了解)
③id查看用户信息
命令:id
作用:查看一个用户的一些基本信息(包含用户id,用户组id,附加组id…),该指令如果不指定用户则默认当前用户。
语法1:# id 默认显示当前执行该命令的用户的基本信息
语法2:# id 用户名
, 显示指定用户的基本信息
如何验证以上信息是否正确?
答:验证用户信息:通过文件/etc/passwd,验证用户组信息:通过文件/etc/group
④usermod修改用户
命令:usermod(user modify)
语法:# usermod [选项 选项的值] … 用户名
作用:修改用户的各种属性
选项:-g:表示指定用户的用户主组,选项的值可以是用户组的ID,也可以是组名
-G:表示指定用户的用户附加组,选项的值可以是用户组的ID,也可以是组名
-u:uid,用户的id(用户的标识符),系统默认会从500 之后按顺序分配uid,如果不想使用系统分配的,可以通过该选项自定义【类似于腾讯QQ 的自选靓号情况】
-L:锁定用户,锁定后用户无法登陆系统lock
-U:解锁用户unlock
-c<备注>:修改用户帐号的备注文字
-d<登入目录>:修改用户登入时的目录
-s:修改用户登入后所使用的shell
企业场景2:
公司员工wangwu,属于shhr部门,现在要休产假,产假期间,暂时停止她登陆电脑的权限,同时原来属于gzhr部门的员工lisi,负责wangwu的工作,所以,需要把lisi加入到shhr的组,同时,修改lisi的账户注释为“gzhr shhr user”
对于wangwu用户,我们要执行锁定和解锁操作
对于lisi用户,我们要将lisi加入到shhr的附加组,同时修改lisi账户的注释
用法一:usermod -L 王五账户名
示例代码:
#usermod -L wangwu
含义:将王五账户暂时锁定
用法二:usermod -U 王五账户名
示例代码:
#usermod -U wangwu
含义:将王五账户解锁
用法三:usermod -G 组名 -c “注释内容” 李四用户账号
示例代码:
#usermod -G shhr -c “shhr user” lisi
含义:将李四的账户加入shhr组,并修改注释内容为shhr user
⑤passwd修改用户密码
Linux ==不允许没有密码的用户登录到系统==,因此前面创建的用户目前都处于锁定状态,需要设置密码之后才能登录计算机。
命令:passwd
语法:# passwd 用户名 【如果不指定用户名则修改自己的密码】
作用:修改用户密码
企业场景3:
王五产假休完回到公司上班,需要将王五的账户解锁,在使用usermod -U解锁时,我们看到一个错误信息如下:
usermod: unlocking the user’s password would result in a passwordless account.
解锁这个账户,将导致一个没有密码的账户,因为之前王五的账户没有密码。这时候,我们就需要使用passwd命令,给王五的账户设置一个密码
用法一:passwd 账户名
示例代码:
#passwd wangwu
含义:为wangwu账户设置密码
注意:
当密码过于简单时,系统会提示这是一个不好的密码,因为它太简单了,但是我们仍然可以坚持使用这个密码。
在我们输入密码时,屏幕不会有任何显示。
密码需要输入两次,请确保两次输入的密码是一样的。
示例代码:设置wangwu的用户密码
⑥认识/etc/shadow文件
由于 /etc/passwd文件允许所有用户读取,易导致用户密码泄露,因此 Linux 系统将用户的密码信息从 /etc/passwd 文件中分离出来,并单独放到了shadow文件中。
/etc/shadow 文件只有 root 用户拥有读权限,其他用户没有任何权限,这样就保证了用户密码的安全性。
与用户密码相关的文件:/etc/shadow
为用户设置密码之后,会自动在/etc/shadow文件中进行体现,使用vim编辑器打开:
第一列为用户名,例如zhangsan
后面是加密后的密码,就是$开头的字符串
如果显示为!!,则表示这个用户没有设置密码。
由以上截图所知,zhangsan,lisi是没有设置密码的。wangwu我们刚刚设置了密码,所以显示为一个加密的字符创
任务:新建一个账户叫ityunwei
新建第二个账户叫shichang
给ityunwei账户设置一个密码
进入shadow文件,观察两个账户的区别
⑦su切换用户
在设置用户密码之后就可以使用此账号进行登录系统了,如果系统处于已登录状态,则可以使用su命令进行切换用户。
为了系统安全,企业中通常不会允许root用户直接登录计算机,但是工作需要,我们又需要使用root权限,这时候,我们就可以先使用一个普通用户登录计算机,再通过su命令切换到root权限。
命令:su
语法:# su [-] 账号
作用:切换用户
用法一:su 用户名
示例代码:
#su root
含义:切换到root权限
注意:
a. 从root 往普通用户切换不需要密码,但是反之则需要root 密码;
b. 切换用户之后前后的工作路径是不变的,添加了选项[-]会自动切换到用户的家;
c. 普通用户没有办法访问root 用户家目录,但是反之则可以;
启用wheel组设置(了解)
步骤1:使用vim编辑器 打开/etc/pam.d/su文件
步骤2:编辑文件,去掉auth required pam_wheel.so use_uid这一行前面的#,使这一行配置生效
步骤3:下面是去掉#后的状态
步骤4:保存退出 :wq
这时,只有在wheel组内的用户才可以su到root
⑧userdel删除用户
命令:userdel
语法:# userdel 选项 用户名
作用:删除账户及其对应家目录
选项:-r:表示删除用户的同时,删除其家目录/home下的对应文件夹
注意:已经登录的wangwu用户删除的时候提示删除失败,但是没有登录的lisi 用户可以正常删除,那这个时候想删除wangwu怎么办呢?
解决办法:简单粗暴,kill 对应用户的全部进程
提示:所有跟用户操作的命令(除passwd 外,只能修改自己的密码,即不指定用户名)只有root 超级管理员有权限执行。
备注:也可以在登录需要删除的用户之后,按下快捷键“ctrl+d”进行对当前用户的注销,随后退回到上一个用户(root)此时就可以对需要删除的用户进行删除操作。
删除账号=>删除家=>删除所属组(主组)
三、管道
1、管道符
管道符:|
作用:管道是一种通信机制,通常用于进程间的通信。它表现出来的形式将前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)。
2、过滤功能
ls / | grep “y”
grep 指令用于“过滤”
grep 语法:grep 选项 文件路径/内容
针对上面这个命令说明:
① 以管道作为分界线,前面的命令有个输出,后面需要先输入(缺少查找范围),然后再过滤,最后再输出,通俗的讲就是管道前面的输出就是后面指令的输入。
为了便于理解,上述的指令变相实现可以如下:
ls / > xxx.txt 将ls /的结果保存到xxx.txt文件中
grep “y” xxx.txt 使用grep指令搜索xxx.txt中的包含y的行
② grep 指令:主要用于过滤
语法:# grep [选项] “搜索关键词” 搜索范围
示例代码:获取/根目录下包含关键字"y"的文件信息
#ll / |grep y
3、特殊功能
通过管道的操作方法来实现less 的等价效果(了解)
例如:源指令是"less xxx.txt"使用管道的话则可以写成:cat xxx.txt | less
之前可以通过less命令查看一个文件,可以# less 路径
现在通过管道还可以:#cat 路径 | less
示例代码:
4、扩展处理
问题:请使用学过的命令,来统计某个目录下的文档的总个数?
示例代码:使用Linux命令统计“/”下的文档的个数
示例代码:用户在计算机中有一个配置文件(/etc/passwd),一般情况下,一个用户会占用一行配置,请你使用现学的管道统计当前计算机中一共有多少个用户个信息
5、xargs命令扩展
问题:为什么需要xargs命令?
答:之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了 xargs 命令。
首先来看一个命令:
find /etc -name “.conf" | ls -l (错误)
find /etc -name ".conf” | xargs ls -l (正确)
xargs特别说明:
xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。
xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
xargs 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。
xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。
示例代码:多行输入单行输出
示例代码:-n 选项多行输出
xargs作为思考题
四、网络配置
1、ifconfig查看网络信息
命令:ifconfig
作用:获取网卡的相关信息
语法:# ifconfig
用法一:ifconfig
示例代码:
ifconfig
含义:查看网络信息
注意,我们发现当前ens33看不到IP地址信息,那是因为网卡默认不启动
再次使用ifconfig命令,查看网络信息
ens33 :是默认的网卡
lo(loop,循环):表示回环网卡
virbr0:虚拟网络接口,因为咱们使用vmware虚拟机安装Centos
2、网卡配置文件位置
Linux的网卡配置文件,存放在/etc/sysconfig/network-scripts目录下,文件名格式为ifcfg-网卡名称
我们可以看到,ifconfig命令中显示我们的网卡叫做ens33,对应的,这里就有一个ifcfg-ens33的文件
2、配置文件详解
使用cat命令,查看ifcfg-ens33文件
3、systemctl查看网卡状态
命令:systemctl
语法:# systemctl status network
用法一:systemctl status network
示例代码:
#systemctl status network
含义:查看网络状态,active表示启用的,活动的。
4、systemctl启动/重启/停止网卡
命令:systemctl
语法:# systemctl start/stop/restart network
参数:start启动,restart重启,stop停止
用法一:systemctl start/stop/restart network
示例代码:
#systemctl stop network
含义:停止网卡服务
#systemctl start network
含义:开启网卡服务
#systemctl restart network
含义:重启网卡服务
Linux的权限管理操作
一、权限概述
1、权限的基本概念
在多用户计算机系统的管理中,权限是指某个特定的用户具有特定的系统资源使用权利。
在Linux 中分别有读、写、执行权限:
权限针对文件 | 权限针对目录 | |
---|---|---|
读r | 表示可以查看文件内容;cat | 表示可以(ls)查看目录中存在的文件名称 |
写w | 表示可以更改文件的内容;vim 修改,保存退出 | 表示是否可以删除目录中的子文件或者新建子目录(rm/touch/mkdir) |
执行x | 表示是否可以开启文件当中记录的程序,一般指二进制文件(.sh) => 绿色 | 表示是否可以进入目录中(cd) |
注:一般给予目录读权限时,也将会给其执行权限,属于“套餐”组合
可读权限 read => r(简写),可写权限 write => w(简写),可执行权限 excute => x(简写)
2、为什么要设置权限
1)服务器中的数据价值
2)员工的工作职责和分工不同
3)应对自外部的攻击(挂马)
4)内部管理的需要
3、Linux用户身份类别
Linux 系统一般将文件权限分为3 类:
read(读)
write(写)
execute(执行)
**谁**对文件有读,写,执行的权限呢? 答:针对三大类用户
4、user文件拥有者
文件的拥有者:默认情况下,谁创建了这个文件谁就是文件的拥有者。文件的拥有者可以进行更改并不是一成不变的。
裴凯 => linux.txt,默认情况下,裴凯就是linux.txt文件的拥有者
5、group文件所属组内用户
group所属组内用户代表与文件的所属组相同的组内用户。
比如,裴凯与罗新兴、周卓都同属于一个itheima的用户组,罗新兴和周卓就是这个文件的组内用户。
6、other其他用户
other其他用户代表这些人既不是文件的拥有者,也不是文件所属组内的用户,我们把这些人就称之为other其他用户。
7、特殊用户root
在Linux操作系统中,root拥有最高权限(针对所有文件),所以权限设置对root账号没有效果。
在Linux系统中,三大类用户也可以拥有简写形式user(u)、group(g)、other(o)
二、普通权限管理
1、ls -l命令查看文件权限
基本语法:
ls -l
或
ll
备注:ll命令是红帽以及CentOS系统特有的一个命令,在其他操作系统中可能并不支持
2、文件类型+权限解析
Linux一共有7种文件类型,分别如下:
-:普通文件
d:目录文件
l: 软链接(类似Windows的快捷方式)
(下面四种是特殊文件)
b:block,块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如猫(上网猫)等串口设备)
s:套接口文件/数据接口文件(例如启动一个MySql服务器时会产生一个mysql.sock文件)
3、文件或文件夹权限设置(字母)
基本语法:ch = change mod简单理解权限
chmod [选项] 权限设置 文件或目录的名称
选项说明:
-R :递归设置,针对文件夹(目录)
重点:字母设置并不难,重点看三方面
第一个:确认要给哪个身份设置权限,u、g、o、ugo(a)
第二个:确认是添加权限(+)、删除权限(-)还是赋予权限(=)
第三个:确认给这个用户针对这个文件或文件夹设置什么样的权限,r、w、x
案例:给readme.txt文件的拥有者,增加一个可执行权限
chmod u+x readme.txt
案例:把readme.txt文件的拥有者的可执行权限去除
chmod u-x readme.txt
案例:为readme.txt中的所属组内用户赋予rw权限
chmod g=rw readme.txt
案例:给shop目录及其内部的文件统一添加w可写权限
chmod -R ugo+w shop
或
chomd -R a+w shop
案例:给shop目录设置权限,要求拥有者rwx,组内用户r-x,其他用户r-x
chmod -R u=rwx,g=r-x,o=r-x shop
4、文件或文件夹权限设置(数字)
经常会在技术网站上看到类似于# chmod 777 a.txt 这样的命令,这种形式称之为数字形式权限。
文件权限与数字的对应关系,我们会发现没有7这个数字
权限 | 对应数字 | 意义 |
---|---|---|
r | 4 | 可读 |
w | 2 | 可写 |
x | 1 | 可执行 |
- | 0 | 没有权限 |
777 :
第一个数字7,代表文件拥有者权限
第二个数字7,代表文件所属组内用户权限
第三个数字7,代表其他用户权限
rwx = 4 + 2 + 1 = 7
rw = 4 + 2 = 6
rx = 4 + 1 = 5
案例:给readme.txt设置权限,文件的拥有者rwx,组内用户rw,其他用户r
rwx = 7
rw = 6
r = 4
chmod 764 readme.txt
案例:给shop文件夹设置777权限
chmod -R 777 shop
5、奇葩权限
问题:用超级管理员设置文档的权限命令是# chmod -R 731 shop,请问这个命令有没有什么不合理的地方?
答:731权限进行拆解
7 = 4 + 2 + 1 = rwx
3 = 2 + 1 = wx
1 = x
问题在权限731中的3权限,3表示写+执行权限,但是写又必须需要能打开之后才可以写,因此必须需要具备可读权限,因此此权限设置不合理。
注:实际工作中,各位小伙伴在设置权限时一定不要设置这种"奇葩权限",一般情况下,单独出现2、3的权限数字一般都是有问题的权限。
6、练习题
1)使用root 用户设置文件夹/root/shop 的权限为:属主全部权限,属组拥有读和执行权限,其他用户没有权限,请使用数字权限的形式设置
rwx=7,rx=4+1=5,0
chmod -R 750 /root/shop
2)请置文件/root/readme.txt 的权限,权限要求为:
属主拥有全部权限,属组要求可以读写,其他用户只读,要求使用数字形式;
rwx=7,rw=4+2=6,r=4
chmod 764 /root/readme.txt
3)请设置/root/email.doc权限,权限要求只有属主可以读写,除此之外任何人没有权限;
rw=6,0,0
chmod 600 /root/email.doc
7、特殊权限说明
在Linux 中,如果要删除一个文件,不是看文件有没有对应的权限,而是看文件所在的目录是否有写权限,如果有才可以删除(同时必须具备执行权限)。
/shell/readme.txt
我们想删除readme.txt文件,必须要对shell目录具有可写权限,否则文件无法删除
三、文件拥有者以及文件所属组设置
文件拥有者:属主
文件所属组:属组
1、什么是属主与属组
属主:所属的用户,文档所有者,这是一个账户,这是一个人
属组:所属的用户组,这是一个组
2、文件拥有者与所属组的查看
ls -l
或
ll
3、了解文件的拥有者与文件所属组来源
在Linux操作系统中,每个文件都是由Linux系统用户创建的。
在Linux操作系统中,每个用户都具有一个用户名称以及一个主组的概念
su - itheima
touch readme.txt
ll readme.txt
-rw-rw-r–. 1 itheima itheima 0 Mar 20 15:17 readme.txt
4、为什么需要更改文件拥有者与所属组
一个财务表格,以前由胡一菲进行更新,她有读写权限,现在胡一菲去阿拉善沙漠找曾老师了,改权限没用,需要把属主改成诸葛大力,由诸葛大力更新。
5、文件拥有者设置
基本语法:ch = change ,own = owner
chown [选项] 新文件拥有者名称 文件名称
选项说明:
-R :代表递归修改,主要针对文件夹
案例:把/root/readme.txt文件的拥有者更改为itheima
chown itheima /root/readme.txt
案例:把/root/shop文件夹的拥有者更改为linuxuser
chown -R linuxuser /root/shop
6、文件所属组的设置
基本语法: ch = change , group,chgrp
chgrp [选项] 新文件所属组名称 文件名称
选项说明:
-R : 代表递归修改,主要针对文件夹
案例:把/root/readme.txt文件的所属组名称更改为itheima
chgrp itheima /root/readme.txt
案例:把/root/shop文件夹的所属组名称也更改为itheima
chgrp -R itheima /root/shop
7、chown同时修改属主与属组
基本语法:
chown [选项] 文件拥有者名称:文件所属组名称 文件名称
或
chown [选项] 文件拥有者名称.文件所属组名称 文件名称
选项说明:
-R : 代表递归修改,主要针对文件夹
案例:readme.txt文件的拥有者与所属组同时更改为root
chown root:root readme.txt
或
chown root.root readme.txt
案例:更改shop目录的拥有者以及所属组为root
chown -R root:root shop
或
chown -R root.root shop
四、特殊权限(扩展)
1、设置位S(针对二进制文件)
☆ 设置位S的作用
作用:为了让一般使用者临时具有该文件所属主/组的执行权限。
主要针对二进制文件(命令)
例如:/usr/bin/passwd在执行它的时候需要去修改/etc/passwd和/etc/shadow等文件,这些文件除了root外,其他用户都没有写权限,但是又为了能让普通用户修改自己的密码,该怎么办呢?
whereis命令,主要功能就是查询某个命令所在的路径,基本语法 => whereis passwd
itheima普通账号 => 执行/usr/bin/passwd => 修改/etc/shadow文件(存放用户的密码)
/etc/shadow文件比较特殊,其权限为— --- —(000),除root外,其他人都没有权限
☆ 去除S位权限
chmod u-s /usr/bin/passwd
或者
chmod 0755 /usr/bin/passwd
☆ 添加S位权限
chmod u+s /usr/bin/passwd
或者
chmod 4755 /usr/bin/passwd
2、沾滞位T(针对文件夹)
☆ 粘滞位作用
基本语法:
chmod -R o+t 文件夹的名称
或
chmod -R 1777 文件夹的名称
主要功能:只允许文件的创建者和root用户删除文件(防止误删除权限位)
案例:/tmp文件夹,拥有最高权限777,比如itheima创建了一个文件在此目录,linuxuser用户可以对其进行删除操作,这种显然不太合适。
7 = r + w + x = 可读、可写、可执行
案例:使用ls -l命令查看/tmp目录权限
ls -ld /tmp
或
ll -d /tmp
☆ 移除粘滞位
chmod -R o-t /tmp
或
chmod -R 0777 /tmp
☆ 添加粘滞位
chmod -R o+t /tmp
或
chmod -R 1777 /tmp
五、ACL访问控制
1、为什么需要ACL
ACL,是 Access Control List(访问控制列表)的缩写,在 Linux 系统中, ACL 可实现对单一用户设定访问文件的权限。
扩展:ACL权限可以针对某个用户,也可以针对某个组。ACL优势就是让权限控制更加的精准。
2、获取某个文件的ACL权限
基本语法:
getfacl 文件或目录名称
3、给某个文件设置ACL权限
setfacl [选项] 文件或目录名称
选项说明:
-m : 修改acl策略
-x : 去掉某个用户或者某个组的权限
-b : 删除所有的acl策略
-R :递归,通常用在文件夹
案例:针对readme.txt文件给linuxuser设置一个权限=>可读
setfacl -m u:linuxuser:r readme.txt => 针对某个用户开通ACL权限
案例:针对shop文件夹给itheima组设置一个权限=>可读可写权限rw
setfacl -R -m g:itheima:rw shop => 针对某个用户组开通ACL权限
案例:把linuxuser用户权限从readme.txt中移除掉
setfacl -x u:linuxuser readme.txt
案例:把itheima用户组权限从shop中移除掉
setfacl -x -R g:itheima shop
案例:把readme.txt文件中的所有ACL权限全部移除
setfacl -b readme.txt
六、umask(了解,不要更改!!!)
1、什么是umask
umask表示创建文件时的默认权限(即创建文件时不需要设置而天生的权限)
root用户下,touch a ,文件a的默认权限是644
普通用户下,touch b ,文件b的默认权限是664
644和664我们并没有设置,其中的关键因素就是umask
扩展:实际上我们创建一个普通文件最高权限666。而创建一个文件夹其最高权限777
实际文件权限 = 最高权限 - umask的值
2、获取用户的umask值
umask
0022
注:0022中第一位0代表特殊权限位,可以不设置。
umask的默认值,在root和普通用户下是不一样的,分别是022和002
为什么文件在root下创建就是644,在itheima下就是664
root : 666 - 022 = 644
itheima:666 - 002 = 664
3、修改umask值(一定不要改)
☆ 临时修改(重启后失效)
umask 002
777 - 002 = 775
☆ 永久修改
vim ~/.bashrc
① 在文件末尾添加umask 002
② 保存退出
③ su切换用户则立即生效
Linux自有服务与软件包管理
服务是一些特定的进程,自有服务就是系统开机后就自动运行的一些进程,一旦客户发出请求,这些进程就自动为他们提供服务,windows系统中,把这些自动运行的进程,称为"服务"
举例:当我们使用SSH客户端软件连接linux的时候,我们的服务器为什么会对连接做出响应?是因为SSH服务开机就自动运行了。
所谓自有服务,简单来说,可以理解为Linux系统开机自动运行的服务(程序)。
一、systemctl管理系统服务
1、systemctl概述
CentOS6版本:
service命令(管理服务开启、停止以及重启)+ chkconfig(定义开机启动项)
service network start|stop|restart
CentOS7版本:
systemctl命令 = system系统 + control控制(服务管理+开启启动项管理)
systemctl start|stop|restart network
2、显示系统服务
基本语法:
systemctl [选项]
选项说明:
list-units --type service --all:列出所有服务(包含启动的和没启动的)
list-units --type service:列出所有启动的服务
案例:列出Linux系统中所有的服务(包含启动的和没启动的)
systemctl list-units --type service --all
案例:只列出已经启动的Linux系统服务
systemctl list-units --type service
案例:把systemctl显示系统服务与管道命令相结合,筛选我们想要的服务信
systemctl list-units --type service | grep sshd
3、Linux系统服务管理
☆ status查看状态
查看系统服务的状态
systemctl status 系统服务的名称
案例:查询系统中网络服务的状态信息
systemctl status network
案例:查询系统中sshd服务的状态信息
systemctl status sshd
☆ stop停止服务
systemctl stop 系统服务的名称
案例:使用systemctl命令停止network网络服务
systemctl stop network
☆ start启动服务
systemctl start 系统服务的名称
案例:使用systemctl命令启动network网络服务
systemctl start network
☆ restart重启服务
systemctl restart 系统服务的名称
等价于
systemctl stop 系统服务的名称
systemctl start 系统服务的名称
案例:使用systemctl命令重启crond计划任务的服务信息
systemctl restart crond
☆ reload热重载技术
systemctl reload 系统服务名称
reload:重新加载指定服务的配置文件(并非所有服务都支持reload,通常使用restart)
有些服务,如Nginx,更改了配置文件,但是不能重启Nginx服务,只是想立即让我们配置文件的更改生效,则就可以使用热重载技术了。
案例:使用热重载技术重新加载crond服务
systemctl reload crond
4、服务持久化(开机自启与开机不自启)
所谓服务持久化,就是服务在开机的时候,是否自动启动。
☆ 开机自启
systemctl enable 系统服务的名称
案例:把network网络服务设置为开机自启动
systemctl enable network
network.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig network on
以上提示代表network.service不是一个本地的系统服务,所以想设置开机自启需要使用/sbin/chkconfig进行操作
/sbin/chkconfig network on
案例:把crond计划任务的服务信息添加到开机自启动中
systemctl enable crond
☆ 开机不自启
systemctl disable 系统服务的名称
案例:把crond计划任务的服务信息从开机自启动中移除
systemctl disable crond
二、扩展:系统运行级别
1、什么是运行级别
运行级别全称(Running Level),代表Linux系统的不同运行模式
2、CentOS6的运行级别
vim /etc/inittab
0 系统关机状态 halt (Do NOT set initdefault to this)
1 单用户工作状态 Single user mode (类似Windows的安全模式,Linux忘记密码)
2 多用户状态(没有NFS) Multiuser, without NFS (The same as 3, if you do not have networking)
3 多用户状态(有NFS) Full multiuser mode (字符模式,服务基本都是此模式)
4 系统未使用,留给用户 unused
5 图形界面 X11 (图形模式,个人计算机都是此模式)
6 系统正常关闭并重新启动 reboot (Do NOT set initdefault to this)
3、CentOS7的运行级别
poweshell
0 shutdown.target
1 emergency.target
2 rescure.target
3 multi-user.target 字符模式
4 无
5 graphical.target 图形模式
6 无
4、init命令(临时更改运行模式)
init 模式编号
案例:立即关机
shutdown -h 0或now
或
halt -p
或
init 0
案例:立即重启
reboot
或
init 6
案例:把计算机切换到字符模式(黑窗口)
init 3
案例:把计算机切换到图形模式(图形界面)
init 5
5、CentOS6中的chkconfig
问题:在CentOS7中,设置network开机启动时,系统要求使用chkconfig命令
chkconfig network on
设置完成后,怎么查看network有没有随开机自动启动呢?
chkconfig --list |grep network
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
0 关机模式
1 单用户模式
2 多用户模式(无NFS)
3 字符模式
4 自定义模式
5 图形模式
6 重启模式
三、NTP时间同步服务
1、什么是NTP服务
NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议。
工作场景:
公司开发了一个电商网站,由于访问量很大,网站后端由100台服务器组成集群。50台负责接收订单,50台负责安排发货,接收订单的服务器需要记录用户下订单的具体时间,把数据传给负责发货的服务器,由于100台服务器时间各不相同,记录的时间经常不一致,甚至会出现下单时间是明天,发货时间是昨天的情况。
2、NTP时间同步的原理
问题:标准时间是哪里来的?
现在的标准时间是由原子钟报时的国际标准时间UTC(Universal Time Coordinated,世界协调时),所以NTP获得UTC的时间来源可以是原子钟、天文台、卫星,也可以从Internet上获取。
在NTP中,定义了时间按照服务器的等级传播,Stratum层的总数限制在15以内
工作中,通常我们会直接使用各个组织提供的,现成的NTP服务器
备注:千万不要改Windows系统时间!
3、从哪里找合适的NTP服务器呢?
NTP授时网站:http://www.ntp.org.cn/pool.php
4、NTP时间同步操作
☆ 手工同步
基本语法:
ntpdate NTP服务器的IP地址或域名
案例:查看Linux系统时间
date
案例:从NTP服务器中同步系统时间
ntpdate cn.ntp.org.cn
☆ 自动同步
基本语法:
① 启动ntpd服务
systemctl start ntpd
② 把ntpd服务追加到系统开机启动项中
systemctl enable ntpd
问题1:启动ntpd服务后,是不是时间就自动同步了?
启动后就自动同步了
问题2:需不需要让ntpd服务,开机自动运行?
需要
ntpd服务配置文件位置 /etc/ntp.conf
四、Linux下的软件包管理
1、什么是软件包
这是什么?
由以上图解可知,这个PCQQ2019.exe是Windows中的软件安装包。
所谓的Linux软件包就是Linux下软件的安装程序
2、Linux下软件的安装方式
① RPM软件包安装 => 软件名称.rpm
② YUM包管理工具 => yum install 软件名称 -y
③ 源码安装 => 下载软件的源代码 => 编译 => 安装(最麻烦的,但是也最稳定)
3、二进制软件包
二进制包,也就是源码包经过成功编译之后产生的包。
二进制包是 Linux 下默认的软件安装包,目前主要有以下 2 大主流的二进制包管理系统:
- RPM 包管理系统:功能强大,安装、升级、査询和卸载非常简单方便,因此很多 Linux 发行版都默认使用此机制作为软件安装的管理方式,例如 Fedora、CentOS、SuSE 等。
- DPKG 包管理系统:由 Debian Linux 所开发的包管理机制,通过 DPKG 包,Debian Linux 就可以进行软件包管理,主要应用在 Debian 和 Ubuntu 中。
RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写
作用:rpm 的作用类似于豌豆荚,华为应用市场,App Store,主要作用是对linux 服务器上的软件包进行对应管理操作,管理分为:查询、卸载、安装/更新。
4、获取*.rpm软件包
a. 去官网去下载(http://rpm.pbone.net);
b. 不介意老版本的话,可以从光盘(或者镜像文件)中读取;CentOS7.6*.iso
5、查询系统中已安装的rpm软件
rpm -qa |grep 要搜索的软件名称
选项说明:
-q :query,查询操作
-a :all,代表所有
案例1:查询计算机中已安装的rpm软件包
rpm -qa
案例2:搜索计算机中已安装的firefox软件包
rpm -qa |grep firefox
6、卸载CentOS系统中的rpm软件包
rpm -e 软件名称 [选项]
选项说明:
–nodeps :强制卸载
案例:把系统中的firefox浏览器进行卸载操
rpm -qa |grep firefox
firefox-60.2.2-1.el7.centos.x86_64
rpm -e firefox-60.2.2-1.el7.centos.x86_64
7、rpm软件包的安装
基本语法:
rpm -ivh 软件包的名称.rpm
选项说明:
-i:install,安装
-v:显示进度条
-h:表示以"#"形式显示进度条
8、rpm软件包的获取(光盘)
第一步:在VMware虚拟机中加载CentOS7.6的安装光盘
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7Mkes2SD-1630133576196)(media/image-20200321152142795.png)]
第二步:使用 # lsblk(list block devices)或者df -T 查看块状设备的信息
lsblk
[root@yunwei ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─centos-root 253:0 0 17G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sr0 11:0 1 4.3G 0 rom /run/media/itheima/CentOS 7 x86_64
由以上图解可知,/dev/sr0代表光驱设备 => 挂载点 => /run/media/itheima/CentOS 7 x86_64文件夹
或
df -T
Linux操作系统的中所有存储设备必须先挂载后使用
第三步:使用cd命令,切换到挂载目录
cd /run/media/itheima/CentOS\ 7\ x86_64
第四步:使用cd命令,切换到Packages软件包中
cd Packages
第五步:查询我们要安装的软件包
ls |grep firefox
firefox-60.2.2-1.el7.centos.x86_64.rpm
第六步:使用rpm -ivh命令安装软件
rpm -ivh firefox-60.2.2-1.el7.centos.x86_64.rpm
输入firefox + Tab,让其自动补全
9、rpm软件包的升级
基本语法:
rpm -Uvh 升级后的软件包名称.rpm
选项说明:
-U :Update,更新操作
案例:使用rpm -Uvh对firefox-60.2.2版本进行升级
rpm -Uvh firefox-68.4.1-1.el7.centos.x86_64.rpm
10、rpm扩展
☆ 依赖关系
一个软件必须先有其他软件才能运行,例如之前xmind启动过程中提示的缺少DLL,称之为依赖
WAMP(Windows + Apache + MySQL + PHP)安装前必须先安装VC++ 2014 x86_64,这种情况就称之为有依赖关系。
60.8.0的firefox可以更新成功
下面我们尝试更新到68.4.1的版本
用法:rpm -Uvh 软件包名称
rpm -Uvh firefox-68.4.1-1.el7.centos.x86_64.rpm
使用rpm命令,安装68.4.1版本的软件包
错误提示:
error:Failed dependencies:
提示安装68版本的firefox需要依赖nspr4.21的版本,nss的3.44的版本,这就是我们说的依赖关系。
为了解决依赖关系的问题,有另外一个管理工具叫做yum,后面我们会讲到。
A软件
A软件 => 需要依赖B软件
B软件 => 需要依赖C软件
C软件
依赖关系的解决:使用YUM软件包管理工具对其进行安装(自动解决依赖关系)
yum install firefox -y
☆ 查看文件所属的包名
基本语法:f = file
rpm -qf 文件名称
主要功能:判断某个文件所属的包名称
案例:查询/etc/ntp.conf 属于哪个软件包
rpm -qf /etc/ntp.conf
ntp-4.2.6p5-28.el7.centos.x86_64
☆ 查询软件安装完成后,生成了哪些文件
基本语法:l = list,显示这个软件安装后生成了哪些文件
rpm -ql 软件名称
案例1:查询firefox软件生成了哪些文件
rpm -ql firefox
特别说明:软件安装完成后,一共生成了以下几类文件
配置文件类:/etc目录
程序文件本身,二进制文件命令:/usr/bin或/usr/sbin目录
文档手册:/usr/share/doc或man目录
案例2:查询openssh软件生成了哪些文件
rpm -ql openssh
11、光盘的挂载与解挂
在Linux操作系统中,所有的存储设备都必须先挂载然后才能使用。
问题:为什么当我们直接访问/run/media/itheima/CentOS 7 x86_64就相当于访问光盘
答:主要原因就是因为CentOS7的操作系统自动把光驱设备挂载到此目录了,访问这个目录就相当于访问光盘。
☆ 解挂
cd ~
umount /run/media/itheima/CentOS\ 7\ x86_64
常见问题:当我们执行以上命令时,系统提示target is busy!
出现以上问题的主要原因在于我们当前所在的目录为挂载目录。
☆ 挂载
mount 设备文件 挂载目录
提示:光驱的设备文件为/dev/sr0
案例:把光驱挂载到/mnt/cdrom目录
mkdir /mnt/cdrom
mount /dev/sr0 /mnt/cdrom
mount: /dev/sr0 is write-protected, mounting read-only
案例:把/mnt/cdrom进行解挂操作
cd ~
umount /mnt/cdrom
Linux系统自有服务
一、Linux中防火墙firewalld
1、什么是防火墙
防火墙:防范一些网络攻击。有软件防火墙、硬件防火墙之分。
防火墙选择让正常请求通过,从而保证网络安全性。
3、Linux中的防火墙分类
CentOS5、CentOS6 => 防火墙 => iptables防火墙
CentOS7 => 防火墙 => firewalld防火墙
firewalld = fire火 wall墙 daemon守护进程
4、firewalld防火墙
☆ 区域
firewalld增加了区域(zone)的概念,所谓区域是指,firewalld预先准备了几套防火墙策略的集合,类似于策略的模板,用户可以根据需求选择区域。
常见区域及相应策略规则(规则:哪些端口或服务可以通过防火墙,哪些不能通过)
区域 | 默认策略 |
---|---|
trusted | 允许所有数据包 |
home | 拒绝流入的流量,除非与流出的流量相关,允许ssh,mdns,ippclient,amba-client,dhcpv6-client服务通过 |
internal | 等同于home |
work | 拒绝流入的流量,除非与流出的流量相关,允许ssh,ipp-client,dhcpv6-client服务通过 |
public | 拒绝流入的流量,除非与流出的流量相关,允许ssh,dhcpv6-client服务通过 |
external | 拒绝流入的流量,除非与流出的流量相关,允许ssh服务通过 |
dmz | 拒绝流入的流量,除非与流出的流量相关,允许ssh服务通过 |
block | 拒绝流入的流量,除非与流出的流量相关,非法流量采取拒绝操作 |
drop | 拒绝流入的流量,除非与流出的流量相关,非法流量采取丢弃操作 |
案例:在Linux系统中安装httpd服务(Web服务),占用计算机的80端口
yum install httpd -y
systemctl start httpd
安装启动完成后,在浏览器中,输入http://服务器的IP地址/即可访问httpd服务页面
以上操作只能使用Google浏览器、360浏览器或者Firefox火狐浏览器,一定不要使用IE
以上问题的原因在于:firewalld防火墙已经把httpd(80端口)屏蔽了,所以没有办法访问这台服务器的80端口(httpd服务)
临时解决办法:
systemctl stop firewalld
☆ 运行模式和永久模式
运行模式:此模式下,配置的防火墙策略立即生效,但是不写入配置文件
永久模式:此模式下,配置的防火墙策略写入配置文件,但是需要reload重新加载才能生效。
=firewalld默认采用运行模式==
5、防火墙设置
☆ 防火墙的启动、停止以及查看运行状态
查看运行状态
systemctl status firewalld
停止防火墙(学习环境任意操作,生产环境一定不要停止防火墙)
systemctl stop firewalld
记住:防火墙一旦停止,其设置的所有规则会全部失效!
启动防火墙
systemctl start firewalld
☆ 防火墙重启与重载操作
重启操作
systemctl restart firewalld
restart = stop + start,重启首先停止服务,然后在重新启动服务
重载操作
systemctl reload firewalld
我们对防火墙的配置文件做了更改(永久模式),需要使用reload进行重载让其立即生效
reload并没有停止正在运行的防火墙服务,只是在服务的基础上变换了防火墙规则
☆ 把防火墙设置为开机启动与开机不启动
开机启动
systemctl enable firewalld
开机不启动
systemctl disable firewalld
6、firewalld防火墙规则
☆ firewalld管理工具
基本语法:
firewall-cmd [选项1] [选项2] […N]
☆ 查看防火墙默认的区域(zone)
firewall-cmd --get-default-zone
运行效果:
☆ 查看所有支持的区域(zones)
firewall-cmd --get-zones
运行结果:
为什么要有区域的概念:其实不同的区域就是不同的规则
☆ 查看当前区域的规则设置
firewall-cmd --list-all
运行结果:
[root@jk ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: dhcpv6-client ssh (包括ipv4 和ipv6)
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
☆ 查看所有区域的规则设置
firewall-cmd --list-all-zones
运行结果:
☆ 添加允许通过的服务或端口(重点)
① 通过服务的名称添加规则
防火墙的配置文件都在(ls /usr/lib/firewalld/services/)中。.xml是配置文件。
firewall-cmd --zone=public --add-service=服务的名称
备注:服务必须存储在/usr/lib/firewalld/services目录中
案例:把http服务添加到防火墙的规则中,允许通过防火墙
firewall-cmd --zone=public --add-service=http
扩展:把http服务从防火墙规则中移除,不允许其通过防火墙
firewall-cmd --zone=public --remove-service=http
firewall-cmd --list-all
② 通过服务的端口号添加规则
firewall-cmd --zone=public --add-port=端口号/tcp
案例:把80/tcp添加到防火墙规则中,允许通过防火墙
ss -naltp |grep httpd
httpd :::80
允许80端口通过firewalld防火墙
firewall-cmd --zone=public --add-port=80/tcp
运行效果:
案例:从firewalld防火墙中把80端口的规则移除掉
firewall-cmd --zone=public --remove-port=80/tcp
☆ 永久模式permanent
在Linux的新版防火墙firewalld中,其模式一共分为两大类:运行模式(临时模式)+ 永久模式。
运行模式:不会把规则保存到防火墙的配置文件中,设置完成后立即生效,计算机重启规则失效。
永久模式:会把规则写入到防火墙的配置文件中,但是其需要reload重载后才会立即生效。服务器重启不会失效
根据服务名称添加规则(永久)
firewall-cmd --zone=public --add-service=服务名称 --permanent
firewall-cmd --reload
根据端口号添加规则(永久)
firewall-cmd --zone=public --add-port=服务占用的端口号 --permanent
firewall-cmd --reload
案例:把80端口添加到firewalld防火墙规则中,要求永久生效
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all
二、Linux中的计划任务
1、什么是计划任务
作用:操作系统不可能24 小时都有人在操作,有些时候想在指定的时间点去执行任务(例如:每天凌晨 2 点去重新启动httpd=>阿帕奇),此时不可能真有人每天夜里 2 点去执行命令,这就可以交给计划任务程序去执行操作了。
在指定的时间执行指定的操作!
3、Linux中的计划任务
基本语法:
crontab [选项]
-l :list,显示目前已经设置的计划任务
-e :使用vim编辑器编辑计划任务的文件
案例:显示当前账号下的计划任务
crontab -l
no crontab for root => root账号下没有创建计划任务
案例:编写计划任务
crontab -e
4、计划任务的编辑
crontab -e进入计划任务编辑文件
打开计划任务编辑文件后,可以在此文件中编写我们自定义的计划任务:
计划任务的规则语法格式,以行为单位,一行则为一个计划
分 时 日 月 周 要执行的命令(要求必须使用命令的完整路径,可以使用which查看)
取值范围(常识):
分:0~59
时:0~23
日:1~31
月:1~12
周:0~7,0 和 7 表示星期天
四个符号:
:表示取值范围中的每一个数字
-:做连续区间表达式的,要想表示1~7,则可以写成:1-7
/:表示每多少个,例如:想每 10 分钟一次,则可以在分的位置写:/10
,:表示多个取值,比如想在 1 点,2 点 6 点执行,则可以在时的位置写:1,2,6
5、几个小案例
问题1:每月1、10、22 日的4:45 重启network 服务
第一步:定制格式
分 时 日 月 周 /usr/bin/systemctl restart network
第二步:定制时间
45 4 1,10,22 * * /usr/bin/systemctl restart network
问题2:每周六、周日的1:10 重启network 服务
第一步:定制格式
分 时 日 月 周 /usr/bin/systemctl restart network
第二步:定制时间
10 1 * * 6,7 /usr/bin/systemctl restart network
问题3:每天18:00 至23:00 之间每隔30 分钟重启network 服务
第一步:定制格式
分 时 日 月 周 /usr/bin/systemctl restart network
第二步:定制时间
*/30 18-23 * * * /usr/bin/systemctl restart network
问题4:每隔两天的上午8 点到11 点的第3 和第15 分钟执行一次重启
第一步:定制格式
分 时 日 月 周 /usr/sbin/reboot
第二步:定制时间
3,15 8-11 */2 * * /usr/sbin/reboot
案例:每1 分钟往 root 家目录中的 readme.txt 中输一个1,为了看到效果使用追加输出【输出使用echo 命令,语法:# echo 输出的内容】
crontab -e
-
-
-
-
- /usr/bin/echo 1 >> /root/readme.txt
提示:为了看到计划任务的效果,你可以单独开一个选项卡,使用tail -f /root/readme.txt
- /usr/bin/echo 1 >> /root/readme.txt
-
-
-
Crontab 权限补充
Crontab是任何用户都可以创建的计划任务,但是超级管理员可以通过配置来设置某些用户不允许执行计划任务
黑名单配置文件位于:/etc/cron.deny里面写用户名,一行只能写一个
vim /etc/cron.deny
加入黑名单的额用户是不可以执行计划任务的。
白名单:/etc/cron.allow(本身不存在,可以自己创建)(默认情况下,白名单优先级高于黑名单)
查看计划任务日志文件
保存路径:/var/spool/cron/用户名文件中,如果使用root用户编辑计划任务,则用户名文件为root。
Ls /var/spool/cron/用户名
查看计划任务日志,
tail -f /var/log/cron
at 命令
at[参数][时间]
在一个指定的时间执行一个指定任务,只能执行一次,且需要开启atd进程(ps -ef | grep atd查看, 开启用/etc/init.d/atd start or restart; 开机即启动则需要运行 chkconfig –level 2345 atd on)
.命令参数:
• -m 当指定的任务被完成之后,将给用户发送邮件,即使没有标准输出
• -I atq的别名
• -d atrm的别名
• -v 显示任务将被执行的时间
• -c 打印任务的内容到标准输出
• -V 显示版本信息
• -q<列队> 使用指定的列队
• -f<文件> 从指定文件读入任务而不是从标准输入读入
• -t<时间参数> 以时间参数的形式提交要运行的任务
at允许使用一套相当复杂的指定时间的方法。他能够接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。当然也能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的 词语来指定时间。用户还能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。 也能够指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年)。指定的日期必须跟在指定时间的后面。 上面介绍的都是绝对计时法,其实还能够使用相对计时法,这对于安排不久就要执行的命令是很有好处的。指定格式为:now + count time-units ,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,究竟是几天,还是几小时,等等。 更有一种计时方法就是直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。
TIME:时间格式,这里可以定义出什么时候要进行 at 这项任务的时间,格式有:
HH:MM
ex> 04:00
在今日的 HH:MM 时刻进行,若该时刻已超过,则明天的 HH:MM 进行此任务。
HH:MM YYYY-MM-DD
ex> 04:00 2009-03-17
强制规定在某年某月的某一天的特殊时刻进行该项任务
HH:MM[am|pm] [Month] [Date]
ex> 04pm March 17
也是一样,强制在某年某月某日的某时刻进行该项任务
HH:MM[am|pm] + number [minutes|hours|days|weeks]
ex> now + 5 minutes
ex> 04pm + 3 days
就是说,在某个时间点再加几个时间后才进行该项任务。
使用实例:
实例1:三天后的下午 5 点执行 /bin/ls
命令:
at 5pm+3 days
输出:
[root@localhost ~]# at 5pm+3 days
at> /bin/ls
at>
job 7 at 2013-01-08 17:00
[root@localhost ~]#
实例2:明天17点钟,输出时间到指定文件内
命令:
at 17:20 tomorrow
输出:
[root@localhost ~]# at 17:20 tomorrow
at> date >/root/2013.log
at>
job 8 at 2013-01-06 17:20
[root@localhost ~]#
实例3:计划任务设定后,在没有执行之前我们可以用atq命令来查看系统没有执行工作任务
命令:
atq
输出:
[root@localhost ~]# atq
8 2013-01-06 17:20 a root
7 2013-01-08 17:00 a root
[root@localhost ~]#
实例4:删除已经设置的任务 # atrm
[root@localhost ~]# atq
8 2013-01-06 17:20 a root
7 2013-01-08 17:00 a root
[root@localhost ~]# atrm 7
[root@localhost ~]# atq
8 2013-01-06 17:20 a root
[root@localhost ~]#
显示已经设置的任务内容 at -c
[root@localhost ~]# at -c 8
#!/bin/sh
atrun uid=0 gid=0
mail root 0
umask 22此处省略n个字符
date >/root/2013.log
[root@localhost ~]#
6、计划任务
常见的一个操作:定时备份(定时把数据库中的数据导出到某个文件中)
Linux进程检测与控制
学习目标
1、了解进程和程序的关系
2、了解进程的特点
3、能够使用top动态查看进程信息
4、能够使用ps静态查看进程信息
5、能够使用kill命令给进程发送信号
6、能够调整进程的优先级(扩展)
引言
在运维的日常工作中,监视系统的运行状况是每天例行的工作,在 Windows 中我们可以很直观的使用"任务管理器"来进行进程管理,了解系统的运行状态
通常,使用"任务管理器"主要有 3 个目的:
- 利用"应用程序"和"进程"标签来査看系统中到底运行了哪些程序和进程;
- 利用"性能"和"用户"标签来判断服务器的健康状态;
- 在"应用程序"和"进程"标签中强制中止任务和进程;
在工作中,我们很少会用到Linux的图形化界面,更多时候会使用命令进行进程管理,但是进程管理的主要目的是一样的,即:
查看系统中运行的程序和进程
判断服务器的健康状态
停止不需要的进程。
一、相关概念
1、什么是进程和程序?
**进程**是正在执行的一个程序或命令,每个进程都是一个运行的实体,并占用一定的系统资源。**程序**是人使用计算机语言编写的可以实现特定目标或解决特定问题的代码集合。
简单来说,程序是人使用计算机语言编写的,可以实现一定功能,并且可以执行的代码集合。进程是正在执行中的程序。
举例:谷歌浏览器是一个程序,当我们打开谷歌浏览器,就会在系统中看到一个浏览器的进程,当程序被执行时,程序的代码都会被加载入内存,操作系统给这个进程分配一个 ID,称为 PID(进程 ID)。我们打开多个谷歌浏览器,就有多个浏览器子进程,但是这些进程使用的程序,都是chrome
2、进程管理的内容
进程查看,通过查看,判断健康状态
进程终止
进程优先级控制
二、进程管理命令
工作场景:
小黑入职到一家公司,接到的第一项任务,就是监控生产服务器的性能,提到服务器性能,我们首先想到的就是CPU,内存和磁盘。
1、top查看 CPU使用情况
命令:top
作用:查看服务器的进程占用的资源(100%使用)
语法:# top (动态显示)
交换操作快捷键:
M(大写):表示将结果按照内存(MEM)从高到低进行降序排列;
P(大写):,表示将结果按照CPU 使用率从高到低进行降序排列;
1 :当服务器拥有多个cpu 的时候可以使用“1”快捷键来切换是否展示显示各个cpu 的详细信息;
q:退出
用法一:top
示例代码:
#top
含义:查看CPU使用情况
1)系统整体信息:
①第一行
top - 15:26:31 up 2 days, 3:38, 4 users, load average: 0.00, 0.01, 0.05
| 内 容 | 说 明 |
|5:26:31 | 系统当前时间 |
| p 2 days, 3:38 | 系统的运行时间.本机己经运行 3 小时 38 分钟 |
| 4 users | 当前登录了四个用户 |
| load average: 0.00, 0.01, 0.05| 系统在之前 0分钟、1分钟、5 分钟的平均负载。如果 CPU 是单核的,则这个数值超过 1 就是高负载:如果 CPU 是四核的,则这个数值超过 4 就是高负载 |
扩展:如何获取CPU的总核心数?
grep ‘core id’ /proc/cpuinfo |sort -u |wc -l
②第二行
Tasks: 230 total | 系统中的进程总数 |
---|---|
1 running | 正在运行的进程数 |
229 sleeping | 睡眠的进程数 |
0 stopped | 正在停止的进程数 |
0 zombie | 僵尸进程数。如果不是 0,则需要手工检查僵尸进程 |
③第三行
内 容 | 说 明 |
---|---|
Cpu(s): 0.1 %us | 用户模式占用的 CPU 百分比 |
0.1%sy | 系统模式占用的 CPU 百分比 |
0.0%ni | 改变过优先级的用户进程占用的 CPU 百分比 |
99.7%id | idle缩写,空闲 CPU 占用的 CPU 百分比 |
0.1%wa | 等待输入/输出的进程占用的 CPU 百分比 |
0.0%hi | 硬中断请求服务占用的 CPU 百分比 |
0.1%si | 软中断请求服务占用的 CPU 百分比 |
0.0%st | st(steal time)意为虚拟时间百分比,就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比 |
问题:如果我的机器有4核CPU,我想查看每一核心分别的负载情况怎能办?
答:交换快捷键 “1”
%Cpu0 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu2 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu4 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu5 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu6 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu7 : 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
④第四行
KiB Mem : 3861372 total, 940864 free, 1009992 used, 1910516 buff/cache
内 容 | 说 明 |
---|---|
Mem: 3861372 total, | 物理内存的总量,单位为KB |
1009992 used | 己经使用的物理内存数量 |
940864 free | 空闲的物理内存数量。我们使用的是虚拟机,共分配了 628MB内存,所以只有53MB的空闲内存 |
1910516 buff/cache | 作为缓冲的内存数量 |
⑤第五行
内 容 | 说 明 |
---|---|
Swap: 2097148 total | 交换分区(虚拟内存)的总大小 |
3336 used | 已经使用的交换分区的大小 |
2093812 free | 空闲交换分区的大小 |
622420 avail Mem | 可用内存 |
我们通过 top 命令的整体信息部分,就可以判断服务器的健康状态。如果 1 分钟、5 分钟、15 分钟的平均负载高于CPU核数,说明系统压力较大。如果物理内存的空闲内存过小,则也证明系统压力较大。
问题:根据以上信息,目前我们的系统压力如何?
问题:如果我们发现CPU负载过大,接下来怎么办?
2)进程信息:
PID | 进程的 ID。 |
---|---|
USER | 该进程所属的用户。 |
PR | 优先级,数值越小优先级越高。 |
NI | 优先级,数值越小优先级越高。 |
VIRT | 该进程使用的虚拟内存的大小,单位为 KB。 |
RES | 该进程使用的物理内存的大小,单位为 KB。 |
SHR | 共享内存大小,单位为 KB。计算一个进程实际使用的内存 = 常驻内存(RES)- 共享内存(SHR) |
S (status) | 进程状态。其中S(sleep) 表示睡眠,R(run) 表示运行 |
%CPU | 该进程占用 CPU 的百分比。 |
%MEM | 该进程占用内存的百分比。 |
TIME+ | 该进程共占用的 CPU 时间。 |
COMMAND | 进程名 |
问题:如果我们发现CPU负载过大,接下来怎么办?
答:查看占用CPU最多的进程
问题:如何查看占用CPU最多的进程?
答:交互操作快捷键P,P(大写):,表示将结果按照CPU 使用率从高到低进行降序排列
问题:如果我们发现内存可用量很小,接下来怎么办?
答:查看占用内存最多的进程,使用交互快捷键M(大写):表示将结果按照内存(MEM)从高到低进行降序排列
问题:当我们查看完系统状态,需要做什么?
答:退出,使用q,按键盘上的q,就会回到#提示符的状态。
2、free查看内存使用情况
命令:free
作用:查看内存使用情况
语法:#free -m
选项:-m 表示以mb为单位查看(1g = 1024mb,1mb = 1024kb)
用法一:free -m
示例代码:
#free -m
含义:查看内存使用情况
和Centos6相比,buffer和cached被合成一组,加入了一个available。
关于此available,即系统可用内存,用户不需要去计算buffer/cache,即可以看到还有多少内存可用,更加简单直观
第1行Mem数据:
total 内存总数: 1819
used 已经使用的内存数: 774
free 空闲的内存数: 152
shared 共享内存数: 77
buff/Cache块设备缓存区内存数: 892
available可用内存: 746
第2行数据是Swap交换分区,也就是我们通常所说的虚拟内存。可以在内存不够使用的情况下当临时内存来使用,交换分区并不是越大越好,一般话它就等同于实际内存的大小。
3、df查看磁盘
命令:df
作用:查看磁盘的空间(disk free)
语法:# df [-h]
选项:-h表示可读性较高的形式展示大小
这几列依次是:
Filesystem | 磁盘名称 |
---|---|
Size | 总大小 |
Used | 被使用的大小 |
Avail | 剩余大小 |
Use% | 使用百分比 |
Mounted on | 挂载路径(相当于Windows 的磁盘符) |
回到开始的工作场景:
小黑入职到一家公司,接到的第一项任务,就是监控生产服务器的性能,提到服务器性能,我们首先想到的就是CPU,内存和磁盘。
问题:小黑具体应该如何监控CPU,内存和磁盘?
总结:CPU:
内存:
磁盘:
作业1:课下将总结的部分落实到笔记
4、ps查看进程命令
命令:ps(process show进程显示)
语法:ps [参数选项]
作用:主要是查看服务器的进程信息
选项含义:
-e:等价于“-A”,表示列出全部(all)的进程
-f : 表示full,显示全部的列(显示全字段)
ps -ef
| UID | 该进程执行的用户ID |
| PID | 进程ID |
| PPID | 该进程的父级进程ID,如果找不到,则该进程就被称之为僵尸进程(Parent Process ID) |
| C | Cpu的占用率,其形式是百分数 |
| STIME | 进程的启动时间 |
| TTY | 终端设备,发起该进程的设备识别符号,如果显示“?”则表示该进程并不是由终端设备发起 |
| TIME | 进程实际使用CPU的时间 |
| CMD | 该进程的名称或者对应的路径 |
工作场景
小黑用学到的命令,发现某个进程占用CPU很高,希望进一步查看这个简称的信息。
ps -ef 会列出全部进程,但是我们发现进程非常多,我们很难找到自己想要看的进程。这里需要使用过滤命令grep,来过滤掉我们不需要的信息。
用法:ps -ef |grep 想要看到的进程名
示例代码:
#ps -ef |grep crond
含义:查看crond进程的详细情况
注意:查询结果中,如果只有一条则表示没查到对应的进程(这1 条表示刚才ps 指令的自身)。只有查到的结果多余1 条,才表示有对应的进程。
补充:针对上述情况的优化:如果没有对应的进程,则什么都不显示。
思路:在现有的基础之上再次使用管道去处理下(-v 选项表示“排除”)。
扩展:ps aux BSD格式命令,注意没有横杠"-"
Unix有很多分支,目前主流的显示风格分为System V和BSD,我们之前使用的ps -ef属于system V风格,ps aux是BSD风格,大家可以理解为两种风格只是显示不同。
USER:该 process 属于哪个使用者账号
PID :该 process 的ID
%CPU:该 process 使用掉的 CPU 资源百分比
%MEM:该 process 所占用的物理内存百分比
VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
RSS :该 process 占用的固定的内存量 (Kbytes)
TTY :该 process 是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
STAT:该程序目前的状态,主要的状态有
R :该程序目前正在运作,或者是可被运作
S :该程序目前正在睡眠当中 (可说是 idle 状态),但可被某些讯号 (signal) 唤醒。
T :该程序目前正在侦测或者是停止了
Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
START:该 process 被触发启动的时间
TIME :该 process 实际使用 CPU 运作的时间
COMMAND:该程序的实际指令
5、netstat查看进程网络访问
命令:netstat
作用:查看网络连接状态
语法:netstat -tnlp
选项:-t:表示只列出tcp 协议的连接;
-n:表示将地址从字母组合转化成ip 地址,将协议转化成端口号来显示;
-l :表示过滤出"state(状态)"列中其值为LISTEN(监听)的连接;
-p:表示显示发起连接的进程pid 和进程名称;
Protocol:协议(tcp、upd、http、https、icmp、ssh…)
Receive:接收
Send:发送
Local Address:本地地址
Foreign:远程地址
State:状态,LISTEN表示侦听来自远方的TCP端口的连接请求
PID/Program name:进程ID和程序名
6、kill关闭进程
命令:kill
语法:kill [信号] PID
作用:kill 命令会向操作系统内核发送一个信号(多是终止信号)和目标进程的 PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作
信号种类:
信号编号 含义
9 : 杀死进程,即强制结束进程。
15 : 正常结束进程,是 kill 命令的默认信号。
用法一:kill [信号编号] PID
示例代码:
#ps -ef |grep crond
查询crond进程信息,想知道它的PID,以便使用kill终止进程
#kill 6925
结束6925的进程,这里使用默认信号,正常结束,如果强制结束,就是kill -9 6925
#ps -ef |grep crond
查询crond进程信息,这次查询是为了确认crond进程是否被终止了,我们发现6925进程已经没有了
#systemctl start crond
使用前面学过的systemctl命令,重启crond服务
#ps -ef |grep crond
查询crond进程信息,这次查询是为了确认crond进程已经重新启动了,我们看到多了一个32934的进程,表明crond已经启动,并且进程ID变化了,这是一个新的进程
备注:在互联网中,经常看到kill -9 进程PID,强制杀死某个进程,kill -l
7、killall关闭进程
命令:killall
作用:通过程序的进程名来杀死一类进程
语法:# killall [信号] 进程名称
信号种类:和kill相同,这里不再重复
用法一:killall [信号编号] 进程名
示例代码:
#ps -ef |grep crond
查询crond进程信息,想知道它的进程名,以便使用killall终止进程
#kill 6925
结束6925的进程,这里使用默认信号,正常结束,如果强制结束,就是kill -9 6925
三、进程优先级
1、什么是进程优先级?
Linux是一个多用户、多任务的操作系统,系统中通常运行着非常多的进程。哪些进程先运行,哪些进程后运行,就由进程优先级来控制
2、查看进程优先级
PR 优先级,数值越小优先级越高。
NI 优先级,数值越小优先级越高。
问题:这两个数值是在哪里看到的?
答:
3、调整进程优先级
① 调整正在运行进程的优先级(renice)
1)使用top按"r"来调整
如果要改变某个进程的优先级,就要利用 "r" 交互命令。
改变NICE—>PR
优先级的范围:
-20——19 数字越低,优先级越高,系统会按照更多的cpu时间给该进程
注意:我们能够修改的只有 Ni 的优先级,而不能修改 Pr 的优先级。
步骤1:运行top命令,按r,会提示输入希望修改优先级的进程的PID,这里输入6451,表示想修改firewalld进程的优先级
步骤2:输入6451后回车,提示希望修改的具体数字,这个数字是从-20到19,这里输入5,数字越大,优先级别越低,所以,这里是降低了firewalld的优先级
步骤3:输入5后,按回车,会发现6451进程的NI, 从0变成了5,PR从20变成了25
2)命令行使用renice调整
[root@jk ~]# top -bn 1(查看所有进程截图)
[root@jk ~]# top -p 88355(查看单独的PID 编号为88355的优先级)
命令:renice
语法:renice [NI优先级设置的数字] 想调整的进程ID
[root@localhost ~]# renice -5 6451
含义:将6451进程的NI优先级设置为-5,实际效果是提高了6451进程的优先级
注意:这里的-5代表设置成-5,不是所谓加减的关系,如果当前NI的值是10,当设置成-5后,NI的值会变为-5.
② 程序启动时指定优先级(nice),只能调整不在运行的程序。
步骤1:将程序停止
步骤2:启动并制定优先级
步骤3:确认优先级(查看优先级)
命令:nice
语法:nice [NI优先级设置的数字] 想调整的进程名
启动进程时,通常会继承父进程的 nice级别,默认为0
#ps -ef |grep crond
含义:查看crond的进程信息
目的:找出crond的PID,用于结束进程
#kill -9 crond的进程ID
含义:结束crond的进程
目的:nice只能修改不在运行的进程的优先级
#ps -ef |grep crond
含义:查看crond的进程信息
目的:确认crond进程是不是已经停止了
#nice -n -5 crond
含义:启动crond进程,将NI设置成-5
#ps -ef |grep crond
含义:查看crond的进程信息
目的:找出crond的PID,用于查看此进程的优先级
#top -p crond的进程ID
含义:使用TOP命令,只查看和crond进程相关的信息