当前位置:   article > 正文

30000字Linux期末考试复习总结_linux期末知识点整理

linux期末知识点整理

前言

博主期末复习时写的总结,文中可能会有错误之处,敬请谅解!

复习笔记

1.添加一个新用户
useradd cyril
2.添加后为其设置密码
passwd cyril
3.为该用户指定命令解释程序
usermod -s /bin/bash cyril
4.为该用户指定用户主目录
usermod -d /home/csdn cyril
5.查看所有用户属性
cat /etc/passwd,对应显示格式为:用户名:口令:用户标识号:组标识号:注释性描述:用户主目录:命令解释程序。如下所示:
在这里插入图片描述
6.从一个用户切换到另一个用户
su cyril或者sudo cyril
7.修改用户登录密码
passwd cyril
在这里插入图片描述
8.用id命令查看当前自己的身份
在这里插入图片描述
9.变量声明与删除
pi=3.1415926,删除:unset pi
10.变量显示
echo $pi
11.导出环境变量
如果在root环境下声明pi,然后su cyril后切换到cyril用户,此时echo $pi不显示,但是如果在父进程root中提前export pi再切换,这时就能在cyril进程中成功显示pi。子进程cyril中修改pi的值,root中pi值不变。
12.ps命令显示当前运行的所有进程
在这里插入图片描述

13.动态显示进程信息
top
在这里插入图片描述
14.以树结构显示进程
pstree
在这里插入图片描述
15.显示文件
ls -a与ls -all显示当前目录所有文件(包含隐藏文件.filename),ls -l --all打印详细信息:
在这里插入图片描述
16.显示文件类型
file name
在这里插入图片描述
17.which命令查找可执行文件路径
which bash显示bash路径:
在这里插入图片描述
18.PATH环境变量
在这里插入图片描述
PATH说简单点就是一个字符串变量,当输入命令的时候LINUX会去查找PATH里面记录的路径。
19.set
set指令能设置所使用shell的执行方式,可依照不同的需求来做设置。
20.env显示所有环境变量
env
在这里插入图片描述
21.PS1环境变量
PS1是一个环境变量,主命令提示符,比如可以修改PS1来改变主命令提示符颜色等。
在这里插入图片描述
22.PS2环境变量
PS2是二级命令提示符,输入数据时使用
在这里插入图片描述
23.环境变量HOME
用户的主目录的路径名。
在这里插入图片描述
24.source命令
使Shell读入指定的Shell程序文件并依次执行文件中的所有语句。source filename或者source .filename。
25.cd(change directory)命令
切换当前当前工作目录。
在这里插入图片描述
26.pwd(print work directory)命令
显示工作目录。
在这里插入图片描述
27.man和info
man提供帮助手册,会跳转至另一界面,按q退出。info同样跳转至另一界面,按n翻页,p回到上一页。
28.执行一个shell命令行时通常会自动打开三个标准文件:标准输入文件(stdin),通常对应终端的键盘;标准输出文件(stdout)和标准错误输出文件(stderr),这两个文件都对应终端的屏幕。进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。cat命令的功能是从命令行给出的文件中读取数据,并将这些数据直接送到标准输出。
29.cat命令
30.输入cat后,用户输入的每一行都立刻被cat命令输出到屏幕上,直到按ctrl+d结束【标准输入接收到EOF(结束)标识符】,如下所示:
在这里插入图片描述
31.管道操作符|
管道操作符 “|” 可以把一个命令的标准输出传送到另一个命令的标准输入中。
32.less命令
less 与 more 类似,less 可以随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页。命令格式:less [参数] 文件,如下所示:
在这里插入图片描述
输入:ls -all | less后:
在这里插入图片描述
33.sort命令
sort 可针对文本文件的内容,以行为单位来排序。
在这里插入图片描述
34.tee命令
Linux tee命令用于读取标准输入的数据,并将其内容输出成文件。tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。
在这里插入图片描述
35.> >> < <<
> > >file创建一个新文件或者覆盖原有文件,echo ”hello” > file将hello覆盖输入到file。file1 >> file2将文件1的内容追加到文件2。
在这里插入图片描述
< file就是把<后面跟的文件取代键盘作为新的输入设备。
36.wc命令
利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。
在这里插入图片描述
结果为:5行,5个单词,33字节。
37.2>&1
在这里插入图片描述
在这里插入图片描述
37.设置重定向覆盖
set -o noclobber /设置禁止重定向覆盖/,set +o noclobber /设置允许重定向覆盖/
38.exec命令
exec命令在执行时会把当前的shell process关闭,然后换到后面的命令继续执行。系统调用exec是以新的进程去代替原来的进程,但进程的PID保持不变。因此,可以这样认为,exec系统调用并没有创建新的进程,只是替换了原来进程上下文的内容。原进程的代码段,数据段,堆栈段被新的进程所代替。
39.grep命令
grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。
40.通配符
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
例如显示/etc目录下,所有以.d结尾的文件或目录:ls -d /etc/.d:
在这里插入图片描述
又如显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录:ls -d [mnrp]
.conf:
在这里插入图片描述
41.read命令
read命令用于从标准输入读取数值。read内部命令被用来从标准输入读取单行数据。这个命令可以用来读取键盘输入,当使用重定向的时候,可以读取文件中的一行数据。例如:read令终读字串在命令从终端读入字符串放在指的量定的变量file中:
在这里插入图片描述
42.test命令
test命令用来完成字符串比较,数值比较,文件测试和逻辑操作。
字符串比较:test “1” = “2”比较两个字符串是否相等;!=;检查长度是否大于0:test -n “”,检查长度是否为0:test -z “”;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
43.expr命令
expr用于计算表达式的值并打印。
在这里插入图片描述
44.if语句格式

在这里插入图片描述
在这里插入图片描述
45.case语句
在这里插入图片描述
46.for语句
在这里插入图片描述
在这里插入图片描述
47.while语句
在这里插入图片描述
48.until语句(满足条件时结束循环)
在这里插入图片描述
49.函数
在这里插入图片描述
50.特殊的shell变量(考)
在这里插入图片描述
51.vi的三种工作模式
(1)命令模式
用户在shell环境下输入vi即可进入vi编辑器,此时处于命令模式,可以进行各种文档定位和编辑操作。
(2)插入模式
在这里插入图片描述
(3)编辑模式
在这里插入图片描述
在这里插入图片描述
52.附加与插入命令(考)
在这里插入图片描述
键入模式下按下esc后再输入上述命令才有效。
53.定位命令
在这里插入图片描述
在这里插入图片描述
54.文本删除命令
在这里插入图片描述
同样是按下esc进入到命令模式后再进行。
55.替换和取消命令
在这里插入图片描述
56.文本复制命令
在这里插入图片描述
复原命令u,相当于撤销,同样是进入命令模式后生效。
57.保存和退出命令
在这里插入图片描述
58.高级编辑选项
在这里插入图片描述
在这里插入图片描述
59.搜索和替换命令
在这里插入图片描述
60.linux下c的编译器为gcc。GNU project C and C++ Compiler;GNU Compiler Collection。
61.gcc -o hello hello.c:GCC编译器驱动程序读取源程序文件hello.c,并将它翻译成一个可执行目标文件hello。然后./hello执行该可执行目标文件。
62.gcc -g -o hello hello.c:生成的可执行程序中包含调试信息。gcc -c:只进行编译不进行链接,会输出一个hello.o文件。-S:输出汇编代码文件,生成一个hello.s,其中包含汇编代码。
63.gcc –E helloworld.c > helloworld_pp.c,预处理;gcc -S helloworld.c汇编;gcc -c helloworld.c:编译;gcc -o helloworld helloworld.o链接。以上四个步骤可以用一条命令代替:gcc -o hello hello.c。
64.gcc -O1 test test.c,对编译过程进行优化,优化级别分为三级:O123,级别越高优化越好,但是编译时间越长,一般情况下O2级别以够用。-O0表示不优化。
65.-I选项:gcc -c -O -I dirname x.c:-O表示要进行优化;-I指定程序x.c中用到的头文件所在的目录,如果只是使用了系统头文件则不需要该选项。执行成功后生成x.o文件。
66.如果hellomain中引用了hellofunc.c头文件,则gcc -o hello hellomain.c hellofunc.c报错,应该写成:gcc -I/usr/include/inc -o hello hellomain.c hellofunc.h。
在这里插入图片描述
67.多个程序的编译
在这里插入图片描述
其中可执行文件SB是1SB.o一直到2SB.o链接而成的。gcc -o 1SB.o…
68.使用make工具对多个源文件进行管理
CFLAGS指定C语言的编译器参数,即使编译.c文件产生.o文件,gcc -c。LDFLAGS:链接器参数,即o命令。
在这里插入图片描述
69.文件的rm命令
rm表示remove,即删除。rm -r表示递归删除,rm -f表示强制删除,rm -rf表示强制递归删除,rm -i删除前询问是否继续。如rm -i bashrc。
70.gzip命令
71.gzip将文件进行压缩,产生.gz后缀文件:
在这里插入图片描述
在这里插入图片描述
72.makefile书写规则(必考)

73.程序调试gdb
gcc -g sum0.c -o sum0,生成一个可执行文件sum0,然后gdb sum0,即可进入gdb调试状态,输入quit退出调试状态。
在这里插入图片描述
注意编译时必须加上g选项:
在这里插入图片描述
在这里插入图片描述
74.b命令
Breakpoint的简写,设置断点,b 10表示在第十行设置一个断点。
在这里插入图片描述
条件断点:b 6 if i == 9,只有在i == 9时才停下来:
75.Run命令
简写为r,表示运行该程序,如果有断点则停下。
在这里插入图片描述
76.print命令
简写为p, p sum打印sum的值。
在这里插入图片描述
77.next命令
简写为n,紧接着断点继续执行。
在这里插入图片描述
78.step命令
简写为s,单步执行,进入函数调用,n会跳过函数调用。
79.continue命令
简写为c:停止后继续运行程序。不再是一步步执行。
80.backtrace命令
简写为bt:回溯函数调用栈,最底层编号为0,依次递增。
在这里插入图片描述
81.frame命令
frame i调出第i层信息,如frame 0。
82.up和down命令在调用栈中上下移动。
83.set命令
设置变量的值,如set i=7。
84.set args修改发送给程序的参数,show args显示缺省参数列表。
85.cd pathname
修改当前工作目录。
86.pwd
显示当前工作目录。
87.watch命令
使你能监视一个变量的值而不管它何时被改变。
88.rwatch命令
指定一个变量,如果这个变量被读,则暂停程序运行,在调试器中显示信息,并等待下一个调试命令。参考rwatch和watch命令。
89.awatch命令
指定一个变量,如果这个变量被读或者被写,则暂停程序运行,在调试器中显示信息,并等待下一个调试命令。参考rwatch和watch命令。
90.info命令
显示与该程序有关的各种信息,如i b显示所有断点信息:
在这里插入图片描述
在这里插入图片描述
91.delete命令
delete 1删除标号为1的断点,delete 1-5删除1到5。
92.clear命令
在这里插入图片描述
93.disable命令
禁止断点功能,这个命令需要禁止的断点在断点列表索引值作为参数,如disable 5禁止5号断点功能。
94.enable命令
运行断点功能,enbale 5。
95.examine命令
examine指令可以查看指定内存地址中的值,简写为x:
在这里插入图片描述
96.display命令
在断点的停止的地方,显示指定的表达式的值。(显示变量)。display i。
97.finish命令
继续执行,直到当前函数返回。
98.until命令
结束当前循环。
99.quit命令,简写为q。
100.系统函数库通常位于usr/lib、lib以及usr/local/lib目录下。例如经常使用的printf就由usr/lib/libc.a中的printf.o提供。.a是静态函数库,.so是动态函数库。
101.创建静态函数库的步骤:
在这里插入图片描述
gcc -c -O string.c以及ar rv sring.o libc.a两个命令。ar cv表示新建,r表示附加。比如向一个已经存在的.a文件追加函数库就用rv。gcc -c string.c -o string.o
102.使用静态函数库的步骤
在这里插入图片描述
103.系统调用
在这里插入图片描述
104.动态函数库.so
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
gcc -fPIC -c和gcc -shared要考。
gcc -o libtest.so -fpic -shared test.c
在这里插入图片描述
在这里插入图片描述
文件操作:
105.逻辑磁盘分区是基本的文件储存单元,每个磁盘分区对应一个单独的设备文件。查看系统的逻辑分区:fdisk,fdisk是拿来查看或者调整磁盘分区的命令。运行fdisk -l可以查看逻辑分区。
在这里插入图片描述
/dev/sda:36.4GB,表示第一个磁盘大小为36.4GB。第二行:255 heads, 63 sectors/track,4425 cylinders表示该磁盘有255个磁面,63扇区4425柱面。接下来dev/sda1是第一块盘的第一个分区,从柱面1至129,dev/sda2从130到4425。同理第二块磁盘设备用/dev/sdb表示。
106.第四块硬盘的第三个逻辑分区名字:/dev/sdd7,逻辑分区是从5开始编号,7表示第三个逻辑分区。一个硬盘有4个主分区和一个扩展分区,逻辑分区在扩展分区中。
107.操作某一个磁盘:fdisk /dev/sda2,进入后查看分区情况:p命令
在这里插入图片描述
详见:https://www.cnblogs.com/ftl1012/p/9248126.html
108.一个逻辑分区只有建立了某种文件系统后才能使用。所以在建立新的逻辑分区后还要对其进行格式化:mkfs命令。执行mkfs.ext2命令可以建立ext2文件系统,比如mkfs.ext2 /dev/sda5。ext2是linux自带的文件系统。
109.在文件系统建立后,必修挂载到系统中才能通过文件管理系统对其进行访问。挂载就是将逻辑磁盘分区与文件系统的指定目录间建立关联。挂载文件系统的两种方式:mount命令进行手工挂载和通过fstab文件进行自动挂载。umount将文件系统卸载。(创建分区+挂载必考,自动挂载必考)。如安装光盘到当前系统/mnt/cdrom目录下:mount -t ios9660 -o ro /dev/cdrom /mnt/cdrom,iso表示文件系统类型,ro表示文件系统权限:只读,包含文件系统的物理块设备为/dev/cdrom,以及新文件系统要安装到的目录名称:/mnt/cdrom
110.系统启动时自动挂载:/etc/fstab。
111.虚拟文件系统VFS:将不同文件系统的具体实现细节隐藏。Linux支持多种文件系统,如FAT、ext2/3、MSDOS等。为此必须使用一种统一的接口对文件系统进行管理,就是VFS。
112.ext2文件系统:第二代扩展文件系统,数据以数据块方式存储,块大小相同,分为:引导块、超级块、inode块、目录块、数据块。
在这里插入图片描述
113.文件类型:普通文件-,目录文件d、字符设备文件c、块设备文件b、软链接文件l、管道文件p。设备文件:方便Linux访问外部设备。链接文件:指向一个真实存在文件的链接,快捷方式。管道文件:用于不同进程间的信息传递。
114.文件链接分为硬链接和符号链接,硬:链接文件与被链接文件物理上是同一个文件,对文件进行硬链接后只是增加了文件的引用计数,并没有在物理上增加文件。通过执行ln命令产生硬链接,ln -s符号链接(快捷方式)。
115.文件权限:UGO和ACL,必考UGO。
116.每一个文件必须归属于某一个用户和一个组。UGO通过文件的9个权限位对其进行管理。9个分为三组:文件拥有者权限、与文件归属的用户组同组用户的权限、其他用户访问权限。每一个权限位分为三种:读r写w执行x。如下所示:
在这里插入图片描述
对gbd_test,-rwxr-xr-x:第一个-表示gdb_test是一个普通文件;接下来三位rwx表示root用户对其具有三种权限;接下来三位r-x表示与该文件同组的其他用户不具有写权限;最后三位r-x表示其他用户不具备写权限。w必须和x在一起才能发挥作用。
117.文件权限分类:
在这里插入图片描述
在这里插入图片描述
118.UGO方式下可以通过chmod修改文件权限信息。提供两种方式进行修改:字母方式和数字方式;字母方式rwx,+表示增加权限,-表示剥夺权限。例如chmod g+r cls表示增加同组用户对cls的读权限。数字方式:文件拥有者、组内用户、其他用户各对应三位,三位依次对应rwx:增加权限表示1,否则为0,如:111 101 001,表示组内其他用户不具备写权限。chmod 751 cls表示同组用户增加读权限111 101 001。
119.新建文件的权限与另一个因素有关:当前用户的文件权限掩码(必考)。掩码可以通过访问环境变量UMASK得到,通过执行umask命令修改。
在这里插入图片描述
掩码作用过程:新建文件时将UMASK取反,再与制定文件权限位进行and操作,来决定文件的最终权限。
120.ACL下:文件访问控制列表的获取与设置:getfacl与setfacl(考)。
121.文件描述符:文件编程中的概念。非负整数,取值为0到OPENMAX。当进程创建一个新文件或者打开现有文件时,系统内核向进程返回一个文件描述符,其在进程内唯一。ulimit -n获取OPENMAX当前值:1024。当Linux进程启动时,内核默认打开三个文件:标准输入/输出/错误输出文件。其文件描述符分别为012。STDIN_FILENO、STDOUT_FILENO与STDERR_FILENO分别表示012。
在这里插入图片描述
122.每个文件都有自己的文件属主(用户ID)及组(用户组ID)。如果该文件可执行,则其被执行时就会在操作系统中形成进程。每个进程都有一个有效用户ID和有效组ID,作用是进行文件存取许可检查。除此之外每个进程还有实际用户ID和实际组ID,是执行该程序的用户ID及其组ID。
123.通常情况下,进程有效用户ID就是实际用户ID(执行者的ID),有效组ID就是实际组ID。但是在Linux中可以通过设置文件属主权限将有效用户ID设置为文件所有者ID(不再是调用该进程的用户ID)。这种机制称为suid,对于组权限也可以设置这种这样的标志,称为sgid,suid通过执行chmod u+s完成,sgid通过执行chmod g+s完成。
124.passwd用于修改密码。密码存于/etc/passwd和/etc/shadow中,只有root用户对其可写。suid:usr/bin/passwd文件设置了suid权限:-rwsr-xr-x,普通用户在修改密码时,其有效用户会变成root(文件属主)。
125.文件创建函数
文件创建函数有creat、open、mknod、mkdir等。mknod用于设备文件创建,mkdir用户目录文件创建。creat和open是系统调用。
int creat(pathname, mode_t mode):pathname是要创建文件的路径,绝对路径和相对路径都可以使用;mode:新文件的访问权限,定义在<sys/stat.h>中,一共九种。若创建成功返回文件描述符,出错返回-1。
int open(pathname, int oflag, mode):oflag:打开文件的方式,如只读打开,只写打开等;mode可选,只在创建新文件时有效;成功返回文件描述符,否则-1。
126.文件读写
read函数用于从一个打开的文件中读取数据:ssize_t read(int filedes, void *buff, size_t nbytes):filedes为打开文件的文件描述符,buff为缓冲区,用于缓存读出的数据,nbytes为要读取的字节数。若成功返回实际读取的字节数,如果已经读到文件尾返回0,若出错返回-1。
write函数用于向一个打开的文件写入数据:ssize_t write(同上):buff为缓冲区,准备写入文件的数据。若成功返回实际写入的字节数,出错返回-1。
127.文件的关闭和删除
在文件描述符使用完毕后,程序中应调用close函数显式关闭文件描述符,解除文件描述符与内核数据结构的关联,释放相关资源。int close(int filedes),成功返回0否则-1。
删除文件只是将文件的引用数-1,只有文件的引用计数为0时才会物理删除一个文件:int unlink(path):path为要删除的文件路径,成功返回0否则-1。
128.移动文件读写指针位置
每个被打开文件都有与其相关联的当前文件位移,为非负整数,用于衡量文件开始处到当前读写指针的位置,off_t lseek(int f_d, off_t offset, int whence):fd为文件描述符,offset为文件偏移量,偏移基准为whence。
129.改变文件属主
每个文件都有唯一用户属主,即文件拥有者。修改文件属主及文件权限的操作只允许超级用户(uid=0)和文件拥有者进行。int chown(pathname, owner, group),int fchown(fd, owner, group),int lchown(pathname, owner, group):pathname为文件路径,fd为已经打开文件的描述符,owner为变更的用户id,group为组id,lchown用于修改符号链接本身的属主,而不是符号链接指向的文件。fchown和chown一致。
130.设置文件权限(必考UGO)
int chmod(pathname, mode),int fchmod(fd, mode):修改文件或者已打开文件的权限,将其修改为mode。如chmod(pathname, S_IRUSR|S_IWUSR)。
mode_t umask(mode_t mask):为进程设置文件权限屏蔽字。
int access(pathname, mode):获取一个文件的访问权限,如果当前文件具备mode权限,就返回0否则-1。
ACL不考:
在这里插入图片描述

131.获取文件状态(必考)
文件状态信息:文件类型、大小以及创建时间等。相关系统调用分为:获取文件的状态信息和文件系统的状态信息。
首先是文件状态信息的获取:stat、fstat和lstat。int stat(file, struct stat *buf),int fstat(fd, buf), int lstat(file, buf):file为文件名称,fd文件描述符,buf为指向stat结构的指针,用于保存获取的文件状态数据。

文件系统状态信息的获取:statfs获取:int statfs(file, buf)。
132.文件类型的获取(必考)
在这里插入图片描述
文件类型的获取依赖于文件状态信息的获取,stat返回的文件状态信息中有一个st_mode项,利用该项可以判断文件类型:上述m表示st_mode项。
133.修改文件时间
每个文件对应三个时间:文件数据存取时间(read)、修改时间(write)、i结点状态修改时间(chmod)。int utime(file, struct utimbuf * times):将file的时间设置为times,里面包含文件存取时间和修改时间两项。
134.目录操作(创建必考)
135.创建目录的系统调用是mkdir。int mkdir(char* path, mode_t mode):path为要创建的目录名称,mode为新目录的权限,成功返回0否则-1。
int rmdir(char* path):删除成功返回0否则-1。
调用chdir或者fchdir可以变更当前工作目录:int chdir(path),int fchdir(int fd):fd为目录文件的文件描述符。0-1
char* getcwd(char * buf, size_t size):获取当前工作目录,buf用于保存当前工作目录。成功返回当前目录名称,失败返回NULL。
136.读取目录
opendir readdir rewinddir closedir。rewind用于重定位目录的读指针。
标准IO库
137.文件操作是直接调用文件操作的系统调用(文件操作API)完成的,另外一种访问文件的方式:标准输入输出库,其是在系统调用基础上进行封装的。使用系统调用访问文件系统是针对文件描述符进行的,而使用标准I/O库时,操作的是“流”对象,打开文件成功后系统内核返回流(stream)数据结构,接下来所有操作都是针对流进行。流是一个指向FILE结构的指针。标准IO是带缓存的,系统调用不具有缓存机制。
在这里插入图片描述
在这里插入图片描述
138.缓存:在进行文件IO操作时,对数据的读写并不直接对文件系统进行,而是对缓存进行。缓存空间满时,由系统根据缓存的内容刷新到文件系统。(缓存必考)
139.三种提供缓存的方式。缓存是在第一次调用标准库进行IO操作时系统自动调用malloc分配的。全缓存:当前IO操作的缓存被填满时才会向文件系统进行刷新。行缓存:输入输出过程中如果遇到换行符,则进行刷新,行读写函数和向标准输出输出信息都是行缓存。不缓存:如标准错误输出。系统调用fflush可以进行手工刷新。
在这里插入图片描述
在这里插入图片描述
输出为:
在这里插入图片描述
第一条语句由于是行缓存,没遇到换行符没法输出,所以先输出第二句。第一条信息接收到换行符后才输出,并显示换行符。
140.改变流的默认缓存方式(必考)
setbuf setbuffer setlinebuf setvbuf,setlinebuf用于设置某个流为行缓存模式。setbuf(stdout, NULL):将标准输出设置为无缓存模式。
在这里插入图片描述
141.标准输出的重定向
程序从键盘读取stdin,将向stdout和stderr输出的信息显示到屏幕上,如果要改变这种默认的输入输出方式,则需要重定向:将默认的输出输出的目标定向到新的目标。新目标可以是某个设备或者文件。shell下进行输入重定向的符号是<,输出重定向是> >>,后者是附加方式。如ls > /tmp/a,将ls输出到a文件中(覆盖)。
dup和dup2都可用来复制一个现存的文件描述符,使两个文件描述符指向同一个file结构体。有时我们希望把标准输入重定向到一个文件,或者把标准输出重定向到一个网络连接。dup()与dup2()能对输入文件描述符进行重定向。(必考)
在这里插入图片描述
142.打开或者关闭流文件
file* fopen(filename, modes), int fclose(file* stream):modes为文件打开方式。fopen返回NULL表示失败,否则返回流指针。fclose返回EOF表示调用失败,否则返回0。
143.单字符的读写(考)
int fgetc(file* stream)、int getc(stream),返回EOF表示读失败,其他:读取到的字符。
int putc(int c, stream), fputc:向流中写入的字符为c。EOF表示写失败,否则返回写入的字符。
getchar putchar等价于getc(stdin)与putc(c, stdout)。
144.从文件中读写一行
fputs与fgets。
145.格式化输入输出
在这里插入图片描述
146.二进制方式读写
写入文件后序列化,读出后再反序列化:fread和fwrite。
size_t fread(ptr, size, n, stream):ptr存储读取的内容,size为要读取的每个记录的长度,n为要读取的记录个数,stream为流指针。返回0表示调用失败。成功返回记录个数。
size_t fwrite(同上)。
147.在流文件中定位
fseek、ftell以及rewind。
148.不建议将系统调用和标准输入输出函数混合使用,原因是:缓存!
149.进程的定义
在这里插入图片描述
150.每个进程都有唯一的标识号——PID。进程可以产生新的进程,构成父子关系。
151.进程的用户标识和有效用户标识
在这里插入图片描述
152.一个进程属于且仅属于一个进程组,项进程组发送信号,组内所有进程都收到。
153.会话
在这里插入图片描述
154.获取进程的属性:
getpid:获取进程ID;getppid:获取进程的父进程ID;getpgrp:获取进程的进程组ID;getuid:获取进程的真实用户ID;getgid:真实用户组ID;geteuid:有效用户ID;getegid:有效用户组ID。(有效和真实,真实为调用该进程的用户ID)。
155.考:前台作业放到后台执行,应该先挂起:
156.更改用户归属的组:setpgid(pid, gid)
在这里插入图片描述
157.一个会话可以包含多个进程组,但是只能有一个前台控制组,其他为后台运行进程组,前台进程组通过组长进程与控制终端相连。会话ID是会话首进程ID。setsid用于产生一个新的会话。
在这里插入图片描述
158.传统的Linux终端是RS232串口通信协议的串口终端。(考tty)
在这里插入图片描述
tty命令查看当前终端的名称:
在这里插入图片描述
159.当控制终端被关闭时,控制终端所关联的进程将收到SIGHUP信号。
160.ps -aux考其中一个:ps -aux:显示所有包含其他使用者的进程。ps -ef 是用标准的格式显示进程的。
161.进程状态之僵尸状态:如何生成?有啥危害?哪两种解决办法?
除PID为0的进程外,其余所有进程都有父进程。僵尸状态:表示进程结束但未消亡的一种状态。进程在退出前会给父进程发送SIGCHLD信号,父进程调用wait为子进程的退出做首尾工作。如果父进程未进行此工作,则子进程虽然退出,但通过执行ps命令仍可以看到该进程,其返回值还在pcb中。
危害:如果进程不调用wait / waitpid的话, 那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程。此即为僵尸进程的危害,应当避免。即:占用进程表空间,影响整个系统的效率。
两种解决办法:
一是父进程显式忽略SIGCHLD信号:调用signal(SIGCHLD, SIG_IGN)即可。
二是在SIGCHLD信号处理函数中获取子进程的退出状态。
162.孤儿进程:没有父进程的进程,init接管。
产生原因:一个父进程退出,而他的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。
危害:每当出现一个孤儿进程的时候,内核就把孤儿进程的父进程设置为init,而init进程会循环地wait()它的已经退出的子进程。因此孤儿进程并不会有什么危害。
163.进程优先级
在这里插入图片描述
优先级=优先级别PR+谦让值NI。其中PR不能改变。系统调用nice可以将进程的默认谦让值从0改大,或改小(root才行)。rnice修改正在执行的进程的谦让值。setpriority和get。rnice调整的是已经开启的进程优先级,而nice是直接在开启时变定义了优先级。
164.真实完整的main
在这里插入图片描述
argc表示执行程序时命令行参数个数,如果未输入参数则为0。argv命令行参数数组,每一个数组成员为一个命令行参数,程序名称是argv[0]。env:环境变量数组。
165.获取命令行参数
在编程过程中可以直接访问argv[0…]来获取命令行参数,此外也可以使用getopt。
int getopt(int _argc, char* const* _argv, char* _shortopts)。argc和argv都是main函数的参数,shortopts是选项字符串,指定了解析命令行参数的规则。getopt认可的命令行选项参数是通过”-”进行的。如ls -a。在该参数中,如果某个选项有输入数据,则该选项字符的后面应包含:,如ls -l ./a命令在指定本参数时应该使用l:。如果该参数第一个字符是:,则getopt发现无效参数时并不返回失败,而是返回?表示无效,返回:表示需要输入选项值。
optstring是选项字母组成的字串。如果该字串里的任一字符后面有冒号,那么这个选项就要求有选项参数。
比如执行一个程序:./test_program -i -s abc -t,abc是-s选项的参数。
在这里插入图片描述
函数返回值:?:表明返回一个未在shortopts定义的选项。:表示该选项需要输入参数但是并未输入。-1表示getopt已经解析完毕,后面已经没有选项。其他:返回的选项字符,如hvo等。
相关全局变量:optind:整型变量,存放argv当前的索引值。optarg:字符串指针,当处理一个带有选项值的参数时,里面存放该选项的值。optopt:整型变量,发现无效选项(返回?或者:)时包含当前无效选项。opterr设置为0则报错时不输出任何信息。
166.全局的环境变量:etc/profile
在这里插入图片描述
getenv(name),setenv(“name=5”)。
167.内存分配:ulimit -s
在这里插入图片描述
168.进程的创建必考
fork()调用后生成新的进程。
在这里插入图片描述
调用fork一次将返回两次:在父进程中返回值为子进程的进程标识符。子进程中返回0。
在这里插入图片描述
在这里插入图片描述
169.exec系列函数
填空题:并不创建新的进程,调用前后的进程ID相同,其主要工作是清除父进程的可执行代码映像,用新进程的代码覆盖调用exec的进程代码。
170.system创建进程。
171.exit退出进程,一般不使用_exit。
172.一个进程退出时将向其父进程发送SIGCHLD信号,父进程收到后可以忽略,如果要处理则需要调用wait系列函数,其作用是等待子进程退出,并获取子进程的返回码。如果调用wait后没有任何子进程退出,则父进程将进入阻塞状态。wait或者waitpid返回-1表示调用失败,否则返回子进程ID。
在这里插入图片描述
173.信号产生的几种常见原因
在这里插入图片描述
174.shell中输入kill -l可以获取全部信号的列表:
在这里插入图片描述
SIGHUP:该信号是在进程的控制终端注销时产生,发往该终端上运行的所有进程。
SIGINT:程序终止信号。按下ctrl+c产生该信号。
SIGTERM必考:进程结束信号。该信号可以被用户捕捉并处理,shell下执行kill发送该信号。
SIGKILL必考:终止用户进程的执行信号。该信号不能被忽略,一旦收到必须终止,shell下执行kill -9发送该信号。
SIGSTOP必考:同SIGKILL,执行kill -19。
SIGCHLD必考:子进程退出信号,子进程退出时向父进程发送该信号。子进程没有显式忽略该信号也没有处理,则形成僵尸进程。
175.信号的三种处理方式:忽略信号、按照系统提供的缺省处理规则进程、程序中自己定义处理函数(安装信号处理函数)。除了SIGSTOP和SIGKILL不能被忽略,其他都可以。
176.安装信号处理函数
通过系统调用signal或者sigaction完成。
必考signal函数写法:
在这里插入图片描述
sugnum:信号名称。handler:指向信号处理函数的指针,用于指定处理函数。除了自定义外:SIG_DFN表示缺省处理规则,SIG_IGN表示忽略该信号。返回SIG_ERR表示安装失败,否则返回原信号处理函数指针。
177.进程间通信机制(必考)
哪六种通信机制?(附上解释)
(1)管道:用于具有亲缘关系的进程(父子进程)间的通信。
(2)信号:用于通知进程有某种事件发生。
(3)消息队列:进程向消息队列中发送某种类型的消息,也可以从中读取,内容自定义。
(4)共享内存:读写效率最高的一种方式,在系统内核分配一块缓冲区,多个进程都可以访问该缓冲区。
(5)信号量:主要用于进程间的同步。
(6)套接字:用于跨越主机边界的通信。
在这里插入图片描述
178.消息队列、共享内存、信号量3种机制合并起来称为进程间通信IPC。
179.管道特点
在这里插入图片描述
180.管道分类
普通管道:
在这里插入图片描述
命名管道:位于文件系统内
在这里插入图片描述
181.创建普通管道
使用pipe函数:int pipe(pipedes[2]):创建后第一个成员是用于读的文件描述符,第二个是写。返回0表示创建成功,-1表示失败。
在这里插入图片描述
在这里插入图片描述
182.简化版的普通管道
在这里插入图片描述
183.命名管道
在这里插入图片描述
在shell中创建命名管道:(必考mknod和mkfifo)
创建:mknod 管道名称 p;此外mkfifo -m 权限 管道名称 也可以创建,权限指创建成功后的管道文件的权限。
C语言中使用mkfifo:
在这里插入图片描述
184.命名管道的打开与删除
在这里插入图片描述
打开open删除unlink。
185.IPC对象一经创建,会分配相关数据结构。系统的IPC控制命名:查看IPC的ipcs和删除IPC对象的ipcrm。
在这里插入图片描述
在这里插入图片描述
186.为区别不同进程间通信的对象,每个IPC对象都有一个名字,称为键(32位长整型),系统内唯一。
187.键值生成函数ftok
在这里插入图片描述
188.消息队列的相关函数(创建删除等,可能考)
msgget创建、msgsnd消息发送、msgrcv消息接收、msgctl消息控制

考点整理
1.文件系统的自动挂载文件配置文件?/etc/fstab。
2.函数库的链接,动态与静态。文件链接分为硬链接和符号链接,硬:链接文件与被链接文件物理上是同一个文件,对文件进行硬链接后只是增加了文件的引用计数,并没有在物理上增加文件。通过执行ln命令产生硬链接,ln -s符号链接(快捷方式,软链接)。
3.文件类型考察:普通文件-,目录文件d、字符设备文件c、块设备文件b、软链接文件l、管道文件p。设备文件:方便Linux访问外部设备。链接文件:指向一个真实存在文件的链接,快捷方式。管道文件:用于不同进程间的信息传递。
4.文件权限的考察:
在这里插入图片描述
在这里插入图片描述
5.管道是命令间,文件间是重定向。
6.汇编选项-S,转成汇编语言,6263两条。二进制模块:-c,预处理-E,调试信息-g。
7.文件重命名与拷贝:重命名mv,拷贝cp
在这里插入图片描述
在这里插入图片描述
8.第二块硬盘第二个主扇区:/etc/sdb2,第二个逻辑分区/dev/sdb6。
9.Linux中默认shell:bash
10.stdout和stdin都是行缓冲,stderr无缓冲。fopen打开的普通文件默认是全缓冲。
11.动态函数库的编译指定-fPIC选项,链接指定-shared选项。
在这里插入图片描述
12.make工具:CFLAGS环境变量指定C语言编译器参数;LDFLAGS指定C语言链接器参数。CPPFLAGS指定C语言的预编译参数。c++的编译选项:CXXFLAGS。CXX:c++编译器的名字。
在这里插入图片描述
13.vi移到下一个单词的开始处:w;删除当前光标处单词:dw。(必考)
14.生成新的进程fork。
15.安装新的信号处理函数:signal函数(怎么写)
16.解析:getopt。
17.启动一个进程时修改默认nice和已经启动rnice。
18.文件状态获取stat,文件系统状态获取statfs。到这里:12:48
19.$?执行上一个命令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
20.>覆盖重定向,>>追加重定向。
21.SIGKILL和SIGSTOP不可忽略。
22.新建文件的默认权限:666 & ~UMASK(022)。110 110 110 & (111 101 101)=110 100 100,rw-r–r–。
23.PS1 PS2 HOME:PS1用于修改shell终端的提示符。
24.非空目录删除rm -rf。r递归,f强制
25.文件系统卸载umount。
26.环境变量的导出export。
27.mount -a选项(填空题:-a)
在这里插入图片描述
28.kill默认发送SIGTERM。
29.执行脚本文件source命令,不需要w需要r和x,如果没有x可以通过source命令。
30.并口:hda hdb,串口sda sdb。
31.2 > &1的含义:2>&1 的意思就是将标准错误重定向到标准输出,这里标准输出已经重定向到了/dev/null。那么标准错误也会输出到/dev/null。
32.显示所有用户的所有进程:ps命令,考-aux。
ps -a 显示现行终端机下的所有进程。ps -u以用户为主的格式来显示进程情况,即显示指定用户的进程。ps -x:显示所有程序,不以终端机来区分,未连接到终端的进程也显示。
33.发信号:kill -15 78,将信号15发给进程78,或者kill -78:将SIGTERM发送给78号进程。
34.新添加硬盘的步骤:fdisk创建分区->mkfs格式化,创建文件系统->mount挂载文件系统。root用户才能发SIGKILL和SIGSTOP。
35.尾行模式下保存并退出命令(:wq)。
36.安装编译软件:第一步:./configure;第二步:make;第三步:make install(需要root权限)
37.6个中进程间通信方式。
38.僵尸进程和孤儿进程。
39.makefile的书写必考:第一行目标依赖项,第二行起始为tab键,写bash命令指定如何从依赖项生成目标:考察有库函数的。
40.函数库static和shell。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/837514
推荐阅读
相关标签
  

闽ICP备14008679号