Linux学习(二)

本文详细介绍了Linux系统中的各种命令,包括文件查看(如cat, more, less, head, tail)、文件查找(find, grep)和进程管理(ps, kill, jobs, pkill)。此外,还讲解了用户管理、文件压缩解压、关机重启、GCC编译、GDB调试、Makefile的使用以及库文件管理等重要内容,是Linux学习者的实用指南。" 137492412,22928628,Vue.js插件精选:从文件上传到数据可视化,"['前端开发', 'Vue.js', 'JavaScript', '前端框架']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件查看命令

1、cat
①查看文件内容
在这里插入图片描述
②合并文件内容
eg:将test.c 和main.c文件内容合并到file.c
在这里插入图片描述
> 重定向
> > 追加
③往文件中写入数据, Ctrl+d 是结束输入
在这里插入图片描述
2、more
当一个文件的内容超过一个屏幕能显示的行数,使用 more 可以分屏显示文件内容。到末尾直接退出
按q可以直接退出
使用方式: more filename

3、less
文本内容查看器,查看文件内容,但是文件内容不会显示到界面上 less filename

4、head
显示文件前 n 行的内容 head -n filename
在这里插入图片描述
5、tail
显示文件后 n 行的内容 tail -n filename
在这里插入图片描述

文件查找命令

find
在目录树中搜索指定的文件,也可以指定开始的搜索位置
find 搜索路径 -name 文件名 (按文件名字搜索)
在这里插入图片描述

find 搜索路径 -cmin -n (搜索过去n分钟内修改的文件)
在这里插入图片描述

find 搜索路径 -ctime -n (搜索过去n天内修改的文件)
在这里插入图片描述

grep 文本搜索工具

grep "ab" main.c:过滤出main.c中包含“ab”的所有行 并输出。
在文件中过滤出包含指定字符串的行
主要参数:
-c:只输出匹配行的计数;
-i: 不区分大小写;
-n:显示匹配行及行号;
-v:显示不包含匹配文本的所有行。
在这里插入图片描述
在这里插入图片描述

| 管道

将前一个命令的输出结果作为后一个命令的输入
ls /lib | grep sh :输出:过滤出/lib路径下包含sh的文件名

进程管理命令

ps:默认显示与当前终端有关的进程信息
-e:显示系统中所有的进程信息
-f:显示更多的进程属性信息(全格式)
-L:显示进程中的线程ID

bash:命令解释器
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
pstree:查看系统进程的树状图
在这里插入图片描述

结束进程

kill:结束或者挂起一个进程,或者ctrl+c在这里插入图片描述
-9:强制结束进程在这里插入图片描述
-stop:挂起进程

在后台运行进程

&
若不加& , 即在前台运行
在这里插入图片描述
jobs:查看后台运行的命令
在这里插入图片描述

pkill :一次性结束所有后台运行的进程
在这里插入图片描述

用户管理命令

1、系统存储用户信息的文件
/etc/passwd: 存储用户基本信息
在这里插入图片描述

/etc/group: 存储用户组的信息
在这里插入图片描述

/etc/shadow:存储用户的密码

2、添加新用户
useradd newname 添加一个新的用户 newname
选项: -g:执行新用户的主组
-G:将新用户添加到副组
-s:指定新用户默认使用的shell终端
-d:指定新用户登录默认进入的目录

首先要切换到管理员身份# su
在这里插入图片描述
添加新用户lyy:
在这里插入图片描述

在这里插入图片描述
此时没有密码,不能登录,设置密码
在这里插入图片描述
删除用户lyy:
userdel lyy
在这里插入图片描述
在这里插入图片描述

文件压缩

文件的压缩过程: ① 将文件进行打包; ②对打包带的文件 ,进行压缩。
1、tar:将文件打包或者解包
◼ c 创建包文件
◼ f 指定目标为文件而不是设备
◼ v 显示详细过程
◼ t 显示包中的内容而不释放
◼ x 释放包中的内容
◼ z GNU 版本新加的,使得 tar 有压缩和解压的功能

2、gzip:将文件进行压缩,gzip my.tar进行压缩 生成my.tar.gz 压缩包
在这里插入图片描述

解压命令

文件的解压过程:①将文件解压成包 ②解包动作;
3、gzip gzip -d mt.tar.gz 解压成包
4、tar tar xvf my.tar 解包成文件
在这里插入图片描述

一步压缩和解压

tar zxf my.tar.gz 一步解压命令
tar zcvf my.tar.gz a.txt b.txt c.txt一步压缩命令

关机与重启

shutdown -h now :立刻关机shutdown now
shutdown -r now:立刻重启

halt 关机
reboot 重启

统计文件中出现字符个数

wc:统计文件中单词个数(-w);字符个数(-c);行数(-l)。
在这里插入图片描述

使用GCC编译程序

gcc 分步编译链接
(1) 预编译 : gcc -E main.c -o main.i
(2) 编译: gcc -S main.i -o main.s
(3) 汇编: gcc -c main.s -o main.o
(4) 链接: gcc main.o -o main
编译链接过程:
在这里插入图片描述

在这里插入图片描述
多个源文件的编译:
gcc -c main.c
gcc -c add.c
gcc -c max.c
gcc -o main main.o add.o max.o
多个文件一步完成:gcc -o main main.c add.c max.c
在这里插入图片描述
在这里插入图片描述

Makefile文件

在这里插入图片描述
在这里插入图片描述

GDB调试程序

Debug 版本和 Release 版本
Debug 版本
Debug 版本为可调式版本,生成的可执行文件中包含调试需要的信息。我们作为开发人
员,最常用的就是 debug 版本的可执行文件。
Debug 版本的生成:
因为调试信息是在编译过程时加入到中间文件(.o)中的,所以必须在编译时控制其生
成包含调试信息的中间文件。
gcc -c hello.c -g —> 生成包含调试信息的中间文件
gcc -o hello hello.o
或者 gcc -o hello hello.c -g

Release 版本
Release 版本为发行版本,是提供给用户使用的版本。用 gcc 默认生成的就是 Release 版
本。
首先将源代码编译、链接生成 Debug 版本的可执行文件,然后通过‘ gdb Debug 版本
的可执行文件名’进入调试模式。

单进程、单线程基础调试命令
在这里插入图片描述
在这里插入图片描述
多进程调试命令
(gdb) set follow-fork-mode mode
mode 可以选择 parent 或者 child,即:选择调试那个进程。
注意:未被跟踪调试的进程会直接执行结束。
多线程调试命令
a) 利用 info threads 查看线程信息;
b) thread id 调试目标 id 指定的线程;
c) set scheduler-locking off | on | step;
“off”表示不锁定任何线程;
“on”只有当前被调试的线程继续运行;
“step”在单步执行的时候,只有当前线程会执行;

库文件

库是一组预先编译好的方法的集合。 Linux 系统存储的库的位置一般在: /lib 和 /usr/lib。
在 64 位的系统上有些库也可能被存储在/usr/lib64 下。库的头文件一般会被存储在
/usr/include 下或其子目录下。
库有两种,一种是静态库,其命令规则为 libxxx.a,一种是共享库,其命令规则为 libxxx.so
静态库的生成方法:
第一步:先将需要生成库文件的所有“.c“文件编译成“.o”文件
第二步:使用 ar 命令将第一步编译的所有” .o” 文件生成静态库,其中:
◼ c 是创建库
◼ r 是将方法添加到库中
◼ v 显示过程
ar crv libfoo.a add.o max.o
在这里插入图片描述

静态库的使用方法:
gcc -o main main.c -L路径 -l库名
在这里插入图片描述
共享库的生成与使用
共享库的生成:
第一步:先将需要生成库文件的所有“.c“文件编译成“.o”文件
第二步:使用 gcc 命令将第一步编译的所有” .o” 文件生成共享库
gcc -shared -fPIC -o libfoo.so add.o max.o
在这里插入图片描述

共享库的使用
gcc -o main main.c -L路径 -l库名
静态库和共享库的区别:静态库在链接时将用到的方法包含到最终生成的可执行程序中,而共享库不包含,只做标记,在运行程序时,才动态加载。

主函数的三个参数

int main( int argc, char* argv[], char* envp[])
在这里插入图片描述

(1) argc 参数个数
(2) argv 参数内容
在这里插入图片描述
(3) envp 环境变量
![在这里插入图片描述](https://img-blog.csdnimg.cn/e26a8a8a9a1147f3a36a17f9e7fa7904.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Lii5Lii5LiiRHIu,size_20,color_FFFFFF,t_70,g_se,x_16

printf的缓冲区

在这里插入图片描述

fork复制进程

每个进程都有一个进程控制块,英文缩写PCB;
进程控制块是用一个结构体struct task_struct来实现。

操作系统如何管理进程?
在这里插入图片描述
fork复制进程
在这里插入图片描述

pid_t fork(void)//函数返回类型 pid_t 实质是 int 类型

在这里插入图片描述

fork写时拷贝技术

以页为单位

进程的逻辑地址及物理地址

在这里插入图片描述

僵死进程

产生条件: 当子进程先于父进程结束,父进程没有获取子进程的退出码,此时子进程变成僵死程序
**解决方法:**①父进程调用wait()方法获取子进程的退出码;
② 父进程先结束

操作文件的底层调用

open() 打开一个文件
在这里插入图片描述
read()从文件中读取数据
在这里插入图片描述
write()向文件中写入数据
在这里插入图片描述
close()关闭文件
在这里插入图片描述

父子进程共享打开文件

在这里插入图片描述
在这里插入图片描述

系统调用和库函数

区别:系统调用的实现在内核中,属于内核空间,库函数的实现在函数库中,属于用户空间。

内存的申请与释放

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值