这是我学习哔哩哔哩UP主韩顺平的2021韩顺平图解Linux课程的学习笔记
课程地址:2021韩顺平图解Linux课程

Linux基础篇-Linux目录结构

基本介绍

  • linux 的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录。

具体的目录结构

加粗的是常用的和重要的的目录,划删除线的是不能动的目录。

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

Linux实操篇-Vi和Vim编辑器

Vi和Vim的基本介绍

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

Vi和Vim常用的三种模式

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

Vi和Vim常用快捷键

  • 拷贝当前行:yy,拷贝当前行向下的5行:5yy,粘贴:p。(一般模式)

  • 删除当前行:dd,删除当前行向下的5行:5dd。(一般模式)

  • 在文件中查找某个单词:/单词,键入n查找下一个。

  • 设置行号::set nu:set nonu

  • 移动到文档的最末行:G,移动到文档最首行:gg。(一般模式)

  • 撤销:u

  • 将光标定位到5行:5shift+g。(一般模式)

Linux实操篇-开机、重启和用户登录注销

关机&重启

  • shutdown -h noworhalt:立刻关机
  • shutdown -h 1:1分钟后关机
  • shutdown -r noworreboot:立刻重启
  • sync:把内存的数据同步到磁盘

尽管目前shutdown/reboot/halt等命令已经在关机前执行了sync,但依然建议自己在关机前至少输入一次sync。

用户登录&注销

  • 登录:su - 用户名
  • 注销:logout

logout注销指令在图形运行级别无效,在运行级别3以下有效。

Linux实操篇-用户管理

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

常用指令

  • 添加用户:useradd 用户名
    • 当创建用户成功后,会自动的创建和用户同名的家目录。
    • 也可以通过useradd -d 指定目录 用户名,给新创建的用户指定家目录。
  • 指定/修改密码:passwd 用户名,如果不指定用户名就是修改当前的用户密码。
  • 查看当前用户:whoami,显示当前目录:pwd
  • 删除用户
    • 保留家目录:userdel 用户名
    • 不保留家目录:userdel -r 用户名
  • 查询用户信息:id 用户名
  • 切换用户:su - 用户名
    • 从权限高的用户切换到权限低的用户,不需要输入密码,反之需要。
    • 当需要返回到原来用户时,使用exit/logout指令。
  • 新增组:groupadd 组名,删除组:groupdel 组名
    • 增加用户时可以直接加上组:useradd –g 用户组 用户名
    • 如果新增用户没有组,系统会自动创建一个和用户名一样的组,并将该用户放进该组。
  • 修改用户的组:usermod -g 组名 用户名
  • 修改用户的目录:usermod -d 目录名 用户名

用户和组相关文件

  • /etc/passwd文件:用户的配置文件,记录用户的各种信息。
    • 每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell。
  • /etc/shadow文件:口令的配置文件。
    • 每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志。
  • /etc/group文件:组的配置文件,记录组的信息。
    • 每行含义:组名:口令:组标识号:组内用户列表。

Linux 实操篇-实用指令

运行级别

运行级别 说明 运行级别 说明
0 关机 1 单用户(找回丢失密码)
2 多用户状态没有网络服务 3 多用户状态有网络服务
4 系统未使用保留给用户 5 图形界面
6 系统重启
  • 切换用户级别:init 0/1/2/3/4/5/6
  • 查看当前运行级别:systemctl get-default
  • 指定默认运行级别:systemctl set-default TARGET.target
    • 运行级别3:multi-user.target
    • 运行级别5:graphical.target

找回root密码

  1. 启动系统,在选择启动版本的时候按 e ,然后在有Linux版本的那一段最后边空一格写init=/bin/sh,接着键入 Ctrl+x
  2. 在光标闪烁的地方输入mount -o remount,rw /后回车。
  3. 在新的一行后面输入passwd后回车。
  4. 输入密码,然后再次输入密码即可。(建议密码长度8位及以上)
  5. 接着输入touch /.autorelabel后回车。
  6. 最后输入exec /sbin/init后回车,系统会自动重启后密码生效。

帮助指令

  • man:man 命令或配置文件,如:man ls

  • help:help 命令或配置文件,如:help cd

文件目录类

  • pwd:显示当前目录的绝对路径

  • ls:ls 选项 目录或文件

    • 常用选项

      选项 功能
      -a 显示当前目录包括隐藏文件在内的所有文件和目录
      -l 以列表方式显示(可以加个h,按照人类比较容易看清楚的单位显示文件大小)
  • cd:切换到指定目录

    • 基本语法: cd 参数
    • 回到自己的家目录:cd ~
    • 回到当前目录的上一级目录:cd ..
  • mkdir:创建目录

    • 基本语法:mkdir 选项 目录名

    • 常用选项

      选项 功能
      -p 创建多级目录
    • 案例:mkdir -p /animal/dog

  • rmdir:删除空目录

    • 基本语法:rmdir 选项 要删除的空目录
    • 如果需要删除非空目录:rm -rf 要删除的目录
  • touch:创建空文件

    • 基本语法:touch 文件名
    • 案例:touch hello.txt
  • mv:移动或重命名文件与目录

    • 基本语法
      • 重命名:mv 旧文件名 新文件名
      • 移动:mv 文件 目标目录
    • 案例
      • 移动并重命名:mv pig.txt /root/cow.txt
      • 移动整个目录:mv bbb/ /home/
  • cat:查看文件内容

    • 基本语法:cat 选项 要查看的文件

    • 常用选项

      选项 功能
      -n 查看行号
    • 使用细节:为了浏览方便,可以加上管道命令| more

  • more:按页显示文本文件的内容

    • 基本语法:more 要查看的文件

    • 操作说明

      操作 功能
      Enter 向下番一行
      Space 向下翻一页
      Ctrl+f 向下滚动一屏
      Ctrl+b 向上滚动一屏
      = 输出当前行号
      :f 输出文件名和当前行号
      q 退出
  • less:分屏查看文件内容

    • 基本语法:less 要查看的文件

    • 操作说明

      操作 功能
      Page up 向上番一页
      Page down 向下翻一页
      /字符串 向下查找该字符串;n-继续向下查找,N-向上查找
      ?字符串 向上查找该字符串;n-继续向上查找,N-向下查找
      q 退出
  • echo:输出内容到控制台

    • 基本语法:echo 选项 输出内容
    • 案例
      • 输出环境变量:echo $SHELL
      • 输出字符串:echo hello world
  • head:用于显示文件开头部分的内容,默认显示前十行

    • 基本语法:head 选项 文件

    • 常用选项

      选项 功能
      -n 5 查看前5行
  • tail:用于显示文件尾部部分的内容,默认显示后十行

    • 基本语法:tail 选项 文件

    • 常用选项

      选项 功能
      -n 5 查看后5行
      -f 实时追踪该文档的所有更新
  • >指令和>>指令:输出重定向(前者覆盖后者追加)

    • 基本语法
      • ls -l > 文件名
      • ls -al >> 文件名
      • cat 文件1 > 文件2
      • echo 内容 >> 文件名
  • ln:软链接(又叫符号链接,相当于快捷方式)

    • 基本语法
      • ln -s 原文件或目录 软链接名:创建软连接
      • rm 软连接名:删除软连接
  • history:查看已经执行过的历史命令

    • 案例
      • 显示最近使用过的10条指令:history 10
      • 执行历史编号为5的指令:!5

时间日期类

  • date

    • 基本语法

      • date:显示当前时间
      • date +%Y:显示当前年份
      • date +%m:显示当前月份
      • date +%d:显示当前日
      • date "+%Y-%m-%d %H:%M:%S":显示年月日时分秒
    • 设置日期:date -s 字符串时间,如:date -s "2020-09-09 17:46:50"

  • cal:查看日历

    • 基本语法
      • cal 选项(若不加选项,则显示本月日历)
    • 案例
      • 显示2020年日历:cal 2020

搜索查找类

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

    • 基本语法:find 搜索范围 选项 目标文件

    • 选项说明

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

      • 按文件名:查找/home目录下的hello.txt:find /home -name hello.txt
      • 按拥有者:查找/opt目录下,用户名称为nobody的文件:find /opt -user nobody
      • 按照文件大小:查找整个Linux系统下大于200M的文件(+n大于、-n小于、n等于,单位有k/M/G):find / -size +200M
  • locate:快速定位文件路径

    • 基本语法:locate 文件名
    • 特别说明:第一次运行前,必须使用updatedb指令创建locate数据库。
    • 案例
      • 使用locate指令快速定位hello.txt所在的目录:locate hello.txt
  • which 指令名称:查看某个指令在哪个目录

  • grep指令:过滤查找,常和管道符号|一起使用

    • 基本语法:grep 选项 查找内容 目标文件orcat 目标文件 | grep 选项 查找内容
    • 常用选项
      选项 功能
      -n 显示匹配行及行号
      -i 忽略字母大小写
      * 案例:在hello.txt文件中,查找"yes"所在行,并显示行号:`cat hello.txt grep -n "yes"orgrep -n “yes” hello.txt`

压缩和解压类

  • gzip/gunzip 目标文件:前者压缩,后者解压(适用于 .gz 文件)

  • zip/unzip:前者压缩,后者解压

    • 基本语法:zip 选项 xxx.zip 目标文件andunzip 选项 xxx.zip
    • zip常用选项:-r:递归压缩,即压缩目录
    • unzip常用选项:-d 目录:指定解压后文件的存放目录
    • 案例
      • 将home目录及其包含的文件和子文件夹压缩成myhome.zip:zip -r myhome.zip /home/
      • 将myhome.zip解压到/opt/tmp目录下:unzip -d /opt/tmp myhome.zip
  • tar:压缩和解压,适用于 .tar.gz 文件

    • 基本语法:tar 选项 xxx.tar.gz 打包的内容
    • 常用选项
      选项 功能
      -c 产生.tar打包文件
      -v 显示详细信息
      -f 指定压缩后的文件名
      -z 打包同时压缩
      -x 解包.tar文件
    • 案例
      • 将pig.txt和cat.txt压缩成pc.tar.gz:tar -zcvf pc.tar.gz pig.txt cat.txt
      • 将/home文件夹压缩成myhome.tar.gz:tar -zcvf myhome.tar.gz /home/
      • 将pc.tar.gz解压到当前目录:tar -zxvf pc.tar.gz
      • 将myhome.tar.gz解压到/opt/tmp2目录下:tar -zxvf myhome.tar.gz -C /opt/tmp2/

Linux实操篇-组管理和权限管理

Linux组基本介绍

在Linux中的每个用户必须属于一个组,不能独立于组外;Linux中的每个文件都有所有者、所在组、其它组的概念。
当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组。

文件/目录所有者和所在组

  • 查看文件的所有者和所在组:ls -ahl
  • chown:修改文件/目录的所有者
    • 基本语法

      • chown newowner 文件/目录:修改文件/目录的所有者
      • chown newowner:newgroup 文件/目录:修改文件/目录的所有者和所在组
    • 常用选项

      选项 功能
      -R 用于目录,使其下所有子文件或目录递归生效
    • 案例

      • 请将/home/abc.txt文件的所有者修改成tom:chown tom /home/abc.txt
      • 请将/home/kkk目录下所有的文件和目录的所有者都修改成tom:chown -R tom /home/kkk
  • chgrp:修改文件/目录的所在组
    • 基本语法:chgrp newgroup 文件/目录

    • 常用选项

      选项 功能
      -R 用于目录,使其下所有子文件或目录递归生效
    • 案例

      • 将/home/abc.txt文件的所在组修改为tom:chgrp tom /home/abc.txt
      • 将/home/kkk目录下所有的文件和目录的所在组都修改为komakea:chgrp -R komaeka /home/kkk

权限的基本介绍

  • 运行ls -l会显示 -rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc

  • 第0位确定文件类型

    符号 类型
    - 普通文件
    l 链接
    d 目录
    c 字符设备,如:鼠标,键盘
    b 块设备,如:硬盘
  • 第1-3位:该文件的所有者拥有该文件的权限

  • 第4-6位:该文件的所有者所属组拥有该文件的权限

  • 第7-9位:其他用户拥有该文件的权限

  • 可用数字表示为:r=4,w=2,x=1因此rwx=4+2+1=7,数字可以进行组合

  • rwx作用到文件和目录

    符号 文件 目录
    - 无权限 无权限
    r 可读 可读,可ls
    w 可写但不可删除 可创建、修改、删除、重命名
    x 可执行 可进入该目录
  • 其它说明

    • 1:文件-硬链接数,目录-子目录数
    • root:用户
    • root:组
    • 1213:文件大小
    • Feb 2 09:39:最后修改日期
    • abc:文件名

修改权限

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

    • u:所有者、g:所属组、o:其他人、a:所有人(u,g,o的总和)
    • chmod u=rwx,g=rx,o=x 文件/目录
    • chmod o+w 文件/目录
    • chmod a-x 文件/目录
    • 案例
      • 给abc文件的所有者读写执行的权限,给所在组读执行权限,给其它人读执行权限:chmod u=rwx,g=wx,o=rx abc
      • 给abc文件的所有者除去执行的权限,给所属组增加写的权限:chmod u-x,g+w abc
      • 给abc文件的所有用户添加读的权限:chmod a+r abc
  • 第二种方式:通过数字变更权限

    • r=4 w=2 x=1,故rwx=4+2+1=7
    • chmod u=rwx,g=rx,o=x 文件/目录相当于chmod 751 文件/目录
    • 将/home/abc.txt文件的权限修改成rwxr-xr-x,使用给数字的方式实现:chmod 755 /home/abc.txt

Linux实操篇-定时任务调度

crond任务调度

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

  • 任务调度分类

    • 系统工作:有些重要的工作必须周而复始地执行,如病毒扫描等
    • 个别用户工作:个别用户可能希望执行某些程序,比如对MySQL数据库的备份
  • 基本语法:crontab 选项

  • 常用选项

    选项 含义
    -e 编辑crontab定时任务
    -l 查询crontab任务
    -r 删除当前用户所有的crontab任务
  • 占位符说明

    占位符 含义 范围
    第一个* 一小时当中的第几分钟 0-59
    第二个* 一天当中的第几小时 0-23
    第三个* 一个月当中的第几天 1-31
    第四个* 一年当中的第几月 1-12
    第五个* 一周当中的星期几 0-7(0和7都代表星期日)
  • 特殊符号的说明

    特殊符号 含义
    * 代表任何时间
    , 代表不连续的时间
    - 代表连续的时间范围
    */n 代表间隔多久执行一次
  • 特殊符号执行案例

    符号串 含义
    45 22 * * * 命令 每天22:45执行命令
    0 17 * * 1 命令 每周1的17:00执行命令
    0 5 1,15 * * 命令 每月的1号和15号的5:00执行命令
    40 4 * * 1-5 命令 每周1至5的4:40执行命令
    */10 4 * * * 命令 每天的4:00开始每隔十分钟执行一次命令
    0 0 1,15 * 1 命令 每个月1号和15号,以及每周1的0:00执行命令
  • 每隔1分钟,就将当前的日期信息,追加到/tmp/mydate文件中:*/1 * * * * date >> /tmp/mydate

at定时任务

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

  • at的守护进程atd会以后台模式运行,检查作业队列来运行。默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。

  • 在使用at命令的时候,一定要保证atd进程的启动,可以使用指令来查看:ps -ef | grep atd

  • 命令格式:at [选项] 时间,最后键入ctrl+d结束命令的输入

  • at时间定义

    • 接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。例如:04:00
    • 使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间。
    • 采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。例如:12pm
    • 指定命令执行的具体日期。例如:04:00 2021-03-1
    • 使用相对计时法。指定格式为: now + count 时间单位 ,时间单位能够是minutes、hours、days、weeks。例如:now + 5 minutes
  • 案例

    • 2天后的下午5点执行/bin/ls /home
      at 5pm + 2 days
      /bin/ls /home
    • 使用atq命令来查看系统中没有执行的工作任务:atq
    • 明天17点钟,输出时间到/root/date100.log
      at 5pm tomorrow
      date > /root/date100.log
    • 删除已经设置的任务1:atrm 1

Linux实操篇-Linux磁盘分区、挂载

Linux 分区

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

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

  • 硬盘说明

    • Linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘
    • 对于IDE硬盘,驱动器标识符为“hdx~”,其中“hd”表明分区所在设备的类型,这里是指IDE硬盘了。“x”为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),“~”代表分区,前四个分区用数字1到4表示主分区或扩展分区,从5开始就是逻辑分区。例,hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区
    • 对于SCSI硬盘则标识为“sdx~”,SCSI硬盘是用“sd”来表示分区所在设备的类型的,其余则和IDE硬盘的表示方法一样
  • 查看所有设备挂载情况:lsblk或者lsblk -f

挂载磁盘

  • 增加一块硬盘:虚拟机添加硬盘->分区->格式化->挂载->设置永久挂载
    • 分区:fdisk /dev/sdb
    • 格式化磁盘:mkfs -t ext4 /dev/sdb1
    • 挂载:mount /dev/sdb1 /newdisk/
    • 卸载:umount /dev/sdb1
    • 永久挂载:修改/etc/fstab中的内容

用命令行挂载重启会失效,所以还需要添加永久挂载

磁盘情况查询

  • 查询系统整体磁盘使用情况:df -h
  • 查询指定目录的磁盘占用情况:du -h 目录名,如果不加目录名,就会查询当前目录
  • 常用选项
选项 含义
-s 指定目录占用大小汇总
-h 带计量单位
-a 含文件
--max-depth=1 子目录深度
-c 列出明细的同时,增加汇总值
  • 案例:查询/opt目录的磁盘占用情况,深度为1:du -ha --max-depth=1 /opt

磁盘情况-工作实用指令

  • 统计/opt文件夹下文件的个数:ls -l /opt | grep "^-" | wc -l
  • 统计/opt文件夹下目录的个数:ls -l /opt | grep "^d" | wc -l
  • 统计/opt文件夹下文件的个数,包括子文件夹里的:ls -lR /opt | grep "^-" | wc -l
  • 统计/opt文件夹下目录的个数,包括子文件夹里的:ls -lR /opt | grep "^d" | wc -l
  • 以树状显示目录结构:tree /home。如果没有tree,则使用yum install tree安装tree

Linux实操篇-网络配置

  • 指定ip地址

    1. vim /etc/sysconfig/network-scripts/ifcfg-ens33
    2. 静态分配:BOOTPROTO="static"
      IP地址:IPADDR=192.168.200.130
      网关:GATEWAY=192.168.200.2
      域名解析器:DNS1=192.168.200.2
    3. 修改虚拟网络编辑器,改为同一个网段
    4. 重启网络服务(service network restart)或重启系统
  • 设置主机名

    • 为了方便记忆,可以给linux系统设置主机名, 也可以根据需要修改主机名
    • 查看主机名:hostname
    • 修改 /etc/hostname
    • 修改后,重启生效
  • 设置hosts映射:修改 /etc/hosts

Linux实操篇-进程管理

进程的查看与结束

  • 显示系统执行的进程:ps
选项 含义
-a 显示当前终端的所有进程信息
-u 以用户的格式显示进程信息
-x 显示后台进程运行的参数
-e 显示所有进程
-f 全格式
字段 说明
USER 进程执行用户
PID 进程识别号
PPID 该进程的父进程
CPU 占用CPU百分比
MEM 占用物理内存百分比
VSZ 占用虚拟内存的大小
RSS 占用物理内存的大小
TTY 终端名称
STAT 进程状态
START 进程执行的开始时间
TIME 进程占用CPU的时间
COMMAND 进程名,执行该进程的指令
  • 查看sshd的父进程:ps -ef | grep sshd
字段 说明
UID 用户ID
PID 进程识别号
PPID 该进程的父进程
STIME 进程执行的时间
TTY 终端名称
TIME 进程占用CPU的时间
CMD 进程名,执行该进程的指令
  • 终止进程:killandkillall

    • kill 选项 进程号:根据进程号杀死进程

    • killall 进程名:根据进程名杀死该进程及其子进程,支持通配符

    • 常用选项

      选项 功能
      -9 强迫进程立即停止
    • 案例

      • 踢掉某个非法登录用户:kill 11421
      • 终止远程登陆服务sshd:kill 10748
      • 重启sshd服务:/bin/systemctl start sshd.service
      • 终止多个gedit:killall gedit
      • 强制杀掉一个终端:kill -9 10487
  • 查看进程数:pstree 选项

    • 常用选项
选项 含义
-p 显示进程的PID
-u 显示进程的所属用户
  • 案例
    • 树状形式显示进程的pid:pstree -p
    • 树状形式显示进程的用户id:pstree -u

服务管理

  • service管理指令

    • service 服务名 start|stop|restart|reload|status
    • 在CentOS7.0后很多服务不再使用service,而是systemctl
    • service指令管理的服务在 /etc/init.d 查看
  • 查看、启动、关闭network指令

    • 查看:service network statusorsystemctl status network
    • 启动:service network startorsystemctl start network
    • 关闭:service network stoporsystemctl stop network
  • chkconfig

    • 可以通过chkconfig命令可以给服务的各个运行级别设置自启动/关闭
    • chkconfig指令管理的服务在 /etc/init.d 查看
    • 查看服务:chkconfig --list[ | grep 服务名]orchkconfig 服务名 --list
    • 指定某一服务在某一级别启动或关闭:chkconfig --level 5 服务名 on/off
    • 设置network在3运行级别,关闭自启动:chkconfig --level 3 network off
    • 注意:设置完后重启生效
  • systemctl

    • systemctl start|stop|restart|reload|status 服务名
    • systemctl管理的服务在 /usr/lib/systemd/system 查看
    • 查看服务开机启动状态:systemctl list-unit-files[ | grep 服务名]
    • 开启/关闭服务开机启动:systemctl enable/disable 服务名
    • 查询某个服务是否是自启动的:systemctl is-enabled 服务名
  • firewall

    • 打开端口:firewal-cmd --permanent --add-port=端口号/协议
    • 关闭端口:firewal-cmd --permanent --remove-port=端口号/协议
    • 重新载入防火墙:firewall-cmd --reload
    • 查询端口是否开放:firewall-cmd --query-port=端口号/协议

动态监控进程

  • top与ps命令很相似,它们都用来显示正在执行的进程。top与ps最大的不同之处,在于top在执行一段时间可以更新正在运行的的进程
  • top 选项
  • 常用选项
选项 功能
-d 秒数 指定每隔几秒更新,默认3秒
-i 使top不显示任何闲置或者僵死进程
-p 通过指定监控进程ID来仅仅监控某个进程的状态
  • 交互操作说明
操作 功能
P 以CPU使用率排序,默认就是如此
M 以内存使用率排序
N 以PID排序
q 退出top
  • 监控tom用户的进程:先键入u,然后输入tom后回车

  • 终止指定的进程:先键入k,然后输入要终止进程的PID回车,再输入信号量9表示强制结束,回车即可

  • 监控网络状态:netstat 选项

选项 功能
-an 按一定顺序排列输出
-p 显示哪个进程在调用
  • 查看服务名为sshd的服务的信息:netstat -anp | grep sshd

Linux实操篇-RPM与YUM

rpm包的管理

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

  • 基本指令

    • 查询已安装的rpm列表:rpm -qa
    • 查看当前系统是否安装了firefox:rpm -qa | grep firefoxorrpm -q firefox
    • 查询firefox的相关信息:rpm -qi firefox
    • 查询firefox中包含的文件:rpm -ql firefox
    • 查询文件所属的软件包:rpm -qf 文件路径名,如rpm -qf /etc/passwd
    • 安装rpm包:rpm -ivh rpm包全路径名称
    • 卸载rpm包:rpm -e rpm包的名称,如果其它软件包依赖于你要卸载的软件包,卸载时则会产生错误信息。如果想要强制删除,可以增加参数--nodeps,如rpm -e --nodeps foo
  • rpm包名基本格式

    • 一个rpm包名:firefox-60.2.2-1.el7.centos.x86_64
    • 名称:firefox
    • 版本号:60.2.2-1
    • 适用操作系统:el.centos.x86_64,表示centos7.x的64位系统
    • 如果是i686/i386表示32位系统,noarch表示通用

yum

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

  • 基本指令
    • 查询yum服务器是否有想要安装的软件:yum list | grep 软件名
    • 安装指定的yum包:yum install 软件名

Shell编程

脚本以 #!/bin/bash 开头

  • 脚本的常用执行方式

    1. 输入脚本的绝对路径或相对路径:首先要赋予脚本的+x权限,再执行脚本,比如./hello.shor/root/shcode/hello.sh
    2. sh 脚本名称:这样不用赋予脚本+x权限,直接执行即可
  • Shell中的变量分为系统变量和自定义变量,可用set查看当前shell中的所有变量

  • 系统变量:HOME、PWD、SHELL、USER等等,可以用echo $USER输出系统变量

定义变量的规则

  1. 变量名称可以由字母、数字和下划线组成,但是不能以数字开头
  2. 等号两侧不能有空格
  3. 变量名称一般习惯为大写
  • 定义变量:变量名=值

  • 撤销变量:unset 变量

  • 声明静态变量:readonly 变量(不能unset)

  • 将命令的返回值赋给变量:A=`date`orA=$(date)

  • 单行注释:#,多行注释:<<! 内容 !

  • /etc/profile 中设置环境变量

    • export 变量名=变量值: 将变量设置为环境变量/全局变量
    • source /etc/profile:让修改后的配置信息立即生效
  • 位置参数变量

    • $n:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10}
    • $*:代表命令行中所有的参数,$*把所有的参数看成一个整体
    • $@:代表命令行中所有的参数,不过$@把每个参数区分对待
    • $#:代表命令行中所有参数的个数
    • 案例:编写一个shell脚本,在脚本中获取到命令行的各个参数信息。
    1
    2
    3
    4
    5
    #!/bin/bash
    echo "0=$0 1=$1 2=$2"
    echo "allParameter=$*"
    echo "$@"
    echo "parameterAmount=$#"
  • 预定义变量

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

    • $((运算式))or$[运算式]or `expr m + n`
    • expr \*,/,%(乘,除,取余)
    • 计算(2+3)×4:a=$(((2+3)*4))orb=$[(2+3)*4]or
    1
    2
    c=`expr 2 + 3`
    d=`expr $c \* 4`
    • 求出命令行的两个参数的和:SUM=$[$1+$2]
  • 条件判断

    • [ condition ]:非空返回true,可使用$?验证(0为true,>1为false)
    • [ hspEdu ]返回true,[ ]返回 false[ condition ] && echo OK || echo notok条件满足,执行后面的语句
    • =:字符串比较
    • 两个整数的比较
    符号 含义
    -lt 小于
    -le 小于等于
    -eq 等于
    -gt 大于
    -ge 大于等于
    -ne 不等于
    • 按照文件权限进行判断
    符号 含义
    -r 有读的权限
    -w 有写的权限
    -x 有执行的权限
    • 按照文件类型进行判断
    符号 含义
    -f 文件存在并且是一个常规的文件
    -e 文件存在
    -d 文件存在并是一个目录
    • "ok"是否等于 “ok”:[ "ok" = "ok" ]
    • 23是否大于等于22:[ 23 -ge 22 ]
    • 是否存在/root/aaa.txt文件:[ -f /root/aaa.txt ]
  • 流程控制

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    #语法
    if [ 条件判断式 ]
    then
    代码
    elif [ 条件判断式 ]
    then
    代码
    fi

    #案例
    if [ $1 -gt 60 ]
    then
    echo "bigger"
    elif [ $1 -lt 60 ]
    then
    echo "smaller"
    fi

    #case案例
    case $1 in
    "1")
    echo "Monday";;
    "2")
    echo "Tuesday";;
    *)
    echo "other";;
    esac
  • 循环

    • for循环
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #语法1
    for 变量 in 值1 值2 值3…
    do
    代码
    done

    #案例1
    for i in "$@"
    do
    echo "number is $i"
    done

    #语法2
    for (( 初始值;循环控制条件;变量变化 ))
    do
    代码
    done

    #案例2
    SUM=0
    for (( i=1;i<=100;i++ ))
    do
    SUM=$[$SUM+$i]
    done
    echo "SUM=$SUM"
    • while循环
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #语法
    while [ 条件判断式 ]
    do
    代码
    done

    #案例
    SUM=0
    i=0
    while [ $i -le $1 ]
    do
    SUM=$[$SUM+$i]
    i=$[$i+1]
    done
    echo "SUM=$SUM"
  • read读取控制台输入

    • read 选项 参数
    选项 功能
    -p 指定读取值时的提示符
    -t 指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了
    1
    2
    3
    4
    5
    6
    7
    #读取控制台输入一个NUM1值
    read -p "input a number:" NUM1
    echo "NUM1=$NUM1"

    #读取控制台输入一个NUM2值,并在10秒内输入
    read -t 10 -p "input a number:" NUM2
    echo "NUM2=$NUM2"
  • 系统函数

    • basename
      • 功能:返回完整路径最后/的部分,常用于获取文件名
      • 语法:basename 文件路径[ 文件后缀]
      • 案例:basename /root/aaa.txtorbasename /root/aaa.txt .txt
    • dirname
      • 功能:返回完整路径最后/的前面的部分,常用于返回路径部分
      • 语法:dirname 文件路径
      • 案例:dirname /root/aaa.txt
  • 自定义函数

    1
    2
    3
    4
    5
    6
    7
    function getSum(){
    SUM=$[$n1+$n2]
    echo "$SUM"
    }
    read -p "input a number:" n1
    read -p "input a number again:" n2
    getSum $n1 $n2