情景题之小明的Linux实习之旅:linux实战练习1(下)【基础命令,权限修改,日志查询,进程管理...】

小明的Linux实习之旅:基础指令练习情景练习题下

前景提要

小明刚刚开始他的Linux测试开发实习。第一天,他的leader给了他一系列任务,帮助他熟悉Linux命令行操作。以下是小明的冒险故事。

小明是怎么做的

场景1:初识Linux,创建目录和文件

  1. 小明的导师要求他创建一个项目目录,并在其中创建一个README文件。

    shell 复制代码
    mkdir ~/project     #make directory建立目录
    cd ~/project    #change directory,改变目录或切换到另一个文件夹
    touch README.md    #碰到文件
  2. 小明在README.md中写下了项目简介,但不小心写错了内容。

    shell 复制代码
    vi README.md
    # 按i进入插入模式,输入"这是小明的第一个项目。"
    # 但写成了"这是小明的第一个错误。"
    # 按Esc键,输入:wq保存并退出
  3. 小明发现写错了,需要修改内容。

    shell 复制代码
    vi README.md
    # 按i进入插入模式,将"错误"改为"项目"
    # 按Esc键,输入:wq保存并退出
  4. 导师检查后,认为小明的描述还不够详细,要求他再添加一些信息。

    shell 复制代码
    echo "项目描述:这是一个用于学习Linux基本命令的项目。" >> README.md
    cat README.md     #concatenate(连锁,用于连接并显示文件内容)

小明的电脑界面:

场景2:权限管理,小明的权限困惑

  1. 导师提醒小明要注意文件权限管理,要求他将README.md的权限修改为755。

    shell 复制代码
    chmod 755 README.md    #change mode改变权限
    ls -l README.md        #list(列出目录内容)
  2. 导师还要求小明将项目目录的所有者改为root。

    shell 复制代码
    sudo chown root:root ~/project   
    #superuser do,用于执行需要超级用户(root)权限的命令,而不需要实际切换到root用户
    #change owner改变所有者
    ls -ld ~/project   #d:directory,表示只显示目录的信息不显示内部文件(夹)

3.导师刚才说错了,他是要确认该项目目录不是root,因为之后需要进行一些写入操作。小明于是默默地将项目目录的所有者改回来。

shell 复制代码
  groups christine  #确认原来默认群组是否也是christine(我的用户名)
  # 结果:christine : christine
  [christine@localhost rongyi_project]$ sudo chown 
  # 结果:christine:christine ~/rongyi_project
  [christine@localhost rongyi_project]$ ls -ld ~/rongyi_project
  # 结果: drwxrwxr-x. 2 christine christine 68 6月   9 00:46 /home/christine/rongyi_project

小明的电脑界面:

场景3:打包与解压,小明的备份操作

  1. 导师告诉小明要定期备份项目目录,于是小明打包了整个项目目录。

    shell 复制代码
    #确保回到home页面
    cd ~
    # 使用 tar 命令来打包目录时,压缩文件会被存放在执行命令时所在的目录中。
    tar -cvf project_v1.tar project   #区别~/project
    ls -lh project_v1.tar
  2. 一天,小明需要恢复之前的备份,于是他解压了备份文件。

    shell 复制代码
    mkdir ~/backup #新建一个备份目录用来放解压文件
    tar -xvf project_v1.tar -C backup   #-C一定是大写,tar方法敏感
    cd backup
    ls

小明的电脑界面:

场景4:使用Grep,小明的搜索技能

  1. 小明需要在项目目录中查找所有包含"项目"字样的文件。

    shell 复制代码
    grep -r "项目" ~/project
    # grep:文本搜索工具,允许你使用正则表达式来搜索文本。
    # -r:递归搜索,即搜索指定目录及其所有子目录中的文件。
  2. 导师要求他找出README.md文件中所有包含"描述"字样的行。

    shell 复制代码
    grep "描述" ~/project/README.md

小明的电脑界面:

场景5:系统服务管理,小明的首次接触

  1. 导师让小明检查防火墙状态,并确保它是开启的。

    shell 复制代码
    sudo systemctl status firewalld
    sudo systemctl start firewalld
  2. 导师让小明启动MySQL服务并查看其状态。

    shell 复制代码
    sudo systemctl start mysql
    sudo systemctl status mysql
  3. 小明还需要启动Redis服务并检查其状态。

    shell 复制代码
    sudo systemctl start redis
    sudo systemctl status redis
  4. 最后,导师让小明查看网络接口的状态。

    shell 复制代码
    ifconfig

小明的电脑界面:

小明笔记大公开:

systemctlsystemd的控制工具(control tool)的缩写。systemd是一个初始化系统(init system)和用户空间(userspace)的系统管理器,用于管理系统资源和服务。

  • systemctl start <service>:启动一个服务
  • systemctl stop <service>:停止一个服务
  • systemctl restart <service>:重启一个服务
  • systemctl status <service>:查询一个服务的状态
  • systemctl enable <service>:在系统启动时自动启动一个服务
  • systemctl disable <service>:在系统启动时禁用一个服务的自动启动

场景6:进程管理,小明的多任务处理

  1. 小明查看了系统中所有正在运行的进程。

    shell 复制代码
    ps -ef
  2. 小明搜到了一个排序方法,发现有一个进程占用了大量内存资源,于是他结束了该进程。。

    shell 复制代码
    ps aux --sort=-%mem   #按内存使用量排序:通过管道和 sort 命令按 %MEM 或 RSS 列排序,找到内存占用最高的进程。
    
    # kill <PID>    #新手不要学小明,容易坏事  终止指定PID
  3. 小明根据进程名称结束了一个测试进程。

    shell 复制代码
    pkill test_process  #终止指定进程名
小明笔记大公开:
  • UID : 用户ID。显示了哪个用户拥有该进程。例如,root 表示该进程是由 root 用户拥有的。
  • PID: 进程ID。这是一个唯一的数字,用于标识系统中的每个进程。
  • PPID: 父进程ID。这是创建该进程的进程的PID。
  • C : CPU 使用率。这表示进程最近的 CPU 使用率,通常是一个介于 0.0(没有使用)和 100.0(完全使用)之间的十进制数。但在这里,由于 ps 命令的默认输出格式,它可能只是一个简单的数字,代表优先级。
  • STIME: 启动时间。这显示了进程开始运行的时间。
  • TTY : 终端类型。通常表示进程在哪个终端上运行,或者如果没有关联到终端,则可能显示为 ?
  • TIME: CPU 时间。这显示了进程自启动以来所使用的 CPU 时间总量。
  • CMD: 命令。这显示了启动进程的命令名或命令行。

常见的:

  • systemd 是系统的初始化系统和服务管理器,负责启动和管理系统进程。
  • kthreaddksoftirqdkworkermigrationrcu_bhrcu_sched 都是内核线程,它们处理系统的低级任务,如中断、调度和其他内核功能。这些通常不由用户直接管理。

场景7:定时任务与系统状态

  1. 导师要求小明设置一个定时任务,每天备份项目目录。

    shell 复制代码
    crontab -e
    # 添加以下行以每天午夜备份项目目录:
    # 0 0 * * * tar -cvf ~/project_v1_$(date +\%F).tar ~/rongyi_project
  2. 小明查看了当前用户的所有定时任务。

    shell 复制代码
    crontab -l
小明笔记大公开:

crontab 是由 "cron" 和 "tab" 两个单词组成的缩写。

  1. cron:这是 Unix 和 Linux 系统中用于定时执行任务的守护进程(daemon)的名称。它会在后台运行,并每分钟检查是否有预定的作业需要执行。这些作业通常被称为 "cron jobs"。
  2. tab :这里可以理解为表格(table)的简写,因为 crontab 文件实际上是一个用于存储和管理定时任务的列表或表格。

因此,crontab 的整体意思是"cron的表格"或"cron的任务列表"。

crontab 文件中,每一行代表一个任务,包含了该任务的时间设置和要执行的命令或脚本。这些时间设置可以精确到分钟、小时、日期、月份和星期等不同的时间单位。

  1. 小明查看了系统运行时间和负载信息。

    shell 复制代码
    uptime
小明笔记大公开之uptime命令:

显示系统已经运行了多长时间、当前有多少用户登录、以及系统在过去的 1 分钟、5 分钟和 15 分钟内的平均负载。

[christine@localhost ~]$ uptime

06:08:38 up 19:35, 5 users, load average: 0.11, 0.22, 0.26

在上一行小明得到结果中:

  • 06:08:38:当前的系统时间。
  • up 19:35:系统已经运行了 19 小时 35 分钟。(看得出小明很努力,忘了断开)
  • 5 users:当前有 5 个用户登录到系统。
  • load average: 0.11, 0.22, 0.26:系统在过去的 1 分钟、5 分钟和 15 分钟内的平均负载。

负载平均值是一个表示系统负载的度量,但它不是直接表示 CPU 使用率或正在运行的进程数量。它实际上是系统中处于可运行(或等待运行)状态的进程队列的平均长度。负载值越低,表示系统越空闲;负载值越高,表示系统越繁忙。

  • 0.11:过去 1 分钟内的平均负载。
  • 0.22:过去 5 分钟内的平均负载。
  • 0.26:过去 15 分钟内的平均负载。

以小明的这个情况,负载值都很低,表示系统目前很空闲,有足够的处理能力来处理额外的任务。

  1. 小明查看了系统内存使用情况。
shell 复制代码
free -h
小明笔记大公开之关于内存:

当运行 free -h 命令时,查看系统上的内存使用情况,其中 -h 选项表示"human-readable",即以人类可读的格式(如 G、M)显示结果。

[christine@localhost ~]$ free -h
total used free shared buff/cache available
Mem: 972M 580M 64M 124M 327M 65M
Swap: 2.0G 496M 1.5G

  • Mem: 这部分显示了物理内存(RAM)的使用情况。
    • total: 总的物理内存大小,这里是 972M(972 兆字节)。
    • used: 当前已使用的物理内存,这里是 580M。
    • free: 当前未使用的物理内存,这里是 64M。
    • shared: 被多个进程共享的内存量,这里是 124M。
    • buff/cache: 缓存和缓冲区使用的内存量,这部分内存可以被回收以满足应用程序的需求,而不必从磁盘读取数据。这里是 327M。
    • available: 估计的、在不交换出的情况下,可以分配给应用程序的内存量。这是 "free" 和 "buff/cache" 的一个估计值,考虑了它们被回收的可能性。这里是 65M。
  • Swap: 这部分显示了交换空间(swap space)的使用情况。
    • total: 总的交换空间大小,这里是 2.0G(2 吉字节)。
    • used: 当前已使用的交换空间,这里是 496M。
    • free: 当前未使用的交换空间,这里是 1.5G。

从小明的输出中,可以看到物理内存的大部分(超过一半)已经被使用,但交换空间的使用量相对较少(不到四分之一)。如果这个系统开始大量使用交换空间,那么性能可能会受到影响,因为从磁盘读取数据通常比从 RAM 读取要慢得多。不过,在这个例子中,系统似乎还有足够的 RAM 和交换空间来处理当前的工作负载。

  1. 小明查看了磁盘使用情况。
shell 复制代码
df -h
小明笔记大公开之uptime命令:

当运行 df -h 命令时,你正在查看文件系统的磁盘空间使用情况。-h 选项表示"human-readable",即以人类可读的格式(如 G、M)显示结果。

[christine@localhost ~]$ df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 38G 5.8G 32G 16% /
devtmpfs 471M 0 471M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 15M 472M 4% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 297M 147M 151M 50% /boot
tmpfs 98M 4.0K 98M 1% /run/user/42
tmpfs 98M 32K 98M 1% /run/user/1000

  • 文件系统:文件系统的名称,通常与挂载点或设备关联。
  • 容量:文件系统的总容量。
  • 已用:已使用的磁盘空间。
  • 可用:剩余的磁盘空间。
  • 已用%:已使用的磁盘空间的百分比。
  • 挂载点:文件系统被挂载到哪个目录。

在你的输出中:

  • /dev/sda3 是主要的根文件系统(root filesystem),它位于 sda 磁盘的第三个分区上,总共有 38G 的空间,已经使用了 5.8G,剩余 32G,使用了 16% 的空间,并挂载在根目录 / 下。
  • devtmpfs 和多个 tmpfs 是临时文件系统,用于存储临时文件或作为内存中的文件系统使用。这些文件系统通常不会占用硬盘空间,而是使用 RAM。从输出中可以看出,它们几乎没有被使用。
  • /dev/sda1/boot 分区,用于存放引导加载器(如 GRUB)和内核文件。这个分区总共有 297M 的空间,已经使用了 147M,剩余 151M,使用了 50% 的空间。
  • /run/user/42/run/user/1000 是为特定用户(ID 为 42 和 1000 的用户)提供的临时目录,通常用于存储会话特定的文件。这些目录也没有被大量使用。

从输出中,可以看到主要的文件系统和引导分区都有足够的可用空间。如果小明看到任何文件系统的已用百分比接近或超过 100%,那就需要采取措施来释放空间或扩展文件系统的容量。

  1. 小明使用top命令实时查看系统资源使用情况。
shell 复制代码
top
小明笔记大公开之top命令:

用于实时监视系统的动态运行状况。当运行 top 命令时,它会显示系统中各个进程的资源占用情况,包括 CPU 使用率、内存占用、运行时间等。同时,top 还会更新这些信息,以便可以看到系统的实时状态。

输出解释:

  • 第一行:显示系统时间、系统运行时间、登录用户数、系统负载(最近1分钟、5分钟、15分钟的平均值)。
  • 第二行:显示进程总数、正在运行的进程数、休眠的进程数、停止的进程数、僵尸进程数。
  • 第三行:显示 CPU 状态,包括用户空间占用 CPU 百分比、内核空间占用 CPU 百分比、空闲 CPU 百分比、等待 I/O 操作的 CPU 百分比、硬中断和软中断占用的 CPU 百分比。
  • 第四行:显示物理内存总量、已使用的物理内存、空闲的物理内存、已缓冲的内存。
  • 第五行:显示交换空间总量、已使用的交换空间、空闲的交换空间。

接下来是进程列表,每个进程都有一行信息,包括进程 ID、用户、优先级、CPU 占用率、内存占用、进程状态等。

常用交互命令:

top 运行过程中,可以按以下键进行交互:

  • P:按 CPU 使用率排序。
  • M:按内存使用量排序。
  • N:以 PID 顺序排序。
  • T:按 CPU 时间排序。
  • R:对当前排序进行反转。
  • k:杀死一个进程(需要输入 PID)。
  • q:退出 。
  • h:显示帮助信息。

注意了:

  • top 命令提供的信息是实时的,所以它会持续更新。
  • 如果你发现某个进程的 CPU 或内存占用过高,可能需要进一步检查该进程。
  • 在使用 top 时,要注意系统负载和 CPU 使用率,以确保系统没有过载或运行缓慢。

场景8:dd命令,小明的惊险操作

*这几步不用跟着做,容易出问题,了解即可

  1. 小明使用dd命令备份数据。

    shell 复制代码
    sudo dd if=/dev/sda of=~/sda_backup.img bs=4M
    # dd 命令用于低级复制和转换文件,在这里,它被用来复制整个硬盘。名称来源于 "data duplicator" 或 "disk dump" 的缩写
    # if 是 "input file" 的缩写。of 是 "output file" 的缩写。bs 是 "block size" 的缩写。
    # if=/dev/sda: 这是 dd 命令的一个选项,指定输入文件(或设备)。
    # 注意:/dev/sda 通常指的是整个硬盘,而不是某个分区(如 /dev/sda1)。
    # bs=4M是 dd 命令的块大小(block size)选项。指定了每次读取和写入的块大小为 4MB,可以提高复制大文件的效率。
小明的提醒:

警告 :这条命令极其危险,因为它会覆盖 ~/sda_backup.img 文件(如果它已经存在),并且如果错误地指定了 ifof 参数,它可能会导致数据丢失。在执行此类命令之前,请确保你完全理解它的工作原理,并已经采取了适当的预防措施(如备份)。

此外,对于备份整个硬盘,更安全和更常见的方法是使用专业的磁盘镜像工具,如 ddrescue(它可以处理坏扇区)或图形界面的工具,如 CloneZilla。

  1. 小明试图恢复数据,但不小心输入了错误的输出路径,导致系统崩溃。
shell 复制代码
sudo dd if=~/sda_backup.img of=/wrong/path bs=4M
# 系统崩溃,恢复重启后导师解释了错误的原因
  1. 小明再试一次,这次成功恢复了数据。
shell 复制代码
sudo dd if=~/sda_backup.img of=/dev/sda bs=4M
相关推荐
远游客07132 小时前
centos stream 8下载安装遇到的坑
linux·服务器·centos
马甲是掉不了一点的<.<2 小时前
本地电脑使用命令行上传文件至远程服务器
linux·scp·cmd·远程文件上传
jingyu飞鸟2 小时前
centos-stream9系统安装docker
linux·docker·centos
超爱吃士力架2 小时前
邀请逻辑
java·linux·后端
冷眼看人间恩怨3 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
LIKEYYLL4 小时前
GNU Octave:特性、使用案例、工具箱、环境与界面
服务器·gnu
云云3214 小时前
搭建云手机平台的技术要求?
服务器·线性代数·安全·智能手机·矩阵
云云3214 小时前
云手机有哪些用途?云手机选择推荐
服务器·线性代数·安全·智能手机·矩阵
cominglately5 小时前
centos单机部署seata
linux·运维·centos
魏 无羡5 小时前
linux CentOS系统上卸载docker
linux·kubernetes·centos