Linux学习之——韩顺平一周学会Linux笔记(进行中)

222 阅读18分钟

linux目录详解

linux 将所有硬件都映射为一个文件,所以在 linux 中一切皆文件

具体的目录结构

  • /bin 【常用】(/usr/bin、/usr/local/bin):是 Binary 的缩写,存放着最常用的命令
  • /sbin(/usr/sbin、/usr/local/sbin):s 即Super User 的意思,存放着系统管理员使用的系统管理程序
  • /home【常用】:存放着普通用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录是以用户的账号命名
  • /root【常用】:为系统管理员,也称为超级权限者的用户主目录
  • /lib:系统开机所需要的最基本的动态连接共享库,其作用类似于 Windows 中的 DLL 文件。几乎所有的应用程序都需要用到这些共享库
  • /lost+found:这个目录通常是空的,当系统非法关机后,这里会存放一些文件
  • /etc【常用】:系统管理所需要的配置文件和子目录,比如安装mysql 数据库 my.conf
  • /usr【常用】:用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录
  • /boot【常用】:存放的是启动 Linux 时使用的一些核心文件,包括一些链接文件以及镜像文件
  • /proc【不能动】:是一个虚拟目录,它是系统内存的映射,访问这个目录来获取系统信息
  • /srv【不能动】:service 的缩写,存放一些服务启动后需要提取的数据
  • /sys 【不能动】:linux2.6 内核一个很大的变化,该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs =>
  • /tmp:用来存放一些临时文件
  • /dev:类似于 windows 的设备管理器,把所有的硬件用文件的形式存储
  • /media【常用】:linux 系统会自动识别一些设备,例如 U 盘、光驱等,当识别后,linux 会把识别的设备挂载到这个目录下
  • /mnt【常用】:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里面的内容了。d:/myshare
  • /opt:这是给主机额外安装软件所存放的目录。如安装 ORACLE 数据库就可放到该目录下。默认为空。
  • /usr/local【常用】:软件安装的目标目录,一般是通过编译源码方式安装的程序。
  • /var【常用】:这个目录存放着在不断扩充着的东西,习惯将经常被修改的文件放在这个目录下。包括各种日志文件。
  • /selinux 【security-enhanced linux】:SELinux 是一种安全子系统,它能控制程序只能访问特定文件,有三种工作模式,可自行设置。

远程登录到 Linux

xshell

远程传输文件

XFTP

vi和vim编辑器

Linux 系统会内置 vi 文本编辑器 VIm 具有程序编辑的能力,可以看作是 Vi 的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补完,编译及错误跳转等方便编程的功能。

vi和vim常用的三种模式

  • 正常模式:以 vim 打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中,可以使用 上下左右 键来移动光标,可以使用 删除字符 或 删除整行 来处理档案内容,也可以使用 复制 粘贴 来处理文件数据
  • 插入模式:按下 i,I,o,O,a,A,r,R 等任何一个字母后才会进入编辑模式,一般来说按 i 即可
  • 命令行模式:在这个模式中,可以提供相关指令,完成读取、存盘、替换、离开 vim、显示行号等动作。wq 写入并退出 ![[Pasted image 20240222211225.png]]

vi和vim快捷键

  1. 拷贝当前行 yy,拷贝当前行向下 5 行 5yy,并粘贴 p。
  2. 删除当前行 dd,删除当前行向下的 5 行 5dd
  3. 设置文件的行号,取消文件的行号 .[命令行下:set nu 和 :set nonu]
  4. 在文件中查找某个单词【命令行下/关键字,回车 查找,输入 n 就是查找下一个】
  5. 编辑/etc/profile 文件,使用快捷键到该文档的最末行[G]和最首行[gg]
  6. 在一个文件中输入"hello",然后使用 u 撤销这个动作(一般模式下)
  7. 编辑/etc/profile 文件,并将光标移动到 20 行,输入 20shift + g(一般模式下)

开机、重启和用户的登录注销

基本介绍

  • shutdown -h now:立刻进行关机 (h 代表 halt )
  • shutdown -h 1:一分钟后关机(r 代表 reboot )
  • shutdown -r now:立刻重启计算机
  • halt:关机,作用和上面一样
  • reboot:立刻重启计算机
  • sync:把内存的数据同步到磁盘

注意细节:

  1. 不管是重启还是关闭系统,首先要运行sync命令,把内存中的数据写到磁盘中
  2. 目前的 shutdown/reboot/halt 等命令均已经在关机前进行了 sync
  • 登录时尽量少用root账号登录,因为它是系统管理员,最大的权限,避免操作失误。可以利用普通用户登录,登录后再用 'su - 用户名' 命令来切换成系统管理员身份
  • 在提示符下输入 logout 即可注销用户

使用细节:

  1. logout 注销指令再图形运行级别无效,在运行级别3下有效
  2. 运行级别这个概念,后面讲到

用户管理

基本介绍

Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统

添加用户

  1. 基本语法 useradd 用户名
  2. 细节说明
    1. 当创建用户成功后,会自动创建和用户名相同的home目录,默认再 /home 目录下
    2. 也可以通过 ’useradd -d 指定目录 新的用户名’,给新创建的用户指定home目录,如 useradd -d /home/test king

指定/修改密码

  1. 基本语法:passwd 用户名,不指定用户名则是给当前用户设置密码

删除用户

  1. 基本语法:userdel 用户名
  2. 应用案例:
    1. 删除用户,但保留其home目录userdel 用户名
    2. 删除用户以及其home目录userdel -r 用户名
  3. 一般情况下建议保留用户的home目录

查询用户信息

  1. 基本语法:id 用户名
  2. 应用实例:查询 root 的信息

切换用户

  1. 介绍:在Linux中,如果当前用户的权限不够,可以通过 su - 指令,切换到高权限用户。
  2. 基本语法:su - 用户名
  3. 应用实例:创建一个用户jack,指定密码,然后切换到jack
  4. 细节说明
    1. 从权限高的用户切换到权限低的用户,不需要输入密码,反之需要。
    2. 当需要返回原来用户时,使用 exit/logout 指令

查询当前用户/登录用户

  1. 基本语法:whoami

用户组

  1. 介绍:类似于角色,系统可以对有共性/权限的多个用户进行统一管理
  2. 新增组:groupadd 组名
  3. 删除组:groupdel 组名
  4. 增加用户时添加到某个组:useradd -g 用户组 用户名
  5. 新增用户未制定组,会默认创建与用户名相同的组,并将用户指定到该组
  6. 修改用户的组:usermod -g 用户组 用户名
  7. 用户和组相关的文件:
    1. /etc/passwd文件:
      1. 用户(user)的配置文件,记录用户的各种信息
      2. 每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell(命令解释器,如bash,tcsh,csh等)
    2. /etc/shadow文件
      1. 口令的配置文件
      2. 每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:时效时间:标志
    3. /etc/group文件
      1. 组(group)的配置文件,记录Linux包含的组的信息
      2. 每行含义:组名:口令:组标识号:组内用户列表

指定运行级别

  1. 基本介绍
    1. 运行级别说明:
      1. 0:关机
      2. 1:单用户【找回丢失密码】
      3. 2:多用户状态没有网络服务
      4. 3:多用户状态有网络服务
      5. 4:系统未使用保留给用户
      6. 5:图形界面
      7. 6:系统重启
    2. 常用的运行级别是3和5,也可以指定默认运行级别
  2. 应用实例:
    1. 命令:init [0123456]
    2. 应用案例:通过init来切换不同的运行即便,比如5-3,然后关机
  3. 指定默认运行级别:
    1. centos 7之前,在/etc/inittab文件中进行修改;
    2. centos7之后进行了简化:
      1. muti-user.target: analogous to runlevel 3
      2. graphical.target: analogous to runlevel 5
      3. 查看当前运行级别:systemctl get-default
      4. 设置默认运行级别:systemctl set-default TARGET.target

找回root密码

centos 中:

  1. 首先,启动系统,进入开机界面,在界面中按“e”进入编辑界面;
  2. 进入编辑界面,使用键盘的上下键把光标往下移动,找到以"Linux16"开头所在的行数,在行的最后输入:int=/bin/sh
  3. 然后 ctrl + x 进入单用户模式;
  4. 接着,在光标闪烁的位置输入:mount -o remount,rw /(注意:各个单词间有空格),完成后按键盘的回车键
  5. 在新的一行最后面输入:passwd,完成后按键盘的回车键。输入密码,然后再次确认密码即可(密码长度最好是 8 位以上,但不是必须的),密码修改成功后,会显示 passwd......的样式,说明密码修改成功;
  6. 接着,在鼠标闪烁的位置中(最后一行)输入:touch / .autorelabel(注意:touch 与 / 后面有一个空格),完成后按键盘的回车键;
  7. 继续在光标闪烁的位置中,输入:exec /sbin/init(注意:exec 与 / 中间有一个空格),完成后按键盘的回车键,等待系统自动修改密码(时间较长),完成后,系统会自动重启,新的密码就生效了。 设置运行级别,Linux 进行后,直接进入到命令行终端(3)

帮助命令

  1. man 获取帮助信息: man [命令或配置文件]
  2. help 指令:help 命令(功能描述:获取 shell 内置命令的帮助信息)

文件目录类

  1. pwd 指令:显示当前工作目录的绝对路径
  2. ls 指令
    1. -a:显示当前目录所有的文件和目录,包括隐藏的
    2. -l:以列表的方式显示信息
    3. -lh:显示更加人性化,如单位转换为M,K,G
  3. cd 指令:切换到指定目录
    1. cd [参数]
      1. cd ~ 或者 cd : 回到自己的 home 目录
      2. cd .. 回到当前目录的上一级目录
  4. mkdir 指令:mkdir [选项]创建目录
    1. 常用选项:-p 创建多级目录
    2. 案例:
      1. 创建一个目录 /home/dog
      2. 创建多级目录 /home/animal/tiger(mkdir -p)
  5. rmdir 指令:rmdir [选项]
    1. 细节:rmdir 删除的是空目录,如果目录下有内容时无法删除
    2. 如果要删除非空目录,需要使用 rm -rf
  6. touch 指令:touch 文件名创建空文件
  7. cp 指令:cp [选项] source dest(source代表拷贝哪个文件,dest表示文件拷贝到哪)拷贝文件到指定目录
    1. 常用选项:-r:递归复制整个文件夹
    2. 强制覆盖不提示的方法:\cp,如:\cp -r /home/bbb /opt
  8. rm 指令:rm [选项] 要删除的文件或目录移除文件或目录
    1. 常用选项:
      1. -r:递归删除整个文件夹
      2. -f:强制删除
  9. mv 指令:移动文件/目录或重命名
    1. 基本语法:
      1. 重命名:mv oldNameFile newNameFile
      2. 移动文件:mv /temp/movefile/targetFolder
  10. cat 指令:cat [选项] 文件名,查看文件内容
    1. 常用选项:-n:显示行号
    2. 使用细节:cat 只能浏览文件,不能修改文件,为了浏览方便,一般会带上管道符号 | more; 如:cat -n /etc/profile | more
  11. more 指令:more [文件名]一个基于VI编辑器的文本过滤器,以全屏的方式按页显示文本文件的内容。more指令中内置了若干快捷键
    1. 快捷键
      1. 空格(space):下翻一页
      2. Enter:下翻一行
      3. q:立即离开more,不再显示该文件内容
      4. Ctrl + F:向下滚动一屏
      5. Ctrl + B:返回上一屏
      6. =:输出当前行的行号
      7. :f:输出文件名和当前行的行号
  12. less 指令:less 文件名分屏查看文件内容,与more类似,但是比more更加强大,支持各种显示终端,less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率
    1. 快捷键:
      1. 空格:向下翻动一页
      2. pagedown,向下翻动一页
      3. pageup,向上翻动一页
      4. /字串:向下搜寻【字串】的功能;n:向下查找;N:向上查找
      5. ?字串:向上搜寻【字串】的功能;n:向上查找;N:向下查找
      6. q:退出
  13. echo 指令:echo [选项] [输出内容]输出内容到控制台
    1. 案例 1:使用 echo 指令输出环境变量
      1. echo $HOSTNAME:输出主机名
      2. echo $PATH:输出环境变量
    2. 案例 2:使用 echo 指令输出 hello,world!
  14. head 指令:用于显示文件开头部分内容,默认 情况下 head 指令显示文件的前 10 行内容
    1. 基本语法:
      1. head 文件:查看文件前 10 行内容
      2. head -n 5 文件:查看文件前 5 行内容
  15. tail 指令:用于输出文件中尾部的内容,默认显示文件最后 10 行的内容
    1. 基本语法:
      1. tail 文件:查看文件尾10 行的内容
      2. tail -n 5 文件:查看文件尾5 行的内容
      3. tail -f 文件:实时最粽该文档的所有更新
  16. > 指令和 >> 指令:输出重定向,覆盖和追加
    1. 基本语法:
      1. ls -l > 文件:列表的内容写入文件中(覆盖写),如果文件不存在则自动创建
      2. ls -al >> 文件:列表的内容追加到文件的末尾
      3. cat 文件 1 > 文件 2:将文件 1 的内容覆盖到文件 2
      4. echo "内容" >> 文件:追加
  17. ln 指令:软连接也成为符号链接,类似于windows中的快捷方式,主要存放了链接其他文件的路径
    1. 基本语法:ln -s [原文件或目录] [软连接名]给原文件创建一个软连接
    2. 应用实例:
      1. 在/home目录下创建一个软连接myroot,链接到/root目录:ln -s /root /home/myroot
      2. 删除软连接myroot:rm myroot
    3. 细节说明:当我们使用pwd指令查看目录时,仍然看到的是软连接所在目录
  18. history 查看已经执行过的指令
    1. 应用实例:
      1. 显示所有历史命令:history
      2. 显示最近使用过的10个命令:history 10
      3. 执行历史编号为5的指令:!5

时间日期类

  1. date:显示当前日期
    1. 基本语法:
      1. date:显示当前时间
      2. date +%Y:显示当前年份
      3. date +%m:显示当前月份
      4. date +%d:显示当前是哪一天
      5. date "+%Y-%m-%d %H:%M:%S":显示年月日时分秒
    2. 设置系统当前日期:date -s 字符串时间,如date -s 2024-03-07 17:13:10
  2. calcal [选项]查看日历,不加选项显示本月日历;cal 2020显示2020年日历

搜索查找类

  1. find:从指定目录向下递归遍历其各个子目录,将满足条件的文件或目录显示在终端
    1. 基本语法: find [搜索范围] [选项]
    2. 选项说明:
      1. -name:按照指定的文件名查找模式查找文件
      2. -user:查找属于指定用户名的所有文件
      3. -size:按照指定的文件大小查找文件
    3. 应用案例:
      1. 按文件名:根据名称查找 /home 目录下的 hello.txt 文件find /home -name hello.txt
      2. 按拥有者:查找 /opt 目录下,用户名称为 nobody 的文件find /opt -user nobody,如果过多,分页显示:find /opt -user root | more
      3. 查找整个 Linux 系统下大于 200M 的文件(+n大于 -n小于 n等于)(单位:k,M,G)find / -size +200M
  2. locate:快速定位文件路径。利用事先建立的系统中所有文件名称及路径的 locate 数据库实现快速定位给定的文件。locate 指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新 locate 时刻。
    1. 基本语法:locate 搜索文件
    2. 特别说明:由于 locate 指令给予数据库进行查询,所以第一次运行前,必须使用 updatedb 指令创建 locate 数据库
    3. 应用实例:使用 locate 指令快速定位 hello.txt 文件所在目录
  3. which:查看某个指令在哪个目录下,如:which ls查看 ls 指令存放在哪个目录
  4. grep指令和管道符 | :grep 过滤查找,管道符表示将前一个命令的处理结果输出传递给后面的命令处理
    1. 基本语法:grep [选项] 查找内容 源文件
    2. 常用选项:-n显示匹配行及行号;-i忽略字母大小写
    3. 应用实例:在 hello.txt 文件中,查找 yes 所在行,并显示行号
      1. cat /home/hello.txt | grep -n "yes"
      2. grep -n "yes" /home/hello.txt

压缩和加压类

  1. gzip/gunzip 指令:gzip 用于压缩文件;gunzip 用于解压
    1. 基本语法:
      1. gzip 文件:压缩文件,只能将文件压缩位 *.gz文件
      2. gunzip 文件.zp:解压缩文件命令
    2. 应用实例:
      1. 将/home 下的 hello.txt 文件进行压缩
      2. 将/home 下的 hello.txt.gz 文件进行解压缩
  2. zip/unzip 指令:zip 用于压缩文件,unzip 用于解压,在项目打包发布中很有用
    1. 基本语法:
      1. zip [选项] xxx.zip 文件/目录:压缩文件或目录
      2. unzip [选项] xxx.zip:解压缩文件,默认解压到当前目录
      3. zip 常用选项:-r递归压缩,即压缩目录
      4. unzip 常用选项:-d指定解压后文件的存放目录
    2. 应用实例:
      1. 将/home 下的所有文件进行压缩成 myhome.zip:`zip -r myhome.zip /home/
      2. 将 myhome.zip 解压到 /opt/tmp 目录下:unzip -d /opt/tmp myhome.zip
  3. tar 指令:打包指令,打包后的文件是 .tar.gz 文件
    1. 基本语法: tar [选项] xxx.tar.gz 文件/目录:打包目录,压缩后的文件格式是 .tar.gz
    2. 选项说明:
      1. -c:产生.tar 打包文件
      2. -v:显示详细信息
      3. -f:指定压缩后的文件名
      4. -z:打包同时压缩
      5. -x:解包 .tar 文件
    3. 应用实例:
      1. 压缩多个文件,将 /home/pig.txt 和 /home/cat.txt 压缩成 pc.tar.gz:tar -zcvf pc.tar.gz /home/pig.txt /home/cat/txt
      2. 将 /home 文件夹压缩成 myhome.tar.gz:tar -zcvf myhome.tar.gz /home/
      3. 将 pc.tar.gz 解压到当前目录,切换到 /opt/:tar -zxvf pc.tar.gz
      4. 将 myhome.tar.gz 解压到 /opt/tmp2 目录下:mkdir /opt/tem2 tar -zxvf /home/myhome.tar.gz -C /opt/tmp2

组管理和权限管理

  1. 组的基本介绍:在Linux中,每个用户必须属于一个组,不能独立于组外。Linux中的每个文件都有所有者、所在组、其他组的概念。
    1. 所有者
    2. 所在组
    3. 其他组
    4. 改变用户所在的组
  2. 文件/目录 所有者:一般为文件的创建者,创建文件的人,自然就成了该文件的所有者
    1. 查看文件的所有者:ls -ahl
    2. 修改文件的所有者:chown 用户名 文件名
  3. 创建组
    1. 基本指令:groupadd 组名
    2. 应用实例:
      1. 创建一个组,monster:groupadd monster
      2. 创建一个用户fox,并放入到monster组中:useradd -g monster fox
  4. 文件/目录 所在组:当某个用户创建了一个文件后,这个文件所在组就是该用户所在的组。
    1. 查看文件/目录所在组:ls -ahl
    2. 修改文件/目录所在组:chgrp 组名 文件名
      1. 应用实例:使用root用户创建orange.txt,查看文件所在组,然后将这个文件所在组更改到 fruit 组:chgrp fruit orange.txt
  5. 其他组:除文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组。
  6. 改变用户所在组:在添加用户时,可以指定用户的所在组,用root的管理权限可以改变某个用户的所在组。
    1. 改变用户所在组:
      1. usermod -g 新组名 用户名
      2. usermod -d 目录名 用户名:改变用户登陆的初始目录;注意:用户需要有进入到新目录的权限。
    2. 应用实例:将zwj这个用户从原来所在组修改到wudang组。
      1. cat /etc/group | grep wudang:查看是否有wudang组
  7. 权限的基本介绍:ls -l中显示的内容为:-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc
    1. 0-9位说明:
      1. 第0位,确定文件类型(d,-,l,c,b)
        1. l:链接,相当于windows的快捷方式
        2. d:目录,相当于windows的文件夹
        3. c:字符设备文件,如鼠标、键盘
        4. b:块设备,如硬盘
      2. 1-3位:所有者User的权限
      3. 4-6位:用户组Group的权限
      4. 7-9位:其他组Other的权限
    2. 其他说明:
      1. 1:文件:文件硬链接数;目录:子目录数+文件数
      2. root:用户
      3. root:组
      4. 1213:文件大小(字节),如果是文件夹,显示4096字节
      5. Feb 2 02:39:最后修改时间
      6. abc:文件名
  8. rwx权限详解:可用数字表示:r=4,w=2,x=1,因此rwx=4+2+1=7
    1. rwx作用到文件
      1. r:read,读取查看
      2. w:write,可以修改,但不代表可以删除,删除一个文件的前提是对文件所在的目录有写权限
      3. x:execute,可执行
    2. rwx作用到目录
      1. r:可读,即可ls查看目录内容
      2. w:可写,可在目录内创建+删除+重命名目录
      3. x:可执行,即可进入该目录
  9. 修改权限:chmod
    1. 第一种方式:+、-、=变更权限;u:所有者,g:所在组,o:其他人,a:所有人
      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
      5. 案例2:给abc文件的所有者去除执行的权限,增加组写的权限 chmod u-x,g+w abc
      6. 案例3:给abc文件的所有用户添加读的权限 chmod a+r abc
    2. 第二种方式,通过数字变更权限:r=4,w=2,x=1;rwx=4+2+1=7
      1. chmod u=rex,g=rx,o=x 文件/目录相当于chmod 752 文件/目录
      2. 案例:将/home/abc.txt 文件的权限修改为 rwxr-xr-x,使用数字的方式实现:chmod 755 /home/abc.txt
  10. 修改文件所有者:chown
    1. 基本介绍:
      1. chown newowner 文件/目录:改变所有者
      2. chown newowner:newgroup 文件/目录:改变所有者和所在组
      3. -R:如果是目录,则使其下所有子文件/目录递归生效
    2. 案例:
      1. 将/home/abc.txt文件的所有者修改成tom:chown tom /home/abc.txt
      2. 将/home/kkk目录下所有的文件和目录的所有者改成tom:chmod -R tom /home/kkk
  11. 修改文件所在组:chgrp
    1. chgrp newgroup 文件/目录
    2. 案例:
      1. 将/home/abc.txt文件的所在组修改为shaolin:groupadd shaolinchgrp shaolin /home/abc.txt
      2. 将/home/kkk目录下所有的文件和目录所在组修改为shaolin:chgrp -R shaolin /home/kkk
  12. 权限管理实践
    1. 警匪游戏:
      1. 组:police,bandit(土匪);jack,jerry:警察;xh,xq:土匪
      2. 创建组:groupadd policegroupadd bandit
      3. 创建用户:useradd -g police jackuseradd -g police jerryuseradd -g bandit xhuseradd -g bandit xq
      4. jack创建一个文件,自己可以读写,本组人可以读,其他组人没有任何权限:vim jack.txtchmod 640 jack.txt
      5. jack修改该文件,让其他组人可以读,本组人可以读写:chmod 644 jack.txt或者chmod o=r,g=r
      6. xh投靠警察,看看是否可以读写:usermod -g police xh,不可以,因为没有jack目录的权限,因此并不能访问到jack下的jack.txt
    2. 西游
      1. 建立两个组(神仙sx,妖怪yg)
      2. 建立四个用户(唐僧,悟空,八戒,沙僧)
      3. 设置密码
      4. 把悟空,八戒放入妖怪组,沙僧,唐僧放入神仙组
      5. 用悟空建立一个文件(monkey.java,该文件要输出I am monkey)
      6. 给八戒一个可以 r w的权限
      7. 八戒修改monkey.java加入一句话(I am pig)
      8. 唐僧沙僧对该文件没有权限
      9. 把沙僧放入妖怪组
      10. 让沙僧修改该文件,加入一句话(“我是沙僧,我是妖怪!”)
    3. 对于目录来说, rwx 分别代表什么
      1. w:在目录中创建、删除文件/目录
      2. r:在目录中列出(ls)其中的文件/目录
      3. x:进入(cd)

crond任务调度

  1. crontab 进行定时任务的设置
    1. 概念:任务调度指系统在某个时间执行特定的命令或程序。
    2. 任务调度分类:
      1. 系统工作:一些重要的工作必须周而复始的执行,如病毒扫描等
      2. 个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份
    3. 基本语法:crontab [选项]
    4. 常用选项:
      1. -e:edit 编辑crontab定时任务
      2. -l:list 查询crontab任务
      3. -r:remove 删除当前用户所有的crontab任务
    5. 快速入门:设置任务调度文件:/etc/crontab;设置个人任务调度。执行crontab -e命令;接着输入任务到调度文件
      1. 如:*/1 * * * * ls -l /etc/ > /tmp/to.txt:每小时的每分钟执行 ls -l /etc/ > tmp/to.txt命令
    6. 参数细节说明,5个占位符的说明
      1. 第一个*:一小时当中的第几分钟;范围:0-59
      2. 第二个*:一天当中的第几小时;范围:0-23
      3. 第三个*:一个月当中的第几天:范围:1-31
      4. 第四个*:一年当中的第几月:范围:1-12;
      5. 第五个*:一周当中的星期几;范围:0-7(0和7都代表星期日)
    7. 特定时间执行任务案例
      1. 45 22 * * * 命令:在22点45分执行命令
      2. 0 17 * * 1 命令:每周1的17点0分执行命令
      3. 0 5 1,15 * * 命令:每月1和15号的凌晨5点0分执行命令
      4. 40 4 * * 1-5 命令:每周一到周五陵城4点40分执行命令
      5. */10 4 * * * 命令:每天的凌晨4点,每隔10分钟执行一次命令
      6. 0 0 1,15 * 1 命令:每月1号和15号,每周一的0点0分执行命令。注意:星期几和几号最好不要同时出现,因为他们定义的都是天,非常容易让管理员困惑
    8. 应用实例
      1. 案例1:每隔1分钟,将当前的日期信息追加到/tmp/mydate文件中:*/1 * * * * date >> /tmp/mydate
      2. 案例2:每隔1分钟,将当前日期和日历都追缴到/home/mycal文件中
        1. 写脚本my.sh:vim /home/my.sh;脚本内容:date >> /home/mycalcal >> /home/mycal
        2. 给my.sh增加执行权限:chmod u+x /home/my.sh
        3. crontab -e,添加定时任务1/* * * * * /home/my.sh
      3. 案例3:每天凌晨2:00将mysql数据库testdb,备份到文件中。提示:命令为mysqldump -u root -p密码 数据库 >> /home/db.bak
        1. crontab -e
        2. 0 2 * * * mysqldump -u root -proot testdb >> /home/db.bak
    9. crond相关指令
      1. crontab -r:终止任务调度
      2. crontab -l:列出当前有哪些任务调度
      3. service crond restart:重启任务调度crond
      4. select-editor:切换crontab默认编辑器

at定时任务

  1. 基本介绍
    1. at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行
    2. 默认情况下,atd守护进程每60秒检查一次任务队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业
    3. at命令是一次性定时计划任务,执行完一个任务后就不再执行此任务了
    4. 在使用at命令的时候,一定要保证atd进程的启动,可以使用相关指令来查看
    5. ps -ef | grep atd:检查atd进程是否在运行
  2. at命令格式:at [选项] [时间] Ctrl + D 结束at命令的输入
  3. at命令选项:
    1. -m:当指定的任务被完成后,将给用户发送邮件,即使没有标准输出
    2. -I:atq的别名,查询
    3. -d:atrm的别名,删除
    4. -v:显示任务将被执行的时间
    5. -c:打印任务的内容到标准输出
    6. -V:显示版本信息
    7. -q <队列>:使用指定的队列
    8. -f <文件>:从指定文件读入任务而不是从标准输入读入
    9. -t <时间参数>:以时间参数的形式提交要运行的任务
  4. at时间定义,指定时间的方式
    1. 接受在当天的hh:mm(小时:分钟)式的时间指定。加入该时间已过去,则放在第二天执行,如:04:00
    2. 使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间
    3. 采用12小时计时制,即在时间后面加上AM或PM来说明还上午还是下午。如:12pm
    4. 指定命令执行的具体日期,指定格式为month day(月 日)或者mm/dd/yy(月/日/年),或dd.mm.yy(日月年),指定的日期必须跟在指定时间的后面,如:04:00 2031-03-01
    5. 使用相对计时法。指定格式为:now + count time-units,now即当前时间,time-units是时间单位,可以还minutes、hours、days、weeks。count是时间的数量,如:now + 5 minutes
    6. 直接使用today、tomorrow来指定完成命令的时间
  5. 应用实例:
    1. 案例1:2天后下午5点执行/bin/ls /home:at 5pm + 2days回车/bin/ls /homectrl + D 退出
    2. 案例2:atq命令来查看系统中没有指定的工作内容:atq
    3. 案例3:明天17点,输出时间到指定文件内,如/root/date100.log:at 5pm tomorrow 回车 date > /root/date100.log
    4. 案例4:2分钟后,输出时间到指定文件内,如/root/date200.log:at now + 2 minutes 回车 date > /root/date200.log
    5. 案例5:删除已经设置的任务,atrm 编号

Linux磁盘分区、挂载

lsblk:<list block>查看分区挂载情况 ![[Pasted image 20240314160754.png]] lsblk -f ![[Pasted image 20240314161032.png]]

  1. 原理介绍
    1. 对于Linux来说,无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux 中每个分区都是用来组成整个文件系统的一部分的。
    2. Linux 采用一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且讲一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。
  2. 硬盘说明
    1. Linux硬盘分为IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘
    2. 对于IDE硬盘,驱动器标识符为“hdx~”,其中"hd"表明分区所在设备的类型,这里是指IDE硬盘。"x"为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),"~"代表分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。如:hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。
    3. 对于SCSI硬盘,则表示为"sdx~",SCSI硬盘是用"sd"来区分所在设备的类型的,其余和IDE硬盘的表示方法一样。
  3. 挂载的经典案例
    1. 说明:以增加一块硬盘为例,熟悉磁盘的相关指令,深入理解磁盘分区、挂载、卸载的概念。
    2. 如何增加一块硬盘
      1. 虚拟机添加硬盘:在【虚拟机】菜单中,选择【设置】,然后设备列表添加硬盘,然后一路【下一步】,中间只有选择磁盘大小的地方才需要修改,直至完成。然后重启系统(才能识别)![[Pasted image 20240314162140.png]]
      2. 分区:
        1. 命令:fdisk /dev/sdb
        2. 开始对/sdb分区:
          1. m:显示命令列表
          2. p:显示磁盘分区,同fdisk l
          3. n:新增分区
          4. d:删除分区
          5. w:写入并退出
          6. 说明:开始分区后输入n,新增分区,然后选择p,分区类型为主分区。两次回车默认剩余全部空间。最后输入w写入分区并退出,若不保存退出输入q。![[Pasted image 20240314164113.png]]
      3. 格式化:mkfs -t ext4 /dev/sdb1,其中ext4是分区类型
      4. 挂载:将一个分区与一个目录联系起来mkdir /newdiskmount /dev/sdb1 /newdisk/
        1. 卸载:umount /dev/sdb1 或者 umount /newdisk
        2. 注意:用命令行挂载。重启挂载关系会失效。
      5. 永久挂载:通过修改 /etc/fstab 实现,添加完成后,执行 mount -a即刻生效
        1. vim /etc/fstab![[Pasted image 20240314180730.png]]
        2. 写入:/dev/sdb1 /newdisk ext4 defaults 0 0![[Pasted image 20240314180936.png]]
        3. 保存退出,这样挂载关系就会一直存在
  4. 磁盘情况查询:
    1. 查询系统整体磁盘使用情况:df -h![[Pasted image 20240315143043.png]]
    2. 查询指定目录的磁盘占用情况:du -h /目录,默认为当前目录
      1. -s:指定目录占用大小汇总
      2. -h:带计量单位
      3. -a:含文件
      4. --max-depth=1 子目录深度
      5. -c:列出明细的同时,增加汇总值
      6. 应用实例:查询/opt目录的磁盘占用情况,深度为1:du -h --max-depth=1 /opt
  5. 磁盘情况——工作实用指令
    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 /home,没有tree,则使用yum install tree安装,unbantu使用apt install tree

网络配置

  1. 网络配置原理图![[Pasted image 20240315162732.png]]
  2. 查看网络IP和网关
    1. 查看虚拟网络编辑器和修改IP地址
    2. 查看Windows环境中的VMnet8网络配置ipconfig![[Pasted image 20240315170404.png]]
    3. 查看Linux的网络配置ifconfig![[Pasted image 20240315170447.png]]
    4. ping测试主机之间网络连通性:ping 目的主机,测试当前服务器是否可以连接目的主机
    5. Linux网络环境配置
      1. 第一种方法——自动获取:登录后,通过界面来设置自动获取IP。特点:Linux启动后互自动获取IP,缺点是每次自动获取的IP地址可能不一样。
      2. 第二种方法:指定IP
        1. 说明:直接修改配置文件来指定IP,并可以连接到外网(程序员推荐)。
        2. 编辑 vi /etc/sysconfig/network-scripts/ifcfg-ens33
        3. 要求:将IP地址配置为静态的。如:IP地址为 192.168.200.130
        4. ifcfg-ens33 文件说明:![[Pasted image 20240315173459.png]]
        5. 重启网络服务或重启系统生效:service network restart reboot
  3. 设置主机名和hosts映射
    1. 设置主机名
      1. 为了方便记忆,可以给Linux系统设置主机名,也可以根据需要修改主机名
      2. 指令:hostname查看主机名
      3. 修改文件在 /etc/hostname 指定
      4. 修改后,重启生效
    2. 设置hosts映射:如何通过主机名能找到(比如ping)某个Linux系统
      1. Windows:在C:\windows\system32\drivers\hosts文件指定即可。案例:192.168.200.130 hspedu100
      2. Linux:在 /etc/hosts 文件指定。案例:192.168.200.1 ThinkPad-PC
  4. 主机名解析过程分析
    1. hosts是什么:一个文本文件,用来记录IP和Hostname(主机名)的映射关系
    2. DNS:即Domain Name System的缩写,即域名系统;是互联网上作为域名和IP地址相互映射的一个分布式数据库。
    3. 应用实例:用户在浏览器输入www.baidu.com
      1. 浏览器先检查浏览器缓存中有没有该域名解析IP地址,有则调用这个IP完成解析;没有则检查操作系统DNS解析器缓存,有则返回IP完成解析。这两个缓存都为本地缓存。
      2. 一般来说,当电脑第一次成功访问某一网站后,在一定时间内,浏览器或操作系统会缓存它的IP地址(DNS解析记录)如,在cmd窗口输入:
        1. ipconfig /displaydns //DNS域名解析缓存;
        2. ipconfig /flushdns //手动清理DNS缓存
      3. 如果本地解析器缓存没有找到对应映射,检查系统中hosts文件中有没有配置对应的域名IP映射。如果有,则完成解析并返回。
      4. 如果hosts文件中也没有找到对应IP,则到域名服务DNS进行解析域名。

进程管理

  1. 基本介绍
    1. 在Linux中,每个执行的程序都成为一个进程。每一个进程都分配一个ID号(pid,进程号)。程序run起来,加载到内存就成为了一个进程。
    2. 每个进程都可能以两种方式存在。前台与后台。
      1. 前台进程就是用户目前屏幕上可以进行操作的。
      2. 后台进程则是实际在操作,但屏幕上无法看到的进程,通常使用后台方式执行。
    3. 一般系统的服务都是以后台进程的方式存在,而且都回常驻在系统中。直到关机才结束。
  2. 显示系统执行的进程
    1. 基本介绍:ps 命令用来查看目前系统中,有哪些正在执行的进程,以及它们的执行情况。可以不加任何参数
    2. ps命令选项
      1. ps -a:显示当前终端的所有进程信息
      2. ps -u:以用户的格式显示进程信息
      3. ps -x:显示后台进程运行的参数
      4. 通常结合使用:ps -aux
    3. ps 详解
      1. 指令:ps -aux | grep xxx,比如查看有没有sshd服务
      2. 指令说明:
        1. System V 展示风格
        2. USER:用户名
        3. PID:进程号
        4. %CPU:进程占用CPU的百分比
        5. %MEM:进程占用物理内存的百分比
        6. VSZ:进程占用虚拟内存的大小(单位KB)
        7. RSS:进程占用物理内存的大小(单位KB)
        8. TTY:终端名称,缩写 .
        9. STAT:进程状态。
          1. S-睡眠;
          2. s-表示该进程是会话的先导进程;
          3. N-表示进程拥有比普通优先级更低的优先级;
          4. R-正在运行;
          5. D-短期等待;
          6. Z-僵死进程;
          7. T-被跟踪或者被停止;等等
        10. START:启动时间
        11. TIME:CPU时间,即进程使用CPU的总时间
        12. COMMAND:启动进程所用的命令和参数,如果过长会被截断显示
    4. 应用实例
      1. 要求:以全格式显示当前所有进程,查看进程的父进程
      2. ps -ef:以全格式显示当前所有进程;-e:显示所有进程;-f:全格式
      3. ps -ef | grep sshd
      4. PPID:父进程![[Pasted image 20240319155557.png]]
  3. 终止进程:若某个进程执行一半需要终止,或已经消耗了很大的系统资源时,此时就可以考虑停止该进程。使用kill命令来完成此项任务。
    1. 基本语法:
      1. kill [选项] 进程号:通过进程号杀死进程
      2. killall 进程名称:通过进程名称杀死进程,也支持通配符,在系统负载过大而变得很慢的时候有用
    2. 常用选项:-9:强迫进程立即停止
    3. 最佳实践:
      1. 踢掉某个非法登录用户:如:kill 11421
      2. 终止远程登录sshd,在适当时候再次重启sshd服务:kill sshd/bin/systemctl start sshd.service
      3. 终止多个gedit:killall gedit
      4. 强制杀掉一个终端:如:kill -9 10487
  4. 查看进程树
    1. 基本语法:pstree [选项],可以更加直观的查看进程信息
    2. 常用选项:
      1. -p:显示进程的PID
      2. -u:显示进程的所属用户
    3. 应用案例:
      1. 以树状的形式显示进程的pid
      2. 以树状的形式显示进程的用户id
  5. 服务管理
    1. 介绍:服务(service)本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其他程序的请求,比如mysqld、sshd、防火墙等,因此又称为守护进程,是Linux中非常重要的知识点。
    2. service管理指令
      1. service 服务名 [start | stop | restart | reload |status]
      2. 在CentOS 7.0之后,很多服务不再使用service,而是 systemctl
      3. service 指令管理的服务在 /etc/init.d 查看![[Pasted image 20240319165820.png]]
    3. service 管理指令案例:使用 service 指令,查看,关闭,启动 network 【注意:在虚拟系统演示,因为网络连接会关闭
    4. 查看服务名:
      1. 方式1:使用 setup -> 系统服务:可以看到全部
      2. 方式2:ls -l /etc/init.d /etc/init.d 看到 service 指令管理的服务
    5. 服务的运行级别(runlevel):
      1. Linux有7种运行级别,3和5常用
        1. 运行级别0:系统停止状态,系统默认运行级别不能设为0,否则不能正常启动
        2. 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登录
        3. 运行级别2:多用户状态(没有NFS),不支持网络
        4. 运行级别3:完全的多用户状态(有NFS),登录后进入控制台命令行模式
        5. 运行级别4:系统未使用,保留
        6. 运行级别5:X11控制台,登录后进入GUI模式
        7. 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
      2. 开机流程说明:开机 --> BIOS --> /boot --> systemd进程1 --> 运行级别 --> 运行级别对应的服务
      3. CentOS7之后版本运行级别说明: 在 /etc/initab 进行了简化,如下
        1. multi-user.target : analogous to runlevel 3
        2. graphical.target : analogous to runlevel 5
      4. # To view current default target, run : systemctl get-default
      5. # To set a default target, run : systemctl set-default TARGET.target
    6. chkconfig指令
      1. 介绍
        1. 通过 chkconfig 命令可以给服务的各个运行级别设置自启动/关闭
        2. chkconfig 指令管理的服务在 /etc/init.d 查看
        3. 注意:CentOS7.0后,很多服务使用 systemctl 管理
      2. 基本语法:
        1. 查看服务 chkconfig --list [| grep xxx]
        2. chkconfig 服务名 --list
        3. chkconfig --level 5 服务名 on/off
      3. 案例演示:对network服务进行各种操作,把network在3运行级别关闭自启动:chkconfig --level 3 network offchkconfig --level 3 network on
      4. 使用细节:chkconfig 重新设置服务后自启动或关闭,需要重启机器 reboot 生效
    7. systemctl指令:管理 /usr/lib/systemd/system 下的所有服务
      1. 基本语法:systemctl [start | stop | restart | status] 服务名
      2. systemctl管理的服务在 /usr/lib/systemd/system查看
      3. systemctl 设置服务的自启动状态
        1. systemctl list-unit-files [ | grep 服务名]:查看服务开机启动状态,grep可以进行过滤
        2. systemctl enable 服务名:设置服务开机启动
        3. systemctl disable 服务名:关闭服务开机启动
        4. systemctl is-enabled 服务名:查询某个服务是否自启动
      4. 应用案例:查看当前防火墙的状况,关闭防火墙和重启防火墙
        1. systemctl status firewalld:查看防火墙的运行状态
        2. systemctl stop firewalld:关闭防火墙
        3. systemctl start firewalld:启动防火墙
      5. 细节讨论:
        1. 关闭或启用防火墙后,立即生效。【telnet测试 某个端口即可】
        2. 这种方式只是临时生效,当重启系统后,还是回归以前对服务的设置
        3. 如果希望设置某个服务自启动或关闭永久生效:systemctl [enable | disable] 服务名
    8. 打开/关闭指定端口
      1. 在真正的生产环境,往往需要将防火墙打开,但是,如果防火墙打开,那么外部请求数据包就不能跟服务器监听端口通讯。这时,需要打开指定的端口。如80、22、8080等
      2. firewall指令
        1. 打开端口:firewall-cmd-permanent --add-port=端口号/协议
        2. 关闭端口:firewall-cmd-permanent --remove-port=端口号/协议
        3. 重新再入才能生效:firewall-cmd --reload
        4. 查询端口是否开放:firewall-cmd --query-port=端口/协议
      3. 应用案例:
        1. 启动防火墙,测试111端口是否能telnet:不行
        2. 开放111端口:firewall-cmd --permanent --add-port=111/tcpfirewall-cmd --reload
        3. 再次关闭111端口:firewall-cmd --permanent --remove-port=111/tcpfirewall-cmd --reload
  6. 动态监控进程
    1. 介绍:top与ps命令相似。它们都用来显示正在执行的进程。top和ps最大的不同之处在于top在执行一段时间可以更新正在运行的进程
    2. 基本语法:top [选项]
    3. 选项说明:
      1. -d 秒数:指定top命令每隔几秒更新,默认是3秒
      2. -i:使top不显示任何闲置或者僵死进程
      3. -p:通过指定监控进程ID来仅仅监控某个进程的状态
    4. 交互操作说明:
      1. p:以CPU使用率排序,默认即此项
      2. m:以内存的使用率排序
      3. n:以PID排序
      4. q:退出top
    5. 应用实例:
      1. 案例1:监视特定用户
        1. top:输入此命令,按回车键,查看执行的进程
        2. u:然后输入"u"回车,再输入用户名即可
      2. 案例2:终止指定的进程
        1. top:输入此命令,按回车键,查看执行的进程
        2. k:输入“k”回车,再输入要结束的进程ID号
      3. 案例3:指定系统状态更新的时间(每隔10秒自动更新):top -d 10
  7. netstat 查看系统网络情况
    1. 基本语法:netstat [选项]
    2. 选项说明:
      1. -an:按一定顺序排列输出
      2. -p:现实哪个进程在调用
    3. 应用案例:查看服务明未sshd的服务的信息:`netstat -anp | grep sshd
  8. ping 检测主机连接:网络检测工具,主要用来检测远程主机是否正常,或者两部主机间的网线或网卡故障

RPM 与 YUM

  1. 介绍: rpm用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat的标志,但理念是通用的。Linux的分发版本都有采用(suse,redhat,CentOS等),可以说是工人的行业标准了。
  2. rpm包的简单查询指令:rpm -qa
  3. 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表示通用。
  4. rpm 包的其他查询指令:
    1. rpm -qa:查询所安装的所有rpm软件包
    2. rpm -qa | grep firefox
    3. rpm -q 软件包名:查询软件包是否安装
    4. rpm -qi 软件包名:查询软件包信息
    5. rpm -ql 软件包名:查询软件包中的文件
    6. rpm -qf 文件全路径名:查询文件所属的软件包
      1. rpm -qf /etc/passwd
      2. rpm -qf /root/install.log
  5. rpm 包的管理
    1. 卸载 rpm 包
      1. 基本语法:rpm -e 包名 // erase
      2. 应用案例:删除Firefox软件包
      3. 细节讨论
        1. 如果其他软件包依赖于要卸载的软件包,卸载时会产生错误信息。如:rpm -e foo-->removing these packages would break dependencies:foo is needed by bar-1.0-1
        2. 如果要删除foo这个rpm包,可以增加 --nodeps 参数,就可以强制删除,但是一般不推荐这样做,因为依赖于该软件包的程序可能无法运行。rpm -e --nodeps foo
    2. 安装rpm包
      1. 基本语法:rpm -ivh RPM包全路径名称
      2. 参数说明:
        1. i=install:安装
        2. v=verbose:提示
        3. h=hash:进度条
      3. 应用案例:演示卸载和安装firefox浏览器
  6. yum:是一个shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包病安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包
    1. 基本指令:
      1. 查询yum服务器是否有需要安装的软件:yum list | grep xx
      2. 安装指定的yum包:yum install xxx下载安装
    2. 应用实例:使用yum的方式来安装firefox。rpm -e firefoxyum list | grep firefoxyum install firefox

搭建JavaEE环境

  1. 概述:Linux下进行JavaEE开发,需要安装如下软件: ![[Pasted image 20240321144710.png]]
  2. 安装JDK
    1. 安装步骤:
      1. mkdir /opt/jdk
      2. 通过xftp6上传到/opt/jdk下
      3. cd /opt/jdk
      4. 解压:tar -zxvf jdk-8u261-linux-x64.tar.gz
      5. mkdir /usr/local/java
      6. mv /opt/jdk/jdk1.8.0_261 /usr/local/java
      7. 配置环境变量的配置文件 vim /etc/profile
      8. export JAVA_HOME=/user/local/java/jdk1.8.0_261
      9. export PATH=$JAVA_HOME/bin:$PATH
      10. source /etc/profile 刷新环境变量,让文件生效
    2. 测试是否安装成功:编写一个简单的Hello.java 输出 "hello,world!"
  3. 安装tomcat
    1. 步骤
      1. 上传安装文件,并解压缩到/opt/tomcat
      2. 进入解压目录/bin,启动tomcat ./startup.sh
      3. 开放端口8080
    2. 测试是否安装成功:在windows、Linux下访问 http://linuxip:8080
  4. 安装idea2020
    1. 步骤
      1. 下载地址:www.jetbrains.com/idea/downlo…
      2. 解压缩到/opt/idea
      3. 启动 idea bin 目录下 ./idea.sh ,配置 jdk
      4. 编写 Hello world 程序并测试成功
  5. 安装mysql5.7步骤
    1. mkdir /opt/mysql
    2. cd /opt/mysql/
    3. wget http://dev.mysql.com/get/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar:下载 mysql 安装包
    4. tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
    5. centos7.6自带的类mysql数据库是mariadb,会和MySQL冲突,要先删除
      1. rpm -qa | grep mari:查询mariadb相关安装包
      2. rpm -e --nodeps mariadb-libs
    6. 然后开始安装mysql,依次执行以下几条:
      1. rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm
      2. rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm
      3. rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm
      4. rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm
    7. systemctl stat mysqld.service:启动mysql
    8. 设置root用户和密码。MySQL自动给root用户设置随机密码,运行grep "password" /var/log/mysqld.log可以看到当前密码
    9. mysql -u root -p回车-->输入默认密码
    10. 设置root密码,对于个人开发环境,如果要设置比较简单的密码(生产环境服务器要设置复杂密码),可以运行set global validate_password_policy=0,其默认值为1
    11. set password for 'root'@'localhost'=password('hspedu100')
    12. flush privileges使密码设置生效

Linux之大数据定制篇——Shell编程

  1. 为什么要学习Shell编程
    1. Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理
    2. 对于JavaEE和Python程序员来说,需要编写一些Shell脚本进行程序或者服务器的维护,比如编写一个定时备份数据库的脚本
    3. 对于大多数程序员来说,需要编写Shell程序来管理集群
  2. Shell是什么:是一个命令行解释器,它未用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序
  3. Shell脚本的执行方式
    1. 脚本格式要求
      1. 脚本以 #!/bin/bash 开头
      2. 脚本需要有可执行权限
    2. 编写第一个Shell脚本:创建一个Shell脚本,输出Hello world! vim hello.sh 内容: #!/bin/bash echo hello,world!
    3. 脚本的常用执行方式
      1. 输入脚本的绝对路径或相对路径:首先要赋予 helloworld.sh 脚本的 +x 权限,再执行脚本
      2. sh + 脚本:不用赋予脚本 +x 权限,直接执行即可。如:sh hello.sh
  4. Shell 的变量
    1. Shell变量介绍
      1. Linux Shell中的变量分为系统变量和用户自定义变量
      2. 系统变量:$HOME、$PWD、$SHELL、$USER
      3. 显示当前 shell 中所有变量:set
    2. shell变量的定义
      1. 定义变量:变量名=值
      2. 撤销变量:unset 变量名
      3. 声明静态变量:readonly 变量名,不能unset
    3. 快速入门
      1. 定义变量A
      2. 撤销变量A:unset A
      3. 声明静态变量B=2,不能unset
      4. 可以把变量提升为全局环境变量,可供其他shell程序使用
    4. 变量定义规则
      1. 变量名可以由字母、数字和下划线组成,但是不能以数字开头
      2. 等号两侧不能有空格
      3. 变量名称一般习惯大写
    5. 将命令的返回值赋值给变量
      1. A=date 反引号,运行里面的命令,并把结果返回给变量A
      2. A=$(date) 等价于反引号
  5. 设置环境变量
    1. 基本语法:
      1. export 变量名=变量值:将shell变量输出位环境变量
      2. source 配置文件:让修改后的配置信息立即生效
      3. echo $变量名:查询环境变量的值
    2. 快速入门:
      1. 在 /etc/profile 文件中定义 TOMCAT_HOME 环境变量
      2. 查看环境变量 TOMCAT_HOME 的值
      3. 在另一个 shell 程序中使用 TOMCAT——HOME
      4. 注意:在输出TOMCAT_HOME环境变量前,需要让其生效 source /etc/profile
      5. shell脚本的多行注释::<<! (换行)内容(换行) !
  6. 位置参数变量:当执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用位置参数变量。如:./myshell.sh 100 200 ,这个就是一个执行shell的命令行,可以在myshell脚本中获取到参数信息
    1. 基本语法:
      1. $n:n为数字,0代表命令本身,0代表命令本身,1-9代表第一到第九个参数;十以上的参数需要用大括号包含,如9代表第一到第九个参数;十以上的参数需要用大括号包含,如 {10}
      2. $*:表示命令行中的所有参数,$*把所有的参数看做一个整体
      3. $@:表示命令行中的所有参数,不过$@把每个参数区分对待
      4. $#:表示命令行中参数的个数
    2. 案例:编写一个shell脚本,position.sh,在脚本中获取到命令行
  7. 预定义变量:即shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
    1. 基本语法:
      1. $$:当前进程的进程号PID
      2. $!:后台运行的最后一个进程的进程号PID
      3. $?:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0,则证明上一个命令执行不正确
    2. 应用实例:在一个shell脚本中简单使用一下预定义变量
  8. 运算符
    1. 基本语法:
      1. $((运算符))$[运算符]expr m + n:expression
      2. 注意expr运算符间要有空格,如果希望将 expr 的结果赋给某个变量,使用反引号
      3. expr m - n
      4. expr \*,/,% 乘 、除、取余
    2. 应用实例
      1. 案例1:计算(2+3)X 4的值 RES1=$(((2+3)*4))RES2=$[(2+3)*4]TEMP=expr 2 + 3RES3=$TEMP \* 4
      2. 案例2:求命令行的两个参数(整数)的和 SUM=$[$1+$2]
  9. 条件判断
    1. 基本语法:[ condition ]注意condition前后要有空格;非空返回true,可使用 $? 验证(0为true,>1为false)
    2. 应用实例:
      1. [ hspEdu ]:返回true
      2. [ ]:返回false
      3. [ condition ] && echo OK || echo notok:条件满足,执行后面的语句
    3. 判断语句:
      1. 字符串比较:=
      2. 两个整数比较:
        1. 小于:-lt
        2. 小于等于:-le
        3. 等于:-eq
        4. 大于:-gt
        5. 大于等于:-ge
        6. 不等于:-ne
      3. 按照文件权限进行判断
        1. 有读的权限:-r
        2. 有写的权限:-w
        3. 有执行的权限:-x
      4. 按照文件类型进行判断
        1. 文件存在且是一个常规的文件:-f
        2. 文件存在:`-e'
        3. 文件存在且是一个目录:`-d'
    4. 应用实例
      1. 案例1:“ok”是否等于“ok”;使用 =:if [ "ok" = "ok" ] then echo "equal" fi
      2. 案例2:23是否大于等于22;使用 -ge:if [ 23 -ge 22 ] then echo "yes" fi
      3. 案例3:/root/shcode/aaa.txt 目录中的文件是否存在;使用 -f:if [ -f /root/shcode/aaa.txt ] then echo "存在" fi
  10. 流程控制
    1. if判断:
      1. 语法:
        if [ 条件判断式 ]
        then
        代码
        fi
        
        多分支
        if [ 条件判断式 ]
        then
        代码
        elif [ 条件判断式 ]
        then
        代码
        fi
        
      2. 案例:编写一个shell程序,如果输入的参数大于等于60,输出“及格了”,如果小于60,输出“不及格”
      	#!/bin/bash
      	if [ $1 -ge 60 ]
      	then 
      		echo "及格了"
      	elif [ $1 -lt 60 ]
      	then
      		echo "不及格"
      	fi
      
    2. case语句:
      1. 基本语法:
        case $变量名 in
        "值1")
        如果变量的值等于,则执行程序1
        ;;
        "值2")
        如果变量的值等于2,则执行程序2
        ;;
        ...省略其他分支...
        *)
        如果变量的值都不是以上的值,则执行此程序
        ;;
        esac
        
        1. 应用实例:
          1. 当命令行参数是1时,输出“周一”,是2时,输出“周二”,其他情况输出“other”
            case $1 in
            "1")
            echo "周一"
            ;;
            "2")
            echo "周二"
            ;;
            *)
            echo "other"
            ;;
            esca
            
    3. for循环:
      1. 基本语法1:
        for 变量 in 值1 值2 值3...
        do
        程序
        done
        
      2. 应用实例:打印命令行输入的参数【这里可以看出$*$@的区别】
      #!/bin/bash
      # $* 是把输入的参数当作一个整体,因此,只会输出一句话
      for i in "$*"
      do
      		echo "num is $i"
      done
      # $@ 是把输入的参数分开对待,因此,有几个参数输出几句
      for j in "$@"
      do
      		echo "num is $j"
      done
      
      1. 基本语法2:
        for ((初始值;循环控制条件;变量变化))
        do
        程序
        done
        
      2. 应用实例:从1加到100的值输出显示
        #!/bin/bash
        SUM=0
        for (( i=1;i<=100;i++ ))
        do
        #业务代码
        		SUM=$[$SUM+$i]
        done
        echo "SUM=$SUM"
        
    4. while循环
      1. 基本语法1:
        while [ 条件判断式 ]
        do
        程序
        done
        
      2. 应用实例:从命令行输入一个数n,统计从1+..+n的值是多少
        #!/bin/bash
        SUM=0
        i=0
        while [ $i -le $1 ]
        do 
        		SUM=$[$SUM+$i]
        		i=$[$i+1]
        done
        echo "SUM=$SUM"
        
  11. read读取控制台输入
    1. 基本语法:read (选项) (参数)
    2. 选项
      1. -p:指定读取值时的提示符
      2. -t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待
    3. 参数:指定读取值的变量名
    4. 应用实例
      1. 案例1:读取控制台输入一个NUM1值
      2. 案例2:读取控制台输入一个NUM2值,在10秒内输入
        #!/bin/bash
        #案例1
        read -p "请输入一个值NUM1=" NUM1
        echo "你输入的NUM1=$NUM1"
        # 案例2
        read -t 10 -p "请输入一个值NUM2=" NUM2
        echo "你输入的NUM2=$NUM2"
        
  12. 系统函数
    1. basename:返回完整路径最后 / 的部分,常用语获取文件名
      1. 基本语法:basename [pathname] [suffix];获取文件名,suffix未后缀,如果后缀被指定了,basename会讲pathname或string中的suffix去掉
      2. 案例:返回 /home/aaa/test.txt 的 “test.txt”部分
        basename /home/aaa/test.txt
        =>test.txt
        basename /home/aaa/test.txt .txt
        =>test
        
    2. dirname:dirname 文件绝对路径 返回完整路径最后 / 前面的部分,常用于返回路径部分
      1. 案例:返回/home/aaa/test.txt 的 /home/aaa
        dirname /home/aaa/test.txt
        =>/home/aaa
        
  13. 自定义函数
    1. 基本语法:调用直接写函数名:funname [值]
    [ functiion ] funname[()]
    {
    	Action
    	[return int;]
    }
    
    1. 案例:计算输入两个参数的和,getSum
    #!/bin/bash
    function getSum(){
    	SUM=$[$n1,$n2]
    	echo "和=$SUM"
    }
    #输入两个值
    read -p "请输入一个数n1=" n1
    read -p "请输入一个数n2=" n2
    #调用自定义函数
    getSum $n1 $n2
    
  14. Shell编程综合案例:定期备份数据库
    1. 每天凌晨2:30备份数据库 hspedu到/data/backup/db
    2. 备份开始和备份结束能够给出响应的提示信息
    3. 备份后的文件要求以备份时间为文件名,并打包成.tar.gz格式,如2021-03-12_230201.tar.gz
    4. 在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除
    #!/bin/bash
    #备份目录
    BACKUP=/data/backip/db
    #当前时间
    DATETIME=$(date +%Y-%m-%d_%H%M%S)
    #数据库的地址
    HOST=localhost
    #数据库用户名
    DB_USER=root
    #数据库密码
    DB_PW=hspedu100
    #备份的数据库
    DATABASE=hspedu
    #创建备份目录,如果不存在就创建
    [ ! -d "${BACKUP}/${DDATETIME}" ] && mkdir -p "${BACKUP}/${DDATETIME}"
    #备份数据库
    mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --databases ${DATABASE} | gizp > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz
    #将文件处理成 tar.gz
    cd ${DATABASE}
    tar -zcvf $DATETIME.tar.gz ${DATETIME}
    #删除备份后对应的目录
    rm -rf ${BACKUP}/${DATETIME}
    #删除10天前的备份文件;-atime +10 十天前
    find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \;
    echo "备份数据库${DATABASE}成功"
    
    crontab -e
    30 2 * * * /usr/sbin/mysql_db_backup.sh
    
    crontab -l 查看是否添加定时任务

Python定制篇——Python开发平台Ubuntu

  1. Ubuntu介绍:是一个以桌面应用为主的开源GNU/Linux操作系统,Ubuntu是基于GNU/Linux,支持x86、amd64(即x64)和ppc架构,由全球化的专业开发团队(Canonical Ltd)打造的。专业的Python开发者一般选择Ubantu这款Linux系统作为生产平台。

温馨提示:Ubuntu和Centos都是基于GNU/Linux内核的,因此基本使用和Centos几乎一样,它们的各种指令可以通用。只是界面和安装的软件有所差别。

  1. 设置Ubuntu支持中文:默认安装的ubuntu只有英文语言,要正确显示汉字,需要安装中文语言包
    1. 单击左侧图标栏打开 Language Support 菜单,点击打开Language Support(语言支持)选项卡
    2. 点击 Install / Remove Languages,在弹出的选项卡中下拉找到Chinese(Simplified),即中文简体,在后面的选项中打勾。然后点击Apply Changes提交,系统会自动联网下载中文语言包。(保证Ubuntu是联网的)。
    3. 这时“汉语(中国)”在最后一位。将其拖动到第一位
    4. 设置后不会即刻生效,需要下一次登录时生效。
  2. Ubuntu的root用户:安装Ubuntu成功后,都是普通用户权限,并没有最高root权限,如果需要使用root权限,通常都会在命令前加上sudo。一般使用su命令来直接切换到root用户。但是如果没有给root设置初始密码,就会抛出su : Authentication failure。所以,只要给root用户设置一个初始面膜就好了。
    1. 给root用户设置密码并使用:
      1. 输入 sudo passwd 命令,输入一般用户密码并设定root用户密码
      2. 设置root密码成功后,输入su命令,并输入刚才设定的root密码。就可以切换成root了。提示符 $ 代表一般用户,提示符 # 代表root用户
      3. 以后就可以使用root用户了
      4. 输入 exit 命令,退出 root 并返回一般用户
  3. Ubuntu下开发python
    1. 说明:安装好Ubuntu后,默认已经安装好python的开发环境![[Pasted image 20240401145955.png]]
    2. 在Ubuntu下开发一个Python程序
      1. vi hello.py:编写hello.py
      2. python3 hello.py:运行hello.py
  4. APT软件管理和远程登录
    1. apt:Advanced Packaging Tool的简称,是一款安装包管理工具。在Ubuntu下,使用apt命令进行软件包的安装、删除、清理等,类似于Windows中的软件管理工具
    2. Ubuntu软件管理的原理图:/etc/apt/sources.list 记录着apt获取软件的服务器地址![[Pasted image 20240401153923.png]]
  5. Ubuntu软件操作的相关命令
    1. sudo apt-get update更新源
    2. sudo apt-get install package安装包
    3. sudo apt-get remove package删除包
    4. sudo apr-cache search package搜索软件包
    5. sudo apt-cache show package获取包的相关信息,如:说明、大小、版本等
    6. sudo apt-get install package --reinstall重新安装包
    7. sudo apt-get -f install修复安装
    8. sudo apt-get remove package --purge删除包,包括配置文件等
    9. sudo apt-get build-dep package安装相关的编译环境
    10. sudo apt-get upgrade更新已安装的包
    11. sudo apt-get dist-upgrade升级系统
    12. sudo apt-cache depends package了解使用该包依赖哪些包
    13. sudo apt-cache rdepends package查看该包被哪些包依赖
    14. sudo apt-get source package下载包的源代码
  6. 更新Ubuntu软件下载地址
    1. 寻找国内镜像源:mirrors.tuna.tsinghua.edu.cn/
    2. 备份Ubantu默认的源地址:sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
    3. 更新源服务器列表
      1. 清空sources.list文件赋值镜像网站的地址:su rootecho ' ' > sources.list
      2. 复制镜像网站的地址,拷贝到 sources.list 文件
      3. 更新源:sudo apt-get update
  7. 远程登录Ubuntu
    1. ssh介绍:SSH为Secure Shell的缩写,由IEIF的网络工作小组(Network Working Group)所制定,SSH为建立在应用层和传输层基础上的安全协议。 SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。常用于远程登录。几乎所有的UNIX/Linux平台都可以运行SSH。 使用SSH服务,需要安装响应的服务器和客户端。客户端于服务器的关系:如果A机器想被B机器远程控制,那么A机器需要安装SSH服务器,B机器需要安装SSH客户端。 和CentOS不一样,Ubuntu默认没有安装SSHD服务(使用netstat指令netstat -anp | more查看,指令apt install net-tools安装netstat),因此,不能进行远程登录。
    2. 安装ssh和启用:sudo apt-get install openssh-server:安装SSH服务端和客户端。 service sshd restartsudo systemctl enable ssh.service:启动sshd服务。监听22端口。
    3. 在windows使用XShell6/XFTP6登录Ubuntu
  8. 从一台Linux系统远程登录到另一台Linux系统
    1. 在创建服务器集群时,会使用到该技术
    2. 基本语法:ssh 用户名@IP,如:ssh hspedu@192.168.200.22
    3. 使用ssh访问,如果访问出现错误。可查看是否有 /.ssh/known_ssh 尝试删除该文件解决,一般不会有问题
    4. 登出:exitlogout