2021-Linux程序设计-Exam1-重点
Exam1-重点
1. 第一章:Linux Basic
1.1. Linux 基础
- Linux 是什么样的系统:Linux是使用C编译器、C依赖库、emacs和bash开发的。
- Linux 创始人:Linus Torvalds
- Linux 发行版:Red Hat(后来发展为Fedora)、Debain(一定要配置自由软件,不会配置商业软件)、Ubuntu(用户好用就行)、SuSe、Mandrake、Redflag
1.2. Linux 安装过程
- 安装过程:选择语言、键鼠 -> 磁盘分区 -> 设置引导加载程序 -> 配置网络 -> 配置用户和认证 -> 选择包装组 -> 配置 -> 安装软件包 -> 创建启动盘
- 分区的基本知识
- 最多只能有四个主分区;主分区可以是扩展分区;一个扩展分区可能有很多逻辑分区。
- MBR硬盘分区
- 磁盘分区 不能超过4T
- 扩展分区 扩展分区不能直接使用,还需要划分为逻辑分区,额外分区是指向正确的额外分区表
- 逻辑分区
- MBR:Master Boot Record:主引导记录
- 磁盘的0磁道的第1个扇区称为MBR,共512字节,由BIOS定位
- 内容
- 446 bytes 引导代码 Boot Loader
- 64 bytes 磁盘分区表,最多4个条目
- 2 bytes的magic number(0x55AA)
- GPT(GUID Partition Table) Globally Unique Identifier Partition Table
- 新的硬件必须有新的代码与其对应
- 不要在老的机器上装新的分区组织方式
- GPT是MBR不够用了才会选择使用
1.3. Linux 引导加载程序
- 引导加载程序加载并启动Linux内核:传递启动参数(设备信息)、选择加载初始根磁盘、启动其他操作系统。
- 通用引导加载程序:LILO(Linux加载程序)、GRUB(Grand Unified Boot Loader)
- 除非使用其他引导加载程序,否则通常在/dev/hda中进行配置
1.4. Linux 启动过程
- 打开电源 -> BIOS -> boot loader -> Linux kernel -> init -> System Ready
- BIOS:检查存储,从非易失存储中加载参数(内存时序、启动设备顺序)、检查引导设备(软盘、CD-ROM、磁盘等)、装载引导设备的MBR(包含"Boot Loader"和分区表,通常是有LILO/GRUB来启动)并执行
- 初始化进程
- 使用/etc/inittab的配置文件
- 按照启动级别启动
1.5. Linux 软件安装
- 开源软件源代码操作
1 |
|
- 自动安装:
- apt-get command *
- update 获取到最新的软件包
- upgrade 升级已安装的所有软件包
- dpkg:debian/Ubuntu、手动一个一个安装
- aptitude
- yum + rpm
- rpm:RPM打包管理
- rpm -q -a
- rpm –ivh package-name
- rpm –e package-name
- apt-get command *
1.6. 命令行和图形界面各有什么好处?
2. Shell Programming
2.1. Shell是什么
- Shell是用户与操作系统的接口,作为核外程序存在。具有双重角色:
- Shell是一种命令解释程序:Linux的开发启动过程(进程树)、Shell的工作步骤:打印提示符;得到命令行;解析命令;查找文件;准备参数;执行命令。
- Shell还是一种独立的程序设计语言解释器。
- Shell脚本的执行方式
- 方法1:
sh script_file
,Shell新建进程运行本方法 - 方法2:
chmod +x script_file
授予文件可执行权限;./script_file
,Shell新建进程运行 - 方法3:
source script_file
;.script_file
,Shell使用本进程运行
- 方法1:
- 不同类型的Shell
- shell和虚拟终端是不同的,一台电脑只有一个console,但是可以划分很多虚拟终端,虚拟中断是从console模拟出来的。
VT 1-6
文本模式登陆VT 7
图形模式登陆提示- 可以使用Alt-Fn在VT之间切换
2.2. 基本命令
passwd
:修改密码mkpasswd
:生成随机密码date
:当天日期cat
:展示一个日历who
:查看用户名以及当前登录名whoami
:查看用户名finger
:当前用户的home目录clear
:清空当前屏幕echo
:写一个信息到屏幕;-n 不换行write
:为已经登录的用户发送一个消息wall
:群发消息talk
:希望进行对象mesg
:用来设置是否允许向当前终端写消息(Y/N)cd
:切换文件夹mkdir
:创建文件夹-m
设置权限(-m 777)-p
一次性创建多个路径-v
每次创建新目录都显示信息
rmdir
:删除文件夹ls
:查看信息:-l
查看所有信息;-a
查看包含隐藏文件;-R
递归的查看所有文件信息;格式为文件类别、权限(3种)、链接数(硬链接数)、拥有者、拥有者组、大小、最后修改时间、名称
touch
:更新权限或修改文件权限-a
更改File变量指定的文件的访问时间,不更新修改时间-c
如果文件不存在,则不要进行创建-f
强制touch运行,不需要管理文件的读和写许可权-m
更改FILE的修改时间,不要更改访问时间。
cp
:拷贝文件mv
:移动或重命名文件ln
:链接文件rm
:删除文件cat
:打印文件内容more
:显示文件内容,向下滚动less
:显示文件内容,上下滚动ps
:报告所有的进程状态pstree
:展示树状的程序们jobs
:用于显示Linux中的任务列表及任务状态,包括后台运行的任务;显示任务号及其对应的进程号。fg
:将一个进程移动到前台执行bg
:将一个进程移动到后台执行<ctrl-Z>
:停止某一个任务kill
:杀死一个进程nohup
:忽略挂起的信号nice
:以更改过的优先级运行进程renice
:重新指定一个或多个进程的优先级top
:查看当前的CPU信息状态mknod
: 在/dev下创建驱动的设备文件mkfifo
:创建管道文件chmod
:修改文件权限who
:u,g,o,aOperator
:+,-,==what
:r(4),w(2),x(1)
chown
:修改文件所有者chgrp
:修改文件分组find
:查找(find dir [-name] “*.c”)- options
- -depth 在查看目录本身之前,先搜索目录的内容
- -follow 跟随符号链接
- -maxdepths N 最多搜索N层目录
- -mount/-xdev 不搜索其他文件系统中的目录
- tests
- -name 根据名字查找
- -type 根据文件类型查找
- -user 根据用户名查找
- -ctime 根据最近更新时间查询
- -atime N 文件在N天之前被最后访问过
- -mtime N 文件在N天之前被最后修改过
- -newer other_file 文件比other_file新
ar
:用于建立或修改备存文件(创建静态链接库),或是从备存文件中抽取文件。tar
:- 解压:tar -xzvf test.tar.gz
- 压缩:tar -zcvf test.tar.gz ./test/
head
:查看文件头部,默认10行tail
:查看文件尾部,默认10行su
:切换用户名uname
:打印当前Linux的版本信息man
:查看命令说明书grep
:在文件中搜索字符串
2.3. 重定向 掌握
- 标准输入、标准输出、标准错误
- 对应的文件描述符:0、1、2
- C语言变量:stdin、stdout、stderr
- 符号
<
:输入重定向,改变命令的输入,后面指定输入内容(文件名)>
:输出重定向,将前面输出的部分输入到后面的文件,并清空文件内容。>!
:同上,强制覆盖。<<
:追加输入重定向:后面跟字符串,用来表示输入结束>>
:追加输出重定向:把前面输出的东西追加到后面的文件尾部,不清除文件的内容2>
:错误重定向:将错误的信息输入到后面的文件中,会删除文件原有的内容2>>
:错误追加重定向:将错误的信息追加到后面的文件中,不会删除文件原有的内容
- 重定向操作在底层本质上就是调用了
dup2
函数,将进程的文件描述符进行拷贝和覆盖 - 一般情况下,每个Unix/Linux命令运行时都会打开三个文件:
- 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
- 标准输出文件(stdout):stdout的文件描述符为1,Unix程序默认向stdout输出数据。
- 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
- 如果希望将stdout和stderr合并后重定向到file,可以这样写:command > file 2 >& 1或command >> file 2>&1,为什么需要将标准错误重定向到标准输出的原因,那就归结为标准错误没有缓冲区,而stdout有。
- 如果希望对stdin和stdout都重定向,可以这样写:command < file1 > file2;command命令将stdin重定向到file1,将stdout重定向到file2。
2.4. 管道 掌握
- 将一个进程的输出作为另一个进程的输入
- 上一个操作的标注输出指的是上一个命令在一系列重定向操作之后的仍然会输出到stdout的文件描述符
2.5. 环境变量 掌握
- 变量包括 用户变量、环境变量、参数变量和内部变量
- 操作环境的参数
- 查看和设置环境变量
echo $file_parameters
env
查看所有环境变量set
查看所有环境变量
- 例:PATH环境变量,对变量进行读操作添加
$
,而写操作不必echo $PATH
export PATH
:设置和显示环境变量
- 具体变量
HOME
用户登录目录PATH
问号分割的用来搜索命令的目录清单PS1
命令行提示符,通常是$字符PS2
辅助提示符,用来提示后续输入,通常是>字符IFS
输入区分隔符UID
当前用户的识别字,取值由数位构成的字串PWD
当前工作目录的绝对路径名
- 参数变量和内部变量(未提)
$#
传递到脚本程序的参数个数$0
脚本程序的名字$1, 2...
脚本程序的参数$*
全体参数组成的清单,使用IFS中的第一个字符分割$@
$*
的变体,不使用IFS中的第一个字符分割
2.6. 正则表达式 简单掌握
^
指向任何一行的开头$
指向一行的结尾.
任意单个字符[]
包括?
匹配0或1次*
匹配0次或多次+
匹配一次或多次{n}
匹配n次{n,}
匹配n次或n次以上{n,m}
匹配n次到m次
2.7. Read、单引号、双引号、转义符
Read
read var
会等待从控制台获得输入放在$var
中,要是直接read则会把输入的值放在$REPLY
-p "str"
先输出提示符-t 5
5s内输入-s
不显示输入-a
将分裂后的字段依次存储到指定的数组中,存储的起始位置从数组的index=0开始。-d
指定读取行的结束符号。默认结束符号为换行符。-n
限制读取N个字符就自动结束读取,如果没有读满N个字符就按下回车或遇到换行符,则也会结束读取。-N
严格要求读满N个字符才自动结束读取,即使中途按下了回车或遇到了换行符也不结束。其中换行符或回车算一个字符。-r
禁止反斜线的转义功能。这意味着""会变成文本的一部分。
- 单引号:所有字符都保持本身字符的意思,而不会被bash进行解释
- 双引号:除了
$
、''
和\
以外,双引号内的所有字符将保持字符本身的函数而不被bash解释(打印上面的特殊字符需要配合转义符号) - 转义符
- echo直接加内容会解析所有,如果后面的内容有空格,会当做两个参数-用双引号引起来
2.8. 简单操作
2.8.1. 字符串操作
str1 = str2
字符串相同则结果真str1 != str2
字符串不先沟通则结果为真-z str
字符串为空则结果为真-n str
字符串不为空则结果为真
2.8.2. 文件操作
-e file
文件存在则结果为真-d file
文件是一个子目录则结果为真-f file
文件是一个普通文件则结果为真-s file
文件的长度不为零则结果为真-r file
文件可读则结果为真-w file
文件可写则结果为真-x file
文件可执行则结果为真
2.8.3. 逻辑操作
! expr
逻辑表达式求反expr1 -a expr2
逻辑表达式 andexpr1 -o expr2
逻辑表达式 or
2.8.4. 算术操作
expr1 –eq expr2
两个表达式相等则结果为真expr1 –ne expr2
两个表达式不等则结果为真expr1 –gt expr2
expr1大于expr2则结果为真expr1 –ge expr2
expr1大于或等于expr2则结果为真expr1 –lt expr2
expr1小于expr2则结果为真expr1 –le expr2 expr1
小于或等于expr2则结果为真
2.9. Shell编程
2.9.1. if语句
- if语句的条件判断是使用test命令获得的[ expression ],expression是前半个括号的参数
- Shell中0表示为真,expression为0经过then
1 |
|
- 紧凑模式:使用;分割
2.9.2. case语句
1 |
|
2.9.3. for语句
1 |
|
2.9.4. while语句
1 |
|
2.9.5. until语句
1 |
|
2.9.6. select语句
- Select后面输入的是数字,对应item list
1 |
|
2.9.7. 命令组合
- 分号串联:
command1;command2;...
- 条件组合
- AND命令表:
statement1 && statement2 && ...
- OR命令表:
statement1 || statement2 || ...
- AND命令表:
2.9.8. 函数:相当于另一个命令
1 |
|
2.9.9. 杂项命令
break
跳出循环continue
调到下一个循环继续exit n
以退出码n退出return
函数返回export
将变量导出到shell成为环境变量set
设置环境变量unset
删除环境变量trap
收到收到操作系统信号后执行的动作:
冒号命令:空命令.
句号命令或source:在当前shell中执行命令,而不新启动进程
2.9.10. 捕获命令输出
- 语法
$(command)
:执行command并将结果作为字符串放在这里command
- 算术扩展:
$(($x+1))
- 参数扩展:
${param=default}
:如果param不存在,则返回default,并将它设置为default的值${param:=default}
:如果param不存在或值为空,做如上操作- `$
2021-Linux程序设计-Exam1-重点
https://spricoder.github.io/2021/05/03/2021-Linux-Programming/2021-Linux-Programming-Exam1-%E9%87%8D%E7%82%B9/