云盘算必学之进程管理

打印 上一主题 下一主题

主题 916|帖子 916|积分 2748

一、权限扩展

   文件权限管理之: 隐蔽权限防止root误删除
  文件属性添加与查看

  1. [root@linux-server ~]# touch file1 file2 file3
  2. 1.查看文件属性
  3. [root@linux-server ~]# lsattr file1 file2 file3
  4. ---------------- file1
  5. ---------------- file2
  6. ---------------- file3
  7. 2.设置权限
  8. [root@linux-server ~]# chattr +a file1  #不允许修改,只允许追加
  9. [root@linux-server ~]# chattr +i file2  #不允许做任何操作
  10. [root@linux-server ~]# chattr +A file3
  11. [root@linux-server ~]# lsattr file1 file2 file3
  12. -----a---------- file1
  13. ----i----------- file2
  14. -------A-------- file3
  15. i:即Immutable,系统不允许对这个文件进行任何的修改
  16. a:即Append Only,系统只允许在这个文件之后追加数据,不允许任何覆盖这个文件
  17. A:即Atime,告诉系统不要修改对这个文件的最后访问时间
复制代码
测试效果

  1. [root@linux-server ~]# echo 111 > file1  #覆盖,只允许追加
  2. -bash: file1: Operation not permitted
  3. [root@linux-server ~]# rm -rf file1     #不能删除
  4. rm: cannot remove ‘file1’: Operation not permitted
  5. [root@linux-server ~]# echo 111 >> file1 #追加
  6. [root@linux-server ~]# echo 111 > file2
  7. -bash: file2: Permission denied
  8. [root@linux-server ~]# echo 111 >> file2
  9. -bash: file2: Permission denied
  10. [root@linux-server ~]# rm -rf file2
  11. rm: cannot remove ‘file2’: Operation not permitted
  12. [root@linux-server ~]# mv file2 file4
  13. mv: cannot move ‘file2’ to ‘file4’: Operation not permitted
  14. 取消权限
  15. [root@linux-server ~]# chattr -a file1
  16. [root@linux-server ~]# chattr -i file2
复制代码
二、进程管理


关于进程 process
  1. What is a process?  什么是进程
  2. Process states  进程状态
复制代码
什么是进程?

  1. 进程是已启动的可执行程序的运行实例,是程序运行的过程,动态的,有生命周期及运行状态。
复制代码
  1. 程序: 二进制文件,静态 /bin/date, /usr/sbin/httpd,/usr/sbin/sshd, /usr/sbin/nginx
复制代码
查看进程 process

静态查看进程
  1. [root@linux-server ~]# ps aux | less (这个less是翻页的意思)
  2. 参数解释:
  3. ps :process nsapashot
  4. a 只能查看系统里面运行的所有终端进程
  5. u 显示进程拥有者
  6. x 显示系统内所有进程
  7. f 显示进程之间的父子关系
  8. -------------------
复制代码
如图所示:

  1. [root@linux-server ~]# ps aux
  2. USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
  3. ============================================================================
  4. USER:         #运行进程的用户
  5. PID:   #进程ID
  6. %CPU:   #CPU占用率
  7. %MEM:   #内存占用率
  8. VSZ            进程占用的虚拟内存大小
  9. RSS     占用的物理内存大小
  10. STAT:  #进程状态  ---了解
  11. ?    表示没有占用终端
  12. R         运行
  13. S         可中断睡眠 Sleep
  14. D        不可中断睡眠
  15. T         停止的进程
  16. Z         僵尸进程
  17. X    死掉的进程
  18. START:        #进程的启动时间
  19. TIME:        #进程占用CPU的总时间
  20. COMMAND: #进程文件,进程名
  21. 进程状态--了解
  22. Sl        以线程的方式运行
  23. Ss  s进程的领导者,父进程
  24. R+        +表示是前台的进程组
  25. S< <优先级较高的进程        
  26. SN  N优先级较低的进程
复制代码
  1. 查看tty的方法:
  2. [root@linux-server ~]# tty
  3. ? 表示这个进程开启的时候没有占用终端,使用的是系统
复制代码
查看进程(二)
  1. [root@linux-server ~]# ps -ef
  2. 参数解释:
  3. -e 显示所有进程
  4. -l 长格式显示
  5. -f 完整格式
复制代码

  1. UID       用户ID
  2. PID       进程ID
  3. PPID      父进程ID
  4. C         CPU占用率
  5. STIME     开始时间
  6. TTY       开始此进程的TTY----终端设备
  7. TIME      此进程运行的总时间
  8. CMD       命令名
复制代码
查看单个PID
  1. [root@linux-server ~]# yum install -y httpd  #安装apache软件
  2. [root@linux-server ~]# systemctl start httpd #启动
  3. [root@linux-server ~]# cat /var/run/httpd/httpd.pid
  4. 1043
复制代码
查看指定PID
  1. [root@linux-server ~]# ps aux | grep sshd
  2. root       1043  0.0  0.2 105996  4120 ?        Ss   01:32   0:00 /usr/sbin/sshd -D
  3. grep:过滤
复制代码
查看端口
  1. [root@linux-server ~]# yum install lsof  #安装软件包
  2. [root@linux-server ~]# lsof -i:80   #端口号,这能查看带端口的进程
  3. COMMAND   PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
  4. httpd   64249   root    4u  IPv6 1373628      0t0  TCP *:http (LISTEN)
  5. #注意:端口号只有整数,范围是从0 到65535
  6. 参数解释:
  7. FD:文件描述符,应用程序通过文件描述符识别该文件。
  8. DEVICE:指定磁盘的名称
  9. SIZE:文件的大小
复制代码
  1. #查网络进程和正在监听的端口
  2. [root@linux-server ~]# netstat -lntp 或者 ss -lntp
  3. 参数详解:
  4. -a  显示全部的进程
  5. -u  显示udp
  6. -n  以数字的新式显示协议名称
  7. -t   tcp
  8. -p:显示进程的名称和pid
  9. -l :只显示正在被监听的端口
  10. 参数解释:
  11. recv-Q:网络接收队列
  12. send-Q:网路发送队列
  13. Foreign Address:与本机端口通信的外部请求
复制代码
  1. [root@linux-server ~]# w  #看已经登陆到终端的进程信息,远程登陆会有ip 地址
  2. w是详细的登陆信息
  3. who是精简的登陆信息
  4. woami 是我当前使用的哪个用户登陆。
  5. 部分参数解释:
  6. USER –登录用户名.
  7. TTY –登录用户使用的终端名.
  8. FROM –登录用户来源的主机名或IP地址.
  9. LOGIN@ –用户登录时间.
  10. WHAT –用户当前的进程及选项/参数。
  11. 如果有人远程链接了你的终端,使用w查看后,输入:ps aux | grep gts/ 通过查找gts/ ,找到连接人的pid,而后输入kill-9 pid 将其踢出去。
复制代码
动态查看进程

top、htop
  1. [root@linux-server ~]# top  #动态显示信息,三秒刷新一次。
复制代码

  1. 在工作中必须监控的东西 load average(平均负载)等待cpu处理的队列长度 也是个数。
  2. 1分钟   第一个数字
  3. 5分钟   第二个数字
  4. 15分钟  第三个数字
  5. ======================
  6. 计算cpu负载:load average的三个值: 0.10, 0.16, 0.12,分别除cpu的个数,得出的值,如果值大于1那么那时候的负载高。
复制代码
top操纵
  1. [root@linux-server ~]# top
  2. h|? 帮助
  3. > 往下翻页
  4. < 往上翻页
  5. M 按内存排序
  6. P 按cpu排序
  7. q 退出   
  8. z 彩色显示
  9. W 保存
  10. =============================
  11. PR   优先级
  12. VIRT 进程使用的虚拟内存总量,单位kb。
  13. RES  进程使用的、未被换出的物理内存大小,单位kb。
  14. SHR  共享内存大小,单位kb
  15. 拓展知识:lscpu 可以查看cpu信息。
复制代码

top - 16:26:45 up 14:54, 3 users,load average: 0.05, 0.06, 0.05
Tasks: 129 total, 2 running, 127 sleeping, 0 stopped, 0 zombie
内容含义16:26:45表现当前时间up 14:54体系远行时间,格式为时:分3 users当前登岸用户数load average: 0.05, 0.06, 0.05体系负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值129 total进程总数2 running正在运行的进程数127 sleeping就寝的进程数0 stopped停止的进程数0 zombie僵尸进程数 %Cpu (s) : 0.2 us, 1.0 sy, 0.0 ni, 98.8 id,0.0 wa, 0.0 hi, 0.0 si, 0.0 st
内容含义0.2 us用户空间占用CPU百分比1.0 sy内核空间占用CPU百分比0.0 ni用户进程空间内改变过优先级的进程占用CPU百分比98.9 id空闲CPU百分比0.0 wa等候输入输出的CPU时间百分比0.0 hi硬停止(Hardware IRQ)占用CPU的百分比0.0 si软停止(Software Interrupts)占用CPU的百分比0.0 st用于有虚拟cpu的情况,用来指示被虚拟机偷掉的cpu时间 KiB Mem : 2031912 total, 1549816 free, 155372 free, 326724 buff/cache
内容含义2031912 total物理内存总量1549816 free使用的物理内存总量155372 used空闲内存总量326724 buff/cache用作内核缓存的内存量 KiB Swap: 2097148 total, 2097148 free, 0 used, 1674648 avail Mem
内容含义2097148 total交换区总量2097148 free使用的交换区总量0 used空闲交换区总量1674648 Avail Mem缓冲的交换区总量
  1. ni: nice值
  2. id: cpu空闲率
  3. wa: cpu等待,等待输入/输出的进程占用的 CPU 百分比。如果使用率过高,表示硬盘该换了
复制代码
进程优先级 nice

  1. nice 值越高:表示优先级越低,例如+19,该进程容易将CPU 使用量让给其他进程。
  2. nice 值越低:表示优先级越高,例如-20,该进程更不倾向于让出CPU。
  3. 指令:
  4. renice <优先级> -p <PID> # 一般不调整
复制代码
进程控制

按pid杀死进程
  1. kill,pkill
  2. 语法: kill 信号 PID   #信号也是进程间通信的一种方式  
  3. pkill是批量杀死 相当于批量杀死所有输入的有关信息  例如 pkill -9 nginx 那么系统会杀死所有有关nginx的所有东西 ,所有每次需要使用批量删除时,可以先 ps aux | grep nginx 先看看有没有不需要删除的进程,再用pkill进行删除:而kill就是精准删除。
复制代码
  1. [root@linux-server ~]# kill -l   #查看所有信号
  2. -1   HUP  重新加载进程或者重新加载配置文件,PID不变
  3. -9   KILL 强制杀死
  4. -15  TERM 正常杀死(这个信号可以默认不写)
  5. -18  CONT 激活进程
  6. -19  STOP 挂起进程
复制代码
使用pkill时为防止误删其他进程可以加上一些其他指令
  1. 方法一: 要杀死httpd进程时,先输入 pidof httpd 而后 kill -9 `pidof httpd`
  2. 方法二: 要杀死nginx进程时,先输入 pgrep nginx 而后 kill -9 `pgrep nginx`
复制代码
如下图所示


案例一
给vsftpd进程发送信号1,15 vsftpd信号测试
  1. [root@linux-server ~]# yum install -y vsftpd  #安装vsftpd
  2. [root@linux-server ~]# systemctl start vsftpd  #启动
  3. [root@linux-server ~]# ps aux | grep vsftpd
  4. root      59363  0.0  0.0  53212   576 ?        Ss   16:47   0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
  5. [root@linux-server ~]# kill -1 59363  #发送重启信号,例如vsftpd的配置文件发生改变,希望重新加载
复制代码
  1. [root@linux-server ~]# ps aux | grep vsftpd
  2. root      59363  0.0  0.0  53212   748 ?        Ss   16:47   0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
  3. [root@linux-server ~]# kill 59363 #正常杀死进程,信号为-15可以默认不写。我们可以使用systemctl stop vsftpd 停止服务。
  4. [root@linux-server ~]# ps aux | grep vsftpd
  5. root      62493  0.0  0.0 112660   968 pts/0    S+   16:51   0:00 grep --color=auto vsftpd
  6. 进程状态解释--了解:
  7. +:表示运行在前台的进程
  8. S+:休眠状态
  9. T+:暂停,挂起状态
  10. s:父进程
复制代码
案例二
给vsftpd进程发送信号-9, vsftpd信号测试
  1. [root@linux-server ~]# systemctl start vsftpd
  2. [root@linux-server ~]# ps aux | grep vsftpd
  3. root      67003  0.0  0.0  53212   572 ?        Ss   16:57   0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
  4. root      67089  0.0  0.0 112660   972 pts/0    S+   16:57   0:00 grep --color=auto vsftpd
  5. [root@linux-server ~]# kill -9 67003  #强制杀死,一般用于不能正常停止的情况下
  6. [root@linux-server ~]# ps aux | grep vsftpd
  7. root      67190  0.0  0.0 112660   972 pts/0    S+   16:57   0:00 grep --color=auto vsftpd
复制代码
案例三
使用pkill 杀死vsftpd进程
  1. [root@linux-server ~]# systemctl start vsftpd
  2. [root@linux-server ~]# ps -aux | grep vsftpd
  3. root      73399  0.0  0.0  53212   572 ?        Ss   17:05   0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
  4. root      73499  0.0  0.0 112660   968 pts/0    S+   17:05   0:00 grep --color=auto vsftpd
  5. [root@linux-server ~]# pkill -9 vsftpd  #使用pkill可以指定进程名字
  6. [root@linux-server ~]# ps -aux | grep vsftpd
  7. root      73643  0.0  0.0 112660   968 pts/0    S+   17:05   0:00 grep --color=auto vsftpd
复制代码
作业控制

作业控制之jobs:
  1. 作业控制指的是控制正在运行的进程的行为。比如,用户可以挂起一个进程或者放到后台去运行,等一会儿再继续执行该进程。
复制代码
实战案例
  1. [root@linux-server~]# sleep 7000 &   #&:让命令或者程序后台运行
  2. [1] 5441      [1]是进程的号  5441是进程的pid
  3. [root@linux-server ~]# sleep 8000    #ctrl+z 把程序放到后台(这方法会让程序在后台暂停)
  4. ^Z
  5. [2]+  Stopped                 sleep 8000
  6. [root@linux-server ~]# jobs  #查看后台的工作号
  7. [1]-  Running                 sleep 7000 &
  8. [2]+  Stopped                 sleep 8000
  9. [root@linux-server ~]# bg %2  #让暂停的程序在后台运行,%是用来修饰job number,2就是job number。(程序的工作号)
  10. [2]+ sleep 8000 &
  11. [root@linux-server ~]# jobs
  12. [1]-  Running                 sleep 7000 &
  13. [2]+  Running                 sleep 8000 &
  14. [root@linux-server ~]# fg %1  #将后台的程序调到前台
  15. sleep 7000
  16. [root@linux-server ~]# jobs
  17. [2]+  Running                 sleep 8000 &
  18. [root@linux-server ~]# kill -9 %2  #通过kill杀死进程
  19. [root@linux-server ~]# jobs
  20. [2]+  Killed                  sleep 8000
  21. [root@linux-server ~]# jobs #在次查看没有了
复制代码
三、常用下令


  • 查看当前CPU负载
  1. [root@linux-server ~]# uptime
  2. 17:35:01 up 16:02,  3 users,  load average: 0.00, 0.02, 0.05
复制代码

  • 查看内存使用
  1. [root@linux-server ~]# free -m
  2.               total        used        free      shared  buff/cache   available
  3. Mem:           1984         154        1508           8         321        1632
  4. Swap:          2047           0        2047
  5. -m:单位M
  6. free -g 以g为单位 ;free -k 以k为单位free -h 人性化显示 -h比较好用
复制代码
拓展知识:echo 3 > /proc/sys/vm/drop_caches 这个指令可以清理缓存的内存,但是没啥用,如果负载过高一下就会返来。

  • linux启动过程
  1. 1. 加电
  2. 2. 加载bios设置
  3. 3. 加载grub,
  4. 4. 加载内核系统到内存当中
  5. 5. 加载配置文件
  6. 6. 加载内核模块
  7. 7. 完成相应的初始化工作和启动相应的服务
  8. 8. 启动系统进程
  9. 9. 出现登录界面
  10. 10. 开机启动完成
复制代码

  • 查看体系的版本和内核
  1. [root@linux-server ~]# cat /etc/redhat-release  #查看版本
  2. CentOS Linux release 7.4.1708 (Core)
  3. [root@linux-server ~]# uname -a #看查正在运行的内核版本
  4. Linux linux-server 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
  5. [root@linux-server ~]# uname -r  #查看内核版本
  6. 3.10.0-693.el7.x86_64
复制代码

  • 修改主机名
  1. [root@linux-server ~]# hostnamectl set-hostname  xxxx   #主机名,修改完之后断开与终端连接,然后在重新连接即可。
  2. 查看主机名
  3. [root@linux-server ~]# hostname
复制代码

  • 跳板机(堡垒机)的作用
  1. 1 身份验证
  2. 2 屏幕录制,防止员工对服务器做有害的操作
  3. 3 批量操作 一次性操作2-200台机器
复制代码

  • 安装过操纵体系吗?怎么安装?
  1. 1.小批量设备,使用U盘安装
  2. (调整bios参数从U盘启动)
  3. 2.大批量设备搭建PXE装机系统,从网络批量安装
  4. (调整网络启动项,从网络启动)
复制代码

  • 上传下载
  1. # yum install -y lrzsz
  2. 上传
  3. # rz
  4. 下载
  5. # sz 文件
复制代码
[code][/code]
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

反转基因福娃

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表