AHA

A depository for all kinds of configuration files and notes

Hexo 建站

Hexo 安装、配置

  • 安装 Hexo、并建站

    1
    2
    3
    4
    5
    6
    7
     # 安装 Hexo
    npm install -g hexo-cli
    # 初始化 Hexo
    hexo init <folder>
    cd <folder>
    # 安装 Hexo 依赖
    npm install
  • 启动站点:https://hexo.io/zh-cn/docs/server

    1
    2
    3
    4
    # 安装独立的服务器模块(也可以不注册依赖)
    npm install hexo-server --save
    # 启动服务器
    hexo server [-p <port>]
  • 部署站点

    1
    hexo deploy

Hexo 站点结构

  • _config.yml:配置信息
  • package.jsonHexo 模块 npm 配置文件
  • scaffolds:模板文件
    • 新建文章时,尝试根据布局参数寻找相应模板建立文章
  • source:资源
  • public
  • themes:主题文件夹,一个文件夹即一个主题

Hexo 主题结构

  • _config.yml:主题配置文件
    • 修改后会自动更新
  • languages:语言文件夹
  • layout:布局文件夹,存放主题模板文件
    • Hexo 内建 Swig 模板引擎,可另外安装 EJSHamlJadePug 插件支持
    • Hexo 根据模板文件扩展名决定模板引擎
  • scripts:脚本文件夹
    • 启动时,Hexo 会载入其中 JS 文件
  • source:资源文件夹
    • 除模板外的资源,如:CSSJS 均位于此处
    • _ 开头文件、文件夹和隐藏文件被忽略
    • 若文件可被渲染,则会被解析存储到 public 文件夹,否则直接拷贝

Hexo 命令

1
2
3
4
5
6
7
8
9
10
hexo init [folder]
hexo new [layout] <title> # 新建
hexo generate # 生成静态文件
hexo publish [layout] <filename> # 发布草稿
hexo deploy [-g] # 部署
hexo render <file1> [file2] [-o <output>] # 渲染文件
hexo migrate <type> # 从其他博客系统迁移
hexo clean # 清楚缓存、静态文件
hexo list <type> # 列出站点资料
hexo version
  • 更新配置、安装依赖(如:修改渲染引擎)之后,尝试清空缓存使生效
    • $ hexo clean
    • 删除 db.json 文件

Hexo 模块

  • Markdown 渲染
    • hexo-renderer-mark:建议立刻删除,渲染能力极差
    • hexo-renderer-markdonw-it:不好用
    • hexo-renderer-markdonw-it-plus:也不好用
    • hexo-renderer-pandoc:太重,需要 pandoc 支持
    • hexo-renderer-kramed:快用,快用

NPM 总述

npm

  • npm 的三个独立组成部分
    • 网站:查找包、设置参数、管理 npm 使用体验的主要途径
    • 注册表:存储包信息
    • CLI:终端应用

npm 包管理

  • npm 包可以分为是否全局安装
    • 全局安装:适合安装命令行工具包
      • 位于 /user/localNode.js 安装目录
    • 局部安装(缺省):适合安装包依赖,且包通过 Node.jsrequire 加载
      • 位于当前目录 node_modules 目录下
    • 全局安装和局部安装互相独立
      • 若同时需要命令行、包依赖,则应分别安装或使用 npm 链接
    • 为避免污染全局环境,以下方式可以用于局部安装命令行
      • npx 包(命令):查找 noode_modules 中局部安装包
      • alias 设置别名:添加 PATH=<bin-dir>:$PATH <cmd> 别名,即每次为命令执行设置环境变量

输入命令

  • install:安装

    • -g:全局安装
    • --save:维护 package.json 中依赖项
    • --save-dev:维护 package.json 中开发依赖项
  • uninstall:卸载

    • -g:卸载全局安装包
    • --save:维护 package.json 中依赖项
    • --save-dev:维护 package.json 中开发依赖项
  • update:更新

    • -g:更新全局安装包
  • outdated:检查版本

    • -g:检查全局安装包
    • --depth=<num>:检查深度

输出命令

  • whoami
  • publish:发布包

npm 配置

  • config:更新、修改用户或全局 npmrc 文件

npm 配置文件

npm 用户配置文件

.npmrc

1
2
3
4
repository=<repo-URL>
init.author.email=
init.author.name=
init.license=
  • .npmrcnpm 用户配置文件,缺省为 ~/.npmrc
    • 指定 npm 本身配置:包仓库地址、用户信息

.npm-init.js

1
2
3
4
5
6
7
8
// 直接设置键值对
module.exports = {
"<custom-field>": "<field-value>",
"<custom-field>": "<field-value>",
}
// 通过 `prompts` 函数交互式设置键值对
module.exports = prompts("<Question 1>, "<Field>")
)
  • .npm-init.js:用户包初始化配置文件,缺省为 ~/.npm-init.js
    • 设置 package.json 生成内容

环境变量

  • NPM_CONFIG_PREFIX:全局包安装地址

npm 包配置文件

包配置文件

package.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
"name": "<package-name>",
"version": "<semantic-version>",
"description""",
"main": "index.js",
"scripts": {
"tests": "echo \"Error:\" && exit 1"
},
"repository": {
"type": "git",
"url": "<URL>"
},
"keywords": [ ],
"author": "<author-name>",
"license": "<license-name>",
"bugs": {
"url": "<URL>"
},
"homepage": "<URL>"
// 以上为 `npm init` 默认生成内容
"dependencies": {
"<dep-named>": "<dep-version>",
"<dep-named>": "<dep-version>"
},
"devDependecies": {
"<dev-only-dep-named>": "<dep-version>",
"<dev-only-dep-named>": "<dep-version>"
}
}
  • package.json:局部包管理文件,位于当前包目录

    • 列出包依赖
    • 语义化 管理包版本
    • 方便迁移
  • 创建:npm init [--yes] 初始化包即默认生成 package.json

    • 包含字段可通过 .npm-init.js 设置
    • 字段值大部分为空,除非可从 npm 用户配置文件 init 字段中获取
  • 字段说明

    • name:可用 @<scope>/ 为包设置域名,方便组织相关包
    • version:应遵守语义化版本规则
    • dependencies:包依赖,安装、卸载时 --save 标志会自动维护
    • devDependencies:开发时包依赖,安装、卸载时 --save-dev 标志会自动维护

互联网数据

email

json

  • json 模块一般只能序列化 listdict,及其衍生类型
  • py37dict 序列化不保证顺序,除非显式使用 collections.OrderedDict

mailcap

mailbox

mimetypes

base64

binhex

binascii

quopri

uu

Shell 应用程序

包管理

apt

  • install
  • update
  • remove
  • autoremove
  • clean

rpm

yum

说明

  • yum在不使用yum makecache手动检查源配置文件时,可能 很长时间都不会更新cache,也就无法发现软件仓库的更新 (当然,可能和仓库类型有关,使用ISO镜像作为仓库时如此, 即使不挂载镜像,yum在执行其他操作也不会发现有个仓库无法 连接)

dpkg

zypper

pacman

库、依赖

ldconfig

创建、查看动态链接库缓存

  • 根据/etc/ld.so.conf文件中包含路径,搜索动态链接库文件 ,创建缓存文件/etc/ld.so.cache

  • 默认包含/lib/lib64/usr/lib/usr/lib64, 优先级逐渐降低,且低于/etc/ld.so.conf中路径

参数

  • 生成动态链接库缓存,并打印至标准输出
  • -v/--verbose:详细版
  • -n:仅扫描命令行指定目录
  • -N:不更新缓存
  • -X:不更新文件链接
  • -p:查看当前缓存中库文件
  • -f CONF:指定配置文件,默认/etc/ld.so.conf
  • -C CACHE:指定生成缓存文件
  • -r ROOT:指定执行根目录,默认/(调用chroot实现)
  • -l:专家模式,手动设置
  • -f Format/--format=Format:缓存文件格式
    • ld:老格式
    • new:新格式
    • compat:兼容格式

ldd

查看程序所需共享库的bash脚本

  • 通过设置一系列环境变量,如LD_TRACE_LOADED_OBJECTSLD_WARNLD_BIND_NOWLD_LIBRARY_VERSIONLD_VERBOSE

  • LD_TRACE_LOAD_OBJECTS环境变量不空时,任何可执行程序 运行时只显示模块的依赖,且程序不真正执行

  • 实质上是通过ld-linux.so实现

    1
    2
    3
    $ /lib/ld-linux.so* --list exe
    $ ldd exe
    // 二者等价
    • ld-linux.so*参见cppc/func_lib.md

参数

  • -v:详细模式
  • -u:打印未使用的直接依赖
  • -d:执行重定位,报告任何丢失对象
  • -r:执行数据、函数重定位,报告任何丢失的对象、函数

打印

  • 第1列:程序动态链接库依赖
  • 第2列:系统提供的与程序需要的库所对应的库
  • 第3列:库加载的开始地址
  • 首行、尾行可能是两个由kernel向所有进程都注入的库

strings

查看系统glibc支持的版本

objdump

查看目标文件的动态符号引用表

Shell 系统监控

系统监控

scar

收集、报告、保存系统活动信息

iostat

报告CUP统计数据,设备、分区输入/输出信息

iotop

I/O监控

mpstat

报告CPU相关统计数据

vmstat

报告虚拟内存统计

tload

加载显示系统平均负载、指定tty终端平均负载

time

显示资源资源使用时间

uptime

显示系统已运行时间

ipcs

提供IPC设施信息

ipcrm

删除消息队列、信号量集、共享内存ID

lslk

列出本地锁

Linux 进程调度命令

进程管理

ps

查看当前进程瞬时快照

top

显示当前正在运行进程(动态更新)

  • 按照使用内存大小排序,可以用于查找内存使用情况

pgrep

按名称、属性查找进程

pidof

根据进程名查找正在运行的进程进程号

kill

终止进程

killall

按名称终止进程

pkill

按名称、属性终止进程

timeout

在指定时间后仍然运行则终止进程

wait

等待指定进程

fuser

显示使用指定文件、socket的进程

pmap

报告进程的内存映射

lsof

列出打开的文件

chkconfig

为系统服务更新、查询运行级别信息

作业

&

放在命令之后,命令后台执行

1
2
3
$ ./pso > pso.file 2>&1 &
# 将`pso`放在后台运行,把终端输出(包括标准错误)
# 重定向的到文件中

nohup

不挂起job,即使shell退出

1
2
3
4
$ nohup ./pso > pso.file 2>&1 &
# 不挂起任务,输出重定向到文件
$ nohup -p PID
# 不挂起某个进程

jobs

列出活动的作业

-l:返回任务编号、进程号

bg

恢复在后台暂停工作的作业

1
2
$ bg %n
# 将编号为`n`的任务转后台运行

fg

将程序、命令放在前台执行

1
2
$ fg %n
# 将编号为`n`的任务转前台运行

setsid

在一个新的会话中运行程序

1
2
3
4
$ setsid ./test.sh &`
# 新会话中非中断执行程序,此时当前shell退出不会终止job
$ (./test.sh &)
# 同`setsid`,用`()`括起,进程在subshell中执行

`disown

1
2
3
$ disown -h %job_id
# *放逐*已经在后台运行的job,
# 则即使当前shell退出,job也不会结束

screen

创建断开模式的虚拟终端

1
2
3
4
5
6
$ screen -dmS screen_test
# 创建断开(守护进程)模式的虚拟终端screen_test
$ screen -list
# 列出虚拟终端
$ screen -r screen_test
# 重新连接screen_test,此时执行的任何命令都能达到nohup

快捷键

  • <c-z>:挂起当前任务
  • <c-c>:结束当前任务

Linux 归档、压缩

归档、压缩

tar

多个文件保存进行归档、压缩

gzip

压缩、解压缩gzip文件

gunzip

解压缩gzip文件

zcmp

调用diff比较gzip压缩文件

unzip

解压缩zip文件

zip

压缩zip文件

zcat

查看zip压缩文件

zless

查看zip压缩文件

zipinfo

列出zip文件相关详细信息

zipsplit

拆分zip文件

zipgrep

在zip压缩文件中搜索指定字符串、模式

zmore

查看gzip/zip/compress压缩文件

rpm2cpio

将rpm包转变为cpio格式文件,然后可以用cpio解压

1
$ rpm2cpio rpm_pkg | cpio -div

Linux 网络接口命令

网络

ping

向被测试目的主机地址发送ICMP报文并收取回应报文

  • -c:要求回应的次数
  • -i:发送ICMP报文时间间隔
  • -R:记录路由过程
  • -s:数据包大小
  • -t:存活数值(路由跳数限制)

ifconfig

显示、设置网络

  • netmask:设置网卡子网掩码
  • up:启动指定网卡
  • down:关闭指定网络设备
  • ip:指定网卡ip地址

netstat

显示与网络相关的状态信息:查看网络连接状态、接口配置信息、 检查路由表、取得统计信息

  • -a:显示网络所有连接中的scoket
  • -c:持续列出网络状态
  • -i:显示网络界面信息表单
  • -n:直接使用IP地址而不是主机名称
  • -N:显示网络硬件外围设备号连接名称
  • -s:显示网络工作信息统计表
  • -t:显示TCP传输协议连接状况

route

查看、配置Linux系统上的路由信息

traceroute

跟踪UDP路由数据报

  • -g:设置来源来路由网关
  • -n:直接使用IP地址而不是主机名称
  • -p:设置UDP传输协议的通信端口
  • -s:设置本地主机送出数据包的IP地址
  • -w:超时秒数(等待远程主机回报时间)

Grub

Grub

/etc/sysconfig/grub

GRUB配置文件,实际上是/etc/default/grub的软连接

系统日志

/var/log

  • bootstrap.log:系统引导相关信息
  • cron:系统调度执行信息
  • dmesg:内核启动时信息,包括硬件、文件系统
  • maillog:邮件服务器信息
  • message:系统运行过程相关信息,包括IO、网络
  • secure:系统安全信息