Day 1. 学习linux高级编程之Shell命令和IO

1.C语言基础

++现阶段学习安排++

2.IO编程

多任务编程(进程、线程)

网络编程

数据库编程

3.数据结构


linux软件编程

1.linux:

操作系统:linux其实是操作系统的内核

系统调用:linux内核的函数接口

操作流程:用户------>Shell------>内核------>硬件设备------>用户看到现象

功能:

(1).管理CPU

(2).管理内存

(3).管理硬件设备

(4).管理文件系统

(5).任务调用

用途:

(1).服务器

(2).嵌入式方向

2.Shell:

(1).保护linux内核(用户和linux内核不直接操作,通过操作Shell,Shell和内核进行交互)

(2).命令解释器

3.Shell命令:

(1). 基本命令:

ls ,cd touch ,mkdir ,cp ,mv ,rm

man手册(帮助函数):1.标准命令 2.系统调用 3.库函数 4.设备说明 5.文件格式 6.娱乐 7.杂项 8.管理员命令

command [-options] arg1 arg2 ......

(2).Shell文件查看命令:

1).cat:查看文件内容(字符)

ASCII文件(文件内容均是能在终端显示的ASCII码字符):.c .txt文件

二进制文件(文件内容不能够在中高端显示,或者是显示乱码):图片 视频 压缩包等

示例:cat filename

2).od -c:以字符型或ASCII码形式显示文件内容

示例:od -c filename

3).head/tail:查看文件/末尾内容(默认10行)

-n 指定行数

示列:head/tail filename

head/tail -n 行数 filename

(3).文件查找命令:

1).find:查找一个文件的路径

示例:

find 文件夹 -name 文件名

find . -name '*.txt'

find . -name '??.txt'

find . -name '[1,2,3,4][1,2,3,4].txt'

通配符:

*:匹配任意长度任意字符的文件

?:匹配一位长的任意字符的文件名

\]:匹配一位长度指定字符的文件名: \[1,2,3,4\]指定字符1 2 3 4 \[1-4\]指定字符12 3 4 \[\^2\]指定除了2以外的字符 2).**whereis**:查找指定内容路径 示例:whereis 二进制程序名/软件名 3).**grep**:查找文件内容 示例:grep 'printf' stdio.h #### (4).**重定向**: 将原来要输出在终端的内容重定向到一个文件中 \>\> 追加重定向 在原来内容基础上追加新的内容 \<\< 覆盖重定向 将原来的内容覆盖掉 示例: ls \> file.txt ls \>\> file.txt #### (5).**管道**: 将前面命令行的输出作为后面命令的输入 示例:ps -ef \| grep bash #### (6). 其余命令: **ps -ef:查看信息进程** **echo :在终端打印内容** **du -k/-m :测试文件大小** #### (7).解压压缩命令: **.tar.gz** **.tar.bz2** 1).压缩命令: tar -zcvf 压缩文件包名.tar.gz 文件夹 tar -jcvf 压缩文件包名.tar.bz2 文件夹 2).解压命令 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 #### (8).让虚拟机上网: 1).ifconfig:查看网卡信息 2).ping www.baidu.com PING www.a.shifen.com (183.2.172.42) 56(84) bytes of data. 64 bytes from 183.2.172.42 (183.2.172.42): icmp_seq=1 ttl=51 time=43.6 ms 3).将虚拟机设置为NAT模式: NAT模式:windows有网,Ubuntu就有网 桥接模式:windows 和 Ubnuntu都会使用网卡,即网络独立 ![](https://file.jishuzhan.net/article/1754134683756531714/53103a840b2b47b1ac4922a6f0d14524.webp) 1.点击"虚拟机" 2.点击"设置" 3.点击"网络适配器" 4.选择"NAT模式" 5.点击"确定" 4).配置Ubuntu系统的IP地址为自动获取IP地址 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.自动下载软件 2.能够分析软件的依赖关系 1).设置apt-get工具源 让虚拟机上网 在Ubuntu左侧找到"Ubuntu Software" 在Ubuntu上方找到"Ubuntu Software" 右键选择"Software \& Updates" 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.IO的输入输出,操作对象是文件 ### 2.Linux文件类型: b:block 块设备文件 按块扫描设备信息的文件 存储设备 c:character 字符设备文件 按字符扫描设备信息文件 d:directory 目录文件 存放文件 -: 普通文件 存放数据 :图片、音频、压缩包、文本文件 l:link 连接文件 快捷方式 s:socket 套接字文件 用来套接字通信 p:pipe 管道文件 用来进程中通信 ### 3.普通文件 (1).ASCII码文件:文件中所有的字符均为能够在终端上显示的字符 文本文件、程序.c (2).二进制文件:文件中存放数据的二进制形式 图片、音视频、压缩包 ASCII码文件是特殊的二进制文件 ### 4.标准IO、文件IO 标准IO是库函数 文件IO是系统调用 系统调用:功能强大,应对复杂场景不够灵活 库函数:针对系统调用的封装,使用方便灵活 标准IO可以在windows或者Linux平台使用 文件IO只能在Linux系统平台使用 ### 5.标准IO: getchar putchar scanf printf gets puts -\>标准IO #include \ **fopen/fclose** **fgetc/fputc** **fgets/fputs** **fscanf/fprintf** **fread/fwrite fseek/rewind/ftell** ### 6.从文件中读写数据的流程: **打开文件-\>读写文件-\>关闭文件** fopen fclose fgetc/fputc 单个字符的读写 fgets/fputs 字符串的读写 fscanf/fprintf 格式化字符串的读写 fread/fwrite 二进制文件的读写 ### 7.函数接口: (1).fopen **FILE** \*fopen(const char \*pathname, const char \*mode); **FILE类型名:结构体** 功能:打开pathname对应的文件并与其建立一个流 参数:pathname:要打开文件内容的字符串 mode: r 只读 文件**不存在会报错** ,文件**存在就会只读**打开 r+ 读写 文件**不存在会报错** ,文件**存在读写打开** w 只写 文件**不存在会自动创建** ,文件**存在将文件内容清空** ,**只写**打开 w+ 写读 文件**不存在会新创建** ,文件**存在将文件内容清空** ,**写读**打开 a 追加只写 文件**不存在会新创建** ,文件**存在追加只写**打开 a+ 追加写读 文件**不存在会新创建** ,文件**存在追加写读**打开 返回值:成功则返回文件指针流 失败会返回NULL (2).fclose int fclose(FILE \*stream); 功能: 关闭文件,释放文件流指针 参数: stream:文件流指针 返回值: 成功返回0 失败返回EOF(-1) ### 8.流: (1).具有方向性(读写) (2).具有连续性 (3).具有顺序性 句柄:操作对象的一个抽象 valgrind --tool=memcheck --leak-check=full ./a.out ### 9.特殊的三个流: stdin 标准输入流 从终端读取数据 stdout 标准输出流 向终端打印数据 stderr 标准出错流 向终端打印数据 getchar、scanf、gets 通过stdin来读取终端数据 putchar、printf、puts通过stdout来向终端输出数据 perror通过stderr来向终端输出数据 ### 10.标准IO缓存: ![](https://file.jishuzhan.net/article/1754134683756531714/25f3f2c33e219c280f20a43f1be4011b.webp) 调用不打印 因为此时 打印的元素在缓存 缓存分为3类: (1).全缓存:缓存区满刷新 4k 刷新条件: 1.缓存区存满刷新(全缓存大小:4096) 2.fflush函数强制刷新 3.程序结束/fclose刷新 与文件建立的缓存 ![](https://file.jishuzhan.net/article/1754134683756531714/9fc39f99770d51531ea7c19389164582.webp) (2).行缓存:遇到\\n刷新 1k 刷新条件: 1.缓存区存满刷新(行缓存大小:1024) 2.遇到\\n刷新 3.fflush函数强制刷新 4.程序结束/fclose刷新 与终端建立的缓存 stdin stdout (3).不缓存 直接刷新 缓存区大小 0k stderr 用途:人机交互、界面控制、出错处理 ![](https://file.jishuzhan.net/article/1754134683756531714/916bcaacfc6620bb2e6c7bb0d2f2d79c.webp) (4).修改缓存类型:setvbuf int setvbuf(FILE \*stream, char \*buf, int mode, size_t size); 功能: 改变一个流的缓存类型 参数: stream:文件流指针 buf:指定缓存空间的首地址 mode: _IONBF 不缓存 _IOLBF 行缓存 _IOFBF 全缓存 size: 设定缓存区的大小 返回值: 成功返回0 失败返回非0 ### 11.fputc int fputc(int c, FILE \*stream); 功能:想流中写入一个字符 参数: c:写入字符的ASCII码值 stream:文件流指针 返回值: 成功返回写入字符的ASCII码值 失败返回EOF 注意: 1.fputc只能写入一个字符,写入多个字符需要多次调用fputc 2.fputc只能写入字符 ![](https://file.jishuzhan.net/article/1754134683756531714/a9eeb00149fa3342ad408e58c19cb6cb.webp)

相关推荐
VirusVIP2 小时前
Windows CMD通过adb检查触摸屏Linux驱动是否被编译
linux·运维·adb
chennalC#c.h.JA Ptho2 小时前
ubuntu studio 系统详解
linux·运维·服务器·经验分享·ubuntu·系统安全
丢丢丢丢丢丢~9 小时前
apache2的默认html修改
linux·运维·服务器
wusam9 小时前
Linux系统管理与编程20:Apache
linux·运维·服务器·apache·shell编程
我不想当小卡拉米9 小时前
【Linux】操作系统入门:冯诺依曼体系结构
linux·开发语言·网络·c++
ChironW9 小时前
Ubuntu 24.04 LTS系统上配置国内时间同步
linux·运维·服务器·ubuntu
苏生要努力10 小时前
第九届御网杯网络安全大赛初赛WP
linux·python·网络安全
若风的雨10 小时前
【DeepSeek】判断两个 PCIe 设备是否属于**同一个 PCIe 子树
linux
江畔独步11 小时前
vim中的查找
linux·编辑器·vim
luck_me512 小时前
k8s v1.26 实战csi-nfs 部署
linux·docker·云原生·容器·kubernetes