运维备忘录
netstat 显示网络状态
快速用法
netstat -nlptu
-n 不解析主机名
-l 监听端口
-p 显示PID
-t 显示TCP连接
-u 显示UDP连接windows下用法
netstat -ano
#列出监听端口scp 远程复制文件
快速用法
从本地发送到远程
scp -r -P 目标主机端口号 本地文件/目录 目标主机用户名@目标主机:目标目录
-r 递归复制目录内文件
-P 指定数据传输用端口号
从远程复制到本地
scp -r -P 目标主机端口号 目标主机用户名@目标主机:目标文件/目录
#实例:
scp -P 22 -r /mysql_bak root@192.168.1.10:/opt/backup/mysql_bak
#使用ssh密钥登录
scp -i <ssh密钥文件> -r /mysql_bak/ root@192.168.1.10:/opt/backup/mysql_bak/在压缩文件名中加入日期
$(date +%Y%m%d-%H%M)
#使用格式
创建带时间的tar压缩包
tar -zcvf backup-$(date +%Y%m%d).tar.gz abc.txt
backup-20200730.tar.gz
#文件名称中将含有当前日期
tar -zcf attachments-$(date +%Y_%m_%d).tar.gz attachments
#格式2
#attachments-2021_01_01.tar.gz定期删除1个月前的日志或备份文件
快速用法
0 0 * * * find /opt/hexo_bak/ -mtime +31 -type f -name '*.tar.gz' -exec rm -rf {} \;
#在crontab中增加计划任务。
0 */4 * * * find /opt/hexo_bak/ -mtime +31 -type f -name '*.tar.gz' -exec rm -rf {} \;
#每4小时执行一次删除超过指定大小的文件
find /tmp/ -size +50M -exec rm {} \;查找大文件
find / -type f -size +100M -print0列出当前目录中最大的前20个文件
du -sh * | sort -rh | head -n 20MySQL数据库定期备份脚本
#!/bin/sh
# Database info
DB_USER="root"
DB_PASS="password"
DB_HOST="localhost"
# Database array
DB_NAME=("DB_1" "DB_2")
# Others vars
BIN_DIR="/opt/mysql/bin" #the mysql bin path
BCK_DIR="/home/mysql-backups" #the backup file directory
DATE=`date +%F`
# create file
mkdir $BCK_DIR/$DATE
# TODO
# /usr/bin/mysqldump --opt -ubatsing -pbatsingpw -hlocalhost timepusher > /mnt/mysqlBackup/db_`date +%F`.sql
for var in ${DB_NAME[@]};
do
$BIN_DIR/mysqldump --opt --single-transaction --master-data=2 -u$DB_USER -p$DB_PASS -h$DB_HOST --databases $DB_NAME > $BCK_DIR/$DATE/db_$var.sql
done通过进程号PID找到文件路径和程序
ll /proc/1378/cwd
#对应的目录
ll /proc/1378/exe
#对应的可执行程序设置CentOS的系统语言为中文
方法一
1.查看当前系统支持语言
locale -a2.安装中文语言包
dnf install langpacks-zh_CN3.设置语言为中文
localectl set-locale LANG=zh_CN.utf84.重新连接服务器
重新ssh连接后可以看到已经显示中文
方法二
修改配置文件
vim /etc/locale.conf
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en"
SYSFONT="lat0-sun16"查看CentOS发行版本号
cat /etc/redhat-release
输出如下:
CentOS Linux release 7.6.1810 (Core)查看当前系统每个IP的连接数
netstat -n | awk '/^tcp/ {print $5}'| awk -F: '{print $1}' | sort | uniq -c | sort -rn生成一个32位的随机密码
cat /dev/urandom | head -1 | md5sum | head -c 32修改软连接
将一个已有的软连接指向其它目标
ln -snf 新目标文件 软连接名称使用rm命令时没有确认
在家目录中.bashrc文件中添加:
alias rm='rm -i'接着重新载入.bashrc
source .bashrc停止进程脚本
kill -9 $(ps -ef | grep 进程名称 | grep -v 'grep' | awk '{print $2}')
#停止包含指定名称的进程yum update 不更新内核
yum --exclude=kernel* updatenginx反向代理使用客户端真实IP
location /xx {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://0.0.0.0;
}
java项目启动脚本
cat << EOF > /data/restart_safety.sh
kill -9 \$(ps -ef | grep "safety" | grep -v 'grep' | awk '{print \$2}')
nohup java -jar -Dspring.profiles.active=dev /data/produce.jar > /data/logs/produce.log 2>&1 &
tail -f /data/logs/produce.log
EOF解压缩tar.bz2文件
tar -jxf xxx.tar.bz2
#如果解压缩失败,安装bzip2
yum install bzip2解压缩xz文件
tar -xf xxx.tar.xz解压文件到指定目录
tar -xf example.tar.gz -C /opt
#将压缩文件解压到opt目录在vim中修改编码格式
set ff=unix列出yum中指定软件的所有版本
yum list docker-ce --showduplicatewget命令保存文件到指定位置
wget https://xxxxx -P /opt/
#将下载的文件保存到/opt下删除软连接
当删除一个目录的软连接时,不能带有/号,否则将会删除源目录内的文件,而非删除这个软连接。
谨防操作失误。
建议的删除方法:
rm -i links
使用-i参数,删除时会有提醒。
rm: remove symbolic link 'apps'?
看到这个提示,就能确定要删除的是软连接,而非目录内的文件了。windows刷新dns缓存
打开CMD
ipconfig /flushdns windows中注册bat或exe为服务
sc create 服务名称 binPath= C:\123.bat start= auto
[SC] CreateService 成功
#注册服务
sc delete 服务名称
#删除服务windows下使用类tail命令
powershell下可使用
gc c:\log.txt -wait
#实现类似linux中tial命令的效果,持续输出日志内容。cmd不显示运行窗口
cmd 后台运行 不显示窗口 隐藏
@echo off
if "%1"=="h" goto begin
start mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin查看cpu信息
cat /proc/cpuinfo
#查看CPU信息
lscpu
#查看CPU信息
nproc
#查看cpu核心数
#可以用于make时指定线程数等场景下使用。使用tree显示目录树状结构
tree /data
使用树状结构显示全部文件
tree /data -L 2
#显示3层目录快速格式化大硬盘
mkfs.ext4 -T largefile /dev/sdxxvim搜索替换
%s/foo/bar/g
#%s 全文搜索替换
#s 单行搜索替换
#/g 贪婪,替换一行内所有匹配项
#不贪婪,替换一行内第一个匹配项后,读取下一行
#分隔符/可以换成别的符号,如@或者+等等循环执行shell命令
while true;do curl http://192.168.3.60/;sleep 1;donetcpdump抓包
tcpdump -i eth0 -nn host 224.0.0.18
#抓指定ip主机的包
#nginx禁用http特定方法请求
if ($request_method !~ ^(POST|GET|PUT|OPTIONS|DELETE)$) {return 403;}
可添加在server中 或 location中通过lsof查看进程开启的文件
lsof -p 进程pid
#查看进程打开的文件
lsof -i:80
#查看80端口监听程序
crontab 定时任务注意事项
- 如果要设置每隔几个小时执行一次,在分钟处需要写具体分钟(一般是0),不能使用*号。
0 */8 * * * cmd
* */8 * * * cmd
这2种写法的区别:
第一种:每隔8小时执行一次。(24小时会执行4次)
第二种:每天8点的每个1分钟都会执行一次。(每天8点,执行60次,每1分钟执行一次)
意义完全不同定时任务:重启后自动执行
@reboot /root/app.shsed进行文件内容替换
sed命令可以通过查找和替换,快速修改配置文件内容。
sed依次读取文件的一行,执行处理。处理完毕后再读取下一行,直到文件全部读取完毕。因此sed默认为贪婪模式。
#在以SELINUX=开头的行中,查找enforcing并将其替换为disabled。
sed -i '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config
1️⃣ 2️⃣ 3️⃣
#在以SELINUX开头的行,把整行替换为SELINUX=disabled。
sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config
1️⃣ 2️⃣
#查找替换全部匹配内容
sed -i 's/192.168.1.1/192.168.10.10/' /server.conf
#查找并删除
删除所有#开头的行,即删除文件内的注释。
sed -i '/^#/d' config.conf使用rsync同步文件
rsync和scp都可以用来传输文件。
rsync -avz -e"ssh -p 22" /localpath root@1.1.1.1:/remotepath
#把本地同步文件到远程服务器
rsync -avz -e"ssh -p 22" --delete /localpath root@1.1.1.1:/remotepath
#把本地同步文件到远程服务器
--delete 与源看齐,如果有和源不一致的多余文件,则删除。
--update 只传输源中修改时间更晚的文件。
#从远程服务器同步到本地
rsync -avz -e“ssh -p22” root@1.1.1.1:/remotepath /localpath
-a 归档模式,保持所有文件属性。
-v 显示传输时的信息信息。
-z 传输过程中压缩,节省带宽。修改docker的data路径
docker的默认data路径,存放在根目录,可能会空间不足。需要移动data目录位置。
#停止docker服务
#编辑配置
vim /etc/docker/daemon.json
"data-root":"/data/docker-data"
#原有文件要手动移动到新目录下。
#重启docker后台启动程序
nohup java -jar app.jar > /log/app.log 2>&1 &以后台方式启动程序,并将日志输出到文件。
例子:minio
nohup ./minio server /mnt/data --console-address "0.0.0.0:9001" > /var/logs/minio.log 2>&1 &wget断点续传
wget -c -t 0 https://xxxxx.tgz
-c 断电续传
-t 重试次数 0表示一直重试跨服务器拷贝文件
yum install nmap -y
#服务器端执行
cd /data/
nc -l 10080 < xxxx.tar.gz
#执行后保持执行状态。
#客户端执行
nc 10.10.10.10 10080 > xxxx.tar.gz
ls -lh
#查看文件是否传输完成,完成后ctrl+z结束nc进程。curl 测试命令
#显示https证书信息
curl -vvIk https://www.baidu.com
-v 详细模式,输出请求和响应的详细信息
-I 检查服务器的响应状态和头信息
-k 忽略证书验证
-L 跟随重定向
非root用户nginx监听80端口
使用root用户执行
setcap cap_net_bind_service=+eip /usr/local/nginx/sbin/nginx(持续更新)