linux常见命令合集(持续更新)

权限
chmod u,g,o,(a)    u:自己    g:同组人
r:  读     4
w: 写    2
x: 执行 1
-: 无     0
chmod u+x a.txt
chmod u-x  a.txt
chmod 764 a.txt  (数字为相加之和:7=4+2+1)

cd 切换路径 cd ~ 直回家目录; cd .. , {..代表上一层;.代表当前位置}; cd -切换至上个路径
ls:向下看;ls -l具体信息;ls  -a显示隐藏文件;ls 绝对路径:该路径下哪些文件
pwd: 显示当前位置
touch:创建普通文件(可多个)
mkdir: 创建文件夹(可多个)
rm删文件             rm   -r:删文件夹
man:帮助手册

安装软件(命令)
1.切换到管理员                                  apt install   软件名称          仓库源 换成国内
sudu su                                                   无法下载:
 
2.退出管理员                                            安装:vim   gcc  g++
exit
  
红帽子系统用 yum

vim
【命令模式】           i,a,o进入     esc返回                【插入模式 】                                【末行模式】
(命令转末行)               :w只保存:q只退出:wq保存退出:q!不保存退出(强制退出)


cp 拷贝普通文件及文件夹
gcc -o 目标文件 源文件 (将源文件转换成可运行程序输出至目标文件)
./ 运行目标文件

mv  (./)移动文件;   原名  目标名重命名                                                                                  .. :上一层
cat : (cat  文件名)打印文件内容 ;(cat 文件名1 文件名2) 合并文件 ;(cat 数据(文件)>目标文件)向文件写入数据【ctrl+d完成在键盘写入】
head  (-n):打印前十行 (前n行)
more :整屏浏览文件 【空格翻屏,回车下一行,q退出】
less :滚动式浏览文件 【方向键,q退出】
tail:与head相反:
vim进入后: nyy :复制n行; p : 粘贴n行; 删除n行: ndd; 撤销:ctrl+u;恢复:ctrl+r ;显示行号:set nu ;不显示行号:set nonu
find:搜索 (ctrl+c强行终止)
find /home/stu -name main.c
         在哪里                     文件名
grep:过滤(筛选)加文件名直接搜索内部       -i忽略大小写        -c只显示统计行数        -v显示不包含匹配内容的行
|:管道文件

DAY03
man中:1:代表命令   2;系统调用    3:库函数
,由操作系统
ps:显示当前中端中运行的进程及ID(命令)  进程:一个正在运行的程序,由操作系统管理
ps -f:显示详细信息
ps -e:显示其他终端进程(系统所有)
ps -ef:~
                          <bash:命令解释器,用户与内核交互媒介(图形化界面也可做此理解)>
kill:结束进程(后台)    kill -9:强制结束
jobs:查看后台运行的任务及任务号
ctrl +c 结束前台运行进程      ctrl +z停止前台运行程序      
bg %任务号:前台运行的移动到后台
fg%任务号 :后台运行的移动到后台

linux 可执行ELF格式
win              PE格式

main.c ->main.exe/main
高级语言->汇编助记符->二进制指令
共进行了:预编译 编译 汇编 连接  
《源文件》预编译《已处理文件》   《已处理文件》 编译 《汇编指令》汇编《二进制指令》     《2进制指令》链接
《程序员的自我修养》 预编译部分
预编译:gcc -o 输出文件 -E 输出文件
gcc -o main.i  -E  main.c
gcc -S main.i -o main.s
gcc -c main.s  -o main.o
gcc -o main main.o
一步:gcc -o 目标文件 源文件(加.c)
多文件编译:gcc -o main main.c add.c max.c
分步:gcc -c add.c
gcc -c max.c
gcc -o main add.o main.o max.o

day4
                                                                                                                         程序:1.调试版debug(调试信息)
                                                                                                                                    2.发行版release
makefile
清理:make clean 清理编译过程中间生成文件  (-f:若出错不报 -r.)

压缩文件:tar c(v)(f)   (目标包名)  (源包名·)
gzip (第二阶源包名(网上常见))
解压到当前位置:tar zxf (第二阶段包名)

gdb
库文件:静态库与共享库(动态链接库)


gcc -c add.c  main.c max.c-g    debug版本编译
异常退出vi:rm 隐藏swp文件

1.调试:编译时生成debug(调试版) -g
2.GDB安装

显示代码:l
断点:b (+) n
info break :查看断点信息
r执行到当前   n 下一步
p打印
q退出
delete + 断点代码
c执行到下一个断点
s进入函数
finish跳出函数
l xx.c:行号 跳转到xx.c第n行
delete n 删除第n个断点
makefile文件:打开编译程序 在需要调试的行后加-g


day5
makefile文件----make
gdb 文件常用命令:
l  显示代码
b+行号 加断点
info break 
r 启动程序
n单步执行
p打印
c继续执行
s进入函数
finish跳出函数
q退出


1.将所有的.c进行编译生成.o文件  gcc -c foo.c       ->foo.o
2.作库 ar crv -o libfoo.a  foo.o
3.使用库gcc -o main main.c -L. -lfoo
gcc -o main main.c -L(路径) 库名
foo.h 在当前位置 #include "foo.h"
mv 


共享库
gcc -shared -fPIC -o libxx.so foo.o

找库位置会默认到/usr/lib文件中找

静态库 程序使用静态库编译后,用到的库方法会复制到生成的可执行程序中。
直接运行当前程序,不需要再去链接静态库
共享库:程序使用共享库,编译链接后,可执行程序只标记用到的库方法,

库文件:预先编译好的方法的集合
printf() 库函数
stdio.h声明   int add(intx,inty);>>具体实现
c库 静态库 共享库(win动态链接库)
lib().a
lib().so
add.c->add.o
gcc -c add.c -o add.o
头文件声明 /usr/include
#include<stdio.h>

add.h
#include<stdio.h>

库文件存放(声明):/usr/lib
/lib

day 06
gcc main.c add.c max.c
makefile/MAKEFILE  make
gdb  调试,-g为debug 版本
gdb调试,-g
1.b,p,n,r,s,finish,
静态库,共享库
静态库将代码链接到库中,更新库后需要重新编译
共享库运行时动态加载,不包含代码,更新库不必重新编译
ldd main
/usr/include
/usr/lib
/usr/bin
进程:一个正在运行的程序:./main
操作系统:管理计算机上的软硬件资源,进程,内存,文件,中断
内存  物理 8   16   4k每页面

fork复制进程
main()主函数进程
printf()函数
主函数可在运行时传入参数
PCB进程控制块|进程描述符

pid_t fork();
子进程fork返回值为0,父进程为子进程ID号


#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
int main(int argc,char*argv[],char*envp[])

{
        printf("argc=%d\n",argc);
        for(int i=0;i<argc;i++){

        printf("argv[%d]=%s\n",i,argvi]);
        }
        for(int i=0;envp[i] !=NULL;i++)
        {
        printf("envp[%d]=%s\n",i,envp[i]);
        }
        exit(0);
}
~             


printf("hello")                   printf("123")
缓冲区输出条件
1.缓冲区满        2.用户强制刷新缓冲区       3.程序结束

链接阶段分出逻辑地址


day07
孤儿进程分配一个父进程 pid==1,init
就绪状态,运行状态,阻塞状态,僵死状态进程为僵死进程
僵死状态:子进程先于父进程结束,父进程没有获取子进程的退出码,子进程不可删除PCB,此时子进程为僵死进程                可以调用wait()处理
父进程先结束,子进程变成孤儿进程,系统重新分配一个父进程


内存泄漏:借了没还
malloc为借内存语句

0*ffff ffff
内核1G
栈(向下)
堆(向上)
数据段
代码段
0*0000 0000(共4G)
1.地址空间 32 小于3G
物理内存大小 够用,成功,不够失败
物理内存剩余大小+虚拟内存剩余空间  够用成功,不够失败。

文件操作 c语言:fopen fread fwrite fclose fgets
linux:open read write close

fork+exec
execl execlp execle
execv execvp    库函数
execve   系统调用
main->ps

day10
信号:通知进程产生了某个事件

发送信号
kill()-->进程-->响应(1.默认2.忽略3.自定义)signal()
9号信号不允许被捕获(只能被默认执行)
SIGCHLD:子进程结束父进程收到该信号
默认:什么都不做
忽略:什么都不做()
自定义:


进程阶段:
fork exec  信号   僵死进程  写时拷贝
系统调用
open read write close
文件描述符 int
进程地址空间   逻辑地址  物理地址
进程间通讯IPC:管道 信号量 共享内存 消息队列 套接字
管道  信号量  共享内存  消息队列  套接字
管道:有名(命名)管道       无名管道
mkfifo


day11
无名管道创建:pipe fd[n]
有名管道可以在任意两进程间通讯
无名管道只能在父子进程间进行
考点:1.有名管道与无名管道区别
2.管道的通讯方式:半双工
3.写入管道的数据在哪里:内存    头指针指向数据写入端,尾指针为初始;读取时尾指针前移,写满后头指针前移;
写端关闭:读端read()==0
读关闭,写端


操作系统 :信号量  正数   (p:获取资源,信号量减一,v:释放资源,信号量加一)(0,1二值;3:计数)
临界资源 :只能被一方使用
临界区:访问临界资源的代码段
1 创建,初始化 semget
2 p操作semop
3 v操作
4 删除信号量


day12 
进程:正在运行的程序
线程:进程内部的一条执行路径
int main()
{
线程
}
线程函数:
void*fun(void*arg)
{
同时执行
}
创建线程:
头文件pthread.h
pthread_create{}:创建线程
pthread_exit():退出线程
pthread_join():等待线程结束
-lpthread库
void独立于主函数

day13
进程间通讯:管道 信号量 共享内存 消息队列 套接字
消息队列本质为结构体 开头必须为 long char
ipcs -q查看消息信息
msgget
msgrcv读取   msgrcv(id,大小,类型,标志位(0))
标志位为0读不到则阻塞 消息类型必须大于0,0号类型代表不区分,随意读取
ipcrm -s/m/q

线程:进程内部的一条执行路径。
进程(正在运行的一条程序)线程的区别常问
void* 返回值(void* 参数)
并发运行:一段时间内两者都有运行
并行:某一时刻两者都有运行(有多个处理器)
pthread.h
pthread_create()
pthread_exit()
pthread_join
纯粹的用户级线程只可并发运行
纯粹的内核级线程可并行
组合型均可
linux为内核级线程   linux内核并无线程概念,将其当成进程实现,为其分配pcb(struct task_struct)

线程id:struct task_struct;

同步:信号量,互斥锁,条件变量,读写锁
c语言本身无多线程
c++11后有多线程  linux中直接调用多线程接口


sem_t sem1定义信号量
sem_wait(信号量地址)对应sem_post()
for()
{sem_wait(sem1)
...
sem_post(sem2)}


sem_init(&sem1,0,1)
sem_init(&sem2,0,0)
sem_init(&sem3,0,0)
phread_t id1,id2,id3;
phread_create(id1,NULL,fun1,NULL);
phread_create(id2,NULL,fun1,NULL);
phread_create(id3,NULL,fun1,NULL);
pthread_join(id1,NULL);
pthread_join(id2,NULL);
pthread_join(id3,NULL);
sem_destroy(&sem1);
sem_destroy(&sem2);
sem_destroy(&sem3);
exit(0);
ulimit -a资源限制情况

互斥锁相当于初始值为一的信号量(可以互换)
pthread_mutex_t mutex;
pthread_mutex_init(&mutex,NULL)
pthread_mutex_lock()
pthread_mutex_unlock()
pthread_mutex_destroy()


day 
线程的并发运行
同步的方法:信号量 互斥锁 条件变量 读写锁
线程安全
条件变量:pthread_cond_init
pthread_cond_wait添加到条件变量的等待队列
pthread_cond_signal()唤醒一个
pthread_cond_broadcast()唤醒所有
加锁:防止同时调用,防止线程执行过程中被访问
惊群:多个线程等待一个0被置1
CAS操作是一种典型的原子操作,它涉及三个操作数——内存位置(V)、期望的原值(A)和新值(B)。CAS操作会先比较内存位置V的值与期望的原值A,如果两者相等,则将内存位置V的值设置为新值B。这个比较和设置的过程是原子的,即在执行过程中不会被其他线程或处理器中断。这种特性使得CAS操作在多线程环境中非常有用,可以用于实现无锁数据结构或作为互斥锁的一部分。

在互斥锁的底层硬件逻辑中,CAS操作通常用于尝试获取锁。当一个线程尝试获取锁时,它会使用CAS操作来比较锁变量的当前值与一个表示锁未被占用的值。如果两者相等,说明锁当前未被其他线程占用,CAS操作会将锁变量的值设置为表示锁已被占用的值,从而成功获取锁。如果CAS操作失败(即锁变量的当前值与期望值不相等),说明锁已被其他线程占用,此时线程通常会进入等待状态。

读写锁:两个读操作可以通过,同时读写不可通过,同时写入不可通过
线程安全:多线程程序不会因为线程执行出现错误
不论线程调度顺序怎样都会出现正确的结果
1.同步2.使用线程安全的函数

OSII    tcp ip
应用层           http   https
表示层   物理层
会话层
传输层    传输层   tcp udp
网络层    网络层    ip
数据链路层    数据链路层    arp\rarp
物理层     物理层

tcp协议特点            面向连接的可靠的流式服务  (面向连接体现在三次握手与四次挥手)三次建立连接,四次挥手连接断开
可靠性保证;
1.应答确认,超时重传(无返回)
2.乱序重拍,去重(对端接收时可能乱序,对端返回确认信息可能丢失,导致发送端发送多个)
3.滑动窗口进行流量控制(窗口内允许发送已确认收到信息滑动窗口)
流式服务:发送的多个数据结合成数据流
send,"hello""123"
非独立报文,可能接收到的是"hello123"
使用多线程并发与多进程并发
tcp连接状态
connect阻塞:发出SYN未收到回应
客户端无绑定(bind)操作,打开会被系统自动分配
服务器与多个客户端有多个链接,即多种状态
netstat -natp
三次握手与四次挥手:
P64
listen()                                          connect()
SYN_RCVD<--------------------SYN_SENT
                     SYN   seq=i
谁先关谁进入TIME_WAIT状态

UDP无连接,提供不可靠的数据包服务   实时性高
(传输层有tcp 与udp协议,但均上升为网络层的(不可靠)ip协议
udp ser        udp cli
socket()      socket()
bind()         
recvfrom()
sendto()
close()
同协议不可用同端口,其余操作大概率可以


tcp 面向连接 可靠的 流式服务  TIMEWAIT1可靠的终止tcp链接2让迟来的报文被识别丢弃
udp 无连接   不可靠  数据报
两者均在传输层

http协议:80 https:443  均属于应用层协议
tcp

html css js

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值