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)问题:程序和进程的区别?
解答:
程序:存储在磁盘上的二进制可执行文件。
进程: 是一个正在运行的程序,它是动态的,而程序是一个静态的文件,进程

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

防火墙命令行基础配置实验(H3C模拟器)

嘿,这里是目录! ⭐ H3C模拟器资源链接1. 实验示意图2. 要求3. 当前配置3.1 PC配置3.2 FW配置(防火墙)[^7][^8]3.2.1 FW1配置3.2.2 FW2配置 3.3 R配置3.3.1 R1配置3.3.2 R2配置 3.4 SW配置3.4.1 SW1配置3.4.2 SW2配置3.4.3 SW3配置…

【Python】使用globals()函数成功解决tkinter多个新窗口问题

我在近期的一个项目(tkinter复刻记事本)里遇到一个棘手的问题:如何在创建多个新窗口后,每个窗口还能独立运行。当时我尝试如何去解决,但是无果,于是觉得非要使用线程不可,便留了一个坑。直到今天…

从0开始学习JavaScript--JavaScript中的对象原型

JavaScript中的对象原型是理解该语言核心概念的关键之一。本文将深入探讨JavaScript对象原型的作用、使用方法以及与继承相关的重要概念。通过详细的示例代码和全面的讲解,将能够更好地理解和运用JavaScript对象原型,提高代码的可维护性和扩展性。 Java…

rust tokio select!宏详解

rust tokio select!宏详解 简介 本文介绍Tokio中select!的用法,重点是使用过程中可能遇到的问题,比如阻塞问题、优先级问题、cancel safe问题。在Tokio 中,select! 是一个宏,用于同时等待多个异步任务,并在其中任意一…

一、Lua基础

文章目录 一、Lua是什么二、Lua特性(一)轻量级(二)可扩展(三)其它特性 三、Lua安装四、Lua应用 看到评论说,C让我见识了语言的严谨与缜密,lua让我见识到了语言的精巧与创新&#xff…

最新AI创作系统ChatGPT系统运营源码+DALL-E3文生图+支持OpenAI-GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI…

C语言实现万年历(附代码) 小白完成的第一个C语言程序,希望大家多多关注,点赞

C语言实现万年历 前言:本文章向大家介绍如何使用C语言代码实现万年历使用实例,讲解编写万年历的方法,教你轻松学会写出万年历。这个小程序算是我自己写的第一个比较完整的小程序,算是对大一上学期学习的C语言程序设计基础的一个总…

Flask学习二:项目拆分、请求与响应、cookie

教程 教程地址: 千锋教育Flask2框架从入门到精通,Python全栈开发必备教程 老师讲的很好,可以看一下。 项目拆分 项目结构 在项目根目录下,创建一个App目录,这是项目下的一个应用,应该类似于后端的微服…

一般将来时

一般将来时 概念 表示将要发生的动作或打算、计划准备做某事 时间 tomorrow 明天 the day after tomorrow 后天 next week 下周 next weekend 下周末 next month 下个月 next year 明年 ...句子结构 主语 be(am/is/are)going to do … 计划,…

类与对象(下)

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

windows下docker环境搭建与运行实战

背景 学习docker使用,需要环境,今天主要的目标是在windows环境下安装docker环境。 为什么要这么搞,主要是企业内部服务器,都是跟公网隔离的,没有访问公网权限,所以镜像什么的,从公网拉取完全没…

056-第三代软件开发-软件打包

第三代软件开发-软件打包 文章目录 第三代软件开发-软件打包项目介绍软件打包1 下载 linuxdepoyqt 工具2 安装 linuxdepoyqt3 qmake配置4 打包程序 总结 关键字: Qt、 Qml、 linuxdeployqt、 Ubuntu、 AppImage 项目介绍 欢迎来到我们的 QML & C 项目&…