文件查看命令
1、cat
①查看文件内容
②合并文件内容
eg:将test.c 和main.c文件内容合并到file.c
> 重定向
> > 追加
③往文件中写入数据, Ctrl+d 是结束输入
2、more
当一个文件的内容超过一个屏幕能显示的行数,使用 more 可以分屏显示文件内容。到末尾直接退出
按q可以直接退出
使用方式: more filename
3、less
文本内容查看器,查看文件内容,但是文件内容不会显示到界面上 less filename
4、head
显示文件前 n 行的内容 head -n filename
5、tail
显示文件后 n 行的内容 tail -n filename
文件查找命令
find
在目录树中搜索指定的文件,也可以指定开始的搜索位置
find 搜索路径 -name 文件名 (按文件名字搜索)
find 搜索路径 -cmin -n (搜索过去n分钟内修改的文件)
find 搜索路径 -ctime -n (搜索过去n天内修改的文件)
grep 文本搜索工具
grep "ab" main.c
:过滤出main.c中包含“ab”的所有行 并输出。
在文件中过滤出包含指定字符串的行
主要参数:
-c:只输出匹配行的计数;
-i: 不区分大小写;
-n:显示匹配行及行号;
-v:显示不包含匹配文本的所有行。
| 管道
将前一个命令的输出结果作为后一个命令的输入
ls /lib | grep sh
:输出:过滤出/lib路径下包含sh的文件名
进程管理命令
ps:默认显示与当前终端有关的进程信息
-e:显示系统中所有的进程信息
-f:显示更多的进程属性信息(全格式)
-L:显示进程中的线程ID
pstree:查看系统进程的树状图
结束进程
kill:结束或者挂起一个进程,或者ctrl+c
-9:强制结束进程
-stop:挂起进程
在后台运行进程
&
若不加& , 即在前台运行
jobs:查看后台运行的命令
pkill :一次性结束所有后台运行的进程
用户管理命令
1、系统存储用户信息的文件
/etc/passwd: 存储用户基本信息
/etc/group: 存储用户组的信息
/etc/shadow:存储用户的密码
2、添加新用户
useradd newname 添加一个新的用户 newname
选项: -g:执行新用户的主组
-G:将新用户添加到副组
-s:指定新用户默认使用的shell终端
-d:指定新用户登录默认进入的目录
首先要切换到管理员身份# su
添加新用户lyy:
此时没有密码,不能登录,设置密码
删除用户lyy:
userdel lyy
文件压缩
文件的压缩过程: ① 将文件进行打包; ②对打包带的文件 ,进行压缩。
1、tar:将文件打包或者解包
◼ c 创建包文件
◼ f 指定目标为文件而不是设备
◼ v 显示详细过程
◼ t 显示包中的内容而不释放
◼ x 释放包中的内容
◼ z GNU 版本新加的,使得 tar 有压缩和解压的功能
2、gzip:将文件进行压缩,gzip my.tar进行压缩 生成my.tar.gz 压缩包
解压命令
文件的解压过程:①将文件解压成包 ②解包动作;
3、gzip gzip -d mt.tar.gz 解压成包
4、tar tar xvf my.tar 解包成文件
一步压缩和解压
tar zxf my.tar.gz
一步解压命令
tar zcvf my.tar.gz a.txt b.txt c.txt
一步压缩命令
关机与重启
shutdown -h now
:立刻关机shutdown now
shutdown -r now
:立刻重启
halt 关机
reboot 重启
统计文件中出现字符个数
wc:统计文件中单词个数(-w);字符个数(-c);行数(-l)。
使用GCC编译程序
gcc 分步编译链接
(1) 预编译 : gcc -E main.c -o main.i
(2) 编译: gcc -S main.i -o main.s
(3) 汇编: gcc -c main.s -o main.o
(4) 链接: gcc main.o -o main
编译链接过程:
多个源文件的编译:
gcc -c main.c
gcc -c add.c
gcc -c max.c
gcc -o main main.o add.o max.o
多个文件一步完成:gcc -o main main.c add.c max.c
Makefile文件
GDB调试程序
Debug 版本和 Release 版本
Debug 版本
Debug 版本为可调式版本,生成的可执行文件中包含调试需要的信息。我们作为开发人
员,最常用的就是 debug 版本的可执行文件。
Debug 版本的生成:
因为调试信息是在编译过程时加入到中间文件(.o)中的,所以必须在编译时控制其生
成包含调试信息的中间文件。
gcc -c hello.c -g —> 生成包含调试信息的中间文件
gcc -o hello hello.o
或者 gcc -o hello hello.c -g
Release 版本
Release 版本为发行版本,是提供给用户使用的版本。用 gcc 默认生成的就是 Release 版
本。
首先将源代码编译、链接生成 Debug 版本的可执行文件,然后通过‘ gdb Debug 版本
的可执行文件名’进入调试模式。
单进程、单线程基础调试命令
多进程调试命令
(gdb) set follow-fork-mode mode
mode 可以选择 parent 或者 child,即:选择调试那个进程。
注意:未被跟踪调试的进程会直接执行结束。
多线程调试命令
a) 利用 info threads 查看线程信息;
b) thread id 调试目标 id 指定的线程;
c) set scheduler-locking off | on | step;
“off”表示不锁定任何线程;
“on”只有当前被调试的线程继续运行;
“step”在单步执行的时候,只有当前线程会执行;
库文件
库是一组预先编译好的方法的集合。 Linux 系统存储的库的位置一般在: /lib 和 /usr/lib。
在 64 位的系统上有些库也可能被存储在/usr/lib64 下。库的头文件一般会被存储在
/usr/include 下或其子目录下。
库有两种,一种是静态库,其命令规则为 libxxx.a,一种是共享库,其命令规则为 libxxx.so
静态库的生成方法:
第一步:先将需要生成库文件的所有“.c“文件编译成“.o”文件
第二步:使用 ar 命令将第一步编译的所有” .o” 文件生成静态库,其中:
◼ c 是创建库
◼ r 是将方法添加到库中
◼ v 显示过程
ar crv libfoo.a add.o max.o
静态库的使用方法:
gcc -o main main.c -L路径 -l库名
共享库的生成与使用
共享库的生成:
第一步:先将需要生成库文件的所有“.c“文件编译成“.o”文件
第二步:使用 gcc 命令将第一步编译的所有” .o” 文件生成共享库
gcc -shared -fPIC -o libfoo.so add.o max.o
共享库的使用
gcc -o main main.c -L路径 -l库名
静态库和共享库的区别:静态库在链接时将用到的方法包含到最终生成的可执行程序中,而共享库不包含,只做标记,在运行程序时,才动态加载。
主函数的三个参数
int main( int argc, char* argv[], char* envp[])
(1) argc 参数个数
(2) argv 参数内容
(3) envp 环境变量
printf的缓冲区
fork复制进程
每个进程都有一个进程控制块,英文缩写PCB;
进程控制块是用一个结构体struct task_struct来实现。
操作系统如何管理进程?
fork复制进程
pid_t fork(void);//函数返回类型 pid_t 实质是 int 类型
fork写时拷贝技术
进程的逻辑地址及物理地址
僵死进程
产生条件: 当子进程先于父进程结束,父进程没有获取子进程的退出码,此时子进程变成僵死程序
**解决方法:**①父进程调用wait()方法获取子进程的退出码;
② 父进程先结束
操作文件的底层调用
open() 打开一个文件
read()从文件中读取数据
write()向文件中写入数据
close()关闭文件
父子进程共享打开文件
系统调用和库函数
区别:系统调用的实现在内核中,属于内核空间,库函数的实现在函数库中,属于用户空间。