# Linux

# 常用命令

# 磁盘相关

查看磁盘空间

df -h

查看当前目录大小

du -sh

查看指定目录大小

du -sh 目录名称

查看当前文件夹下文件大小,可用来排查磁盘空间,非常实用

du -h --max-depth=1 *
du -h --max-depth=0 *

查看指定文件夹大小,指定深度

du -h --max-depth=1 software/

查看io状态,用来排查是否有io密集型任务,1表示时间间隔;10表示时间,最后的指标%util越高则io负载越高,100%代表满负荷

iostat -x 1 10

定位io来源可以安装iotop (opens new window)

# CPU相关

简单的如top等就不说了,一些不常用的记一下 监控每个CPU情况,每隔2s 统计3次

mpstat -P ALL 2 3

每个1s输出全部进程的cpu、内存等信息

pid stat 1

# 也可以查看具体进程
pidstat -p 95237 1

# 查看日志相关

最常用的实时查看日志

tail -100f xxx.log

搜索查看

grep -C 5 foo file  # 显示file文件里匹配foo字串那行以及上下5行
grep -B 5 foo file  # 显示foo及前5行
grep -A 5 foo file  # 显示foo及后5行

时间节点查看,一定要时间存在于日志中,否则会刷到底部

sed -n '/2019-10-28 13:15:20/,/2019-10-28 13:15:59/p' xxx.log

more命令

more xxx.log

# 空格键 向下翻页
# 回车 向下翻行
# /字符串 在当前页位置向下查找内容
# :f 立即显示文件名已经目前位置行号
# b或ctrl + b 往回翻页

less命令,比more更好用,更推荐这个

less xxx.log

# pagedown 下翻页
# pageup 上翻页
# /字符串 和more一样
# ?字符串 向上查找字符串
# n重复查找
# N反向重复查找
# g跳转到第一行
# G跳转到最后一行
# q退出

# 压缩解压

将目录压缩到html.zip

zip -q -r html.zip /home/html
zip -q -r html.zip ./dist/

将zip文件解压到html目录

unzip -o -d /usr/local/nginx/html /opt/dist.zip

移动文件并以时间结尾

 mv html.zip ./html-$(date +%Y%m%d-%H%M).zip

tar压缩解压

 // tar压缩
 tar -czvf test.tar.gz test.txt
 // tar解压 x代表解压、v代表显示过程信息、z代表gzip的压缩包、f代表后面紧跟着的是文件不能写成-xfzv、c代表压缩
 tar -xzvf test.tar.gz
 //tar列表
 tar -tzvf test.tar.gz

# 软链接

移除软连接 如在/usr/bin目录下,要使node指向新安装的node

cd /usr/bin
ll node
// 移除软链
rm -rf node

// 新增软链
ln -s /usr/local/bin/node node 

# 只保留最近几个任务

rm -rf `ls -t  |tail -n +11`

# 内核版本

cat /proc/version
hostnamectl
hostnamectl | grep -i kernel
uname -srm

# Crontab定时任务

查看当前的定时任务

crontab -l

编辑

crontab -e

删除指定用户|删除指定任务

crontab -r <username>
crontab -r | grep xxxx

例子,每天下午两点清空mysqld.log

0 14 * * * cat /dev/null > /var/log/mysqld.log

每天两点执行该shell,并将错误输出和正确输出都记录到log文件中

0 14 * * * /opt/crontab/cleanOnlieWebVersion.sh >> /opt/crontab/cleanOnlieWebVersion.sh.log 2>&1

清除历史记录shell,count目录下文件,然后倒序

#! /bin/sh

cd /opt/jenkins/order/version
fileNum=`ls -l |grep "^-"|wc -l`
echo $fileNum
if [ $fileNum -gt 6 ]
then
        echo "remove some oldest files so can reduce some space."
        rm -rf `ls -t | tail -n +6`
else
        echo "The file numbers are less or equals 5, keep it."
fi

统计数量

wc -l 

这个命令的意思是倒序后跳过第一行,total 16644, 同理,+3就是跳过前两行

ls -lt | tail -n + 2
total 16644
-rw-r--r-- 1 root root 2844618 2022-10-24 16:10 html-20221024-1610.zip
-rw-r--r-- 1 root root 2844623 2022-10-21 16:55 html-20221021-1655.zip
-rw-r--r-- 1 root root 2844212 2022-10-18 10:06 html-20221018-1006.zip
-rw-r--r-- 1 root root 2842800 2022-10-17 09:37 html-20221017-0937.zip
-rw-r--r-- 1 root root 2842794 2022-10-17 09:13 html-20221017-0913.zip
-rw-r--r-- 1 root root 2805808 2022-10-17 08:59 html-20221017-0859.zip

# windows文件字符转换

有时将windows文件拷至linux,需要替换下字符

# 安装小工具dos2unix
sudo yum install dos2unix

# 进行转换
dos2unix ./filename

# 查看所有用户

cat /etc/passwd |cut -f 1 -d :