主要用于文本处理,重点是正则式+三姐妹的语法。 其中: awk 可以对行和列进行处理,提取出指定的行列并进行计算。 sed 可以对指定的行进行增删改查,进行文本修改。 grep 进行文本筛选。 具体语法可以参考《跟着老男孩学三剑客》。shell常用命令
- mv和cp
移动一个文件或者重命名一个文件:mv 拷贝一个文件:cp
-
linux中默认的shell是bash
-
查看上一个命令的返回结果使用的全局变量:?(使用方法:$?)
-
重定向
>:输出重定向(覆盖) >>:输出重定向(追加) 2>&1:将标准错误重定向到标准输出 >|:禁用>重定向后需要强制重定向的符号
- PS1环境变量:shell终端的提示符
- rm -rf:将一个非空的目录删掉
- 将一个变量导出成环境变量:export
将光标移到下一个单词的开始:w 删除当前光标所在的单词:dw 在尾行模式下保存退出的命令:(:wq)GCC,make编译,GDB调试
- gcc的使用
源代码生成汇编代码:gcc -S 源代码转换成二进制模块:gcc -c 看预处理的结果:gcc -E 添加调试信息:gcc -g
- make与Makefile
make的常用选项: CXXFLAGS:C++编译器选项 CPPFLAGS:编译预处理选项 CXX:C++编译器名称 LDFLAGS:链接选项
Makefile的写法: 目标:依赖项列表 (Tab缩进)命令 例子: CFLAGS=-g LDFLAGS=-L/usr/lib/gsl -lgsl all:SB SB:1SB.o 2SB.o 3SB.o 4SB.o 5SB.o … … 100SB.o gcc –o SB $(LDFLAGS) 1SB.o 2SB.o … … 100SB.o 1SB.o:1SB.c gcc –c $(CFLAGS) 1SB.c ... 100SB.o:100SB.c gcc –c $(CFLAGS) 100SB.c系统配置相关 静态函数库与动态函数库
- ln创建的软链接与硬链接,函数库的链接
【硬连接】 硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。 创建命令:ln 【软连接】 软链接文件有类似于Windows的快捷方式。包含的有另一 文件的位置信息。 创建命令:ln -s [源文件] [软链接文件]
静态函数库和动态函数库的区别: 静态库的二进制代码和.o文件链接后放 在最后的可执行文件中,一起被载入内 存,为此进程独享。 动态链接库和.o文件链接后,其代码并 不进入最后的可执行文件中,需要时载 入内存中,可被多个进程共享。 创建静态函数库的步骤: 将相对独立的功能形成函数,写入若干.c源文件中。 将.c源文件编译成.o文件(gcc -c) 将.o文件打包成libfilename.a文件。 创建动态函数库的步骤: 将相对独立的功能形成函数,写入若干.c源文件中。 gcc –fPIC –c 将.c源文件编译成.o文件。 gcc –shared 将.o文件生成libfilename.so文件。文件系统与磁盘分区
- 挂载
挂载的命令:mount 卸载一个已经挂载的命令:umount 将/etc/fstab中的挂载信息全部挂载:mount -a 对一个磁盘进行使用的步骤: 1.创建磁盘分区:fdisk /dev/sdb 2.创建文件系统:mkfs [文件系统] [/dev/sdb1] 3.挂载:mount [/dev/sdb1] [目标目录] 开机自动挂载:/etc/fstab 主分区+扩展分区 最多只能有4个 扩展分区可以是0个,最多是1个 扩展分区不能直接使用,扩展分区必须首先创建成逻辑分区才能使用 逻辑分区可以是0个 1个 多个 问题:第二块磁盘的第二个逻辑分区? /dev/sdb6 问题:第二块磁盘的第二个主分区? /dev/sdb2 并口硬盘:hda 串口硬盘:sdaLinux文件管理
- linux文件类型
- 文件权限
普通文件的权限: r 可以读取文件内容 w 可以修改文件内容 x 可以在shell下运行文件 目录文件的权限: r 可以ls目录的内容 w 可以在目录中新建或删除文件 x 可以cd进入到这个目录 新建普通文件的初始权限是(umask的值为022)(要求会计算): 666&~umask 新建目录的初始权限是: 777&~umask 执行一个脚本文件,不需要w的权限,需要r,x权限。 可以使用source执行这个脚本文件,可以用.代替。标准IO库与系统调用的区别
- stdout的默认缓冲类型
stdout默认缓冲类型:行缓冲 stdin默认缓冲类型:行缓冲 stderr默认缓冲类型:无缓冲 普通文件默认缓冲(fopen):全缓冲进程的组织
在linux中生成一个新的进程,新的进程和父进程具有相同的代码段用的命令:fork 为进程安装新的信号处理函数,所调用的函数:signal 获得一个文件的信息:stat 获得一个文件系统的信息:statfs
ps a:显示现行终端机下的所有程序,包括其他用户的程序。 ps u:以用户为主的格式来显示程序状况。 ps x:显示所有程序,不以终端机来区分。
优先级数值=优先级别(PR)+谦让值(NI) 优先级数值越大,优先级越小,其中优先级别不可更改。 改变一个已经启动的进程的优先级:nice(将进程的谦让值改大),renice(将进程的谦让值改小)
僵尸进程的生成原因: 一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程。 但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程。 因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程, 看看有没有哪个进程是刚刚结束的这个进程的子进程, 如果是的话,就由Init进程来接管他,成为他的父进程, 从而保证每个进程都会有一个父进程。 而Init进程会自动 wait其子进程,因此被Init接管的所有进程都不会变成僵尸进程。 僵尸进程的危害: 如果进程不调用 wait / waitpid 的话, 那么保留的那段信息就不会释放, 其进程号就会一直被占用,但是系统所能使用的进程号是有限的, 如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程。 僵尸进程的应对方式: 用signal注册信号处理函数,在信号处理函数调用wait/waitpid等待子进程退出。 孤儿进程的生成原因: 子进程运行,父进程退出,孤儿进程由 init 进程收养,此时子进程就变成了孤儿进程。 孤儿进程的应对方式: 每当出现一个孤儿进程的时候,内核就把孤儿进程的父进程设置为 init ,而 init 进程会循环地 wait() 它的已经退出的子进程。信号
SIGKILL,SIGSTOP两个信号不能被忽略
给一个进程发信号: kill [-s sigspec | -n signum | -sigspec] pid -s sig 信号名称。 -n sig 信号名称对应的数字。 -l 列出信号名称。如果在该选项后提供了数字那么假设它是信号名称对应的数字。 -L 等价于-l选项。 默认发送的是SIGTERM信号管道和消息队列
- 管道和重定向
前一个进程的输出作为后一个进程的输入,用的是管道(|)。 涉及到文件的是重定向。



