操作系统的内核:
1. 管理CPU
2. 管理内存
3. 管理硬件设备
4. 管理文件系统
5. 任务调度
1. 保护Linux内核(用户和Linux内核不直接操作,通过操作Shell,Shell和内核交互)
2. 命令解释器
man手册(帮助手册)
1. 标准命令
2. 系统调用
3. 库函数
4. 设备说明
5. 文件格式
6. 娱乐
7. 杂项
8. 管理员命令
command [-options] arg1 arg2 ...
1. ls
2. cd
3. touch/rm
4. mkdir/rmdir
5. cp
6. mv
ASCII文件(文件内容均是能在终端显示ASCII码字符)(.txt、.c文本文件)
二进制文件(文件内容不能够再终端显示,或者显示乱码)(图片、视频、压缩包)
od -c filename
-n 指定显示的行数
head/tail filename
head/tail -n 行数 filename
通配符:
*:匹配任意长度字符的文件名
?:匹配一位长度任意字符的文件名
[]:匹配一位长度指定字符的文件名
[1,2,3,4] 指定字符1 2 3 4
[1-4] 指定字符 1 2 3 4
[^2] 指定除了2以外的字符
find 文件夹 -name 文件名
find . -name '*.txt'
find . -name '??.txt'
find . -name '[1,2,3,4][1,2,3,4].txt'
2. whereis:查找指定内容的路径
whereis 二进制程序名/软件名
grep 'printf' /usr/include/stdio.h
>> 追加重定向 在原来内容基础上追加新的内容
> 覆盖重定向 将原来的内容覆盖掉
ls > file.txt
ls >> file.txt
ps -ef | grep bash
ps -f #查看进程信息
echo #在终端打印内容
du -k/-m #测试文件大小
练习:一条shell命令,将/usr/include/stdio.h文件后200行中与extern相关的内容记录到file.txt文件中
tail -n 200 /usr/include/stdio.h | grap extern > file.txt
文件名后缀为:.tar.gz .tar.bz2
tar -zcvf 压缩文件包名.tar.gz 文件夹
tar -jcvf 压缩文件包名.tar.bz2 文件夹
tar -zxvf 压缩包文件包名.tar.gz
tar -jxvf 压缩包文件包名.tar.bz2
看是否可以接收如下类似信号,如果可以即已联网
64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=1 ttl=51 time=32.7 ms
64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=2 ttl=51 time=32.7 ms
ifconfig #1. 查看网卡信息
ping www.baidu.com #2. 向百度发送信号
NAT模式:Windows有网,Ubuntu就有网
桥接模式:Windows 和 Ubuntu 网络独立
sudo vim /etc/network/interfaces
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. 能够分析软件的依赖关系
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)管道文件 | 用来进程间通信 |
文件中所有的字符均为能够在终端上显示的字符(文本文件、程序.c)
文件中存放数据的二进制形式(图片、音视频、压缩包)
注意:ASCII码文件是特殊的二进制文件
标准IO是库函数
文件IO是系统调用
系统调用:功能强大,应对复杂场景不够灵活
库函数:针对系统调用的封装,使用方便灵活
标准IO可以在Windows或者Linux平台使用
文件IO只能在Linux系统平台使用
getchar putchar scanf printf gets puts -> 标准IO
#include
fopen/fclose
fgetc/fputc
fgets/fputs
fscanf/fprintf
fread/fwrite
fseek/rewind/ftell
1. 打开文件 | 2. 读写文件 | 3. 关闭文件 |
fopen | fgetc/fputc | fclose |
fgets/fputs | ||
fscanf/fprintf | ||
fread/fwrite |
FILE *fopen(const char *pathname, const char *mode);
pathname:要打开文件路径的字符串
mode:
r | 只读 | 文件不存在报错,文件存在只读打开 |
r+ | 读写 | 文件不存在报错,文件存在读写打开 |
w | 只写 | 文件不存在创建,文件存在将文件内容清空,只写打开 |
w+ | 写读 | 文件不存在创建,文件存在将文件内容清空,写读打开 |
a | 追加只写 | 文件不存在创建,文件存在追加只写打开 |
a+ | 追加写读 | 文件不存在创建,文件存在追加写读打开 |
成功返回打开的文件流指针
失败返回NULL
int fclose(FILE *stream);
stream:文件流指针
成功返回0
失败返回EOF(-1)
句柄:操作对象的一个抽象
valgrind --tool=memcheck --leak-check=full ./a.out #检测是否溢出
stdin | 标准输入流 | 从终端读取数据 |
stdout | 标准输出流 | 向终端打印数据 |
stderr | 标准出错流 | 向终端打印数据 |
getchar、scanf、gets 通过stdin来读取终端数据
putchar、printf、puts通过stdout来向终端输出数据
perror通过stderr来向终端输出数据
1. 全缓存 | 缓冲区大小4K | 缓存区满刷新 | 刷新条件: 1.缓存区存满刷新(全缓存大小:4096) |
与文件建立的缓存 |
2. 行缓存 | 缓冲区大小1K | 遇到\n刷新 | 刷新条件: 1.缓存区存满刷新(行缓存大小:1024) 2.遇到\n刷新 3.fflush函数强制刷新 4.程序结束/fclose刷新 |
与终端建立的缓存 stdin、stdout |
3. 不缓存 | 缓冲区大小0K | 直接刷新 | 人机交互、界面控制、出错处理 stderr |
4. setvbuf:
int setvbuf(FILE *stream, char *buf, int mode, size_t size);
1. 功能:改变一个流的缓存类型
2. 参数:
stream:文件流指针
buf:指定缓存空间的首地址
mode:
_IONBF 不缓存
_IOLBF 行缓存
_IOFBF 全缓存
size:
设定缓存区的大小
3. 返回值:
成功返回0
失败返回非0
int fputc(int c, FILE *stream);
c:写入字符的ASCII码值
stream:文件流指针
成功返回写入字符的ASCII码值
失败返回EOF
注意:
1. fputc只能写入一个字符,写入多个字符需要多次调用fputc
2. fputc只能写入字符
1.利用fputc向文件file.txt中写入字符串"hello world"
#include
int main(void)
{
FILE *fp = NULL;
char tmptbuffer[32] = {"Hello World"};
char *pstr = NULL;
fp = fopen("file.txt", "w");
if(fp == NULL)
{
perror("fopen failed");
return -1;
}
pstr = tmptbuffer;
while(*pstr != '\0')
{
fputc(*pstr, fp);
pstr++;
}
fclose(fp);
return 0;
}
2.搜索fgetc的功能,参数,返回值含义,实现读取文件中所有的内容并显示在界面上
#include
int main(void)
{
FILE *fp = NULL;
char ch = 0;
fp = fopen("file.txt", "r+");
if(fp == NULL)
{
return -1;
}
while((ch =fgetc(fp)) != EOF)
{
putchar(ch);
}
return 0;
}