设备管理

Linux系统中设备是用文件来表示的,每种设备都被抽象为设备文件的形式,这样,就给应用程序一个一致的文件界面,方便应用程序和操作系统之间的通信。
设备文件集中放置在/dev目录下,一般有几千个,不管有没有对应的真实设备,Linux系统在安装的时候都会自动预先创建。

磁盘设备

Linux系统磁盘设备命名方式遵循一定的规则。

前两个字母表示分区所在设备的类型:

  • hd:IDE硬盘
  • sd:SCSI硬盘(U盘,移动硬盘等)
    第三个字母表示分区在哪个设备上
  • hda:第一块IDE硬盘
  • sda:第一块SCSI硬盘
  • sdb:第二块SCSI硬盘

数字表示分区的次序:

  • hda1:第一块IDE硬盘第一分区
  • sdb2:第二块SCSI硬盘第二个分区
    查看硬盘及分区情况
fdisk -l
lsblk

挂载的文件系统类型

可以挂载:ext、FAT、NTFS 、 ext2(extended file system )、ext3、MINIX、MSDOS、SYSV

  1. Linux系统的第一个文件系统是Minix(文件名不能超过14个字符,文件大小不能超过64MB)
  2. ext:1992年设计,是第一个专为linux设计的文件系统,文件大小可到2GB,文件名支持255字符,性能不佳
  3. ext2: 1993年设计,提高性能
  4. ext3:采用日志式文件系统技术(Journaling File System,独立的日志文件跟踪磁盘内容的变化),目前各个linux发行版使用

VFS

Linux引进ext文件系统时有了一个重大的改进:把文件系统从操作系统和系统服务中分离出来,在它们之间使用了一个接口层—虚拟文件系统VFS(Virtual File System)

Linux系统可以支持多种文件系统,为此,必须使用一种统一的接口,这就是虚拟文件系统(VFS)。通过VFS将不同文件系统的实现细节隐藏起来,因而从外部看上去,所有的文件系统都是一样的。

VFS并不是一个实际的文件系统:只存在于内存,系统启动时建立,系统关闭时消亡

VFS功能包括:

  • 记录可用文件系统的类型
  • 将设备与对应的文件系统联系起来
  • 处理面向文件的通用操作
  • 涉及到针对文件系统的操作时,把他们映射到相关的物理文件系统

挂载设备信息

计算机系统中,所有的存储设备都是以目录树的形式对文件进行管理的 。
在Linux系统中,所有的文件都是在以“/”目录为根的一棵“大”目录树中进行管理。
如果要使用USB存储设备、光盘或软盘等存储设备,必须将这些设备中的“小”目录树像嫁接一样挂载(mount)到Linux系统的“大”目录树中。

挂载对象的文件系统类型:/proc/filesystems

vfat (fat32)     ext2    ext3     iso9660

挂载对象的设备名称;
在Linux系统中,设备名称通常都在/dev目录下,设备名称的命名是有规则的 ;

/dev/hda1   /dev/sda2  /dev/fd0  /dev/cdrom

设备挂载到哪一目录,即挂载点。
Linux系统中有一个/mnt目录,专门用作挂载点(mount point)目录
在挂载设备时首先查看挂载点目录是否存在,如果不存在必须首先创建该目录,否则mount命令无法正常执行。

挂载设备过程

  1. 查看设备:使用命令“fdisk -l”可以查看系统的存储设备
  2. 挂载设备 :首先使用mkdir命令建立挂载点目录,然后再使用mount命令挂载相关设备
  3. 访问设备
  4. 卸载设备 :用户在使用完挂载设备后,不能直接将挂载设备从系统拔出,否则会出现问题,严重的会导致系统崩溃。用户必须先执行卸载命令然后再该设备拔出umount [挂载点或设备名]

mkfs

mkfs [选项][-t <文件系统类型>] [设备名称] [区块数]

说明:把指定的设备格式为指定的文件系统。

例如

  • 格式化硬盘时:
    mkfs -t ext3 /dev/hda4
  • 格式化软盘时,需要指定设备名和区块数,每个区块大约1000个字节,一张1.44MB的软盘对应1440个区块。格式化指令为:
    mkfs -t ext3 /dev/fd0 1440

mount

mount [选项] <挂载设备名称> <挂载点>
选项:

  • t 挂载的文件系统 [ext2 ext3 vfat iso9660]
    例如:
    mount -t ext3 /dev/fd0 /mnt/floppy
  • o [参数=值] ,对于挂载的不同类型的设备可以使用一组不同的参数。[ro rw auto iocharset]
    mount -o iocharset=cp936 /dev/sda1 /mnt/usb

df

磁盘空间使用情况
df [选项]

  • a : 显示所有文件系统的磁盘使用情况
  • h : 以友好直观方式显示信息,即以KB或MB为单位
  • T : 显示文件系统类型

例子:以友好直观方式显示所有文件系统的使用情况,并列出文件系统类型

df -ahT

du

统计目录或文件所占磁盘空间大小
du [选项/参数] [目录名…]

  • a : 递归显示制定目录中各个文件及下级目录中各文件占用的数据块数
  • h : 以友好直观方式显示信息,即以KB或MB为单位
  • b : 以字节为单位列出磁盘空间使用情况
  • k : 以KB为单位显示
  • s : 对每个目录参数只给出占用的数据块总数
    例子:以KB为单位,显示/tmp目录占用的磁盘空间情况

du -k /tmp

账号管理和查看命令

  • whoami命令的功能在于显示用户自身的用户名。
  • who [选项]:该命令主要用于查看当前在线的用户情况
    -H:显示时加上头标志
  • w命令 :用于显示登录到系统的用户情况,是who的增强版 w | more
  • id [选项] : 显示用户信息
    -g:显示工作组信息
    -u:显示用户信息
  • finger命令:可用于查找和显示用户信息,并且在查找后显示指定账号的相关信息
  • chfn命令:能够改变系统存储的用户信息
  • 切换用户身份:su [用户名]

进程

进程的概念

Linux操作系统包括三种不同类型的进程,每种进程都有自己的特点和属性:

  • 交互进程:由shell启动的进程。
  • 批处理进程:这种进程和终端没有联系,是一个进程序列。
  • 守护进程:在后台持续运行的进程。

启动进程/手工启动

  • 前台启动:一般地,用户键入一个命令,就已经启动了一个前台的进程。
    中断前台进程
    ctrl+c/
    kill
  • 后台启动:对于非常耗时进程,可以让进程在后台运行。从后台启动进程其实就是在命令结尾加上一个“&”号,例:updaedb &
  1. jobs 显示所有后台进程
  2. ctrl+z 前台->后台,并暂停
  3. fg 将后台进程调到前台执行
  4. bg 将一个后台暂停的进程,继续执行

at

指定在将来的某个时间点执行某些命令,通过atd守护进程来实现

systemctl status atd

at [选项] TIME

at -l / atq  #列出所有的作业
at -d / atrm 任务号  #删除作业
at -q #指定队列来存储(默认为a队列),队列的编号为a-z A-Z,共52个,字母越大,优先级越低。

执行方式:

  • 交互式
    在shell提示符下输入“at 时间”,然后按回车键。这时在下一行shell会等待用户继续输入要执行的命令。每一行输入一个命令,所有命令都输入完毕后按Ctrl+d键结束。

  • 指定文件
    将各个命令写入shell脚本中,然后使用下面格式设置在指定时间执行shell脚本中的命令:
    at 时间 -f 脚本文件。

执行结果会发邮件通知
/var/spool/mail/xxx

时间格式
  • 具体时间日期 hh:mm MM/DD/YY
    23:59 03/15/2017
  • 模糊词语格式 hh:mm midnight tomorrow am…
    17:20 tomorrow
  • 相对计时法 时间点 + 多少 + 时间单位
    now + 2 minutes
    5pm + 3 days

cron

at命令产生的进程调度不具有周期性,只能在时间条件满足时执行一次。但很多时候需要重复地周期性地执行某个程序。crontab用来让使用者在固定时间或固定时间间隔执行程序。

格式:

crontab [ -u user ] 文件

crontab [ -u user ] { -l | -r | -e }

只有root用户可以指定他人的时间表

主要参数

  • e:执行文字编辑器来设定时程表,内定的文字编辑器是vi
  • r:删除目前的时程表
  • l:列出目前的时程表
    和at命令相比,crontab命令适合完成固定周期的任务

原理

  1. cron命令在系统启动时由一个shell脚本自动启动,进入后台,crond守护进程。
  2. cron启动后搜索/var/spool/cron目录,寻找以/etc/passwd文件中的用户名命名的crontab文件,被找到的这种文件将载入内存。
  3. 如果没有crontab文件,就转入“休眠”状态,释放系统资源。
  4. cron每分钟“醒”过来一次,查看当前是否有需要运行的命令。
  5. 如果发现某个用户设置了crontab文件,它将以该用户的身份去运行文件中指定的命令。命令执行结束后,任何输出都将作为邮件发送给crontab的所有者,或者/etc/crontab文件中MAILTO环境变量中指定的用户。

对用户来说,只需要关注自己的crontab文件的撰写,不需干涉crond进程的执行。因为一个用户只有一个crontab文件,crontab文件不能直接创建或者直接修改,必须通过crontab命令得到。crontab命令用于安装、删除或者列出用于驱动cron后台进程的crontab文件 。

crontab源文件格式

<minute> <hour> <day-of-month> <month-of-year> <day-of-week> <commands>

  • f1: 分钟,00-59
  • f2: 小时,00-23
  • f3: 一个月份中的第几天,01-31
  • f4: 月份,01-12
  • f5: 一个星期中的第几天,0-6
  • commands: 要执行的程序
# 每月每天12点执行一次echo hello
0 12 * * * echo hello
# 在12月内,每天早上6点到12点,每隔20分钟执行一次/usr/bin/backup
*/20 6-12 * 12 * /usr/bin/backup
# 每月每天的午夜0点20分,2点20分,4点20分…显示当前时间
20 0-23/2 * * * date

进程管理

ps

进程查看命令

ps [选项]

主要选项的含义如下:

  • e:显示所有进程;
  • f : 采用全格式显示;
  • h:不显示标题;
  • l:采用详细的格式来显示进程;
  • a:显示所有终端上的进程,包括其他用户的进程;
  • r:只显示当前终端上正在运行的进程;
  • x:显示所有进程,不以终端来区分;
  • u:以用户为主的格式来显示进程;

pstree

进程查看命令

pstree [选项] [pid | user]

主要选项的含义如下:

  • a:显示该进程的完整指令及参数;
  • p : 显示是将PID号一起显示;
  • pid:指定显示某进程信息;
  • user:指定显示某用户信息;

kill

删除进程命令

kill [-s <信号> | -p ] [ -a ] <进程号> ..

kill -l [信号] :显示信号详情

选项的含义如下:

  • s:指定需要送出的信号。既可以是信号名也可以是信号名对应的数字。
  • HUP(1):重跑 kill -1
  • KILL(9):强制杀死 kill -9
  • TERM(15) (预设信号):结束 kill -15

强行中止(经常使用杀掉)一个进程标识号为324的进程:kill -9 324

作用:

  • 解除Linux系统的死锁
  • 使用命令回收内存

killall

Linux下还提供了一个killall命令,可以直接使用进程的名字而不是进程标识号,例如:

killall -HUP inetd

top

系统监控命令:能显示实时的进程列表,而且还能实时监视系统资源,包括内存、交换分区和CPU的使用率等。
top命令使用过程中,可以使用一些交互的命令来完成其它参数的功能。这些命令是通过快捷键启动的。

  • <空格>:立刻刷新。
  • P:根据CPU使用大小进行排序。
  • M:根据使用内存大小进行排序。
  • T:根据时间、累计时间排序。
  • t:切换显示进程和CPU状态信息。
  • m:切换显示内存信息。
  • c:切换显示命令名称和完整命令行。
  • q:退出top命令。

free

查看系统内存的使用情况

日志查看

日志文件(log files)是包含关于系统消息的文件,包括内核、服务、在系统上运行的应用程序等。
不同的日志文件记载不同的信息。
多数的日志文件位于/var/log目录下。
某些程序(如samba)在/var/log中有单独的日志文件目录。
日志可以滚动


多数日志文件都使用纯文本格式,可以使用任何文本编辑器如vi来查看它们。
大多数日志文件都需要拥有特权才允许查看。

系统初始化过程

BIOS初始化

主要负责计算机硬件检测,确定启动引导顺序,并从可引导设备中加载和执行引导程序(如磁盘主引导分区MBR) ,确定从哪里可以引导并启动操作系统,引导成功后,交由内核负责

GRUB加载

Boot Loader(启动加载)管理程序
将引导装载程序安装到主引导记录(MBR)的程序
用户能够开始操作系统的选择,在内核引导时传递特定指令给内核,或是在内核引导前确定一些系统参数。
支持命令交互工具,提供非常方便的引导程序修复功能,并支持引导菜单的加密保护

内核初始化

用户在GRUB引导菜单中选择了合适的启动项后,操作系统正式进入加载内核的功能。
内核初始化:

  1. 硬件设备的检测
  2. 设备驱动程序的初始化
  3. 以只读方式挂载根文件系统
  4. 启动第一个应用进程init

第一个初始进程init启动

当内核启动之后,通过启动用户级程序init来完成引导进程的内核部分。
init总是第一个进程(PID=1)
init进程扮演了终极父进程的角色,失去了父进程的子进程就会以init作为它们的父进程。

确定系统运行级别

读取配置文件/etc/inittab,这是一个系统初始化脚本程序,用于确定系统启动的运行级别,定义系统常规功能。

运行系统初始化脚本

/etc/rc.d/rc.sysinit 是系统的初始化脚本,系统的大部分功能都由这个脚本实现

运行指定级别目录内的脚本

每一个特定的运行级别都会有一个与之相对应的目录,共有7个运行界别(/etc/rc.d/rc[x].d),每一个运行级别的目录内都有一些可执行脚本。

运行用户自定义脚本

用户可以自定义一些系统启动时启动的脚本,通过修改/etc/rc.d/rc.local的内容来增加用户自己需要的功能。

Linux 设备管理和进程管理相关推荐

  1. 专业介绍Linux中的进程管理

    Linux中的进程管理 1.什么是进程? 1)进程就是系统中处于执行期的工作. 对于[执行]两个字需要作出特别解释:执行并不同于运行,因为系统中的进程的状态大概分为四种: 进程状态 R(Running ...

  2. 【Linux 内核】进程管理 ( 进程状态 | 进程创建 | 进程终止 | 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 )

    文章目录 一.进程状态 二.进程创建 三.进程终止 ( 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 ) 一.进程状态 Linux 进 ...

  3. 【Linux 内核】进程管理 ( 内核线程概念 | 内核线程、普通进程、用户线程 | 内核线程与普通进程区别 | 内核线程主要用途 | 内核线程创建函数 kernel_thread 源码 )

    文章目录 一.内核线程概念 二.内核线程.普通进程.用户线程 三.内核线程.普通进程区别 四.内核线程主要用途 五.内核线程创建函数 kernel_thread 源码 一.内核线程概念 直接 由 Li ...

  4. 【Linux 内核】进程管理 ( Linux 内核中的进程状态 | TASK_RUNNING | TASK_INTERRUPTIBLE | __TASK_STOPPED | EXIT_ZOMBIE )

    文章目录 一.Linux 内核中的进程状态 二.TASK_RUNNING 状态 三.TASK_RUNNING 状态 四.TASK_UNINTERRUPTIBLE 状态 五.__TASK_STOPPED ...

  5. Linux系统的进程管理

    Linux系统的进程管理 一.系统进程介绍 1.进程概念 2.进程特点 3.进程类型 二.查看系统进程 1.PS命令 2.查看系统进程 3.ps aux结果说明 4.top命令 ①top命令使用方法 ...

  6. Linux入门之进程管理(4)之进程与文件

    Linux入门之进程管理(4)之进程与文件 前面使用进程相关命令管理工具都是根据进程编号或者进程名称及其其它属性信息来查看和处理相关进程的,但是在某些情况下,想要查看某个文件或者某个设备被哪些进程所使 ...

  7. Linux中的进程管理

    Linux中的进程管理 Linux中的进程管理 Linux中的进程管理 1.进程 进程的定义 进程和线程 进程状态 2.进程查看命令 ps pgrep pidof top 3.进程优先级 4.进程前后 ...

  8. 操作系统实验报告——实验一:熟悉Linux命令及进程管理

    实验目的 熟悉Linux系统,掌握Linux系统的登入.退出等操作: 熟悉Linux命令及进程管理.作业控制: 学会使用Linux下C语言编程的基本知识: 掌握Linux中vi的基本操作: 掌握Lin ...

  9. Linux网络与进程管理

    本文主要介绍了网络与进程的相关内容以及在Linux上如何进行网络与进程管理,包括以太网介绍,TCP/IP,网络分层模型,IP地址的规划:同时介绍了Linux内核在进程管理方面的相关机制 文章目录 一. ...

最新文章

  1. React-Native中的flexbox布局的使用
  2. Pytorch自定义数据集
  3. 2020 5月 每日花语
  4. Office远程代码执行漏洞补丁(905413)
  5. Vue——自定义组件的 v-model
  6. python 类 对象 魔法方法概念+习题
  7. Spaly_Tree 模版
  8. 传统排插即将淘汰,品胜智能排插率先符合新国标
  9. linux指定查看文件目录,【Linux】查看指定目录下的每个文件或目录的大小
  10. ad采样做按键开关_磐石按键测试机解决各种按键测试问题
  11. Vue 左右翻页,点赞动画
  12. WebSocket | 为什么你前后端推送不会用?因为你少了WebSocket的帮忙
  13. 扫描线填充算法代码_手写算法并记住它:计数排序
  14. java对象结构 对象头 Markword
  15. solr6.6 solrJ索引富文本(word/pdf)文件
  16. 使用h5制作一个五子棋游戏
  17. 钟摆小游戏的开发过程
  18. SpringCloud基础
  19. M1安装gradle查看版本后失败的解决办法
  20. 赛舟-体验版 α测试调试方法

热门文章

  1. java停车场管理系统程序设计代码_社区养老服务管理系统,java程序设计
  2. 【类】变量复用,函数复用
  3. [luoguP2801] 教主的魔法(二分 + 分块)
  4. [程序设计语言] 堆和栈的全面总结
  5. 创建一个简单的WCF程序
  6. Windows Phone开发(46):与Socket有个约会 转:http://blog.csdn.net/tcjiaan/article/details/7669315...
  7. [摘抄]软件设计模式的几个原则
  8. 触发器批量更新 用游标,一个一个处理
  9. ASP.NET应用程序客户端执行的优化小技巧
  10. ESFramework介绍之(23)―― AgileTcp