Linux进程管理、Linux管道和重定向

进程管理的命令

kill 
killall 
pkill

语法格式:kill +信号  pid

[root@xingdian ~]# kill -I//列出所有支持的信号编号信号名
-1 HUP重新加载进程或者重新加载配置文件(修改配置文件用,为了让修改的配置文件生效,pid不变)
-9 KILL强制杀死
-15 TERM正常杀死(这个信号可以默认不写)
-18 CONT激活进程
-19 STOP挂起进程

[root@xingdian~]# kill -HUP pid[root@xingdian ~]# kill -STOP pid

修改配置文件后systemctl  restart  sshd 重启sshd服务,pid会发生变化
(pid的作用是用来唯一标识一个进程,如果说这个进程关闭又重启,我们系统不会保留辽个原有的pid,会生成一个新的pid给我们的服务使用)

ps aux | grep httpd 
如果没有开启服务需要开启才能显示进程

ps aux | grep httpd -v "grep"  把grep行去掉


pkill :

kill -9 +进程pid 干掉一个进程
pkill -9 +进程的名字  干掉与之相关的所有内容

pkill -u xingdian 干掉这个用户的进程

如果没有killall的命令:
[root@xingdian-server-11 /]# yum -y install psmisc

killall:

[root@xingdian ~]# killall 信号 进程名称
杀死与这个进程名称相关的所有进程


[root@xingdian ~]# pkill -9 进程名称
[root@xingdian ~]# pkill -9 -t 终端 名称
不加-9只杀死在终端上运行的进程,加-9连终端本身一起干掉
[root@xingdian ~]# pkill -u 用户名称

发现被入侵之后怎么办?
I
1、技术不太好,可以考虑先关机,然后找到上游防火墙,只允许自己的IP地址SSH,除此之外全部封禁;如果无法访问上游防火墙,则可以使用服务器本身的防火墙策略,当防火墙规则生效之后kill掉对方。
2、如果支持诸如串行控制台之类的带外连接登陆服务器,可以将network服务停掉,然后添加防火墙规则。
3、修复之后,你永远不知道对方做过什么,最安全的方法是备份所有数据,重装系统。


Linux管道和重定向

重定向

echo $$ 获取当前终端的pid
tty 查看当前终端

文件描述符(FD)ls /proc/$$/fd


进程使用文件描述符来管理打开的文件
如何查看一个进程打开的文件描述符
[root@xingdian ~]# ps aux | grep vim
root 1195 0.0 0.4 151204 4900 pts/1 S+ 22:39 0:00 vim a.txt
root 1214 0.0 0.0 112660 972 pts/0 S+ 22:47 0:00 grep --color=auto vim
[root@xingdian ~]# ls -l /proc/1195/fd
total 0
lrwx------ 1 root root 64 Mar 5 22:48 0 -> /dev/pts/1
lrwx------ 1 root root 64 Mar 5 22:48 1 -> /dev/pts/1
lrwx------ 1 root root 64 Mar 5 22:43 2 -> /dev/pts/1
lrwx------ 1 root root 64 Mar 5 22:48 3 -> /root/.a.txt.swp

0 标准输入
1 标准正确输出
2 标准错误输出


应用场景:


1.shell脚本


2.把来自命令的输出写入到文件


ls  /  把根目录下所有的文件名/目录名记录到/opt/a.txt
FD:1 重定向符号


>   覆盖


>>  追加


&既能承接标准正确输出又能承接标准错误输出()

案例

案例1:输出重定向(覆盖)
[root@xingdian ~]# date 1> date.txt
案例2:输出重定向(追加)
[root@xingdian ~]# date >> date.txt
案例3:错误输出重定向
[root@xingdian ~]# ls /home/ /aaaaaaaaa >list.txt
ls: 无法访问/aaaaaaaaa: 没有那个文件或目录
[root@xingdian ~]# ls /home/ /aaaaaaaaa >list.txt 2>error.txt //重定向到不同的位置
案例4: 正确和错误都输入到相同位置
[root@xingdian ~]# ls /home/ /aaaaaaaaa &>list.txt //混合输出
案例5: 正确和错误都输入到相同位置
[root@xingdian~]# ls /home/ /aaaaaaaaa >list.txt 2>&1 //重定向到相同的位置
案例6:重定向到空设备/dev/null
[root@xingdian ~]# ls /home/ /aaaaaaaaa >list.txt 2>/dev/null //空设备,即将产生的输出丢掉
[root@xingdian~]# ls /home/ /aaaaaaaaa &>/dev/null //空设备,即将产生的输出丢掉


案例7:脚本中使用重定向


[root@xingdian ~]# vim ping1.sh
ping -c1 10.18.40.100
if [ $? -eq 0 ];then
echo "10.18.40.100 is up." 
else
echo "10.18.40.100 is down!"
fi
[root@xingdian ~]# vim ping1.sh
[root@xingdian ~]# chmod +x ping1.sh
[root@xingdian ~]# ./ping1.sh

添加执行权限的文件是可以使用./或者/去执行一个文件
不加执行权限可不可以执行文件(可以)但是,不能使用./或/ 要使用bash或者sh去执行这个文件

案例7:脚本中使用重定向


[root@xingdian ~]# vim ping1.sh
ping -c1 10.18.40.100 &>/dev/null
if [ $? -eq 0 ];then
echo "10.18.40.100 is up."
else
echo "10.18.40.100 is down!"
fi


案例8:脚本中使用重定向


[root@xingdian ~]# vim ping2.sh
ping -c1 10.18.40.100 &>/dev/null
if [ $? -eq 0 ];then
    echo "10.18.40.100 可以访问." >>up.txt
else
    echo "10.18.40.100 不可以访问" >>down.txt
fi

#!/bin/bash  解释器:解释这个脚本里面的内容

最终版脚本:
for i in {1..100}
do 
    ping -c1 10.11.65.$i &>/dev/null
    if [ $? -eq 0 ];then
        echo "10.11.65.$i is up" >>up.txt
    else
        echo "10.11.65.$i is down" >>down.txt
    fi
done

标准输入:


<  0<
综合案例1:
[root@xingdian ~]# grep 'root' < /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

mysql: 数据的导入
    mysql -u root -p123 farm < qqfarm.sql
    -u 用户名
    -p 密码
    farm 数据库中的一个库名
    qqfarm.sql 数据库文件
    将数据库文件qqfarm.sql导入到farm的库中.


ping 主机存活检测


ping www.baidu.com

ping 10.9.12.250

利用重定向创建多行文件


cat  >>  /opt/kk  < zb
zb'
zb
eof

管道作用:

 实现进程间通信的手段之一

sort 排序 (默认从小到大)
 sort -rn b.txt    
-r        从大到小  
-k 1    指定字段,第一列排序,sort 默认第一列排序
-n       按照数值排序

uniq 去重(默认连续的去重)
先排序,后去重可以解决cat qf| sort |uniq
-c     统计重复次个数

wc 统计
wc   -l  统计行数
案例:统计当前系统中一共有多少个用户cat /etc/passwd | wc -l
ps aux | 

awk 切片

w |awk NR==1‘{print $8,$9,$10,$11,$12}’ 空格为分隔符,获取平均负载
NR指定行号
 
free -m 查看内存
获取当前服务器内存的使用量
free -m |awk NR==2'{print$3}'

不一定使用NR
cat /etc/passwd | awk -F:'{$1}'

awk打印指定的字段
例2:统计当前/etc/passwd中用户使用的shell类型
思路:取出第七列(shell) | 排序(把相同归类)| 去重
[root@xingdian ~]# awk -F: '{print $7}' /etc/passwd
[root@xingdian ~]# awk -F: '{print $7}' /etc/passwd |sort
[root@xingdian ~]# awk -F: '{print $7}' /etc/passwd |sort |uniq
[root@xingdian ~]# awk -F: '{print $NF}' /etc/passwd |sort |uniq -c
-F: 指定字段分隔符,默认以空格或者是tab分隔
$7 第七个字段
$NF表示最后一个字段
$(NF-1)表示倒数第二个字段
NR
NR==2 第二行
NR==9 第九行


管道作用:

 实现进程间通信的手段之一

5*统计当前系统中共有多个TCP进程【难度中】

ss -antpl | grep -v State | wc -l        -v 取反

sort 排序 (默认从小到大)


 sort -rn b.txt    
-r        从大到小  
-k 1    指定字段,第一列排序,sort 默认第一列排序
-n       按照数值排序

uniq 去重(默认连续的去重)


先排序,后去重可以解决cat qf| sort |uniq
-c     统计重复次个数

wc 统计


wc   -l  统计行数
案例:统计当前系统中一共有多少个用户cat /etc/passwd | wc -l
ps aux | 

awk 切片

w |awk NR==1‘{print $8,$9,$10,$11,$12}’ 空格为分隔符,获取平均负载
NR指定行号
 
free -m 查看内存
获取当前服务器内存的使用量
free -m |awk NR==2'{print$3}'

不一定使用NR
cat /etc/passwd | awk -F:'{$1}'

awk打印指定的字段


例2:统计当前/etc/passwd中用户使用的shell类型
思路:取出第七列(shell) | 排序(把相同归类)| 去重
[root@xingdian ~]# awk -F: '{print $7}' /etc/passwd
[root@xingdian ~]# awk -F: '{print $7}' /etc/passwd |sort
[root@xingdian ~]# awk -F: '{print $7}' /etc/passwd |sort |uniq
[root@xingdian ~]# awk -F: '{print $NF}' /etc/passwd |sort |uniq -c
-F: 指定字段分隔符,默认以空格或者是tab分隔
$7 第七个字段
$NF表示最后一个字段
$(NF-1)表示倒数第二个字段
NR
NR==2 第二行
NR==9 第九行

 

你可能感兴趣的:(linux,运维,服务器)