为什么使用Linux

搜索 why linux,出现的第一个结果是

1. High security 更高的安全性

这点确实,在服务器还是桌面上,Linux使用包管理器安装程序,减少了用户自己下载到病毒文件的可能性。

2. High stability 更高的稳定性

在服务器上确实如此,但在桌面上却一言难尽,很有可能用着用着就进不去系统了

3. Ease of maintenance 更易维护 确实如此

4. Runs on any hardware 硬件兼容性高 确实如此

5. Free 免费

是这样,但Windows也能是Free的

6. Open Source 开源

跟普通用户没什么关系

7. Ease of use 更易使用

这条就是在扯淡了。

与 Linux 仅供极客使用的一般信念相反,它现在已成为用户友好型用户,并且具有良好的图形用户界面 (GUI)。

一点也不良好

如果您使用的是一些仅在 Windows 上运行的应用程序,您可以安装Wine (Windows 模拟器),使用该应用程序可以在 Linux 系统上运行这些应用程序。

wine这玩意能用?

8. Customisation 自定义程度高

确实,桌面都能玩出一堆花样

9. Education 教学

使用Linux可以学到很多东西

10. Support 支持性

可能吧,中文社区缺乏

其它文章说来说去也是这几点。但我认为Linux较Windows更好的只有三点

  • 用于服务器,占有更少资源,性能更高
  • 用于桌面,更适合程序员,做开发更合适方便
  • 用于桌面,更玩出更多花样,就是为了折腾

我以前就属于第三点了

不过现在没有那个精力了。懒得折腾了

apache pagespeed配置

apache:

<IfModule pagespeed_module>
    ModPagespeed on
    ModPagespeedEnableFilters inline_css
    ModPagespeedEnableFilters lazyload_images
    AddOutputFilterByType MOD_PAGESPEED_OUTPUT_FILTER text/html
    ModPagespeedEnableFilters convert_gif_to_png
    ModPagespeedEnableFilters convert_jpeg_to_progressive
    ModPagespeedEnableFilters convert_jpeg_to_webp
    ModPagespeedEnableFilters convert_png_to_jpeg
    ModPagespeedEnableFilters convert_to_webp_lossless
    ModPagespeedEnableFilters inline_images
    ModPagespeedEnableFilters recompress_images
    ModPagespeedEnableFilters recompress_jpeg
    ModPagespeedEnableFilters recompress_png
    ModPagespeedEnableFilters recompress_webp
    ModPagespeedEnableFilters jpeg_subsampling
    ModPagespeedEnableFilters remove_comments 
    ModPagespeedEnableFilters Combine_css
    ModPagespeedEnableFilters rewrite_javascript,rewrite_css
    ModPagespeedEnableFilters collapse_whitespace,elide_attributes
    ModPagespeedFileCacheInodeLimit 500000
    ModPagespeedFileCachePath "/var/cache/mod_pagespeed/"
</IfModule>

Ubuntu 20.04 / Debian设置 swap 交换分区

创建 swap 文件

fallocate -l 2G /swapfile

更改权限为root可读

chmod 600 /swapfile

将该文件转为交换分区

mkswap /swapfile

启用该文件交换分区

swapon /swapfile

查看启用的交换分区

swapon --show

设置开机后自动启动这个交换分区

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

ok!

参考

配置 oh my zsh

首先安装好 zsh

apt install -y zsh git

然后把 oh my zsh 克隆到本地,因为我的国内服务器访问不到github,所以要改一下地址,改成cnpm的加速镜像地址

git clone https://github.com.cnpmjs.org/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh

Crontab 任务不执行原因排查

首先看一下 cron 的任务日志,debian默认在 /var/log/syslog 文件

输入 grep CRON /var/log/syslog 可以看到 cron 的执行情况,如果有运行任务,则会输出这个任务的命令和执行时间

如果没有出现任务命令和时间,则表示没执行过这个任务,那就是 cron 配置错误

如果有,则要看一下是不是任务执行中出错,可以在 cron 中指定一个输出文件,像这样

01 14 * * * /home/joe/myscript >> /home/log/myscript.log 2>&1

这样则 执行脚本的输出信息会到 /home/log/myscript.log 文件。就可以看到是脚本中哪里出错了

Xshell设置秘钥登录并使用rz上传文件

scp又出毛病了,百度了一圈发现可以用Xshell+rz上传

xshell 下载链接: Free for Home/School – Xshell and Xftp Free Licensing。填写邮箱查收下载链接

打开xshell ,填好ip后在用户身份验证处选择 public key

选择导入,选择生成好的 id_rsa文件就好了

连上服务器后输入 rz ,就可以选择文件上传

Debian升级到testing后切换内核

重新安装内核

apt install linux-image-amd64

然后 reboot 重启 即会自动切换到新内核

列出安装的linux内核
dpkg --list | grep linux-image

执行 apt autoremove 自动卸载掉旧内核

解决Debian 升级到testing后无法输入中文

原本直接安装的腾讯云的Debian版本是能输入中文的,有中文字体,升级到testing后无法在远程中输入中文

重新配置 locales 软件包:

dpkg-reconfigure locales

然后用方向键移动,空格键选择上 en_US 开头的几个选项和 zh_CN 开头的几个选项

然后tab键选择 ok ,然后选择默认语言,选择 en_US UTF-8

即可

Mariadb Server 10.5 创建数据库、添加用户、给予权限

创建数据库

CREATE DATABASE 数据库名称 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

创建用户

CREATE USER 'user'@localhost IDENTIFIED BY 'password';  ## 本地访问
CREATE USER 'user'@'%' IDENTIFIED BY 'password';  ## 任意ip访问

给权限

GRANT ALL PRIVILEGES ON 数据库名.* TO '用户名'@localhost; ## 给单独数据库的权限

GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'password'; ## 给全部权限

Ubuntu 20.04 Server装完系统需要做的一些事

打开ufw

ufw allow OpenSSH ## 打开SSH端口

ufw enable ## 启动 ufw

ufw status ## 查看 ufw 状态

ufw allow 8888/tcp ## 放行8888端口

安装pip

apt install python3-pip
pip3 config set global.index-url https://mirrors.ustc.edu.cn/pypi/web/simple

安装lamp

apt install apache2
apt install mysql-server ##mariadb-server

安装PHP

apt install php libapache2-mod-php php-mysql php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip
systemctl restart apache2

设置mysql

mysql_secure_installation

mysql

创建数据库
CREATE DATABASE zrdn DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

创建用户
CREATE USER 'zrdn'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

给权限
GRANT ALL ON zrdn.* TO 'zrdn'@'%';

安装certbot自动配置HTTPS证书

snap install core; sudo snap refresh core
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot
certbot --apache

ufw 放行 apache 端口

ufw allow in "Apache Full" ## 80/443

添加用户

adduser sammy

usermod -aG sudo sammy ## 给 sudo 权限

配置用户执行sudo命令不用输入密码

1.配置单用户不用输入密码

linuxconfig ALL=(ALL) NOPASSWD:ALL

2.配置所有sudo组的用户不用输入密码

%sudo   ALL=(ALL:ALL) NOPASSWD:ALL

WordPress错误:[] cURL error 60: SSL certificate problem: unable to get local issuer certificate

原因:SSL证书缺少根证书

如果你是自己上传的证书,那就是只设置了秘钥和域名证书

如果下载的SSL证书有三个文件

ca_bundle.crt 根证书

certificate.crt 域名证书

private.key 秘钥

如果是Apache服务器,则是这样设置

SSLEngine                on
SSLCertificateFile       /etc/ssl/certificate.crt
SSLCertificateKeyFile    /etc/ssl/private.key
SSLCertificateChainFile  /etc/ssl/ca_bundle.crt

如果是Nginx服务器,则要把 certificate.crt 和 ca_bundle.crt 文件合并

cat certificate.crt ca_bundle.crt  certificate.crt

然后这样设置

ssl                  on;
ssl_certificate      /etc/ssl/certificate.crt; 
ssl_certificate_key  /etc/ssl/private.key;
    

Ubuntu 彻底卸载数据库

首先在终端中查看MySQL的依赖项

dpkg --list|grep mysql

卸载

apt-get remove mysql-common

清除残留数据

dpkg -l|grep ^rc|awk '{print$2}'|sudo xargs dpkg -P

继续查找安装的相关包,卸载

dpkg --list|grep mysql

Centos 8 服务器/VPS 安装桌面环境(GUI)并远程连接

废话不多说,直接ssh远程连接上服务器,开始安装桌面环境

dnf --enablerepo=epel group -y install "Xfce" "base-x"

我这里选择安装xfce,占用资源较少。

接着安装xrdp,用来提供远程连接

dnf install xrdp 

启动xrdp服务并且开启开机自启

systemctl enable xrdp --now

然后就可以用Windows自己的远程桌面连接 连接服务器了,计算机处输入IP,用户名不填,默认端口3389!

记得要放行服务器的3389端口哦!比如腾讯云要在网站里安全组放行,如安装有宝塔,要在宝塔里也放行

然后就看到xrdp的登陆界面了

账户和密码填服务器的,比如账户是root

然后就进去了

我也不知道为啥这里进去是gnome了。。。。

不过也还好,不是特别卡,勉强凑合

参考

Bash添加多行到文件的方法

cat <<EOT >> greetings.txt
line 1
line 2
EOT

方法二:

echo "line 1
line 2" >> greetings.txt

参考:

shell – How to append multiple lines to a file – Unix & Linux Stack Exchange

Gunicorn创建systemd Socket 和Service 文件

/etc/systemd/system/gunicorn.socket

[Unit]
Description=gunicorn socket

[Socket]
ListenStream=/run/gunicorn.sock

[Install]
WantedBy=sockets.target

/etc/systemd/system/gunicorn.service

[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target

[Service]
User=root
Group=nobody
WorkingDirectory=/root/myprojectdir
ExecStart=/root/myprojectdir/myprojectenv/bin/gunicorn \
          --access-logfile - \
          --workers 3 \
          --log-level debug \
          --bind unix:/run/gunicorn.sock \
          myproject.wsgi:application


[Install]
WantedBy=multi-user.target
systemctl start gunicorn.socket
systemctl enable gunicorn.socket

修改systemd文件后需要

systemctl daemon-reload