Linux进程管理,用户管理,文件压缩命令

gcc与g++区别(补充了解):

比如有两个文件:main.c,mainc++.cpp(分别用C语言和C语言写的)如果要用gcc编译呢?
gcc -o mainc main.c
gcc -o mainc mainc++.cpp -lstdc++ 指明用c++的标准库;
区别一:
gcc默认只链接C库,并不会链接C++的库;g++会默认链接c++标准库.
区别二:
gcc编译.c文件,则按照C语言的方式编译;gcc如果编译.cpp文件,则按照c++的方式编译;
g++不管是c文件还是cpp文件,都是按照c++的方式进行编译;即g++不管文件后缀,直接按照c++的语法规则处理
问题:如果gcc要按照c++方式编译呢?需要指定库,例如:
gcc -o test test.cpp -lstdc++    指定库

为什么是补充了解呢?就是正常使用就是gcc编译c文件,g++编译c++文件;

进程管理命令:

进程的概念

进程:运行中的程序(过程,动态)

程序:存储在磁盘上的二进制可执行文件;(静态)

操作系统是通过管理进程,让进程运行来完成用户的任务的;

PCB:进程控制块,记录的是进程的相关属性信息;数据结构

PID:是操作系统对进程的标识;唯一的;

简而言之, 程序:指令+数据; 进程:运行中的程序,也就是说,程序是存储在磁盘上的二进制可执行文件,而进程是内存上的,是运行中的程序(过程);
操作系统是通过管理进程,让进程运行来完成用户的任务的;
操作系统对于进程的描述:PCB(进程控制块,进程描述符),记录一个进程执行过程中的相关的属性数据;PID是操作系统对进程的标识,每一个进程的PID都是不同的(唯一性);
为了描述控制进程的运行,系统中存放进程的管理和控制信息的数据结构称为进程控制块(PCB Process Control Block),它是进程实体的一部分,是操作系统中最重要的记录性数据结构。它是进程管理和控制的最重要的数据结构,每一个进程均有一个PCB,在创建进程时,建立PCB,伴随进程运行的全过程,直到进程撤消而撤消。
(操作系统精髓与设计原理43页) 进程的组成;
(操作系统精髓与设计原理74页) PCB进程控制块结构;

补充:僵死进程:进程实体释放与PCB的释放有一个时间差(PCB的释放是需要一定条件的),进程实体被释放,但是PCB没有释放.

(1)ps  默认显示与当前终端有关的进程信息;

参数:-e  -f  -L

-f:显示更多的进程属性信息;

-e:显示系统信息;

-L:显示进程中的线程的ID;

ps -ef |grep ...

(2)pstree

以树状图形显示进程之间的关系;

(3)kill

结束或者挂起一个进程;

语法:

kill   PID

-9  强制结束进程;(kill -9 PID);

kill  -STOP  PID:挂起一个进程

1)前后台

2)如何启动一个进程:

路径+可执行文件名

路径+可执行文件名 &(将进程放到后台去运行)

(4)jobs

显示当前终端的任务,显示后台执行的或者挂起的任务;

显示的结果分别是:

任务号   任务的状态    任务的名称;

jobs  -l:显示详细内容;

(5)pkill

结束一组同名的进程,即结束一组CMD相同的进程;

(6)fg   bg

将后台运行的或者挂起的进程挪到前台执行:fg  %任务号

将挂起的进程唤醒到后台去执行:bg  %任务号

(7)top

查看系统使用情况以及进程信息;

同Windows的任务管理器

用户管理命令:

(1)系统存储用户信息的位置:

/etc/passwd:存储用户的基本信息

UID:用户ID    GID:组ID;

(2)系统存储组信息的位置:

/etc/group

(3)系统存储用户密码信息的位置:

/etc/shadow

(2)添加用户

使用命令添加新用户:useradd  newname

桌面添加:右键:设置:用户,解锁,添加用户(Ubuntu建议用图形化界面添加用户)

(3)修改密码

先转成管理员 sudo  su

passwd 用户名

exit

(4)删除用户

userdel   用户名(默认仅仅删除用户,不删除家目录,不删除家目录中的文件 ,比如/home/stu  不要删除)

注意,Ubuntu可以使用该命令删除用户,但是必须保证该用户没有登录,比如关机之后随便进入一个用户,然后转成管理员,那么就可以删除的用户.

userdel  -r  用户名(删除家目录底下的所有文件)(一般不建议删除此文件)

文件压缩与解压命令:

(1)tar  打包或解包

tar  将文件打包

tar  cvf    xxxx.tar(打包好的名字)    需要打包的所有文件名

各参数的意义如下:

c:创建包文件

f:指定目标为文件而不是设备;

v:显示详细过程;

t:显示包中的内容而不释放;

x:释放包中的内容

z:GNU版本新加的,使得tar有压缩和解压的功能;

解包:

tar  xvf  xxx.tar(需要解包的名字)

(2)gzip   压缩或者解压

压缩:gzip  打包的名字

gzip  my.tar   (后缀名为.tar.gz)

解压:gzip  -d  xxx.tar.gz

打包--压缩--解压--解包

一步解压之后:打包--压缩---一步解压

(3)tar一步解压(重点)

GNU之后tar命令:

可解压两种格式:tgz  tar.gz

tar    zxf  xxx.tar.gz

tar   zxf  xxx.tgz

(新的系统x也可以一步解压)

常见面试题目:

(1)问题:g++与 gcc 的区别, g++能编译.c 文件吗? gcc 能编译.cpp 文件吗?
考点: 对 gcc 和 g++工具的使用

  1. gcc 现在是 GNU提供的一些编译器工具的集合(Gnu Compiler Collection),以
    前是GNU组织提供的 c 编译器(Gnu C Compiler)。 g是 c编译器编译器。
  2. gcc 可以编译.c 和.cpp 的源文件对.c 按 c 语言语法规则处理, .cpp 自动按
    c语法规则处理,但默认不链接相应的 c库,需要手动指定链接的库名"-lstdc++"

例如:gcc  -o test  test.cpp    -lstdc++

  1. g可以编译.c 和.cpp 的源文件,但是都按 c的语法规则来处理。

(2)gdb常用命令(答案略)

(3)问题:Linux 调试,程序断点实现思路?
解答:
linux 提供了系统调用 ptrace(),它可以提供一个进程跟踪控制另一个进程的方法,并可以检查和改变被跟踪进程内存和寄存器里的数据,可以用它来实现断点调试的功能。
原理是 attach 在正运行的进程使其停止,然后读取进程的指令寄存器内容所指向的指令,备份后替换成目标指令,再使其继续执行,此时被追踪进程就会执行我们替换的指令,运行完成注入的指令后,再恢复原进程的指令寄存器的值, 从而达到改变运行原程序逻辑的目的。
参考博客:
Linux Ptrace 详解-CSDN博客
Linux Hook 笔记 - 有价值炮灰 - 博客园

(4)问题:现有从网上下载的redis安装文件:redis-6.0.9.tar.gz 现在如何对其进行解压释放出源文件,请给出操作命令?
解答:
tar zxf redis-6.0.9.tar.gz

(5)问题:Linux 的版本号是多少, gcc 的版本号是多少
解答:
使用命令 uname 可以查看 Linux 的版本, 使用 gcc -v 可以查看 gcc 版本。
(6).vi/vim的基本命令
问题:vi 的基本命令使用操作
解答:

  1. 三种模式:命令模式、插入模式、末行模式
  2. 命令模式转插入模式: i a o , I A O
  3. 命令模式下几个快捷操作: nyy 复制 n 行, ndd 删除/剪切 n 行 p 粘贴 等等
  4. 末行模式几种操作: :wq 保持退出 :w 只保存 :q 只退出 :q!不保持退出 等

(7)问题:查看系统某个日志文件 ,使用哪个命令最合适?
解答:tail命令

(8)问题:程序和进程的区别?
解答:
程序:存储在磁盘上的二进制可执行文件。
进程: 是一个正在运行的程序,它是动态的,而程序是一个静态的文件,进程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/189129.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

EMQX-5.3.1单机集群部署并基于Nginx实现负载均衡

本例单机集群部署使用三个节点,分别为node1、node2、node3 一、安装与配置 1 创建数据目录 mkdir -p node1/data node1/logs mkdir -p node2/data node2/logs mkdir -p mode3/data node3/logs 2 数据目录授权 chown 1000 node1/ node2/ node3/ chown 1000 n…

扫描条形码到电脑:Barcode to pc 4.6.3 Crack

像专业人士一样使用条形码将条形码发送到 PC 排名第一的智能手机扫描应用程序 将条形码即时发送到计算机程序并自动执行任务的最简单方法 受到全球 500,000 多名用户的信赖 条形码到 PC:Wi-Fi 扫描仪应用程序,条码到 PC:适用于 Android 和 i…

车载通信架构 —— 传统车内通信网络LIN总线(低成本覆盖低速场景)

车载通信架构 —— 传统车内通信网络LIN总线(低成本覆盖低速场景) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是…

C++类与对象(中)

🎉个人名片: 🐼作者简介:一名乐于分享在学习道路上收获的大二在校生🐻‍❄个人主页🎉:GOTXX🐼个人WeChat:ILXOXVJE🐼本文由GOTXX原创,首发CSDN&am…

数据库表结构导出成Excel或Word格式

前言 该工具主要用于导出excel、word,方便快速编写《数据库设计文档》,同时可以快速查看表的结构和相关信息。 本博客仅作记录,最新源码已经支持多种数据库多种格式导出,有兴趣的可移步源码作者地址:https://gitee.co…

【代码】基于VMD(变分模态分解)-SSA(麻雀搜索算法优化)-LSTM的光伏功率预测模型(完美复现)matlab代码

程序名称:基于VMD(变分模态分解)-SSA(麻雀搜索算法优化)-LSTM的光伏功率预测模型 实现平台:matlab 代码简介:提出了变分模态分解(VMD)和麻雀搜索算法(SSA)与长短期记忆神经网络 (LSTM)相耦合,…

《尚品甄选》:后台系统——权限管理之角色管理(debug一遍)

文章目录 一、权限管理介绍二、表结构的设计三、查询角色四、添加角色五、修改角色六、删除角色 一、权限管理介绍 在后台管理系统中,权限管理是指为了保证系统操作的安全性和可控性,对用户的操作权限进行限制和管理。简单的来说就是某一个用户可以使用…

MySQL数据库——存储函数(介绍、案例)

目录 介绍 案例 介绍 存储函数是有返回值的存储过程,存储函数的参数只能是IN类型的。具体语法如下: CREATE FUNCTION 存储函数名称 ([ 参数列表 ]) RETURNS type [characteristic ...] BEGIN-- SQL语句RETURN ...;END ; characteristic说明&#xf…

【如何学习Python自动化测试】—— Python 的 unittest 框架

10 、Python 的 unittest 框架 10.1 Unittest 框架介绍 Unittest是Python语言中的一种测试框架,是Python标准库中的一个模块。它可以帮助开发者编写自动化测试,可以进行单元测试、集成测试、功能测试等各种类型的测试。 Unittest的特点是简单易学&#…

蓝桥杯第2119题 特殊时间 C++ 思维暴力

题目 思路和解题方法 1110 代表 1110年11月10号11点10分1110 4*4*4 有0111 1011 1101 1110 可以符合年 月日 时分秒的都有4种例如 1113有1113 1131 1311 3111 年份符合月日只有11 13 时分秒 只有11 13 11 31 13 11 无31 11 c 代码 #include <bits/stdc.h> using…

【开源】基于微信小程序的智慧家政系统

项目编号&#xff1a; S 063 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S063&#xff0c;文末获取源码。} 项目编号&#xff1a;S063&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询家政服…

如何理解2023vivo开发者大会,使用Rust语言编写蓝河操作系统(BlueOS)?

在2023年vivo开发者大会上&#xff0c;vivo宣布使用Rust语言编写其蓝河操作系统&#xff08;BlueOS&#xff09;。 什么是Rust语言&#xff1f; Rust 是一种开放源代码系统编程语言&#xff0c;可用于开发高效、安全的软件。 使用 Rust 可管理内存并控制其低级详细信息。 但你…

05 _ 系统设计目标(三):如何让系统易于扩展?

从架构设计上来说&#xff0c;高可扩展性是一个设计的指标&#xff0c;它表示可以通过增加机器的方式来线性提高系统的处理能力&#xff0c;从而承担更高的流量和并发。 你可能会问&#xff1a;“在架构设计之初&#xff0c;为什么不预先考虑好使用多少台机器&#xff0c;支持…

11.几何(曲线与曲面)

曲线 1.Bzier Curves 贝塞尔曲线. angents&#xff08;切线&#xff09;来定义贝塞尔曲线&#xff0c;规定了起点和终点必须是p0和p3&#xff0c;起始方向必须沿着p0p1方向&#xff0c;终点方向必须沿着p2p3方向 2. de Casteljau Algorithm&#xff08;算法&#xff09; 如何…

从0开始学习JavaScript--JavaScript事件:响应与交互

JavaScript的事件处理是Web开发中至关重要的一部分&#xff0c;通过事件&#xff0c;能够实现用户与页面的互动&#xff0c;使得网页更加生动和交互性。本文将深入探讨JavaScript事件的各个方面&#xff0c;包括事件的基本概念、事件类型、事件对象、事件冒泡与捕获、事件委托、…

【技术分享】RK3399 Ubuntu通过Python实现录音和播放功能

​本文基于IDO-SBC3968 Ubuntu 系统通过Python脚本实现录音和播放功能。 IDO-SBC3968采用RK3399国产六核64位CPU高性能处理器&#xff0c;支持4K HDMI2.0显示&#xff0c;接口丰富&#xff0c;拥有千兆以太网&#xff0c;全协议TypeC接口&#xff0c;USB3.0 &#xff0c;eDP 和…

使用ETLCloud实现CDC实时数据集成:从MySQL到ClickHouse的实时数据同步

背景 在上一篇文章中体验了 ETLCloud 的离线数据迁移功能&#xff0c;就像大数据领域里有离线计算和实时计算&#xff0c; ETLCloud 还提供了基于 CDC &#xff08;Change Data Capture&#xff09;的实时数据集成功能&#xff1a;实时数据集成是指通过变化数据捕获技术&#…

数组的申明

数组是一组相同类型的数据 数组中的数据需要通过数字索引来访问。 数组的声明需要使用new关键字 在声明数组时&#xff0c;可以使用{}来初始化数组中的数组 如果在数组声明之初没有使用大括号来初始化数组的元素&#xff0c;则需要指定数组的大小 在声明初始化元素的数组时…

调试器gdb

目录 一、调试 1、前言 2、 debug和release 二、基本操作 1、退出 quit 2、开始调试 r 3、打断点 b 4、查看断点 info b 5、查看代码 l 6、删除断点 d 7、逐过程 n 8、打印变量内容 p 9、逐语句&#xff08;进入函数&#xff09; s 10、查看函数调用堆栈 bt 11、…

Nginx反向代理实现负载均衡webshell

目录 本实验所用的环境&#xff1a; 问题一&#xff1a;由于nginx采用的反向代理是轮询的方式&#xff0c;所以上传文件必须在两台后端服务器的相同位置上传相同的文件 问题二&#xff1a;我们在执行命令时&#xff0c;无法知道下次的请求交给哪台机器去执行我们在执行hostn…