Linux Command

宋乐
宋乐 2017年07月30日

通用 Command

搜索

命令 作用
find .xargs ¦ grep -ri "strname" 搜索当前目录所有文件是否包含某个字符串
netstat -tlnp 查看端口
ln -s a/b /usr/local/bin 添加 b 命令到环境变量
sudo passwd [ username ]修改 root 和普通用户密码

环境变量详解

Vim

  • 强制保存
:w !sudo tee %

Linux 守护进程(daemon【node 可用 PM2 框架】参考 1 参考 2 阮一峰

由来:

启动一个基于 node 的简单 http 服务器

  • 脚本代码
//server.js
var http = require('http');
http.createServer(function(req, res) {
 res.writeHead(200, {'Content-Type': 'text/plain'});
 res.end('Hello World');
}).listen(5000);

前台任务(foreground job)与后台任务(background job)

  • 执行以下命令启动脚本
node server.js

这样启动的脚本为 “前台任务”,独占命令窗口,运行完成或手动停止,才能执行其他命令。

node server.js &

这样启动的进程就会成为 "后台任务"。如果要让正在运行的 "前台任务" 变为 "后台任务",可以先按 ctrl + z,然后执行 bg 命令(让最近一个暂停的 "后台任务" 继续执行)。

后台任务特点

  • 继承当前 session (对话)的标准输出(stdout)和标准错误(stderr)。因此,后台任务的所有输出依然会同步地在命令行下显示。
  • 不再继承当前 session 的标准输入(stdin)。你无法向这个任务输入指令了。如果它试图读取标准输入,就会暂停执行(halt)。

SIGHUP 信号

变为 "后台任务" 后,一个进程是否就成为了守护进程呢?或者说,用户退出 session 以后,"后台任务" 是否还会继续执行?
Linux 系统是这样设计的:

  1. 用户准备退出 session
  2. 系统向该 session 发出 SIGHUP 信号
  3. session 将 SIGHUP 信号发给所有子进程
  4. 子进程收到 SIGHUP 信号后,自动退出

这就解释了为什么 "前台任务" 会随着 session 的退出而退出:因为它收到了 SIGHUP 信号。那么,"后台任务" 是否也会收到 SIGHUP 信号?
这由 Shell 的 huponexit 参数决定的。

shopt | grep huponexit//查看huponexit参数的值。

大多数 Linux 系统,这个参数默认关闭(off)。因此,session 退出的时候,不会把 SIGHUP 信号发给 "后台任务"。所以,一般来说,"后台任务" 不会随着 session 一起退出。

disown 命令

通过 "后台任务" 启动 "守护进程" 并不保险,因为有的系统的 huponexit 参数可能是打开的(on)。
更保险的方法是使用 disown 命令。它可以将指定任务从 "后台任务" 列表(jobs 命令的返回结果)之中移除。一个 "后台任务" 只要不在这个列表之中,session 就肯定不会向它发出 SIGHUP 信号。

node server.js &
disown //移出最近一个正在执行的后台任务 [-r|-a|-h][自行查阅]

FTP

参考
https://blog.csdn.net/hitabc141592/article/details/7573950