0%

Linux Memo

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

打包压缩

打包压缩的时候,忽略指定文件

1
tar zcvf files.tar.gz -X exclude.txt files/

打包的同时删除文件

1
tar cvf tarname.tar dir --remove-files

按用户统计内存占用

1
ps hax -o rss,user | awk '{a[$2]+=$1;}END{for(i in a)print i" "int(a[i]/1024+0.5);}' | sort -rnk2

把控制台的输出同时输入到文件

1
program [parmas] 2>&1 | tee file.log

2>&1 的意思是把 channel 2(stderr) 中的内容输出到 channel 1(stdout) 中。

iostat

每隔 1s 输出结果

1
iostat 1 -h

configure 编译

使用自定义的库和头文件目录,并且自定义安装位置

1
CFLAGS="-I/path/to/your/headers" LDFLAGS="-L/path/to/your/lib" ./configure --prefix=/home/users/yushu.gao/local/

parallel 命令实现简单的并发

command 需要传入多个参数,在 file.txt 中的每一行是一次命令的参数,--colsep ' ' 表示用空格分隔不同的命令选项, {1} {2} 分别表示传入选项的占位信息。

1
parallel --colsep ' ' command {1} {2} :::: file.txt

command 只有一个参数的情形

1
parallel -a file.txt command

按照进程名字 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@IP:PORT/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
emacs --daemon

停止服务

1
emacsclient -e '(kill-emacs)'

服务模式下启动

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

Spacemacs

solarized 主题问题

建议不要设置主题,直接使用 terminal 的主题,如遇到问题,参考 官方 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

常用命令

使用 256 色

1
tmux -2

新建一个 session

1
tmux new -s name

attach 到一个指定的 session 上面

1
tmux attach -t name

Web 端浏览代码

有了 vscode 之后,这个方法没有存在的必要了。
OpenGrok 是一个在 web 端浏览代码的利器。在使用之前首先要部署。
OpenGrok 是使用 Java 写的,所以,首先要安装 Java. 而要想使用 Web 服务,还要安装网络服务。例如 tomcat8

安装网络服务

1
sudo apt install tomcat8

下载并解压 OpenGrok

下载地址

部署

1
sudo ./bin/OpenGrok deploy

创建项目

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

npm 连接错误

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

1
2
sudo ufw disable
sudo ufw enable

cscope 使用方法

有了 vscode 之后这个方法没有必要了。
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 环境变量设置是一致的。

自动增量备份

1
2
# 增量备份
rsync -r /home/luban/workspace/ /nfs/project/gaoyushu/workspace/

crontab 配置:backup.tab

1
0 1 * * * /usr/bin/rsync -r /home/luban/workspace/ /nfs/project/gaoyushu/workspace/

crontab 参考资料:crontab

解决不能输入中文的问题

Ubuntu 输入

1
sudo locale-gen zh_CN.UTF-8

CentOS 输入

1
localedef -c -f UTF-8 -i en_US en_US.UTF-8

然后修改环境变量 LANG 与本地相同

取消 sudo 名利每次都要输入密码

1
sudo visudo

然后在打开的文件的末尾加入:

1
username     ALL=(ALL) NOPASSWD:ALL

让 Ubuntu 记住 ssh key 的 password phase

使用 keychain 解决

1
2
sudo apt install keychain

然后在 shell 配置文件种加入一下配置,而且必须是 shell 的配置文件,在.profile中加入不生效

1
2
keychain id_rs id_rsa
source ~/.keychain/`uname -n`-sh

autossh 实现反向代理

1
autossh -p 26170 -M 26500 -o "PasswordAuthentication=no" -NfR 26501:127.0.0.1:22 root@ip

conda 镜像源

1
2
3
4
5
6
7
8
# $HOME/.condarc
channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
- defaults
show_channel_urls: true