Linux Memo

Linux 平台在使用过程中经常会有一些非日常使用的命令或者小工具, 但是, 这些命令和工具往往是提升工作效率的利器, 这里会不断总结和更新工作中使用的这些命令和工具. 另外, 一些比较”重”的工具, 例如 git, nginx, gcc 等在其内容增长到一定程度的时候为方便浏览会单独开一篇.

Linux 简单命令

按照进程名字 kill

一种方法是使用 pkill, 但是, 有时候 pkill 不好使, 还是用最原始的方法吧

1
ps -ef | grep "name" | awk '{print $2}' | xargs kill -9

防火墙

允许访问某个端口

1
sudo ufw allow $PORT

计算 SHA-1, MD5 等信息

这些内容统统都可以借助 OpenSSL 来计算. 方法如下:

1
openssl dgst -sha256 FILE

其它类型对应的参数如下:

1
2
3
4
5
6
7
8
9
10
11
MESSAGE DIGEST COMMANDS
md2 MD2 Digest
md5 MD5 Digest
mdc2 MDC2 Digest
rmd160 RMD-160 Digest
sha SHA Digest
sha1 SHA-1 Digest
sha224 SHA-224 Digest
sha256 SHA-256 Digest
sha384 SHA-384 Digest
sha512 SHA-512 Digest

修改文件夹的权限

1
chown -R user:group FILE

同步两台机器文件

1
2
# 把 fold 目录下的文件全部同步到当前目录下如果 fold 后面不加/,那么,会把 fold 目录和 fold 目录整个同步到当前目录下
rsync -av -C -e ssh user@10.88.1.245:/path/to/fold/ ./

多线程下载

1
2
# num 是并发连接的个数, url 是连接的地址
aria2c -x num url

结束同一个程序的多个实例

1
for pid in $(ps -ef | awk '/some-search/ {print $2}'); do kill -9 $pid; done

pkill 按照名称 pattern kill 掉

1
pkill -f pattern

把一段内存空间开辟为硬盘使用

1
2
# size 是表明最大的空间, 系统并不会立刻分配 32G 内存, 而是最大可以使用 32G 内存. data/ 是这部分内存要挂载到的目录
mount tmpfs data/ -t tmpfs -o size=32G

GCC

编译选项

如果编译的代码是在本地使用, 总是在编译阶段使用 -march=native 去编译.

1
-march=native

Emacs

以服务的方式启动

  1. 开启服务

    1
    emacs --daemon
  2. 停止服务

    1
    emacsclient -e '(kill-emacs)'

服务模式下启动

1
2
3
4
# Terminal 模式
emacsclient -t
# UI 模式
emacsclient -c

Spacemacs

solarized 主题问题

参考 官方 issue
.spacemacsdotspacemacs/user-config中配置以下内容

1
2
;; Colortheme fix in terminal
(custom-set-faces (if (not window-system) '(default ((t (:background "nil"))))))

解决安装启动之后卡死问题

参考 FAQ
原因: Helm 使用了 Tramp, Tramp 在启动的时候会检查 SSH/DNS 的设置. 其根本原因是 ISP redirect non-existing addresses to their own servers. 解决方法是在 .spacemacsuser-init 部分增加下面的配置信息

1
2
(setq tramp-ssh-controlmaster-options
"-o ControlMaster=auto -o ControlPath='tramp.%%C' -o ControlPersist=no")

或者直接在 ~/.ssh/config 中配置:

1
2
3
4
Host *
ControlMaster auto
ControlPath ~/.ssh/master -%r@%h:%p
ControlPersist = no

NVIDIA 显卡

到目前为止的使用经验表明, 最好还是使用官方自带的显卡源. 更稳定

安装源里提供的驱动

1
2
3
4
5
6
7
# 移除显卡驱动
sudo apt-get purge nvidia-*
# 添加第三方 repository
sudo add-apt-repository ppa:graphics-drivers/ppa
# 更新源 && 安装对应版本的驱动
sudo apt-get update
sudo apt-get install nvidia-version

手动安装显卡

过程比较简单, 官网下载显卡驱动文件, *.run 结尾的. 然后运行该文件

内核升级后导致显卡驱动失效的解决办法

  1. 切换到 /usr/src/ 目录下, 会看到该目录下有各种内核文件的源代码和一个 NVIDIA 显卡驱动的文件夹. 该文件夹的命名方法为 nvidia-version, 例如, nvidia-367.44. 这个命名方式很重要, 后面会用到.
  2. 使用 dkms rebuild 该驱动
  3. 使用 dkms install 该驱动

例如:

1
2
3
cd /usr/src/
dkms build -m nvidia -v 367.44
dkms install -m nvidia -v 367.44

tmux

常用命令

  1. 使用 256 色

    1
    tmux -2
  2. 新建一个 session

    1
    tmux new -s name
  3. attach 到一个指定的 session 上面

    1
    tmux attach -t name

Web 端浏览代码

OpenGrok 是一个在 web 端浏览代码的利器. 在使用之前首先要部署.
OpenGrok 是使用 Java 写的, 所以, 首先要安装Java. 而要想使用 Web 服务, 还要安装网络服务. 例如 tomcat8

  1. 安装网络服务

    1
    sudo apt install tomcat8
  2. 下载并解压 OpenGrok
    下载地址

  3. 部署

    1
    sudo ./bin/OpenGrok deploy
  4. 创建项目

    1
    sudo ./bin/OpenGrok index ~/path/to/project

npm 连接错误

需要关闭防火墙之后再安装 package, Ubuntu 关闭和打开防火墙的方法:

1
2
sudo ufw disable
sudo ufw enable

cscope 使用方法

cscope 是 linux 环境下支持跳转的源码阅读工具, cscope 可以单独使用也可以配合 emacs/vim 使用. 首先要安装 cscope

1
sudo apt install cscope

定义 cscope 要使用哪些文件建立 index, 例如:

1
find . -name "*.c" -o -name "*.cpp" -o -name "*.h" -o -name "*.hpp" > cscope.files

建立相应的数据库:

1
cscope -R -b -i cscope.files

或者使用所有的文件建立 index:

1
cscope -R

之后就可以进入 cscope 的交互页面进行操作了:

1
cscope -d

退出交互页面的快捷键是ctrl+d
在 spacemacs 中是集成了 cscope 功能, 直接加入 cscope layer 就可以了

spacemacs+tmux+macOS+iterm

这里主要是要解决在Ubuntu系统上,spacemacs 在运行daemon模式时,python mode 显示不正常的问题。

1
2
3
4
5
6
# 编译安装 ncurses-6, 默认编译选项会出错,需要做些调整, 参考https://stackoverflow.com/questions/37475222/ncurses-6-0-compilation-error-error-expected-before-int
wget http://ftp.gnu.org/gnu/ncurses/ncurses-6.0.tar.gz
./configure CPPFLAGS="-P"
# 编译安装最新版tmux 2.6+
# 在 .zshrc 中配置:
export TERM=xterm-256color

使用tmux之后powerline symbol不能显示

首先确认 symbol 字体是安装了的
然后保证本地和远端的 LANG 环境变量设置是一致的。