linux初学笔记

2021/5/22

Linux系统
基本命令,编译链接,调试,库文件,
进程(fork,exec)信号
进程间通信:管道,信号量,共享内存,消息队列,套接字
线程:线程安全,同步
网络编程:tcp/udp,http,select poll epoll,lievent

文件名前带.为隐藏文件
常见指令
$普通用户#(root)管理员用户
pwd查目录位置
cd访问目录
mkdir创文件夹
rmdir删空文件夹
ls查看当前目录
touch创建文件
chmod修改权限
vi打开文件
cp拷贝(路径,拷贝后的文件名(.表示名称不变))
mv移动(剪切)
man查询手册
touch创建普通文件
rm删文件
find搜索
grep过滤
A|B管道,前一个输出结果作为后一个命令输入
wc统计文件中单词个数(-w)、字符个数(-c)、行数(-l)
runleve 查看系统运行级别

附加1:文件夹
/bin 存放常用命令(即二进制可执行程序)
/etc 存放系统配置文件
/home 所有普通用户的家目录
/root 管理员用户的家目录
/usr 存放系统应用程序及文档
/proc 虚拟文件系统目录,以进程为单位存储内存的映射
/dev 存放设备文件
/mnt 临时挂载点
/lib 存放库文件
/boot 系统内核及启动有关的文件
/tmp 存放各种临时文件,是所有用户均可访问的地点
/var 存放系统运行中常改变的文件, 如系统日志
附加2:文件类型
(1)普通(文档)文件 ‘-’ //可以拷贝
(2)目录文件 ‘d’
(3)管道文件 ‘p’
(4)链接文件 ‘l’
(5)设备文件 (块设备 ’b‘,字符设备 ‘c’)
(6)套接字文件 ‘s
附加3:文件权限
chmod 二进制数 文件名
r 读权限 值: 4
w 写权限 值: 2
x 执行权限 值: 1

  • 无权限 值: 0
    访问权限:
    u : 属主
    g : 同组
    o : 其他用户

2021/5/24

man 查看帮助文档:系统命令,库函数,系统调用
find 搜索路径 -name
查看文件函数:
(1)cat 输入,合并,查看(全部)
(2)less 反复查看
(3)more分屏查看
(4)head显示前10行,或head -2 两行(末尾tail)
vi/vim:
(1)命令模式 只接受命令(a/o/i/A/O/I进入插入模式)
(2)插入模式 写入
(3)末行模式 (esc):w保存:q退出:wq保存退出:q!不保存退出
grep:文件中查找(grep ”内容“ 文件名)

2021/6/5

//状态:就绪,运行,阻塞
pstree:显示进程关系(树)
ps:显示当前终端的进程 //进程:一个正在进行的程序(PCD:进程控制块)
(1)PID终端编号
(2)TTY虚拟终端
(3)pts预定时间系统
(4)pash子进程,bash父进程(shell命令解释器)
-e 显示系统中所有的进程信息
-f 显示更多的进程属性信息(全格式)
-l 显示进程中的线程 ID
sleep:阻塞(秒)
kill:结束进程 pkill:结束所有同名进程(仅自己home)
stop:挂起进程
&:后台运行程序
//ctrl + c结束前台程序
//ctrl + z停止前台程序
jobs:显示后台任务(当前终端)
fg %任务号 将后台运行的或挂起的进程挪到前台执行
bg %任务号 将挂起的进程唤醒到后台执行
top:查看系统资源使用情况以及进程信息
2021/6/15
tar:将文件打包或者解包
◼ c 创建包文件
◼ f 指定目标为文件而不是设备
◼ v 显示详细过程
◼ t 显示包中的内容而不释放
◼ x 释放包中的内容
◼ z GNU 版本新加的,使得 tar 有压缩和解压的功能
gzip:对文件进行压缩或者解压
cvf:
zxf:解压缩包

GCC:
(1) 预编译 :
gcc -E main.c -o main.i
a) 删除所有的“#define”,并且展开所有的宏定义;
b) 处理所有的条件预编译指令,“#if”、“#ifdef”、“#endif”等;
c) 处理“#include”预编译指令,将被包含的文件插入到该预编译指令的位置;
d) 删除所有的注释;
e) 添加行号和文件名标识,以便于编译器产生调试用的符号信息及编译时产生编译错
误和警告时显示行号;
f) 保留所有的#pragma 编译器指令,因为编译器需要使用它们。
(2) 编译:(检查语法错误)
gcc -S main.i -o main.s
词法分析、语法分析、语义分析,代码优化,汇总符号
(3) 汇编:
gcc -c main.s -o main.o
将汇编指令翻译成二进制格式,生成各个 section,生成符号表。
(4) 链接:(没有主函数在这里错误,在这个阶段确定地址,多文件给多个.o)
gcc main.o -o main(gcc -o main main.o)
a) 合并各个 section,调整 section 的起始位移和段大小,合并符号表,进行符号解析,
给符号分配虚拟地址
b) 符号重定位
//简化:gcc -c main.c(生成main.o)gcc main.o -o main
gcc -o main mian.c(直接生成exe)
运行:./main

win PE
Linux ELF

2021/6/19

makefile
一个进程:
0xFFFF FFFF 1G
0xC000 0000
0xBFFF FFFF 3G栈(上到下),堆(下到上)
数据段
0x0804 8000 代码段起始点
0x0000 0000

2021/6/26

库:预先编译好的方法(函数)的集合
库文件:静态库.a,共享库.so(共享库优先级高于静态)
include""当前位置<>标准位置/usr/lib
◼ 第一步:.c编译成.o
◼ 第二步:编译.o生成静态库(ar crv)
//c 是创建库
//r 是将方法添加到库中
//v 显示过程
◼ 第三步:gcc使用静态库
//-L 指定库的存储路径
//-l 指定库的名称(不需要前面的‘lib’和扩展名‘.a’)
ldd查看可执行程序有哪些共享库(不能看静态库)
环境变量:
LD_LIBRARY_PATH=./libso
export LD_LIBRARY_PATH

2021/7/17

进程的三种状态:就绪,执行,阻塞
并行(同时执行,需要多处理器),并发(某一刻只有一个执行,轮转,一个处理器)、
内存管理,进程管理
操作系统发展史:串行,批处理,多道,分时
清除缓冲区:fflush,缓冲区放满,退出程序
环境变量envp=名称=值
unistd.h
复制进程fork:申请pid,准备pcb(复制)产生子进程,父进程返回值子进程,子进程返回值0.

2021/7/19

pcb:进程控制块,是一个结构体
程序的父进程是bash,0号没有父进程
僵死进程:子进程比父进程先结束,父进程没有回收子进程
复制进程fork():父进程返回子进程,子进程返回0,复制失败返回-1,复制后从fork之后执行
exit()退出进程,不退出主函数。exit(0)成功退出
unistd.h:Linux特有函数

2021/7/24

open,read,write,close(linux一切都是文件)
系统调用man1.命令2.系统调用3.库函数
fopen,fread,fget
Linux不区分二进制和文本
int open(const char* pathname,int flag);//新建需要第三个参数mode_t mode
bash命令解释器:fork+exec替换(execl,execlp,execle,execv,execvp)
0stdin
1stdout
2stderr

2021/7/26

inode只有一份,struct file
mybash命令解释器
信号:通知进程产生了某种事件
响应:1.默认2.忽略3.自定义
signal(处理信号,处理方式)头文件signal.h
子进程结束,给父进程发送信号

2021/7/31

命令解释器(shell bash)连接内核和用户
内置命令:内核命令,which不能显示位置,bash直接实现->调用函数实现。如cd
普通命令:which可以找到位置,fork+exec()
strtok():

2021/8/14

execvp()
进程间通信(IPC):管道、信号量、共享内存、消息队列、套接字

2021/8/15

无名管道:int pipe(int fd[2])fd[0]读 fd[1]写 指针指向管道文件
有名管道:两个进程,open读写

2021/8/28

进程:正在进行的程序。动态,资源分配的基本单位
线程:进程内部的一条执行路径

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值