Linux_learn

Linux - 用户管理

创建用户

  • 基本语法

useradd 用户名

  • 应用案例
# 添加一个用户milan 
useradd milan  // 默认该用户的家目录在/home/milan
  • 细节说明

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

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

指定/修改密码

  • 基本语法

passwd 用户名

  • 应用案例
passwd milan 修改密码

删除用户

  • 基本语法

userdel 用户名

  • 应用案例
删除用户milan 但是要保留家目录
userdel milan
删除用户以及用户主目录
userdel -r tom

查询用户信息指令

  • 基本语法

id 用户名

  • 应用实例

查询 root 信息

  • 细节说明

当用户不存在时,返回无此用户

切换用户

  • 介绍

再操作linux系统中,如果当前用户的权限不够,可以通过su - 指令,切换到高权限用户,比如 root

  • 基本语法

su - 切换用户名

  • 细节说明

  • 从权限高的用户切换到权限低的用户,不需要输入密码,反之需要

  • 当需要返回原来用户时,使用exit/logout指令

查看当前用户/登录用户

  • 基本语法

whoami / who am i

用户组

  • 介绍

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

  • 新增组

指令:group add 组名

  • 删除组

指令( 基本语法 ):groupdel 组名

  • 增加用户时直接加上组

指令( 基本语法 ):useradd -g 用户组 用户名

groupadd wudang
useradd -g wudang zwj

注意:没有组 就默认 创建一个组 同用户名

  • 修改用的组

指令( 基本语法 ):usermod -g 用户组 用户名

Linux - 实用指令

指定运行级别

  • 基本介绍

运行级别说明:

0:关机

1:多用户【 找回丢失密码 】

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

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

4:系统没使用保留给用户

5:图形界面

6:系统重启

常用运行级别是35.也可以指定默认运行级别,后面演示

  • 应用实例

命令1:init [0 1 2 3 4 5 6]

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

切换用户到第三级别:

# 设置级别为第三级别
set -default multi-user.target`
# 查看当前的级别
systemctl get-default
# 设置第五级别
systemctl set-default graphical.target

找回root密码

帮助指令

  • man 获得帮助信息

基本语法:man 命令或配置文件

案例:查看 ls 命令的帮助信息 man ls 输入 q 退出

  • help指令

基本语法:help 命令 ( 功能描述:获得shel内置命令的帮助信息 )

目录结构

  1. 绝对路径:/
  2. 相对路径 在当前文件夹的路径
  3. . -> 代表当前目录
  4. .. ->代表上一层目录
  5. 根目录:/
  6. ~/ -> 代表家目录( /home/用户名 )例:/home/acs
  7. bin:可执行文件
  8. lib:安装包、路径

文件管理系统指令

常用命令介绍:

  1. Ctrl c:取消命令,并且换行

  2. Ctrl u:清空本行命令

  3. tab键:可以补全命令和文件名,如果补全不了快速按两下tab键,可以显示备选选项

  4. ls:列出当前目录下所有文件,蓝色的是文件夹,白色的是普通文件,绿色的是可执行文件

ㅤㅤㅤ●ㅤls -a:查看所有文件包括隐藏文件(以.开头的文件就是隐藏文件)

ㅤㅤㅤ●ㅤls -l:查看当前路径下文件的读、写、执行权限

ㅤㅤㅤ●ㅤls | wc -l:查看ls下有多少个文件

​ ●ㅤls -lh:按照人性化显示文件

  1. pwd显示绝对路径

  2. cd XXX:进入XXX目录下,cd ..返回上层目录

ㅤㅤㅤ●ㅤ.:当前目录 ..:上级目录

ㅤㅤㅤ●ㅤ~:家目录,回回到路径/home/acs下

ㅤ ㅤ●ㅤcd -:返回改变路径前的路径,比如当前在/home/acs/homework然后cd /这个时候就处于/目录下,

​ 然后cd -就会回到改变路径前的路径也就是/home/acs/homework

  1. cp XXX YYY:将XXX文件复制成YYY,XXX和YYY可以是同一个路径,比如../dir_c/a.txt,表示上层目录下的dir_c文件夹下的文件a.txt ( 复制 粘贴 重命名 )

ㅤㅤㅤ●ㅤcp XXX YYY -r将XXX目录(文件夹)复制到YYY下

ㅤㅤㅤ●ㅤ非当前路径重命名方法:cp a/a.txt b/b.txt

​ ●ㅤ复制到当前目录:cp a c -r

案例1:将/home/hello.txt 拷贝到 /home/bbb 目录下
cp hello.txt/home/bbb
案例2:递归复制整个文件夹 将/home/bbb 整个目录 拷贝到 /opt
cp -r /home/bbb /opt
# 强制覆盖不提示的方法;
cp -r /home/bbb /opt
  1. mkdir XXX:创建目录(文件夹)XXX

​ ●ㅤ创建a/b/c : mkdir a/b/c -p

ㅤㅤㅤ●ㅤmkdir -p:-p:如果文件夹不存在,则创建

  1. rm XXX:删除普通文件; rm XXX -r:删除文件夹

ㅤㅤㅤ●ㅤ支持正则表达式,删除所有.txt类型文件:rm *.txt

ㅤㅤㅤ●ㅤ删除所有文件(不包括文件夹):rm *

ㅤㅤㅤ●ㅤ正则表达式删除所有文件夹:rm * -r即可

ㅤㅤㅤ●ㅤ删除文件夹下的所有文件:rm a/*

  1. mv XXX YYY:将XXX文件移动到YYY下,和cp命令一样,XXX和YYY可以是同一个路径;重命名也是用这个命令

ㅤㅤㅤ●ㅤ非当前路径移动方法:mv a.txt ../b.txt

ㅤㅤㅤ●ㅤ重命名:mv a.txt b.txt

  1. touch XXX:创建一个文件

  2. cat XXX:展示文件XXX中的内容 cat -n text.txt 显示行号

  3. 复制文本:windows/Linux下:Ctrl + insert,Mac下:command + c

  4. 粘贴文本:windows/Linux下:Shift + insert,Mac下:command + v

  5. history:查看历史输入指令

  6. tree:以树形显示文件目录结构

  7. find: 查看目录结构 find a

  8. history: : 查看历史指令

  9. 压缩和解压
    zip 压缩文件
    -r:递归压缩 ;-d:指定压缩文件的存放目录zZ bbcv

例如:zip -r myhome.zip /home/

unzip 解压文件 例如:unzip -d /opt/temp /home/myhome.zip

文件目录类

  • echo指令

echo输出内容到控制台

基本语法:

echo [ 选项 ] [ 输出内容 ]

  • head指令

head 用于显示文件的开头部分内容,默认情况下 head 指令显示文件的前10行呢日哦那个

基本语法:

head 文件 ( 功能描述:查看文件头10行内容 )

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

  • tail指令

tail 用于输入文件中尾部的内容,默认情况下 tail 指令显示文件的前十行内容

基本语法:

tail 文件 ( 功能描述:查看文件尾部10行内容 )

tail -n 5 文件 ( 功能描述:查看文件尾部五行内容,5可以是任意行数 )

tail -f 文件 ( 功能描述:实时追踪该文档的所有更新 )

  • > 指令和 » 指令

>输出重定向 和 » 追加

基本语法:

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

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

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

echo "内容" >> 文件 ( 追加 )

应用案例:

案例1:将/home 目录下的文件列表 写入到/home/info.txt中 覆盖写入
ls -l /home > /home/info/txt [ 如果info.txt没有 则会自动创建 ]
案例2:将当前日历信息( `cal` )住家到 /home/mycal 文件中
cal >> /home/mycal

tmux 教程

功能:

  • 分屏

  • 允许断开Terminal连接后,继续运行进程

结构:

一个tmux可以包含多个session,一个session可以包含多个window,一个window可以包含多个pane

实例:

tmux:
    session 0:
        window 0:
            pane 0
            pane 1
            pane 2
            ...
        window 1
        window 2
        ...
    session 1
    session 2
    ...

操作:

  1. tmux:新建一个session,其中包含一个window,window中包含一个pane,pane里打开了一个shell对话框

  2. 按下Ctrl + a后手指松开,然后按 % :将当前pane左右平分成两个pane

ㅤ3. 按下Ctrl + a后手指松开,然后按 " :将当前pane上下平分成两个pane

  1. Ctrl + d:关闭当前pane;如果当前window的所有pane均已关闭,则自动关闭window;如果当前session的所有window均已关闭,则自动关闭session
  2. 鼠标点击可以选择pane
  3. 按下Ctrl + a后手指松开,然后按方向键:选择相邻的pane
  4. 鼠标拖动pane之间的分割线,可以调整分割线的位置
  5. 按下Ctrl + a的同时按方向键,可以调整pane之间分割线的位置
  6. 按下Ctrl + a后手指松开,然后按 z :将当前pane全屏/取消全屏
  7. 按下Ctrl + a 后手指松开,然后按 d :挂起当前session
  8. tmux atmux attach:打开之前挂起的session
  9. 按下Ctrl + a 后手指松开,然后按 s :选择其它session

ㅤㅤㅤ●ㅤ方向键 ———— 上:选择上一项 session/window/pane

ㅤㅤㅤ●ㅤ方向键 ———— 下:选择下一项 session/window/pane

ㅤㅤㅤ●ㅤ方向键 ———— 左:展开当前项 session/window

ㅤㅤㅤ●ㅤ方向键 ———— 右:闭合当前项 session/window

  1. 按下Ctrl + a后手指松开,然后按 c :在当前session中创建一个新的window
  2. 按下Ctrl + a后手指松开,然后按 w :选择其它window,操作方法与(12)一致
  3. 按下Ctrl + a后手指松开,然后按 Page Up :翻阅当前pane内的内容
  4. 鼠标滚轮:翻阅当前pane内的内容
  5. tmux中选中文本时,需要按住Shift键(仅支持Windows和Linux,不支持Mac,不过该操作并不是必须的,因此影响不大)
  6. mux中复制/粘贴文本的通用方式:

ㅤㅤㅤ●ㅤ按下Ctrl + a后松开手指,然后按 [

ㅤㅤㅤ●ㅤ用鼠标选中文本,被 按下Ctrl + a后松开手指,然后按 ],会将剪贴板中的内容粘贴到光标处

vim 教程

功能:

  1. 命令行模式下的文本编辑器

  2. :根据文件扩展名自动判别编程语言。支持代码缩进、代码高亮等功能

  3. :使用方式:vim filename

  4. 如果已有该文件,则打开它

  5. 如果没有该文件,则打开一个新的文件,并命名位 filename

模式:

  1. 一般命令模式

  2. 默认模式。命令输入方式:类似于打游戏放技能,按不同字符,即可进行不同操作。可以复制、粘贴、删除文本等

  3. 编辑模式

  4. 在一般命令模式下按 i,会进入编辑模式

  5. 按下ESC会退出编辑模式,返回到一般命令模式

  6. 命令行模式

  7. 在一般命令模式里按下 : / ?三个字母中的任意一个,会进入命令行模式

  8. 命令行在最下面。可以查找、替换、保存、退出、配置编辑器等

操作:

  1. i :进入编辑模式

  2. ESC:进入一般命令模式

  3. h左箭头键:光标向左移动一个字符

  4. j下箭头键:光标向下移动一个字符

  5. k上箭头键:光标向上移动一个字符

  6. l右箭头键:光标向右移动一个字符

  7. n<Space>:n表示数字,按下数字后再按空格,光标会往右移动这一行的n个字符

  8. 0或功能键[Home]:光标移动到本行开头

  9. $或功能键[End]:光标移动到本行末尾

  10. G:光标移动到最后一行

  11. :nnG:n为数字,光标移动到第n行

  12. gg:光标移动到第一行,相当于1G

    • 删除组合键:gg + d + G gg + d + nG
  13. n<Enter>:n为数字,光标向下移动n行

  14. /word:向光标之下寻找第一个值为word的字符串ㅤ

  15. ?word:向光标之上寻找第一个值为word的字符串

  16. n:重复前一个查找操作

  17. N:反向重复前一个查找操作

  18. :n1 , n2s/word1/word2/g:n1与n2为数字,在n1行与n2行之间寻找word1这个字符串,并将该字符串替换为word2

  19. :1 , $s/word1/word2/g:将全文的word1替换为word2

  20. :1 , $s/word1/word2/gc:将全文的word1替换为word2,且在替换前要求用户确认

  21. v:选中文本,按两下ESC取消选中状态

  22. d:删除选中的文本

  23. dd:删除当前行

  24. y:复制选中的文本

  25. yy:复制当前行

  26. p:将复制的数据在光标的下一行(yy)/下一个位置(y)粘贴

  27. u:撤销

  28. Ctrl + r:取消撤销

  29. Shift + >:将选中的文本整体向右缩进一次 n Shift + > 向右缩进n次

  30. Shift + <:将选中的文本整体向左缩进一次 n Shift + < 向左缩进n次

  31. :w:保存

  32. :w!:强制保存

  33. q:退出

  34. q!:强制退出

  35. :wq:保存并退出

  36. set paste:设置成粘贴模式,取消代码自动缩进

  37. set nopaste:取消粘贴模式,开启代码自动缩进

  38. set nu:显示行号

  39. set nonu:隐藏行号

  40. gg=G:将全文代码格式化

  41. :noh:关闭查找关键词高亮

  42. Ctrl + q:当vim卡死时,可以取消当前正在执行的命令

  43. ggdG:全部删除

  44. 异常处理:

    • 每次用vim编辑文件时,会自动创建一个.filename.swp的临时文件
    • 如果打开某个文件时,该文件的swp文件已存在,则会报错。此时解决办法有两种:
    • 找到正在打开该文件的程序,并退出
    • 直接删除掉该swp文件即可

时间日期类

date指令

date指令 - 显示当前日期

  1. date (功能描述:显示当前时间)

2) date +%Y(功能描述:显示当前年份
3) date +%m (功能描述:显示当前月份)
4) date +%d (功能描述:显示当前是哪一天)
5) date "+%Y-%m-%d %H:%M:%S"'(功能描述:显示年月日时分秒)

案例1:显示当前时间信息
date
案例2: 显示当前年月日
date "+%Y-%m-%d"
案例3: 显示当前时间年月日时秒
date "+%Y-%m-%d %H:%M:%S"

date指令 - 设置日期

  • 基本语法:

date -s 字符串时间

案例1: 设置系统当前时间
date -s "2021-11-03 20:02:10"
  • cal指令

查看日历指定

  • 基本语法:

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

案例1: 显示当前日历
cal
案例2: 显示2023日历
cal 2023

搜索查找类

find指令

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

  • 基本语法:

find [搜索范围][选项]

  • 选项说明:

案例1: 按文件名: 根据名称查找/home 目录下的 hello.txt
find /home -name hello.txt
案例2:按拥有者:查找 /opt 目录下,用户名称为nobody的文件
find /opt -user nobody
案例3:查找整个linux系统下大于200M的文件 (+n 大于 -n 小于 n 小于 单位有:k,M,G)
find / -size + 200M

locate指令

locate指令可以快速定位文件路径。locate指令利用事先建立的系统中所有文件名称及路径的 locate数据库实现快速定位给定的文件。Locate 指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新locate时刻

  • 基本语法:

locate 搜索文件

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

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

which指令

可以查看某个指令在哪个目录

案例: ls指令在哪个目录
which ls

grep指令和 管道符号 |

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

  • 基本语法:

grep [选项] 查找内容 源文件

  • 常用选项:

| 选项 | 功能 |
| —- | —————- |
| -i | 忽略字母大小写 |
| -n | 显示匹配行及行号 |

  • 原理:

案例1:请在hello.txt 文件中,搜索 "yes" 所在行,并且显示行号

写法1:cat /home/hello.txt | grep -n "yes"
写法2:grep -n "yes" /home/hello.txt

压缩和解压类

gzip / gunzip 指令

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

  • 基本语法:

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

gunzip 文件.gz( 功能描述:解压缩文件命令 )

  • 应用案例
案例1:gzip压缩,将 /home 下的 hello.txt 文件进行压缩
gzip /home/hello.txt
案例2:gunzip压缩,将 /home 下的 hello.txt.gz 文件进行解压缩
gunzip /home/hello.txt/gz

zip / unzip 指令

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

  • 基本语法:

zip [选项] XXX.zip 将要压缩的内容( 功能描述:压缩文件和目录的指令 )

unzip [选项] XXX.zip ( 功能描述:解压缩文件 )

  • zip常用选项

-r:递归压缩,即压缩目录

  • unzip 常用选项

-d< 目录 > :用于解压后文件的存放目录

案例1:将 /home 下的所有文件进行压缩成 myhome.zip
zip -r myhome.zip /home/ [将home目录及其包含的文件和子文件夹都压缩]
案例2:将 myhome.zip 解压到 /opt/tmp 目录下
unzip -d /opt/tmp /home/myhome.zip 

tar 指令

  • 基本语法:

tar [选项] xxx.tar.gz 打包的内容

  • 选项说明:

  • -c 产生.tar打包文件
    -v 显示详细信息
    -f 指定压缩后的文件名
    -z 打包同时压缩
    -x 解包.tart文件

例如:

  1. 将 /home 的文件夹压缩成 myhome.tar.gz

  2. tar -zcvf myhome.tar.gz /home/

  3. 解压 myhome.tar.gz 到 opt/tmp 目录下

  4. mkdir opt/tmp

  5. tar -zxvf /home/myhome.tar.gz -C /opt/tmp [ -C 表示解压到哪个目录 ]

Linux - 组管理和权限管理

组的基本介绍

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

  1. 所有者
  2. 所在组
  3. 其它组
  4. 改变用户所在的组

文件 / 目录 所有者

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

  • 查看文件的所有者

指令:ls -ahl

  • 应用案例

  • 修改文件所有者

指令:chown 用户名 文件名

  • 应用案例

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

touch apple.txt
chown tom apple.txt

组的创建

  • 基本指令

groupadd 组名

  • 应用案例

创建一个组,monster

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

groupadd monster
useradd -g monster fox

文件 / 目录 所在组

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

  • 查看文件 / 目录所在组

基本指令:

ls -ahl

应用案例:

使用 fox 创建一个文件,看看该文件属于哪个组?

  • 修改文件所在的组

基本指令:

chgrp 组名 文件名

应用案例:

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

1.groupadd fruit
2.touch orange.txt
3.看看当前这个文件属于哪个组 -> ll
4.chgrp fruit orange.txt

其它组

除文件的所有者和所在组的用户外,系统的其它用户都是文件的 其它组。

改变用户所在组

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

  • 改变用户所在组

  • usermod -g 组名 用户名

  • usermod -d 目录名 用户名 改变该用户登录的初始目录

特别说明:用户需要有进入到新目录的权限

  • 应用案例

将 zwj 这个用户从原来的所在组 修改到 wudang 组。

usermod -g wudang zwj

权限的基本介绍

image-20230414150231154

  1. -:普通文件
  2. l : link 链接
  3. d:diretory 目录
  4. c:char 字符
  5. block:块

rmx 权限详解

  • rmx 作用到文件

  • [ r ] 代表可读 ( read ) :可以读取,查看

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

  • [ x ] 代表可执行 ( execute ) :可以被执行

  • rmx 作用到目录

  • [ r ] 代表可读 ( read ) :可以读取,ls 查看目录内容

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

  • [ x ] 代表可执行 ( execute ) :可以进入该目录

文件及目录权限实际案例

image-20230414152653908

image-20230414152702656

修改权限 - chmod

  • 基本说明

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

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

u : 所在者 g :所有组 o:其他人 a:所有人( u、g、o的总和 )

  1. chmod u = rwx , g = rx , o = x 文件 / 目录

  2. chmod o + w 文件 / 目录 // 给其它用户写的权限

  3. chmod a - x 文件 / 目录名 // 给 所有人撤销 执行的权限

  4. 案例演示

1. 给 abc 文件的所有者读写执行的权限,给所在组读执行权限,给其它组读执行权限
chmod u=rwx,g=rx,o=rx abc
2. 给 abc 文件的所有者除去执行的权限,增加组写的权限
chmod u-x,g+w abc
3. 给 abc 文件的所有用户添加读的权限
chmod a+r abc
第二种方式:通过数字变更限

r = 4 w = 2 x = 1 -> rwx = 4 + 2 + 1 = 7;

chmod u=rwx,g=rx,o=x 文件目录名 —— > chomod 751 文件目录名

  • 案例演示

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

chmod 755 /home/abc.txt

修改文件所有者- chown

  • 基本介绍

chown newowner 文件 / 目录 改变所有者

chown newowner:newgroup 文件 / 目录 改变所有者和所在组

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

  • 案例
请将 /home/abc.txt 文件的所有者修改成 tom
chown tom /home/abc.txt 
请将 /home/kkk 目录下所有文件和目录的所有者都修改成 tom
chown tom:tom /home/kkk -R 

修改文件 / 目录所在组 - chgrp

  • 基本介绍

chgrp newgroup 文件 / 目录 [改变所有组]

  • 案例演示

请将 /home/abc.txt 文件的所在组有修改成( 少林 )

请将 /home/kkk 目录下所有的文件和目录的所在组都修改成 shaolin( 少林 )

groupadd shaolin
chgrp shaolin /home/abc.txt

chgrp -R shaolin /home/kkk

rwx 细节

x:表示可以进入到该目录,比如 cd

r:表示可以 ls,将目录的内容显示

w:表示可以在该目录,删除或者创建文件

Linux - 定时任务调度

crond 任务调度

contab 进行定时任务设置

  • 概述

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

任务调度分类:1. 系统工作:有些重要的工作必须周而复始地执行,如病毒扫描等

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

image-20230421141943141

  • 基本语法

crontab [ 选项 ]

  • 常用选项

image-20230421142610084

  • 快速入门

image-20230421142722006

  • 参数细节说明

image-20230421142754881

  • 特殊符号的说明

image-20230421142814745

  • 特定时间执行任务案例

image-20230421143105391

  • 应用案例
案例1:每隔1分钟,就将当前的日期信息,追加到 /tmp/mydate 文件中
*/1 * * * * date >> /tmp/mydate
案例2:每隔1分钟,就将当前信息和日历都追加到 /home/mycal 文件中
vim my.sh
chmod u+x my.sh // 增加权限
执行脚本 ./my.sh
crontab -e 
i * /1 * * * * /home/my.sh
案例3:每天凌晨2:00将 mysql 数据库 testdb,备份到文件中。
crontab -e
i 0 2 * * * mysqldump -u root -p123456 testdb > /home/db.bak
  • crond 相关指令

  • [x] conrtab -r:终止任务调度

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

  • [x] service crond restart [ 重启任务调度 ]

at 定时任务

  • 基本介绍

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

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

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

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

    ps -ef | grep atd

  • 示意图

image-20230421152402975

  • at 命令格式

at [ 选项 ] [ 时间 ]

ctrl + D 结束 at 指令的输入

  • at 时间定义

at 指定时间的方法:

  1. 接受在当天的hh:mm (小时:分钟) 式的时间指定.假如该时间已过去,那么就放在第二天执行.例如04:00

  2. 使用midnight(深夜),noon (中午) ,teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间。

  3. 采用12小时计时制,即在时间后面加上 AM ( 上午 ) 或 PM ( 下午 )来说明是上午还是下午 例如:下午12点

  4. 指定命令执行的具体日期,指定格式为月日(月日) 或 mm/dd/yy(月/日/年)或dd.mm.yy)(日.月.年),指
    定的日期必须跟在指定时间的后面。例如:04:00 2021-03-1定的日期必须跟在指定时间的后面.例如:04:00 2021-03-1

  5. 使用相对计时法。指定格式为:now + count time-units,now 就是当前时间,time-units 是时间单位,这里能够是minutes(分钟)、 hous (小时)、days(天)、 weeks (星期)。count 是时间的数量,几天,几小时。例如: now + 5 minutes

  6. 直接使用today(今天) 、tomorrow(明天〉来指定完成命令的时间。

  7. at 命令选项

image-20230421153410375

  • ​ 应用案例
案例1:2天后的下午5点执行 /bin/ls /home
at 5pm + 2 days
at>/bin/ls /home
案例2:atq 命令来查看系统中没有执行的工作任务
atq
案例3:明天17点中,输出时间到指定文件内 比如 /root/date100.log
at 5pm tomorrow
at>date > /root/date100.log<EOT>
案例4:2分钟后,输出时间到指定文件内 比如 /root/date200.log
at now + 2 minutes
at>date > /root/date200.log<EOT>
案例5:删除已经设置的任务
atrm 编号

Linux - 磁盘分区、挂载

Linux 分区

  • 原理介绍

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

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

  • 示意图

image-20230424110709110

  • 硬盘说明

  • Linux 硬盘分IDE 硬盘和 SCSI 硬盘,目前基本上是 SCSI 硬盘。

  • 对于 IDE 硬盘,驱动器标识符为 “hdx~“,其中 “hd”,表明分区所在设备的类型,这里是指 IDE 硬盘了。“x” 为盘号( a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属主盘,d为辅助从属盘 );“~“代表分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。例,hda3 表示为第一个 IDE 硬盘上的第三个主分区或扩展分区,hdb2 表示为第二个 IDE 硬盘上的第二个主分区或扩展分区。

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

  • 产看所有设备挂在情况

命令:lsblk 或者 lsblk -f

image-20230424112115787

挂载的经典案例

  • 说明

下面我们以增加一块硬盘为例来熟悉下磁盘的相关指令和深入理解磁盘分区、挂载、卸载的概念。

  • 如何增加一块硬盘

  • 虚拟机添加硬盘

  • 分区

  • 格式化

  • 挂载

  • 设置可以自动挂载

111

磁盘情况查询

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

  • 基本语法

df -h

查询指定目录的磁盘使用情况

  • 基本语法

du - h

查询指定目录的磁盘占用情况,默认为当前目录

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

-h 带计量单位

-a 含文件

– max=depth=1 子目录深度

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

  • 应用案例

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

du -hac --max-depth=1 /opt

磁盘情况 - 工作实用指令

  1. 统计 /opt 文件夹下文件的个数

    ls - l /opt | grep “^-” | wc -l

  2. 统计 /opt 文件夹下目录的个数

    ls -l /opt | grep “^d” | wc -l

  3. 统计 /opt 文件夹下文件的个数,包括子文件夹里的

    ls -lR /opt | grep “^-” | wc -l

  4. 统计 /opt 文件夹下目录的个数,包括子文件里的

    ls -lR /opt | grep “^d” | wc -l

  5. 以树状显示目录结构

    tree /opt

如果没有 tree yum install tree 安装

Linux - 网络配置

网络原图

image-20230508104634769

Linux 网络环境配置

https://www.bilibili.com/video/BV1Sv411r7vd/ p65

设置主机名和 hosts 映射

  • 设置主机名

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

  • 指令 hostname :查看主机名

  • 修改文件在 /ext/hostname 指定

  • 修改后 重启生效

vim /etc/hostname
  • 设置 hosts 映射

思考:如何通过主机名能够找到( 比如ping )某个 Linux 系统?

  • [x] Windows

在 C:\windows\System32\drivers\etc\hosts 文件指定即可

案例:192.168.200.130 hspedu100

  • [x] Linux

在 /etc/hosts 文件 指定

案例:192.168.200.1 ThinkPad -PC

主机名解析过程分析 ( Hosts,DNS )

  • Hosts 是什么?

一个文本文件,用来记录 IP 和 Hostname ( 主机名 ) 的映射关系。

  • DNS

  • DNS,就是 Domain Name System 的缩写,翻译过来就是域名系统

  • 是互联网上作为域名和 IP 地址相互映射的一个分布式数据库。

image-20230508112633447

  • 示意图

image-20230508112657572

Linux - 进程管理

基本介绍

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

显示系统执行的进程

  • 基本介绍

ps 命令是用来查看目前系统中,有哪些正在执行,以及他们执行的状况,可以不加任何参数。

ps 显示的信息选项:

| 字段 | 说明 |
| —- | ———————- |
| PID | 进程识别号 |
| TIY | 终端机号 |
| TIME | 此进程所消CPU时间 |
| CMD | 正在执行的命令或进程名 |

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

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

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

image-20230512144048192

  • ps 详解

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

  • 指令说明

  • 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:启动进程所有的命令和参数,如果过长会被截断显示

  • 应用案例

image-20230512144357943

终止进程 kill 和 killall

  • 介绍

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

  • 基本语法

kill [选项] 进程号 ( 功能描述:通过进程号杀死进程 )

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

  • 常用选项

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

  • 最佳实践

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

kill 进程号 比如 kill 11421

案例2:终止远程登录服务 sshd,在适当时候再次启动 sshd

kill sshd对应的进程号; /bin/systemctl start sshd.service 重启登录服务

案例3:终止多个 gedit

killall gedit

案例4:强制杀掉一个终端

kill -9 进程号

查看进程树 pstree

  • 基本语法

pstree [选项],可以更加指端的来看进程信息

  • 常用选项

-p:显示进程的 PID

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

  • 应用案例

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

pstree -p

案例2:请你树状的形式进程的用户的 id

pstree -u

服务( service )管理

  • 介绍

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

service 管理指令

  1. service 服务台 [ start | stop | restart | reload | status]
  2. 在 Centos7.0后 很多服务不再使用 service,而是 systemctl
  3. service 指令管理的服务在 /etc/init.d 查看

image-20230512152650077

  • service 管理指令案例

请使用 service 指令,查看,关闭,启动 network [ 注意:在虚拟系统演示,因为网络连接会关闭 ]

  • 查看服务名

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

方式2:/etc/init.d 看到 service 指令管理的服务 ls -l /etc/init.d

  • 服务的运行级别

  • [x] Linux 系统有 7 种运行级别 ( runlevel ):常用的是级别 3 和 5

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

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

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

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

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

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

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

  • [x] 开机的流程说明:

image-20230512154048147

  • Centos7运行级别说明

在 /etc/initab

进行了简化,如下:

multi ser.target:analogous to runlevel 3

graphical.target:analogous to runlevel 5

# To view current default target, run:
systemctl get-default
# To set default target, run:
systemctl set-default TARGET.target

chkconfig 指令

  • 介绍

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

  • chkconfig 指令管理的服务在 /etc/init.d 查看

  • 注意:Centos7.0 后,很多服务使用 systemctl 管理

  • [x] chkconfig 基本语法

  • 查看服务 chkconfig --list [| grep xxx]

  • chkconfig 服务名 --list

  • chkconfig --level 5 服务名 进行各种操作

  • [x] 案例演示:对 network 服务,进行各种操作

chkconfig --level 3 network off
chkconfig --level 3 network on
  • 使用细节

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

systemctl 指令

  • systemctl 管理指令

  • 基本语法:systemctl [ start | stop | restart status ] 服务名

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

  • systemctl 设置服务的自启动服务

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

  • systemctl enable 服务名( 设置服务开机启动 )

  • systemctl disable 服务名 ( 关闭服务开机启动 )

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

  • 应用案例

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

systemctl status firewalld //
systemctl stop firewalld // 关闭防火墙
systemctl start firewalld // 开启防火墙 
  • 细节讨论

  • 关闭或者启用防火墙后,立即生效

  • 这种方式只是临时有效,当重启系统后,还是回归以前对服务的设置

  • 如果希望设置某个服务自启动或关闭永久生效,要使用 systemctl [enble | disable] 服务名.

打开或关闭指定端口

  • 打开或关闭指定端口

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

  • firewall 指令

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

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

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

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

  • 应用案例

  • 启用防火墙,测试 111 端口是否能 telnet

  • 开放 111 端口

​ firewall-cmd –permanent –add-port=111/tcp

  1. 再次关闭 111 端口

​ firewall-cmd –permanent –remove-port=111/tcp

动态监控进程

  • 介绍

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

  • 基本语法

top [ 选项 ]

  • 选项说明

image-20230526153228974

image-20230526153921424

  • 交互操作说明:

image-20230526154042892

  • 应用案例

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

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

u:然后输入 “u” 回车,再输入用户名,即可

案例2:终止指定的进程,比如我们结束 tom 用户

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

k:然后输入 “k” 回车,再输入要结束的进程 ID 号

案例3:指定系统状态更新的时间( 每隔10s自动更新 )

top -d 10

监控网络状态

  • 查看系统网络情况 netstat

  • [x] 基本语法

netstat [ 选项 ]

  • [x] 选项说明

-an 按一定顺序排列输出

-p 显示哪个进程在调用

  • [x] 应用案例

请查看服务名为 ssh 的服务的信息。

netstat -anp | grep sshd
  • 检查主机连接命令ping:

是一种网络检测工具,它主要是用检测远程主机是否正常,或是两部主机间的网线或网卡故障。

如:ping 对方 ip 地址

Linux - RPM 与 YUM

rpm 包的管理

  • 介绍

rpm 用于互联网下载包的打包及安装工具,它包含在某些 LInux 分发版中,它生成具有 ,RPM 扩展名的文件。RPM 是 RedHat Package Manager ( RedHat 软件包管理工具 )的缩写,类似于 windows 的 setup.exe ,这一文件格式名称虽然打上了 RedHat 的标志,但理念是通用的。

Linux 的分发版本都有采用 ( suse, redhat, centos 等等 ),可以算是公认的行业标准了。

  • rpm 包的简单查询指令

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

举例:看看当前系统,是否安装了 firefox

rpm -qa | grep firefox
  • rpm 包名基本格式

一个 rpm 包名:firefox-60.2.2-1.el7.centos.x86_64

名称:firefox

版本号:60.2.2-1

适用操作系统:el7.centos.x86_64

表示 centos7.x 的64位操作系统

如果是 i686、i386 表示32位系统,noarch 表示通用。

  • rpm 包的其它查询指令

rpm -qa:查询所安装的所有 rpm 软件包

rpm -qa | more

rpm -qa | grep XX [ grep -qa | grep firefox ]

rpm -q 软件包名:查询软件包是否安装

案例:rpm -q firefox

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

案例:rpm -wi firefox

rpm -ql 软件包名:查询软件包中的文件

比如:rpm -ql firefox

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

rpm -qf /etc/passwd

rpm -qf /root/install.log

  • 卸载 rpm 包

  • [x] 基本语法:

    rpm -e RPM 包的名称

  • [x] 应用案例

    删除 firefox 软件包

  • [x] 细节讨论

  • 如果其它软件包依赖于您要卸载的软件包,卸载时会产生错误信息

    如:$rpm -e foo

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

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

    如:$rpm -e –nodeps foo

  • 安装 rpm 包

  • [x] 基本语法

rpm -vh RPM 包全路径名称

  • [x] 参数说明

i = install 安装

v = verbose 提示

h = hash 进度条

  • [x] 应用案例

演示卸载和安装 firefox 浏览器

YUM

  • 介绍:

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

  • YUM的基本指令

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

yum list | grep xxx 软件列表

安装指定的 yum 包

yum install xxx 下载安装

  • YUM 应用案例

案例:请使用 yum 的方式来安装 firefox

yum install firefox

Linux - Shell 编程

Shell 是什么?

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

Shell 脚本的执行方式

  • 脚本格式要求

  • 脚本以 #!/bin/bash 开头

  • 脚本需要有可执行权限

  • 编写第一个 Shell 脚本

需求说明:创建一个 Shell 脚本,输出 hello world!

  • 脚本的常用执行方式

  • [x] 方式1:( 输入脚本的绝对路径或相对路径 )

​ 说明:首先要赋予 helloworld.sh 脚本 + x权限,再执行脚本

./hello.sh 或者使用绝对路径 /root/shcode/hello.sh
  • [x] 方式2( sh + 脚本 )

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

​ 比如:sh he

Shell的变量

  • Shell 变量介绍

  • linux Shell 中的变量分为,系统变量和用户自定义变量

  • 系统变量:$HOME $PWD $SHELL $USER等等,比如:echo $HOME 等等

  • 显示当前 shell 中所有变量:set

  • Shell 变量的定义

  • [x] 基本语法

  • 定义变量:变量=值

  • 撤销变量:unset 变量

  • 声明静态变量:readonly 变量,注意:不能 unset

  • [x] 入门

#!/bin/bash
# 案例1:定义变量A
A=100
# 输出变量需要加上 $
echo A=$A
echo "A=$Ai"

# 案例2:撤销变量A
unset A
echo ”A=$A“

# 案例3:声明静态的变量B=2,不能unset
readonly B=2
echo "B=$B"                                                                                 
  • Shell 变量的定义

  • [x] 定义变量的规则

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

  • 等号两侧不能由空格

  • 变量名称一般习惯为大写

  • [x] 将命令的返回值赋给变量

  • A=date反引号,运行里面的指令,并把结果返回给变量A

  • A=$(data) 等价于反引号

#!/bin/bash
# 案例1:定义变量A
A=100
# 输出变量需要加上 $
echo A=$A
echo "A=$Ai"

# 案例2:撤销变量A
unset A
echo ”A=$A“

# 案例3:声明静态的变量B=2,不能unset
readonly B=2
echo "B=$B"