当前位置: 首页 > news >正文

linux常见知识

1.IO 缓冲 流

IO:linux下读写文件的两种方式

流:描述文件的结构体,是IO操作的对象

缓冲区:全缓冲、行缓冲、不缓冲

文件IO和标准IO比对

  标准IO 文件IO

缓冲区

全缓冲、行缓冲、不缓冲 不缓冲
操作对象 文件描述符
标准输入 stdio 0
标准输出 stdout 1
标准错误 stderr 2
遵从标准 ANSIC标准 POSIX标准

操作函数:

打开 fopen  open
关闭 fclose close
fgetc/fgets/fread read
fputc/fputs/fwrite write
定位 fseek/ftell lseek

 

2.文件权限

第一组: rwx 文件所有者的权限。
第二组: rwx 文件所属组的权限。
第三组: r-x 访客权限

3.各个文件夹的意义

bin 存放二进制可执行文件的位置
etc 存放配置文件的位置
mnt 挂载路径
proc process 进程信息存放路径
boot 存放启动文件、引导文件的位置
dev device 设备文件存放的位置
home 家目录/ 用户工作目录
root 超级用户的工作路径
sbin 存放指令文件

4.进程管理

程序: 静态概念。
进程: 动态概念。运行着的程序就是进程。

ps aux 查看进程信息
ps -ef 查看进程信息
kill 8657 kill 杀死进程 kill 后的数字是进程号。 kill -9 必杀
top 动态查看进程信息。
pstree 查看进程树

pid : process ID。 进程号。 进程号是操作系统统一进行分配的,每个进程的进程号是独一无二的。
进程执行结束后,进程号会被回收。 如果再次执行某个程序,执行起来的是新的进程,系统会分配新的 id.
init 进程是进程号为 1 的进程,是一切进程的起始进程。不能被 kill。

 

5.硬链接和软链接

ln hello.c hello.bak  创建硬链接文件,相当于创建了一个备份文件。如果想删除源文件的数据,需要将所有的索引域都删除。
如果只删除其中一个,并不能删除源文件的内容。

ln -s hello.c hello.bak  创建软链接文件,相当于windows 下的快捷方式。 它是自己创建了新的索引域和新数据域。
如果需要删除源文件的数据域。只需要将源文件删除即可。 因为软链接文件只是保存了源文件的路径,而没有创建备份。

6.压缩文件

压缩命令: tar cvfz a.tar.gz a.c
解压命令: tar xvfz a.tar.gz

7.sheel脚本

脚本的注释: #

脚本的开头:
#!/bin/bash
#!/bin/sh

输入与输出:
输入: read
输出: echo

示例代码: vi x.sh
##############
read -p "input your name1,name2 : " name1 name2 # -p 可以输出提示
echo "name1 name2"
echo "$name1 $name2 "
########
bash x.sh

 

系统预设变量: $1 $2 $3 ... $# $*
$0 : 用来保存当前文件名
$1 : 用来保存传递的第一个参数
$2 : 用来保存传递的第二个参数
$# : 用来保存参数的个数
$* : 用来保存所有参数的值,参数与参数之间,用一个空格隔开。

 

shell 中的if
格式:
if [ 条件 ] # 括号左右两侧一定要有空格!
then # if 语句的下方一定有这句。
语句1。
elif [ 条件2 ] # elif
then
语句2.
else
语句3.
fi #if 语句的结束。

数值类:
-eq 相等
-ne 不等
-lt 小于
-le 小于等于
-gt 大于
-ge 大于等于

 

8.gcc ( GNU )  编译工具

gcc 步骤: 预处理、 编译、 汇编、 链接 

1. 预处理阶段:
命令: gcc -E a.c -o a.i

基本操作:
1) 将头文件的内容拷贝到原文件中。
2) 会将宏名,用宏值替换掉
3) 如果有注释的,将注释去掉,不参与编译。

2. 编译
命令: gcc -S a.c -o a.s
目标文件: 汇编源文件

3. 汇编
命令: gcc -c a.c
目标文件: 二进制文件 a.o

4. 链接

9.gdb  (GNU  debuger )  调试器  

可调试文件的执行:

gcc sum.c  -o sum1
gcc sum.c -g -o sum2
gdb sum2

调试命令简介:
l list 列出文件代码
b 4 设置断点。 此例中,4为行号。
r run 程序前期准备完毕后,开始运行。
n next 单步运行
c continue 继续向下执行代码。直到运行到断点处或者程序执行结束为止。
p sum print 输出变量的值。或者打印 想查看的信息
info b info 查看信息。 此例中,是在查看断点信息。
delete 1 删除断点。 数字1,代表断点的编号。
q quit 退出当前 gdb 模式。

10. make  工程管理工具

makefile : 是文本文件。其内容描述了源文件的编译规则。
make : 是工程管理工具。执行make时,make会自动的到当前路径下找到makefile文件。按照文件的要求执行编译。

系统预设变量介绍:
$@ : 完整的目标名称
$^ : 依赖文件
$< : 第一个依赖文件

 

11.进程间通信方式

信号、管道、共享内存、消息队列、信号量

1. 传统的进程间通信方式: 无名管道(pipe)、有名管道(fifo)和信号(signal)
2. System V IPC对象: 共享内存(share memory)、消息队列(message queue)和信号灯(semaphore)
3. BSD:套接字(socket)

信号

信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式

信号有哪些 (man 7 signal)
First the signals described in the original POSIX.1-1990 standard.

Signal Value Action Comment
──────────────────────────────────────────────────────────────────────
SIGINT 2 Term Interrupt from keyboard (ctrl + c)
SIGQUIT 3 Core Quit from keyboard (ctrl + \)
SIGFPE 8 Core Floating point exception 浮点异常
SIGKILL 9 Term Kill signal 必杀
SIGSEGV 11 Core Invalid memory reference 段错误、异常
SIGPIPE 13 Term Broken pipe: write to pipe with no
readers 管道破裂
SIGALRM 14 Term Timer signal from alarm(2)
SIGUSR1 30,10,16 Term User-defined signal 1
SIGUSR2 31,12,17 Term User-defined signal 2
SIGCHLD 20,17,18 Ign Child stopped or terminated
SIGCONT 19,18,25 Cont Continue if stopped

SIGSTOP 17,19,23 Stop Stop process
SIGTSTP 18,20,24 Stop Stop typed at tty (strl + z)

The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored.

 

管道

无名管道
特点:
1)只能用于具有亲缘关系的进程之间的通信
2)半双工的通信模式,具有固定的读端和写端
3)管道可以看成是一种特殊的文件,对于它的读写可以使用文件IO如read、write函数。
4)管道是基于文件描述符的通信方式。当一个管道建立时,它会创建两个
文件描述符fd[0]和fd[1]。其中fd[0]固定用于读管道,而fd[1]固定用于写管道。

 

有名管道

特点:
1) 有名管道可以使互不相关的两个进程互相通信。有名管道可以通过路径名来指出,并且在文件系统中可见
2) 进程通过文件IO来操作有名管道
3) 有名管道遵循先进先出规则
4) 不支持如lseek() 操作

 

消息队列
1. 特点
1)消息队列是IPC对象的一种
2)消息队列由消息队列ID来唯一标识
3)消息队列可以按照类型来发送/接收消息

进程间通信方式比较:
pipe: 具有亲缘关系的进程间,单工,数据在内存中
fifo: 可用于任意进程间,双工,有文件名,数据在内存
signal: 唯一的异步通信方式
msg:常用于cs模式中, 按消息类型访问 ,可有优先级
shm:效率最高(直接访问内存),需要同步、互斥机制
sem:配合共享内存使用,用以实现同步和互斥

 

http://www.jsqmd.com/news/657852/

相关文章:

  • 安卓应用开发中图片加载失败占位图不显示问题详解
  • 1 5.6 剪贴板的使用
  • 【12.MyBatis源码剖析与架构实战】15.2 if和where标签执⾏过程剖析-执⾏数据库操作
  • MQ全家桶实战【第一章:MQ零基础入门专题·第2节】生活中的 MQ(快递驿站模型 + 异步思维的深度解析),一文带你吃透(超详解)!
  • SITS2026提示工程失效的5个信号,资深工程师都在用的7步Prompt重构法,今晚就能用!
  • 从零搭建nRF52840 Dongle蓝牙嗅探环境:一份避坑指南
  • Linux Ubuntu VSCode |(已解决)VSCode 服务器下载失败,下载一直卡住,无法打开文件夹(补档)
  • Simulink电机仿真避坑指南:电流环PI控制器离散化建模,这几个参数设置错了仿真结果就废了
  • dlopen_dlsym:运行时加载动态库
  • 从助听器到嫦娥四号:聊聊技术创新的那些‘坑’与‘光’(附高考真题解析)
  • Swift学习笔记25-函数式编程
  • 宝塔面板实战:从零部署Python Web应用
  • GitHub Copilot ≠ 生产就绪:团队落地智能代码生成必须跨过的4道合规与质量关卡
  • 生成式AI落地不是技术问题,而是组织能力缺口(SITS2026独家“AI就绪度”评估矩阵首次发布)
  • 【12.MyBatis源码剖析与架构实战】15.1 if和where标签执⾏过程剖析-初始化时
  • 从GKCTF 2021 XOR题解看异或运算在密码学中的巧妙应用与比特爆破实战
  • 从冠军方案拆解:在Jane Street预测赛中,如何用AE+MLP+XGBoost玩转模型融合?
  • AI辅助排版:设计领域的应用方法与落地实践
  • 西门子S7-1200 PLC控制三相六拍步进电机:从梯形图到实物接线保姆级教程
  • 旧显示器秒变智能投屏屏!树莓派4B双协议(Miracast+AirPlay)无线投屏器完整配置指南
  • 如何三步解锁WeMod Pro功能:Wand-Enhancer终极指南
  • 别再让Copilot绕过你的Security Gate!:实时拦截高危生成代码的eBPF+LLM Guard联合审查方案(已通过ISO 27001渗透验证)
  • FastGPT 架构深度分析
  • STM32新手必看:GPIO初始化失败,别再用RCC_AHBPeriphResetCmd了!
  • 不止于分词:用SpringBoot+HanLP 1.7.7快速构建一个简易文本分析服务
  • 数据库基础概念与体系结构 - 软考备战(二十九)
  • Tiny-ViT: A Compact Vision Transformer for Efficient and Explainable Potato Leaf Disease Classificat
  • 011、算子中间表示概述:计算图与算子抽象
  • YOLO+ByteTrack路口违章抓拍实战:多目标稳定追踪与违章判定
  • 2026年软件测试工具TOP 10选型指南:趋势洞察与实战决策