周游Linux操作系统——指令实战4
作者:Rhythm_2019
Emial:rhythm_2019@163.com
学习时间:2021.02.08 - 2021.02.10
接着上一篇文章,我们接着来学一下Linux的进程、服务和软件的管理
进程管理
在 LINUX 中,每个执行的程序(代码)都称为一个进程。每一个进程都分配一个 ID 号
每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。例如 www 服务器
每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进 行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行
一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才才结束
ps
指令
该指令可以查看当前运行的所有进程状态,一盘带三个参数
a
:显示当前终端的所有进程信息u
: 以用户的格式显示进程信息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 |
还有一个比较常用的参数是e
和f
-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 |
|
kill
指令
有时候我们需要终止一个进程,使用kill
指令最为方便
1 | kill 进程ID |
他还有一个killall
指令,可以一次杀死所有匹配的进程
踢出一个登录用户
先用
ps -aux | grep sshd
找到这个用户接着把他
kill
了就好关闭所有名叫
gedit
的层序1
killall gedit
强制关闭一个终端
1
ps -aux | grep bash
查看一下bash的PID,Linux认为该进程比较重要,所以一般的
kill
会被忽略,所以我们要用-9
参数1
kill -9 PID
pstree
指令
该指令可以快速看到父子进程的关系,大家自行试一下,下面两个参数比较常用
p
显示进程IDu
显示用户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 | systemctl [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
来设置
我们先介绍一下--list
,它可以展示所有的服务情况
1 | chkconfig --list |
和老师的有点差别,CentOS7
不会显示系统服务了,我们先说一下怎么修改非系统服务的启动策略
1 | chkconfig --level 5 sshd on|off |
systemctl
指令
如果是CentOS7
则只等在当前的运行级别设置
1 | systemctl enable 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 才能生效.
动态监听进程
这里主要介绍top
和ntstmt
指令
top
指令
top 与 ps 命令很相似。它们都用来显示正在执行的进程。 top 与 ps 最大的不同之处,在于 top 在 执行一段时间可以更新正在运行的的进程。有点像我们window的任务管理其
先说一下指令的三个重要参数
- p 指定PID
- d 指定更新秒数
- i 忽略僵死进程
还有几个交互选项
- P CPU占用顺序排序(大到小)
- M 内存占用顺序排序
- N PID排序
- q 离开
- k 终止指定PID
好了大家可以自行体验一下
netstat
指令
这个指令非常常用,可以款看自己的MySQL的端口是否已经对外开放
1 | netstat -tunap |
该指令有几个比较重要的参数
- p 显示进程
- n 直接使用IP地址,而不通过域名服务器
- a 显示所有在线的Socket
- u 显示UDP
- t 显示TCP
一般这几个用的比较多
软件管理
我们的操作系统难免需要安装一些小软件,这里介绍一下rpm
和yum
指令
rpm
指令
先介绍一下怎么参看当前操作系统是否有安装过某个软件,这里以firefox为例
1 | rpm --qa | grep firefox |
你可以查到
其中
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
该工具可以方便我们在母机和子机之间的文件共享和复制粘贴的工具,我们需要
- 添加一个光驱驱动器
- 点击【安装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 | yum clean all #删除所有包 |
安装软件
1 | yum install gcc |
就可以了,y
是交互时默认选择yes哈
删除软件
1 | yum remove tomcat |
就可以了
查看是否存在该软件
1 | yum list | grep gcc |
即可
今天主要讲了进程、服务和软件的管理,这些在我们搭建环境、部署项目的时候都是非常实用的,希望本文能给大家带来帮助