周游Linux操作系统——指令实战4

作者:Rhythm_2019

Emial:rhythm_2019@163.com

学习时间:2021.02.08 - 2021.02.10

接着上一篇文章,我们接着来学一下Linux的进程、服务和软件的管理

进程管理

在 LINUX 中,每个执行的程序(代码)都称为一个进程。每一个进程都分配一个 ID 号

每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。例如 www 服务器

每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进 行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行

一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才才结束

ps指令

该指令可以查看当前运行的所有进程状态,一盘带三个参数

  1. a:显示当前终端的所有进程信息
  2. u: 以用户的格式显示进程信息
  3. x:显示进程运行参数
1
ps -aux | more

返回结果如下

其中:

  • USER 打开该进程的用户

  • PID 进程ID

  • %CPU CPU占用率

  • %MEM 内存占用率

  • VSZ 虚拟内存占用大小(单位:KB)

  • RSS 物理内存占用大小(单位:KB)

  • TTY 使用的终端名称

  • STAT 进程状态(其中 S-睡眠, s-表示该进程是会话的先导进程, N-表示进程拥有比普 通优先级更低的优先级, R-正在运行, D-短期等待, Z-僵死进程, T-被跟踪或者被停止等等)

  • START 开始运行时间

  • TIME CPU运行时间

  • COMMAND 运行时命令和参数

当你希望查询所有运行的Java程序的时候可以

1
ps -aux | grep java

还有一个比较常用的参数是ef

-f Display the uid, pid, parent pid, recent CPU usage, process start time, controlling tty, elapsed CPU usage, and the associated command. If the -u option is also used, display the user name rather then the numeric uid. When -o or -O is used to add to the display following -f, the command field is not truncated as severely as it is in other formats.

1
2
3

```shell
ps -ef | more

kill指令

有时候我们需要终止一个进程,使用kill指令最为方便

1
kill 进程ID

他还有一个killall指令,可以一次杀死所有匹配的进程

  • 踢出一个登录用户

    先用ps -aux | grep sshd找到这个用户

    提出一个登录用户.png

    接着把他kill了就好

  • 关闭所有名叫gedit的层序

    1
    killall gedit
  • 强制关闭一个终端

    1
    ps -aux | grep bash

    查看一下bash的PID,Linux认为该进程比较重要,所以一般的kill会被忽略,所以我们要用-9参数

    1
    kill -9 PID

pstree指令

该指令可以快速看到父子进程的关系,大家自行试一下,下面两个参数比较常用

  • p 显示进程ID
  • u 显示用户ID

nohup指令

这个是非常常用的,不过在说这个之前先说一个&符号,单个&可以让指令后台运行。nohup则是关闭终端或者退出某个账号,进程也继续保持运行状态,一般配合&符号一起使用。如nohup command &

所以我运行Java程序的时候命令是这样的

1
nohup java -Xms32M -Xms64M -jar jar包位置 > log.file 2>&1 &

后面这个2>&1需要解释一下

  • 0 表示stdin标准输入
  • 1 表示stdout标准输出
  • 2 表示stderr标准错误

> file 表示将标准输出输出到file中,也就相当于 1>file

2> error 表示将错误输出到error文件中

2>&1 也就表示将错误重定向到标准输出上

2>&1 >file :错误输出到终端,标准输出重定向到文件file,等于 > file 2>&1(标准输出重定向到文件,错误重定向到标准输出)。

服务管理

服务(service) 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求, 比如(mysql , sshd 防火墙等),因此我们又称为守护进程

在 CentOS7.0 后 不再使用 service ,而是 systemctl

查看开启关闭重启

CentOS7以前是service,之后是systemctl

1
2
systemctl [status/start/stop/restart/reload] 服务名 
service 服务名 [status/start/stop/restart/reload]

大家看几个例子就明白了,我现在是CentOS7

  • 查看防火墙状态并关闭

    1
    systemctl firewalld status

    然后可以使用systemctl firewalld stop关闭

大家可以使用Window上的telnet命令测试端口

注意:对服务的关闭或开启时立即生效的,但是重启过后之前关闭的服务还是关闭的,需要手动开启,这样很麻烦,所以我们要使用下一个指令

列出所有服务

我们可以直接在setup里面查看,也可以从文件中体现(一切皆是文件)

CentOS7之前所有服务放在/etc/init.d/下,CentOS7之后就是/usr/lib/systemd/system里面了,所以我执行下面指令就可以看到所有的服务了

1
ls -l /usr/lib/systemd/system

chkconfig指令

在说这个之前我们先复习一下运行级别

  • 运行级别 0:系统停机状态,系统默认运行级别不能设为 0,否则不能正常启动
  • 运行级别 1:单用户工作状态, root 权限,用于系统维护,禁止远程登陆
  • 运行级别 2:多用户状态(没有 NFS),不支持网络
  • 运行级别 3:完全的多用户状态(有 NFS),登陆后进入控制台命令行模式
  • 运行级别 4:系统未使用,保留
  • 运行级别 5: X11 控制台,登陆后进入图形 GUI 模式
  • 运行级别 6:系统正常关闭并重启,默认运行级别不能设为 6,否则不能正常启动

这个还记得吧,其实我们的服务在每一个级别都可以被设置成自启动和关闭,我们可以使用chkconfig来设置

Linux开机顺序.png

我们先介绍一下--list,它可以展示所有的服务情况

1
chkconfig --list

和老师的有点差别,CentOS7不会显示系统服务了,我们先说一下怎么修改非系统服务的启动策略

1
chkconfig --level 5 sshd on|off

systemctl指令

如果是CentOS7则只等在当前的运行级别设置

1
2
systemctl enable httpd.service
systemctl disable httpd.service

如果你希望添加一个自定义的服务,你需要编写一定格式的文件,放在/usr/lib/systemd/system/下面,然后

1
systemctl daemon-reload

使用下面指令控制

1
systemctl start|stop|reload|restart service

控制

所以还是有点区别的,chkconfig 和 systemctl 区别大家可以参考下面表格

任务 旧指令 新指令
使某服务自动启动 chkconfig –level 3 httpd on systemctl enable httpd.service
使某服务不自动启动 chkconfig –level 3 httpd off systemctl disable httpd.service
检查服务状态 service httpd status systemctl status httpd.service(服务详细信息) / systemctl is-active httpd.service (仅显示是否 Active)
加入自定义服务 chkconfig –add test systemctl load test.service
删除服务 chkconfig –del xxx 停掉应用,删除相应的配置文件
显示所有已启动的服务 chkconfig –list systemctl list-units –type=service
启动某服务 service httpd start systemctl start httpd.service
停止某服务 service httpd stop systemctl stop httpd.service
重启某服务 service httpd restart systemctl restart httpd.service
杀死服务 systemctl kill httpd.service

来源:https://www.cnblogs.com/loveer/p/11619833.html

chkconfig 重新设置服务后自启动或关闭,需要重启机器 reboot 才能生效.

动态监听进程

这里主要介绍topntstmt指令

top指令

top 与 ps 命令很相似。它们都用来显示正在执行的进程。 top 与 ps 最大的不同之处,在于 top 在 执行一段时间可以更新正在运行的的进程。有点像我们window的任务管理其

先说一下指令的三个重要参数

  1. p 指定PID
  2. d 指定更新秒数
  3. i 忽略僵死进程

还有几个交互选项

  1. P CPU占用顺序排序(大到小)
  2. M 内存占用顺序排序
  3. N PID排序
  4. q 离开
  5. k 终止指定PID

好了大家可以自行体验一下

top指令.png

netstat指令

这个指令非常常用,可以款看自己的MySQL的端口是否已经对外开放

1
netstat -tunap

该指令有几个比较重要的参数

  • p 显示进程
  • n 直接使用IP地址,而不通过域名服务器
  • a 显示所有在线的Socket
  • u 显示UDP
  • t 显示TCP

一般这几个用的比较多

软件管理

我们的操作系统难免需要安装一些小软件,这里介绍一下rpmyum指令

rpm指令

先介绍一下怎么参看当前操作系统是否有安装过某个软件,这里以firefox为例

1
rpm --qa | grep firefox

你可以查到

rpm-qa.png

其中

1
firefox-60.8.0-1.el7.centos.x86_64

firefox是软件名称,60.8.0-1.el7是版本,centos.x86_64是值适用于64位操作系统,如果是 i686、 i386 表示 32 位系统, noarch 表示通用

我们可以使用下面指令擦寻到更加详细的信息

1
rpm -qi firefox

rpm还有下面几个用法

  • rpm -ql 软件 查询该安装包产生的所有文件
  • rpm -qf 查看该文件属于哪个软件

安装rpm包

使用指令

1
rpm -ivh 软件包

就可以安装软件啦,其中i是安装、v是展示、h是显示进度条

比如我们要重新装回Firefox,我们需要先加载一下光驱。加载后光驱就会被挂载到/run/media/(CentOS7)下面,然后我们找到Packages文件夹,ls | grep firefox款看有没有安装包,发现有,cp/opt下面

1
rpm -ivh firefox

就可以了

安装VMware Tools

该工具可以方便我们在母机和子机之间的文件共享和复制粘贴的工具,我们需要

  1. 添加一个光驱驱动器
  2. 点击【安装VMware Tools】,桌面多出一个图标,内容被挂载到了/run/media/VMware Tools中,我们使用cp -r拷贝出来,然后tar -xzvf解压,执行里面的vmware-install.pl就可以了

卸载rpm包

我们以firefox为例,卸载它只需要

1
rpm -e firefox

如果软件包存在依赖可以加上--nodeps参数,执行过后确实Firefox确实没了

yum指令

该指令也可以快速安装某个软件,它最大好处就是可以自动联网下载,且回帮你安装所有依赖,跟```maven``差不多

我们先配置一下国内的源,这样下载速度会快很多,具体的可以参考这篇文章:https://blog.csdn.net/xiaojin21cen/article/details/84726193

这里就直接用阿里的源啦,备份一下etc/yum.repos.d/CentOS-Base.repo先,然后

1
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

最后

1
2
yum clean all #删除所有包
yum makecache #产生缓存

安装软件

1
yum install gcc

就可以了,y是交互时默认选择yes哈

删除软件

1
yum remove tomcat

就可以了

查看是否存在该软件

1
yum list | grep gcc

即可


今天主要讲了进程、服务和软件的管理,这些在我们搭建环境、部署项目的时候都是非常实用的,希望本文能给大家带来帮助