手记

[置顶] 日常学习手记

FFmpeg 常用命令

合并视频

for f in *.flv; do echo "file '$f'" >> mylist.txt; done
ffmpeg -f concat -i mylist.txt -c copy output.flv

切割视频

ffmpeg -ss 00:30:00 -t 00:10:00 -i input.mp4 -c copy output.mp4

TS 转 MP4

ffmpeg -i input.ts -c:v libx264 -c:a copy -bsf:a aac_adtstoasc output.mp4

Linux 常用命令

取第2列

awk '{print $2}'

取第2行

sed -n '2p'

取前10行

head -n 10

取后10行

tail -n 10

搜索文件

按字符串搜索

grep -rl 'keyword' /home

按16进制搜索

grep -rlP ^1cff /home

按文件名搜索

find /home -name '*keyword*'

HSTS Preload List

https://hstspreload.org/

SSL 性能测试

https://www.ssllabs.com/ssltest/

Caddy 配置

Caddy 官方文档

跳转到 https

http://www.domain.com {
    redir 301 {
        /  https://{host}{uri}
    }
}

反向代理

https://www.domain.com {
    proxy /web1 103.101.202.99:80 {
        without /web1
    }
    proxy /web2 103.101.202.99:80
    log /var/log/caddy.log
}

Nginx 配置

Nginx 官方文档

默认站点配置

server {
    listen 80 default;
    index index.html index.htm;
    root /home/wwwroot/default;

    error_page 400 /ErrorPages/400.html;
    error_page 403 /ErrorPages/403.html;
    error_page 404 /ErrorPages/404.html;
    error_page 502 /ErrorPages/502.html;
    error_page 500 /ErrorPages/500.html;

    access_log /home/wwwlogs/default-access.log;
    error_log /home/wwwlogs/default-error.log;
}

SSL 配置

ssl on;
ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
ssl_prefer_server_ciphers on;
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

# 私钥和证书
ssl_certificate_key  /home/ssl/domain.com.key;
ssl_certificate  /home/ssl/domain.com.crt;

# DH 密钥参数
ssl_dhparam /home/ssl/domain.com-dhparam.pem;

# HSTS 强制重定向 HTTPS
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";

Rewrite 重定向

rewrite ^(.*)$ /index.html;
rewrite ^(.*)$ http://www.domain.com$1;

反向代理

location / {
    proxy_pass http://101.22.33.44:80;
    proxy_redirect off;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

Python 文件头部

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
#
# @Version : 1.0
# @Time    : 2018/1/1 10:10
# @Author  : Your Name
# @File    : test.py
#
# Here is Description

Shell 文件头部

#!/bin/sh#!/bin/bash

开启路由功能

vi /etc/sysctl.conf
修改以下内容:
net.ipv4.ip_forward=1
保存
sysctl -p

iptables 使用方法

# 查看 iptables
/sbin/iptables -nL
/sbin/iptables -t nat -nL

# 保存 iptables 到文件
/sbin/iptables-save > iptables.save

# 从文件恢复 iptables
/sbin/iptables-restore < iptables.save

# 清空所有表
/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -Z
/sbin/iptables -t nat -F
/sbin/iptables -t nat -X
/sbin/iptables -t nat -Z

# 允许 loopback 接口 INPUT
/sbin/iptables -A INPUT -i lo -j ACCEPT

# 允许 icmp 协议 INPUT
/sbin/iptables -A INPUT -p icmp -j ACCEPT

# 允许 tcp 协议 22 端口 INPUT
/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 允许 101.123.78.90 访问本机 UDP 53 端口
/sbin/iptables -A INPUT -s 101.123.78.90 -p udp --dport 53 -j ACCEPT

# 允许 已经建立连接、关联的数据包 INPUT (放行回包)
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 从 ppp0 出外网,用 ppp0 的 IP 地址做 NAT 转换
/sbin/iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

# 源地址 10.0.0.0/24 从 eth0 出外网,用 eth0 的 IP 地址做 NAT 转换
/sbin/iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE

# 源地址 10.0.0.0/24 从 eth0 出外网,用 67.88.99.101 做 SNAT 转换
/sbin/iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j SNAT --to 67.88.99.101

# 从 eth0 进来的 tcp 101 端口,用 10.0.0.2 做 DNAT 转换,转发到 203 端口
/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 101 -j DNAT --to-destination 10.0.0.2:203

# 从 eth0 进来的 tcp 102 和 tcp 103 端口,转发到本机 104 端口
/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp -m multiport --dport 102,103 -j REDIRECT --to-ports 104

# 默认 DROP INPUT 链
/sbin/iptables -P INPUT DROP

Python pip 代理

Linux: ~/.pip/pip.conf Windows C:\Users\xxx\pip.ini

[global]
index-url = http://mirrors.ustc.edu.cn/pypi/web/simple/

[install]
trusted-host = mirrors.ustc.edu.cn

Git 代理

# socks5 代理
git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'

# http/https 代理
git config --global http.proxy 'http://127.0.0.1:1080'
git config --global https.proxy 'https://127.0.0.1:1080'

文件权限 rwx 数值

r 表示 read ,读取权限,代表数字 4
w 表示 write ,写入权限,代表数字 2
x 表示 execute ,执行权限,代表数字 1

SSH 使用方法

安装

apt install openssh-server

允许 root 登录

vi /etc/ssh/sshd_config
修改以下内容:
PermitRootLogin yes # 允许密码和密钥登录
PermitRootLogin prohibit-password # 只允许密钥登录
保存
systemctl restart sshd.service

生成公私钥

ssh-keygen -t rsa

~/.ssh/ 自动生成 id_rsa.pubid_rsa 公私钥对

id_rsa.pub 公钥文件权限数值 644
id_rsa 私钥文件权限数值 600

使用私钥登录

服务器端:

公钥按行放在 ~/.ssh/authorized_keys 文件里
chmod 644 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

客户端:

私钥放在 ~/.ssh/ 目录下
chmod 600 ~/.ssh/id_rsa
ssh -i ~/.ssh/id_rsa root@hostname

网卡接口配置

vi /etc/network/interfaces

DHCP 自动获取 IP

auto eth0
iface eth0 inet dhcp

静态 IP

auto eth0
iface eth0 inet static
address 10.0.0.2
netmask 255.255.255.0
gateway 10.0.0.1

桥接 Bridge

auto vmbr0
iface vmbr0 inet static
address  10.0.0.1
netmask  255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0

修改 DNS

方法一

vi /etc/network/interfaces
在外网网卡添加以下内容:
dns-nameservers 114.114.114.114 8.8.8.8
保存
systemctl restart networking.service

方法二

vi /etc/resolvconf/resolv.conf.d
添加以下内容:
nameserver 114.114.114.114
nameserver 8.8.8.8
保存
resolvconf

修改网卡名称为 eth0

vi /etc/default/grub
修改以下内容:
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"
grub-mkconfig -o /boot/grub/grub.cfg
重启

对文件操作 Operation not permitted

解除文件的锁定属性:chattr -i [file]

sysctl -p 时报错:error: permission denied on key

检查 /etc/sysctl.conf 是否正确

如果是 OpenVZ 主机,请换成 XEN 或 KVM 主机

make 编译陷入死循环

检查系统时间是否准确


标签: 手记

Comments