零散的linux使用笔记
开一个坑整理linux的奇妙命令
kill -s 9 $pid # 强行停止
ps -aux #显示所有进程
watch -n 0.1 [exec] #间隔0.1s运行exec显示输出
chmod -R #对所有子文件夹chmod
nohup [command] & #将指令放在后台运行
~/.bash_history #bash历史,向下为更新
file [file] #查看文件信息
ln -s $SOURCE_DIR $TAR_DIR #创建软链接
pstree [username] #查看进程树
sudo netstat -tulpn #查看开放端口(t:tcp,u:udp,l:listening socket,p:pid and name, n:numerical address)
ls -d .v* #所有符合表达式的文件
ls -d .v*/ #所有符合表达式的目录
ls -Sl #按文件大小排序
[exec] >> [file] #追加输出
[exec] > /dev/null #抛弃输出
find [path] -name "*.c" #按文件名查找目录
find [path] -name "*.c" -exec grep "str" {} + #查找目录下指定文件名的文件中包含的字符串str
env #查看目前环境变量
sudo systemctl start [service] #启动服务
readlink [file] #读取符号链接file的指向,-f 递归查找直到实际文件
dmesg #查看ring message 信息,包含开机信息及异常信息
nl [file] #将文件每行前添加行号,并输出
apropos [func] #查找man page
lsof [file] #查看打开文件的进程
lsof -t [file] | xargs kill -9 #kill所有打开文件file的进程
wall "[message]" #向所有用户终端发送信息 message
wget -e "https_proxy=127.0.0.1:10987" [url] #wget使用代理
cloc #统计目录代码行数
$LD_LIBRARY_PATH #动态链接库.so搜索路径
ldd [a.so] #查看动态链接库链接信息
-L$PATH -I$PATH #编译时指定额外lib和include路径
[command] 2> [file] #重定向错误输出流
[command] | tee [file] #输出到屏幕,同时追加到 file
[command] 2>&1 #错误流合并到输出流
c++filt [_ZN4llvm3sys22getDefaultTargetTripleEv] #找到一段name mingling对应的函数名
gdb -c [core dump] [exec] #gdb调试core dump的文件
nm {--demangle} [sample.o] #列出object file中的symbol (T: 强符号, W: 弱符号)
strings [exec] #列出elf中可见字符串
ltrace [./exec] #输出library函数调用
strace [./exec] #输出system函数调用
strace [./exec] | grep /lib #查看共享库调用
grep -A [n] "str" [file] #在file中查找"str",并输出每次出现后四行
#grep -v : 反向搜索, -r : 递归搜索, -E : 支持扩展表达式(允许 |, [], + 等)
grep -r [str] [dir] #递归搜索 dir 中所有包含 str 内容的文件
- 列表项目
grep -nr [str] [dir] #递归搜索 dir 中所有包含 str 内容的文件,并显示行号
unset HOME #删除环境变量
readelf -h [file] | grep Machine #查看elf架构
硬件相关
df -hT #所有硬盘使用情况 T:查看分区格式
fdisk -l #查看硬盘分区
du -h --max-depth=1 #当前目录空间情况
mkfs -t [type(xfs ext2...)] [disk(/dev/sdb1...)] #格式化磁盘disk至type
free -mh #查看内存信息
lspci -v -s [device id] #查看设备详细信息
lscpu #查看cpu信息
#NUMA : Non Uniform Memory Access
numactl -H #查看CPU内存
numactl -m 1 [application] #bind memory到numa node1
/sys/devices/system/cpu #CPU详细信息
blkid #查看设备UUID
free #查看内存占用
stat [file] #查看文件详细信息
nvidia-smi topo -m # 查看 GPU 之间连接以及 cpu 亲和性
taskset -c 1 ./temp # 绑核1运行
sudo lshw -class display # 查看所有显卡信息
#lshw 是个神奇命令,可以看很多硬件信息
lstopo #查看内存缓存架构和PCIe拓扑,来自hwloc
sudo ipmitool sensor #查看 ipmi sensor 状态,包括风扇转速,GPU温度等
系统相关
who am i #查看当前所处终端
ulimit -s #查看系统栈限制
ulimit -c [unlimited] #设置内核转储文件限制
ulimit -a #查看所有限制
pstree [user] -a # 查看用户 user 所有进程以及命令
/proc/sys/kernel/printk
设置输出参数的优先级
hpc相关
clush #批量操作集群
clush -w node01,node02,node03 [command]
clush -w node[01-10] [command]
编辑 /etc/clustershell/groups 创建 clush 分组 :
compute: node[01-10]
使用分组:
clush -w @compute [command]
vim
colors evening #更换主题
$ #句尾
^ #句首
H #当前页面首部
L #当前页面尾部
gg #文首
G #文末
:vsp xx.cpp #竖向分栏
:vertical res 20 #调整竖向分栏高度
:sp xx.cpp #水平分栏
:res 20 #调整水平分栏高度
<ctrl + w> + <up/down/left/right> #切换分栏
<ctrl + w> + c #关闭分栏
:set paste #粘贴模式(无自动换行)
:set nopaste #关闭粘贴模式
:set expandtab #tab使用空格
:set tabstop=4 #tab大小为4
:!<command> #执行命令
20 [enter] | [enter] 跳转至指定列
:command 查看所有指令
:verb command [command] 搜索command
查找替换:
:{作用范围}s/{目标}/{替换}/{替换标志}
作用范围:%
全文 ,5,12
5到12行
替换标志:g
全部替换, ``
shell
执行一个.sh
时会在一个新的shell中执行,执行结束后关闭新shellexport
命令修改当前shell参数~/.bashrc
中脚本在启动每一个bash时运行echo
打印
export PATH=/usr/local/cuda-8.0/bin:$PATH #加入PATH
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH #加入动态链接
source xx.sh #在当前shell中执行
export #不带参数export显示所有变量
env #查看环境变量和 shell 函数
find $DIR -name "name" #在目录$DIR下查找名字为name的文件/文件夹,"name"可为reg
locate {-r} [name] #在数据库中查找带有name的文件,-r:使用正则
lsb_release -a #查看系统版本
uname -a #查看系统版本
hostnamectl #查看系统版本
cat /etc/issue #查看系统版本
cat /etc/redhat-release #红帽系列系统版本
./configure --prefix=$HOME/local #更改程序安装位置
which gcc #查看程序安装位置
cut -c8- #保留每行从第8个字符开始部分
lspci
查看PCI bus上的devices
slurm
sinfo #状态信息
squeue #任务队列
srun -n 1 <executable> #执行程序(使用1个进程)
pip
pip install --user
为当前user installpip install --upgrade
升级包
cmake
-D<option>=true
增加参数
c++
g++ [01.cpp] -S
生成.s汇编代码
gdb
info reg
寄存器信息b [函数名]
函数处断点p/[格式] <variable>
:x
:16进制 d
:十进制 u
:无符十进制 o
:八进制 t
:二进制 a
:地址 c
:字符 f
:浮点小数 s
:字符串c [次数]
遇到指定次断点后暂停command [breakpoint id]
添加当执行到断点时执行的命令 (添加silent
不会显示在断点的暂停信息)
break foo if x>0
commands
silent
printf "x is %d\n", x
cont
end
info b
查看断点信息
定义变量:set $i=0
help [command]
显示帮助i r eip ebp
显示寄存器eip ebpfr [id]
(frame)将状态转移到第id帧info fr [id]
更详细帧id内容
ps -C [exec] -o pid h
查看应用进程pidgdb pw.x -p [pid]
调试指定进程
spack && 包管理
spack 使用时应保证环境干净,特别是 $PATHspack load /[hash]
以hash加载module avail
已经安装的modulespack find
查看所有已安装的包spack find --loaded
查看已经加载的包spack find -ldv [package]
查看已安装的 [package] 包spack find
-l
显示 hash, -f
显示compiler flag,-d
显示 dependency, -p
显示安装路径spack spec [package]
查看包编译选项spack info [package]
查看包所有版本及选项等spack compilers
查看spack所有可用编译器spack edit [package]
编辑包命令,可以查看所有版本spack install -v cuda@10.1.243
安装指定版本包spack list [str]
显示所有包括 str 的 packagespack install [package]@[version]~[disable options]+[enable options] ^[dependcies]/[hash] %[compiler]
cflags=[], 支持 cppflags, cflags, cxxflags, fflags, ldflags, ldlibs 等参数spack versions [package]
查看包的所有版本spack graph --dot [package] | dot -Tpng > [file.png]
生成 package 的依赖图,输出到 file.pngspack config edit compilers
编辑 configspack location -i [package]
包的安装位置
spack activate [env] #激活环境
spack remove [package] #从当前环境中删除包
spack concretize #处理依赖
apt-cache show [package]
查看 apt 包详细信息
module
module avail [package_name]
查看已有 modulemodule show [package_name]
查看包执行的操作
shell
num=10 #变量
`seq $num` #1,2,...num数列
for i in `seq $num`; do <...>; done