Linux服务器运维笔记

做运维,哥不专业,随手记一些有用的命令备忘而已。
 

Ubuntu,显示已经安装的ppa,来自万能的StackOverflow,还有如何删除

grep -RoPish "ppa.launchpad.net/[^/]+/[^/ ]+" /etc/apt | sort -u | sed -r 's/\.[^/]+\//:/'

设置Ubuntu自动启动服务

sudo update-rc.d SERVICE_NAME defaults
sudo update-rc.d -f SERVICE_NAME remove

CentOS下则使用chkconfig命令

实时显示日志内容

tail -f access.log

所有子目录的权限改为755(跳过文件)StackOverflow

find /path/to/base/dir -type d -exec chmod 755 {} +

改命令行默认语言,解决SSH中文乱码

Ubuntu: /etc/default/locale

CentOS: /etc/sysconfig/i18n

OSChina

命令行自动完成不工作AskUbuntu

sudo apt-get install bash-completion

Apache 日志统计

# 解压所有日志,并统计所有pdf下载量
gzip -cd access.log.*.gz | grep -c ".pdf"

# 统计APAC Portal的实际访问数
cat access.log.1 | grep " 200 " | grep -v "OPTIONS" | \
grep -v "gsa-crawler" | grep -v "/world-time" | grep -v "/share-price" | \
grep -v "wp-admin" | 
grep -v "wp-cron" | grep -v "/rss-feed/" | grep -v "favicon.ico" | \
grep -v ".jpg" | grep -v ".png" | grep -v ".css" | grep -v ".js" | grep -v ".eot" | \
grep -c ""

# 统计前访问量前20的资源
cat access.log.1 | grep '200' | awk '{print $11}'| sort | uniq -c | sort -nr | head -20

# 总流量
cat access.log.1 | awk '{sum+=$10} END {print sum/1024/1024/1024}'
# 上周的错误日志
cat error.log.1 | grep -v "file_get_contentsep "error" | grep -v "sending a SIGKILL" | grep -v "MaxRequestWorkers" | less

# 每小时访问量
awk '{print $4}' access.log |cut -c 2-15|sort|uniq -c

Apache / MySQL 定期自动打包备份,自动上传到FTP

cd /var/www/witower/backups
mysqldump -uroot -pPASSWD witower [--all-databases] | gzip -c > database.sql.gz

cd /var/www/witower
tar czf ~/witower_$((`date +%d`%3)).tar.gz ./

cd ~
curl -T witower_$((`date +%d`%3)).tar.gz ftp://HOST --user LOGIN:PASSWD

# 使用 ssh 备份
scp all-databases_$((`date +%d`%7)).sql.gz uicestone@witower.com:~/backup/home-server/database/

MySQL更改数据目录

StackOverflow

使用rsync通过ssh增量备份到远程目录

rsync -a -e ssh --info=progress2 /var/www uicestone@witower.com:~/backup/home-server

使用rsync增量同步照片,并检查同名不同照片

rsync -va --ignore-existing --remove-source-files /Volumes/External/下载/相机/ /Volumes/External/媒体存档/照片/2020/
rsync -nvac /Volumes/External/下载/相机/ /Volumes/External/媒体存档/照片/2020/

配置ssh-keygen做到无密码登录ssh

使用ssh-keygen命令在本地生成rsa_key和rsa_key.pub文件,将rsa_key.pub中的内容追加到目标机器目标用户的~/.ssh/authorized_keys内,如需创建文件,注意权限必须为600,.ssh目录的权限必须为700,/etc/ssh/sshd_config中RSA认证相关配置需开启

定时和延时任务

定时任务crontab -e已经很熟悉

延时任务,或者说一次性的定时任务,则通过at命令实现

sudo at [time]
at> [command1]
at> [command2]
(Ctrl+D结束保存)

另有atq(检查队列),atrm(删除任务)供君选择。

Ubuntu定时自动安全更新,内附拆分日志方法

https://help.ubuntu.com/community/AutomaticSecurityUpdates

配置SNMP监控服务

360云监控使用SNMP协议,虽然360提供了服务器配置脚本,但好奇心+不放心还是让我自己配置了一下

sudo apt-get install snmp snmpd

CentOS的话包名为:CentOS下的一篇教程

net-snmp:提供了一个入口,使得监控服务器可以通过snmp协议从这个入口与被监控机器通信
net-snmp-devel: 是为了使用net-snmp-config, net-snmp-utils是为了使用snmpwalk
net-snmp-libs:  提供了运行需要的库文件
net-snmp-utils: 提供了一套工具,可以利用snmp协议进行通信

按照/etc/snmp/snmpd.conf的提示,在/var/lib/snmp/snmpd.conf中创建了用户。但是测试失败。经过提醒,注释掉/etc/snmp/snmp.conf中的mibs,安装snmp-mibs-downloader包。再次运行本机测试脚本

snmpwalk -v 3 -l authNoPriv -a MD5 -u 'authOnlyUser' -A 'mypassword' '127.0.0.1:161' 'sysDescr'

成功。附赠测试UDP端口的方式

nc -vuz uice.lu 161

显示硬盘S.M.A.R.T.信息

sudo smartctl -a -d ata /dev/sda

递归列出所有子目录git status 原帖

for i in /var/www/*/; do (cd $i && (echo $i; git status; sudo git prune; git fsck; wp core version)); done

配置L2TP over IPSec VPN

主要靠它,但有一处配置需要根据这里修改

在Ubuntu 16.04以上配置自动启动服务

新建启动脚本文件/etc/systemd/system/shadowsocks.service,

[Unit]
Description=Shadowsocks

[Service]
TimeoutStartSec=0
ExecStart=/usr/bin/ssserver -c /etc/shadowsocks.json

[Install]
WantedBy=multi-user.target

执行以下命令启动 shadowsocks 服务:

systemctl enable shadowsocks
systemctl start shadowsocks
systemctl status shadowsocks -l

Git应用层代理

git config --global http.proxy socks5://127.0.0.1:1080

MongoDB备份和恢复

mongodump --gzip --db=<database> --archive=<path>

mongorestore --gzip --archive=<path>

MongoDB Replication配置

Mongo> rs.initiate()

Elasticsearch 安装顺序 X-Pack证书配置 入门文档 

使用ES_JAVA_OPTS控制内存占用

ik分词插件 同义词配置

MongoDB到Elasticsearch同步工具mongo-es

Nginx授权用户名密码访问

echo "username:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users

站点配置文件中加入

auth_basic "Restricted Access";
 auth_basic_user_file /etc/nginx/htpasswd.users;

sudo切换用户的各种参数与用户环境、当前目录的对应

Summary of the differences found 
                             corrupted by user's 
        HOME=/root   uses root's PATH   env vars
sudo -i     Y            Y[2]              N
sudo -s     N            Y[2]              Y
sudo bash   N            Y[2]              Y
sudo su     Y            N[1]              Y

sudo su USER SCRIPT / sudo su USER -c ‘COMMAND’

Ubuntu下pm2的正解:

  • 脚本目录放在/var/www下,文件归属www-data
  • 为www-data设置密码,设置shell为bash
  • sudo pm2 startup ubuntu -u www-data
  • 使用www-data启动pm2,运行pm2 save
  • 编辑无sudo的部署命令,形成shell脚本xxx放在/usr/local/bin
  • 使用自己的用户进入项目目录,运行sudo su -c ‘xxx’来部署

将目录修改时间批量修改为其中最新文件的修改时间(仅在macOS测试过)

for i in *; do (cd "$i"; touch -mt $(date -r `find . -type f -exec stat -f "%m" \{} \; | sort -n -r | head -1` "+%Y%m%d%H%M") . ); done

Ubuntu dpkg E: Sub-process 错误

sudo mv /var/lib/dpkg/info /var/lib/dpkg/info.bak
sudo mkdir /var/lib/dpkg/info
sudo apt-get update
sudo apt-get -f install xxx
sudo mv /var/lib/dpkg/info/* /var/lib/dpkg/info.bak
sudo rm -rf /var/lib/dpkg/info
sudo mv /var/lib/dpkg/info.bak /var/lib/dpkg/info

Linux 硬盘分区、格式化、挂载

这里都有

将一个非git目录和一个git仓库(的某一个分支)同步

git clone --bare --branch <NAME> <GIT URL> .git
git config core.bare false
git add .

MySQL 8.0的开发环境密码设空

-- 用Homebrew安装的MySQL8.0默认空密码,不可以运行mysql_secure_installation
-- 遇上Sequel Pro无法连接的问题,需要把root默认验证方式改为mysql_native_password
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';

服务器穿透本地内网1087

autossh -M 5678 -NR 1087 root@stirad.com

SSH到内网服务器

内网服务器上运行

autossh -p 22 -M 5678 -NR "*:8201:localhost:22" root@中间服务器

中间服务器上sshd要配置

# /etc/ssh/sshd_config
GatewayPorts yes
# sudo systemctl restart sshd


评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据