一,Linux的认知:
Linux 实际上来说是操作系统的内核,ubuntu是操作系统(包括redhat,centos,freebsd等)
Linux(操作系统化的内核):
1.管理CPU 2.管理内存 3.管理硬件设备 4.管理文件系统 5.任务调度
shell在linux内核外保护内核,用户不直接操作linux内核,而是通过操作shell,shell和内核交互。以防止不当的操作导致操作系统的崩溃。还作为命令解释器。
二,shell命令:
man 手册: 1.标准命令 2.系统调用 3.库函数 4.设备说明 5.文件格式 6.娱乐 7.杂项 8.管理员命令
1.基本命令: ls ; cd ; touch/rm ; mkdir/rmdir ; cp ; mv
2.文件查看命令:1.cat : 查看文件内容(字符);ASCII码文件(内容在终端显示的是ASCII字符)
.c .txt 文本文件
拓展:二进制文件(文件内容不能在终端显示,或者显示的是乱码)
图片,视频,压缩包
2.od -c :以字符或者ASCII码形式显示文件
3.head/tail :查看文件 开头/末尾 内容(默认十行) -n 查看n行
eg:head/tail filename head/tail -n(行数) filenam
3.文件查找命令:1.find 查找一个文件的路径 eg:find 文件夹 -name 文件名
eg;find .(当前文件目录)-name '*.txt'
通配符(配合使用的):* --- 匹配任意长度字符的文件名
?---- 匹配一位长度任意字符的文件名 ; 【】匹配一位长度的指定字符的文件名
【1,2,3...】匹配指定字符的文件名 【1-4】1到4的文件名
【^2】除了2以外的字符
2.whereis:查找指定内容的路径 eg:二进制 程序名/软件名
3.grep:查找文件中内容 eg:grep ‘printf’ stdio.h
4.重定向: 将原本要输出在终端的内容重定向到一个文件中
>> 追加重定向:在原定向内容的基础上追加新的内容
> 覆盖重定向:将原来内容覆盖掉
eg : ls >>(>) file.txt
5.管道: 将前面命令的输出作为后续命令的输入
eg:ps - ef | grep bash
6.其余命令:1. ps - ef 查看进程信息
练习:一条shell命令,将/usr/include/stdio.h文件后208行中与extern相关的内容记录到file.txt文件中
tail -n 200 /usr/include/stdio.h | grep 'extern' > file.txt
2.echo 在终端打印内容
3.du -k/-m 测试文件大小
7.压缩解压命令:Linux中的压缩包形式:.tar.gz .tar.bz2
压缩名令:tar -zcvf 压缩文件包名.tar.gz 文件夹
tar - jcvf 压缩文件包名.tar.bz2 文件夹
解压命令:tar - zxvf 解压文件包名.tar.gz 文件夹
tar - jvxf 解压文件包名.tar.bz2 文件夹
8.让虚拟机上网:1.ifconfig(查看网卡信息)
2.ping www.baidu.com (检测linux是否可以上网)
NAT模式:Windows有网,Ubuntu就有网 桥接模式:Windows和Ubuntu网络独立
三,虚拟机连上网的步骤:
a.将虚拟机设置为NAT模式:点击"虚拟机"->点击"设置"->.点击"网络适配器"->选择"NAT模式"->点击"确定"
b.
1.sudo vim /etc/network/interfaces
打开网卡配置文件
2.修改文件内容为:
auto lo
iface lo inet loopback
auto ens33
iface ens33 inet dhcp
3.保存退出
ESC
:wq
4.重启网络服务
sudo /etc/init.d/networking restart
5.测试与百度是否连通
ping www.baidu.com
9.apt - get 工具集:自动下载软件,能够分析软件的依赖关系
1.设置apt - gte 工具的源:1.让虚拟机上网
2.在Ubuntu左侧找到"Ubuntu Software"
3.在Ubuntu上方找到"Ubuntu Software" 右键选择"Software & Updates"
4.DownLoad Form 选择 "Others" -> "China" -> "mirrors.aliyun.com"
2.执行命令: 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
四,IO:输入输出 :
1. 操作对象-->文件
2.linux文件类型:
b block 块设备文件
按块扫描设备信息的文件
存储设备
c character 字符设备文件
按字符扫描设备信息的文件
d directory 目录文件
存放文件
- 普通文件
存放数据
图片、音视频、压缩包、文本文件
l link 链接文件
快捷方式
s socket 套接字文件
用来套接字通信
p pipe 管道文件
用来进程间通信
2.
2..普通文件:.ASCII码文件( ASCII码文件是特殊的二进制文件)
文件中所有的字符均为能够在终端上显示的字符
文本文件、程序.c
二进制文件
文件中存放数据的二进制形式
图片、音视频、压缩包
3.标准IO,文件IO
标准IO是库函数 , 文件IO时系统调用
系统调用:功能强大,应对复杂场景不够灵活 ;库函数:针对系统调用的封装,使用方便灵活
标准IO可以在Windows或者Linux平台使用,文件IO只能在Linux系统平台使用
五,标准IO(有缓存的):
eg:getchar putchar scanf printf gets puts ...等-->标准IO
主要学习的有:fopen/fclose ; fgetc/fputc ; fgets/fputs ; fscanf/fprintf ;fread/fwrite
fseek/rewind/ftell
从文件读写数据的流程:
打开文件->读写文件->关闭文件
fopen fclose
读写文件:fgetc/fputc 单个字符的读写 ; fgets/fputs 字符串的读写 ; fscanf/fprintf 格式化字符串的读写 ; fread/fwrite 二进制文件的读写
2.函数接口:
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)
3.文件流:1.具有方向性(读写) 2.具有连续性 3.具有顺序性
句柄:操作对象的一个抽象化
valgrind --tool=memcheck --leak-check=full ./a.out 检查内存是否流失
4.特殊的三个流(不需要fopen就已经打开i的流):
stdin 标准输入流(从终端读取数据) ; stdout 标准输出流(从终端输出数据) ; stderr 标准出错流(从终端数据)
-------和终端建立的三个流
5.标准IO缓存:
缓存分3类:
1.全缓存 4k(大小)(缓存区满刷新)
刷新条件:
1.缓存区存满刷新(全缓存大小:4096)
2.fflush函数强制刷新
3.程序结束/fclose刷新
与文件建立的缓存
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);
功能:
改变一个流的缓存类型
参数:
stream:文件流指针
buf:指定缓存空间的首地址
mode:
_IONBF 不缓存
_IOLBF 行缓存
_IOFBF 全缓存
size:
设定缓存区的大小
返回值:
成功返回0
失败返回非0
.5.fputc
int fputc(int c, FILE *stream);
功能:
向流中写入一个字符
参数:
c:写入字符的ASCII码值
stream:文件流指针
返回值:
成功返回写入字符的ASCII码值
失败返回EOF
注意: 1.fputc只能写入一个字符,写入多个字符需要多次调用fputc 2.fputc只能写入字符