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
| 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
|
防火墙
允许访问某个端口
计算 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
| rsync -av -C -e ssh user@IP:PORT/path/to/fold/ ./
|
多线程下载
结束同一个程序的多个实例
1
| for pid in $(ps -ef | awk '/some-search/ {print $2}'); do kill -9 $pid; done
|
pkill 按照名称 pattern kill 掉
把一段内存空间开辟为硬盘使用
1 2
| mount tmpfs data/ -t tmpfs -o size=32G
|
GCC
编译选项
如果编译的代码是在本地使用,总是在编译阶段使用 -march=native
去编译。
Emacs
以服务的方式启动
开启服务
停止服务
1
| emacsclient -e '(kill-emacs)'
|
服务模式下启动
1 2 3 4
| emacsclient -t
emacsclient -c
|
Spacemacs
solarized 主题问题
建议不要设置主题,直接使用 terminal 的主题,如遇到问题,参考 官方 issue
在 .spacemacs
的 dotspacemacs/user-config
中配置以下内容
1 2
| (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. 解决方法是在 .spacemacs
的 user-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-*
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update sudo apt-get install nvidia-version
|
手动安装显卡
过程比较简单,官网下载显卡驱动文件,*.run
结尾的。然后运行该文件
内核升级后导致显卡驱动失效的解决办法
- 切换到
/usr/src/
目录下,会看到该目录下有各种内核文件的源代码和一个 NVIDIA 显卡驱动的文件夹。该文件夹的命名方法为 nvidia-version
, 例如,nvidia-367.44
. 这个命名方式很重要,后面会用到。
- 使用
dkms
rebuild 该驱动
- 使用
dkms
install 该驱动
例如:
1 2 3
| cd /usr/src/ dkms build -m nvidia -v 367.44 dkms install -m nvidia -v 367.44
|
tmux
常用命令
使用 256 色
新建一个 session
attach 到一个指定的 session 上面
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
定义 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:
之后就可以进入 cscope 的交互页面进行操作了:
退出交互页面的快捷键是ctrl+d
在 spacemacs 中是集成了 cscope 功能,直接加入 cscope
layer 就可以了
spacemacs+tmux+macOS+iterm
这里主要是要解决在 Ubuntu 系统上,spacemacs 在运行 daemon 模式时,python mode 显示不正常的问题。
1 2 3 4 5 6
| wget http://ftp.gnu.org/gnu/ncurses/ncurses-6.0.tar.gz ./configure CPPFLAGS="-P"
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
| 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
| 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
|