一、初识Linux
1、计算机基础知识
(1)硬件
(2)软件
2、操作系统概述
(1)什么是操作系统
操作系统是裸机之上的第一层软件,与硬件关系尤为密切。
定义:
操作系统是控制和管理计算机系统内各种硬件和软件资源、有效地组织多道程序运行的系统软件(或程序集合),是用户与计算机之间的接口。
- 操作系统是软件,而且是系统软件
- 它的基本职能是控制和管理系统内各种资源,有效地组织多道程序的运行。
- 它提供众多服务,方便用户使用,扩充硬件功能。
(2)操作系统的功能
1.存储管理
⑴ 内存分配
(2)地址映射
(3)内存保护
(4)内存扩充
2. 进程和CPU管理
(1)作业和进程调度
(2)进程控制
(3)进程通信
3.文件管理
(1)文件存储空间的管理
(2)文件操作的一般管理
(3)目录管理
(4)文件的读写管理和存取控制
4.设备管理
(1)缓冲区管理
(2)设备分配
(3)设备驱动
(4)设备无关性
5.用户接口
⑴图形用户接口(GUI)
⑵命令行接口
⑶程序接口——也称系统调用接口
(3)操作系统类型
3、Linux系统历史和现状
4、Linux系统特点
5、Linux优势与问题
6、Linux是什么
Linux是一个类Unix计算机操作系统的统称。该操作系统的核心的名字也是“Linux”。
(1)Linux与Unix区别和联系
(2)Linux版本
7、Linux组成部分
(1)Linux内核
8、Linux基本原理
(1)cpu管理
(2)存储管理
(3)文件管理
(4)设备管理
二、常用命令及文件操作
1、命令行方式
(1)提示符
yuxine:用户名
yuxine-None:默认主机名
~:用户主目录
$:当前用户是普通用户 #:当前用户是超级用户
PS1是主提示符变量,也是默认提示符变量。默认值[\u@\h \W]\$
,显示用户主机名称工作目录。
2、简单命令
$ who
列出所有正在使用系统的用户、所用终端名和注册到系统的时间。
$ echo
将命令行中的参数显示到标准输出(即屏幕)上
$ date/cal
$ passwd
更改自己的密码
更改root用户密码:sudo passwd root
进入root用户模式:su root
$ pwd
显示出当前目录的路径
$ su
更改用户身份
$ history
查看历史命令
3、命令格式
4、文件及其类型
(1)概念
-
文件(File)是被命名的相关信息的集合体。它通常存放在外存(如磁盘、磁带)上,可以作为一个独立单位存放和实施相应的操作(如打开、关闭、读、写等)。
-
文件成分
索引节点:I节点
数据:文件的实际内容
-
文件命名
尽量简单
避免/,空格,制表符,控制字符
避免特殊含义字符
-
Linux只有一个文件树,根目录/
-
以圆点(.)开头的文件名是隐含文件
-
文件名通配符
①星号(*)
与0个或多个任意的字符相匹配,匹配的是当前目录下的所有文件,但以点(.)开头的隐含文件除外,.*只与隐含文件匹配。
②问号( ? )
只与单个任意的字符匹配
③方括号( [ ] )
只与括号中列出的字符之一匹配,可以用-代表一个范围内的字符【升序排列and如果在[之后是一个!或^,则表示与不在方括号中出现的字符匹配】
eg:
[!A-Z]*.?代表所有不以大写字母开头,但倒数第二个位置是.的文件名。
(2)文件类型
5、常用文件操作命令
(1)文件显示
$ cat
$ cat m1 m2 > mfile (将文件m1和m2合并后放入文件mfile中)
$ cat –n m1 (对文件m1的各行编号并输出)
-n
选项表示显示文件内容时,同时显示行号(空行也显示行号)
-b
空行不显示行号
$ more
显示文件内容,每次显示一屏
$ more -dc mfile
先清屏,然后显示mfile的内容,并且在屏幕的最下方显示完整的百分比。
$ more -c -10 mfile
显示文件mfile的内容,每10行显示一次,而且在显示之前先清屏。
$ less
分屏显示文件的内容。允许用户向前或向后浏览文件。
$ head
显示指定文件的开头若干行。显示行数的默认值是10
$ head --bytes=-100 mfile (显示文件mfile除最后100个字节之外的所有内容。注意:“=”与“-”之间没有空格。)
$ head -v mfile (显示文件mfile的内容,并且给出文件名标题)
$ head -q mfile (显示文件mfile的内容,但不列出文件名标题)
-v
选项用于显示文件的详细信息
-q
选项用于禁止显示文件名 quit
$ tail
显示末尾10行
$ tail -n +20 mfile (显示文件mfile的内容,从第20行至文件末尾)
$ tail -c 10 mfile (显示文件mfile的最后10个字符)
-c
选项用于指定要显示的字节数 ctype
显示文件 test 的前 20 行中的后 10 行
head -n 20 test | tail -n 10
$ touch
修改指定文件的时间标签
创建一个空文件
$ touch –m mfile (将文件mfile的修改时间改为系统当前时间)
-m
只更新文件的修改时间而不改变文件内容
$ file
对每个参数FILE进行检查,并予以分类(确定文件类型)
(2)匹配、排序、显示
$ grep
在文本文件中查找指定模式(正则表达式)的词或短语,并在标准输出上显示包括给定字符串模式的所有行。
$ grep -r 'print' ciee
$ grep -E '[Mm]ain | [Pp]rintf' ~/dir/f?.c
$ grep -i 'main | printf' ~/dir/f?.c(与上式相同
-r
表示递归地搜索目录。=rgrep
-E
表示启用扩展的正则表达式。 =egrep
-F
固定字符串匹配,不解释正则表达式 =fgrep
-i
选项表示不区分大小写
-v
反向查找,可以查找指定目录及其子目录(如果存在子目录的话)不符合条件行的内容
$ sort
$ sort -r -k 2, 3 more_h10
//以第2个字段作为排序关键字,如果相同就以第3个字段排序,不往后类推,因为2代表开始位,3代表结束位。-r表示以相反的顺序来排序。
$ sort -k 3 more_h10
//以第3个字段作为排序关键字,对文件more_h10排序,若第3个字段相同,就以第4个字段排序,依次类推。
-k
选项用于指定排序的关键字,即排序时要考虑的字段范围
-o
选项用于指定输出文件的名称
$ uniq
读取输入文件,并比较相邻的行,去掉重复的行,只留下其中的一行。
$ uniq -u ex3 //显示文件ex3中不重复的行
# uniq testfile3 //检查文件并删除重复行
# uniq -c testfile3 //检查文件并删除重复行,并在行首显示该行重复出现的次数。
-u
选项用于仅显示不重复的行,并排除出现两次或更多次的行。
-c
显示重复次数
(3)比较文件内容
$ comm
对两个已排序文件进行逐行比较。
$ comm -12 m1 m2 (比较文件m1和m2,并且只显示它们共有的行)
-12
选项表示只输出两个文件共有的行。
$ diff
逐行比较两个文件,列出它们的不同之处,并且告诉用户,为了使两个文件一致,需要修改它们的哪些行。
输出形式
diff testfile3 testfile4 -y -W 50
并排格式输出,"|“表示前后2个文件内容有不同;”<“表示后面文件比前面文件少了1行内容;”>"表示后面文件比前面文件多了1行内容
n1 a n3,n4 (把文件1的n1行附加到文件2的n3~n4行后,则二者相同) add
n1,n2 d n3 (删除文件1的n1~n2行及文件2的n3行,则二者相同) delete
n1,n2 c n3,n4(把文件1的n1~n2行改为文件2的n3~n4行,则二者相同) change
(4)复制、删除、移动
$ cp
对普通文件:该命令把它复制到指定的目标文件中
对目录:需要使用-r
选项,将整个目录下所有的文件和子目录都复制到目标位置
$ cp -i /home/ciee/m*.c /home/liuzh
-i
是交互式选项,它会在复制文件之前询问用户是否覆盖已存在的目标文件。如果目标文件已存在,会提示用户是否覆盖。如果不希望进行交互式复制,可以省略 -i
选项。
-p
把修改时间和访问权限也复制到新文件中
- **-a:**此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
- **-f:**覆盖已经存在的目标文件而不给出提示。
- **-r :**若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。递归
$ rm
删除每个指定的文件,默认情况下,它不能删除目录,并且无法恢复。
$rm -r *
(删除当前目录下除隐含文件外的所有文件和子目录。危险!)
-f
表示强制删除,无需确认。
$ mv
对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。
$ mv ex3 new1 (将文件ex3改名为new1)
$ mv /home/ciee/* .
将目录/home/ciee中的所有文件移到当前目录(用“.”表示)中
(5)文件内容统计
$ wc
统计指定文件的字节数、字数、行数,并将统计结果显示出来。
输出格式:行数 字数 字节数 文件名
$ wc -lcw mfile m2
-l
选项表示只显示行数。 line-c
选项表示只显示字节数。 ctype-w
选项表示只显示字数。 write
三、Linux目录及其操作
1、目录和路径名
(1)目录概念
1-1 树形目录结构
- I节点:起文件控制块作用。在I节点中存放该文件的控制管理信息。每个文件有唯一的I节点。
- 文件目录:文件控制块的有序集合。文件控制块是文件目录中的目录项。
- 目录文件:完全由目录项构成的文件。
1-2 根目录
- /bin: 包含二进制(binary)文件的可执行程序。
- /sbin:中存放用于管理系统的命令。 这个目录下的linux命令通常由系统管理员使用,对系统进行维护。
- boot:用于存放引导系统时使用的各种文件,如LILO等。
- /etc: 目录非常重要,它包含许多Linux系统程序配置文件(如密码文件/etc/passwd、/etc/profile等)。
- /root: 是超级用户的目录。
- dev:包含标示设备的特别文件。
- home: 是用户起始目录的基础目录。通常,用户的主目录就保存在该目录中。
- /lib: 保存程序运行时使用的共享库。 二进制文件的库库文件。
- lost+found:存放系统非正常关闭时正在处理的文件,以便下次系统启动时予以恢复。
- mnt:中存放安装文件系统的安装点。
- proc: 实际上是一个虚拟文件系统。
- tmp: 用于存放程序运行时生成的临时文件。
- usr: 中包含了多个子目录,其中保存系统上一些最重要的程序,可供所有用户共享。
- var:包括系统正常运行时要改变的数据。
1-3 工作目录/主目录
- 工作目录:以后不作具体指定情况下,所访问的文件都是该目录中的文件。
- 用户主目录:为新用户建立帐户时系统指定的工作目录。包含子目录、数据文件,以及用于注册环境的配置文件。
(2)路径名
2-1 绝对路径名
- 以根目录为起点的路径名。
- 总是以斜线字符(/)开头
2-2 相对路径名
-
相对当前工作目录的路径名
-
eg——当工作目为 /home/yuxine/homework 时
绝对路径:/home/yuxine/homework/coding/add.c
相对路径:coding/add.c
-
(.)表示目录自身 (…)表示父目录
2、常用目录操作
(1)创建和删除
$ mkdir
创建目录
$ mkdir -p -m 750 bin/os_1
//同时建立两个目录:bin和它的子目录os_1,权限设置为文件主可读、写、执行,同组用户可读和执行,其他用户无权访问。
-p
选项表示递归创建目录,即如果某个父目录不存在,也会一并创建。
-m
选项用于设置新创建目录的权限。= --mode
$ rmdir
删除目录
子目录被删除之前应该是空目录。
$ rmdir -p bin/os_1
-p
选项表示递归删除目录。如果删除 bin/os_1
后,其父目录 bin
变为空目录,那么 rmdir
会尝试删除 bin
。同样,如果删除 bin
后,其父目录也变为空目录,那么 rmdir
会继续尝试删除父目录。
(2)改变和显示
$ cd
向上移动两级 cd …/…
主目录 cd
$ pwd
显示出当前工作目录的绝对路径。
$ ls
列出指定目录的内容ls
-a
–all 显示指定目录下所有子目录和文件(包括隐藏)
-F
–classify 在列出的文件名后面加上不同的符号,以区分不同类型(属性)的文件
/ : 目录
*:可执行的
@ :符号链接文件
|:管道文件
=:socket文件
-l
以长格式显示文件的详细信息 = ls -l
-C
多列形式,整洁容易读
-i
查看文件的iNode号(I节点号)
-R
若目录下有文件,则以下之文件亦皆依序列出。
文件类型与权限 链接数 文件主 文件组 文件大小 建立或最近修改的时间 文件名
-rw-r--r-- 2 ubuntu group 809 12月 27 2008 mfile2
- r w - r - - r - -
1 2 3 4 5 6 7 8 9 10
- 1:文件类型
- 普通文件 | l 符号链接文件 | d 目录 | b 块设备文件 |
---|---|---|---|
c 字符设备文件 | s 套接字文件(socket) | p命名管道文件(pipe) |
-
234:文件主
-
567:组用户
-
8910:其他用户
(3)链接
为一个文件起多个名字
3-1 硬链接
一个文件登记在多个目录中(两个名字,存放相同内容)
-
限制
1:不能对目录文件硬链接
2:不能在不同的文件系统之间
3-2 符号链接(软链接)
- 类似指针,是一个(文本文件),包含要连接的文件的(路径名)
- 符号链接是新文件,具有不同的I节点号
- 可以对目录;不同文件系统之间做符号链接
- 删除源文件,不会删除链接
- 符号链接大小:路径字节数
- lrwxrwxrwx …… /etc/motd**->**/original_file
$ ln
创建链接: ln [选项] 源文件 [链接文件]
# ln -s /home/ubuntu/mub1 /home/liuzh/abc
-s
表示创建符号链接(软链接)。 soft
- 注意,有源文件f1,硬链接f2,软连接f3
- 删除f2或者f3,对其他文件无影响
- 删除f1,对f2无影响,f3有影响
- 删除f1和f2,整个文件被真正删除
(4)改变文件/目录存取权限
4-1 用户和权限
$ chmod
改变文件或目录的存取权限(文件主/超级用户)
-
以符号模式改变权限
chmod [选项]... MODE[,MODE]... 文件... 其中,MODE: [who] [操作符号] [mode] #chmod a+x ex1 //所有用户 ex1 可执行 #chmod u=r,ug=x ex1 //用户可读,用户和组用户可执行ex1
【who】
【操作符号】
【mode】
-
以绝对方式改变
chmod [选项]... OCTAL-MODE 文件... #chmod 0754 ex1 //第一位,1有相应权限,0没有 //后三位 r w x |r – x| r – – 1 1 1 |1 0 1 |1 0 0 【八进制】 4+2+1 | 4 + 1| 4 7 5 4 【十进制】
-R
递归地应用权限更改,包括目录中的所有文件和子目录
$ umask
设置限制新建文件(默认文件)权限的掩码
umask [-p] [-S] [mode]
///mode以数字开头,就被解释为八进制数字;否则,就被解释为符号方式。
-
查看当前掩码的设置
$ umask
-S
输出:u=rwx,g=rwx,o=rx
$ umask
-p
(-p可有可无,没有-p输出0002)输出:umask 0002(使用八进制数值来设置mode)
-
取消组用户的写权限、其他用户的读、写和执行权限
$ umask u=rwx,g=rx,o=
-
可以使用八进制数值来设置mode
$ umask 0037
umask
的主要目的是确保新创建的文件和目录具有合理的默认权限,而 chmod
则用于在需要时更改特定文件或目录的权限。
(5)改变用户组和文件主
$ chgrp
改变文件或目录所属的用户组。
chgrp [选项] GROUP FILE
-v或--verbose
显示指令执行过程
$chown
改变某个文件或目录的所有者和/或所属的组
chown [选项] OWNER:GROUP FILE
(6)联机帮助
$ man
格式化并显示联机帮助手册页
$ help
查看所有shell内置命令的帮助信息
help `-s` cd
//-s是只显示cd: cd [-L|[-P [-e]][-@]] [目录]
四、VIM与进程
1、VI编辑器
(1)vi编辑器是什么
“Visual interface” 文本编辑器
全屏幕交互式编辑程序 只有命令没有菜单
(2)vi三种工作模式
-
命令模式
-
插入模式
插入命令i、附加命令a 、打开命令o、替换命令s、取代命令r、修改命令c
-
末行模式
2、vi基本命令
(1)进入退出
$ vi filename
(2)定位
命令 | 作用 |
---|---|
h、方向左键、Back Space | 左移一个字符 (常用) |
j、方向下键 | 下移一行 (常用) |
k、方向上键 | 上移一行(常用) |
l、方向右键、空格键 | 右移一个字符(常用) |
$ | 移至行尾 (常用) |
0(数字)、^ | 移至行首 (常用) |
回车键 | 移至下行行首 |
ctrl +b 、PgUp | 向后移动一页 (常用) |
ctrl +f、PgDn | 向前移动一页 (常用) |
ctrl +u | 向后移动半页 |
ctrl +d | 向前移动半页 |
G | 移至文章最后(常用) |
nG 、:n | n表示数字,移动到文件的第n行 (常用) |
gg | 移动到文件的第一行 (常用) |
n(回车) | n表示数字,光标向下移动n行 (常用) |
(3)删除复制粘贴
命令 | 作用 |
---|---|
x, X | 在一行中,x向后删除字符,X向前删除字符 (常用) |
nx | N表示数字,连续向后删除n个字符 |
dd (ndd) | 删除光标所在一整行(n行)(常用) |
d1G | 删除光标所在位置到第一行所有的数据(常用) |
dG | 删除光标所在位置到最后一行所有的数据 (常用) |
D | 删除光标所在处到行尾(常用) |
:5,10d | 删除第五到第十行(常用) |
yy | 复制光标所在一整行(常用) |
nyy | n表示数字,复制光标所在的向下n行(常用) |
y1G | 复制光标所在位置到第一行所有的数据(常用) |
yG | 复制光标所在位置到最后一行所有内容 (常用) |
p,P | p将已复制的内容粘贴到光标下一行,P相反(常用) |
J | 将光标所在行与下一行结合在一起(常用) |
u | 撤销前一个操作 (常用) |
ctrl + r | 重做前一个撤销操作(常用) |
. | 重复前一个动作(常用) |
(4)搜索与替换
命令 | 作用 |
---|---|
/string | 向光标之下搜索指定字符串 (常用) |
?string | 向光标之上搜索指定字符串(常用) |
n | 搜索指定字符串的下一个出现位置(常用) |
N | 搜索指定字符串的上一个出现位置(常用) |
:n1,n2s/old/new/g | 在n1-n2行内,替换指定字符串(常用) |
:%s/old/new/gc | 全文替换指定字符串,替换前用户确认(常用) |
:10,15s/and/AND/gc //将 10 到 15 行之间的『and 字符串』改为『AND 字符串』,替换前用户确认
:1,$s/and/AND/g //1行到最后一行的替换
(5)编辑模式命令
命令 | 作用 |
---|---|
i, I | i从当前光标所在处插入,I从当前所在行的第一个非空格处开始插入(常用) |
a, A | a从当前光标所处下一个字符开始插入,A从当前所在行的最后一个非空格处开始插入(常用) |
o, O | o在当前光标所在的下一行插入一个新行,O相反(常用) |
r, R | r会替换光标所在的那一个字符,R会一直替换光标所在的字符(常用) |
(6)命令模式命令
命令 | 作用 |
---|---|
:w | 保存修改(常用) |
:w new_filename | 保存为指定文件 |
:wq,:x | 保存修改并退出vi(常用) |
ZZ | 保存修改并退出vi |
:q! | 不保存修改退出 (常用) |
:set nu///取消是 set nonu | 设定行号 |
3、进程
(1)进程概念
1-1 多道程序设计
-
顺序程序活动特点
** 顺序性、封闭性、可再现性**
资源浪费、效率低下
-
多道程序设计
在内存中同时存放多道程序,它们在管理程序的控制下交替地在CPU上运行。
大大改进系统性能,吞吐量增加
-
程序并发执行的特征
1-2 进程概念
-
进程定义
-
进程基本特征
(2)进程状态
2-1 进程的基本状态
2-2 进程的状态转换
2-3 进程族系
(3)进程管理命令
3-1 查看进程状态
$ ps
查看进程状态
ps [选项]
-ef
可以显示系统中所有进程的全面信息
aux
显示所有终端上所有用户的有关进程的所有信息
-l
列出活动进程的详细状况;
-c
列出活动进程的优先级
--forest
显示进程调用层次关系
$ pstree
树形缩进形式显示进程调用关系;
$ top
动态显示进程变化情况,默认三秒更新一次;
-u
显示用户进程信息
$ top*
实时显示 process 的动态。
使用权限:所有使用者
3-2 进程管理
$ kill
终止一个进程的运*
kill [-s 信号|-p ] [-a] pid
kill -l [信号] //看特定信号的编号,不杀死
【信号】默认:15
强行杀掉进程:9
-s 信号
:指定要发送的信号。-s TERM
表示发送终止信号给进程。如果省略-s
选项,则默认发送终止信号。
【TERM
(终止)、HUP
(挂起)、INT
(中断)】-p
:显示要发送的信号而不发送它。这个选项用于预览将要发送的信号,而不实际影响进程。-a
:发送信号给所有具有相同进程组ID的进程。通常,kill
只发送信号给指定PID的进程,但使用-a
选项将信号发送给整个进程组。pid
:指定目标进程的进程ID(PID)。可以提供一个或多个PID,用空格分隔。
kill -s TERM 1234
//这将向PID为1234的进程发送终止信号。
kill -l
用于列出系统支持的信号,不会发送信号,只是显示信号的信息。
$ sleep
两条命令执行之间停顿指定的时间
$ nice
设定进程的nice值。
但一般用户只能设定正值,从而主动降低其优先级,
只有特权用户才能把nice的值置为负数。
nice 【选项】【命令】
$ nice vi & //设置默认优先级
$ nice –n 5 sleep 300& //&后台
& sudo nice –n -10 sleep 300&
$ nohub
忽略挂起信号对命令的影响,而继续运行指定的命令
nohup 命令 [参数]
$ wait
等待指定的进程,并返回其终止状态
wait [n]
//n可以是进程的ID或者作业描述符。
# sleep 20 & //后台运行sleep 20,屏幕上打印出 [1] 10472
# wait 10472 //wait命令可以使sleep 20执行完
(4)其他常用命令
4-1 磁盘使用情况统计
$ df
报告文件系统中占用磁盘空间的情况
-a
把不占用磁盘空间的文件系统也列出来
-h
:以人类可读的方式显示文件大小,使用 K(千字节)、M(兆字节)、G(吉字节)等单位**
-i或--inodes
列出 inode 资讯,不列出已使用 block
$ du
统计出每个目录占用磁盘空间的情况
可以逐级进入
-h
:以易读的方式显示文件大小,使用 K(千字节)、M(兆字节)、G(吉字节)等单位
-s
表示summarize,仅显示统计量
$ free
显示内存状态。
free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。
$ lsmod
显示已载入系统的模块。
执行lsmod(list modules)指令,会列出所有已载入系统的模块。Linux操作系统的核心具有模块化的特性。
4-2 文件压缩和解压缩
$ gzip
对文件进行压缩和解压缩
gzip [选项] [name...]
扩展名是【.gz】保持原有的存取权限、访问与修改时间。
没有选项
压缩
-d
:表示解压缩(decompress)。这个选项告诉gzip
对文件进行解压操作。-v
:表示详细模式(verbose)。这个选项告诉gzip
在执行操作时显示详细信息,包括解压缩的进度和结果。-l
显示压缩文件信息,不执行压缩操作
$ zip
压缩
$ unzip
对ZIP格式的压缩文件进行解压缩。这种格式的压缩文件带有后缀【.zip】
//显示有关压缩文件的信息,但不作解压缩:
$ unzip -v chapter1.zip
-v
显示信息,不解压缩操作
没有选项
解压缩
参数说明:
- -P<密码> 使用zip的密码选项。
- -d<目录>指定文件解压缩后所要存储的目录
$ tar*
后缀【.tar】
解压:tar xvf 【文件名】
压缩:tar cvf 【压缩后的文件名】 【压缩前的文件】
参数说明:
-c
或–create 建立新的备份文件。-C<目的目录>或--directory=<目的目录>
切换到指定的目录。-x或--extract或--get
从备份文件中还原文件。-f<备份文件>或--file=<备份文件>
指定备份文件。-v或--verbose
显示指令执行过程。-z或--gzip或--ungzip
通过gzip指令处理备份文件。
五、Linux下的c程序
1、gcc编译系统
$ gcc
(1)文件名后缀
文件名后缀 | 文 件 类 型 |
---|---|
.c | c源文件 |
.C .cc .cp .cpp .c++ .cxx | C++源文件 |
.h | c/c++头文件 |
(2)c语言编译过程
(3)gcc命令行选项
$ gcc f1.c f2.c (针对C语言源程序)
执行完后生成默认可执行文件a.out
3-1 gcc选项——预处理选项
3-2 gcc选项——编译选项
选 项 | 功 能 |
---|---|
-c | 只生成目标文件【.o 】不进行连接。用于对源文件的分别编译 |
-S | 只进行编译,不做汇编,生成汇编代码文件格式,其名与源文件相同,但扩展名为.s |
-o file | 将输出放在文件file【可执行文件】中。如果未使用该选项,则可执行文件放在a.out中 |
-g | 指示编译程序在目标代码中加入供调试程序gdb使用的附加信息 |
-v | 在标准出错输出上显示编译阶段所执行的命令,即编译驱动程序及预处理程序的版本号 |
gcc mfile**.c** sq**.c** -o meng1 也可以
$ 编译静态库ar*
$ ar -crv libadd.a add.o
//ar 打包静态库,将 add.o 打包成 libadd.a,
参数 [-crv] :–c表示建立备存文件,- r表示将文件插入备存文件中,-v表示程序执行时显示详细的信息。
$ gcc main.c -L./ libadd.a -o main2
//使用静态库 libadd.a编译main.c, [-L./] 表示将当前目录加到静态库的搜索路径
$ 编译动态库*
/(与上面的不同) | 异同:动态库和静态库一样也是函数的二进制的集合,但动态库在程序运行的时候动态加载到内存,而静态库在编译时期就整合到最后的可执行文件中。 |
---|---|
$ gcc -fPIC -c add.c -o add.o | 1. 编译位置无关的目标文件 add.o,因为动态库动态加载到内存中的位置不确定,所以需要编译位置无关 |
$sudo gcc -shared add.o -o /usr/lib/libadd.so | 2. 打包成动态库, 如果不加sudo会提示没有权限,如果不指定/usr/lib/文件夹,会在执行时提示error while loading shared libraries: libadd.so: cannot open shared object file: No such file or directory |
$sudo gcc -o main3 main.c -L /usr/lib/ -ladd | 3. 编译 |
$ ./main3 | 4. 执行 |
3-3 gcc选项——优化程序选项
对中间代码的优化
针对目标码生成的优化
3-4 gcc选项——连接程序选项
gcc test.cpp -o test -lstdc++
-lstdc++
用来通知链接器链接静态库 libstdc++.a。为了编写更加健壮和可移植的代码.
2、gdb程序调试工具
程序错误分类
gdb
(1)启动gdb和查看内部命令
//编译程序时候需要使用-g选项
$ gcc -g prog.c -o prog
启动gdb
(1)以一个可执行程序作为gdb的参数:
$ gdb prgm
(2)同时以可执行程序和core文件作为gdb的参数:
$ gdb prgm core
(2)显示源程序和数据
2-1 显示和搜索源程序
$ list
模式搜索
2-2 查看运行时数据
print i (或p i)
//显示当前变量i的值。
print i*j (或p i*j)
//将根据程序当前运行的实际情况显示出i*j的值。
gdb运算符
-
&
地址
-
{ type }adrexp
type数据类型 adrexp存放地址
-
@
print array[3]@5 打印从array第三个元素开始的5个数组元素的数值。
-
file :: var
表示文件file(或者函数function)中变量var的值
输出格式
v由表示格式的字母(如o、x、d、u、t、f、a、i、c、s)和表示数据长度的字母(如b、w、h、g)组成。
(3)改变和显示目录或路径
$ directory
将给定目录dir添加到源文件搜索路径的开头,并且忽略先前保存的有关源文件和代码行位置的信息
directory [dir]
或者
dir [dir]
$ cd
$ path
将一个或多个目录添加到目标文件搜索路径的开头
$ pwd
$ show directories
显示定义的源文件搜索路径
$ show paths
显示当前查找目标文件的搜索路径
(4)控制程序的执行
4-1 设置断点
$ break
4-2 显示断点
$ info
4-3 删除断点
$ delete
4-4 运行程序
$ run
4-5 单步跟踪和连续执行
4-6 函数调用
$ call
调用 call 【函数】
立刻退出 return 【函数】
运行完再退出 finish 【】
(5)其他常用命令
六、shell程序设计
1、shell概述
(1)什么是shell
Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。
实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。
(2)shell特点和类型
特点
●组合新命令很简单;
●提供了文件名扩展字符;
●可以直接使用shell的内置命令 ;
●允许灵活地使用数据流;
●结构化的程序模块;
●提供了在后台(&)执行命令 ;
●提供了可配置的环境;
●提供了一个高级的命令语言。
(3)shell建立和执行
建立
vi ex1.sh
执行
bash ex1.sh 参数
./ex1.sh 参数
//将shell脚本权限设置为可执行
$ chmod a+x ex1.sh 然后 ./ex1.sh
$ PATH=$PATH:•
$ ex2.sh 或者 $ •/ex1.sh
2、shell变量和算术运算
(1)简单shell
定义和赋值:=
引用:$变量名
如果在赋给变量的值中含有空格、制表符或换行符,应该用双引号把这个字符串括起来。
(2)数组
(3)位置参数
$ shift
$ set
为位置参数赋值
(4)预先定义的特殊变量
$#
除脚本名外,命令行上参数的个数
$?
上一条前台命令执行后的返回值(也称“退出码”等)
$
当前进程的进程号
$!
上一个后台命令对应的进程号
$*
命令行上实际给出的所有实参
“a b c”
$@
和*类似
“a” “b” “c”
(5)环境变量
$ env
$ export
(6)算术运算
$ let
let “j=i*6+2” 等价于
((j=i*6+2))
3、输入输出及重定向
(1)输入/输出
$ read
从键盘上读取数据,然后赋给指定的变量
$ echo
(2)重定向
看实验!
4、特殊字符和命令语法
(1)引号
双引号
(除$、倒引号(`)和转义字符(\)外)均作为普通字符对待。
单引号
所有均为普通字符!
倒引号
(2)注释,管道线,后台命令
(3)命令执行操作符(||&&)
(4)复合命令
{}成组命令只在本shell内执行命令表,不产生新的进程
()成组命令在新的子shell内执行,要建立新的子进程。
5、程序控制结构
看实验!!!!
(1) if
if [ ]
then ......
elife []
then.......
else
.....
fi
(2)条件测试
数值
字符串
文件
逻辑运算
(3)while
while(条件)
do
命令
done 满足条件就执行
(4)until
until(条件)
do
命令
done 不满足条件就执行
(5)for
(1)
for var in 【值/正则表达式】
do
命令
done
(2)
for ((i=1;i<=$1;i++))
do
命令
done
(6)case
case 字符串 in
模式字符串1)
命令
;;
。。。。。。
模式字符串n)
命令
;;
esac
(7)break、continue、exit
break[n]:n是要终止循环的层数
6、函数和内置命令
(1)shell函数
function 函数名()
{
命令表
}
(2)内置命令
$ eval
连接多个命令
$ readonly
命令 | 说明 |
---|---|
$ readonly string=‘ok’ | 使用readonly命令定义一个只读变量string,并且将其值初始化为’ok’; |
$ readonly | 使用readonly命令显示系统中所有的已经定义的只读变量; |
$ readonly string=‘ok’ | 使用readonly命令定义一个只读变量string,并且将其值初始化为’ok’; |
$ type
显示指定命令的类型,判断给出的指令是内部指令还是外部指令
7、脚本调试**
(1)解决环境设置问题
(2)解决脚本错误问题
七、Linux内核、网络、系统管理、软件安装
1、Linux内核结构
Linux操作系统是采用整体结构的操作系统
(1)进程管理
进程具有一段可执行的程序、专用的系统堆栈空间、私有的“进程控制块”(即task_struct数据结构)和独立的存储空间
init 进程是系统所有进程的起点
$ fork
创建新进程
$ clone
$ wait3 or wait4
$ exit
$ execve
(2)文件系统
(3)内存管理
(4)设备管理
(5)中断、异常和系统调用
2、网络管理
(1)基本命令
$ ping**
测试本机与远程主机的通信路径是否畅通
ping [选项]... 目的地
$ ifconfig**
配置一个网络接口,即指定一个网络接口的地址,或者设置网络接口的参数
ifconfig [接口名]
或者
ifconfig 接口名 选项|地址
$ netstat
对TCP/IP网络协议和连接进行统计,显示网络状态
统计内容包括:网络连接情况、路由表信息、接口统计等。常用来检查路由选择
参数说明***
-a或–all 显示所有连线中的Socket。
-A<网络类型>或–<网络类型> 列出该网络类型连线中的相关地址。
-c或–continuous 持续列出网络状态。
-C或–cache 显示路由器配置的快取信息。
-e或–extend 显示网络其他相关信息。
-F或–fib 显示FIB。
-g或–groups 显示多重广播功能群组组员名单。
-i或–interfaces 显示网络界面信息表单。
-l或–listening 显示监控中的服务器的Socket。
-M或–masquerade 显示伪装的网络连线。
-n或–numeric 直接使用IP地址,而不通过域名服务器。
-N或–netlink或–symbolic 显示网络硬件外围设备的符号连接名称。
-o或–timers 显示计时器。
-p或–programs 显示正在使用Socket的程序识别码和程序名称。
-r或–route 显示Routing Table。
-s或–statistice 显示网络工作信息统计表。
-t或–tcp 显示TCP传输协议的连线状况。
-u或–udp 显示UDP传输协议的连线状况。
-v或–verbose 显示指令执行过程。
-V或–version 显示版本信息。
-w或–raw 显示RAW传输协议的连线状况。
-x或–unix 此参数的效果和指定"-Aunix"参数相同。
–ip或–inet 此参数的效果和指定"-Ainet"参数相同。
$ route
为数据传递所需的网络连接配置路由信息
3、系统管理概述
4、用户和工作组管理
(1)用户管理
1-1 与用户相关的文件
passwd文件
密码字段使用一个“x”来代替,将/etc/shadow作为真正的密码文件
shadow文件
利用/etc/shadow文件存放用户账户的加密密码信息和密码的有效期信息
1-2 建立和删除用户账户
# useradd
useradd [选项] 用户名
# userdel
userdel [-r] 用户名
-r
把用户主目录及其下面的所有内容都删除
-
查封账户方式:
使用vi编辑/etc/passwd(或/etc/shadow)文件,在相关用户记录的密码字段的首字符前加上符号“*”
(2)工作组管理
2-1 与工作组相关的文件
/etc/group文件
2-2 添加和删除工作组
# groupadd
添加
# groupdel
删除
# usermode
usermode –g 【组名】 【用户名】
//把用户加到某一组
#usermode –d 目录名 用户名
//更改用户主目录
5、linux安装
sudo apt-get update
八、其他命令
$ uname
显示电脑以及操作系统的相关信息
$ file
辨识文件类型
九、简答
-
什么是shell
Shell是系统的用户界面, 提供了用户与内核进行交互操作的一种接口。Shell是一个命令解释器,它接收用户输入的命令并把它送入内核去执行。
Shell有自己的编程语言,也有许多其他语言的特点,允许用户编写由shell命令组成的程序。
-
什么是操作系统
Linux 操作系统由多个组件组成,这些组件共同协作以提供完整的操作系统功能。以下是 Linux 操作系统的主要组成部分:
-
内核 (Kernel):
- Linux 内核是操作系统的核心部分,负责进程管理、内存管理、文件系统管理、设备管理、中断处理、异常处理、系统调用等。它是操作系统的核心,负责直接与硬件进行交互。
-
Shell:
- Shell 是用户与内核交互的命令解释器。它允许用户通过命令行或脚本与操作系统进行通信。
-
文件系统 (File System):
- Linux 文件系统负责管理和组织存储在硬盘上的数据。它提供了对文件和目录的组织、访问和管理。常见的 Linux 文件系统包括 ext4、XFS、Btrfs 等。
-
系统库 (System Libraries):
- 系统库是一组为应用程序提供常用功能的软件库。这些库包括 C 库(glibc)、数学库、网络库等,为开发者提供了在应用程序中使用的标准功能。
-
系统工具 (System Utilities):
- 系统工具是一组用于管理和维护系统的命令行工具。例如,
ls
用于列出文件和目录,ps
用于查看进程信息,top
用于监控系统资源等。
- 系统工具是一组用于管理和维护系统的命令行工具。例如,
-
图形用户界面 (Graphical User Interface - GUI):
- Linux 支持多个图形用户界面,允许用户通过图形方式与系统交互。
-
网络协议栈 (Network Protocol Stack):
- Linux 操作系统包含一个完整的网络协议栈,支持各种网络通信协议。这使得 Linux 成为服务器和网络设备的首选操作系统之一。
-
设备驱动程序 (Device Drivers):
- 设备驱动程序是内核的一部分,用于与硬件设备进行通信。它们允许操作系统与各种硬件设备(如磁盘驱动器、网络适配器)进行交互。
这些组件一起形成了一个功能完备、灵活且可定制的操作系统,适用于各种场景,从服务器到嵌入式系统。