Linux常用命令总结
1. 过滤掉空行和注释行
$ grep -Ev '^$|[#;]' filename
2. 杀死僵尸进程
$ ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]' | awk '{print $2}' | xargs kill -9
3. 生成随机数
$ openssl rand -base64 8
$ openssl rand -base64 80
4. 查看CPU核数
# 查看物理CPU个数
$ cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
# 查看逻辑CPU个数
$ cat /proc/cpuinfo| grep "processor"| wc -l
# 查看每个物理CPU中core的个数(即核数)
$ cat /proc/cpuinfo| grep "cpu cores"| uniq
5. 统计访问Nginx的IP数
$ awk '{print $1}' access.log | sort -n | uniq | wc -l
6. 对一列数字求和
$ seq 1 5 | awk '{sum+=$1} END{print sum}'
7. 统计每个用户的进程占用了多少内存
$ ps aux | awk 'NR!=1{a[$1]+=$6} END {for (i in a) print i ", " a[i]/1024"M";}'
8. 释放内存
# 在执行释放内存之前,先执行 sync 将所有正在内存中的缓存写到磁盘,避免丢失数据
$ sync
$ echo 1 > /proc/sys/vm/drop_caches # 释放页缓存
$ echo 2 > /proc/sys/vm/drop_caches # 释放目录和inodes
$ echo 3 > /proc/sys/vm/drop_caches # 释放所有缓存
9. vim常用操作
ctrl + d
:向下翻半页ctrl + u
:向上翻半页ctrl + 4
:光标移到一行最左端ctrl + 6
:光标移到一行最右端zz
:让光标所在行处于屏幕中央zt
:让光标所在的行居屏幕最上面zb
:让光标所在的行居屏幕最下面ctrl + G
:移动到文件末尾gg
:移动到文件首行u
:撤销最近一次的操作y
:复制当前行,会复制换行符yy
:只复制当前行内容yyp
:复制当前行到下一行ddp
:当前行和下一行交换位置
10. vim替换操作
# 替换当前行第一个tom为jerry
:s/tom/jerry/
# 替换当前行所有的tom为jerry
:s/tom/jerry/g
# 替换从第n行到最后一行中,每一行的第一个tom为jerry
:n,$s/tom/jerry/
# 替换从第n行到最后一行中,每一行的每个tom为jerry
:n,$s/tom/jerry/g
11. vim配置快捷添加注释信息
通过修改vimrc的配置文件来实现。vimrc文件一般是在家目录下的 .vimrc
或者是在 /etc/vimrc
。配置步骤如下:
编辑 vim /etc/vimrc
,在文件最下方添加如下内容
map <F1> :call TitleDet()<cr>
function AddTitle()
call append(0,"\#!/bin/sh")
call append(1,"# ******************************************************")
call append(2,"# Author : syushin")
call append(3,"# Last modified: ".strftime("%Y-%m-%d %H:%M"))
call append(4,"# Email : moliyoyoyo@163.com")
call append(5,"# blog : https://www.cnblogs.com/syushin/")
call append(6,"# Filename : ".expand("%:t"))
call append(7,"# Description : ")
call append(8,"# ******************************************************")
echohl WarningMsg | echo "Successful in adding copyright." | echohl None
endf
function UpdateTitle()
normal m'
execute '/# Last modified/s@:.*$@\=strftime(":\t%Y-%m-%d %H:%M")@'
normal ''
normal mk
execute '/# Filename/s@:.*$@\=":\t".expand("%:t")@'
execute "noh"
normal 'k
echohl WarningMsg | echo "Successful in updating the copyright." | echohl None
endfunction
function TitleDet()
let n=1
while n < 10
let line = getline(n)
if line =~ '^\#\s*\S*Last\smodified\S*.*$'
call UpdateTitle()
return
endif
let n = n + 1
endwhile
call AddTitle()
endfunction
上面配置表示,打开一个新的文件时,点击一下F1就可以实现在文件首部添加注释信息。
点击F1,效果如下:
12. 在shell中发起一个curl带变量的post请求
有时候,需要在shell中用curl命令发起一个post请求,请求数据是json格式并且json的字段名和值都是变量,这时候可以这样做:
#!/bin/bash
username="syushin"
password="123456"
curl http://192.168.1.10:8888/login.html \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"name": '"username"',
"pwd": '"password"'',
}'
变量格式: '"变量名"'
13. 批量删除文件
$ find ./ -type f -name "*.txt" | xargs rm
$ find ./ -type f -name "*.txt" -exec rm -f {} \;
$ find ./ -type -f -name "*.txt" -delete
14. 批量备份文件
[root@web syushin]# ls
1.txt 2.txt 3.txt 4.txt 5.txt backup
[root@web syushin]# ls backup/
[root@web syushin]# find ./ -type f -name "*.txt" | xargs -i cp -a {} backup/
[root@web syushin]# ls backup/
1.txt 2.txt 3.txt 4.txt 5.txt
15. date命令去掉无用的0
比如日期 2021-09-07
,去掉0就变成了 2021-9-7
,只需要在 %m 中间加 -
即可,如下:
$ date +%Y-%m-%d
2021-09-07
$ date +%Y-%-m-%-d
2021-9-7
16. redis批量删除前缀相同的keys
注意:在线上不建议使用,测试开发环境可以使用
$ redis-cli -a 密码 -p 端口号 -n 库号 KEYS "指定key前缀_*" | xargs redis-cli -a 密码 -p 端口号 -n 库号 del
17. Linux查询大目录
# 类似于默认情况的du,但是,递归显示时的递归深度小于等于N,如果--max-depth=0,就相当于-s参数,如果--max-depth=1,就相当于du -s 目录/*
$ du -h --max-depth=1
18. curl命令不显示统计信息
# 执行curl命令时,会返回这样的% Total % Received % 统计信息
$ curl www.baidu.com > 1.log
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2381 100 2381 0 0 28084 0 --:--:-- --:--:-- --:--:-- 28345
# 不显示统计信息加上 -s 即可
$ curl -s www.baidu.com > 1.log
19. tar使用多线程进行压缩
tar 是单线程的压缩,压缩起来很慢,可以使用 pigz工具辅助,就可以使用多线程了(需要多核CPU)。
centos7 下安装
$ yum -y install pigz
测试,不使用 pigz 工具的打包:
# 文件夹大小 529
$ du -sh src
529M src
# 使用time命令,查看tar命令耗时
$ time tar -zcvf src.tar.gz src
......
real 0m19.772s
user 0m19.029s
sys 0m1.318s
大概需要19秒,接下来使用 pigz 工具试试
# 使用 --use-compress-program 选项,指定压缩工具为pigz
$ time tar --use-compress-program=pigz -cvpf src2.tar.gz src
......
real 0m3.902s
user 0m29.522s
sys 0m0.951s
只需要3.9秒,真香。
20. docker设置容器开机自启
docker有个 --restart 参数,参数值如下:
- no:默认策略,在容器退出时不重启容器
- on-failure:在容器非正常退出时(退出状态非0),才会重启容器
- on-failure:3:在容器非正常退出时重启容器,最多重启3次
- always:在容器退出时总是重启容器
将正在运行的容器设为自启动
# docker update --restart=always 容器名或容器ID
$ docker update --restart=always <CONTAINER ID>
将自启动的容器取消自启动
# docker update --restart=no 容器名或容器ID
docker update --restart=no <CONTAINER ID>
21. Linux 删除特殊字符文件名的文件
比如ls 的时候看到这样的文件,想删除掉
$ ls
?x?Mc?ܴ
使用转义字符去删除不好使,通过如下命令解决
# 通过ls -i 查看文件的 inode 号
$ ls -li
51635093 -rw-r--r-- 1 root root 0 Jul 12 13:58 ?x?Mc?ܴ
# 结合 find 命令进行删除
$ find ./ -inum 51635093 -delete
22. curl命令获取http状态码
$ curl -I -m 10 -o /dev/null -s -w %{http_code} www.baidu.com
200
选项说明:
-I
:仅测试 http 头-m 10
:最多查询 10s-o /dev/null
:屏蔽原有的输出信息-s
:slient 模式,不输出任何东西-w %{http_code}
:控制额外输出
23. sed 命令去除空格
$ sed 's/[[:space:]]//g'
24. vim 多列编辑
多行注释
1. 进入vim,按esc进入命令行模式,按 ctrl + v 进入可视化编辑,左下角会出现(-- VISUAL BLOCK --)
2. 在行首使用键盘上下键选择需要注释掉的行
3. 选好之后,按下键盘 shift + i,即大写的 I,进入插入模式
4. 然后输入注释的符号,#或者其他符号
5. 最后按下 esc 键,稍等1-2秒,选中的行就会在行首出现 # 号了。
取消多行注释
1. 首先按esc进入命令行模式下,按下Ctrl + v, 进入列模式;
2. 选定要取消注释的多行;
3. 按下“x”或者“d”. 注意:如果是“//”注释,那需要执行两次该操作,如果是“#”注释,一次即可
25. 查找空文件并删除
$ find ./log -size 0c | xargs rm -f
26. 利用 date 命令比较时间大小
显示时间戳
$ date +%s
1696667408
将时间戳转换为指定格式时间
$ date -d @1696667408 +"%Y-%m-%d %H:%M:%S"
2023-10-07 16:30:08
利用时间戳比较两个时间大小
$ cat test.sh
#!/bin/bash
time1=`date +%s`
sleep 2
time2=`date +%s`
time_format1=`date -d @$time1 +"%Y-%m-%d %H:%M:%S"`
time_format2=`date -d @$time2 +"%Y-%m-%d %H:%M:%S"`
if [ $time1 -lt $time2 ];then
echo "$time_format1 早于 $time_format2"
else
echo "$time_format1 晚于 $time_format2"
fi
$ sh test.sh
2023-10-07 16:37:24 早于 2023-10-07 16:37:26