操作系统的内核
1.管理CPU
2.管理内存
3.管理硬件设备
4.管理文件系统
5.任务调度
1.保护Linux内核(用户和Linux内核不直接操作,通过操作Shell,Shell和内核交互)
2.命令解释器
1.ls
2.cd
3.touch/rm
4.mkdir/rmdir
5.cp
6.mv
查看文件内容(字符):
ASCII码文件(文件内容均是能在终端显示的ASCII码字符)
如: .c .txt 文本文件
二进制文件(文件内容不能够在终端显示,或者显示乱码)
如: 图片 视频 压缩包
以字符或ASCII码形式显示文件内容
示例: od -c filename
查看文件开头/末尾内容(默认10行)
-n 指定显示的行数
如:
head/tail filename
head/tail -n 行数 filename
查找一个文件的路径
通配符:
*: 匹配任意长度任意字符的文件名
?:匹配一位长度任意字符的文件名
[ ]:匹配一位长度指定字符的文件名
如: [1, 2, 3, 4] 指定字符 1 2 3 4
[1-4] 指定字符 1 2 3 4
[^2] 指定除了2以外的字符
查找指定内容的路径
如: whereis 二进制程序名/软件名
查找文件中的指定内容
如 : grep 'printf' /usr/include/stdio.h
将原本要输出在终端的内容重定向到一个文件中
>> 追加重定向 在原来内容基础上追加新的内容
> 覆盖重定向 将原来的内容覆盖掉
如:
ls > file.txt
ls >> file.txt
将前面命令的输出作为后续命令的输入
如:
ps -ef | grep bash
ps -ef 查看进程信息
echo 在终端打印内容
du -k/-m 测试文件大小 以kb 或 mb 的单元大小输出
.tar.gz
.tar.bz2
tar -zcvf 压缩文件包名.tar.gz 文件夹
tar -jcvf 压缩文件包名.tar.bz2 文件夹
tar -zxvf 压缩文件包.tar.gz
tar -jxvf 压缩文件包名.tar.bz2
示例:
tar -zcvf dir.tar.gz dir
tar -jcvf dir.tar.bz2 dir
tar -zxvf dir.tar.gz
tar -jxvf dir.tar.bz2
查看网卡信息
看是否可以得到回应
【虚拟机的两种网络模式:
NAT模式:Windows有网,Ubuntu就有网
桥接模式:Windows和Ubuntu网络独立 】
打开网卡配置文件
auto lo
iface lo inet loopback
auto ens33
iface ens33 inet dhcp
ESC
:wq
sudo /etc/init.d/networking restart
ping www.baidu.com
1.让虚拟机上网
2.在Ubuntu左侧找到"Ubuntu Software"
3.在Ubuntu上方找到"Ubuntu Software" 右键选择"Software & Updates"
4.DownLoad Form 选择 "Others" -> "China" -> "mirrors.aliyun.com"
1.sudo apt-get autoclean
清除旧源
2.sudo apt-get update
更新新源
3.sudo apt-get install -f
重建软件源依赖关系
4.安装软件
sudo apt-get install wireshark
安装Wireshark软件
sudo apt-get install valgrind
安装valgrind内存泄露检测工具
5.卸载软件
sudo apt-get remove 软件名
6.查看是否安装成功
dpkg -l 软件名
7.安装
sudo dpkg -i 软件包名.deb
b block 块设备文件
按块扫描设备信息的文件
存储设备
c character 字符设备文件
按字符扫描设备信息的文件
d directory 目录文件
存放文件
- 普通文件
存放数据
图片、音视频、压缩包、文本文件
l link 链接文件
快捷方式
s socket 套接字文件
用来套接字通信
p pipe 管道文件
用来进程间通信
1.ASCII码文件
文件中所有的字符均为能够在终端上显示的字符
文本文件、程序.c
2.二进制文件
文件中存放数据的二进制形
图片、音视频、压缩包
ASCII码文件是特殊的二进制文件
标准IO是库函数 库函数:针对系统调用的封装,使用方便灵活
标准IO可以在Windows或者Linux平台使用
标准IO 需要通过shell 再通过缓存达到一定数量再一起进入内核
文件IO是系统调用 系统调用:功能强大,应对复杂场景不够灵活
文件IO只能在Linux系统平台使用
文件IO是直接调用内核
如: getchar putchar scanf printf gets puts
fopen/fclose
fgetc/fputc
fgets/fputs
fscanf/fprintf
fread/fwrite
fseek/rewind/ftell
打开文件 -> 读写文件 -> 关闭文件
fopen fclose
fgetc/fputc 单个字符的读写
fgets/fputs 字符串的读写
fscanf/fprintf 格式化字符串的读写
fread/fwrite 二进制文件的读写
1.fopen FILE *fopen(const char *pathname, const char *mode);
功能:
打开pathname对应的文件并与其建立一个文件流
参数:
pathname:要打开文件路径的字符串
mode:
r 只读 文件不存在报错,文件存在只读打开
r+ 读写 文件不存在报错,文件存在读写打开
w 只写 文件不存在创建,文件存在将文件内容清空,只写打开
w+ 写读 文件不存在创建,文件存在将文件内容清空,写读打开
a 追加只写 文件不存在创建,文件存在追加只写打开
a+ 追加写读 文件不存在创建,文件存在追加写读打开
返回值:
成功返回打开的文件流指针
失败返回NULL
2.fclose int fclose(FILE *stream);
功能:
关闭文件,释放文件流指针
参数:
stream:文件流指针
返回值:
成功返回0
失败返回EOF(-1)
1.具有方向性(读写)
2.具有连续性
3.具有顺序性
valgrind --tool=memcheck --leak-check=full ./a.out (检查程序是否存在泄露)
fopen 后必须要有 fclose 否则会造成数据泄露;
这三个是打开文件直接就存在的,不需要再次定义;不需要时可用close进行关闭;
stdin 标准输入流 从终端读取数据
stdout 标准输出流 向终端打印数据
stderr 标准出错流 向终端打印数据
getchar、scanf、gets 通过stdin来读取终端数据
putchar、printf、puts通过stdout来向终端输出数据
perror通过stderr来向终端输出数据
缓存分为3类:
缓存区满刷新
刷新条件:
1.缓存区存满刷新(全缓存大小:4096)
2.fflush函数强制刷新
3.程序结束/fclose刷新
与文件建立的缓存
遇到\n刷新
刷新条件:
1.缓存区存满刷新(行缓存大小:1024)
2.遇到\n刷新
3.fflush函数强制刷新
4.程序结束/fclose刷新
与终端建立的缓存 stdin stdout
直接刷新
. 缓存区大小 0 k stderr
人机交互、界面控制、出错处理
int setvbuf(FILE *stream, char *buf, int mode, size_t size);
功能:
改变一个流的缓存类型
参数:
stream:文件流指针
buf:指定缓存空间的首地址
mode:
_IONBF 不缓存
_IOLBF 行缓存
_IOFBF 全缓存
size:
设定缓存区的大小
返回值:
成功返回0
失败返回非0
int fputc(int c, FILE *stream);
功能:
向流中写入一个字符
参数:
c:写入字符的ASCII码值
stream:文件流指针
返回值:
成功返回写入字符的ASCII码值
失败返回EOF
注意:
1.fputc只能写入一个字符,写入多个字符需要多次调用fputc
2.fputc只能写入字符