Linux常用命令整理1:yum,rpm,ps,kill,find,crontab,tar,strace,systemctl

yum:

#帮助
yum help #列出全部命令
yum help cmd-name #查看某个命令的用法

#查看软件包
yum list installed
yum list available
yum list all
yum list updates
yum info installed #或者available,updates,all
yum info pack-name

#检查更新:
yum check-update #查看所有可以更新的软件
yum check-update pack-name #查看指定软件是否可以更新

#更新:
yum update    #更新全部软件,危险命令
yum update pack-name #更新指定软件

#安装指定软件:
yum install pack-name

#删除软件包命令:
yum remove pack-name

#查找软件包命令:
yum search pack-name

#清除缓存命令:
yum clean packages: 清除缓存目录下的软件包
yum clean headers: 清除缓存目录下的 headers
yum clean metadata
yum clean dbcache
yum clean all

#生成新的元数据缓存
yum makecache

yum版本很多问题,把握住核心:

参考:https://www.cnblogs.com/hunttown/p/16287988.html

cd /etc/yum.repos.d/
tar -zcvf origin.repo.tar.gz ./*
rm -rf !(origin.repo.tar.gz)
wget http://mirrors.aliyun.com/repo/Centos-8.repo
wget https://mirrors.aliyun.com/repo/epel-archive-8.repo -O /etc/yum.repos.d/epel-archive-8.repo
yum clean all && yum makecache

centos版本和redhat版本不一致

uname -srm
cat /etc/redhat-release

实践方案

#如果是阿里云的centos8,选择相应的版本的Base.repo和epel.repo

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
wget https://mirrors.aliyun.com/repo/epel-archive-8.repo -O /etc/yum.repos.d/epel-archive-8.repo

yum clean all && yum makecache

rpm:

rpm -ivh package.rpm 安装一个rpm包 (可以是远程的)

rpm -qa | grep httpd 显示所有名称中包含 "httpd" 字样的rpm包 

rpm -e package_name.rpm 删除一个rpm包 #如果删除失败就加上 --nodeps

rpm -ql package_name 显示一个已经安装的rpm包提供的文件列表 

rpm -qf /path/to/some_file 查询某文件是由哪个rpm包安装生成的,返回rpm包名

rpm -qc package_name 查询包安装生成的配置文件

rpm -q --scripts package_name 查询包相关的脚本

#批量删除
for i in `rpm -qa|grep erlang`;do rpm -e --nodeps $i; done;

for i in `find / -name erlang`; do ll $i; done;

ps:

参考:

https://www.cnblogs.com/atai/p/14393027.html(ps命令详解)

https://linux.cn/article-4743-1.html(ps命令实战)

ps - o命令
ps -eo pid,tid,tty,user,lstart,etime,comm,cmd,rss,vsz,%cpu,stat|grep go-admin|grep -v grep

参数说明:
pid:进程ID
tid:线程id
tty:终端
user:用户
comm:进程名
cmd:启动命令
lstart:开始时间
etime:运行时间

ps -ef和ps aux命令
ps -ef:标准格式显示进程
ps -aux:BSD格式显示进程
参数说明:
USER:用户名
%CPU:进程占用的CPU百分比
%MEM:占用内存的百分比
VSZ:该进程使用的虚拟內存量(KB)
RSS:该进程占用的固定內存量(KB)(驻留中页的数量)
STAT:进程的状态
START:该进程被触发启动时间
TIME:该进程实际使用CPU运行的时间

排序
ps -aux --sort -pcpu | less
ps -aux --sort -pmem | less
ps -aux|sort -k3nr|head -10 查看占用cpu排名前10的进程
ps -aux|sort -k4nr|head -10 查看占用内存排名前10的进程

监控java线程数:
ps -eLf | grep java | wc -l


查看僵尸进程
ps -eo stat,ppid,pid,cmd | grep -e '^[Zz]'

杀死僵尸进程
ps -eo stat,ppid,pid,cmd | grep -e '^[Zz]' | awk '{print $2}' | xargs kill -9

使用Kill  僵尸进程ID来杀死僵尸进程,往往此种情况无法杀死僵尸进程,此时就需要杀死僵尸进程的父进程
kill -HUP 僵尸进程父ID

kill:

kill pid 杀死进程 #杀死进程最安全的方法是单纯使用kill命令,不加修饰符,不带标志
kill -9 pid 彻底杀死进程
kill -HUP pid 重跑pid进程
kill -l 列出所有信号

首先使用ps -ef命令确定要杀死进程的PID,然后输入以下命令: 
# kill -pid   
注释:标准的kill命令通常都能达到目的。终止有问题的进程,并把进程的资源释放给系统。然而,如果进程启动了子进程,只杀死父进程,子进程仍在运行,因此仍消耗资源。
为了防止这些所谓的“僵尸进程”,应确保在杀死父进程之前,先杀死其所有的子进程。  

find:

参考:https://www.jianshu.com/p/ea8cc2248022

参考:https://www.cnblogs.com/bpzblog/p/12657340.html

语法:find [paths] [expression] [actions]

[expression]
-mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
-amin n : 在过去 n 分钟内被读取过
-anewer file : 比文件 file 更晚被读取过的文件
-atime n : 在过去n天内被读取过的文件
-cmin n : 在过去 n 分钟内被修改过
-cnewer file :比文件 file 更新的文件
-ctime n : 在过去n天内被修改过的文件
-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name
-ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
-name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
-size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。
-type c : 文件类型是 c 的文件。

//举例
find / -name file1 从 '/' 开始进入根文件系统搜索文件和目录 
find / -user user1 搜索属于用户 'user1' 的文件和目录 
find /home/user1 -name \*.bin 在目录 '/ home/user1' 中搜索带有'.bin' 结尾的文件 
find /usr/bin -type f -atime +100 搜索在过去100天内未被使用过的执行文件 
find /usr/bin -type f -mtime -10 搜索在10天内被创建或者修改过的文件 
find / -name \*.rpm -exec chmod 755 '{}' \; 搜索以 '.rpm' 结尾的文件并定义其权限 
find / -xdev -name \*.rpm 搜索以 '.rpm' 结尾的文件,忽略光驱、捷盘等可移动设备  

#按文件内容查找
grep -r "version.app.xinyartech.com"  /data/nginx/conf.d
grep -r -l "version.app.xinyartech.com"  /data/nginx/conf.d
find /data/nginx/conf.d  -type f |xargs grep "version.app.xinyartech.com"; 

[action]
-print:默认的处理动作,显示至屏幕 
-ls:类似于对查找到的文件执行“ls -l”命令 
-fls file:查找到的所有文件的长格式信息保存至指定文件中,相当于 -ls > file 
-delete:删除查找到的文件,慎用! 
-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认 
-exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令 
{}: 用于引用查找到的文件名称自身

//举例
#备份配置文件,添加.orig这个扩展名 
find -name ".conf" -exec cp {} {}.orig \; 

#提示删除存在时间超过3天以上的joe的临时文件 
find /tmp -ctime +3 -user joe -ok rm {} \; 

#在主目录中寻找可被其它用户写入的文件 
find ~ -perm -002 -exec chmod o-w {} \; 

#查找/data下的权限为644,后缀为sh的普通文件,增加执行权限 
find /data –type f -perm 644 -name "*.sh" –exec chmod 755 {} \;

crontab

定时任务的守护进程,精确到分,设计秒的我们一般写脚本

参考:https://www.cnblogs.com/ftl1012/p/crontab.html

//1,安装
yum install crontabs
//2,命令
crontab [-u user][-e|-l|-r]
crontab -e #编辑定时任务,相当于vim /var/spool/cron/root
crontab -l
crontab -r #从/var/spool/cron目录中删除用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件
cat /etc/crontab
任务末尾请加 >/dev/null 2>&1
//3,状态
chkconfig –level 35 crond on #必须加入开机启动
service crond status
service crond [status|start|stop|restart|reload]
//4,其他写法
@reboot        Run once, at startup. #重启时执行
@yearly         Run once a year, "0 0 1 1 *". #每年
@monthly       Run once a month, "0 0 1 * *". #每月
@weekly        Run once a week, "0 0 * * 0". #每周
@daily           Run once a day, "0 0 * * *". #每天
@hourly         Run once an hour, "0 * * * *".#每小时
@annually      (same as @yearly) 
@midnight      (same as @daily) 

//避免周期内重复执行
* * * * * flock -xn /tmp/test.lock -c "timeout 200 php /home/app/email.php >> /home/log/test.log 2>&1"

//列出所有用户的cron任务
#!/bin/bash //可不加
for user in $(cut -f1 -d: /etc/passwd); do echo $user; crontab -u $user -l; done //可直接运行,也可以写在脚本里面运行

//后台实时运行
nohup php artisan queue:listen >/dev/null 2>&1 & //queue:listen和queue:work --daemon效果一样
nohup php artisan queue:work --daemon >/dev/null 2>&1 & //不重新加载整个框架,而是直接 fire 动作,所以如果修改了job代码,需要重新启动,经测试 可以不加--daemon

tar:

-c或--create 建立新的备份文件
-t或--list 列出备份文件的内容
-x或--extract或--get 从备份文件中还原文件
      特別留意的是, -c, -t, -x 不可同時出現在一串指令列中。
-z或--gzip或--ungzip 通过gzip指令处理备份文件
-j  :透過 bzip2 的支援進行壓縮/解壓縮:此時檔名最好為 *.tar.bz2
-J  :透過 xz    的支援進行壓縮/解壓縮:此時檔名最好為 *.tar.xz
      特別留意, -z, -j, -J 不可以同時出現在一串指令列中
-v或--verbose 显示指令执行过程
-f<备份文件>或--file=<备份文件> 指定备份文件
-C<目的目录>或--directory=<目的目录> 切换到指定的目录
//xxx.tar.gz
tar -zxvf xxx.tar.gz [-C destdir]  #解压 xxx.tar.gz [到destdir目录]
tar -zcvf xxx.tar.gz xxx ...(多个目录)  #压缩成xxx.tar.gz
tar -ztvf xxx.tar.gz  #查看压缩包xxx.tar.gz内的内容

//xxx.tar.bz2
tar -jxvf xxx.tar.bz2 [-C destdir]  #解压xxx.tar.bz2  [到destdir目录]
tar -jcvf xxx.tar.bz2 xxx... (多个目录)  #压缩成xxx.tar.bz2
tar -jtvf xxx.tar.gz  #查看压缩包xxx.tar.bz2内的内容

#备份 tar.xz: 使用 tar 命令的
-xJf 选项进行解压,例如: tar -xJf archive.tar.xz -C /path/to/extract tar.bz2: 使用 tar 命令的 -xjf 选项进行解压,例如: tar -xjf archive.tar.bz2 -C /path/to/extract tar.gz: 使用 tar 命令的 -xzf 选项进行解压,例如: tar -xzf archive.tar.gz -C /path/to/extract //xxx.tar tar -xvf xxx.tar [-C destdir] #解压xxx.tar [到destdir目录] tar -cvf xxx.tar xxx ... (多个目录) #打包成xxx.tar(即tarfile) tar -tvf xxx.tar #查看包xxx.tar内的内容 //xxx.zip #一、安装支持ZIP的工具 yum install -y unzip zip #二、解压zip文件 unzip xxx.zip #三、压缩一个zip文件 zip xxx.zip xxx... (多个目录)

 

 

strace:

参考:

https://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316692.html (linux strace命令)

https://blog.csdn.net/cs729298/article/details/81906375 (强大的strace命令用法详解)

strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。

#基本用法:
strace -o output.txt -T -tt -e trace=all -p 28979

#参数:
-c 统计每一系统调用的所执行的时间,次数和出错的次数等. 
-d 输出strace关于标准错误的调试信息. 
-f 跟踪由fork调用所产生的子进程. 
-ff 如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号. 
-F 尝试跟踪vfork调用.在-f时,vfork不被跟踪. 
-h 输出简要的帮助信息. 
-i 输出系统调用的入口指针. 
-q 禁止输出关于脱离的消息. 
-r 打印出相对时间关于,,每一个系统调用. 
-t 在输出中的每一行前加上时间信息. 
-tt 在输出中的每一行前加上时间信息,微秒级. 
-ttt 微秒级输出,以秒了表示时间. 
-T 显示每一调用所耗的时间. 
-v 输出所有的系统调用.一些调用关于环境变量,状态,输入输出等调用由于使用频繁,默认不输出. 
-V 输出strace的版本信息. 
-x 以十六进制形式输出非标准字符串 
-xx 所有字符串以十六进制形式输出. 
-a column 
设置返回值的输出位置.默认 为40. 
-e expr 
指定一个表达式,用来控制如何跟踪.格式如下: 
    [qualifier=][!]value1[,value2]... 
    qualifier只能是 trace,abbrev,verbose,raw,signal,read,write其中之一.value是用来限定的符号或数字.默认的 qualifier是 trace.感叹号是否定符号.例如: 
    -eopen等价于 -e trace=open,表示只跟踪open调用.而-etrace!=open表示跟踪除了open以外的其他调用.有两个特殊的符号 all 和 none. 
注意有些shell使用!来执行历史记录里的命令,所以要使用\\. 
    -e trace=set 
只跟踪指定的系统 调用.例如:-e trace=open,close,rean,write表示只跟踪这四个系统调用.默认的为set=all. 
    -e trace=file 
只跟踪有关文件操作的系统调用. 
    -e trace=process 
只跟踪有关进程控制的系统调用. 
    -e trace=network 
跟踪与网络有关的所有系统调用. 
    -e strace=signal 
跟踪所有与系统信号有关的 系统调用 
    -e trace=ipc 
跟踪所有与进程通讯有关的系统调用 
    -e abbrev=set 
设定 strace输出的系统调用的结果集.-v 等与 abbrev=none.默认为abbrev=all. 
    -e raw=set 
将指 定的系统调用的参数以十六进制显示. 
    -e signal=set 
指定跟踪的系统信号.默认为all.如 signal=!SIGIO(或者signal=!io),表示不跟踪SIGIO信号. 
    -e read=set 
输出从指定文件中读出 的数据.例如: 
    -e read=3,5 
    -e write=set 
输出写入到指定文件中的数据. 
-o filename 
将strace的输出写入文件filename 
-p pid 
跟踪指定的进程pid. 
-s strsize 
指定输出的字符串的最大长度.默认为32.文件名一直全部输出. 
-u username 
以username 的UID和GID执行被跟踪的命令

systemctl:

1,文件位置:

/etc/systemd/system/
/usr/lib/systemd/system

2,命令

systemctl --type=service #只显示服务单元的状态
systemctl list-units --type=service #列出所有服务单元
systemctl list-unit-files --type=service #查看服务单元的启用和禁用状态
#type种类:service,device,mount,socket,target,path,scope,slice,timer;只会用到service
systemctl
is-active sshd #验证sshd服务当前是否活动 systemctl start sshd.service #启动,停止和重启sshd服务 systemctl stop sshd.service systemctl restart sshd.service systemctl reload sshd.service #重新加载配置 systemctl list-dependencies sshd #列出依赖的单元 systemctl is-enabled sshd #验证sshd服务是否开机启动 systemctl disable network #禁用network,使之不能自动启动,但手动可以 systemctl enable network #启用network systemctl mask network #禁用network,使之不能手动或自动启动 systemctl unmask network #启用network

 3,配置一个服务管理单元,以nginx为例

建立服务文件

文件路径

vim /usr/lib/systemd/system/nginx.service 

服务文件内容

[Unit]
Description=nginx - high performance web server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/opt/nginx/sbin/nginx
ExecReload=/opt/nginx/sbin/nginx -s reload
ExecStop=/opt/nginx/sbin/nginx -s stop

[Install]
WantedBy=multi-user.target

文件内容解释

[Unit]:服务的说明
Description:描述服务
After:描述服务类别

[Service]服务运行参数的设置
User=XXX 指定用户
PIDFile=/var/run/es_9200.pid 指定进程文件地址
WorkingDirectory=/data/soft/elasticsearch-8.13.3 指定工作目录
Type=forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:启动、重启、停止命令全部要求使用绝对路径

[Install]服务安装的相关设置,可设置为多用户

 

使文件生效

systemctl daemon-reload

保存目录和启用

/usr/lib/systemd/system #以754的权限保存在目录:
systemctl enable nginx.service #设置开机自启动
systemctl start nginx.service #启动服务
systemctl status nginx.service #服务状态

 

posted @ 2018-11-08 15:07  小匡程序员  阅读(1059)  评论(0编辑  收藏  举报