============
== 白菜 ==
============
一个勤奋的代码搬运工!

Ubuntu使用systemd配置开机运行service

ubuntu

systemd

Systemd 是 Linux 系统工具,用来启动守护进程,已成为大多数发行版的标准配置。

由来

历史上,Linux 的启动一直采用init进程。

下面的命令用来启动服务。

    $ sudo /etc/init.d/apache2 start
    # 或者
    $ service apache2 start

这种方法有两个缺点。

一是启动时间长。init进程是串行启动,只有前一个进程启动完,才会启动下一个进程。

二是启动脚本复杂。init进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。

Systemd 概述

Systemd 就是为了解决这些问题而诞生的。它的设计目标是,为系统的启动和管理提供一套完整的解决方案。

根据 Linux 惯例,字母d是守护进程(daemon)的缩写。 Systemd 这个名字的含义,就是它要守护整个系统。

使用了 Systemd,就不需要再用init了。Systemd 取代了initd,成为系统的第一个进程(PID 等于 1),其他进程都是它的子进程。

    $ systemctl --version

上面的命令查看 Systemd 的版本。

使用 systemd 实现开机执行 Shell 脚本

通用操作步骤

创建希望开机马上执行的脚本,本文举例脚本存放位置为 /home/navxin/Example/startup.sh,脚本内容如下:

#!/bin/bash
# 开机时在脚本的同级目录下创建一个名为 StartupTouch.txt 的文件
touch /home/navxin/Example/startup.sh.txt

开机执行的脚本需增加可执行权限才能被 systemd 运行,使用如下命令

chmod u+x /home/navxin/Example/startup.sh
chmod g+x /home/navxin/Example/startup.sh

进入 systemd 放置 service 的目录,在该目录下可看到大量服务配置文件,命令如下

# 进入 systemd 的 service 目录
cd /usr/lib/systemd/system
# 查看文件列表
ls -al
在该目录创建一个新的 .service 文件用于配置开机启动脚本,本例中的文件名为 StartupExample.service,所执行命令和文件中的配置内容如下:

创建服务配置文件

sudo touch /usr/lib/systemd/system/StartupExample.service

以下为 StartupExample.service 配置文件的内容

Read more...

安装docker及简单的使用

Docker

docker的介绍,里面包括了3个基本概念

1.1 docker主要由镜像和容器构成

镜像(Image):docker镜像好比一个模板,相当于一个文件系统

容器(Container):容器需要通过镜像来创建。镜像和容器就像是面向对象中的类和实例一样。容器可以被创建/启动/停止/删除等

仓库(Repository):仓库就是存放镜像的地方,分为私有仓库和公有仓库。类似git

1.2 docker的运行原理

docker是一个Client-Server结构的系统,docker的守护进程运行在主机上,通过socket从客户端访问。dockerServer接收到docker-Client的指令,就会执行这个命令。

一. Mac 系统 docker 的安装

1.1 homebrew的cask应支持Docker for Mac,所以可以直接安装 brew cask install docker

1.2 也可以直接到官网下载,https://download.docker.com/mac/stable/Docker.dmg

1.3 docker的参考文档:https://docs.docker.com

1.4 dockerhub查找镜像源地址:https://hub.docker.com

二. docker的使用

1.1 查看版本

docker --version

docker-compose --version 

docker-machine --version

1.2 查看docker系统信息(包括镜像和容器的数量等)

docker info

1.3 帮助命令

docker help

1.4 查看 cpu的状况

docker stats

三. docker的基本命令

镜像相关命令:

1.1 查看镜像可用版本(nginx为例)

docker search nginx

1.2 下载一个镜像

docker pull nginx:latest #(:后面跟镜像版本)

1.3 运行一个nginx服务器

docker run -d -p 81:80 --name webserver nginx

可选项:

Read more...

ubuntu上安装firefox

firefox ubuntu

卸载原来Firefox

sudo apt-get purge firefox

或 sudo apt-get remove firefox

下载最新Firefox二进制压缩包

wget -O ~/firefox.tar.bz2 "https://download.mozilla.org/?product=firefox-latest&os=linux64"

解压并移动到/opt目录

sudo tar xjf ~/firefox.tar.bz2 -C /opt/

创建软链接

sudo ln -s /opt/firefox/firefox /usr/lib/firefox/firefox

在/usr/lib/中创建一个firefox可执行链接文件,该文件指向/opt中firefox可执行主程序位置。

启动firefox

终端启动Firefox

firefox

创建桌面快捷方式

进入/usr/share/applications目录

touch firefox.desktop

nano firefox.desktop

添加内容:

[Desktop Entry]
Name=firefox
Comment=firefox
Exec=/opt/firefox/firefox
Icon=/opt/firefox/browser/chrome/icons/default/default128.png
Terminal=false
Type=Application
Categories=Application;
Encoding=UTF-8
StartupNotify=true

卸载Firefox

通过上面方法安装的Firefox,如果想删除,可以在终端种输入以下命令:

sudo rm -rf /opt/firefox
sudo rm /usr/share/applications/firefox.desktop

如何知道谁在ping我?

tcpdump linux Ubuntu

tcpdump 是 Linux 上可用的最强大和使用最广泛的 命令行 数据包嗅探器(包分析器)工具。

在您要监控的计算机的终端应用程序中:

sudo tcpdump -i ethX icmp and icmp[icmptype]=icmp-echo

选项:

-n avoid a (potentially slow) reverse DNS query
−i interface
icmp[icmptype]=icmp-echo    To print all ICMP packets that are echo requests/replies

它将开始侦听 ethX 并等待到达的数据包。

示例:我有 2 台 pc win7 192.168.0.8 , Ubuntu 192.168.0.57 它将监控到达的数据包: 在Win上:

ping 192.168.0.57

在 Ubuntu 上:

tcpdump -i eth0 icmp and icmp[icmptype]=icmp-echo -n

参考:nixCraft[1]

使用 df 命令查看 Linux 上的可用磁盘空间

df

磁盘空间已经不像计算机早期那样珍贵,但无论你有多少磁盘空间,总有耗尽的可能。计算机需要一些磁盘空间才能启动运行,所以为了确保你没有在无意间用尽了所有的硬盘空间,偶尔检查一下是非常必要的。在 Linux 终端,你可以用 df 命令来做这件事。

df 命令可以显示文件系统中可用的磁盘空间。

要想使输出结果易于阅读,你可以加上 –human-readable(或其简写 -h)选项:

$ df --human-readable
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       1.0T  525G  500G  52% /

在这个例子中,计算机的磁盘已经用了 52%,还有 500 GB 可用空间。

由于 Linux 从整体上看待所有挂载设备的文件系统,df 命令会展示出连接到计算机上的每个存储设备的详细信息。如果你有很多磁盘,那么输出结果将会反映出来:

$ df --human-readable
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       110G   45G   61G  43% /
devtmpfs         12G     0   12G   0% /dev
tmpfs            12G  848K   12G   1% /run
/dev/sda1       1.6T  1.3T  191G  87% /home
/dev/sdb1       917G  184G  687G  22% /penguin
/dev/sdc1        57G   50G  4.5G  92% /sneaker
/dev/sdd1       3.7T  2.4T  1.3T  65% /tux

在这个例子中,计算机的 /home 目录已经用了 87%,剩下 191 GB 的可用空间。

Read more...

Ubuntu安装 Zlib

Zlib linux Ubuntu

如果你尝试在 Ubuntu 上安装 zlib,它会抛出 “unable to locate package zlib” 错误。

Zlib 是一个用于数据压缩的开源库。

作为使用者,你可能会遇到需要安装 zlib(或 zlib-devel 包)作为另一个应用程序的依赖项的情况。

但问题来了,如果你尝试在 Ubuntu 上安装 zlib,它会抛出 “unable to locate package zlib” 错误。

    sudo apt install zlib
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    E: Unable to locate package zlib

为什么会看到这个 Ubable to locate package 错误呢?因为没有名为 zlib 的包。

如果你 使用 apt search 命令,你会发现有几个包可以让你安装:zlib 1g 和 zlib 1g-dev。当你知道这些后,只需一个 apt 命令就可以安装它们。

Read more...

免费CDN:jsDelivr+Github 使用方法

jsDelivr Github CDN

CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。

用 jsDelivr 免费CDN托管静态资源

国内的免费 CDN 不少,但需要备案 国外的免费 CDN 也不少,但在国内速度慢 但 jsDelivr 是一个特殊的存在,虽然是一家国外 CDN 但是有国内节点

jsDelivr官网: https://www.jsdelivr.com

放在Github的资源在国内加载速度比较慢,因此需要使用CDN加速来优化网站打开速度,jsDelivr + Github便是免费且好用的CDN,非常适合博客网站使用。

使用步骤

1、新建Github仓库

2、克隆Github仓库到本地

执行以下命令:

git clone 一键复制的仓库地址

3、上传资源

复制需要上传的资源到本地git仓库(注:jsDelivr不支持加载超过20M的资源),在本地git仓库目录下,执行以下命令:

git status                    #查看状态
git add .                     #添加所有文件到暂存区
git commit -m '第一次提交'      #把文件提交到仓库
git push                      #推送至远程仓库

4、发布仓库

点击release发布

自定义发布版本号 5、通过jsDelivr引用资源

使用方法:https://cdn.jsdelivr.net/gh/你的用户名/你的仓库名@发布的版本号/文件路径 例如:

https://cdn.jsdelivr.net/gh/baicaime/meBlog/index.html
https://cdn.jsdelivr.net/gh/baicaime/meBlog/favicon-16x16.png
https://cdn.jsdelivr.net/gh/clin003/cdn/[email protected]/css.css

注意:版本号不是必需的,是为了区分新旧资源,如果不使用版本号,将会直接引用最新资源,除此之外还可以使用某个范围内的版本,查看所有资源等,具体使用方法如下:

// 加载任何Github发布、提交或分支
https://cdn.jsdelivr.net/gh/user/repo@version/file

// 加载 jQuery v3.2.1
https://cdn.jsdelivr.net/gh/jquery/[email protected]/dist/jquery.min.js

// 使用版本范围而不是特定版本
https://cdn.jsdelivr.net/gh/jquery/[email protected]/dist/jquery.min.js
https://cdn.jsdelivr.net/gh/jquery/jquery@3/dist/jquery.min.js

// 完全省略该版本以获取最新版本
https://cdn.jsdelivr.net/gh/jquery/jquery/dist/jquery.min.js

// 将“.min”添加到任何JS/CSS文件中以获取缩小版本,如果不存在,将为会自动生成
https://cdn.jsdelivr.net/gh/jquery/[email protected]/src/core.min.js

// 在末尾添加 / 以获取资源目录列表
https://cdn.jsdelivr.net/gh/jquery/jquery/

// 刷新cnd资源 将域名中的 cdn 改为 purge 即可
https://purge.jsdelivr.net/gh/baicaime/meBlog/index.html

// 使用最新版本资源
https://purge.jsdelivr.net/gh/baicaime/meBlog@latest/index.html

Ubuntu安装 qbittorrent-nox并启动

qBittorrent Ubuntu bt

Qbittorrent-Nox

要在Linux上使用Qbittorrent Web UI,你无需安装完整的Qbittorent桌面应用程序,有一个基于终端的Qbittorrent应用程序可用,它被称为Qbittorrent-Nox。

注意:Web UI功能不仅限于Qbittorrent-Nox应用程序,此功能还可以与传统的Qbittorent Linux桌面应用程序一起使用

安装qbittorrent

安装add-apt-repository命令

sudo apt-get update && sudo apt-get install software-properties-common -y

添加qbittorrent-nox的PPA软件源

sudo add-apt-repository ppa:qbittorrent-team/qbittorrent-stable

安装qbittorrent-nox(webui版)

sudo apt-get update && sudo apt-get install qbittorrent-nox

设置开机启动

通过rc.local完成

如果是Ubuntu-16.10及其之后的版本需要先按下面的文章完成设置后,开机启动才会生效

Ubuntu-18.04设置开机启动脚本 起因Ubuntu-16.10(不包括)之前的版本使用的是update-rc.d以及rc.local等方法设置开机启…

编辑rc.local脚本

nano /etc/rc.local

在exit 0前面(前一行)添加以下内容并保存

qbittorrent-nox -d

通过创建自定义服务实现

创建系统服务

sudo apt-get install nano -y && nano /etc/systemd/system/qbittorrent-nox.service

粘贴以下内容,并保存。

[Unit]
Description=qBittorrent-nox
After=network.target

[Service]
User=root
Type=simple
RemainAfterExit=yes
ExecStart=/usr/bin/qbittorrent-nox -d

[Install]
WantedBy=multi-user.target

启动qbittorrent-nox并创建服务配置

systemctl start qbittorrent-nox

设置开机自动启动qbittorrent-nox

systemctl enable qbittorrent-nox

查看qbittorrent-nox状态

Read more...

跨域方案Nginx配置

技术分享 跨域 CORS

什么是浏览器同源策略?

同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制。

同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。

如何实现跨域?

跨域是个比较古老的命题了,历史上跨域的实现手段有很多,我们现在主要介绍Nginx的跨域方案,其余的方案我们就不深入讨论了。

方便的跨域方案Nginx

nginx是一款极其强大的web服务器,其优点就是轻量级、启动快、高并发。

现在的新项目中nginx几乎是首选,我们用node或者go开发的服务通常都需要经过nginx的反向代理。

反向代理的原理很简单,即所有客户端的请求都必须先经过nginx的处理,nginx作为代理服务器再讲请求转发给node或者go服务,这样就规避了同源策略。

#进程, 可更具cpu数量调整
worker_processes  1;

events {
    #连接数
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    #连接超时时间,服务器会在这个时间过后关闭连接。
    keepalive_timeout  10;

    # gizp压缩
    gzip  on;

    # 直接请求nginx也是会报跨域错误的这里设置允许跨域
    # 如果代理地址已经允许跨域则不需要这些, 否则报错(虽然这样nginx跨域就没意义了)
    add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Headers X-Requested-With;
    add_header Access-Control-Allow-Methods GET,POST,OPTIONS;

    # srever模块配置是http模块中的一个子模块,用来定义一个虚拟访问主机
    server {
        listen       80;
        server_name  localhost;
        
        # 根路径指到index.html
        location / {
            root   html;
            index  index.html index.htm;
        }

        # localhost/api 的请求会被转发到192.168.0.103:8080
        location /api {
            rewrite ^/b/(.*)$ /$1 break; # 去除本地接口/api前缀, 否则会出现404
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://192.168.0.103:8080; # 转发地址
        }
        
        # 重定向错误页面到/50x.html
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

MAC命令快速模糊查找文件

mac命令行 mac find

find命令

描述:通过 find命令查找 语法:find ~ -iname “文件名*”

/**
* 比如我要查找一个以‘vue-’开头的.zip文件,
* 但是你忘了它的全名也忘了在那个文件夹,
* 查找范围是‘~’节点以内
* 就可以用这种方式进行模糊搜索
*/

 find ~ -iname "vue-*.zip"

/**
* 然后它就把所有包含符合条件的文件和路径都打印出来了
*/

find不但能查找文件,还能查找文件夹

/**
* 比如我要查找所有包含‘vue’的文件或文件夹
*/
find ~ -iname "*vue*"

/**
* 结果它找到了所有包含‘vue’的文件或文件夹
*/

find方式很简单但是需要一点专业知识,需要知道一些正则的基本常识,需要指定路径范围,搜索的名字需要加引号等等

mdfind命令

描述:通过 mdfind命令查找 语法:mdfind -name 文件名

/**
* 比如我要查找所有包含‘vue’的文件或文件夹
*/
mdfind -name vue

/**
* 看,我直接输入我要找的关键字‘vue’
* 就把所有文件和文件夹都输出出来了,是不是很方便
*/

mdfind 简单粗暴,没缺点,但有个前提是你mac电脑要支持Spotlight功能,不过也不用担心,一般mac默认是支持的

在 shell 中执行命令

你是找到这个文件或文件夹了,但是你想直接打开它,那么怎么打开呢,看下面

若要运行当前用户个人文件夹中的命令,请在前面加上文件夹说明符。例如,若要运行 MyCommandLineProg,请使用以下命令:

Read more...
Previous Page 6 of 8 Next Page