操作系统总结3

1

参考

《现代操作系统》
https://blog.csdn.net/csdn_blog_lcl/article/details/80391570

磁盘

Linux常用命令

命令的格式一般为 command [-options] param1 param2

1
2
ls cat wc more less cd top cp mv rm pwd mkdir ps kill chmod grep sync
sed awk

ls

显示文件的文件名与相关属性,选项-al表示列出所有文件的详细权限与属性

1
2
ls
ls -al

cat

查看文本文件的内容,后接要查看的文件名

1
cat 1.txt

wc

统计指定文件的字节数,字数,行数

1
2
3
4
5
6
7
8
9
wc -c 1.txt #字节数
wc -l 1.txt #行数
wc -m 1.txt #字符数
wc -w 1.txt #统计字数,一个字被定义为由空白、调格或换行字符分割的字符串
wc -L 1.txt #打印最长行的长度
以上打印在打印数字的同时也会打印文件名
以下命令只会打印数字
cat 1.txt |wc -l
ls |wc -w #当前目录下的文件数

more

与cat类似,将整个文件的内容由上到下显示到屏幕上,会一页一页的显示,
按空格下显示下一页,按b显示上一页

1
more 1.txt

less

less也是显示文件内容

1
less 1.txt

cd

切换目录,可以是绝对路径或相对路径

1
2
cd / #进入系统根目录
cd .. #退回到前一个目录

top

top是Linux常用的性能分析工具,能够实时显示系统中各个进程的资源占用
情况,类似于Windows的任务管理器

1
top #显示当前系统正在执行的进程的相关信息,包括进程ID、内存占用率、CPU占用率等

cp

用于复制文件,copy之意,它还可以把多个文件一次性地复制到一个目录下

1
2
3
-a :将文件的特性一起复制
cp -a file1 file2 #连同文件的所有特性把文件file1复制成文件file2
cp file1 file2 file3 dir #把文件file1、file2、file3复制到目录dir中

mv

该命令用于移动文件、目录或更名

1
2
3
# 该命令可以把一个文件或多个文件一次移动一个文件夹中,但是最后一个目标文件一定要是“目录”
mv file1 file2 file3 dir # 把文件file1、file2、file3移动到目录dir中
mv file1 file2 # 把文件file1重命名为file2

rm

删除文件或目录

1
2
3
-f :就是force的意思,忽略不存在的文件,不会出现警告消息
rm -i file # 删除文件file,在删除之前会询问是否进行该操作
rm -fr dir # 强制删除目录dir中的所有文件

pwd

显示当前目录的完整路径

1
pwd

mkdir

建立一个新目录,要求创建目录的用户在当前目录中具有写权限,并且指
定的目录名不能是当前目录中已有的目录

1
mkdir gg

ps

该命令用于将某个时间点的进程运行情况选取下来并输出

1
2
3
4
5
6
7
8
9
10
-A :所有的进程均显示出来
-a :不与terminal有关的所有进程
-u :有效用户的相关进程
-x :一般与a参数一起使用,可列出较完整的信息
-l :较长,较详细地将PID的信息列出

ps aux # 查看系统所有的进程数据
ps ax # 查看不与terminal有关的所有进程
ps -lA # 查看系统所有的进程数据
ps axjf # 查看连同一部分进程树状态

kill

终止一个指定的进程

1
kill 4395 #终止进程号为4395的进程

chmod

修改文件权限,在Linux中每一个文件都具有用户,所属群组及其他人三种身份
的个别权限

1
chmod 777 1.txt # r4 w2 x1

grep

该命令常用于分析一行的信息,若当中有我们所需要的信息,就将该行显示出
来,该命令通常与管道命令一起使用,用于对一些命令的输出进行筛选加工

1
2
3
4
5
6
7
8
9
grep [-acinv] [--color=auto] '查找字符串' filename
-a :将binary文件以text文件的方式查找数据
-c :计算找到‘查找字符串’的次数
-i :忽略大小写的区别,即把大小写视为相同
-v :反向选择,即显示出没有‘查找字符串’内容的那一行
# 取出文件/etc/man.config中包含MANPATH的行,并把找到的关键字加上颜色
grep --color=auto 'MANPATH' /etc/man.config
# 把ls -l的输出中包含字母file(不区分大小写)的内容输出
ls -l | grep -i file

sync

数据同步写入磁盘

1
sync

sed

利用脚本来处理文本文件,sed可按照脚本的指令来处理、编辑文本文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sed [-hnV][-e<script>][-f<script文件>][文本文件]
-e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件
-f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件
-h或--help 显示帮助
-n或--quiet或--silent 仅显示script处理后的结果
-V或--version 显示版本信息

a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如
1,20s/old/new/g 就是啦!

sed -e 4a\newLine testfile
nl /etc/passwd | sed '2,5d' #将/etc/passwd 的内容列出并且列印行号,同时,
请将第 2~5 行删除!

awk

是一种处理文本文件的语言,是一个强大的文本分析工具

1
2
3
awk [选项参数] 'script' var=value file(s)

awk [选项参数] -f scriptfile var=value file(s)

grep 更适合单纯的查找或匹配文本
sed 更适合编辑匹配到的文本
awk 更适合格式化文本,对文本进行较复杂格式处理

find

find是一个基于查找的功能非常强大的命令

1
2
find [PATH] [option] [action]
find /root -mtime 0 # 在当前目录下查找今天之内有改动的文件

file

用于判断接在file命令后的文件的基本数据类型

1
2
3
file filename
#例如:
file ./test

tar

用于对文件进行打包,默认情况并不会压缩,如果指定了相应的参数,它还会调
用相应的压缩程序(如gzip和bzip等)进行压缩和解压

1
2
3
压缩:tar -jcv -f filename.tar.bz2 要被处理的文件或目录名称
查询:tar -jtv -f filename.tar.bz2
解压:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录

gcc

它用于把C语言的源程序文件,编译成可执行程序

1
2
3
4
# 把源文件test.c按照c99标准编译成可执行程序test
gcc -o test test.c -lm -std=c99
# 把源文件test.c转换为相应的汇编程序源文件test.s
gcc -S test.c

time

用于测算一个命令(即程序)的执行时间

1
2
3
time ./process
time ps aux
# 最后输出了三个时间:用户CPU时间 系统CPU时间 实际时间

常见问题总结

CPU管态和目态是什么?

CPU状态分为管态和目态,CPU的状态属于程序状态字PSW的一位,管态
又称特权状态、系统态或核心态。通常操作系统在管态下运行,CPU在管
态下可以执行指令系统的全集。目态又称常态或用户态。机器处于目态
时,程序只能执行非特权指令。用户程序只能在目态下运行

进程同步机制有哪些?

多进程虽然提高了系统资源利用率和吞吐量,但是由于进程的异步性可能造
成系统的混乱。进程同步的任务就是对多个相关进程在执行顺序上进行协调
,使并发执行的多个进程之间可以有效的共享资源和相互合作,保证程序
执行的可再现性

  1. 空闲让进:当没有进程处于临界区的时候,应该许可其他进程进入临界
    区的申请
  2. 忙则等待:当前如果有进程处于临界区,如果有其他进程申请进入,则
    必须等待,保证对临界区的互斥访问
  3. 有限等待:对要求访问临界资源的进程,需要在有限时间内进入临界区
    ,防止出现死等
  4. 让权等待:当进程因为无法及时获得临界资源而无法进入临界区的时候,
    需要释放处理机,暂时退让

进程同步:信号量、管程、互斥

什么是用户态和内核态?

用户态和内核态的最大差别是权限不同,用户态下不能访问操作系统内核数据
结构和程序

  1. 内核态 内核从本质上看是一种软件——控制计算机的硬件资源,并提供上层
    应用程序运行的环境。操作系统运行在内核态
  2. 用户态 即上层应用程序的活动空间,应用程序的执行必须依托于内核提供
    的资源,包括CPU资源、存储资源、I/O资源等。普通软件运行在用户态

为什么要区分内核态和用户态?

  1. 内核态和用户态的概念,是操作系统为了有效实现CPU的权限分级和数据隔
    离而提出的,用户态即上层应用程序的活动空间,应用程序的执行必须依托于
    内核提供的资源,包括CPU资源、存储资源、I/O 资源等。为了使上层应用能
    够访问到这些资源,内核必须为上层应用提供访问的接口:即系统调用
  2. 运行于用户态的进程可以执行的操作和访问的资源都会受到极大的限制,而
    运行在内核态的进程则可以执行任何操作并且在资源的使用上没有限制。在用户
    态运行的程序,在运行过程中,一些操作需要内核的权限才能执行,这是就会
    涉及到一个从用户态切换到内核态的过程

用户态和内核态的区别?

  1. 当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称
    进程处于内核运行态(或简称为内核态)。此时处理器处于特权级最高的
    (0级)内核代码中执行。当进程处于内核态时,执行的内核代码会使用
    当前进程的内核栈。每个进程都有自己的内核栈
  2. 当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。即此
    时处理器在特权级最低的(3级)用户代码中运行
  3. 内核空间中存放的是内核代码和数据,而进程的用户空间中存放的是用户
    程序的代码和数据
  4. 操作系统运行在内核态,在这个模式中操作系统具有对所有硬件的访问
    权限,可以执行机器能够执行的任何指令,软件的其余部分运行在用户态
    ,用户接口层(shell)运行在用户态的最低层次,允许用户运行其他程
  5. 内核态具有最高权限,可以访问所有资源,用户态只能访问受限资源,
    想要访问物理设备需要陷入内核态中,在内核空间(Ring3)中,才可以访
    问特权资源
Author: 高明
Link: https://skysea-gaoming.github.io/2021/01/04/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E6%80%BB%E7%BB%93/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.