Linux基础三

devtools/2024/10/18 14:24:19/

 拼搏何惧路途难, 汗水淋漓志未残。 砥砺前行心不改, 终能登顶笑开颜。

目录

一,vi编辑器

1,命令模式

2,末行模式

3,编辑模式

二,Linux进程启动的几种方式

2.1前台启动进程

2.2后台启动进程

三,ps查看正在运行的进程

四,实时监听正在运行的进程 top

五,Linux查看进程数 pstree

六,Linux终止进程 kill

 七,Linux将后台命令脱离终端运行 nohup

一,vi编辑器

vi编辑器是效率很高的文本编辑器。它可以执行输出,删除,查找,替换,块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制,这是其他编辑程序所没有的。

1,命令模式

打开文件首先进入命令模式,是使用vi的入口

通过命令对文件进行常规的编辑操作,例如定位,翻页,复制,粘贴,删除

在其他图形编辑器下,通过快捷键或者鼠标实现的操作,都在命令模式下实现

2,末行模式

保存,退出等操作

要退出vi返回到控制台,需要在末行模式下输入命令

末行模式是vi的出口

3,编辑模式

正常的编辑文字

 


u 【撤销 恢复】-------------------进入编辑模式start----------------------
i 【输入 ,光标不动】
I 【输入,光标前面】
a 【输入 ,光标退后一个】
A 【输入 ,光标到行末尾】
s 【输入 ,光标删除所在字符】
S 【输入 ,光标删除所在整行】
-------------------进入编辑模式end----------------------:wq 【保存退出】
:q! 【强制退出,不保存】
h 【左】
j 【下】
k 【上】
l 【右】
5G 【跳转到多行】 【不常用】
gg 【第一行】
G 【最后一行】
:set number 【显示行号】
$ 【行尾】
0 【行首】
dw 【删除单词】
dd 【删除一行】
3dd 【删除三行】
yy 【复制一行】
dd 【剪切一行】
p 【刚刚yy、dd复杂/剪切的,粘贴到当前光标行】
P 【刚刚yy,dd复杂剪切的,粘贴到下一行】
/define【查找 define内容】
r + p 【把当前光标的字符替换成 p】
:s /printf/printxxx 【光标所在行,替换成printxxx】
1,6s /printf/printxxx/g 【1 ~ 6行 替换成printxxx,默认从第一行开始】
:%s /printf/printxxx/g 【整个代码,把所有的printf 替换 printxxx】
:vsp 【左右两个屏幕】
:sp 【上下两个屏幕】
ctrl + ww 【切换屏幕】
q 【退出当前屏幕】
wqall 【退出全部屏幕】

二,Linux进程启动的几种方式

手动启动进程指的是由用户输入命令直接启动一个进程,根据所启动的进程类型和性质的不同,其又可以细分为前台启动和后台启动2种方式。

2.1前台启动进程

这是手动启动进程最常用的方式,因为当用户输入一个命令并运行,就已经启动了一个进程,而且是一个前台的进程,此时系统其实已经处于一个多进程的状态。

查看进程:


(base) zhengguiliang 20:37:42 ~/yz
$ psPID TTY          TIME CMD802176 pts/2    00:00:00 bash802771 pts/2    00:00:00 ps

将进程挂起,指的是将前台运行的进程放到后台,并且暂停其运行。

2.2后台启动进程

进程直接从后台运行,用的相对较少,除非该进程非常耗时,且用户也不着急需要其运行结果的时候。

从后台启动进程,其实就是在命令结尾处添加一个“& ”符号(注意,&前面有空格)。输入命令并运行之后,Shell会提供给我们一个数字,此数字就是该进程的进程号。然后直接就会出现提示符,用户就可以继续完成其他工作。


(qiime2-amplicon-2024.2) zhengguiliang 21:00:40 ~/yz
$ conda activate /share/Software/miniforge3/envs/qiime2-amplicon-2024.2  &

三,ps查看正在运行的进程


(qiime2-amplicon-2024.2) zhengguiliang 21:00:52 ~/yz
$ ps aux   #查看系统中所有的进程,使用BS操作系统格式
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.0 239172 11716 ?        Ss   Jul03   2:06 /usr/lib/systemd/systemd --switched-root --system --deserialize 18
root           2  0.0  0.0      0     0 ?        S    Jul03   0:19 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<   Jul03   0:00 [rcu_gp]
root           4  0.0  0.0      0     0 ?        I<   Jul03   0:00 [rcu_par_gp]
root           5  0.0  0.0      0     0 ?        I<   Jul03   0:00 [slub_flushwq]
root           7  0.0  0.0      0     0 ?        I<   Jul03   0:00 [kworker/0:0H-events_highpri]
root           9  0.0  0.0      0     0 ?        I    Jul03   0:00 [kworker/u256:0-netns]
root          11  0.0  0.0      0     0 ?        I<   Jul03   0:00 [mm_percpu_wq]
root          12  0.0  0.0      0     0 ?        S    Jul03   0:00 [rcu_tasks_rude_]
root          13  0.0  0.0      0     0 ?        S    Jul03   0:00 [rcu_tasks_trace]
root          14  0.0  0.0      0     0 ?        S    Jul03   0:00 [ksoftirqd/0]
root          15  0.0  0.0      0     0 ?        I    Jul03  14:38 [rcu_sched]
root          16  0.0  0.0      0     0 ?        S    Jul03   0:00 [migration/0]
root          17  0.0  0.0      0     0 ?        S    Jul03   0:00 [watchdog/0]
root          18  0.0  0.0      0     0 ?        S    Jul03   0:00 [cpuhp/0]

(qiime2-amplicon-2024.2) zhengguiliang 21:05:06 ~/yz
$ ps -le   #查看系统种所有的进程 使用Linux标准命令格式
F S   UID     PID    PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0       1       0  0  80   0 - 59793 -      ?        00:02:06 systemd
1 S     0       2       0  0  80   0 -     0 -      ?        00:00:19 kthreadd
1 I     0       3       2  0  60 -20 -     0 -      ?        00:00:00 rcu_gp
1 I     0       4       2  0  60 -20 -     0 -      ?        00:00:00 rcu_par_gp
1 I     0       5       2  0  60 -20 -     0 -      ?        00:00:00 slub_flushwq
1 I     0       7       2  0  60 -20 -     0 -      ?        00:00:00 kworker/0:0H-events_highpri
1 I     0       9       2  0  80   0 -     0 -      ?        00:00:00 kworker/u256:0-netns
1 I     0      11       2  0  60 -20 -     0 -      ?        00:00:00 mm_percpu_wq
1 S     0      12       2  0  80   0 -     0 -      ?        00:00:00 rcu_tasks_rude_
1 S     0      13       2  0  80   0 -     0 -      ?        00:00:00 rcu_tasks_trace
1 S     0      14       2  0  80   0 -     0 -      ?        00:00:00 ksoftirqd/0
1 I     0      15       2  0  80   0 -     0 -      ?        00:14:38 rcu_sched
1 S     0      16       2  0 -40   - -     0 -      ?        00:00:00 migration/0
5 S     0      17       2  0 -40   - -     0 -      ?        00:00:00 watchdog/0
1 S     0      18       2  0  80   0 -     0 -      ?        00:00:00 cpuhp/0
1 S     0      19       2  0  80   0 -     0 -      ?        00:00:00 cpuhp/1
5 S     0      20       2  0 -40   - -     0 -      ?        00:00:01 watchdog/1
1 S     0      21       2  0 -40   - -     0 -      ?        00:00:00 migration/1

四,实时监听正在运行的进程 top

ps命令可以一次性给出当前系统中进程状态,但使用此方式得到的信息缺乏时效性,并且,如果管理员需要实时监控进程运行情况,就必须不停地执行ps命令,这显然是缺乏效率地。

为此,Linux提供了top命令。top命令可以动态地持续监听进程地运行状态,与此同时,该命令还提供了一个交互界面,用户可以根据需要,人性化地定制自己地输出,进而更清除地了解进程的运行状态。

top -d 秒数: 指定top命令每隔几秒更新。默认是3秒
top -b :使用批处理模式输出。一般和-n选项合用,用于把top命令重定向到文件中
top -n 次数:指定top命令执行的次数。一般和-选项合用
top -p 进程PID:仅查看指定ID的进程
top -s :使top命令在安全模式中运行,避免在交互模式中出现错误
top -u 用户名:只监听某个用户的进程

在top命令的显示窗口中,还可以使用如下按键去,进行一下交互操作:

?或h:显示交互模式的帮助
P:按照CPU的使用频率排序,默认就是此选项
M:按照内存的使用率排序
N:按照PID排序
T:按照CPU的累积运算时间排序,也就是按照TIME+项排序
k:按照PID给予某个进程一个信号,一般用于中止某个进程,信号9是强制中止的信号
r:按照PID给某个进程重设优先级(Nice)值
q: 退出top命令

五,Linux查看进程数 pstree

pstree命令是以树形结构显示程序和进程之间的关系

其优点在于您可以立即找出某进程的父进程:当您想到终止整个进程系列而且其中存在了许许多多的下属分支进程,您只需要终止最上层的进程即可。


(qiime2-amplicon-2024.2) zhengguiliang 21:22:44 ~/yz
$ pstree
systemd─┬─ModemManager───2*[{ModemManager}]├─NetworkManager───2*[{NetworkManager}]├─VGAuthService├─agetty├─atd├─auditd─┬─sedispatch│        └─2*[{auditd}]├─avahi-daemon───avahi-daemon├─crond├─cupsd├─2*[dbus-daemon]├─dbus-kill-proce───gio───2*[{gio}]├─dnsmasq───dnsmasq├─firewalld───2*[{firewalld}]├─gssproxy───5*[{gssproxy}]├─gvfsd───2*[{gvfsd}]├─gvfsd-fuse───5*[{gvfsd-fuse}]├─irqbalance───{irqbalance}├─ksmtuned───sleep├─lsmd├─mysqld───96*[{mysqld}]├─packagekitd───2*[{packagekitd}]├─polkitd───11*[{polkitd}]├─rpcbind├─rserver───3*[{rserver}]├─rsyslogd───2*[{rsyslogd}]├─rtkit-daemon───2*[{rtkit-daemon}]├─smartd├─sshd─┬─sshd───sshd─┬─bash│      │             └─sftp-server│      ├─5*[sshd───sshd───sftp-server]│      └─sshd───sshd───bash───pstree├─systemd─┬─(sd-pam)│         └─dbus-daemon├─2*[systemd─┬─(sd-pam)]│            ├─dbus-daemon]│            └─pulseaudio───{pulseaudio}]├─systemd-journal├─systemd-logind├─systemd-machine├─systemd-udevd├─tuned───3*[{tuned}]└─vmtoolsd───{vmtoolsd}

如果提示pstree:command not found  则说明系统没有安装pstree,安装命令如下

yum install psmisc

需要注意的是,在使用pstree命令时,如果不指定进程的PID号,也不指定用户名称,则会以init进程为跟进程,显示系统中所有程序和进程的信息;反之,若指定PID号或用户名,则将以PID或指定命令为根进程,显示PID或用户对应的所有程序和进程。

六,Linux终止进程 kill

kill命令的执行原理是这样的,kill命令会向操作系统内核发送一个信号(多是终止信号)和目标进程的PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作。

kill [信号] PID

kill命令是按照PID来确定进程的,所以kill命令只能识别PID,而不能识别进程名。Linux定义了几十种不同类型的信号,可以使用kill -l命令查看所有信号及其编号,这里仅列出几个常用的信号:

注意:不要随便使用kill -9来强制结束进程。这会导致数据丢失

 七,Linux将后台命令脱离终端运行 nohup

当我们以远程管理服务器的方式,在远程终端执行后台命令,如果在命令尚未执行完毕时就退出登录,那么这个后台命令还会继续执行吗?

当然不会,此命令的执行会被中断。

使用nohup命令,就是让后台工作在离开操作终端时,也能够正确地在后台执行。

nohup [命令] &

注意:这里的& 表示此命令会在终端后台工作,反之,如果没有&,则表示此命令会在终端前台工作。


http://www.ppmy.cn/devtools/86009.html

相关文章

20240731 每日AI必读资讯

&#x1f4f1;苹果AI版iOS首日火爆&#xff1a;聊天秒变高情商&#xff0c;大模型成最强嘴替&#xff0c;Siri华丽变身 - 苹果的Apple Intelligence终于面世&#xff01;随着iOS 18.1 Beta版的上线&#xff0c;注册开发者从即日起就能体验到苹果AI的部分功能。 - Siri的全面换…

Spring MVC的高级功能——文件上传和下载(三)文件上传和下载

一、案例的功能需求 接下来将文件上传和下载的相关知识结合起来&#xff0c;实现一个文件上传和下载的案例。在实现案例之前&#xff0c;首先分析案例的功能需求。本案例要实现的功能为&#xff0c;将文件上传到项目的文件夹下&#xff0c;文件上传成功后将上传的文件名称记录到…

Godot入门 02玩家1.0版

添加Node2D节点&#xff0c;重命名Game 创建玩家场景&#xff0c;添加CharacterBody2D节点 添加AnimatedSprite2D节点 从精灵表中添加帧 选择文件 设置成8*8 图片边缘模糊改为清晰 设置加载后自动播放&#xff0c;动画循环 。动画速度10FPS&#xff0c;修改动画名称idle。 拖动…

Laravel为什么会成为最优雅的PHP框架?

Laravel 成为最优雅的 PHP 框架的原因可以从多个方面来解释。以下是一些关键因素&#xff1a; 简洁优雅的语法: Laravel 采用了简洁明了的语法&#xff0c;使得代码更容易阅读和编写。它支持现代 PHP 特性&#xff0c;如命名空间、类自动加载、匿名函数&#xff08;闭包&#x…

力扣面试题(一)

1、给你两个字符串 word1 和 word2 。请你从 word1 开始&#xff0c;通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长&#xff0c;就将多出来的字母追加到合并后字符串的末尾。 char * mergeAlternately(char * word1, char * word2){int len1 strlen(word1);i…

C++ //练习 15.28 定义一个存放Quote对象的vector,将Bulk_quote对象传入其中。计算vector中所有元素总的net_price。

C Primer&#xff08;第5版&#xff09; 练习 15.28 练习 15.28 定义一个存放Quote对象的vector&#xff0c;将Bulk_quote对象传入其中。计算vector中所有元素总的net_price。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块&am…

ClkLog:开源用户行为分析框架,让数据分析更轻松

ClkLog&#xff1a;开源用户行为分析框架&#xff0c;让数据分析更轻松 在数据驱动的时代&#xff0c;找到一个好用的用户行为分析工具真是难上加难。但是今天你有福了&#xff0c;开源免费的 ClkLog 就是你的不二选择&#xff01;本文将为你详细介绍 ClkLog 的功能特点、技术架…

Python内存管理:引用计数与垃圾回收

✨ 内容&#xff1a; 在Python中&#xff0c;内存管理是一个重要且常常被忽视的话题。了解Python如何管理内存&#xff0c;不仅能帮助我们编写高效的代码&#xff0c;还能避免潜在的内存泄漏问题。今天&#xff0c;我们将通过一个实际案例&#xff0c;深入探讨Python的内存管理…