linux一些常用指令(根据尚硅谷韩顺平老师视频所写,都是自己手打的)

本文详细介绍了vi/vim文本编辑器的基本使用、三种工作模式切换、快捷键操作,以及如何在Linux环境下编辑Hello.java文件、设置行号、管理用户和组、执行定时任务和网络配置等内容。

`

vim和vi的基本介绍

所有的 Linux 系统都会内建 vi 文本编辑器。 Vim 具有程序编辑的能力,可以看做是Vi的增强版本,可以主动的以字体颜色辨别 语法的正确性,方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别 丰富,在程序员中被广泛使用。

vim和vi的常用的三种模式

正常模式:

  • 以 vim 打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中, 你可以使用 『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容, 也可以使用『复制、贴上』来处理你的文件数据。

插入模式:

  • 按下i, I, o, O, a, A, r, R等任何一个字母之后才会进入编辑模式, 一般来说按i即可

命令行模式:

  • 在这个模式当中, 可以提供你相关指令,完成读取、存盘、替换、离开 vim 、显示行号等的 动作则是在此模式中达成的!

vi和vim的基本使用

使用vim Hello.java 对Hello.java进行编辑

vim和vi模式的相互切换

image-20210522201350810

vim和vi快捷键的使用

快捷键练习使用

    1. 拷贝当前行 yy , 拷贝当前行向下的5行 5yy,并粘贴。
    1. **删除**当前行 dd , 删除当前行向下的5行 5dd *
    1. 在文件中查找某个单词 [命令行下 /关键字 , 回车 查找 , 输入 n 就是查找下一个 ]
    1. 设置文件的行号,取消文件的行号.[命令行下 : set nu 和 :set nonu]
    1. 编辑 /etc/profile 文件,使用快捷键到底文档的最末行[G]和最首行[gg]
    1. 在一个文件中输入 “hello” ,然后又撤销这个动作 u
    1. 编辑 /etc/profile 文件,并将光标移动到 20行 shift+g
    1. 更多的看整理的文档

20191219104939654

基本的指令

关机&重启命令

基本介绍

shutdown -h now 立即进行关机

shutdown -h 1 “hello,一分钟之后关机”

shutdown -r now 现在重启计算机

halt 关机,作用和上面一样 (CentOS6)

reboot 现在重新启动计算机

sync 把内存的数据同步到磁盘中

poweroff也是关机指令

注意细节

不管是重启系统还是关闭系统,首先要运行sync命,把内存中的数据写到磁盘中

用户管理

基本介绍: 1) 登录时尽量少用root帐号登录,因为它是系统管理员,最大的权限,避免操作失误。可 以利用普通用户登录,登录后再用”su - 用户名’命令来切换成系统管理员身份. 2) 在提示符下输入 logout 即可注销用户

在命令行里注销用户

直接输入logout(使用细节:logout注销指令在图形界面运行级别无效,在运行级别3有效)

image-20210521112912370

添加用户

基本语法

useradd [选项] 用户名

cd 表示change directory,是切换目录

应用案例

1)添加一个用户xiaoming

image-20210521114644804

细节说明

1)当创建用户成功后,会自动的创建和用户同名的家目录

2)也可以通过useradd -d指定目录 新的用户名,给新创建的用户指定家目录

修改/指定密码(在工作中密码必须复杂)

指定密码

passwd 用户名

image-20210522095342857

修改密码

image-20210522095537757

删除用户

基本语法

userdel [选项] 用户名  选项:-r 表示删除的同时,将其家目录也一同删除了

引用案例

1)删除用户xm,但是要保留家目录

image-20210522100131970

2)删除用户xh以及用户主目录

image-20210522100617709

细节:在删除用户时,我们一般不删除家目录

查询用户信息

基本语法

id 用户名

应用示例:查询root用户信息

如果用户不存在,则返回无此用户

image-20210522101318669

切换用户

su   -  切换用户名

应用实例

1)创建一个用户zf,指定密码,然后切换到zf

image-20210522101645802

从普通用户切换回root用户两种方式

1)

image-20210522101841615

2)image-20210522101909970

细节说明

1)从权限高的用户切换到权限低的用户,不需要输入密码,繁殖需要。

2)当需要返回到用户时,使用exit指令

查看当前用户/登录用户

  • 基本语法

whoami / who am I

用户组

介绍:类似于角色,系统可以对共性的多个用户进行统一的管理。

增加组

groupadd 组名

案例演示(创建一个组)

image-20210522104425849

删除组

指令(基本语法)

groupdel 组名

案例演示

增加用户时直接加上组

  • 指令(基本语法)

    useradd -g 用户组 用户名

    案例演示

    增加一个用户zwj,直接将zwj指定到wudang

    步骤如下演示

image-20210522105120132

修改用户组

指令(基本语法)

usermod -g 用户组(新的用户组) 用户名

案例演示

创建一个shaolin组,将zwj修改到shaolin

image-20210522105739973

Linux实操篇 实用指令

指定运行级别(七个级别)

运行级别的示意图(centos6)

image-20210522204033286

切换到指定运行级别的指令

基本语法

init[0123456]

image-20210522204639476

应用实例

案例1:通过init来切换不同的运行级别,比如从5----->3,然后关机

init 3

init 5

init 0

指定运行级别

  • 面试题

如何找回root密码,如果不小心忘记了root密码,怎么找回?

思路:进入到单用户模式,然后修改root密码。因为进入单用户模式,root不需要密码就可以登录。

演示

image-20210523091441667

image-20210523092131294

image-20210523091556602

开机 —>在引导时输入 回车键 ----->看到一个界面输入 e ---->看到一个新的界面,选中第二行(编辑内核)

再输入 e ---->在这一行的最后输入 1 ,再输入回车键 ----->再次输入b,这时就进入了单用户模式 再用paswd root进行更改密码(上面的图片没有截完整)

2)请设置我们的运行级别,Linux运行后,直接进入到命令行界面,即进入到3运行级别vim /etc/inittab

将id:initdefault:这一行中的数字,5这个数改成3即可

centos7运行级别

进入不同运行级别的方式

init 0   #关机
init 3   #进入3级别字符界面
init 5   #进入5级别图形界面
init 6   #重启

设置系统默认的运行级别

#设置默认第三启动级别
[root@node5 ~]# systemctl set-default multi-user.target

#设置默认第五启动级别
[root@node5 ~]# systemctl set-default graphical.target
[root@node5 ~]# runlevel
3 5   #表示从3级别切换到了5级别

#查看当前默认的启动级别
[root@node5 ~]# systemctl get-default
graphical.target

[root@node5 ~]# systemctl get-default
multi-user.target

帮助指令

介绍

当我们对某个指令不熟悉时,我们可以使用Linux提供的帮助指令来了解指令的使用方法。

man基本语法

  • man[命令或配置文件](功能描述:获得帮助信息)

应用实例

案例:查看ls命令的帮助信息

image-20210524090540904

help指令

  • 基本语法

  • help 命令(功能描述,获得shell内置命令的帮助信息)

  • 应用实例

    ​ 案例:查看cd命令的帮助信息

    image-20210524091140179

文件目录类

目录结构的基本介绍

d0c50-linux2bfile2bsystem2bhierarchy

pwd指令

基本语法

pwd(功能描述:显示当前工作目录的绝对路径)

应用案例

  • 案例:显示当前工作目录的绝对路径

image-20210524180318080

ls指令

基本语法

	ls  [选项]   [目录或是文件]

常用选项

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

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

应用实例

​ 案例:查看当前目录所有内容信息

image-20210524181654591

image-20210524181749175

cd指令

基本语法

  • cd [参数] (功能描述:切换到指定目录)

常用参数

  • 绝对和相对路径

重点是脑海中要有一个目录树

image-20210525083654467

cd ~ 或者cd:  回到自己的家目录(home目录)
cd ..回到当前目录的上一级目录

思考题:

1)当前工作目录是/root,我们希望进入到/home下

绝对路径:/home,即从根目录开始定位。

相对路径:. ./home(. .代表回到上级目录,然后再去找到home目录,从当前工作目录开始定位到需要的目录去)

应用实例

案例1:使用绝对路径切换到root目录

cd /root

案例2:使用相对路径切换到/root目录

这里我们要知道该用户目前在哪个目录下,才能写出这个指令,假设在/usr/lib

cd ../../root

非常重要:. .代表的是上级目录(在相对路径中)

cd ../home	

案例3:表示回到当前目录的上一级目录

cd ..

案例4:回到家目录

cd
cd ~

image-20210525083526253

mkdir指令

  • mkdir指令用于创建目录(make directory)

基本语法

mkdir [选项]  要创建的目录

案例

一次性创建单个目录

在home目录下创建pig目录

image-20210525084515832

一次性创建多级目录

在home目录下同时创建animal,同时创建tiger,记住创建多级目录要带上-p这个选项

image-20210525084731183

rmdir指令

介绍

rmdir 指令删除空目录

应用实例

  • 案例一:删除一个目录 /home/pig
  • image-20210525103052767

使用细节

rmdir删除的是空目录,如果目录下有内容时无法删除。

提示:如果需要删除的非空目录,如要使用rm -rf要删除的目录

image-20210525164144426

touch指令

介绍

  • touch指令创建空文件

基本语法

touch   文件名称(后面可以接多个文件名,用于创建多个文件)	

应用实例

  • 案例一:创建一个空的hello.txt

image-20210525164656803

  • 案例二:创建多个文件夹

image-20210525164953364

cp指令(重要)

介绍

  • cp指令拷贝文件到指定目录(cp就是copy)

基本语法

cp [选项] source dest    (source就是源文件的位置,dest就是要拷贝的目标文件的位置)
常用选项
-r:递归复制整个文件夹

应用实例

  • 案例一:将/home/aaa.txt拷贝到/home/bbb目录下面

    image-20210525170523307

  • 案例二:递归复制整个文件夹,举例

将/home/test整个目录拷贝到/home/zwj目录(用-r表示递归复制)

image-20210525171619686

使用细节

  • 强制复制不提示方法:\cp

image-20210526173712937

技术小技巧

可以通过 上下箭头键,调出原来使用过的指令。

rm指令

基本介绍

rm指令移除文件或目录

基本语法

rm [选项] 要删除的文件或目录
常用选项
-r:递归删除整个文件夹
-f:强制删除不提示

应用实例

案例一:将/home/aaa.txt删除

image-20210526173805144

案例二:递归删除整个文件夹/home/bbb

image-20210526173816579

  • 使用细节

强制删除不提示的方法:带上-f参数即可

image-20210526173824951

mv指令

基本介绍

mv移动文件与目录或重命名(move)

基本语法

mv oldNameFile newNameFile   (功能描述:重命名)可以理解为,把当前文件夹下的oldNameFile,移动到当前目录下面,发现已经有了,就是重名了
mv/temp/movefile/targetFolder  (功能描述,移动文件)

应用实例

案例一:将 /home/aaa.txt文件 重新命名为pig.txt

image-20210526173836313

案例二:将/home/pig.txt文件移动到 /root目录下

image-20210526173845362

cat指令

基本介绍

cat 查看文件内容,是以只读的方式打开

基本语法

cat [选项]  要查看的文件	
常用选项
-n  :   显示行号

应用实例

案例一:/etc /profile 文件内容,并显示行号

image-20210526213646596

使用细节

cat只能浏览文件,而不能修改文件,为了浏览方便,一般会带上 管道命令 | more

cat 文件名 | more[分页浏览]

more指令

基本介绍

more指令是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容

more指令中内置了若干快捷键,详见操作说明。

基本语法

more    要查看的文件

操作说明

操作功能说明
空白键(space)代表向下翻页
Enter代表向下翻[一行]
q代表立刻离开more,不再显示文件内容
Ctrl+F向下滚动一屏
Ctrl+B返回上一屏
=输出当前的行号
:f输出文件名和当前行的行号

less指令

基本介绍

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

基本语法

less要查看的文件

操作说明

操作功能说明
空白键向下翻动一页
[pagedown]向下翻的一页
[pageup]向上翻动一页
/字串向下搜寻[字串]的功能:n:向下查找 N:向上查找
?字串向上搜寻[字串]的功能:n:向上查找 N:向下查找
q离开less这个程序

应用实例

案例:采用less查看一个大文件文件/opt/金庸-射雕英雄传txt精校本.txt

>指令重定向和>>指令追加

基本介绍

>输出重定向 和>>追加(追加到文件末尾)

输出重定向:会将原来的文件内容覆盖

追加:不会覆盖原来的文件的内容而是追加到文件的尾部

基本语法

1)ls -l > 文件 (功能描述:列表内容写入到文件a.txt中(覆盖写))

image-20210527170606573

  1. ls -al >> 文件 (功能描述:列表内容追加入到文件a.txt末尾)

image-20210527171112884

说明:ls -l > a.txt,将ls -l显示的内容覆盖写入到a.txt文件中,如果该文件不存在则创建该文件,反之,则覆盖

  1. cat 文件1> 文件2 (功能描述:将文件1内容覆盖到文件2)

image-20210528104007264

4)echo “内容” >> 文件

应用实例

案例一:将/home目录下的文件列表写入到/home/info.txt中

image-20210528104442325

案例二:将当前日历信息追加到/home/mycal文件中[提示cal]

image-20210528104736235

echo指令

基本内容

echo输出内容到控制台

基本语法

echo  [选项]  [输出内容]	

应用实例

案例:使用echo指令输出环境变量 ,输出当前的环境的路径。

image-20210528111838308

案例:使用echo指令输出hello,world!

image-20210528111930781

head指令

基本说明

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

基本语法

 head 文件   (功能描述:查看文件的头10行内容)
head  -n 5 文件	(功能描述:查看文件的头5行内容,5可以是任意数)	

应用实例

案例:查看 /etc/profile的前面5行代码

image-20210528123336898

tail指令

基本介绍

tail用于输出文件中末尾的内容,默认情况下tail显示文件的后10行内容。

基本语法

tail  文件   	(功能描述:查看文件后10行内容)
tail -n 5 文件	(功能描述:查看文件的后5行内容,5可以是任意数)
tail  -f   文件    (功能描述:实时追踪该文档的所有更新)(工作中经常使用)

Ctrl+c退出追踪

使用示例

案例一:查看/etc/profile最后5行的代码

image-20210528124112154

案例二:实时监控mydate.txt,看看到文件有变化时,是否会看到,实时的追加日期

image-20210528124518287

ln指令(了解)

基本介绍

软链接也叫符号链接,类似于windows里面的快捷方式,主要是存放了链接其他文件的路径

基本语法

ln -s [源文件或目录] [软链接名]  (功能描述:给源文件创建一个软连接)

应用实例

案例1:在/home目录下创建一个软链接linkToRoot,连接到/root目录

image-20210528164520885

案例2:删除软链接linkToRoot

image-20210528164926717

细节说明

当我们使用pwd指令查看目录时,仍然看到的是软链接所在目录。

history指令

基本介绍

查看已经执行过的命令,也可以执行历史指令

基本语法

history  (功能描述:查看已经执行过的历史命令)
histroy  number	(显示最近number条指令)
!number 	(执行第number条指令)

应用实例

案例一:显示所有的历史命令

image-20210528165918103

案例二:显示最近使用的10个命令

image-20210528170026329

案例三:执行历史编号为5的指令

image-20210528170240226

时间日期类相关的指令

date指令-显示当前日期

基本语法

date								(功能描述:显示当前时间)
date +%Y							(功能描述:显示当前年份)
date +%m							(功能描述:显示当前月份)
date +%d							(功能描述:显示当前是哪一天)
date +"%Y-%m-%d %H:%M:%s" 			  (功能描述:显示年月日时分秒)
注意:这个+一定得加上

应用实例

案例一:显示当前时间信息

image-20210528171923814

案例二:显示当前时间年月日

image-20210528172057231

案例三:显示档期那时间年月日时分秒

image-20210528172409082

date指令-设置日期

基本语法

date  -s  字符串时间

应用实例

案例一:设置系统当前时间,比如设置成2021-5-28 11:22:22

image-20210528172858196

cal指令

基本介绍

查看日历指令

基本语法

cal [选项]   (功能描述:不加选项,显示本月日历)  canlender的简写

应用实例

案例一:显示当前日历
image-20210528173842897

案例二:显示2020年日历

image-20210528174004035

搜索查找类

find指令

基本介绍

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

基本语法

find [搜索范围] [选项]

选项说明

选项功能
-name<查询方式>按照指定的文件名查找模式查找文件
-user<用户名>查找属于指定用户名地所有文件
-size<文件大小>按照指定的文件大小查找文件

应用实例

案例一:按文件名:更具名称查找/home目录下的hello.txt文件

image-20210528204921939

案例二:按拥有者:查找/opt目录下,用户名称为nobody的文件

image-20210528205122566

案例三:查找整个linux系统下大于20M的文件(+n大于 -n小于 n等于,注意这里的n表示的是数字,单位可以根据实际情况来调整,k得用小写)

image-20210528205546326

案例四:查询小于20M的文件

image-20210528205933051

案例五:查询根目录下面以txt后缀结尾的文件

image-20210528210722387

locate指令

基本介绍

locate指令可以快速定位文件路径。locate指令利用实现建立的系统中所有文件名称以及路径的locate数据库实现快速定位给定的文件。locate指令无需遍历整个文件系统,查询速度较快。

基本语法

locate  搜索文件

特别说明

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

应用实例

案例一:请使用locate指令快速定位hello.txt文件所在目录

grep指令和管道符号 |

基本介绍

grep过滤查找,管道符,"|",表示将前一个命令的处理结果输出传递给后面的命令处理。 ("|",这后面的就是加上条件)

基本语法

grep [选项]  查找内容  源文件
选项			功能
-n			  显示匹配行以及行号。
-i			  忽略字母大小写

应用实例

案例一:请在hello.txt文件中,查找"yes"所在行,并显示行号。

image-20210529085731997

压缩和解压缩类

gzip/gunzip 指令

基本介绍

gzip用于压缩文件,gunzip用于解压

基本语法

gzip     文件   				(功能描述:压缩文件,只能将文件压缩为*.gz文件)
gunzip   文件.gz  			(功能描述:解压缩文件命令)

应用实例

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

image-20210529090605151

案例二:gunzip压缩,将/home下的hello.txt.gz文件进行解压缩

image-20210529090743083

细节说明

当我们使用gzip对文件进行压缩后,不会保留原来的文件。

zip/unzip指令

基本介绍

zip用于压缩文件,unzip用于解压文件,这个在项目打包发布中很有用的

基本语法

zip   [选项]   XXX.zip     将要压缩的内容  (功能描述:压缩文件和目录的命令)
uzip  [选项]   XXX.zip	(功能描述:解压文件)	
zip常用选项
-r:  递归压缩,即压缩目录
uzip的常用选项
-d <目录> :指定压缩后的文件的存放目录

应用实例

案例一:将/home下的所有文件压缩成mypackage.zip

image-20210529091848159

image-20210529091915931

案例二:将mypackage.zip解压到/opt/tmp目录下

image-20210529092113961

tar指令

基本介绍

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

基本语法

tar  [选项]  XXX.tar.gz   打包的内容	(功能描述:打包目录,压缩后的文件格式.tar.gz)
  • 选项说明
选项功能
-c产生.tar打包文件
-v显示详细信息
-f指定压缩后的文件名
-z打包时同时压缩
-x解压.tar文件

应用实例

案例一:压缩多个文件,将/home/a1.txt和/home/a2.txt压缩成a.tar.gz

image-20210531170214643

案例二:将/home的文件夹压缩成myhome.tar.gz

image-20210531170510021

案例三:将a.tar.gz解压到当前目录

image-20210531171017011

案例四:将myhome.tar.gz解压到/opt/tmp2目录下

image-20210531171600366

组管理和权限管理(重难点)

Linux组的基本介绍

在Linux中的每个用户必须属于一个组,不能独立于组外。在Linux中每个文件有所有者、躲在组、其他组的概念。

1)所有组

2)所在组

3)其他组

4)改变用户所在组

文件 / 目录所有者

基本介绍

一般文件的创建者,设创建了该文件,就自然成为了该文件的所有者。

查看文件的所有者

指令:    ls  -ahl

应用实例

应用实例: 创建一个组police,再创建一个用户tom,然后使用tom来创建一个文件,看看情况如何

image-20210531190841047

image-20210531191138777

修改文件所有者

指令 : chown 用户名  文件名   (chown:就是change own)

应用案例

要求:使用root创建一个文件apple.txt,然后将所有者修改为tom

image-20210531191945732

组的创建

基本指令

groupadd   组名	

应用实例

创建一个组,monster

创建一个用户fox,并放入到monster组中

image-20210531192425168

文件/目录所在组

当某个用户创建了一个文件后,默认这个文件的所在组就是该用户所在的组

查看文件/目录所在组

基本指令
ls -ahl
应用实例

修改文件所在组

基本指令
chgrp  组名   文件名    (chgrp   change group)


linux下命令“ll”是“ls -l"的别名。别名相当于windows里的快捷方式。

所以"ll"和“ls -l”的功能是相同的。
所以"ll"和"ls"的区别其实是“ls”和"ls -l"的区别。
”ls“是显示当前目录下文件,”ls -l“是显示当前目录下文件详细信息。
应用实例

使用root用户创建文件orange.txt,看看当前文件属于哪个组,然后将这个文件所在的组修改到police组

image-20210605081750518

其他组

出去文件的所有者和所在组的用户外,系统的其他用户都是文件的其他在。

改变用户所在组

基本介绍

在添加用户时,可以指定将该用户添加到哪个组中,同样的用root的管理权限才可以改变某个用户所在的组。

改变用户所在组指令

usermod -g   组名 用户名
usermod -d   目录名  用户名  改变该用户登陆的初始目录 

应用实例

创建一个土匪组(bandit)将tom这个用户从原来所在的police组,修改到bandit(土匪)组。

image-20210605082959023

权限的基本介绍

Linux的权限不是很细致,只有RWX三种

r(Read,读取):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录的权限。
w(Write,写入):对文件而言,具有新增,修改,删除文件内容的权限;对目录来说,具有新建,删除,修改,移动目录内文件的权限。
x(eXecute,执行):对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限。
1、目录的只读访问不允许使用cd进入目录,必须要有执行的权限才能进入。
2、只有执行权限只能进入目录,不能看到目录下的内容,要想看到目录下的文件名和目录名,需要可读权限。
3、一个文件能不能被删除,主要看该文件所在的目录对用户是否具有写权限,如果目录对用户没有写权限,则该目录下的所有文件都不能被删除,文件所有者除外
4、目录的w位不设置,即使你拥有目录中某文件的w权限也不能写该文件

20181230195451513

image-20210608205158166

rwx权限详解

rwx作用到文件

[r]代表可读(read):可以读取,查看
[w]代表可写(write):可以修改,但是不代表可以删除文件,删除文件的前提条件是对该文件所在的目录有写权限,才能删除该文件.

rwx作用到目录

[r]代表可读(read):可以读取,ls查看目录内容
[w]代表可写(write):可以修改,目录内创建+删除+重命名目录
[x]代表可执行(execute):可以进入该目录

文件及其目录权限实际案例

ls -l中显示的内容如下

-rwxrw-r-- 1 root root 1213 Feb 2 09 : 39 abc

10个字符确定不同用户能对文件干什么

第一个字符代表文件的类型:文件(-),目录(d),链接(l)

其余字符每3个一组(rwx)读(r)写(w)执行(x)

第一组rwx:文件拥有者同一组的用户权限是读、写和执行

第二组rw-: 与文件拥有者同一组的用户的权限是读、写但是不能执行

第三组r–:不与文件拥有者同组的其他用户的权限是读不能写和执行

**可用数字表示为:**r=4,w=2,x=1因此rwx=4+2+1=7 (用数字表示权限)

1文件:硬链接数或目录:子目录数
root用户
root
1213文件大小(字节),如果是文件夹,显示4096字节
Feb 2 09 : 39最后修改时间
abc文件名

修改权限 -chmod(change modify的意思)

基本说明

通过chmod指令,可以修改文件或者目录的权限。

第一种方式:+、-、= 变更权限

u:所有者   g:所有组   o:其他人   a:所有人(u、g、o的总和)
chmod  u=rwx , g=rx , o=x文件目录名
chmod  o+w  文件目录名
chmod  a-x  文件目录名

案例演示

1)给abc文件的所有者读写执行权限,给所在组执行权限,给其他组的用户读执行权限。

image-20210605140747345

2)给abc文件的所有者出去执行的权限,增加组的用户写权限

image-20210605140956725

3)给abc文件的所有用户添加读的权限

image-20210605141129116

第二种方式:通过数字变更权限

r=4 w=2 x=1 rwx=4+2+1=7

chmod   u=rwx,g=rx,o=x   文件目录名
相当于   chmod  751  文件名称		
  • 案例演示

要求:将/home/abc.txt文件的权限修改为,rwx r-xr-x,使用给数字的方式实现(这里面是每三个符号一组)

rwx = 4+2+1=7

r-x=4+1=5

r-x=4+1=5

指令chmod 755 /home/abc.txt

修改文件所有者-chown

基本介绍

chown newowner file 改变文件的所有者

chown newowner:newgroup file 改变用户的所有者和所有组

带上-R参数如果是目录 则使其下所有子文件或目标递归生效

案例演示

1)请将/home/abc.txt文件的所有者修改为tom

image-20210605173226639

2)请将/home/kkk目录下所有的文件和目录的所有者都修改为zwj

首先我们应该使用root用户来操作。

image-20210608082532219

修改文件所在组-chgrp

基本介绍

chgrp [选项]  newgroup(改变文件的所有组) file  
选项:-R表示递归修改其下所有子文件或者目录

案例演示

1)请将/home/abc.txt文件的所有组修改成bandit(土匪组)

image-20210608083308485

2)请将/home/kkk目录下的所有文件和目录的所在组都修改成bandit(土匪组)

image-20210608083455029

最佳实践-警察和土匪游戏

police , bandit

jack,jerry警察

xh , xq:土匪

1)创建组

groupadd police
groupadd bandit

2)创建用户

image-20210608104428477

将密码都指定为123

image-20210608104618827

3)jack创建一个文件,自己可以读写,本组人可以读,其他组人没有任何权限

chmod 640 jack01.txt
也可以用 chmod o= jack01.txt	 

image-20210608105321299

4)jack修改该文件,让其他组人可以读。本组人可以读写

image-20210608113125027

5)xq投靠警察,看看是否可以读写

先用root修改xq的组:

image-20210608155135961

再使用jack给他的家目录/home/jack所在组一个rx权限

image-20210608160222949

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3Ih9FvKS-1625659084602)(…/…/…/AppData/Roaming/Typora/typora-user-images/image-20210608155408201.png)]

文件联系权限管理[课后练习1]

建立两个组(神仙,妖怪)

建立四个用户(唐僧,悟空,八戒,沙僧)

把悟空,八戒放在妖怪组,唐僧沙僧放进神仙组

用悟空建立一个文件(monkey.java该文件要输出 i am monkey)

给八戒一个rw的权限

image-20210608165547626

唐僧沙僧对该文件没有权限

image-20210608165641017

把沙僧放入妖怪组

image-20210608165901057

让沙僧修改该文件monkey,加入一句话(“我是沙僧,我是妖怪!”);

文件联系权限管理[课后练习2]

1)用root登录,建立用户mycentos,自己设定密码

image-20210609083753792

2)用mycentos登录,在主目录下建立目录test/t11/t1

image-20210609084051839

3)在t1中建立一个文本文件aa,用vi编辑器内容为ls -al

image-20210609084159138

4)改变aa的权限为可执行文件[可以将当前日期追加到一个文件],运行该文件./aa

image-20210609084344890

image-20210609084743768

5)删除新建立的目录test/t11/t1

image-20210609084906028

6)删除用户mycentos以及其主目录中的内容

image-20210609085329973

7)将Linux设置到图形界面

8)重新启动Linux或关机

reboot 重启
halt 关机

定时任务调度

crond任务调度

crond进行定时任务的设置

原理示意图

image-20210609105611466

概述

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

任务调度分类:1、系统工作:游戏重要的工作必须是周而复始的执行。比如病毒扫描等

2、个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份。

基本语法

crontab  [常用 选项]

常用选项

-e编辑crontab定时任务
-l查询crontab任务
-r删除当前用户所有的crontab任务

任务要求

设置任务跳读文件:/etc/crontab

设置个人任务调度。执行crontab -e 命令

接着输入任务到调度文件

如:*/1 ****ls -l / etc />/ tmp/to.txt

意思说每小时的每分钟执行ls -l /etc/ > /tmp/to.txt命令

步骤如下

1) cron -e
2) */1 * * * * ls -l /etc>> /tmp/to.txt
3) 当保存后就退出程序
4) 在每一分钟都会调用  ls -l /etc>> /tmp/to.txt

细节参数说明

  • 5个占位符的说明
项目含义范围
第一个“*”一小时中的第几分钟0-59
第二个“*”一天中的第几小时0-23
第三个“*”一月中的第几天1-31
第四个“*”一年中的第几月1-12
第五个“*”一周中的星期几0-7(0和7都代表星期日)
  • 特殊符号的说明
特殊符号含义
*代表任何时间。比如第一个“*”就代表一个小时中每分钟都执行一次的意思。
代表不连续的时间。比如“0 8 ,12 ,16 * * * 命令”,就代表在每天的8点0分,12点0分,16点0分都执行一次命令
-代表连续的时间范围。比如“0 5 * * 1-6命令 ” ,代表在周一到周六的凌晨5点0分执行命令
*/n代表没隔多久执行一次。比如“*/10 * * * * 命令” ,代表每隔10分钟就执行一遍命令
  • 特定时间执行任务案例
时间含义
45 22 * * * 命令在22点45分执行命令
0 17 * * 1 命令在每周1的17点0分执行命令
0 5 1 ,15 * * 命令在每月1号和15号的凌晨5点0分执行命令
40 4 * * 1-5 命令每周一到周五的凌晨4点40分执行命令
*/10 4 * * * 命令每天的凌晨4点,每隔十分钟执行一次命令
00 1 , 15 * 1命令每月1号和15号,每周1点0分都会执行命令。注意:星期几和几号最好不要同时出现,因为他们的定义都是天。非常容易让管理员混乱

crond任务调度应用实例

案例

案例1:每隔一分钟,就将当前的日期信息,追加到 /tmp/mydate文件中

1)先编写一个文件 /home/mytask1.sh

指令
vim /home/mytask1.sh
date >> /tmp/mydate

2)给mytask1.sh一个可执行权限

chmod 744 /home/mytask1.sh

3)crontab -e

image-20210609195310486

4)*/1 * * * * /home/mytask1.sh

5)成功

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

1)先编写一个文件 /home/mytask2.sh

指令
vim /home/mytask2.sh
date >> /tmp/mcycal

2)给mytask1.sh一个可执行权限

chmod 744 /home/mytask2.sh

3)crontab -e

4)*/1 * * * * /home/mytask2.sh

5)成功

案例3:每天凌晨2:00将mysql数据库testdb。备份到文件中。

crond相关的指令

crontab -r :终止任务调度
crontab -l :列出当前有哪些任务调度
service crond restart [重启任务调度]

Linux磁盘分区、挂载

分区基础知识

分区的方式(了解

1)mbr分区:

1.最多支持四个主分区

2.系统只能安装在主分区

3.扩展分区只要占一个主分区

4.MBR最大支持2TB,但拥有最好的兼容性

2)gtp分区:

1.支持多个主分区(但操作系统可能限制,比如Windows下最多128个分区)

2.最大支持18EB的大容量(EB=1024PB,PB=1024TB)

3.windows7 64位以后支持gtp

Windows下的磁盘分区

image-20210615123834985

Linux分区

原理介绍

1)Linux来说无论有几个分区,分给哪一个目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux中每一个分区都是用来组成文件系统的一部分。

2)Linux采用一种叫做“载入”的处理方法,它的整个文件系统中包含了一整套文件和目录,且将一个分区和一个目录联系起来。这是要载入一个分区将它的存储空间在一个目录下获得。

3)示意图

image-20210615124800040

硬盘说明

1)Linux硬盘分为IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘

2)对于IDE硬盘,驱动器标识符为“hdx~”,其中 “hd”表明分区所在设备的类型,这是指IDE硬盘了。“x”为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),“~”代表分区,前四个分区用数字1到4表示,他们是主分区或扩展分区,hbd2表示为第二个IDE硬盘上过的第二个主分区或扩展分区。

3)对于SCSI硬盘则表示为“sdx”,SCSI硬盘是用“sd”来表示分区所在设备的类型的,其余则和IDE硬盘的表示方法一样。

使用 lsblk 指令查看当前系统的分区情况

image-20210615134934383

image-20210616132658380

挂载的经典案例

需求是给我们的Linux系统增加一个新的硬盘,并且挂载到/home/newdisk

image-20210616133040682

如何增加一块硬盘

1)虚拟机添加硬盘

2)分区

fdisk /dev/sdb

3)格式化

mkfs -t ext4 /dev/sdb1 mkfs是格式化的意思
这里表示的是把dev下面的sdb1格式化成ext4类型的文件类型

4)挂载

先创建 /home/newdisk
再进行挂载  mount  /dev/sdb1  /home/newdisk 

image-20210616134840082

5)设置可以自动挂载(永久挂载,当你重启机系统后,仍然可以挂载到 /home/newdisk上面去)。

vim /etc/fstab  进入之后加上
/dev/sdb1                /home/newdisk                  ext4     defaults        0 0

具体的操作步骤

虚拟机增加硬盘步骤1(增加硬盘)

【虚拟机】菜单中,选择【设置】,然后设备列表里面添加硬盘,然后一路【下一步】,中间只有选择磁盘大小的地方需要修改,直至完成。然后重启系统(才能识别)!

image-20210616172349248

虚拟机增加硬盘步骤2(对磁盘进行分区 )

分区命令

fdisk  /dev/sdb

开始对/sdb分区

  • m 显示命令列表
  • n 显示磁盘分区 同 fdisk -1
  • d 删除分区
  • w 写入并退出

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

image-20210616173745730

虚拟机增加硬盘步骤3(格式化磁盘)

格式化磁盘

分区命令:mkfs -t ext4 /dev/sdb1

其中ext4是分区类型

虚拟机增加硬盘步骤4 (挂载)

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

mount  设备名称    挂载目录
   例如:mount   /dev/sdb1    /newdisk
umount   设备名称  或者   挂载目录   (相当于卸载)
   例如:umount /dev/sdb1    或者   umount   /newdisk

虚拟机增加硬盘步骤5(实现永久挂载)

永久挂载:通过修改/etc/fstab实现挂载

添加完成后 执行 mount -a 立即生效

image-20210616175225394

磁盘情况查询

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

  • 基本语法

    查看磁盘占用情况   df  -lh
    
  • 应用实例

image-20210618124402629

查询指定目录磁盘占用情况

  • 基本语法

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

查询 /opt 目录的磁盘占用情况,深度为1

image-20210618125721731

磁盘情况-工作实用指令

1)统计 /home 文件夹目录下的个数

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

image-20210618134221489

2)统计/home文件夹下目录的个数

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

image-20210618134328531

3)统计 /home 文件夹下文件的个数,包括子文件夹里面的

ls -lR /home | grep "^-" | wc -l    加上了R就将/home下面的文件的个数,包括子文件夹里面的都递归统计

image-20210618190910795

4)统计文件夹下目录的个数,包括子文件夹里面的

ls -lR /home | grep "^d" | wc -l    加上了R就将/home下面的文件的个数,包括子文件夹里面的都递归统计

image-20210618191521215

5)以树状显示目录结构

tree 指令的安装
yum install tree

image-20210618192059735

image-20210618192214345

实操篇之网络配置

Linux网络配置的原理图(含虚拟机)

目前我们采用的是NAT模式。

image-20210622155736574

image-20210618213423266

查看网络IP和网关

查看虚拟网络编辑器

VMware 编辑 -----> 虚拟网络配置

修改IP地址(修改虚拟网卡的IP 也就是vmnet8)

image-20210618214240461

查看网络IP和网关

image-20210619081710105

查看Windows环境中的VMnet8网络配置(ipconfig指令)

1)使用ipconfig查看

2)界面查看

image-20210619082120849

ping测试主机之间网络的连通性

基本语法

ping    目的主机	(功能描述:测试当前服务器是否可以连接目的主机)

应用实例

测试当前服务器是否可以访问百度

ping 	www.baidu.com

Linux网络环境配置

第一种方式(自动获取)

说明:登陆后,通过界面来设置自动获取IP

image-20210619085547568

特点:Linux启动后会自动获取IP,缺点是每次启动后自动获取的IP地址可能不一样。这个不适用于做服务器,因为我们服务器的IP需要是固定的。

第二种方式(指定固定的IP)

  • 说明192.168.122.1

直接修改文件来指定IP,并且可以连接到外网(推荐),编辑 vi /etc/sysconfig/network-scripts/ifcfg-ens33(centos7),( vi /etc/sysconfig/network-scripts/ifcfg-eth0 这个为centos6)

要求:将IP地址设置成静态的,IP地址为192.168.31.128

image-20210619101559143

修改后,一定要重启服务

1)service network restart

2)reboot 重启机器

实操篇之进程管理

基本介绍

1)在Linux中,每个执行的**程序(代码)**都成为一个进程。每个进程都分配一个id号。

2)每个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。例如www服务器。

3)每个进程都可能以两种方式存在。前台和后台,所谓前台进程就是用户目前屏幕上可以进行的操作。后台进程实际在操作,由于屏幕上无法看到进程,通常使用后台方式执行。

4)一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。知道关机才结束。

显示执行的进程

说明:查看进程使用的指令是ps ,一般来说使用的参数是 -aus

ps显示信息选项:

字段说明
PID进程识别号
TTY终端机号
TIME此进程所消耗CUP时间
CMD正在执行的命令或进程名
ps -a 	:显示当前终端的所有进程信息
ps -u	:以用户的格式显示进程信息
ps -x	:显示后台进程运行的参数
ps -aux | more

image-20210619175857359

ps详解

1)指令:ps -aux | grep xxx ,比如看看有没有sshd服务

2)指令说明

  • System V 展示风格
  • USER :用户名称
  • PID:进程号
  • %CPU:进程占用CPU的百分比
  • %MEM:进程占用的物理内存的百分比
  • VSZ:进程占用虚拟内存的大小(单位:KB)
  • RSS:进程占用的物理内存的大小(单位:KB)
  • TT:终端名称,缩写
  • STAT:进程状态,其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或被停止等待
  • STARTED:进程的启动时间
  • TIME:CPU时间,即进程使用CPU的总时间。
  • COMMAND:启动进程所用的命令和参数,如果过长会被截断显示

应用实例

要求:以全格式显示当前所有的进程,查看进程的父进程。

  • ps -ef 是以全格式显示当前的所有的进程
  • -e 显示所有进程。-f全格式。
  • ps -ef | grep xxx
  • 是BSD风格
  • UID:用户ID
  • PID:进程ID
  • PPID:父进程ID
  • C:CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程I/O密集型运算,执行优先级会提高

思考题,如果我们希望查看sshd进程的父进程号是多少,应该怎么样查询?

ps -ef | grep sshd

image-20210619190657050

终止进程kill和killall

介绍

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

基本语法

kill   [选项]   进程号  (功能描述:通过进程号来杀死进程)
killall  进程名称  (功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)

常用选项

-9 表示强迫进程立即停止

最佳实践:

案例一:踢掉某个非法登录的用户

ps -aux | grep sshd

image-20210620093212557

案例二:终止远程登陆服务sshd,在适当时候再次重启sshd服务

ps -aux | grep sshd
kill 1467
ps -aux | grep sshd

image-20210620114833970

案例三:种植多个gedit编辑器 【killall ,通过进程名称来终止进程】

gedit 执行两次
killall  gedit

image-20210620115211999

案例四:强制杀死一个终端

ps -aux | grep bash
kill -9 [终端端口号]

image-20210620115915404

查看进程树pstree

基本语法

pstree [选项]   ,可以更加直观的来观看进程

常用选项

-p : 显示进程的PID
-u : 显示进程的所属用户

应用实例

案例一:请你以树状形式显示进程的pid

pstree -p | more

image-20210620120703674

案例二:请你以树状形式显示用户的id

pstree -u | more 

image-20210620120759535

服务(service)管理

介绍

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

【原理图】

image-20210620121056540

service (CentOS6 )systemctl(CentOS7.0 ) 管理命令

CentOS7.0 systemctl [start | stop | restart | reload | status |
mask ] 服务名 这里的mask 是表示禁用的意思,reload表示的是重载

service服务指令在/etc/init.d/

image-20210622160142001

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

image-20210623081039798

service  服务名  [start | stop | restart | reload | status |mask ]
在CentOS7.0后  不再使用service ,而是systemctl
systemctl   [start | stop | restart | reload | status | mask ]    服务名 这个很重要

chconfig指令

介绍

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

2、chconfig指令管理的服务在/etc/init.d查看

3、注意:CentOS7后,很多服务使用systemctl管理

chconfig基本语法
  • 查看服务 chconfig --list [ | grep xxx ]
  • chconfig 服务名 --list

image-20210622222047028

  • ckconfig --level 5 服务名 on/off

案例演示:对network 服务进行各种操作,把network在运行级别3关闭自启动

chkconfig --level 3 network off
chkconfig --level 3 network on

image-20210622222415266

image-20210622222510465

使用细节

chconfig重新设置服务后自启动或关闭,需要重启机器reboot生效

systemctl指令的常见使用

systemctl基本介绍:在Centos 中 systemctl 是设置系统服务的命令,即 service , 它融合之前service和chkconfig的功能于一体。

可以使用它永久性或只在当前会话中启用/禁用服务。

systemctl 设置服务的自启动状态
systemctl							输出激活的单元,即列出所有正在运行的服务
systemctl	list-units		 		 输出激活的单元
systemctl	--failed		 		输出运行失败的单元
systemctl	list-unit-files	 [[|grep  服务名] 		(查看服务开机启动状态,grep可以进行过滤)
systemctl enbale  服务名	(设置服务开机启动)
systemctl disabale  服务名   (关闭服务开机启动)
systemctl is-enbaled   服务名   (查询某个服务是否是自启动的)

启动一个服务

systemctl start sshd.service 也可以省略(.service)

在开机启动或者关闭服务:

systemctl enbale sshd.service
systemctl disable sshd.service

查看是否开机启动

systemctl is-enbaled sshd.service

查看已启动的服务列表:

 systemctl list-unit-files | grep enabled

查看启动失败的服务列表:

systemctl --failed

查看防火墙服务

 ls -l /usr/lib/systemd/system | grep firewalld

image-20210623081740177

查看防火墙的自启动状态

systemctl list-unit-files | grep firewalld

image-20210623081920967

systemctl is-enabled firewalld

image-20210623082011662

查看网络状态

netstat  -anp |more

image-20210623082620812

使用案例

1)查看当前防火墙的状况,关闭防火墙和重启防火墙 ( CentOS7.0中)

systemctl status firewalld     firewalld  表示的是防火墙的意思
systemctl stop firewalld   关闭防火墙

image-20210620123454237

细节讨论:

1)关闭或者其用防火墙后,立即生效。 [telnet 测试某个端口即可]

image-20210620141035729

2)这种方式这是临时生效,当重启系统后,还是回归以后对服务的设置

3)如果希望设置,某个服务自动启动或关闭永久生效,使用chekconfig指令。

查看服务名

方式一:使用setup --> 系统服务 就可以看到

setup

image-20210620141823089

方式二: /etc/init.d/服务名称

image-20210620142323462

服务的运行级别(runlevel):

Linux系统有七种运行级别(runlevel):常用的是级别3和5

运行级别0:系统停机状态,系统默认的运行级别不能设置为0,否则不能正常启动

运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆

运行级别2:多用户状态(有NFS),不支持网络

运行级别3:完全的多用户状态(有NFS)无界面,登陆后进入控制台命令行模式

运行级别4:系统未使用,保留

运行级别5:X11控制台,登录后进入图形GUI模式

运行级别6:系统正常关闭并重启,默认运行级别不能设置为6,否则不能正常启动

  • 开机的流程

开机 -----》 BIOS -------》 /boot -------》systemd进程1----------》运行级别------------》运行级别对应的服务

1、查看默认的运行级别

systemctl get-default

image-20210622192404552

2、设置运行级别为3号级别

systemctl set-default multi-user.target

image-20210622192616836

3、设置成图形化界面

systemctl set-default graphical.target

image-20210622192958284

示意图

image-20210623085342071

打开或者关闭指定端口

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

firewall指令

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

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

需要重新载入,才能生效:firewall-cmd  --reload

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

应用案例

1、启用防火墙,测试111端口是否能telnet ,不行

2、开放111端口

image-20210623105103990

3、再次关闭111端口

关闭端口:firewall-cmd --permanet --remove-port =端口号/协议
需要重新载入,才能生效:firewall-cmd  --reload

image-20210623110755819

动态监控进程

介绍

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

基本语法

top  [选项]

选项说明

选项功能
-d 秒数指定top命令每隔几秒更新。默认是3秒
-i使top不显示任何闲置或者僵尸进程
-p通过指定监控进程ID来仅仅监控某个进程的状态

使用top指令动态监控进程

下图的zombie是僵尸进程,已经死掉了,但是内存没有释放

image-20210623112345015

交互操作说明

操作功能
P以CUP使用率排序,默认就是此项
M一内存使用率排序
N以PID排序
q退出top

应用实例

案例一:监视特定用户

top:输入此命令,按回车键,查看执行的进程。

u:然后输入"u"回车,再输入用户名,即可。

image-20210623191023100

案例二:终止此进程,比如我们要结束pzx登录

top:输入此命令,按回车键,查看执行的进程。

k:然后输入“k”回车,再输入要结束的进程的ID号。(然后在输入9,进行强制杀死)

案例三:指定系统装态更新的时间(每隔10秒自动更行),默认是3秒

top -d 10

监控网络状态

查看系统的网络状态情况netstat

基本语法

netstst  [选项]
选项说明
-an   按一定顺序排列输出
-p   显示哪一个进程在调用

应用案例

查看系统的网络状态情况netstat

image-20210623192416838

查看sshd服务的服务信息

netstat -anp | grep sshd

网络有问题的处理方法

image-20210624193814271

linux和Windows之间建立通信(这个其实就是建立tcp通信)

image-20210623192932774

RPM和YUM

rpm包的管理

介绍

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

rpm的简单查询指令

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

案例演示:请查询是否安装firefox

    rpm -qa | grep firefox

image-20210623205227158

rpm包的其他查询指令:

rpm  -qa  查询所安装的所有rpm软件包
rpm  -qa | more
rpm  -qa | grep X[rpm -qa | grep firefox]
rpm  -q   软件包名:查询软件包是否安装
rpm  -q   firefox
rpm  -qi  软件包名:查询软件包信息
rpm  -q  file
rpm  -ql  软件包名:查询软件包中的文件
rpm  -qi  firefox

rpm  -qf  文件全路径名  查询文件所属的软件包
rpm  -qf  /etc/passwd
rpm  -qf  /root/install.log

image-20210623205954028

查询firefox安装在哪里

rpm  -q  file firefox

image-20210623210345146

rpm -qf /etc/passwd

image-20210623210613970

卸载rpm包

  • 基本语法
rpm -e  RPM的名称
  • 应用案例

1)删除firefox软件包

rpm -e firefox

image-20210623211021073

  • 细节讨论

1)如果其他软件包依赖于你要卸载的软件包,卸载时则会产生错误信息。

如:$rpm -e foo	

removing these packages would break dependences:foo is needed by bar-1.0-1

2)如果我们就是要删除foo这个rpm包,可以增加参数–nodeps ,就可以进行强制删除了,但是一般不推荐这样做,因为依赖于这些软件包的程序可能无法运行。

如:$rpm -e –nodeps foo 带上–nodeps就是强制删除的意思

安装rpm包

基本语法

rpm -ivh RPM包的全路径名称

参数说明

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

应用实例

1)演示安装firefox浏览器

步骤:

1、先找到firefox的安装rpm包,你需要挂载到我们安装的centos的iso文件

2、到 /mdeia/ 下去找rpm

cp firefox-68.10.0-1.el7.centos.x86_64.rpm /opt/

image-20210624122936318

yum

介绍

Yum是一个shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖关系,并且一次安装所有依赖的软件包。(有点像maven使用yum的前提是可以联网。

示意图
image-20210624124018202

yum的基本指令

查询yum服务是否具有需要安装的软件

yum  list  |  grep  xxx软件列表

安装指定的yum包

yum install xxx   下载安装  [-y]  -y可选就不会询问你要不要安装了

yum应用实例

请使用yum的方式来安装firefox

1)先查看firefox rpm 在yum服务器上有没有

image-20210624124333702

2)安装

yum insatll firefox
默认会安装最新版本的软件

image-20210624125044364

JavaEE定制篇 搭建JavaEE环境

概述

image-20210624134136606

如果需要在Linux下进行JavaEE开发,需要安装如下软件

安装jdk

  1. 先将软件通过xftp7上传到/opt

  2. 解压缩到/opt

image-20210624181308670

JAVA_HOME=/opt/jdk1.7.0_79
PATH=/opt/jdk1.7.0_79/bin:$PATH
export JAVA_HOME PATH
  1. 需要注销用户,环境变量才能生效

1、如果是3运行级别,直接logout

2、如果是5运行级别 (可以使用 source /etc/profile 来刷新配置文件

先用javac指令生成字节码文件,再用java指令运行。

javac Hello.java 
java Hello

image-20210624183255605
image-20210624183425081
image-20210624183329066

安装tomcat

步骤

1、先通过xftp传输压缩包到Linux上,然后解压到/opt

tar -zxvf apache-tomcat-7.0.70.tar.gz

image-20210624184015616

2、启动tomca ./startup.sh

先进入到tomcat的bin目录
image-20210624191149690

./startup.sh  启动tomcat

image-20210624191416250

使用Linux本地的浏览器是可以访问到tomcat

3)开放放端口 vim/etc/sysconfig/firewall

在windows下访问http://localhost:8080/

eclipse的安装

步骤

1)解压到/opt

tar -zxvf eclipse-jee-mars-2-linux-gtk-x86_64.tar.gz 
tar -zxvf eclipse-jee-mars-2-linux-gtk-x86_64.tar.gz 

image-20210625112922649

2)启动eclipse,配置jre和server

cd 切换到eclipse目录下
然后再用 ./eclipse 进行启动

3)编写Hello World程序并测试成功

4)编写jsp页面并测试成功

mysql的安装和配置

1、先查看是否已经下载了mysql

rpm -qa | grep mysql

如果有就删掉

rpm -e (--nodeps强制删除) mysql-libs

2、安装mysql的环境

yum -y install make gcc-c++ cmake bsion-devel ncurses-devel

3、解压mysql包

 tar -zxvf mysql-5.6.14.tar.gz 

4、切换到MySQL的目录下

cd mysql-5.6.14/ 

shell编程

为什么要学shell编程?

1)Linux运维工程师再进行对服务器集群管理时,需要编写shell程序来进行服务器的管理。

2)对于JavaEE和python程序员来说,工作需要,需要些shell脚本进行程序或者是服务器的维护,比如编写一个定时备份数据库的脚本。

3)对于大数据程序员来说,需要编写Shell程序来管理集群。

Shell是什么

shell是一个命令行解释器,它为用户提供一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至是编写一些程序。
image-20210626093320313

shell编程快速入门-shell脚本的执行方式

脚本的要求

1)脚本以#!/bin/bash开头 (告诉编辑器是用bash来进行解析的)

2)脚本需要有可执行权限

编写第一个shell脚本

需求说明

创建一个shell脚本,输出hello world!

查看案例:
image-20210626093947711

脚本的常用执行方式

方式一:(输入脚本的绝对路径或者相对路径)

1)首先要赋予helloworld.sh脚本的 +x权限
image-20210626094500814

方式二(sh+脚本,不推荐使用

说明:不用赋予脚本+x权限,直接执行即可

image-20210626094834001

shell的变量

shell的变量的介绍

1)Linux Shell 中的变量分为,系统变量用户自定义变量

2)系统变量:SHOME 、 PWD、PWD 、PWDSHELL、 $USER等等

比如:echo $HOME 等等
image-20210626095648035

3)显示当前shell中的所有变量:set

shell变量的定义

基本语法

1)定义变量:变量=值

2)撤销变量:unset 变量

3)声明静态变量:readonly 变量,注意:不能用unset

快速入门

案例1:定义变量A

案例2:撤销变量A
image-20210626100739165

​ 案例3:声明一个只读变量B=2 (readonly 就相当于Java中的final),不能unset
image-20210626101953724

案例四:可以把一个变量提升为一个全局环境变量,可供其他shell程序使用

定义变量的规则

1)变量名称可以由字母数字和下划线组成,但是不能以数字开头。

2)等号两侧不能有空格

3)变量名称一般习惯大写

将命令的返回值赋值给变量(重点)

A=`ls -la`反引号,运行里面的命令,并把结果返回给变量A

image-20210628103507936

设置环境变量

image-20210628103906011

基本语法

1)export 变量名=变量值 (功能描述:将shell变量输出为环境变量)

2)source 配置文件 (功能描述:让修改后的文件信息立即生效)

3)在另一个shell程序中使用TOMCAT_HOME

注意:在输出TOMCAT_HOME环境变量前,要让起生效

这个是刷新配置文件的意思:source/etc/profile

多行注释   :<<! 要注释的内容  !

image-20210628105153321

位置参数变量

介绍

当我们执行一个shell脚本时,如果希望获得命令行的参数信息。就可以使用到位置参数变量。比如:./myshell.sh 100 200 ,这个就是执行shell命令行,可以在myshell脚本中获取到参数信息 (有点类似于Java方法传参数

基本语法

$n(功能描述:n为数字,$0代表命令本身,$1-9代表第一到第九个参数,十以上的参数需要用大括号包含,如9代表第一到第九个参数,十以上的参数需要用大括号包含,如9{10})

∗(功能描述:这个变量代表命令行中所有参数,<fontcolor=′red′>* (功能描述:这个变量代表命令行中所有参数,<font color='red'><fontcolor=red>*把所有的参数看成一个整体)

@(功能描述:这个变量也代表命令行中的所有参数,<fontcolor=′red′>不过@(功能描述:这个变量也代表命令行中的所有参数,<font color='red'>不过@<fontcolor=red>@把每个参数区分对待)

$#(功能描述:这个变量代表命令行中的所有参数的个数)

位置参数变量的应用实例

案例:编写一个shell脚本positionPara.sh,在脚本中获得命令行中各个参数信息
image-20210628172425041

image-20210628172519512

预定义变量

基本介绍

就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用。

基本语法

$$				(功能描述:当前进程的进程号(pid))
$!				(功能描述:后台运行的最后一个进程的进程号(pid))
$?				(功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)

应用实例

在一个shell脚本中简单使用一下预定义变量。

image-20210628214059047

运算符

基本介绍

学习如何在shell中进行运算操作

基本语法

1)“((运算式))”或“((运算式))” 或 “(())[运算式]”

2)expr m + n

注意expr运算符间要有空格

3)expr m -n

4)expr \* , / , % 乘,除,取余 (expr : expression)

  • 应用实例
  • 注意在写shell脚本的时候变量和等号之间不要有空格

案例一:计算(2+3)X4的值

  1. $((运算式))image-20210705161634409
  2. $[运算式]image-20210705161851739
  3. exprimage-20210705163236697

案例二:请求算出命令行两个参数之和image-20210705164140704

条件判断

基本语法

[ condition ] (注意condition前后要有空格)
#非空返回true,可使用$?验证(0为true,>1为false)

应用实例

[ atguigu ]			返回true
[]  				返回false
[ condition ] && echo OK  || echo notok  条件满足,执行后面的语句

判断语句

  • 常用的判断条件

1) 两个整数的比较

=字符串的比较
-lt小于  lt=less than
-le小于等于  
-eq等于   eq=equal than
-gt大于   gt=great than
-ge大于等于 ge=great equal
-ne不等于  ne=not equal

按照文件所有权进行判断

-r  有读的权限
-w  有些的权限
-x  有执行的权限

按照文件类型进行判断

-f  文件存在并且是个常规文件
-e  文件存在
-d  文件存在并且是个目录

应用实例

案例一:“ok”是否等于“ok”

判断语句:image-20210705181744621

案例二:判断23是否大于等于22

这里的结束 fi ,就是把 if 反着写,后面的要学的 case   结束的关键字就是 esac

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传image-20210705182351705

案例三:判断/root/shell/aaa.txt是否存在

判断语句:
image-20210705182923634

shell 流程控制

if判断

基本语法

if [ 条件判断式 ];
	then
	程序
	elif [ 条件判断式 ]
	then
	程序 
fi	
或者
if [ 条件判断式 ]		
	then
	程序
	elif [ 条件判断式 ]
	then
	程序 
fi	

注意事项:(1)[ 条件判断式 ] ,中括号和条件判断式之间必须有空格

(2)推荐使用第二种方式

应用案例

#案例:请编写一个shell程序,如果输入的参数大于等于60,则输出”及格了“ ,如果小于60,则输出“不及格”image-20210705202737022

case语句

基本语法

case $变量名  in   
"值1")
如果变量名等于值1,则执行程序1
;;
"值2")
如果变量等于值2,则执行程序2
;;
...省略其他分支...
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac

应用案例

案例1:当命令行参数是1时,输出“周一”,是2时,输出“周二”,其他情况输出“other”

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传image-20210705214122831

for循环

基本语法(这个相当于增强for循环,foreach)

for  变量  in 值1  值2 值3 ...
do
程序
done

应用实例

案例1:打印命令行输入的参数【会使用到$* $@】

这里的$i表示的是引用上面的i的意思
image-20210705220256804

image-20210706164634006

基本语法

for ((初始值;循环控制条件;变量变化))
do
程序
done

应用实例

案例1:从一加到一百的值输出显示[这里可以看出$* 和 $@的区别]

#!/bin/bash
#求1到100的值
#定义一个结果变量
sum=0
for ((i=1;i <= 100 ;i++ ))

do
sum=$[ $sum+i ]
done
echo "sum=$sum"

image-20210706165734779

while循环

基本语法

while  [条件判断式]
do
程序
done

应用实例

案例一:从命令行输出一个数n,统计从1+…+n的值是多少?

读取控制台的输入

基本语法

read (选项)  (参数)
选项:
-p :指定读取时的提示符号
-t :指定读取时等待的时间(),如果没有在指定的时间内输入,就不再等待了
参数
变量:指定读取值的变量名

应用实例

案例一:从控制台读取一个num值。

image-20210706172933098
案例二:读取控制台输入一个num值,在10秒内输入。

image-20210706172956207

函数

函数介绍

shell编程和其它语言一样,有系统函数,也可以有自定义函数。在系统函数中,就介绍这两个。

系统函数

  • bashname基本语法

功能:返回完整路径下最后 / 部分,常用于获取文件名

basename [pathname]  [suffix]
basename [string]  [suffix]  功能描述:basename命令会删掉所有的前缀包括最后一个('/')
字符,然后将字符显示出来
选项
suffix 为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉

应用实例

案例一:请返回 /home/aaa/test.txt的”test.txt“部分
image-20210707101457436

dirname基本语法

功能:返回完整路径最后 / 的前面的部分,常用于返回路径部分

dirname文件绝对路径(功能描述:从给定的包含绝对路径的文件中去除文件名(非目录部分),然后返回剩下的路径(目录部分))

应用实例

案例一:请返回/home/aaa/test.txt的/home/aaa
image-20210707102533380

自定义函数

  • 基本语法
[ function ] funname [()]
{
	Action;
	[return int;]

}
调用直接写函数名: funname
注意[]这个是可选的,里面的内容可写可不写
  • 应用实例

案例1:计算输出两个参数的和,getSum
image-20210707104022527

shell编程的综合案例

需求分析

  1. 每天凌晨2:10备份数据库atguiguDB到/data/backup/db
  2. 备份开始和备份结束能够给出相应的提示信息
  3. 备份后的文件要求以备份时间为文件名,并打成.tar.gz的形式,比如: 2018-03-12_230201.tar.gz
  4. 在备份的同时,检查是否有10天前的备份的数据库文件,如果有就将其删除

编写一个shell脚本。

思路分析:
image-20210707154848109

代码实现:

#!/bin/bash
#完成数据库的定时备份
#定义备份的路径
BACKUP=/data/backup/db
#当前的时间作为文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)
#可以输出变量调试
#echo $DATETIME
#!/bin/bash
#完成数据库的定时备份
#定义备份的路径
BACKUP=/data/backup/db
#!/bin/bash
#完成数据库的定时备份
#定义备份的路径
BACKUP=/data/backup/db
#当前的时间作为文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)
#可以输出变量调试
#echo $DATETIME
echo "======开始备份======"
echo "======备份的路径是$BACKUP/$DATETIME.tar.gz ======"

#主机
HOST=localhost
#用户名
DB_USER=root
#密码
DB_PWD=root
#备份数据库名
DATABASE=atguiguDB
#创建备份的路径
#如果备份的文件夹存在就使用,否则就创建
#mkdir -p :递归创建目录,即使上级目录不存在,会按目录层级自动创建目录
 [ ! -d "$BACKUP/$DATETIM"   ] && mkdir -p "$BACKUP/$DATETIME"
#执行mysql的备份数据库的指令
mysqldump   -u${DB_USER} -P${DB_PWD}   --host=$HOST   $DATABASE | gzip  >  $BACKUP/$DATETIME.sql.gz
#打包备份文件
cd $BACKUP
tar -zcvf $DATETIME.tar.gz  $DATETIME
#删除临时目录
rm -rf $BACKUP/$DATETIME
#删除十天前的备份文件
#下面那条指令的意思:find是查找指令,-m表示按照时间查找+10表示十天前的 
#-name 表示按照名称查找以.tar.gz结尾的文件   
#exec代表着执行 执行后面的  rm -rf {} \; 就是删除找到的那些文件,这个是一个固定的写法
find $BCAKUP  -m  +10  -name  "*.tar.gz" -exec  rm -rf {} \;
echo "======备份文件成功======"

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6vsb03e0-1625659084658)(https://qlwy.oss-cn-shenzhen.aliyuncs.com/img/20210707194758.png)]

2020/7/7Linux学习完结撒花

77事变84周年,吾辈当自强

UR4z-1625659084653)]

for循环

基本语法(这个相当于增强for循环,foreach)

for  变量  in 值1  值2 值3 ...
do
程序
done

应用实例

案例1:打印命令行输入的参数【会使用到$* $@】

这里的$i表示的是引用上面的i的意思

image-20210705220256804

image-20210706164634006

基本语法

for ((初始值;循环控制条件;变量变化))
do
程序
done

应用实例

案例1:从一加到一百的值输出显示[这里可以看出$* 和 $@的区别]

#!/bin/bash
#求1到100的值
#定义一个结果变量
sum=0
for ((i=1;i <= 100 ;i++ ))

do
sum=$[ $sum+i ]
done
echo "sum=$sum"

image-20210706165734779

while循环

基本语法

while  [条件判断式]
do
程序
done

应用实例

案例一:从命令行输出一个数n,统计从1+…+n的值是多少?

读取控制台的输入

基本语法

read (选项)  (参数)
选项:
-p :指定读取时的提示符号
-t :指定读取时等待的时间(),如果没有在指定的时间内输入,就不再等待了
参数
变量:指定读取值的变量名

应用实例

案例一:从控制台读取一个num值。
image-20210706172933098

案例二:读取控制台输入一个num值,在10秒内输入。

image-20210706172956207

函数

函数介绍

shell编程和其它语言一样,有系统函数,也可以有自定义函数。在系统函数中,就介绍这两个。

系统函数

  • bashname基本语法

功能:返回完整路径下最后 / 部分,常用于获取文件名

basename [pathname]  [suffix]
basename [string]  [suffix]  功能描述:basename命令会删掉所有的前缀包括最后一个('/')
字符,然后将字符显示出来
选项
suffix 为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉

应用实例

案例一:请返回 /home/aaa/test.txt的”test.txt“部分
image-20210707101457436

dirname基本语法

功能:返回完整路径最后 / 的前面的部分,常用于返回路径部分

dirname文件绝对路径(功能描述:从给定的包含绝对路径的文件中去除文件名(非目录部分),然后返回剩下的路径(目录部分))

应用实例

案例一:请返回/home/aaa/test.txt的/home/aaa

image-20210707102533380

自定义函数

  • 基本语法
[ function ] funname [()]
{
	Action;
	[return int;]

}
调用直接写函数名: funname
注意[]这个是可选的,里面的内容可写可不写
  • 应用实例

案例1:计算输出两个参数的和,getSum
image-20210707104022527

shell编程的综合案例

需求分析

  1. 每天凌晨2:10备份数据库atguiguDB到/data/backup/db
  2. 备份开始和备份结束能够给出相应的提示信息
  3. 备份后的文件要求以备份时间为文件名,并打成.tar.gz的形式,比如: 2018-03-12_230201.tar.gz
  4. 在备份的同时,检查是否有10天前的备份的数据库文件,如果有就将其删除

编写一个shell脚本。

思路分析:

image-20210707154848109

代码实现:

#!/bin/bash
#完成数据库的定时备份
#定义备份的路径
BACKUP=/data/backup/db
#当前的时间作为文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)
#可以输出变量调试
#echo $DATETIME
#!/bin/bash
#完成数据库的定时备份
#定义备份的路径
BACKUP=/data/backup/db
#!/bin/bash
#完成数据库的定时备份
#定义备份的路径
BACKUP=/data/backup/db
#当前的时间作为文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)
#可以输出变量调试
#echo $DATETIME
echo "======开始备份======"
echo "======备份的路径是$BACKUP/$DATETIME.tar.gz ======"

#主机
HOST=localhost
#用户名
DB_USER=root
#密码
DB_PWD=root
#备份数据库名
DATABASE=atguiguDB
#创建备份的路径
#如果备份的文件夹存在就使用,否则就创建
#mkdir -p :递归创建目录,即使上级目录不存在,会按目录层级自动创建目录
 [ ! -d "$BACKUP/$DATETIM"   ] && mkdir -p "$BACKUP/$DATETIME"
#执行mysql的备份数据库的指令
mysqldump   -u${DB_USER} -P${DB_PWD}   --host=$HOST   $DATABASE | gzip  >  $BACKUP/$DATETIME.sql.gz
#打包备份文件
cd $BACKUP
tar -zcvf $DATETIME.tar.gz  $DATETIME
#删除临时目录
rm -rf $BACKUP/$DATETIME
#删除十天前的备份文件
#下面那条指令的意思:find是查找指令,-m表示按照时间查找+10表示十天前的 
#-name 表示按照名称查找以.tar.gz结尾的文件   
#exec代表着执行 执行后面的  rm -rf {} \; 就是删除找到的那些文件,这个是一个固定的写法
find $BCAKUP  -m  +10  -name  "*.tar.gz" -exec  rm -rf {} \;
echo "======备份文件成功======"

image-20210707194750770

2021/7/7Linux学习完结撒花

77事变84周年,吾辈当自强

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值