8.1Linux里如何查看一个进程的状态?

可以使用ps-aux | grep PID或者ps -aux | grep (进程名),来查看进程的状态。
image.png
【列字段介绍】:
User:进程的用户;
PID:进程的ID;
%CPU:进程占用的CPU百分比;
%MEM:进程占用的内存百分比;
VSZ:进程占用的虚拟内存量;
RSS:进程占用的固定内存量;
TTY:进程在哪个终端上运行,如果与终端无关,则显示(?)。
STAT:进程当前的状态
TIME:进程实际使用CPU运行的时间;
COMMAND:命令的名称和参数;
【STAT状态位介绍】:
D:无法中断的休眠状态(通常IO的进程);
R:正在运行或就绪队列中的进程;
S:处于休眠状态的进程;
W:进入内存交换的进程;
Z:僵尸进程;
<:优先级较高的进程;
N:优先级较低的进程;

8.2Linux里如何查看带有关键字的日志文件?

(1)cat 路径/文件名 | grep 关键字
image.png
(2)grep -i 关键字 路径/文件名
image.png

8.3说说你对grep命令的了解?

grep命令,是强大的文本搜索命令,grep(Global Regular Expression Print)全局正则表达式搜索。
grep的工作方式是,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看做是文件名。搜索的结果被送到标准输出,不影响源文件内容。
image.png
image.png

8.4Linu修改主机名的命令是什么?

(1)如果只需要临时修改主机名,可以使用hostname命令;
image.png
(2)如果想永久改变主机名,可以使用hostnamectl命令
image.png

8.5Linux开机自动执行命令如何实现?

(1)使用cron任务:
crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程。
image.png
(2)修改/etc/rc.d/rc.local文件方式
/etc/rc.d/rc.local用于用户自定义开机启动程序,可以往里面写需要执行的命令或脚本;
image.png

8.6Linux中查看内存的命令是什么?

(1)free命令
free指令会显示内存的使用情况,包括实体内存、虚拟的交换文件内存、共享内存区段,以及系统核心使用的缓冲区等;
image.png
image.png
total:表示总计物理内存的大小;
used:表示已使用了多少物理内存;
free:表示还可用多少内存;
Shared:表示多个进程共享的内存总额;
Buffer/Cached:表示磁盘缓存的大小;
(2)top指令
top指令可以用于查看当前系统正在执行的进程的内存使用情况,这个指令类似于Windows系统的任务管理器工具。它对于进程运行的进程提供不断更新的概览信息,主要包括系统负载、CPU使用情况、内存使用内存情况。
image.png
第二行:total当期系统中有多少进程,多少处于running状态的进程,多少处于sleeping状态的进程,多少处于stopped状态的进程,多少是僵尸进程;
第三行:输出cpu状态信息。 0.2%us:用户空间占用CPU的百分比;0.2%sy:内核空间占用CPU的百分比;99.5%id:空闲CPU百分比;0.0%hi:硬中断占用CPU的百分比;0.0%si:软中断占用CPU百分比;
第四行:输出内存信息。total表示物理内存总量,used表示使用中的内存总量,free表示空闲内存总量,cached:表示缓存的总量。
第五行:输出swap交换分区信息。total表示交换分区总量,used表示使用的交换分区总量,free表示空闲交换分区总量,cached表示缓冲的交换分区总量。

8.7Linux中压缩文件的命令是什么?

(1)tar命令
image.png
(2)zip命令
image.png

8.8Linux中查询连接数的命令是什么?

(1)netstat指令
image.png
【Active Internet connections】有源TPC连接
【Active Unix domain sockets】有源Unix域套接口(和网络套接字一样,但只能用于本机通信)

  1. Proto:显示连接使用的协议(TCP);
  2. Recv-Q:接收队列,Send-Q:发送队列
  3. Local Address:TCP连接的本地地址;
  4. Foreign Address:TCP连接的另一端地址;
  5. State:当前连接的状态;

    8.9Linux中,如何通过端口查进程,如何通过进程查端口?

    1.Linux下通过进程查端口
    (1)先查看进程pid;
    image.png
    (2)通过pid查看占用端口
    image.png
    2.通过端口查进程
    image.png

    8.10说说ping命令?

    Linux中ping命令用于检测主机。执行ping指令会使用ICMP传输协议,发出要求回应的信息,如果远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运行正常。ping+远端主机的ip地址。
    常见的异常报错信息有1.Request timed out(请求超时) 2.Destination host Unreachable(目标主机不可达)
    (1)请求超时的原因:
    1.对方已关机,或者网络上没有这个地址;
    2.对方主机存在,但与自己不在一个网段内,通过路由无法找到对方;
    3.对方主机存在,但设置了防火墙拦截ping请求;
    (2)目标主机不可达的原因:
    1.对方与自己不在一个网断内,自己又未设置默认路由;
    2.网线故障;
    3.网卡故障

    8.11说说什么是协程?

    协程:协程就是微线程,是比线程更轻量级的存在,它就是一个可以在某个地方挂起的特殊函数,并且可以重新在挂起处继续运行。协程与进程、线程相比不是维度概念。
    一个进程可以包含多个线程,一个线程也可以包含多个协程。但原则是,一个线程内的多个协程的运行是串行的的。如果是多核CPU的话,多个进程或一个进程内的多个线程是可以并行运行的,但是一个线程内的多个协程是只能串行运行的,无论有多少个CPU核。当一个线程中的协程运行时,其他协程必须挂起。
    image.png
    image.png
    【协程的使用场景】
    一个线程内的多个协程是串行执行的,不能利用多核的优势。所以不太适合用于CPU密集型的场景,但协程适合用于IO密集型的场景。因为IO本身就是阻塞型的。假设有个这样的场景:
    一个线程内有5个IO事件需要处理,如果我们在一个线程内开启5个IO函数处理事件,当其中一个IO阻塞时,其他4个IO也不能得到执行,5个IO必须排队等待处理。
    image.png
    而协程处理这种场景是非常方便的,当一个协程阻塞时,可以切换到其他没有阻塞的协程上去执行,这样能得到比较高的效率。
    【协议与线程的对比:】
    (1)协程执行效率极高:协议直接操作栈基本没有内核切换的开销,所以上下文的切换非常快,并且切换的开销比线程更小;
    (2)一个线程内的多个线程是串行化执行的,操作共享变量时不需要加锁,效率比线程高;
    (3)协程的占用内存更少:执行协议只需要极少的栈内存(大概是4-5KB),而线程栈的大小大约为1MB。

    8.12说说什么是僵尸进程?什么是孤儿进程?

    在Linux系统中,子进程是通过父进程创建的。子进程的结束与父进程的运行是一个异步过程,父进程永远无法预测子进程到底什么时候结束,当一个进程完成它的工作终止之后,它的父进程需要调用wait()或waitpad()系统调用取得子进程的终止状态;
    (1)僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有到调用wait()或者waitpad()获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中,占用系统资源。
    (2)孤儿进程:一个父进程退出后,它的一个或多个子进程还在进行,那么那些子进程将成为孤儿进程。孤儿进程将被init(PID=1)的进程收养,并由init进程对它们完成状态收集工作。

    8.13如何杀死一个进程?

    【kill -15】
    kill命令默认的信号就是kill -15,优雅地退出一个进程。当使用kill -15,系统会发送一个SigTerm的信号给对应的程序。当程序收到该信号后具体要如何处理自己是可以解决的,比如1.立刻停止程序 2.释放系统资源后停止程序 3.忽略该信号,继续执行程序。因为kill -15信号指示通知对应的进程要进行”安全、干净的退出”,程序收到信号后,退出前一般会做一些准备工作,比如资源释放、清理临时文件等等,如果准备工作做完了,再进行程序的终止。但是,如果在准备工作进行的过程中,遇到了阻塞或者其他问题导致无法成功,那么应用进程是可以忽略这个信号的。这也是我们为什么无法用kill命令杀死进程的原因。
    【kill -9】
    kill -9的命令比kill -15就强硬得多了,系统会发出sigKill的信号,接收到该信号的进程应该立刻结束运行,不能被阻塞或忽略。kill -9在执行时,应用进程是没有时间进行准备工作的,所以这通常会带来一些副作用,比如数据丢失或者终端无法恢复到正常状态。
    另外Kill命令是需要按照PID来确定进程的,Kill命令只能识别PID,不能识别进程名。杀死父进程后,子进程会成为孤儿进程,而init进程将重新成为它的父进程。如果kill命令后携带的是一个负数,表示终止整个进程组。

    8.14说说Linux中软连接和硬链接的区别?

    inode是文件系统中存储文件元信息的区域,又叫节点索引,每个节点索引包含了文件的创建者、大小、日期等等。
    (1)软连接:软连接其实就相当于建立了一个新的快捷方式,该文件有自己的名称和inode以及物理存储的文件数据,文件数据里记录着如何跳转的设置数据,访问该快捷文件会被重新定向到原始文件,删除原始文件的话,软连接也会失效。
    (2)硬链接:硬链接相当于是为当前文件名对应的文件再建立了一个新的文件别名,别名对应的inode以及物理数据都是一样的,一旦建立,我们甚至根本无法区分谁是原始文件,删除其中一个文件,文件并不会丢失。
    image.png
    硬链接和file都指向同一个inode,inode对应了一个实际物理存储的文件。软连接对应一个新的inode,新的inode对应一个新的物理存储文件,物理存储文件又指向一个目标文件file。