Amosplanet

Stay Hungry, Stay Foolish

Linux 命令学习

Linux 命令学习

一、CentOS7系统目录

参考博客

https://blog.csdn.net/qq_22860341/article/details/81363655

二、Linux 命令

1. tar 压缩及解压缩命令

tar -xzvf homebackup.tar.gz

-c: 建立新的打包文件。

-C<目的目录>: 切换到指定目录。

-f: 指定打包文件。

-j: 通过bzip2命令处理打包文件。

-J: 通过xz命令处理打包文件。

-z: 通过gzip命令处理打包文件。

-c   压缩,启用压缩功能

-x   解压,启用解压功能

-v   显示 压缩/解压  过程

-f  使用归档模式
压缩:

      tar cjvf  压缩文件名 源文件/目录   //以bz2格式压缩文件
      tar czvf  压缩文件名 源文件/目录   //以gz格式压缩文件
      注:以什么格式去压缩就以什么样的格式结尾
            文件名.tar.gz     文件名.tar.bz2

解压:

     tar xjvf  压缩文件名 源文件/目录   //以bz2格式解压文件
      tar xzvf  压缩文件名 源文件/目录   //以gz格式解压文件
      解压到某个目录中的话:
         tar xjvf  压缩文件名  -C 源文件/目录

         tar xzvf  压缩文件名  -C  源文件/目录

2. 通过 uname -r 命令查看你当前的内核版本

3. find / -name “virtualenv”

4. netstat

netstat -na |grep 8080

5. ls -l命令

linux下命令“ll”是“ls -l”的别名, 所以”ll”和“ls -l”的功能是相同的。

6. 第一个字符d 代表这是一个目录文件,后面的rwxr‐xr‐x字符,代表user、group、other对文件所拥有的权限,rwx代表该用户拥有读写执行的权限,r‐x

7. cd命令

cd 是 change directory的缩写,表示改变当前所在路径

8. pwd 命令

pwd 是英文print working directory 显示当前所在路径

9. mkdir 命令

mkdir 是make directory的英文缩写
创建目录DIRECTORY,可以一次创建多个。OPTION如果是­p,表示可以连同父目录一起创建
mkdir -p

10. rmdir 命令

rmdir是remove directory的英文缩写
删除空目录,可以一次删除多个。OPTION如果是­p,表示可以连同空的父目录一起删除。但是一旦父目录中还包含其他文件,则删除失败。

11. rm 命令

可以用来删除普通文件,也可以用来删除目录,特别用来删除目录中嵌套有子目录的目录文件。
常用参数:

‐f ‐‐force #强制删除,不询问是否要删除。
‐r ‐‐recursive #递归删除,包括文件夹中的内容。

12 mv命令

mv是英文单词move的缩写。可以用来移动文件夹或者文件,也可以用来更改文件名。

mv file / #把文件file移动到根目录中

mv file file_bak #把文件file重命名为file_bak。

13 cp命令

cp是英文单词copy的缩写,表示拷贝文件。
可以用来拷贝普通文件:
cp file file_bak #拷贝一份file为file_bak
可以用来拷贝目录
cp dir dir_bak ‐r #拷贝一个目录dir为dir_bak, ‐r参数代表递归拷贝,把dir目录中的文件也拷贝过去
-p 源目录或者文件的属性保留

14 cat命令

不填cat英文单词concatenate连锁的缩写,用来查看文件内容,以及将几个文件连成一个文件,文件参数,默认的情况下是从标准输入中获取内容:

查看文件: cat fileName
将文件file1 file2连成file3文件
cat file1 file2 > file3

15 grep 命令

常用参数有:

grep 命令
搜索内容中是否包含指定的字符串,并打印出该行。

‐i ‐‐ignore‐case #忽略字符大小写的差别。
‐v #输出没有指定字符串的文件
‐c #只输出匹配行的计数。
‐R #连同子目录中所有文件一起查找。
grep-E 用于显示文件中符合条件的字符
例如:
netstat -anp | grep 1080
postconf -d | grep mail_version
yum list installed | grep ruby 查看是否已安装

16 zip/unzip 命令

  以下命令均在/home目录下操作
    cd /home #进入/home目录
  a、把/home目录下面的mydata目录压缩为mydata.zip
    zip -r mydata.zip mydata #压缩mydata目录
  b、把/home目录下面的mydata.zip解压到mydatabak目录里面
    unzip mydata.zip -d mydatabak
  c、把/home目录下面的abc文件夹和123.txt压缩成为abc123.zip
    zip -r abc123.zip abc 123.txt
  d、把/home目录下面的wwwroot.zip直接解压到/home目录里面
    unzip wwwroot.zip
  e、把/home目录下面的abc12.zip、abc23.zip、abc34.zip同时解压到/home目录里面
    unzip abc*.zip
  f、查看把/home目录下面的wwwroot.zip里面的内容
    unzip -v wwwroot.zip
  g、验证/home目录下面的wwwroot.zip是否完整
    unzip -t wwwroot.zip
  h、把/home目录下面wwwroot.zip里面的所有文件解压到第一级目录
    unzip -j wwwroot.zip

主要参数
-c:将解压缩的结果
-l:显示压缩文件内所包含的文件
-p:与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换
-t:检查压缩文件是否正确
-u:与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其它文件解压缩到目录中
-v:执行是时显示详细的信息
-z:仅显示压缩文件的备注文字
-a:对文本文件进行必要的字符转换
-b:不要对文本文件进行字符转换
-C:压缩文件中的文件名称区分大小写
-j:不处理压缩文件中原有的目录路径
-L:将压缩文件中的全部文件名改为小写
-M:将输出结果送到more程序处理
-n:解压缩时不要覆盖原有的文件
-o:不必先询问用户,unzip执行后覆盖原有文件
-P<密码>:使用zip的密码选项
-q:执行时不显示任何信息
-s:将文件名中的空白字符转换为底线字符
-V:保留VMS的文件版本信息
-X:解压缩时同时回存文件原来的UID/GID

17 yum 命令

yum list chromium

18 RPM 命令

RMP 是 LINUX 下的一种软件的可执行程序,你只要安装它就可以了。这种软件安装包通常是一个RPM包(Redhat Linux Packet Manager,就是Redhat的包管理器),后缀是.rpm。

RPM是Red Hat公司随Redhat Linux推出了一个软件包管理器,通过它能够更加轻松容易地实现软件的安装。
RPM 安装操作
RPM 查询操作
命令:
rpm -q …
附加查询命令:
a 查询所有已经安装的包以下两个附加命令用于查询安装包的信息;
i 显示安装包的信息;
v表示显示安装过程
l 显示安装包中的所有文件被安装到哪些目录下;
s 显示安装版中的所有文件状态及被安装到哪些目录下;以下两个附加命令用于指定需要查询的是安装包还是已安装后的文件;
p 查询的是安装包的信息;
f 查询的是已安装的某文件信息;
举例如下:
执行rpm -ivh rpm包名,如:

rpm -ivh apache-1.3.6.i386.rpm

rpm -qa | grep tomcat4 查看 tomcat4 是否被安装;
rpm -qip example.rpm 查看 example.rpm 安装包的信息;
rpm -qif /bin/df 查看/bin/df 文件所在安装包的信息;
rpm -qlf /bin/df 查看/bin/df 文件所在安装包中的各个文件分别被安装到哪个目录下;
RPM 卸载操作
命令:
rpm -e 需要卸载的安装包
在卸载之前,通常需要使用rpm -q …命令查出需要卸载的安装包名称。
举例如下:
rpm -e tomcat4 卸载 tomcat4 软件包
RPM 升级操作
命令:
rpm -U 需要升级的包
举例如下:
rpm -Uvh example.rpm 升级 example.rpm 软件包
RPM 验证操作
命令:
rpm -V 需要验证的包
举例如下:
rpm -Vf /etc/tomcat4/tomcat4.conf
输出信息类似如下:
S.5….T c /etc/tomcat4/tomcat4.conf
其中,S 表示文件大小修改过,T 表示文件日期修改过。限于篇幅,更多的验证信息请您参考rpm 帮助文件:man rpm
RPM 的其他附加命令
–force 强制操作 如强制安装删除等;
–requires 显示该包的依赖关系;
–nodeps 忽略依赖关系并继续操作

rpm -qa | grep tomcat4 查看 tomcat4 是否被安装;
rpm -qip example.rpm 查看 example.rpm 安装包的信息;
rpm -qif /bin/df 查看/bin/df 文件所在安装包的信息;
rpm -qlf /bin/df 查看/bin/df 文件所在安装包中的各个文件分别被安装到哪个目录下;
RPM 卸载操作
命令:
rpm -e 需要卸载的安装包
在卸载之前,通常需要使用rpm -q …命令查出需要卸载的安装包名称。
举例如下:
rpm -e tomcat4 卸载 tomcat4 软件包
RPM 升级操作
命令:
rpm -U 需要升级的包
举例如下:
rpm -Uvh example.rpm 升级 example.rpm 软件包
RPM 验证操作
命令:
rpm -V 需要验证的包
举例如下:
rpm -Vf /etc/tomcat4/tomcat4.conf
输出信息类似如下:
S.5….T c /etc/tomcat4/tomcat4.conf
其中,S 表示文件大小修改过,T 表示文件日期修改过。限于篇幅,更多的验证信息请您参考rpm 帮助文件:man rpm
RPM 的其他附加命令
–force 强制操作 如强制安装删除等;
–requires 显示该包的依赖关系;
–nodeps 忽略依赖关系并继续操作


rpm -qal |grep mongo 查看mongo所有安装包的文件存储位置

使用rpm命令,查看软件是否安装。首先我们需要查看软件是否已经安装,或者说查看安装的软件包名称。如查找是否安装jenkins

1、列出所有安装的Jenkins

rpm -qa | grep jenkins

2、软件是否安装;例如:jenkins是否安装

rpm -q | grep jenkins

3、rpm -ql 列出软件包安装的文件

rpm -ql jenkins

4、可以直接使用 rpm -qal |grep mysql 查看mysql所有安装包的文件存储位置

rpm -qal |grep jenkins #查看jenkins所有安装包的文件存储位置
获得软件包相关的信息用rpm -q,q表示查询query,后面可以跟其他选项。

a 表示all,在所有包中执行查询

19 netstat -anp 命令

netstat -anp查看端口信息

yum install net-tools 用此命令安装

netstat -lntu | grep 1080

20 查看端口是否被占用

netstat -lnp|grep 端口号

21 vim/vi命令

vim +100 /etc/init.d/network 从第一百行开始显示

利用如下命令查看文件格式

:set ff 或 :set fileformat

22 查看端口有没有被占用

lsof -i:1080

23 查看指定端口的使用情况

netstat -tln | grep 1080
Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。

-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态

-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。

提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到

24 查看进程号对用的可执行程序

ps -f -p 进程号

ps aux|grep python

ps -C "python Beyond_Search_Email_remote_redis_slave_kill.py" --no-header |wc -l

ps -ef |grep "python Beyond_Search_Email_remote_redis_slave_kill.py" |grep -v "grep" |wc -l

25 chmod 命令

4 for r, 2 for w, 1 for x
chmod 命令,是Linux管理员最常用的命令之一,用于修改文件或目录的访问权限。

chmod 777 文件或目录

Linux系统中,每一个文件都有文件所有者和所属群组,并且规定文件的所有者,所属群组,以及其他人队问价有读取(r), 可写(w),执行(x)等权限,亦可分别用数字4、2、1 表示。文件的可读、可写、可执行权限可以简写为rwx,也可以使用数字7表示(4+2+1)。

权限设定字符串格式如下:

[ugoa…][[+-=][rwxX]…][,…]

其中

u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。

+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。

参数

-c : 若该文件权限确实已经更改,才显示其更改动作
-f : 若该文件权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)

chmod -R 755 directory

26 chown 命令

chown [-cfhvR] [--help] [--version] user[:group] file…

user : 新的文件拥有者的使用者 ID
group : 新的文件拥有者的使用者组(group)
-c : 显示更改的部分的信息
-f : 忽略错误信息
-h :修复符号链接
-v : 显示详细的处理信息
-R : 处理指定目录以及其子目录下的所有文件
--help : 显示辅助说明
--version : 显示版本
首先我们修改文件1的所有者为用户admin,群组wg

chown admin:wg 1
目录new下包含文件1和2 , 如果我们想要修改整个new目录所有者为admin 所属群组wg,我们就要使用到-R参数。

chown -R admin:wg new

https://zhuanlan.zhihu.com/p/255000117

27 nc命令

想要连接到某处: nc [-options] hostname port[s] [ports] …
绑定端口等待连接: nc -l port [-options] [hostname] [port]

-g<网关>:设置路由器跃程通信网关,最多设置8个;
-G<指向器数目>:设置来源路由指向器,其数值为4的倍数;
-h:在线帮助;
-i<延迟秒数>:设置时间间隔,以便传送信息及扫描通信端口;
-l:使用监听模式,监控传入的资料;
-n:直接使用ip地址,而不通过域名服务器;
-o<输出文件>:指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存;
-p<通信端口>:设置本地主机使用的通信端口;
-r:指定源端口和目的端口都进行随机的选择;
-s<来源位址>:设置本地主机送出数据包的IP地址;
-u:使用UDP传输协议;
-v:显示指令执行过程;
-w<超时秒数>:设置等待连线的时间;
-z:使用0输入/输出模式,只在扫描通信端口时使用。

28 free -m

主要看第一行Mem 总共 3789 M , 使用了 2911 M , 剩余空闲 353 M 。这个shared 66M 也不知道用在哪里

ps -aux | sort -k4nr | head -n 10
查看占用内存前10的进程,改变 10 的数字,可以调整前几的个数

29 top

top命令经常用来监控linux的系统状况,比如cpu、内存的使用,程序员基本都知道这个命令。
按 q 退出

30 查看CentOS的版本号

cat /etc/centos-release
查看内核版本
uname -r
查看操作系统位数
getconf LONG_BIT

31 curl和wget的区别和使用

curl和wget基础功能有诸多重叠,如下载等。

非要说区别的话,curl由于可自定义各种请求参数所以在模拟web请求方面更擅长;wget由于支持ftp和Recursive所以在下载文件方面更擅长。类比的话curl是浏览器,而wget是迅雷9。
curl -O http://man.linuxde.net/text.iso #O大写,不用O只是打印内容不会下载

32 touch命令

touch 命令用于创建空白文件,以及设置文件的时间。
尝试用touch 命令设置文件时间
这里介绍下

-a参数只修改读取时间

-m参数只修改修改时间

-d 参数设定读取和修改时间(使用指定的时间)

33 screen命令

安装 yum install screen

screen -ls
显示已创建的screen

screen -S 名字
创建screen窗口

screen -r 名字
进入screen窗口

screen -X -S screen名称 quit
关闭screen窗口

关闭所有窗口
1、先看看有多少个screen
screen -ls |awk '/Socket/'|awk '{print $1}'
2、如果有20个screen,关闭所有screen
screen -ls|awk 'NR>=2&&NR<=20{print $1}'|awk '{print "screen -S "$1" -X quit"}'|sh

Ctrl+A+D退出screen

34 EPEL 软件源

https://blog.csdn.net/u011341352/article/details/82943871

EPEL源-是什么?为什么安装?

EPEL (Extra Packages for Enterprise Linux)是基于Fedora的一个项目,为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS和Scientific Linux

35 find命令

参照:
https://www.cnblogs.com/whyd/p/11757552.html

find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

1) 无参数查找,默认查找当前目录的文件,find 和find .查找的效果是一样的
2)按照名字查找 find -name 文件名称
find / -name virtualenvwrapper.sh

[root@vultr bin]# find / -name virtualenvwrapper.sh
/usr/local/bin/virtualenvwrapper.sh
find ./ -name "core.*" | xargs rm

36 设置环境变量

~/.bashrc : 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。

37 source命令

source命令也称为“点命令”,也就是一个点符号(.)。source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。

38 systemctl 命令

参照 :
https://www.cnblogs.com/yinfutao/p/9645366.html
systemctl daemon-reload 重新加载systemd程序的配置文件

39 防火墙重新载入

firewall-cmd –reload

40 查看进程

ps aux|grep uwsgi

41 禁用/停止自带的firewalld服务

停止firewalld服务

systemctl stop firewalld

禁用Firewalld服务

systemctl mask firewalld

systemctl unmask firewalld

42 查看网络配置

ifconfig

43 添加系统用户

useradd amos.yang &&echo ‘hfpJMGwpayp5LIEpBg0’| passwd –stdin amos.yang

44 删除用户

userdel -r yangwn

45 系统用户名存放位置

/etc/passwd

passwd

1.修改系统用户root密码

[root@ITCATS-01 ~]# passwd
更改用户 root 的密码 。
新的 密码:

2.修改系统非root用户密码:huazi

[root@ITCATS-01 ~]# cat /etc/passwd //查看当前所有用户,自己创建的用户,在最后

huazi:x:1000:1000:HUAZI:/home/huazi:/bin/bash


[root@ITCATS-01 ~]# passwd huazi
更改用户 huazi 的密码 。
新的 密码

46 last命令

last命令列出当前和曾经登入系统的用户信息:

47 lastlog

检查一下系统最近系统登录信息,看看是否被入侵

48 查看通过密码验证用户信息

cat /var/log/secure|grep -i “accepted password”

49 入侵者可能创建一个新的存放用户名及密码文件,可以查看/etc/passwd及/etc/shadow文件

ll /etc/pass*
ll /etc/sha*

50 crontab命令

crontab -l 查看入侵者定时任务
crontab -e 删除定时任务

51 检查/etc/rc.d目录下的init.d和rcx.d(x从0-6)命令

这样恶意代码暂时就无法启动了,再检查一下启动文件是否有日期异常的,防止系统重启后恶意程序又被启动。需要检查/etc/rc.d目录下的init.d和rcx.d(x从0-6)所有文件

52 更改主机名

hostnamectl set-hostname Linuxprobe
需要重启生效 reboot

静态的(Static hostname)
“静态”主机名也称为内核主机名,是系统在启动时从/etc/hostname自动初始化的主机名。
瞬态的(Tansient hostname)
“瞬态”主机名是在系统运行时临时分配的主机名,例如,通过DHCP或mDNS服务器分配。
灵活的(Pretty hostname)
“灵活”主机名也有人叫做“别名”主机名。
“灵活”主机名则允许使用自由形式(包括特殊/空白字符)的主机名,以展示给终端用户(如xh01@f5)。
“静态”主机名和“瞬态”主机名都遵从作为互联网域名同样的字符限制规则。
在CentOS 7中,有个叫hostnamectl的命令行工具,它允许你查看或修改与主机名相关的配置。

53 启动脚本

打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好。

输入一些代码:

!/Bin/Bash

echo "Hello World !"

​ “#!” 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell。echo命令用于向窗口输出文本。

3.1 作为可执行程序

将上面的代码保存为test.sh,并 cd 到相应目录:

chmod +x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本

​ 运行其它二进制的程序也一样,直接写test.sh,linux系统会去PATH里寻找有没有叫test.sh的,而只有/bin, /sbin, /usr/bin,/usr/sbin等在PATH里,你的当前目录通常不在PATH里,所以写成test.sh是会找不到命令的,要用./test.sh告诉系统说,就在当前目录找。

报错:
bash: ./a.sh: /bin/bash^M: bad interpreter: No such file or directory

解决方案:
直接执行sed -i "s/\r//" a.sh来转化, 然后就可以执行./a.sh运行脚本了

https://blog.csdn.net/youzhouliu/article/details/79051516

54 查询本地IP

curl httpbin.org/ip

55 dig 命令

dig -t txt bsbdrink._domainkey.bsbdrink.com

56 查看修改时区

timedatectl //查看当前时区及本地时间
timedatectl list-timezones |grep Asia/Shanghai //查看时区中是否包含上海时区
timedatectl set-timezone Asia/Shanghai //更改为上海时区

timedatectl list-timezones 显示所有时区

57 EPEL

EPEL (Extra Packages for Enterprise Linux)是基于Fedora的一个项目,为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS和Scientific Linux.

! /bin/bash 作用:告诉脚本使用的是哪种命令解释器。如不指shell,以当前shell作为执行的shell。

创建Ajing_Exception_Report.txt

touch Ajing_Exception_Report.txt
touch Ajing_Visited_Links.txt

Sys_data_begin=$(date +%s) ##要对变量进行调用,可以在变量名称前加美元符号$
echo $Sys_data_begin
value2=$(cat Ajing_Visited_Links.txt)
while true; do

count=$(ps -aux | grep "AJing_Search_Email_remote_redis_master_kill.py" | grep -v "grep" | wc -l)
echo "系统检测有 $count 只爬虫在运行"
case $count in

0)

    echo "爬虫程序未运行,重新启动AJing_Search_Email_remote_redis_master_kill.py"
    echo "准备Kill所有Screen"
    screen_sum=$(screen -ls | awk '/Socket/' | awk '{print $1}')
    sleep 2
    echo "系统一共有 $screen_sum 窗口"
    screen -ls | grep AJing_Search_Email | awk '{print $1}' | cut -f1 -d'.' | while read in; do
        screen -X -S $in quit      ##cut 把文件分段 -d   分隔符 -f  第几段   -c  第几个字符
    done  ##read通过输入重定向,把file的第一行所有的内容赋值给变量line,循环体内的命令一般包含对变量line的处理

另一种也很常见的用法:
command | while read line
do
…
done
如果你还记得管道的用法,这个结构应该不难理解吧。command命令的输出作为read循环的输入,这种结构长用于处理超过一行的输出,当然awk也很擅长做这种事

    sleep 2
    screen_sum2=$(screen -ls | awk '/Socket/' | awk '{print $1}')
    echo "现在系统有 $screen_sum2 窗口"
    for loop in 1; do
        {
            echo "启动爬虫:$loop"
            date_time=$(date "+%Y%m%d%H%M")
            screen_name="AJing_Search_Email$date_time"
            echo "$screen_name"
            screen -dmS $screen_name
            sleep 5
            cmd="python AJing_Search_Email_remote_redis_master_kill.py"
            screen -x -S $screen_name -p 0 -X stuff "$cmd"
            sleep 3
            screen -x -S $screen_name -p 0 -X stuff $'\n'
            sleep 3
            screen -x -S $screen_name -p 0 -X stuff "exit"
            sleep 100
        }
    done
    ;;

1)

    ## Mem
    sleep 5
    value=$(cat Ajing_Exception_Report.txt)
    echo "爬虫异常内容:$value"
    value3=$(cat Ajing_Visited_Links.txt)
    echo "最近一次已访问的链接数量为: $value3"
    echo "上一次已访问的链接数量为: $value2"
    result=$(echo $value | grep "allocate memory")
    FREE=$(free -m | awk '/Mem/ {print $4}')
    echo "内存空闲容量为: $FREE"
    Sys_data_end=$(date +%s)
    INTER=$(($Sys_data_end - $Sys_data_begin))
    echo "系统已间隔时间: $INTER"
    interval_time=3000

    if [ $INTER -gt $interval_time ]; then
        if [[ "$value2" == "$value3" ]]; then
            echo "检测到爬虫假死,Kill所有的爬虫"
            kill -9 $(ps -aux | grep "python AJing_Search_Email_remote_redis_master_kill.py" | grep -v "grep" | awk '{print $2}')  #-v 或 --revert-match : 显示不包含匹配文本的所有行
            sleep 2

            echo "准备Kill所有Screen"
            screen_sum=$(screen -ls | awk '/Socket/' | awk '{print $1}') ##awk 是一种很棒的语言,它适合文本处理和报表生成
            sleep 2
            echo "系统一共有 $screen_sum 窗口"
            ##screen -ls | awk 'NR>=2&&NR<=$screen_sum{print $1}' | awk '{print "screen -S "$1" -X quit"}' | sh
            screen -ls | grep AJing_Search_Email | awk '{print $1}' | cut -f1 -d'.' | while read in; do
                screen -X -S $in quit
            done
            sleep 2
            screen_sum2=$(screen -ls | awk '/Socket/' | awk '{print $1}')
            echo "现在系统有 $screen_sum2 窗口"

            for loop in 1; do
                {
                    echo "启动爬虫:$loop"
                    date_time=$(date "+%Y%m%d%H%M")
                    echo "$data_time"
                    screen_name="AJing_Search_Email$date_time"
                    echo "$screen_name"
                    screen -dmS $screen_name
                    sleep 5
                    cmd="python AJing_Search_Email_remote_redis_master_kill.py"
                    screen -x -S $screen_name -p 0 -X stuff "$cmd"
                    sleep 3
                    screen -x -S $screen_name -p 0 -X stuff $'\n'
                    sleep 3
                    screen -x -S $screen_name -p 0 -X stuff "exit"
                    sleep 100
                }
            done
            value2=$(cat Ajing__Visited_Links.txt)
            Sys_data_begin=$(date +%s)
            sleep 2
            echo "重新设定的起始时间为: $Sys_data_begin"
            continue
        else
            value2=$(cat Ajing__Visited_Links.txt)
            Sys_data_begin=$(date +%s)
            sleep 2
            echo "重新设定的起始时间为: $Sys_data_begin"
            echo "检测到爬虫链接数量变化, 正常运行"
        fi
    else
        echo "检测时间还未到50分钟,目前已达到: $INTER 秒"
    fi

    if [ $FREE -le 70 ]; then
        if [[ "$result" != "" ]]; then

            kill -9 $(ps -aux | grep "python AJing_Search_Email_remote_redis_master_kill.py" | grep -v "grep" | awk '{print $2}')

            echo "准备Kill所有Screen"
            screen_sum=$(screen -ls | awk '/Socket/' | awk '{print $1}') ##统计screen数量 
            sleep 2
            echo "系统一共有 $screen_sum 窗口"
            ##screen -ls | awk 'NR>=2&&NR<=$screen_sum{print $1}' | awk '{print "screen -S "$1" -X quit"}' | sh
            screen -ls | grep AJing_Search_Email | awk '{print $1}' | cut -f1 -d'.' | while read in; do
                screen -X -S $in quit
            done
            sleep 2
            screen_sum2=$(screen -ls | awk '/Socket/' | awk '{print $1}') ##统计screen数量 
            echo "现在系统有 $screen_sum2 窗口"

            for loop in 1; do
                {
                    echo "启动爬虫:$loop"
                    date_time=$(date "+%Y%m%d%H%M")
                    echo "$data_time"
                    screen_name="AJing_Search_Email$date_time"
                    echo "$screen_name"
                    screen -dmS $screen_name
                    sleep 5
                    cmd="python AJing_Search_Email_remote_redis_master_kill.py"
                    screen -x -S $screen_name -p 0 -X stuff "$cmd"
                    sleep 3
                    screen -x -S $screen_name -p 0 -X stuff $'\n'
                    sleep 3
                    screen -x -S $screen_name -p 0 -X stuff "exit"
                    sleep 100
                }
                : >Ajing_Exception_Report.txt
            done
        else
            echo "内存: $FREE, 但爬虫尚未检测到 Cannot allocate memory"
        fi

    elif [ $FREE -gt 70 ] && [[ "$result" != "" ]]; then
        kill -9 $(ps -aux | grep "python AJing_Search_Email_remote_redis_master_kill.py" | grep -v "grep" | awk '{print $2}')

        echo "准备Kill所有Screen"
        screen_sum=$(screen -ls | awk '/Socket/' | awk '{print $1}')
        sleep 2
        echo "系统一共有 $screen_sum 窗口"
        ##screen -ls | awk 'NR>=2&&NR<=$screen_sum{print $1}' | awk '{print "screen -S "$1" -X quit"}' | sh
        screen -ls | grep AJing_Search_Email | awk '{print $1}' | cut -f1 -d'.' | while read in; do
            screen -X -S $in quit
        done
        sleep 2
        screen_sum2=$(screen -ls | awk '/Socket/' | awk '{print $1}')
        echo "现在系统有 $screen_sum2 窗口"

        for loop in 1; do
            {
                echo "启动爬虫:$loop"
                date_time=$(date "+%Y%m%d%H%M")
                screen_name="AJing_Search_Email$date_time"
                echo "$screen_name"
                screen -dmS $screen_name
                sleep 5
                cmd="python AJing_Search_Email_remote_redis_master_kill.py"
                screen -x -S $screen_name -p 0 -X stuff "$cmd"
                sleep 3
                screen -x -S $screen_name -p 0 -X stuff $'\n'
                sleep 3
                screen -x -S $screen_name -p 0 -X stuff "exit"
                sleep 100
            }
            : >Ajing_Exception_Report.txt #重定向
        done

    else
        echo "爬虫正常运行"
        sleep 100
    fi

    ;;

*)
    echo "检测到有 $count 个爬虫,Kill掉所有爬虫"

    for i in $(seq 1 $count); do
        {
            echo "Kill $i 爬虫"
            kill -9 $(ps -aux | grep "python AJing_Search_Email_remote_redis_master_kill.py" | grep -v "grep" | awk '{print $2}')
            sleep 3
        }
    done

    echo "准备Kill所有Screen"
    screen_sum=$(screen -ls | awk '/Socket/' | awk '{print $1}')
    sleep 2
    echo "系统一共有 $screen_sum 窗口"
    ##screen -ls | awk 'NR>=2&&NR<=$screen_sum{print $1}' | awk '{print "screen -S "$1" -X quit"}' | sh
    screen -ls | grep AJing__Search_Email | awk '{print $1}' | cut -f1 -d'.' | while read in; do
        screen -X -S $in quit
    done

    sleep 2
    screen_sum2=$(screen -ls | awk '/Socket/' | awk '{print $1}')
    echo "现在系统有 $screen_sum2 窗口"

    for loop in 1; do
        {
            echo "启动爬虫:$loop"
            date_time=$(date "+%Y%m%d%H%M")
            screen_name="AJing_Search_Email$date_time"
            echo "$screen_name"
            screen -dmS $screen_name
            sleep 5
            cmd="python AJing_Search_Email_remote_redis_master_kill.py"
            screen -x -S $screen_name -p 0 -X stuff "$cmd"
            sleep 3
            screen -x -S $screen_name -p 0 -X stuff $'\n'
            sleep 3
            screen -x -S $screen_name -p 0 -X stuff "exit"
            sleep 100
        }
    done
    ;;

esac

sleep 100

done

58 journald和rsyslog

https://blog.csdn.net/weixin_39688750/article/details/111553776

59 df -h

df -h 是适当的显示磁盘的单位

60 df -i

61 查询文件夹大小

du -h –max-depth=1 /root/Envs/Google_Crawl/lib/python3.9

62 查看物理磁盘空间

df -Th

63 whereis命令

whereis命令用于定位指定命令的二进制文件、源文件和帮助文件的位置。它可以帮助我们快速找到系统中某个命令的安装路径.查找命令和命令帮助文档以及源码包所在的路径

选项:

-b :只查找可执行文件位置

-m:只查找帮助文件

[root@localhost ~]# whereis ls

ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz

64 杀死僵尸进程命令

查询

ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]' 



OR


杀掉
ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]' | awk '{print $2}' | xargs kill -9


#ps -ef | grep defunct

Leave a Comment

Your email address will not be published. Required fields are marked *