Linux 安装 FFmpeg

参考

Ubuntu

sudo apt install ffmpeg apt包

sudo snap install ffmpeg snap包

ffmpeg -version

Centos8

安装sdl软件包

SDL(Simple DirectMedia Layer)是一个自由的跨平台的多媒体开发包,

适用于 游戏、游戏SDK、演示软件、模拟器、MPEG播放器和其他应用软件

没有sdl包的情况下安装ffmpeg时,dnf会提示缺少libSDL2-2.0.so.0()

https://mirrors.aliyun.com/centos/8/PowerTools/x86_64/os/Packages/SDL2-2.0.10-2.el8.x86_64.rpm

安装rpmfusion仓库

dnf install https://download1.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm 

如果没有rpmfusion这个仓库,安装ffmpeg时dnf会提示找不到匹配

dnf包管理工具安装ffmpeg

dnf install ffmpeg

ffmpeg -version

Centos7

RPM Fusion存储库

参考 How to Install and Use FFmpeg on CentOS 7

#依赖epel存储库,安装epel存储库
sudo yum install epel-release -y
sudo yum update -y

#安装启用RPM Fusion
sudo yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm

#安装ffmpeg 
sudo yum install ffmpeg ffmpeg-devel

#查看版本
ffmpeg -version
ffmpeg version 3.4.8 Copyright (c) 2000-2019 the FFmpeg developers

经测试这个仓库速度很慢

Nux Dextop YUM 存储库

参考 How to Install FFmpeg on CentOS

#依赖epel存储库,安装epel存储库
sudo yum install epel-release -y
sudo yum update -y

#安装Nux Dextop存储库
sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm

#安装ffmpeg
sudo yum install ffmpeg ffmpeg-devel -y

#查看版本
ffmpeg -version
ffmpeg version 2.8.15 Copyright (c) 2000-2018 the FFmpeg developers

经测试这个仓库速度有时候也很慢

源码编译安装ffmpeg

Ubuntu 卸载多余的内核版本

参考

安装包安装卸载方式

  • 1.sudo dpkg –get-selections | grep ‘linux’
  • 2.sudo apt purge + image/headers名称

手动安装卸载方式

  • 1.删除/lib/modules/目录中以内核版本号为名称的目录
  • 2.删除/usr/src/linux/目录中并不需要的内核源码
  • 3.删除/boot目录中启动内核的和内核的映像文件
  • 4.sudo update-grub,更新内核启动列表

PHP如何获取HTTP请求(内容)

参考

写这篇文章的起因,逛论坛读到一位博主的成长感悟,说他面试,被一个问题卡住了。PHP接受GET,POST请求分别$_GET,$_POST或$_REQUEST ,那么PHP如何接受PUT,PATCH,DELETE,OPTIONS请求。

引申问题PHP如何处理(接收)HTTP请求?

前置知识只是HTTP请求方法有哪些?https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods

HTTP1.0: GET POST HEAD
HTTP1.1: GET POST HEAD OPTIONS PUT PATCH DELETE TRACE 
HTTP2.0: GET POST HEAD OPTIONS PUT PATCH DELETE TRACE

PHP原生方法如何获取请求参数

$_GET,$_POST,$_REQUEST,file_get_content('php://input')

GET请求

GET query param $_GET $_REQUEST 可以获取

GET x-www-form-urlencoded php://input 可以获取

GET Form-data php://input 可以获取

GET application/json php://input 可以获取

POST请求

POST query param $_GET 和 $_REQUEST 可以获取

POST x-www-form-urlencoded $_POST $_REQUEST php://input 可以获取

POST Form-data $_POST $_REQUEST 可以获取

POST application/json php://input 可以获取

PUT 请求

PUT query-param $_GET 和 $_REQUEST 可以获取

PUT x-www-form-urlencoded php://input 可以获取

PUT form-data php://input 可以获取

PUT application/json php://input 可以获取

PATCH 请求

PATCH query-param $_GET 和 $_REQUEST 可以获取

PATCH x-www-form-urlencoded php://input 可以获取

PATCH form-data php://input 可以获取

PATCH application/json php://input 可以获取

DELETE 请求

DELETE query-param $_GET 和 $_REQUEST 可以获取

DELETE x-www-form-urlencoded php://input 可以获取

DELETE form-data php://input 可以获取

DELETE application/json php://input 可以获取

Laravel框架如何处理HTTP请求

支持的请求方法和数据交互类型

请求类型支持的请求方法说明
query paramGET,POST,PUT,DELETE,PATCH,OPTIONS查询字符串, 即url ? 后边的参数&和=拼接
url带数值GET,POST,PUT,DELETE,PATCH,OPTIONS通过/分割的 示例/xxx.com/user/1 1就是参数值通过/分割的 示例/xxx.com/user/1 1就是参数值
form-dataPOSTmultipart/form-data 支持二进制数据上传文件必须使用此类型
x-www-form-urlencoded (form)POST,PUT,DELETE,PATCH,OPTIONSapplication/x-www-form-urlencoded 数据被编码成以 ‘&’ 分隔的键-值对
appliction/jsonGET,POST,PUT,DELETE,PATCH,OPTIONSjson类型

获取方法

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
    /**
     * 存储一个新用户
     *
     * @param  Request  $request
     * @return Response
     */
    public function store(Request $request,$id)
    {   
        //接受所有类型参数,无法获取上传文件
        $name = $request->input('name');
        //仅能接受查询字符串参数,?号后的参数
        $name = $request->query('name');
        //接受所有类型参数,包含上传文件,动态属性获取,触发__get()魔术方法
        $name = $request->name;
        //获取上传文件
        $file = $request->file('file');
        //同input是底层Symfony提供的方法,无法获取上传文件
        $name = $request->get('name');
        //获取路由参数,直接访问注入的$id变量
        dump($id);
        //获取原始输入数据symfony提供的方法,等于原生php的file_get_content('php://input')
        $request->getContent() 
    }
}

原理和知识总结

  • $_GET 可以获取所有类型的query param(url传参数)
  • php://input 可以获取所有请求Body 的内容, 除post请求的form-data
  • $_POST 可以获取POST 请求的 form-data 和 x-www-form-urlencoded

laravel使用了symfony的HTTP请求类获取去请求,底层还是通过PHP超全局变量来获取请求参数

Symfony\Component\HttpFoundation\Request
/**
     * Creates a new request with values from PHP's super globals.
     *
     * @return static
     */
    public static function createFromGlobals()
    {
        //使用php超全局变量获取请求数据
        $request = self::createRequestFromFactory($_GET, $_POST, [], $_COOKIE, $_FILES, $_SERVER);

        if ($_POST) {
            $request->request = new InputBag($_POST);
        } elseif (0 === strpos($request->headers->get('CONTENT_TYPE'), 'application/x-www-form-urlencoded')
            && \in_array(strtoupper($request->server->get('REQUEST_METHOD', 'GET')), ['PUT', 'DELETE', 'PATCH'])
        ) {
            parse_str($request->getContent(), $data);
            $request->request = new InputBag($data);
        }

        return $request;
    }

Laravel crontab 配置问题

参考

Lnmp环境运行时一般会指定用户www运行。因此配置定时任务的时候,也需要使用www用户来运行定时任务,否则会造成laravel生成的日志是其它用户,导致laravel运行报错,没有日志的可写权限。

配置方法

1.获取当前系统PHP的环境变量

执行 env > /tmp/env.output 然后 cat /tmp/env.output

找到PATH

PATH=/usr/local/mysql/bin:/usr/local/php/bin:/usr/local/nginx/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

2.设置定时任务 -u 参数指定用户 命令参考 给www用户的crontab 添加环境变量PATH

crontab -u www -e

将PATH添加到crontab的第一行,

换行后将laravel的定时任务代码加上,截图中第二行, 制定了环境变量后,可以只写php 不用写php的完整路径 /usr/local/php/bin/php

3,不能遗漏的关键一步

在home目录下创建对应用户的文件目录,www 并修改用户权限为www 最后重启定时任务

cd home && mkdir www && chown -R www.www www
service crond restart

如果没有该用户的目录,crontab日志会有报错

(CRON) ERROR chdir failed (/home/www): No such file or directory

知识总结

Crontab详细介绍可以头部的参考链接,和《鸟哥linux私房菜-基础学习篇》第16章

任务调度分为两类: 系统任务调度 和 用户任务调度 

系统任务配置/etc/crontab

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

前四行是用来配置crond任务运行的环境变量,

  • 第一行SHELL变量指定了系统要使用哪个shell,这里是bash,
  • 第二行PATH变量指定了系统执行命令的路径,
  • 第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户,
  • 第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。
  • 第五行 前五个星号代表时间, user-name代表执行的用户,command代表执行的命令

crontab – u xxx -e 是用来设置用户系统任务调度的

所有用户定义的crontab文件都被保存在/var/spool/cron目录中。其文件名与用户名一致,使用者权限文件如下

/etc/cron.deny     该文件中所列用户不允许使用crontab命令
/etc/cron.allow    该文件中所列用户允许使用crontab命令
/var/spool/cron/   所有用户crontab文件存放的目录,以用户名命名

注意单独用户的crontab配置需要设置 PATH 并创建对应用户目录

service crond start    # 启动服务
service crond stop     # 关闭服务
service crond restart  # 重启服务
service crond reload   # 重新载入配置
service crond status   # 查看状态

Uubntu 常用软件

系统快照软件Timeshift

https://linux.how2shout.com/how-to-install-timeshift-on-ubuntu-22-04-20-04-lts

GUI主题

硬件驱动

工具类

快捷方式编写

WPS设置语言不跟随系统

新建一个空白文档,右上角A图标打开设置语言功能 ,不跟随系统,设置为中文

flameshot添加快捷方式

指令 flameshot gui  如图

chrome

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

qbittorrent

sudo add-apt-repository ppa:qbittorrent-team/qbittorrent-stable
sudo apt-get update && sudo apt-get install qbittorrent

开发工具

vscode

filezilla apt install filezilla

virtualbox

mysql-workbench 数据库管理工具

postman

remmina远程终端软件

dia画图软件

sudo apt-get install dia

Jmeter压测

redis-manager

sudo snap install redis-desktop-manager --edge

redinav redis-gui工具

wireshark抓包工具

umbrello uml建模工具

sudo apt install umbrello

phpstorm

DBeaver 数据库管理工具

Nodepad++

sudo snap install notepad-plus-plus

Typora

wget -qO - https://typora.io/linux/public-key.asc | sudo apt-key add -

# add Typora's repository
sudo add-apt-repository 'deb https://typora.io/linux ./'
sudo apt-get update

# install typora
sudo apt-get install typora

安装钉钉

https://github.com/nashaofu/dingtalk

https://github.com/nashaofu/dingtalk/issues/382

原型工具

pencil

github release 加速下载网站

http://tool.mkblog.cn/github/

https://hao.su/3415/

国外资源加速下载的方案

原理同百度网盘和迅雷的离线下载,

首先购买一台国外的vps,要求带宽不能太差,同时,国内连这个vps也不能太慢

1先将资源下载到vps上

2用ftp或scp将文件下载到本地

Markdown查看工具

wechat 安装

参考

注意事项

安装TopIcons Plus 商店里有

解决中文乱码

不知道从哪个版本开始,Ubuntu安装wine QQ后中文会变成方块。。。原因是wine QQ使用文泉驿字体, 此字体已不随机附带, 随机字体为Noto系列字体。

解决方法为安装对应字体

sudo apt install fonts-wqy-microhei fonts-wqy-zenhei

需注意文泉驿字体归于universe分支, 意味不受Canonical支援, 可能需要在apt sources中添加universe分支

sudo add-apt-repository universe

希望可以将字体并入dependencies中, 免去此麻烦。

解决微信无法发送图片

sudo apt install libjpeg62:i386

TIM 安装 PPAPI FLASH

sudo apt-get install pepperflashplugin-nonfree
sudo update-pepperflashplugin-nonfree --install

微信更新问题

如果出现微信提示跟新问题执行这一条语句即可 可能存在问题。

 wget -qO- https://deepin-wine.i-m.dev/setup.sh | sudo sh

覆盖文件升级方式,这个简单有效

https://blog.csdn.net/ysy950803/article/details/104045975

存在问题图片一直发送中,发不出去

Ubuntu 20.04 安装wechat

wget -O- https://deepin-wine.i-m.dev/setup.sh | sh

sudo apt-get install deepin.com.wechat

ubuntu20.04

推荐使用这个deepinwine

卸载重装后如果出现依赖问题参考

https://github.com/zq1997/deepin-wine/issues/220

新版 deepin-wechat 截图崩溃

ubuntu 安装JDK

https://blog.csdn.net/weixin_38924500/article/details/106215048

安装搜狗输入法

ubuntukylin源

官网版,20.04测试无效不好用,太坑了

https://pinyin.sogou.com/linux/help.php

amd64下载地址

Ubuntu20.04踩坑记录

无法进入设置中心,搜所不到setting

sudo dpkg -l|grep gnome-control-center

sudo dpkg -l|grep ubuntu-desktop

查询软件是否存在,如果不存在则执行重装

sudo apt install --reinstall gnome-control-center //重装控制中心

sudo apt -f install ubuntu-desktop //安装ubuntu桌面

卸载liboffices

https://jingyan.baidu.com/article/bad08e1e244b2109c85121f1.html

Snap core 无法更新解决 snap has no updates available

//更新一下所有软件,排除更新问题
sudo apt update && sudo apt upgrade
//杀死gnome-software进程
killall gnome-software
//重启电脑
reboot 

参考链接

https://askubuntu.com/questions/1321217/ubuntu-store-snap-update-fails

https://askubuntu.com/questions/1321097/snapd-runtime-environment-update

ubuntu22.04 支持华硕笔记本开启背光键盘

fn+f7 亮灯建

ubuntu pro 更新提示问题

https://askubuntu.com/questions/1452299/im-getting-the-error-the-following-security-updates-require-ubuntu-pro-with-e

最简单的方法删除

mkdir -p relocated_apt
sudo mv /etc/apt/apt.conf.d/20apt-esm-hook.conf ~/relocated_apt/.

引导修复工具

#安装
sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install -y boot-repair

#卸载
sudo apt-get -y autoremove boot-repair
sudo add-apt-repository -r ppa:yannubuntu/boot-repair
sudo apt-get update

装双系统时,可以用来在grub中添加或修复windows boot项

Surface Go 安装ubuntu

将 Linux 放在 Microsoft Surface Go 上

https://github.com/linux-surface/linux-surface

常用笔记索引

TASK TO DO LIST

我在工作中存在的问题

Linux

Linux软件管理 常用命令

Linux编译安装

Linux进程管理 常用命令和工具

Linux网络调试 常用命令和分析工具

Linux日志管理 常用命令和工具

Linux网络文件传输 常用命令工具

常用防火墙指南

生产环境部署配置

jemalloc内存分配工具

Web服务器

Nginx系服务器

Apache服务器

负载均衡指南

LVS

Keepalived

Keepalived 原理介绍和配置实践

Nginx upstream

语言知识体系

PHP知识框架

Go开发生态 常用笔记

前端开发生态 常用笔记本

Shell学习笔记

Lua脚本学习笔记

正则表达式

数据库和中间件

关系型数据库(RDBMS)

关系型数据库设计知识

Mysql常用

分库分表指南

Redis常用

Memcached常用

全文索引指南

Elasticsearch常用

MongoDB常用(ES可替代)

消息队列中间件(Message Quene)指南

RabbitMQ常用

Kafka常用

RocketMQ常用

开发工具软件

Git常用命令

navicat-premium 延期试用和激活

Jmeter工具使用指南

VSCode使用总结笔记

开发规范和约定

语义化版本

数据迁移使用规范

网络编程

网络基础知识及概念

服务端网络编程知识框架

数据结构和算法

学习笔记

软件设计

软件架构知识索引

软件开发定律和心得

如何编写高质量代码

在框架中如何封装业务和功能代码

如何设计SDK和类库

API设计

Api设计经验总结

架构总结

其它

安全指南

IP查询工具

网络搜集的编程相关电子书

鸟哥Linux私房菜

电子书