《Linux程序设计》各章知识点梳理
《Linux程序设计》各章知识点梳理
- 正则表达式
- 字符集。[]表示其中的某一个字符。如[adz] [A-Z]
- ^表示行的开头,$表示行的结尾(不是字符,是位置),‘$’表示空行
- .表示任意一个字符,必须存在(需要使用.的时候用\转义)
- ?表示匹配零个或者一个字符
- *表示匹配零个或者多个字符(oo*表示第一个o一定存在,第二个o有零个或者多个)
- +表示匹配一个或者多个字符
- 组合使用,.*表示零个或者多个任意字符
- {n}表示匹配n个字符
- {n,}表示匹配n个或者多个字符
- {n,m}表示匹配n个到m个字符
- |表示或
- ()表示分组
第1章
- 软件包的管理方式方面,Ubuntu、CentOS的差异
Ubuntu使用apt-get,CentOS使用yumyum install emacs apt-get install emacs
- 如何添加一个新用户?
useradd user1
- 什么是Shell?
Shell是系统的用户界面,提供了用户与内核进行监护操作的一种接口。它接受用户输入的命令并把它们送去内核去执行。实际上Shell是一个命令解释器,解释由用户输入的命令并把它们送到内核。广泛的shell有Bash、TC Shell等,默认登录Shell是Bash。 - 如何查看一条命令的帮助文档?
man --options # 获取的信息更全面 options --help # 获取的信息更简洁
- ls命令的各种选项
ls -a # 显示所有文件 ls -l # 显示详细信息 ls -h # 以人类可读的方式显示文件大小 ls -t # 按时间排序 ls -r # 逆序显示 ls -R # 递归显示 ls -S # 按文件大小排序 ls -d # 显示目录本身 ls -i # 显示inode(索引编号) ls -1 # 每行一个文件
- 建立、复制、删除目录
mkdir dir1 # 创建目录 cp -r dir1 dir2 # 复制目录 rm -r dir1 # 删除目录 -r:递归整个目录进行操作
- cd命令,如何进入特定的目录,例如主目录、上一层目录等?
cd ~ # 进入主目录 cd .. # 进入上一层目录 cd . # 进入当前目录
- chmod命令,修改权限
chmod 777 file1 # 为file1添加读、写、执行权限 chmod 755 file1 # 为file1添加读、写、执行权限 chmod # r:read w:write x:execute guoa表示用户、同组用户、其他用户、所有用户 chmod ug=rwx,o=x file1 # 为file1添加读、写、执行权限
- grep与正则表达式
grep [参数] [查找内容] [文件名] # 参数:-i:忽略大小写 -v:反向查找 -n:显示行号 -c:统计匹配行数 -r:递归查找
- sort命令
sort [参数] [文件名] # 参数:-n:按数字排序 -r:逆序排序 -t:指定分隔符 -k:指定列排序
- wc命令,管道的使用
wc # 统计文件的行数、单词数、字符数 wc 1.cpp #-c:统计字符数 -w:统计单词数 -l:统计行数
- pwd与PWD
pwd # 显示当前目录 PWD # 环境变量,显示当前目录
- 各种压缩命令,特别是tar命令
tar [参数] [文件名] # -c:创建 -x:解压 -f <文件名>:指定文件名(不带文件名也可以,必选项) --list:列出文件名但是不解压 -z:具有gzip属性 -j:调用bzip2命令
- find命令
find [路径] [参数] [文件名] # -name:按文件名查找 -user:按用户查找
- mv命令,移动与改名
mv file1 dir1 # 移动文件 mv file1 file2 # 改名
- ln 与 ln -s,符号链接文件与硬链接文件的区别?
ln file1 file2 # 创建硬链接,指向同一个数据块,同时修改,完全相同 ln -s file1 file2 # 创建符号链接,指向原始文件名的路径
- head tail cat more
head -n 10 file1 # 显示文件的前10行 tail -n 10 file1 # 显示文件的后10行 cat file1 # 显示文件的全部内容 more file1 # 分页显示文件内容
- bc计算,与echo命令搭配,如何做计算?如何做小数或浮点数的运算?
echo "1+1" | bc # 计算1+1,搭配echo使用管道 echo "scale=2;1/3" | bc # 计算1/3,保留两位小数
- ps -l命令、ps -ef命令
ps -l # 显示进程的详细信息 ps -ef # 显示所有进程的详细信息
who、free
kill命令及kill函数(C语言)
大写的PWD、PATH、HOME、USER分别表示什么含义?
Shell元字符 *、?、[]、{}、~的使用方法
重定向> >> < ,命令的后台执行、顺序执行分别用什么?
vim有哪几种工作模式?命令模式、末行模式的各种基本操作
Linux文件系统中,有一些默认的目录,例如/etc、/dev等,它们分别存放什么文件?
/etc/passwd是什么文件?文件的内容有哪些?
如何利用管道将多个命令连接起来完成一个指定的任务,例如“统计所有普通文件所含有的字符数”、“统计所有普通文件的个数”
第2章
bash脚本的第一行
shell脚本中,$0 $1 $2 $# $* \(?的含义
Shell编程例题
知道()、{}、[]、`` (())的使用方法
echo “\)i” 与 echo ‘$i’的执行结果的区别
read命令,read $xyz是否正确?
牢固掌握if语句的用法
shell下如何做字符串拼接?
如何判断一个变量是文件还是目录,-e -s的含义
字符串、表达式的比较
for循环,for循环的C语言风格写法
while循环,无限循环,怎么写?
case语句
break
continue
数组,a=(one two three four)是什么含义?如何输出数组的每个元素?
斐波那契数列的构造及其求和。
注:下列内容中,系统调用与函数在说法上没有加以区分。
第3章
gcc -c的含义
gcc编译过程包括哪些步骤,其中的链接步骤指的是什么?
静态库与共享库的不同之处是什么?
make命令的功能、好处?makefile、Makefile的作用,基本结构?
第4章
时间函数(asctime、localtime、time)的使用方法
tm结构的基本属性
如何在C语言中输出当前的时间?(不使用system或exec函数族)
什么是用户空间、什么是内核空间?
getenv函数与env命令
第5章
什么是系统调用、什么是函数?
chmod函数
umask函数的作用、umask命令的使用方法
stat结构体与stat函数、stat命令的联系、各自的功能。
如何根据stat结构体获得文件的类型、权限等信息?
文件描述符与文件指针的区别,各自的应用环境
open、close、read、write要非常熟悉。读文件、读键盘、输出到屏幕、输出到文件操作要熟悉。
open文件时如果采用O_NONBLOCK方式,则后续的效果是怎么样的?
open文件时,O_TRUNC、O_WRONLY是什么方式?
如何利用C语言实现文件的复制?如何编写属于自己的命令程序,mycp ?
opendir、readdir、closedir是用来做什么的?
如何将指定目录下的文件或目录的详细信息(名称、类型、大小、修改时间等)列举出来?
第6章
进程的基本概念
如何获得进程的PID、PPID?
熟练掌握fork函数的用法
父子进程如何交替执行?
什么是僵尸进程、什么是孤儿进程,由谁来回收?
sleep函数的作用?
如何避免僵尸进程,wait函数、waitpid函数的多种用法
如何产生多个进程,而不发生僵尸进程,进程号之间彼此有什么关联?
WIFEXITED、WEXITSTATUS两个宏是用来做什么的?
什么是SIGCHILD信号,有什么作用?
父进程如何给其子进程发送信号,通过什么函数?kill函数与raise函数的区别是什么?
守护进程的特点是什么?如何产生一个守护进程?产生守护进程的每个步骤的作用分别是什么?
什么是进程组、什么是会话组?
守护进程是孤儿进程吗?
如何编写简单的守护进程?例如周期性地向指定文件中写入当前的最新时间、如何监督检查指定文件是否被修改过?
system函数与exec函数族的使用方法,区别
exec函数族中execl、execv、exec le、execlp在使用时,参数方面有何区别?
第7章
进程间通信的几种方式是什么?
用户进程对于信号响应的方式有哪些?如何编程实现?
alarm函数
signal函数的用法
当前进程如何在收到某一特定的信号(例如SIGINT)后,不执行默认的操作,转而执行自定义的操作?
SIGKILL与SIGSTOP的特殊性在哪里?SIGINT、SIGQUIT、SIGTERM的共同点是什么?
什么是管道?什么是匿名管道、什么是命名管道,各自的应用场景是什么?
如何利用pipe系统调用实现父子进程的管道通信?
如何利用匿名管道让父进程写文件、子进程读文件?如何使用dup2函数让操作变得更简单?
命名管道文件的类型是以什么开头的?